From 31cf53439507a8bc384d2cfe65032396cb625760 Mon Sep 17 00:00:00 2001 From: janvonrickenbach Date: Sun, 15 Dec 2024 00:44:10 +0000 Subject: [PATCH] DOC: update development documentation cfa2dfdda0237c429f958a054cef690b3eb5acdc --- .../011_rst_workflow.zip | Bin 13497 -> 13497 bytes .../014_cyclic_symmetry_example.zip | Bin 15999 -> 15999 bytes .../005_get_layup_properties_example.zip | Bin 8810 -> 8810 bytes .../010_harmonic_example.zip | Bin 25390 -> 25390 bytes .../099_dpf_composite_failure_workflow.zip | Bin 19701 -> 19701 bytes .../001_failure_operator_example.zip | Bin 10735 -> 10735 bytes .../006_filter_composite_data_example.zip | Bin 22810 -> 22810 bytes .../012_fatigue_example.zip | Bin 16617 -> 16617 bytes ...007_interlaminar_normal_stress_example.zip | Bin 15282 -> 15282 bytes .../004_get_material_properties_example.zip | Bin 10564 -> 10564 bytes .../013_thermal_example.zip | Bin 11257 -> 11257 bytes .../008_assembly_example.zip | Bin 10743 -> 10743 bytes .../009_short_fiber_orientation_tensor.zip | Bin 14278 -> 14278 bytes .../003_short_fiber_example.zip | Bin 11763 -> 11763 bytes .../002_sampling_point_example.zip | Bin 14287 -> 14287 bytes ...glr_001_failure_operator_example_001.vtksz | Bin 3743 -> 3753 bytes ...glr_001_failure_operator_example_002.vtksz | Bin 3748 -> 3738 bytes ...glr_001_failure_operator_example_003.vtksz | Bin 3734 -> 3739 bytes ...sphx_glr_003_short_fiber_example_001.vtksz | Bin 23534 -> 23537 bytes ...sphx_glr_003_short_fiber_example_002.vtksz | Bin 23368 -> 23366 bytes ...sphx_glr_003_short_fiber_example_003.vtksz | Bin 23630 -> 23629 bytes ..._get_material_properties_example_001.vtksz | Bin 3747 -> 3745 bytes ...06_filter_composite_data_example_001.vtksz | Bin 3712 -> 3722 bytes ...06_filter_composite_data_example_002.vtksz | Bin 3763 -> 3757 bytes ...06_filter_composite_data_example_003.vtksz | Bin 3726 -> 3720 bytes ...06_filter_composite_data_example_004.vtksz | Bin 3739 -> 3740 bytes ...06_filter_composite_data_example_005.vtksz | Bin 3720 -> 3715 bytes ...terlaminar_normal_stress_example_001.vtksz | Bin 67534 -> 67526 bytes ...terlaminar_normal_stress_example_002.vtksz | Bin 67674 -> 67672 bytes .../sphx_glr_008_assembly_example_001.vtksz | Bin 4213 -> 4202 bytes .../sphx_glr_008_assembly_example_002.vtksz | Bin 3804 -> 3802 bytes ...9_short_fiber_orientation_tensor_001.vtksz | Bin 23379 -> 23367 bytes ...9_short_fiber_orientation_tensor_002.vtksz | Bin 23540 -> 23533 bytes ...9_short_fiber_orientation_tensor_003.vtksz | Bin 23464 -> 23456 bytes ...9_short_fiber_orientation_tensor_004.vtksz | Bin 23607 -> 23612 bytes ...9_short_fiber_orientation_tensor_005.vtksz | Bin 23696 -> 23684 bytes .../sphx_glr_010_harmonic_example_001.vtksz | Bin 4025 -> 4017 bytes .../sphx_glr_011_rst_workflow_001.vtksz | Bin 3759 -> 3755 bytes .../sphx_glr_012_fatigue_example_003.vtksz | Bin 5269 -> 5258 bytes .../sphx_glr_013_thermal_example_001.vtksz | Bin 40543 -> 40546 bytes .../sphx_glr_013_thermal_example_002.vtksz | Bin 38653 -> 38642 bytes ..._glr_014_cyclic_symmetry_example_001.vtksz | Bin 17965 -> 17953 bytes ..._glr_014_cyclic_symmetry_example_002.vtksz | Bin 15633 -> 15623 bytes ..._glr_014_cyclic_symmetry_example_003.vtksz | Bin 17946 -> 17937 bytes ..._glr_014_cyclic_symmetry_example_004.vtksz | Bin 78952 -> 78941 bytes ...9_dpf_composite_failure_workflow_001.vtksz | Bin 3763 -> 3750 bytes .../sphx_glr_012_fatigue_example_001.png | Bin 33087 -> 35279 bytes .../sphx_glr_012_fatigue_example_003.png | Bin 98199 -> 98126 bytes .../sphx_glr_012_fatigue_example_thumb.png | Bin 22359 -> 24110 bytes .../001_failure_operator_example.rst.txt | 2 +- .../002_sampling_point_example.rst.txt | 2 +- .../003_short_fiber_example.rst.txt | 2 +- ...04_get_material_properties_example.rst.txt | 2 +- .../005_get_layup_properties_example.rst.txt | 2 +- .../006_filter_composite_data_example.rst.txt | 2 +- ...interlaminar_normal_stress_example.rst.txt | 2 +- .../008_assembly_example.rst.txt | 2 +- ...009_short_fiber_orientation_tensor.rst.txt | 2 +- .../010_harmonic_example.rst.txt | 4 +- .../gallery_examples/011_rst_workflow.rst.txt | 4 +- .../012_fatigue_example.rst.txt | 6 +- .../013_thermal_example.rst.txt | 2 +- .../014_cyclic_symmetry_example.rst.txt | 2 +- ...099_dpf_composite_failure_workflow.rst.txt | 2 +- .../sg_execution_times.rst.txt | 46 +- .../dev/_sources/sg_execution_times.rst.txt | 46 +- version/dev/_static/search.json | 12322 ++++++++-------- ...siteModel.get_property_for_all_layers.html | 2 +- ...Model.get_result_times_or_frequencies.html | 2 +- ...yup_info.ElementInfo.dpf_material_ids.html | 2 +- ...dpf.composites.layup_info.ElementInfo.html | 2 +- ...upPropertiesProvider.get_layer_angles.html | 2 +- ...ertiesProvider.get_layer_shear_angles.html | 2 +- ...pertiesProvider.get_layer_thicknesses.html | 2 +- ...sites.sampling_point.SamplingPoint.e1.html | 4 +- ...ites.sampling_point.SamplingPoint.e12.html | 4 +- ...ites.sampling_point.SamplingPoint.e13.html | 4 +- ...sites.sampling_point.SamplingPoint.e2.html | 4 +- ...ites.sampling_point.SamplingPoint.e23.html | 4 +- ...sites.sampling_point.SamplingPoint.e3.html | 4 +- ...nt.SamplingPoint.get_offsets_by_spots.html | 2 +- ....SamplingPoint.inverse_reserve_factor.html | 4 +- ..._point.SamplingPoint.margin_of_safety.html | 4 +- ....sampling_point.SamplingPoint.offsets.html | 4 +- ...int.SamplingPoint.polar_properties_E1.html | 4 +- ...int.SamplingPoint.polar_properties_E2.html | 4 +- ...nt.SamplingPoint.polar_properties_G12.html | 4 +- ...ng_point.SamplingPoint.reserve_factor.html | 4 +- ...sites.sampling_point.SamplingPoint.s1.html | 4 +- ...ites.sampling_point.SamplingPoint.s12.html | 4 +- ...ites.sampling_point.SamplingPoint.s13.html | 4 +- ...sites.sampling_point.SamplingPoint.s2.html | 4 +- ...ites.sampling_point.SamplingPoint.s23.html | 4 +- ...sites.sampling_point.SamplingPoint.s3.html | 4 +- .../001_failure_operator_example.html | 2 +- .../002_sampling_point_example.html | 2 +- .../003_short_fiber_example.html | 2 +- .../004_get_material_properties_example.html | 2 +- .../005_get_layup_properties_example.html | 2 +- .../006_filter_composite_data_example.html | 2 +- ...07_interlaminar_normal_stress_example.html | 2 +- .../008_assembly_example.html | 2 +- .../009_short_fiber_orientation_tensor.html | 2 +- .../010_harmonic_example.html | 4 +- .../gallery_examples/011_rst_workflow.html | 4 +- .../gallery_examples/012_fatigue_example.html | 6 +- .../gallery_examples/013_thermal_example.html | 2 +- .../014_cyclic_symmetry_example.html | 2 +- .../099_dpf_composite_failure_workflow.html | 2 +- .../gallery_examples/sg_execution_times.html | 54 +- version/dev/searchindex.js | 2 +- version/dev/sg_execution_times.html | 54 +- 112 files changed, 6346 insertions(+), 6346 deletions(-) diff --git a/version/dev/_downloads/06082043848dd97eedadd25f3f52c2a3/011_rst_workflow.zip b/version/dev/_downloads/06082043848dd97eedadd25f3f52c2a3/011_rst_workflow.zip index 0229f2ceafce444d06c17dc368ba169ab5439329..51499cd6f5aa67209ec141f68fa4949ae9dc73ab 100644 GIT binary patch delta 47 xcmdm)xigbDz?+#xgaHKFnff>KP8MVCX6oO(Sgc)^87MGW*TfDaFgee}8vr@s4Wa-5 delta 47 xcmdm)xigbDz?+#xgaHJcnff;JP8MT!XX@L$Sgc)^87MGW*TfDaFgee}8vrEZ42}Q* diff --git a/version/dev/_downloads/11ba9ded9a0acf54c4f861149963385c/014_cyclic_symmetry_example.zip b/version/dev/_downloads/11ba9ded9a0acf54c4f861149963385c/014_cyclic_symmetry_example.zip index 7a873d27d324eccddc3177a1084a966a3084ca76..98b1f247e996cc3c5cba38968b6bd9d7621dba19 100644 GIT binary patch delta 47 xcmexg^S_2Sz?+#xgaHKlnff>KrbshSX6oNuBAuqh3>27r*VYpxFj>zgvhI$e+AV(GSF*%&!y;05g&eU;qFB delta 46 wcmaFm^2&ubz?+#xgaHJ!nEE#Ie&A!)X6oC-zgvhI$e+AV(GSF*%&!y;03GfOJOBUy diff --git a/version/dev/_downloads/2481d85388158be8d2f0db2cc842ad6d/010_harmonic_example.zip b/version/dev/_downloads/2481d85388158be8d2f0db2cc842ad6d/010_harmonic_example.zip index 83cc2aa8130d17566eeea6d89e134f790a179768..f9205ea4e460b5bfab900bd19593e9318de4ab33 100644 GIT binary patch delta 49 zcmZ2?jB(vDM&1B#W)=|!5NKlR-^hDLlewL#fAby9-4@J1fyuLyoInDT?z>% diff --git a/version/dev/_downloads/2e65b9281fef6fa6d0079a988272ffd7/099_dpf_composite_failure_workflow.zip b/version/dev/_downloads/2e65b9281fef6fa6d0079a988272ffd7/099_dpf_composite_failure_workflow.zip index 6910903683490562ad3a5b016e6cd4aeccdb8ccb..ee2409a7b87fa66245fbce1d7b1295f0c8b318c8 100644 GIT binary patch delta 49 zcmex5lkw|JM&1B#W)=|!5SYx=zma#BJo7ZB{>`W4D|DEF0+U^R0zd+jXZXYd0CegP Apa1{> delta 49 zcmex5lkw|JM&1B#W)=|!5C~-I+sM01o;j4MZ}Tbn3LR#kz+_jS0Fc1s89uQ9V5bh2 diff --git a/version/dev/_downloads/580520531ccb915b110be66a1df4aa7a/001_failure_operator_example.zip b/version/dev/_downloads/580520531ccb915b110be66a1df4aa7a/001_failure_operator_example.zip index 58ca83b2087ab1d9ba9bbfcfda79961720445d42..5b145c5d871c904184ec041334e6b93135598591 100644 GIT binary patch delta 47 xcmaDK{63gBz?+#xgaHJSnff>K_6ss+GxcwtFSt^i87MH>Thj|9FnNY%H~>8^4XywH delta 47 xcmaDK{63gBz?+#xgaHIZnff;J_6ssAGWBhqFSt^i87MH>Thj|9FnNY%H~=M}40-?n diff --git a/version/dev/_downloads/5f8f78f4df09423299a7c4dc46409314/006_filter_composite_data_example.zip b/version/dev/_downloads/5f8f78f4df09423299a7c4dc46409314/006_filter_composite_data_example.zip index 20c80e179248329f3fa173546a9ea1da1723595c..13124dafd99c13eb363cad3f2e7e09a550ea99af 100644 GIT binary patch delta 49 zcmbQWiE-8@M&1B#W)=|!5GZEq-^d%K#$3wOzd1|ozacYFU~*1`KS*HmzK9qAPHqm@ delta 49 zcmbQWiE-8@M&1B#W)=|!5YT4o+sGTG#;nKGw>eAgzacYFU~*1`KS*HmzK9qAI9Cm| diff --git a/version/dev/_downloads/675f27bf7817e74cb3738ead0ca88ae1/012_fatigue_example.zip b/version/dev/_downloads/675f27bf7817e74cb3738ead0ca88ae1/012_fatigue_example.zip index fa829a2972847b8f364914de84621f0f264fe779..1a0b7f30252e57cbe37d681400331776c4a9f6e5 100644 GIT binary patch delta 49 zcmaFa$oR66kvG7bnMH&F1iG2}H}cv@G50d{Z}ySmP-6xPOb&N&1PM%@?cfIhM2`)b delta 49 zcmaFa$oR66kvG7bnMH&F1l*bWHuBm?F?%ufZT6AkP-6xPOb&N&1PM%@?cfIhFR%=U diff --git a/version/dev/_downloads/8bbdd0639ab75734f24a77c9a3c2b12e/007_interlaminar_normal_stress_example.zip b/version/dev/_downloads/8bbdd0639ab75734f24a77c9a3c2b12e/007_interlaminar_normal_stress_example.zip index 309b97e57ef71e9814ba48a5cda3b0ffe111da33..3c24cc9280566385fbcd74fffadcc2a77ca75ed6 100644 GIT binary patch delta 47 xcmdl~zNwryz?+#xgaHIfnff>K9+zaUWa{61T~a}j87MIMmsJQzU~-^!A^<~#4qN~L delta 47 xcmdl~zNwryz?+#xgaHKfnEE#I9+zY`V(Qy`T~a}j87MIMmsJQzU~-^!A^SbR>v3z?+#xgaHH!nEE&JUKV67V(Q=gSa6LPGf-giB#l6jz~pBdaR5PX4ygbD delta 47 xcmX>SbR>v3z?+#xgaHK9nff;JUKV85V(Q!cSa6LPGf-giB#l6jz~pBdaR4g`4TAsx diff --git a/version/dev/_downloads/a3424d721d24538e13ccae45271a6812/013_thermal_example.zip b/version/dev/_downloads/a3424d721d24538e13ccae45271a6812/013_thermal_example.zip index f000ae5fd2d6fd4069554af481df91f7a60007ea..407b57ef12e5ed25af2abf269628684e5015dcd7 100644 GIT binary patch delta 47 xcmewv{xh66z?+#xgaHJ4nff>K?iFV4XX@X4R(QHNGf-f1y0#-oVDf5hKLA$q4%Gkv delta 47 xcmewv{xh66z?+#xgaHJ+nEE#I?iFVCW$N2}R(QHNGf-f1y0#-oVDf5hKLA2v4aWcg diff --git a/version/dev/_downloads/a803e039e20f8505fa54025987d70490/008_assembly_example.zip b/version/dev/_downloads/a803e039e20f8505fa54025987d70490/008_assembly_example.zip index bebc0b38d32e415fbce22859f1f7c295fd869b13..0a829688b154557286aa5b41a0ba0ea4e93b5e36 100644 GIT binary patch delta 47 xcmew!{5_aAz?+#xgaHI9nff>Kt`uahVd~$!Q*gOBGf-f1vZfPAVDbu0e*jCd4psmF delta 47 xcmew!{5_aAz?+#xgaHJMnEE#It`uZ8W9r+yQ*gOBGf-f1vZfPAVDbu0e*iV;4LAS* diff --git a/version/dev/_downloads/d3956153b87b58f221986b849a6b844b/009_short_fiber_orientation_tensor.zip b/version/dev/_downloads/d3956153b87b58f221986b849a6b844b/009_short_fiber_orientation_tensor.zip index 7e14bb24b079650c1a39a4bf9312ffb6437bb66b..3ef096f32c7bc7ffe2bab3b149cc934876c08b6d 100644 GIT binary patch delta 47 xcmX?>e=MIjz?+#xgaHI26wW*z_%n4D=I3jj084FdoG delta 47 xcmX?>e=MIjz?+#xgaHK1nEE#I{uX1lWa`_@EzY693>26wW*z_%n4D=I3jiI`3*i6& diff --git a/version/dev/_downloads/debbf6c5561a3af44e8fb8a1969f44c3/003_short_fiber_example.zip b/version/dev/_downloads/debbf6c5561a3af44e8fb8a1969f44c3/003_short_fiber_example.zip index d476609239ff7151ea8aaffd569d93234e0a65e1..f31e155bc6a0c451fdb3a0e8757023695d9776d2 100644 GIT binary patch delta 47 xcmewy{W+R9z?+#xgaHKdnEE&J#tAbQF!gWF6MiAd3>26gsp|?7n7mLo2mnB=4c-6% delta 47 xcmewy{W+R9z?+#xgaHIpnff;J#tAd4GxcrG6MiAd3>26gsp|?7n7mLo2mmT547LCO diff --git a/version/dev/_downloads/fad9fc3907e684aecc38368b0126ab34/002_sampling_point_example.zip b/version/dev/_downloads/fad9fc3907e684aecc38368b0126ab34/002_sampling_point_example.zip index b952f9ea07d23cbc246d755beb0725e1e05f191c..a36a10515ab5b723d2d09317346070f8237f4854 100644 GIT binary patch delta 47 xcmX?~e?Ff#z?+#xgaHJynff>K8j3OJG4*eD6nm|}3>28GZ|(sSm|SHZ3IH)Z4Kn}$ delta 47 xcmX?~e?Ff#z?+#xgaHH;nff;J8j3NiGWBhC6nm|}3>28GZ|(sSm|SHZ3IH043<&@L diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_001_failure_operator_example_001.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_001_failure_operator_example_001.vtksz index f034eb94bd5dafbbd0ddc54c61c3d210ddfee701..602732c3bcf6fed5511d5fe588b11e34bf0db0ca 100644 GIT binary patch delta 3693 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 delta 3683 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 N@jkWHpRor3{0H@S2ekkI diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_001_failure_operator_example_003.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_001_failure_operator_example_003.vtksz index e33d0d66a84e580550c558063e9f4225f9e58ec2..622421873295116e2b452cef87cc7dffa75b4151 100644 GIT binary patch literal 3739 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 MXPW-8pacZ}0Sx3O{{R30 literal 3734 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

EyFZ4|OoVmgG>f9@D$HB`9sCRM?WqFu; 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_003_short_fiber_example_002.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_003_short_fiber_example_002.vtksz index 7801fc8592579484a5ef341fe412cfd1a94bb846..06ebefb56cac9ad4d8fbf17df080ac21c2079dfa 100644 GIT binary patch delta 20822 zcma&MdpK0z7e8L9RI2HYlt~wom{9I!DwVF3E-Erfg`^?xa-BJqP`M0I5}6{Y$jBx4 z8FCF7BBNXegTY{onK9RM&i8nK-oNMfd!FAv-{;}%Gkfj5_S*Zb^;&DMy&JyGulqKC z?dcOr3)jt?H*d*2!UFQ8vUj6V%_veEc^>6`|5Dj+Fl1z9u#}I1bSrgq10F%7j8sOQnJIJ_ zUJ&y9k)Ezfoe>|2j8Hdq;$+29e6}KeQqe< zu=y0JjsCwOK&KMR`-MM-RAE&_2Is4IdwDc%o@$rrL!D7Zld8CIbdxr{1GPz&iTt-S zF5kWPVzcN+fGb$->kHQU8WQt;Zgs{GL!$_Z<>}jxai4du9=NU8Z{>0lcY)&B$sJdTMn4kWQ>9|O63qX(8j_Gl8%huX>oc;cJ8uvV>vHvuU&5bhls$9k zbVO)r38MdN(j)1PfBS6Z%hpg)RkGvRfyij7W$i5Xd!r&aFTyUbds`i&5iVR##o!t+OU}XRMN!M&y9!rIq6u_c?n^QVU zo%-?M4QN3~BBI3hrbY9n2Qk9`5%I+p*#*h#h9^0vw;ZDf=HPY-o~nz~4Wf8o?O($y z9TY(9ASHAiyz#xHeoHMabe(*;gD|;Le71LHhROlgFY|p!lGtWb78l(Xce$lNXO#W{KrN5N)6>OeLW-qc+3#jAl-FF0U}nnE_9vM zF}PcB{y)|fR3v}PBKu$PY>3kwx93n1M=-|?Vb+IPHOK5dJV|;y$7~@;6&~@`7t(vFtN%A7AR?V!pvuJH8Jve*MRNON&KCh9k+dI+=h;8y2QN$g2+*+fy+3&j z`vJkE^u2C2S=(2^72G&`k+OZ7%3z*yCGL@$)A3WPuf8i%D(QXHJz-MAhd>2>jeH5O z2&sHtL+|AohViYR0%ff0%h+BE;2?U_y1Jr;kcb3mgwT4ap^PFq@q-j3y-T`C`7Yv% zNEx0aI_~Og77tSy!9qy_A+Kf3#H2i0bAsr`hir`T4Pufmx9Q|1{LMz0(b>-bd(xn2 z$1IO3j{GT+t&!8Gfsl9WmorpnN+{b0qz9L)rlM+m1|V#>ikM^QTuhG{_zwCmSDhjN z%{(&biM(OlihTgJ>M(hknn4exRwRd_NCTK2bgge2q>Xgb@pUesKVheV2bQaLihZ5W zQR;nMiJO_^kJuP?n#?3zg^TpeM%d)iKr9Y0zCpVAOmXuW)VvN%)}1vzJ3;s$Atwz2 zH=n_;bs@rsY_#zW5Sc9VRgSQ+8Lf1)^ zuStQY=#wPCuw@ut8!&>OOi@WpV1a5M8q9&W6WhR_JehqHWvPM-u9_K; zh()4q4i{WABMky{s#xm=@jUu=AAql*_W@feR54*q@hgZacS5WmLSUjD4uYdXXnnZj z{nuo89wQD}82hEpCt)s#Ls;PS9!8D<74T8SP!f|4!eyBfmUS&Kr8`T{?Bb=S!NJd< z$0GNMZJ7<2|Nmb$!;NwXTHT1Q2Eu0QecmYyop%Bu0OmO^TxFO%a8OEbN^HiZG5n=# zi>FC_|10|cEud?PkfQ~VTk#%TEdw|t)t?O62Jpg+AK^&mtS1BC1@y)BVH~ufLN0ii zASS=k<%#!{=`v8HK=?`DIkH6(1=t`!hJfzHs7UL507Lk@!N;{B-r#o%`x>-KRlq5p zR_KPSFo3i5eo|T=eIHOl(GZ}t;JsEy@Kyj8Hz2**Ob_Ek`ogMj&~+m^R`jR=76p~5 zp!H6CutM8O!3t>;uiFjMA3}?P)$l7)n4(>X77z^KSHLo(I$?XffanB8gQEh zW%5IUL>8t_xGe=A1&KLwdO1t$2tELdj<=7>j3V<@2fs>HDCinVq;Cr>2Os167^~Ts z5E}BRGlzL%G%~pcvShkmkcfulIuJ)DneHEFHs0}AkOsJKpP;mAC37m%S!))MSg0Pw# zOpP0&aCq4;=;;fkam0WxbkM2}QL2ylK9njOQ;uKtA73gmsVfLy$mT!3bZ(+pj_~EV z|33@y72k*7*#p;3QRZsepxyWBJJ!RcfXvjV4T>4KYmvGYe-c0@npuvnI~fQ^Nt@*E z8`D4_3Se^~+!`M21}Nw}R$2m>krD&+0@_2WgPwvD)$G~TjpBRYAzdzp7!pNa1#1Fn z36ixLHI$t@phLQR)8kL+XO1hP9R>*r&k>ShZN?Bnf)D9RO^^RTNKmxH3?ab*IHW7G z{eO$Yx*|v9*MG$kU6FeN-~jwvIsmr1B7cPVZ;=N-ahOG)X@s^N|AX+5BM}U>A0st_gZ=6VuYFog76vW8&1|(DtXAF@=^f=_2 z%n)APi+k3t+KXQ^#H#_b%?wJ>>%~AD2z)j}p4nyyT;ydq8Awk@zM}jZq?Ld_4eS^qv$smwkj`^l3w}G0LOTkX5#tn| z5E>60lmeZZ$E0q>r=g1>s*PwiCINQ@zY~a}orb6a^pkPkcIY<%DV+h|RMP9o!OP$) z7SKJCc%8Fd{aFc+2&X=3(v=vT2Uz?=(5gN-T25XCmy*^9kfjlvctlf!OKHz%*AC*D zcn7Q&bdRWwXg58FHKYiWFhy?=t%WzTo|U5BvVBhTfcPMFlyo@+)~f;PGHZ0!bA(}Hjsw37l5;`d0r_S(N`lztHN6}@ zy^6JlqGs?OjYF0d6GefS@Vlf4KL4PXqXlwBm~_Weppd!;*p3+M0QhGPxSrIH=+u>j ze3yS=N$aslyBSOPF|5J^C?5t>Af}jr@TC}QQ>IC`qv&cJ1)WB3R}6!xe1U2k*ej7n zt|GsohXmt3B8zY1rU(;9y8Vj~A~1af!_$f8tM&mg{{jtDoIEGv-a32$&hlTR!Lum0 zpc&F{o?96-nS#7Tq4D$U5Oje_Bvtkttgi` zG0!!*otyhD3_#js{g5Tj%hOJAY540_Q-VEGj$39pEY!}vvbf>$o}e3jKuf}rv0bMw zbsv=8L>kGrS%B`4@2@|4cAHz~E*?2D{>LgZpt^n%C46Q@ zYlT|Bc_d3Cho_-_^o68$ue|%J9~_4G8BOwZhu{>Kq{7H8lv?(A-+KABidclN@9K2V zpk{nuq^3L+xM+~6nr9MpKdxS{=EQVn82|gTuniLBM2DrrY<`%*segvGs#&1#=LVp` z=Q!$A^k>~uYIaOQ+$q3YjfB*&*Vbuld>q~b?;*Kb?V41x8+%9JJwRDq&EjVWRyV#j zPWe?$-$P0`7~U=lpV=Ji$qA*i=jYfD@eEUbSsL$nu{_+#`Isc~&C+TXSCy&!s_*h# z7f}>9zuC7GyBM9396ud;Ht6F&&X~@afdtJQoU{G#{Ayjmx&RHC-zfgURNB~PVU!|6 zi~NUp#z^^>x)NxyKr1F0#n?*p7nN#VYawCCd8L}Bz;XEkzXIh%Rfg+Fdf#eyS-xyq z)#A#Zt7aJyW(QTm&j#5{QSFi96{ZcXcOH4^!K*IM6nZ>A48*D1jk(ee0oluuIl6}I z2hO})4z#nO*Ef*PXAcAKkC`-$y`#0Et&whS&X|wrH;A+&_{*0TEw>HYyCw~ngLFJq zOy4lqA36+Vdmx-!Nuy*vq(i}y`BKm4cwcaGb%fM0@;?f;nk9Ti|GN^I!Sb!6lbvTGv{4JP?V;Ang{UK zkuBOjNtW$*?Dhkr1A$h$HCwnLn>bH;tA~Or2XIE_cY}3%B69m4D_Do^;G$mG(to#w^(9vIJ-$OHK_a|2RSm4wMZsiuniZApQTavuN zCtkJWBgLW~`Bth?%84z?KvSg9*ZK;wSOc<(x3~e>pva)nJ>5fc<4wKNE?f*iM-<3L z+R}h`Lq5Qa8&naFPWhESlMdP->$wwcS9<39zXZ}s1l9VP-E%1fvx3!L0#}evvCY# z?9D}3`4?M+p3RJBtTO?M$5Rml6Dz}a0~Cm1y~HGtdARA+b(3WN%IK5BhlBfK(H|QJ zxT=$!nr|BnnMNB6cG44LTa5*KLV}zf=fX+nqD<~QPeO*SfOS&d}R-~ z6PjCsnFkeb46Ai3RwffvOwWhV?M;bYCV@M5&Op-i_blbuP6pxd5^BAq7f&d3{3&J=!Bd_++Yovia(LGw^c&pV}d<`i4eB30<1EUFGc|tgU)>^QqT5Nw_|G0avJ676#>NKayLuVOo0^I#*niU z7iR+g?%t{*_^PmHD-Q*imXqFrzU7a+4XDlXP|_w%*aNuD*6tpL9Q(mD!sVHXH@sC5 zRAE?ug^G{)2bQOSXI!qo7?{&z%K}L{2U;<_pOTD_W{VGQoBcR3u%M_RBq8pXm{||)r9w@IK zEy<>zUszs0rk;Iep>%hAo8AnhRCyxBg)}B%Rom z?#KpFPyB)`JHMTwS!Whq1-VCgHDh7f#KS4_rZBNBTKZt%{YF?q? zWx12}rp?O@8@Vb%S|F9Kil*~y?p7vQdz9BeDrko^%TdA(TAvT``YO~PStfs;Xa#gjOFdbxk|SQ(f4IOlxm`)N zp^mx|PyGj60B@C~5BJLkXKO`&s+d_<6&ip*G#_$b|E_m3S9F-E(Te%5(2w$8uZi-p zzPH*I7L~wN!0xC-Yno=P%X(?3VnbcoMkZPYpg3d&BSo`|@jakRB?(4iSMULttu3=e zh+gQich)XZsiEBUU?Eu$r*18DoFKSbdHV*o;gwszJeFNBx1M&)iZqk01<2x2>W%{C zx+aq%Wf^y#Z-H%0yG>x5i;Ym{4ob*e^VjXMu(*7bYEu(OuNr$u+g%`D0!BAQLYEH) zUk$lmV%>_jeXjF9~~i0ohM1grl? zwBpTmeX}(NYU>xC#*OmMcA&-Xmw~~+fu+;x?UYdYjoXP;nk%RLJ*{eG>Rg8Ucxb(< z?DS#=yx@KPP=+Y|fH&B>q+@|%`nsz-HI1BJ;YO_b+*XH+oEA;;`-Qoh zHL^SN1ymm(Zj`i8#tynNEt<_?yanP1_CfAzwkIY18~D8#k^S>-`lLD(h*c84O}4&? z_z&(UGDr+>mqg5Z9FVt4`x7*OGCxw(5e}OLRN!*upuR{o1=9)J3f2->45e7yU&4<; z{S5yar~y6VMm4KglQ+(QgC;&9=25rmj1=MS+_8{{Q^>-3F<}9BAz5@Zs=7_!O7^&lMiKeU=6Sc z3}b3sM4RWPdS}-gG}BB*BJ~<0Wo$l8Gw=Sq>l>|T&R?S;*)_JCaDj(uESfC7mx7+M zz4OFR?ow^v-C{&aNJXF>=F6VV*3WJp@|+HuY>~Suh(1B)op<)ra_`w;hQK&YJiP!{ zuz9Zm0cq1JcmOQ2xm} zz7_D+O1}V|N}&5o#=JRnyhs&cBqTJJnaeG_9Ynu8)Br+(qNJ~UI6 zEH1!JMeIl*b206%prPh5XJ9eV1n(=beb}yY33$zu%JzdrajA!z9*sx1RCXWM5aXLQ zUtxBKn6MpLvLG%>gb!;%t?XYkg#@$4hh!#G^e#mozbj%_w(KQOA2aSXPuTe2L=SDR zrV@~i_aKG}`wwyS$zh5Rxed87baG=0T@aVp=;kKBzHJ3;gBtz>Y>N@TPSO0PDUNmbQ zYz9z%qK0)3b{`Dfn4;O(9&vvu2W|8(aa)FYGlh!~wQvcUKgS+gUDq3+bAMQ{;PGPo zm3i3t&KwB1dyV_&U|?O8W;Cj}ugMHBpg!a(v6-7>iAm-ER1C`UPp6uv+cJ%F7|U8H zP03ZFNPb-?v|bx?1#g>;+ZTQ|P_-G})#Gy1ei@D%Eu6)f{i+W5*e)Q-L(c}XI67M} zqm;p;ya$}fQHs+jFeF+vg6RReJg6(uBjhT70s7*ZjsUAKk7&0GSgWUZC8IavZJ<$t z@)5?JJm}tAcT|_+)=?C*eSN)OkQpsTc$%eZN2rpS#%dN3Hjll-S^HRJMzA&ZGpd># z{p~PU!Q`X%H-#Jj0naeQO%O`*C@k@K*=J-E6b_D&4QmEwD^0-OLp72!K>@gVV}SXo zjTo$OG+=^d1iwN@`L~jmwPP~;>!2s;6|>GR9rS0=1NpH#cwxk@9Qy8jos1%zpe^*! zS!>^*uFki;Q+tBjr0=XeD5^|V89EhRaDcvYl$Dw*ajq6D&aQXf1Pnq^oC*)>g4S*U z_<5zbDgv;A+oXTW=TENu)vg9q+?R|ITtoazAfqny==wIzHJQq6{el~+qwBMxQZ-02 zCpCs;RBD(sEmBws=ts0w^EZryYW_kHZEYU(id>qaIbs<^*~q}?rD#SK?LiCY@0#Jr zue^@{`PdWW_G*&~9O;^3r*%1eF+=g0CnphtuM%OB%K&}yuqeVwHkEE=)UKML%w^na zlg{sRopB(hku*-CJMg)Ew(@mVF0)Uhk=u;rE1FSICwf*HC@NhJH*o30nKSpLiri?a z&%BwJ64~TH2w$p&ZA9lP_#epN0nJEG{6?)^fE#Vo-M~0_$=@9p$(^z7HsDDFYYG`@<_E-B+&WfuZEB;KINX$_eg}^hI7H6fmWfjceF&v(KBc_+5jgoL35^FVSYrq zzz)T^EOn!_xi`wDv8&PE;`{1oq0S z>Bo3QenDDXGT-m}Vft3f)%jMAJb+T+6O3LKS}t4Z0ix)2LQH58GGu~S!50bO7M zXG039I0Icps|acnx|O7iR?UFadWM@W(41+UK&V23vVKfZp-T>cZ9Vdo&w>`IF1W;W}jN9C$D| zk~68WS}t|mLvkY}`ypRwKlQG`+s(c~i@EeeB<*DMFqy9;kUl~L!MwXtE3hE-*-727 z_yzDX7O*>4a{*Lv^wQnn@&KTN-aKN9ki-x0VN5Tefxck&t1o~K)_kC_?oiIQ*K0yX zJO~A>ulO!7A0~r__<%WK!Vv7^m{~{RU%{pmfr~Q`7Eoo#q%R`MX=1#|fOK`bYA%GG zVT)8|sE>%Zn=yKKP(!?Q>uCj<5}^fX2r9@k`~doQa0&KuN;M8!6j38{JOIEZjKl<7 zr?S^jy3)p=*Yi|9z&;sx^2R}qVKzs{INup{r z|Jq>Sx?$ApH$w_F$@(^escli>r`$PBVQs~w;&vh~DOyw={wH*Xm4=-TNu>BYK*g+{ zv=A%cHuAyHz$zY0NV4uz*hB#xh--}nBI?|o$;j8IxHQfr7(kn#;?Agko(7xl}0hbg_9_t9n z3fKaaqANu-&a7G8pFn`pI|b@1W-rG_3{eXlMdj*GPHkH2eBUnRMz+R=8oboqEpN&)^qW;@)_A%mkfS}5*N)lp=P}a&ua}>Y(`dg+DLt-%H!NKVWEDp zlHav4KH_t53h?p@0cIq=YdadK!^bL968Rt&%gdCNT(uhJu-)UwFmuVDS@XBh_3(D- zJ22Pfa3D7X{AKc2g`t!aLQ=krt_*pb^^<|xNt{6UhXg>y2g@D`f+0g(w&Q~4%m92C z4wt6*>axTK>cQu{V)fgr0GC(!0D-yCie|LdoGMGf#fptq0I&tFdoaSXQ_vO-14^u6c`;I(0bwip?q0m=TJZrS)yyiU(0xJIiUR=s ziT9g!r(6g%R1cD8Y~dOOku!T3LKP_Y6%B~b?*y_{HFu&JX#WD`5yGOss5@jUF6$7e z5kk6I$*NLlra>jJ7JM_V)AEgkxUmtpP8ePAjQ=Pbjh*F$J&_h`ee??ml zkb+?{j&zCC^u}ep|DZTyC#*WI)R|e$s880BSEB*S-yu1w5iNIvNWQ^a0QJB69YAEe z5@eUy3D?#T4Te|?f-M8E(}S}f?Xt}i59yAhbJ#%Lf}_E26@0162q6i<20af{Il6&D zISaj_tnX(HN{=21?&pQ_f$`MulWiOXr<6=^jcCEAWeOx8{!rm`5#28^A)#Yt9M7P0 zv724c1-aP$$h`YDFbD~_+4_(#cZ0XUyT_G8xMAS~dZ?7}P&^4-wz1fy_Y-vFbSIU)kp)u!6SgS5ncqP*a~jaJM{-3Jf)I>t{~|;bIsgm2^+Tp% z)fpdv-aTuzPU=<>Yl}$J>I*Cc{&ekQO#0pcuXNz3$SFoMZ}B(lywJA66jvhkx)bQU(|WH6WUVRW|x6|CWHOBlKX@dNeN*T3K{9 zk9E$D`a=e|$090-&``~+MMyu&f#81WUOFmDICjF{=r)$Z;kO3;Iq(XinnqONgUfw6c%#&*{{)>9)MG{lN3XHcuRHlLF}N2V}3^>Uix1h5)|c9bHM_ zDG*!D4m8Ajq{!-A#;vK;+FdD3`MdBenkVO^VKEN+m4 zIhU$FxP@Gc9Q_yvZUCMLq@q9|!M$O`cKFi4vPW#4D9snj6SfYf4fUdknR9Qw)2-Ip zp@#YIt{f&#s#z!0FP2}rND)Z|M-noZDQ+jYw~W1cWwoz0@yf99U?)Hp49IK(Zy{ST zzL|9b=YiRH^;O|VD-ZhGmIx|7Au~pCCUswW#7yj$00{|u5s7;Z8g1|v;dExsUCefAip}tT5wdyES25wO)rBQO>c2Vi9UbWUPe>Lgx%JLJ$hm}uFjLH# zCIMGN8N3+q0A;0&72lNg_5NCkWe9Pv4^2W_q#y=tJNe5C0dXn+`^3OoqD`gK9&|)E zvcvR#!A}>iL+(8sa}yx>yxux~NJZf#AP6vO8q}R6dzX`s9n_Ck1;vkKBeI=F(oy+= zJ(hJ7tMj09EF%i~@3yP6Zw0nN`V#<(&nDvIDT)0&(=))zY)8vMnGI;W6I0ES36d0x ztH%`Qa?nXg#w8mU1h3;|T3BI=;xy}c%Z2{t)^7^O{Mdr+ zVWP-dxs6rcCKKF*eYb=bzZj2x6Dz6@dfTK(nyoh>(w70~{l1m*(A6P_@1Q2glVbVh z5EJ?`9*P^kX15-|XQyM1Gv4#p_)Oy>nU3dhYABf*Wo4qONWWddk0T@Q`U6=}nR?+x zyN%Qk-Q7UpY-1`UiN9S1nZjJG+B}zCdD62%Tc}~uzSvxR*y$^ zyDbsuzN24-(0L*+*NS}$WWtO zKN7I{H*O<43AjFlq<5Kj&NXg-#fTr`Tks&8G`M6)Kb?O2PsmQ|?1)jh@0KSQHRd*1 znYXb#sg|`6lO3Tw7d<``sZHrfq>G2iqUv>$#6VigJnNuO3ktErP~I@;OPuUdAdZ-F zvy$2@*fE3Qc@QV+dH%pJlSv>=giB_{w5zDwiERq0_-eHtTm>H zh1ZNao~C2835yhAGmiZ7WF~UHJzF1iE`!EG#CT z-v~F0<k4Yq2D#f9 zGRHQkoOA#(8Ns0?=ZleGc~@be)gi6-blg3bBgB>T0A2heaG-S(U_d0P=E23?tB&z6`qM z|3~o&%7y+6K>3X$_M!+VN>pud9f1X>3Gys@&O$E26TYzJRm7%Ru@`Zz9F8JzQ8e5@ zs2Q;za|QG3rI;>2F-BSsstdp>MKkP&UifzuIQy@eQIuNXxpoiXzpp5$0e6TeU)_bC zjO2(FQtVHhUyW3uYwc`*5!hr&kpfdr`!$4~!MCA*NCAC!Yor>tp#)6{HCoj01K~?V zKb~T4?tw{j<5t}J4k}}DF}?ORpyt%RYd-Dg*rKV`qo!I*+Qmwm(x7UEq(-*rpQ{2v z;>J2XtLj>@YG*)2a1E%Q8qu#+{j@1knqRpm0?7p7e)PRWx0fHOW4;fp?`6!_Az7uI zd;ORea#1$hvly<>AHFvG8?&n1mq5LncR+!sk0pHyS@J}Y)NJ?qhG21(yd`(_%St#c zo_Krsg!&`BS#SL8#_Pm&dEvjZuK#rG{~Rc9qgr1jk)fTN>^2?(o@Z$e@dx$`)BQha z5NCm1HxG`PPi05cFORc-p5gtD=#x^pBD87vBQH7%bE*38k+_l1Q)=ncKFhSzCw>qs zI`;qR@T;L)nq~%@Gpgts8IkwA0w0q`Qr<*OeLgV6*pMe0G%wQ;oXxKiw*Gz!{&w~c zy0uT~5huU8&&+mo?fRpk6>&HbCTF7a?iZ3JutliDea7C@qp6M;kZ*qK&}QT1lU28x zR>u*Tfdz%%3|lP2|M|2ybmtb?k0f&Y`+=@Q*x(Fzf3Lt)|My-6&%XI(92o4*4zlw1 zicvjYRlA(4uc~N&(bAOF8E_E(7S}5Ib1=hcKN#bxT|i_O2_L5D&98|-`=WT{*~~4EWIsbkM=B= zVNZ@$l($r@S>FNsJT2{4`y**%GQBy zYo)X@_06_SerVk6_l@8ztGkckQszaPFr62EE4T>1xoI-3 z11pQTz+V+B@^$*CZ|!V)R6P%!;CE*IAbkBw1t+`l(KKP7v)`*Lt7VL`b}<-VX}Sh@ zij&@*JRc;@#b&(mA05rwRuwtf7eu7ROTJh_*G)a%XhHi_o~MrnrqOFNu#GP^yroYS zP_vROtNhgcO?-AeCe@*s!@d1>Lx71>XoUGZS?0ve0FCREg?Q7MKi_+|%?3{0y+3Oh zs&Eo0l=;~PHONJqJ+HN&;w~rfi+X`CC#T!)nD1@`ceKGb{RxHl$k~|MbLEq*hv1JX zmZ9V8XZ*XS4Zz(a^&$Mvw>LM~lU>_)mAfF9x-NaW>$LAE35Dq_?)~_BJ9hb<6}ETq z{-<%-kE*iyTV}>WNB^vdv^Apj>@2zIckw53D*HF!DstK5^-$vAg%_F;a=W`S;A}>o z=2}@&+B;s6e8*_Lm=JG+9`w5!=4Bkb5H{n4n*#w_Gix*U@y=_EuRZnKf;sg{LjP() zB=&|X)a~vR=IyAK{c4H!hDqD`wWDvw^V{z2TP*+WL@m{eTN%U{l74__?n`SqAR2 z=*l@Yn7)2;pFC(g-|^YYq~=fN+hoxbKYm=a9_c$c?jiHuct`Jb{2y9fM(~-Rc;|cG z*iy?KDk82gZO=xsu{y;`xiEdD$fmeAH9tdHLiG2WL`8JnE2}{O9OPmy4gTmuH9f{rwoLxESD)6WZFcN_vgYPGXFt z+{r&Y$haQlG38g}wiP?UD{>N;hs#{|m9KYVK)mcKu#HhI7x|3 z&P(o?F!QEj-n)f>E%jf%0IKJLW#4jj@6419&b+uti8v8$dGG9Z;jI4U1hnX*;4%<$r~mx&&c)1e~wK)hFat=u57X)dhNBG z{OUYU?gMI^KZVC~)^y+^?gm`Easbyu3Ok#rW$$zq-RrG?%pnD(h-jv%%%KPSAGf3(Zjs0@~o5-ofCbDOZxQOO-r6#(Be`p#2d?A(3kauRvDT%*8K4dGay;g@-_ zjenHi(La{oiRi0rv`qRbaeX5{jpNKPPj*i22es4#&zt67`be*idWl!Ap&MC$a!Vo| z6~e8%3cabmI|S(LWq#Y*w~L%0i!Xf2Hgl~YhY{@%{4^iNh?#mVic z*~A&}Lcl@Dpt%%af7exw6`c(*X-s^Xwo2aNG~AcJf9sm30ORJXKO3G9zqbF3@PN_zu;Y+#M-N+xG-s*^=1oLhU1ZdJI*}07uo=NXd0ggb{=7q;+?Gin>@g zjwybnc3&QLFkb~pv*3pG?Hd0uyZ(z z)+@^80Xl=ojpE+j8Tc)-lA+gBhuUrY9cRln_cW~^*QnURtv-pGWn35S9$)bh6Ky*h zyToE6esI?FV_xT;{OjdIxSMwZy;sA}#&B-dI^FrlIx&A(ImfPSw_YQQ{=pDsF|LnU z89I97M$n7&>E}17n6XY5ZT=ItyN8lIn{zKaRs^^^Hw&7AW6(8(!b$ztm=oJcte@Ca zjaccGp0Q%Usv1g5=ee}IKAf;V@BLTbLTf1V^3>fHZzTu3n&5mD@Ap;Gb?Zs*;mctl zua3I@^ZXQeU31!H-|G#m3B_)|mc3El;E_Q$?Y}D%4r^}>$l2HZiD8jVJ~mY{X7%zt zDHbRz%Cjnrnmu+|NG%)){H;?=h&wJ>$XPoh8#l`oJ@3C{>150it6xH6s2VS$7d$1L zDQJuqYjqLcd@b~zT*+tQE)Rol2L|n3-Smh4Ts<}+{=BJ)Y~!yY3JWryTtI2Y1$$;^ z)LuJ;9Pbo5Nuw8W+?4&xvQ$qE!UI8<{{nIIV{xg*Kp*pjzOMKE_&Ds|WL)8|3$MR)_|C)_of( z+`*@w{OuXvaAP%yA5Nw4Ro~Neg}{g2d!39`R@B3S@25)&*!=1M&-=yXD0b~{?j>s8 zJz^d$^FwfIPme`SQRgz%*!+jjand7T2=SgmLrxLv#>EB^WctNDZR?+zHur^UA(P~S2{ z@i2FOek&!4nfcA@JlY3~y`mo8-rEn2o9s=WP05a5dXT&{n;!DTaJPnjL;SmgT6j^> z=u1L|P2H&!7!`4$sI?4pFLRI6kB7QfVsuQ|movCu<_Q?02JFp{KigaEDXurl&*bIO zo%R{Xw&NcPoC4c{&ME%}!kga7jpyD%)RF2(-Y@Ug(8aa1WdCHpHStM*O$)w{rW#-ZHo)z@1}g0?!?jeDPq2QFwwbCx@SdKai#S52im6FBlj8@jA)lH z#X4QMQ;A_uUxW(yz3)AG@~L_ggx{BkPOeykHj3#f9?Lo2X{+xZFrGDETB22wd5^nT z>TYJvi(b)zN^A=^yEMC)69FV%;nJ`;gF88wJ1jESc2Jt?uD&wVL{bNT9DhE7k2GEj z*h#b44s>`?hdqq%^@p6=`1`k~%6QQk0{`OBY3zL{MZM_Qlu9rd>2(qlo=|e`heEro zEEwyug`Ok&a?@qQcBtt$C~Cc2DSgM8T=_Ewy$am$VxaQ^^AP=rwI8ra_$(HF6L|=&68Lk!Dv^ z*ru4+HGXUt>+ab>y2!ndT5OVnNyyBs(k`0^pVtVB$~p+?U$`k6c(1-jmYTHV>y+L2 zi3U{aI`>$p% zv(y{+x-X%oX!2?lC+2U{tK(FKiBJm{zv3_&sKIBNBy2SHoX^kDP%FCerpw+F6_hk$ zc4FM#e;l=|qsuUr4qQUjVSxvsYgBV&Tdh3a@QUdUROG>gg!W z|Fv2nUKgG?@p&bKajwEp-^Aq*PV}y0OtNAPoKe-wfBz$@!+z$LrH9&zCuHu|#O{I} zfEk`48A)@#T?qxb-pq_-K9SgG7?vDXcJT3zCKc^){Jg>l`28unAPvQ!NCe8By3}Q7 z+ycV{?IUMz*$tcgL8o|)AB#T|H1aRR@ z_q=I!42QOP*!_U?mkYWFU2a`JI2I5xF1R^Q?v&TGdHFv9q<0;&!_PSTNv$!Yy5dX+RUi5Dk%3OHr)|hwC`4TT>ek1qlzd# zM-a(R3{Fa=5&k&_Vqa-QpP?<~a=tYs>=h5K0X2<_obO#i(kq?Hy&u-89fIs^Fx{?_ zB}c)*W4|x07zZ3#dyoIr8#4Vw+{6oI>iPJsvV3FvG>Y0(>R{2_uK)~9e@H>6c!~Q| ztV;JbEBe%_Tkn2Pu9a_0e{SBJI1u9e<$m>^q8F~PZ(s*Hxw1v9654nw=gwXSiXO?N z>}96v6W;qYYFD)7D6aXYe`5wpKAhJ2$5LL|o4U%A~X4l|C|E;Q&e zy^Mcx?YtH{-M*4g(dDxc}t1ikm=&4slDl;irO2;ZZVwRL%Y|lpqn*UN?m=pObI(d20uOI}Ei%wDwc-pBJUP?3Q~D^caJdyi&DS zHERWv;P1 zWV$IgvaZps($GMR`~Ap!PM+pjmC?II4m76WfMUjv)P^}%?ExDV>`sBH1$Vy`?3m^M z))`qe2*f#*9G!Vw!+1q{DRuOA`4}rn9y4kDKn#`ZU>we%V%{y{2itiOA30G^6lFBK z!lc3%k1}n*uB;<{JM+U79R@D9j<_$7Qx0%LK6?1TZo9os7@yK;npRX8u!gLy@K3DK zKPN+9W!CJLoj9hd@Q?_0ET>-we!`4&we#7gyp9 zb>qE57!AgrC2K^PvZgGV7s+lI6tXW#iR{Y^A0$nTt*MZZkTAB;D9aSGd*_ubS+mV3 zCd-UvEHgjfe&>76d%ov9_nzn6^W1;np8Gt%hf@dH>ei}U#wOb86*jQ`mQsK$LAtus z4k_`2I#)`*5E=SJI<(%CqP}V3!_f7Pso?HjN4>9?9>|M6xoOvW;DX1U7K8UKMxS-| z@n~`2S)*p|X6O`}k%wxp(INp$^M|*>xv2f37D)dmbhC+~tD5ZOH6n+L`?6nA+YWNX zcKE@*2`AY;h-WVD+k4rJZh)@;a<)P0)^N_}L)ni0E%J(57hwfs4<6wif*;ndM&fi| z0udh-2G4a+dE$W2y9D4+#ibZ5GBeb1H-!9sD>l_CuJ3-$J+?7&NZtPZjLE<$ePnk? z@rq>jOn8I#1-NY36?eGbTFhh=%M+a$Na)&x+r?X1kq>L^JsN3$1FEY{ucjGU9%lO5 zuFt{WKU}!0PA2jXu3rZ`FqE~6c2O;r9v7(Jy~ytHozph^k2WLe1m+5r2r~=ft&Hyn zZZP)=`pjdD@goytSgWl~@*4BieK5Rr@as)2E&Xz-4E>+wnKe8AK=Zfv?QRo!XTrDX zQelRS=fM?jKU}4Og4l_|>e1N7y@bm%^!L^>CP5L6J9*UH+K`?4;xQP7Yiog3)9{QU z8}>`HQDg+Ib)KrH%aJ$CuN!Z$mN0gch^8c7vfX443AqvkH;xa2r+#7ZvNhLFlCJh* zYasPx(tTLN%(Y~-zf9P$l0iNfz=*3I0Z)O+Uuu&K&v15E;!qU8eGMvJ4WjCg-k0$11(#B%1KM_G2A9G~-7h)~ppNpY zyAiF(AChBf1nn~l+2xDD6vi<&F9~>)2$!)O4XU;ov{6(!96r}btnZfu;co4J+DA<) zTF8vgp0vL!jkesMcsUJJ=P7zCff;n>@dLq@yq?6rnHj)=a1@@jit3V~LEZ@@NFUJE{T+$)qrM9~@Y_yzatK%> zx-e>+krP@bLAH#B12HeZ%%&?fSxTj(&5GZ>ZV{!?^6_FJ1)VBZ1!SL#J1Xda{+)}_ zNEn#4i^JdG7xuZ065w<~XJ{PWGG~>9ifmci5%uxkA)Ez>evNuu^yumRyeFw?Rubam zr~7c7N_8%o4~cFz;UlW=QgA6&ZQ0iHsnO^sLe^ zVhv5&y&U$q5>{Rb>-7Vk5E=3{TqFjzWgCn7tw^7OZ|?mU^uk3dtXJX)tRqZ$_g%BL zb!>|qv!td6CZ_c6(?>b#iPcIFHx2~Ffh=*L02~N|1L1I>0UT%*2jZ>*L90NPRRAcU z3WTWw;i^CbRiM=>5O*~QS`D(S1_e}~_!m+}8}>9d-+m*7Z0i0f+PDo`93qKJgP#tO z>UJM>sG4uqosh_0dQjAf82aU;|04PJRtIy?nT{?BacU~8KwXaf=7=M{n>!(0;M*ZA zH9KoZ5>HmSsO927>iEFfk80W$s}?%C4)(5E=>lP>Vl|` zty$-V6@I6mDCXNSd1#B)E@{_8JdT!!>6fdP*?U=+tJc_ixs|Kp?Y#oa zRSEW9alJ;B0-=@`1e$6d8<>Bq3JOek%`ReFp3p@iVQ+_2(aM@=wjN*BF*NGcwR1S#svh z7YjJ`>+8~uSrO$lHoWOie}wZ(nx^7CY5$ic;myHMfKf_v=22xlPrVpMgW6y}d%O!d zkeh^c47L+)icW#q-<3m zDI)7~SZ4LZw8=VtGVr4IW@^_5N7H|*9_HkQ@s)`Tl(UE4nbU2&znA!af1cz74JX*t z+HFc#tU6B=DNj8QtcOZC3p^46b)ejUk@%Jz$0>3ROsdD(_ic>^WkO#|3@?$=GF1n@q~R&~;U z6I$w*vUV-UUR$D1$Yd{R>X}?V85SgRee_zL^YunB*bH6;v#3frNh<8awT%&4Y7vgx z>y0o$mfc^ZWmDmWvaoPdbyl&bn9RUmOGeJ*Ty{#|)+3shd%Q6DOyiG5otn}9kzNc! zbt&RQ^X*dQPe+*>Vv0$o%(>Ev!6>e@@H$=HkXk7D)79T|%%apP zU&_`HAEldeyBMwYpSJDnBQ#`f!q4;h8vngNtcu0tKkOR6RpRJjFrT}i=4lj>c;rVq zyV=b<{$AY2R+PhJCA)`mQr)UyUGc_8II^T|JKaIb!ce^1?5g9-+N(`dXD>ZhWo$%W zHJ6hWPi})Zh5oR677vVR6b0h90@Gqw^s&g|*;iwt#i*FAYsFkTiV3ox@-#6<@T5-v zc|2^{@j+TUMq$9ufG^7S(`%56j8e2`W|RT$re|xSG7v z27Gng#%xJn3`&?89Q(%0h!6BENQaE9n%&@MWWV15Pr3~W*mvVg4yH-zB!{Y{Bfsh~ zM$)zS3wH+6iq8={J%#t=xm*y}AK7RkKMX_n9Z5G$KmBYqUZS-uiYOS~#A^!wYLy~g zd{A>^BVw0YS|*KZ4N>VRRB=*C+G|s*CtntAFTV^d1*`IULUeh%+U7qkcw8L?$DG2r zZn{cy8WnH?W!^b$lGqUfC_q}<1 zrigVIH-%erM4PQF^eXEwj^vxx9fbxO+SxW|JgMDM6&rz(+egq@^?8)OM(c(RaWPqe zk=Q%JDW!Zc7OP_?2n{C&S7JsOp8!UV?+Z`m^+tn810>AYWB3U?2bGyu~&J0I`<-DRd8aLENx@K!Yah}KY@u@ P$W0B7UFV||#bf^m3&a^= delta 20795 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_003_short_fiber_example_003.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_003_short_fiber_example_003.vtksz index f8ea6055be266a8b6f9eb08f57299b57bb7cfc97..32d14afd6599c8b4e4aa57399724633fad98970f 100644 GIT binary patch delta 3463 zcmZ9PX*kpk+r}{nDf<>>jIpH{hCvJ^$}&VD`;sAKUqkw5mm$j#V<$_N2+1<`$<~m) zAZhP!BXva~SA?XgR51Vw^=u`a zN1DS;I~xvdM*eSPiECq-n&(F5&~omO&*OjMG_V9m{L0nNQ;O#$L*n&66h0e70Yyot zV!`3q^z7{F6z!>$`s4bYgPmFPVWpt-Dqv<)Fs7vi`CDne$x5|?^3(rr!8B#JX}EP=bHZE*5W`YVINC-5bG!bgxo^uU2TR@*({ILl?a|gkqNTULk~g|1`rrz{7Z8dh@?Abs z5%3Psk|O+x_Kr2J4J6)Te_chqQBmr^lV1>*TEmZnaZblgM8bwz_D;ibiFf1 zmC%+Omd)70|2 z7dY|>uf%6VsSU$Oci*G~yq~h{eKT-OdLK5ryd5Cp(aM5?-w~_U{q7m8{4Ud+A*$CD zG6&Wc3U}z(c7v{VQ{R&?OihhY7soj?ej^GT8<{{Z+`LHLWDxmDc>MOEOXCU2-!Ihn z1*w+Ptxa$w(Dm+W_Dtcaj~i0ulK0jXT0iMTD+c&Lg@w)JVxT=Q@ZDDWXgP=G+`Ib6 z=LU(BXA`;lD4}<^6>po@+u(EFbaxS)ZnrNw4;{(o5i%D}z9~3p#c)N9>3KYAk?qi3 zRbPyEsws6rSxRc!b!M;&-z+@i0?mHe$^m4m6fzCs>muP9;Y(1Rp=t~=a~ogRg;^MI zX>`g`k&}2_J zR{EHS?KdqQ&lCENJi)Ak50s5Rpv6?zPGT;IS#l>LQJref@1jLUHeh#35(H)FvrWv556YLf29<5 zZ`vVktfmw$D5F#n4H>~pF;7e2Vu5#JIEYDR-9INzc}*QIM{JF zUa?z-;!w~dg932Ua=r#eqkvsoK4snvA`zVo*#SOknH!2ad@bZM9*K3CVB&bd(f5(- zA+v>$-2@XO!9+`G&p_0)m-ZsgR*2&UIxG_PF_DqmANHbLLnK)?=@m*d5RzQ#g)>hp zJ-Q*ETeQgaE7--lXwlEbx@3_u_97=^@DWARrB!R-Z$t9RpRpII8C4G{;D^WH5vJR) zWx#t|_K*eygE4?WGB92cNERjz0>NR5AdnnP3j~sfnSwwFm=g%30DBGsDZ*kvASGD3 zF1=5mtrTCsNOM->VTA$>t8KX z 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 Lo3i|QGpYU$a5f`I delta 3703 zcmZXXcQhLc`^QzSsu8mkv0~J!QR7-|VwBn=V$ULGOO2Shgh&Y*TWD#usMQ8VajC7; zZcv28h+Cstvo+t|_kGXr{Lb%p&htFy^NjEF|M$62nGlzy$z?ij8X6iV8X4LQ2Z~-{ zq&$vG9O(}JUaNA{6_KT;ZoV@2t$JW8L3)syEC$W0U%S7%#7+aI0hQ{9PL3YP^pzR0 zzfH@Jduty8?kHK9q~@t+zbR=iamV-D7_AhPPboefv&^HpTETq@5{Q4YwEs7|de?iK=mcpDrhMA5J?PkTN&t4c#4}O*Mh^@vAXU7vDNfKYQbf z^A(oAP><@LzE-{W#?`QSESog!79_nyd1tQ>pL?NjwvB8&C89$&Rey<4W&06ocL9BV zgY`KKq9t+I@nZe3>*Bith835~f+XDew;6*AX<`B+x>F%Nd0#Tj*xNGIm$%;`VnjQa zkZH|3ee)(Z(0F9<#)a5ohw44$ABRJ+`N!uH6*NCFMv!t$gMxYYpQ89tsvPSS&2tdA z6DJzf{JN7TpkylV*hl15C*8H`Yn%JGjpI*Gj&=rj9Uet=#=mpD3A;@qX~&!|-(HGu zVEPIhF5Uz0PRy>AomDF;l=M`5AteGsr$vbDs~q+`3)Pcwl34e zEMidI^rQEVrVeL5@%M!7$<#Z4RhUw^%>hTdp&=@QjMOm@2L&6V?|g@$3+pY1<*ajM{ZG+Y(j1_6D?A<>5& zt%JUS5%{Hrrl_c%0NRwRKMuU1+{CjhE^qONEd^ZX{2%M;(ZtBDmoiny2-OlTiLo#B ze+lK}V5g-FI-GaQN0}Y#hpWhQ!=|5@b_6-o?^kvIA^%`D?I0`9%r&5pJKkWmO= z5D#K^OxNAMaqjAxqIVsb$hLU1 zc}=%X2Hg6#75z-8*2`pPBm)eVjehs$Yv>Kq1dkh+nQY$r%th>*ZT*T{6wpt__Z_^@ zmJbfTIVtI4Hk^I;R-@;=y(c{MxrqrJR$*@j1SyM^GD#&vQK)v}VZCE$N%&r=wt@WF zj(3OqoQWktN64E$06#;-zE164ZETu`WMu(M4-MFhh=AdMgrG@@fMqyoEdFF)Fc^c`HrwXa}__I#HW+lA6 zFmhi^VO1$@Zby>8*?egpPg*r|+Enha&Ap3{ofQ-dbUhq;jLkb4KMPD<_b!%M`K8F2 zZJx$6Ps(3nOVW3jL|vMzYqi>dXo*St-Ee|Im?oL}VljYTjhrr0guU>g3NU{dEmu3* zq0mI|3r7y1c^D^B>jon$#VhJ~;smwi50e}17l+&!L;V(%I4WGi!m^8?DaH0Ll@4lj zuorw@0p}|Ej@D3rC^;fr0^N5aqb**-NZ6DHePH8E=b&Zd%)kNuUhSg6%fxJKw z(R^BEM#Y+sRZ>6m8)yRQBa7LTf%JweR_=V6NZK9*H(zE9M##y1fOnQa9}$@FUrcsp zDMIy5nAG z38H)vTGF~<1JehoSQelxYTy%@fK)-SumVj` z1E0wRRRoq57=RjBAQRLPENs9u)W9m4@W)2>Um7oc)R}P%=?J4+@LoOnXM7=MK`}eF0*y2y zlGhIU(X*HVM{Tub0&iwI;`cL-97#eL7V)C5_KxVpGLFNd5dj}8y@nD>t9;LomV3?H zj9@Yvb~2@V$z$()Ym_5UZQ~WKnh-eP?Jp)rl!4JWmM#s~AC62kFkaE_S_Z+b6AkW- z*U+Wqmik@cl?U%}%DG;jVdhl=t4xVW!hIZj=|)V`3Q7z8IHojQ{sUaMROCGqeaa0? z$3Hb<{Mrfsfh+jJ|0TN>Joi8Pd9c5yV|yzRJz`2omoGb4Ly z9Ju2cdlV$gKXgIZ85GdkXL`@hMOWQJk0KSDky#aN)I)a8X5=noA&P^Y`qgdqcVw8I zBf=CdE|8G1S&Y_^BGs@`Y*2|xVL-H80tWw?B0&ECh^VA^pi}sOt_V2ABRPc|XpWGk zcqF9&fVzmk$sVW_7N7#6lDx+Wl%ni$WC&bupb1x)OvHe?0LyMEBuqD!d>1~4(%dquYYVPyBRbitJ$z6cn>j1N%D%WvHk4sx3X7|LTbucYOLDqKt zQIurunu^$6l`RIq7gnp|zE-gABx~^FlO1>z(l!qouxCS-eN|{~n|xuxU3<`HX?e7ovsKxSgK1q3XLlP;Y0S#c zL2|>Y1ax?{Iwi8fXRNAA%9>MC#K9tLCN{5*Ft9Lt&zFDxp}=?X8m_i!aLVh^v+$WV zcD4H_=%y8|dvr+StbPpWhViQv9q#exh@kZWC+^Ay)qy8>D$z2^>U zo8QXLFW0E0^P|29H;(s<dOMPKq(OMscy)=;`8dto|fIDQNDUo#RV2%!! z9&QPJGsb4SJ3n_c=s-*l`3#Itn-xtzP$}pE_tV$tsAFVsVSp4V79wR;~#^hJ*s z?hgEXnj_7^mMx9p$lQbg6Ug?bP2q}Lo(20`vxhjPF40V_mK4J$NlA<^#HteXm}n}* z+$mO)%r8dNQ4gNI@XG>hZ0+6+m_E&Y#;X$DWP-eKdV6xx3wy7FS+Vx7Xs`VSok_0$ zIOfT`I#KS{TM@ZD^@g-ERu%ee$+XobXW2s~y71kvU1#l^-ozbA9PL**H&v3O(KtD| z?RrH`JFa5uWj4TRsy!SU{`OVPJaMNWOf__^CUZKfEOVZ$TL>7Y=&~@c(c?sT3NKmx z3`SbQ<85yzI;#l2oMQF0j?AzKs^t#kZHU;t(1`LDSiyMF&(JmQvK{QR+S>%pl{ zyelgZvi80%>p-CKWKfv^sMyL|TqEH+k1VGt-BG*%V6Vy0Od;?Kx`d{o{J@Sd4dgj@ zY@4gD@JaZo>*^FxUpCaIS9nFIhI=u_r}oZCRPgD6o2AJmTJFpL$5Up**;E*yY`={r G&A$L)W+Jx$ diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_006_filter_composite_data_example_001.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_006_filter_composite_data_example_001.vtksz index 3cbbecfda096dfbf0deef026b87d41bcc9bb2847..216b922cdc410e573c1607c1f7412bd47347efa5 100644 GIT binary patch delta 3677 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 YkP-x;`hR^f&5YsJ6*-1~N+iX908&a4asU7T diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_006_filter_composite_data_example_002.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_006_filter_composite_data_example_002.vtksz index c1255be345ae6dff57c7cd60c1962b4591c06a8b..75ce68da8adfe0b55b73e487b715a75d2947f307 100644 GIT binary patch delta 3654 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_006_filter_composite_data_example_003.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_006_filter_composite_data_example_003.vtksz index 58d0b9719b017fceca30a0494122d54a42c028d8..7839285f2a2f74cb546debce5149e75a9c409d6d 100644 GIT binary patch literal 3720 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 literal 3726 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 delta 3668 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 delta 15686 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 z�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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_008_assembly_example_001.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_008_assembly_example_001.vtksz index ac64b56219b8f1f87d4276117d1c612bd5f18001..d36b717ed09af469ea6eb5cd218621039dd3213f 100644 GIT binary patch delta 4118 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 b_5jk+z`&%$`k(7RNtjd=7ee~?B>?(Au}=96 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_008_assembly_example_002.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_008_assembly_example_002.vtksz index 6ad9b46473c8dae62ed6a934db0706b66c725e5d..bc5de1fbc80bc54bf05227a872dabbd860453728 100644 GIT binary patch delta 3757 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 Sl4y1bmm+f-*FW);?tcKgye(@0 delta 3759 zcmV;g4p8yh9o!ugP)h>@6aWAK2mmz#j#&uH%6D5CM`O=yD;J8gMIVbViPSV!n z=|CiCb3&0SN!fBT`R@mSBmfdnBRRR7_A14rNDJ&@7yDqb;)47*yJ5`@Z)V><`ZxpG zJm4IKbIyX02J<*w3nS#ceEXMtJ67#K$+v%~Daf*fg(=01;5klVG|%QFjMJEh9570gU&we_ zY}0?MRq-8bnQsP4cKjxMc6u6Je3Mo$E}A#dll5uz68`$b+jfvwsXR(G=RvaXiAZu351 zl&i&@*RQh^cF$``LUOE>FC|-dG(<)L(~>ZPcnD@=g=~Fz?a^h< zlK0njwJN2wOLzzl9u03-qPJ;AvK<_vgGYbEn{2<$`Q5Ur+pZBv`b0u|SDoi6Pfzme zn>H`6<*W&EA-_JWilVwZW(!`kfiCAnd#=eo+-ddYQ->5y}BMNYZyWW92pfe!XO6lUJqcKt=Pa;paC@_^#=N3W9$c z>6G)LGeJ_TBq>&s@r<>3)rlA61zYEf)#6p}WXU7t5a}`j#hN8;ek-+sTYKH|?ZoTz z1kr5n_j*6CuFtb7VTIZ{dbdGDd(X))RJv_hHF?`jitIrH`3J%n6C5LqRZoJcOQg|= zs8RA}>0sn)>WaPx!61ehVnCuGpmBdBIUo!$p@8Bb2*Nm~@s(VlJI+>0=kpl&XX_|w zE8haS&6|9l7kPW%BXpT3@7cWI{nxZ+*Vb17m8WvKNanU)afy>Uzs}3C^`NtUGRxz} zMtF&PSEZ0BjAkRw$2MzL)d_#SWWTPYfQ%IlAE*~%F*L<0>1J(c5^C2kSzCYSYds+F zygjJlO5$ADqL#ts<*ecDOSW99aC9lwMAORU`R!jn4t^p$i&H?sr`gq&>>?OWJEz=l zV!UOh|-68U<>F3ICl` z)%(@*LSpfJB*qASJH>LMBI~`{EMGCD-eXPg^@5tcC!isc2^(4457s>80$yBBQ6J=8 zuRkxBt5$B#pL6`A-Y)FNM1mn0`EUS`t+FfFt0yx*N}~J8m%~gZ zev*WH=N+1PN8q#b4xxX4CY5ZA$4?s;W|YD%aR8 zD^~mg;rzzpQaNdt5U_UDnQ4hMSwYE4HGIzmU>txjA|jCr5mkQ)-gdMh_2(itR|8p6 zoxNRdW%KHmk2{Vs7Tr;7Qb$f-D+77zj5sv1VtJ!}A*jW1%Vn;1-T_YSR~_ZpLXGKX zZDZmG8DEQ^BFdG0r?yYtE-$57LRSD8(zE6T>SdE1z5OPqC>eX?UUL!-g43Zsm1sxVsRIhVlEM z;a~-m7e8SQ3e52Zr4s7#Maku*2BwMigkGVW&hB z4LjBBkzv=+w)f6{gO)_I$pwS6VQAPx%^n)|P_u`IJv8hF2)!h^bPRi>*{wt&((Hj@ zk2E_qV9<-f&PDpU8K*3aTA+j)mC!;Z)UbpWETP6Fv~X!cE3|+KH8L$=LXAudm{23r z0w&bRw18=Xt_4h}k!b-FYGhi#gc_L^Frh}K1xyo-Enq^8ObeJ$BhvyV)X21e2{ke; zV48n0Z2=Q%WLm(48ku&0)WEcGi8L-PSep24q0$6!3zSHM(!wOtn6zW036d7O36d7O z0i?xl@Mwit14m>LH5d%7Gfs4}4>q6&8_CN!@ZiD&3lAzhpzvVA0|^fzJb>`v!2<^m8a!a|V8H_gUzG3!315tG!q5~2pbLMI z7Ktbjj7j3_SS^_*kF~(gnTWvj-%FdFD9s3Zp6hH`%xkr2=*LYShMbOG!zo?LFd8metyE`}}UvMl_S zlxmhdSrx4QO5%9B={mBdx~_%v^Q*7;4$9~b1L3r~Q%65U=vMS<$&$XjslJ;!Wq-h< zSH-D>%7ZQ$OZf4su#R|Sbyc=5SylM@>(5k;BO3X;JZ*3E$c1&@_*@wmPrCR&BLlEl(}dI&V(coEK7y=V#9z{p}@N|NYS!&$zHC;g8N& zwVWoY&%9cnj*d0RYcP)mDpX}dwDuDxT41Okbk&b=k+%gu&DXqmon^A*Dl3&;wOqFH zb$j047u|WRtTITS{RODkOr3vmD0Qz{S=9?xXmU5M#HjlIj4krwzN;A3d8W>+wPLcA zp<^{5QEJH6ucik14K;+5?q0F-s4T12hOVTWD#`gBYm*zROd^|2g=O6Q$tlP8MY4;k zFIpXZ#j?5u-hFj#UtQZ**TBBIHl?^+J5%=6wS#?i%|qK)*Y?%5gMEK>Z6NNeYy0Zj zzPi>CE&hFVjqa;!nz*m7?W=2swy&=3t7~J@zPh%ru1zU_w(8n%R4d{r2~vM`P2KwI zxvbmV<=q8p*jH-GrYl>3!~WhQ-v!UBgRgvd>Mpm#vSKJAt@Xvw;f|e>AC=eYYA5dR z@oR-iD|Jcvt-Ms-Xj^~m+LtO64Y%9;le1J$SEFu1J~C3e!FIp#Rd|PH#Hl4c*gK)? z9dH=yx?p#``(Q&QaO^v=qXaOD;t-H1Cb0^B zr(0M=qhv$&vHhcE{6R`K;=?GwArN^T6&VN$(rh%6J}VDp{g8>fh5A(r{=WQvZ~y!j(NO=j}!m*KZy_xG8vYI~69 zrTU%nrn>7@m%?U0$|+E1n|_j?KFCi$s}oLQGs^PoS$D!xK8!{$vo>Fz$>*u8hTSCS zi7d@mO}Bp*A~1TPuEz;4uhj`W6(r==l(nv?j%*3*cJ*7XLXBEE>!Wqv=;JnMC?RD5-}TL$i7mhGGqYTWF}v>Fn=d$%631bADX0ep>dat zqYo83?AXft-Hts`Q!rcGuAjfpfUWU9$1*^1IOl)2XuIbX;gCcmP@ZblUiwku@Qi2A zCwMjaL${t^XJ^&uAyuC1D#@@xyN@)J3vteG*lpgO`TJ-+yCa2Y&OrzHI?(p$;fYk|JwR6i8*xZ1ZBu`w+Oe}w^n(4acT_~nS6@CG{%jlj))bN z(AChE-JHN0@q&RlZ$ z*Tn`hh3YAyMZm;2~fw-pgc=N4PomOU2;4|o^7ZYWA(ytqfUpPEOM zO~zEiH~w}#9#x+5Urc#}I7Zu~$=K?Z~u;7Y6Yg71;8$dU

^KmT0>1s)c{_OzeBe7yGtZam`LZkTwu*Z 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 literal 23379 zcmbTddpuO#7eC(J({(BpQl>jnCS6=&W-65@6_uoNnWQ4pkji!DB#%@squdgiN>Wi0 zA(t6)8TTP&+y{ffV9d>2&pF@Y`8?m>KfnLJuNU^&XYIZAUVE?gUTd#?oH;pv!J0X9 z=KM9scwWq&JyJ9&D+-;u;@SCw>r}>3c^ZN;o zQSzzhG`ak&B+A_DTPJYQv4?&S}@LA5dZrBqeEdtUdk=5A|+_K?2bGHV?J+ zsj^LcW3*jzFuGsK@Kz(l!2y{~f_3HoqBg+@nm7&KE_J@#x_w+c87g{do#X&?6!f7> z+}75hyjLfGwiys*{IRW&NA#!C{4`y9Cp*;T3^ zS@|ofja#&@{fp$n)S8$oPPO>+Rhkcbf1)!EZ?F)Z*?&TD{LOdg(_H6fwsi$VKj0ya zB&~4+Or|EQ#0zDn3vF9~UB@$ik)N#dRNo-2S>${b|!ixmmr zt?}i>KUy)6e);U|A@avG=7^rT;ut(HB=w>0sQLH91uZGObb@&6zYS<6uck^5o0~w# z@c(PTr9?am3_1;@WB#R+&zu>`GpmgOTIv5Aq0I5)KA~73(|~8ib-F?zz|pih8XYE~ zx}!{M4gLWlx`zH6wLyc0{I;=f{rL9#5q7W3McBv53Gj6~#jdBW|KrBo#&J9b>z(*j zJo^2ZsWw}KqR~eA<6aCN{Ol9)m(IqFNG=5v1P`Q)h$`?vb%+vU- zF3VWhO{GXT|@pFRYtgG5npUvKRnOW737~ajI)Fb%Nl2;ep z{ia47=`!jZb_SxK6%+DQ?Ko?ZhGJew5~7YM>o~(&wro~AXREBA9~TS%kdx{EYt8X= zU#c>oHxeH3&rL4?>qgeiagl}7{zvr7$vRQud$^ChV&QYKHn%I?Lfi2yW#FeuNBK@p z#8<;geW=q`kVAe7i0vl2ZF6n$$LNbg@J6@r(x5)Vo0S@)5kQsVME^WQj!^RIqC@z_ zPOqs83|nmHX^iTI^1+N(-R(Przfc!I_kfc)0yDFg%adQ6r!kRJ9k6W#(}6DMc0-O) z{Bu5LF#wjZhI4pH+6$N^I%}l!4w03>^sf$xMWh0-)OEA8*RUkSIZ91GK-`9-TcB5R z<|(0XcwK4^)1>Nu4N17IHDL&bz&z3R|CmrIPXwD5+Kxm>tz;p#v%MceENx=+R28ikupa!W;PFKBh4LW4I*M&KeH0W)`itB`1q;JEn7_C$FLhz;!2! zXxjutY49#rvh5&y%H+~d)yr~vAOG7w^4+088G8|xDCPBwCdt(6Bs#%k`=FgBn!tCs z+%8qlPn3Yrybu}qfXbyO?xAJJ%f6i(Y_NWUG1&h9RM~|XCaC0rR}FLsS7D7b%>J+n z`4OBnZkq++@xV_}sHR~Lo8dD6Sv*=QWf?gY;bR7Vf|C?En2V1_o~|#`m_oS~`2ZS~ z;mW)sGMhSpQH3khO%1!)RYt6FDx@G|bN7C|3Pp_&S|u*Z8=S zke(8RO?x4m>z>ibw0_36Zlxx?1q`am7oLKj*TA{wR7`6D!Jr!c952f~H^{VpLNM44 zsTcW>pfq50(N~--4W2FJX@GjsS8{!%5V%Epf(&S_iN31%DKWr2wKXCQh!$@)bb)C& zconB)jVkS7!^ePI&`&P+Wma~MfhA2O{!H8^I5ho;-5VqCu^#gvvv|h?;j&zO1M`RC6s$|%O zw&O^%{j<&5R9VzPD!2w7%j}?2uhPj+A*H^8ms!i!Xn;>bSA>zihA_r74o(8`aj*t- z3L=c|lLK#Ge>%9&h7gY)6d#idf}zA?l5VkyoIEI9Gb@4J z^pIj}FG}Y^4J(<=BWHp&o%YXozMfX!d9+6aF>*f<%XKt%_l3q!IWRS0fz;XtC|sXHB|(Y@dHUxzbe^MDzQoy>Dvq|!3aVhUbq#n5~zkFVCV^~MWFZQ z$cDk4Mu?hQ{?`rQBuN>w-3ZnHb&DnRQPeq@5ZXEprp65BOKr)4ux%85T26?fYjRa| zHc>td9v4VNpcZr$Fw$v&w^-B=9y1Uo)SCa8q!RjU*K#pIG;J=X%1uS@gONUtvja2# z8<;+tB#o?=N2XC2@}&YzI7ga94g@Zz(nsZ_RQgJa01m>BCrK--WlQ-Q|5v0eLLZ>P z#T3IU|6|Kn41;8Zty1g%$}^E9)mS10a+SKs8w6=0dxA(UL~0i!ttxEQ8XDPc{RuPoHN4(Mlc2vX`|d3ZpV>eqA;=^r5} znyR-Q`o%y*74YS{)^+%^*3gr4LfiP~Kzh7NJ7b8gw;evN&$EsH1|9wX3L;WNUjDC; zSjC?Mj_Uv4!U3rr)0g~LxFfaW`jY<&f23xmFZo}gr089TS7l7#-^PPh@!#O5=Vl0J z>mdW{PNct*i4e6AVtPF2ju2zc&9D)oIYQJ$){g?oFE|_&TtC11wQlY=p_Q zv{>6y_!0bDrIoMZt@7kUiMcP{ASQCksv0ERrSEJe+{GK%AWyS@@VjDwVBl4P5VANa zBY)inO@ibL^~!~x4INv<&BK{vKz=5__(Q9n4LPu0e#q-yg8hVYxFY*zU zmuma4`XGU`&kR|z1LQc722wHqw?f|z@_BsQbA3#G7y5HC9U^ZX2Hy@!%mT^!FJY-- z>lpQ|9LT{x7atQ*_`oq~+n|!L8QO>6j{9hui7CY=J!Q@HeXZut`z+X(f^2t zszh0p&t_02r;L(a5%hb^Xa;C~w$L#6g3ZM^5uVE&luKBY1;~z-;!_?WLJK-nRi;U{ z0d$Eu+`&zfT9UccX>6^YG+o$<-B7#{>Y|tQdDHq1#5I+yG zMUL|{n6Q^>n~y+6A3=iDG?=A&RSqlIFqA|8M#DLdoW8{59`HN(D(jm?gQ4&wwq*ah zPtU-l+oN}|0=zM35>W*)-h)ko_a7g^IUhNE=>)F>?%H1sq_%bad3Kou&9iCllJb zzZQfEy|u8JOy$0zWox}yxn*u*&r*1~uMNMxYel_=PtZXg zCGq}`tSdlQ%-1GxxK7ET@15;gve>zINjhr?w7=ySwAZV|^k#TlN*=WPo&TWtNPF|< z+eSf)_>@z^)V?R*vGJHIVv9b))%a0*;EcoEk{g=X_2={PEe6x7BTCEe_ueCzf(B(6 z(6QYnr=n})3+qsB(h5Gsdh$-t_IASuA;wIH@QsLsM`k75biD0uGQBiRXSRb*rp7np zp!=a*gR02s%xL+~n2dEYHOr5Wg#y(POLgbK@@an{b*B)$C-s-5UApH}w?}QV-CsX0 z|B130b0z-_v5aeZphS;g8m+1~R_bHLNefl`uF1^l`S>H9`ySZ^$uveNS8ILN6ZP10 zlMC=NbM%#vEdX^OzAst-qsQK!5$m6Xi6|{7h7g6?Q&x7vG$TR~CAc(b8cl($#@bC) z{qZ_GH*%``j8cD9$|?hPO0;ao-hk80#g)5tP##B>wLas(Z}v0z>A-Keg?vEf*9G+x zfg0HyARn_VQ`|y-=BIxpppjs-xUogY$;Be#4HRURI>wx;AdKGK9ybuLGx%2%!gF~M z9fuSHK~JEIUl3_I&_Q?83@eRGVvS^^(U+uA$}kR*uo0zK|8Rg9)I&Ich-Ydqwkodm zOw}3J23wK#CO-oXgPO>=K43BrVgqQsv{)82t+(W9QhU+Am&D24y~ z)V|d3s7-_fr6^QtwZqDWSl?wIPvI&*H7e(0e{ai(0COi_)6vQFGa&T^=76VoMnq&j48NFn4?wYx7@O+-Rr;yvuLB6#=( zE@dqu&%w6B4dm%U$cL;)pbnhxn-@p#bT>`#Zx*L#<7AF5@oE#3F`71G-#bH6iari1 zNyTH81=V(kL!}Y;Uj2Og_iJ`iqg3<%U73;K^LOI7^LOH72zz=4g$C2^c8KCe2;KBE z!qKU}(uL``3y1>mA@HWXmx9sUwhN)(^IE=FgSHIgU*@?2qo7OgBA^L^B{s60`bJqp{G8RX&bdthZ zd&@8IdLLTM5vpck)TC2KO1I!s-nyG&qY=ELaPj;q1!qSuNB(riD)5>8qiz$X((O}a zjyEptzL)x59jS&2HOb$!B1c`8sw*srwo|s`t)I!HFBfO$HjRd7JHH3D%2xB~^GfT- zqAzt{nu~K6Z|I}1C~6q94|H5qS~C`2ivP7w3yVzFyQ(`XjiKmXSY9%V`3qy21)62^ z_-wV(+Od0=x{u3)qSAV~;IqD`t?6Jc_Han`XmlW~-oMX=SlxAflN(=icBDh8Z7I10 z(ZVJ(>?=vm9IedqQCFa=uRmZ4*e1lF_)%^MRC(D3)hXz zPveV<*1Ux^AGinLGCpd{N?xN`L*iKb6~%!T)J@pMOusWg;I>K-C5li}Ig1OoP)wpI z%LX?`0xwZ#*!?-i&wY#NS4s=#VqRk}r|Ps68Ufz}OMl50LJOy@x~pY_Gu5(N9G?9i zI65HY0o=LJ!@p}6&7*WKIIodi6XGx;pTqeWW~$&nRiaglnvl+6!2|KmTJ%t%5!?O; z)B=~70z<%vxSVV}QhB>pm894=t~TLr(!xfFgy6qXlY*;arzi(8OQ+fDhPZ{0OOKZ4 z*9{*7CM^rMj5`jC%L$V!21jiz*y;3jtvW9-jy*b~Ii#vqol7>T;bXzeTc}0Y7DA*4 zW%DnN@GX7CN-JnbrkdhgYoDdq#1NzKS~VFe@8rxJ0yb`mQEj(Df%l%8jz{L8M{|zl ztBtUY+t3o$s=;#heNF6m&ZzBHvF;RRmd02OMvqYxyuYSbE3_#l2#w;Fk0&r&2`8`M zwMC?eS)!(IKhePy`V2(|JQroE24MILmeM;3)c@4N4LQ;SPhozR#|i5uxV(;)#Jla?*%hHZ>PYeTxeqzd>D}R$&eWopQO1e|eYg3HZE(ztYb4GquLU zlqYo_4Q|eh<}sqU!MlEbB^#t;by9WO!!EL$T%qeznAN?MLqHVEj8f=NS_En@%ao%y z3n#x{ktyYB^=gXTS?KXVWmD?iW|0G3quiqEr=DItWI2?x4{^rg}ElxK!>Qkj+$VE^q&{Wz9*|- zi}wHzENsFNxB7gTQXez$H)RCXh|zvTXEKcFp}1Fwb0{-wAg+zE3!2*ibkC>(RJI#* z4BCyzp`HjB>_F&i8<^&g=v0R*kR^B*!OrEKiZh=P$Ir`?xM`55O|ZYwU6Gu47s_YC zAH?yOEpcSeEQ2kmbAwu%wEh)x+!bD1c@we>-v5T=0U*Bo3+n?_A8EQ#l;c@0+%3^a z#k9j#yg1}oH$N8NMXV6+&hW2-YSAN{U1nuwUexSsF&N@SzpB}+g&nMLcrBVys1r}?$6v5Mo$MHJr zdNoq<3VP#YsGb%Pn>S z_7F698M=8aM?eoVG+%?K)J>8$D@Uil`jmmJhHv7bpiQO_X}k5waedfM4&ugSk{v%}J^c0|g;Nb&?2S>FeGF zdkqQr4;C+&*ETR&sQAn$GnJxek6D&_lx34U#*=c;dX#QA!Fi6jc~@UAE)Sm(F?0U4 zV;)oWPI?Q zqj-zgB9J0bJrqn_CAVKx(Z^hYuaro+SwHkpez;Q3YfL-u63?*O0ER0?;k@8#q1GP) zr8C|Bis>(}pCL|8?7OpOMjS^uA|(>ae>SchQ|%%9k{Sx|rWsOCK-G#x^wMh&;QbOY zQJu-dBC}r{xtTV(%P6HLKggAnmux@$Ij0ah z1FtPo_0LP=LJt+WN8a)Kp~xowD~iLJaQi-C+3+!vB-CZG&y((?5x0JdWa(#OtWN4^ z>2U5dcD=kMU3jJBsfY*+We80>aAtqIN!~;Vf3LI(T5f~to|~_ok57*f7Ih@f#oP(f zvsL$fK|gRqd`9P_KTg7W!Y|xusv}QcL9QG9e6i$#h;0<4M_E3TS8NKeO+nY&JwW{P zZ!>IsrrP9|X8bjzpZ0{6wciUo3n3mQ>)A%O%@3@-a8>d}*DD0}>L=e@A=C5;Q#L%Q z&WjdCX<}cZ_w=1K1q^eZ2twsvi@=koT-N7k0><_G+{7LhZXt=jkW=5X8qA0`T9K4o zx}O$v5g1>VDQr%L6MmG%rmZ0lMvGlYKJOyrEw8!CX0=QqjcI$xr3GL8tZyz;qZMD+ z0@w03JJEgMf!AfmQ94r?4|r#--LO1=p5jgm*{a;&7Wr<-T6sEsqb4@9Lcw~F*5)qC z+JcSBG>GAfeL|Lxy`f={fL)Ta6?>b#{+A^X)E{7jVz5HfB9n5aW{(6Wv1yH?e{QPI zvK|>{MsT!8VVOr_-(Jh0_o6Y1S=I1NxiQ##v`Th1C;&fa?8ow#7@T-CV1k_wy+B9# zx008%VKV${pvUQDGfpnQ=}(~t$`iK<;)o?R)S8JCW0SEuwfwgv+fdjV^b| zdZ;dLwIm#h;HvFz$yuuKui1rn5R}g48KD@|B0MJ$(`A4X&xFuD4|Q7xeSkNlpf?ha zlthc~9?w}zR&>8$W53Xs&8P(}%#WxVs|e8c?wlJGz9gL+PK6N9X`JrP32HqY)K4#H z7##@EW`!9d7DC(j4Jy*PXNq;=kCHqs=)3%a_Vm?AUaOr6#k2XFuoD#NrD9}~W1v8t zV>LDaGL{TG1hS>U-Sc@$sp#pSZkO}G2fj}I)_tV2K`Vj#am}b{p;+)I3+TV+cP-aV#I8v}Kv1p@79XwIGr;gNj^M z6qVKje@$+wO2_t#&*0UgbhAsW1gU!@oq@fMqvYK$a{MPO#3Yv} zl@ZMsyU{PWUlFMqJAH))or5}nr>cO`v(Oc^HY;**p_-8T7CUW0p)$@vMQJu?X=a%b zGY{yae}3v0GM-7Tkej_QA?h{O5_#AlPb$Z)NF!D?M?Qm>NkZky`Y~6U6%>&0txAL) zrht|kn3JI@Zi`_$L`>BgNz%lHaB9kw~eYa8Bs8Rc7v;3_#%xj=VE%T}< zU1bFH2jRHL{Fiz-Oqa$`3+<4JU>*R;eEi5o)Lh{5yInFd|9nzuP10(WwQVC=P+{X4pnT5k%||EwiQ| zhwk|-FDjx>Vf88b3z-znvIi2vX1oi16TGB@Q6afrhsfaIfwF)(T-RE5g@ha~6ok;L zz`t;pQ!DTWw^2_dIS-(XG?#PGMRfKvG=ZWAIN_&5p5ys%RIEevd4jR&p!A3G#d5dS z%L6<$WMO>E2qKAwoOlN90niBGv{h+rfX*>_SlLD=CaY0rMLQ zuBA?4_N3kK(YZ)$aXcYoMz(Q4$687b8X>6d>67;8%r796gGVOGVsb}dc+0Ztxs#C5vK^&oiZS(W1(r?d6g+{H$rNRXo0Z z>D*?jvSBUDMAlYAUALfzppy-3WKm+9W_1o+q#6$a4?z-~Gteziu8W74kFtz(0&pMP z$`F$gOVOz=wF-`c#F1OShvu7pK`+USfMPRv_cr^Y{}D1&(Mq{C3*D|QmPU3Mo0ggJ z;6vmdSPu}}I??$(v|2cHrd(;PqAeMwNPf;A=I|IBCqsFK^Cr~_tzsm^*U)JkzMns+ z(0L2}fH%X(L)*_yvmPPAFO6QD=XgN+3;GP9vXzTG-VR^C7OZ7G6BLXq5e3 z3p>PLcN2Tz?;hzJRYjj+n#n(^kk!293Z?Di)rD1K2QI>Y$pr{fs40=}1n_dXzL3(Q z6F`l_qh70WT^^so(cpl$*spyxTMP!dB}keRm5I~!DK5%zLE zSuMDqzqT037bpyBDSSlRL!gJeLL~fFt<6{KLk%&R`hXL4Z9jX6_bh6roUO+BgAMOa zXDHJlpVqvsuoFufqQ&_1%O${ z0mh{7brAa-pF=~OL24$-Ko4SfI5|N6-V|7x=8G&%9MBh>^6zuL4u*XO(7|kTZ*q^7$;j1tI|xLAH>W zY_;PGafZ2;F_kF_@JKK70h>kgvk8pVIL<25eBiu~IrXsa9Nl(<^JKgtV;D zK59r(SgG+f8q|)`naSjDeVubW7l+(vC~)%>7gildb*}(P#?3j*(E-w7l*mC#K@B7y zmXC%wOsQpx4E6+Wh_MT_JWj6?_~Se(zs&6ljg*I1WBQmC$~eP%zpLU=lE$d*h1Qiq zB;xJk-+e}#x-3xc-|d9C+`kBnm%?qKkgPPL zhHv%S!ni9dLingr=fDs}+(L8yLVqB^463g0z|^~?Lyt_!)uV4Ljt!Zp^>D;z(pKf4 ztfeT?32Kx3=9ZRE93Iv`oPxs-axv%A^anRln!uc|SA~tMxFVha(qleA&Te@R?rSk9 zTG*Ya4$7|HP3YO^`w?=t5`~23?h7ZEjC(PV0akP{YZTcGs>xf6wf)@J7W-`YRYM;i z(o&ZomljZPDr&adF|r8w1L1iiLO=g|Ru4^&xq=C_jKzeI zH&Mb~6^K0^v|0x4l#%DFNI}s&)Np5i&;q!ll*W)>Hvg?QO(_HB59eCG2CgG%)ER@f zkg3gNDAe`fepwT8@6kf-qgEG3$A-ln)h+lS~g$yNa2Od+wCccH7 z9y{m`Dl9=OJxnEA;b zN4;+0f`@7I3e{#9GfL8K17rGLK1y)gL9QCfKFx-I0y*8@fWk2!FVaXU6p)No;4$wN z$CY=_!UtJsp;~a9O3zP%ZBrT|6^UaC!86LQ%AofVs`9k^ z;cb?3U+n!@Jb_}t;}GtrG*N$5Dqf=ka?3|-$3jbuzc9f+?hs$OtOLzuyNNQzUvcAM zrPanM_zWcVr)<$dCIR3wuDRZAN6Rddc-E;V(@yyh~=0o_9&Y&|3p=vPtaT* z-c=OHM2#U44tD>)@p?AH2VcQ7(F3y4JId)*tOlc&^rW3s_sg;2CndCl$+_|Ogd*{9vcsp}Qf%0Is>Xg!s00x#8UA80ic%62oUzAk{we_hy zPf4cDG5wMhLT8tY4unvblYq?x=5>X|9GPo~kh|0{&2~URdo5X%&Z-i9#eJqY@RhN5 z$+f^-al;3;MqJ@C=!iTkps$ICd|;q-EBn^3u!L~q^Cyve;v(Aho8SrsSF#TQ{7n(! zB9i?}I9sZGdMj);-+pq4F^PEk5I0Et0~-sk=FDemtUCoDah2N1cuc?e3Rz6DzDUOe zh74VVmvm8CnAzBzxKLH!1IGdxhotzGXcg`+Az?1Kq$+c_Z%`5aIJ7l}V-wLt9Y^t~8>jFF zx1jUDDDxtI;)pTuuCN;NfN_W!MM#*)Jr2njutrUWN#>Kt%~XdL6-D*v7KCg(J~$Ol zZK6&&v{HS`@E56aU@Gj8Hc0%5n5Qe~S1zY^sPwVZNUoA=DNBZxCK7+zRMP$kr1^E~mI%laIR07lFMa^slT}D59=74?j?)cJAyAo-sf36>6 zDr(NRCyt-88)*QB?fss~=z6N)tyf|7@Ih#QnO1Q>{I=hQXx9oKtJtsmN3f;vfQ!7k zI@pB-+?AvqZ#r0?;;nfY??qgN;W5?)u-OL-KcQb z>*6AZ-g>hwZ|3Qh~<0e1Z`QC)}*z0>~7ri}PIT@?u#CIz%eIy^7umUPzH`ul z=(PNUI}=EE8+K#U)z{u3$rH6s{;0jcG%-I}lk~pYD({{yq<=@9L0n>~L(cytKOY(HRf>jAihL-xQD7VzEgGu-S_o(rm7y}xDm zJXWrPRXX`~Q5?2_;+GRGcsDUjBy4{=2~&7qAli zE_&~{A*G+5+}iX}evQ5TUS5VZr%M>)@>{=b%Q2ifH0k`A;NajjNNrLcpETVufYEyQ zbweTgHC$l#d8&8bsO@eUgBK>FwClGQSLYt7vGvnne;`yIRh?)q5Wg6@yO*}JsjH8? z$W*|oDC*fH9vlg=HmJKmgl8G_GC);k5u=5wq&rHc7SvQ@7G>aS>m}`{=M{qLF#vGGWFBKI7`N+ z8Hc=Absszb`YWw%QSaHr7Tuk(ir{_z$%2PAmOtuSmajjV%THfx~uZ9Y5 z4hKw~cgDv*j9lCPQb(4l`%1&%hcl|Q_CECuc`p2U#fsrL!5q0FJcf90Di-hxcg*?l z=o-{3%EiQ8j_*%$G_@~rSdA7QE2CE4ezVrv)u?1e(ze$w=j443lEaTWOnyZVOg~4j zQc7;T;U&a)ZJ|0|mfri0H4hGo$L!RSpO_Bczp*2^x3k0gy}ehKXnQiy;jN?SEwvGI zB&eF9v$_JWm{Xs}X12fPV;TxK%~K@+QGVgOhu}RvT&Ab@39;LkhI^RNhp?JFY!HLl z28e&leeDgiOGmaaY7EeYVALZLjDldhr_EKHqA4!TOo!<}maL*M0i(z31$GmX-;GV^o=yY0>`UDMr)y=W9QwmOWR!z>C+1k1c2? ziVhME?%ukTm;U7xqan*yX0FAtpa*=V^@&?Y-rewpD(Y!2uA~?CYFYB7Ld*B^3IE|} z%OSp@PS9ra1xkx((9C}U^8X)&ziPFnrrbVGURd|}v#@qG#Jf!r?2R$NoOdh%g%>^7 zzH9fr=do_Z+$WT7C-3zG#WwY^Bzk=G&RCeitH*jJasL7GrY_C*J~4{t-zI*)JoH3W zR$t9a?p`;*PiEL%OnIh?Gq5LAvz83nb;%H@rCX22vr$*m^T_vH=iSA{$Ns}k0 z?_o2C`M6xBU(&sN#+r8aCwkCI=J+9~;q%Ci$}Ms$%HAw*cLVj1BFAM*?hp@)>7BhP zyDN1C85f_@H(ne?5Brr6e*9EyYzI%;R!WQl8XJ z6KAtra{nfevd6#l6i>Y-Ut9#<1P>4GQ?%x(uZy`B^3g?{UGw^R@5sqNXW3@i1zz81 zYYIMzO?&*Gccr_hJs=v;KI8j2;AYQWb8maARnCE-cOv0UOb9+xmZo^AT8HbAr zbpdvC?xN@eztw8M0~V%fmcsOnllQnm+vE;U*CjW8G}^9+P8HNS;ch@qp1d0G)wdgp zQ#xtKtAh_WIa}QG#vU|37N(Gxrld$1$x+NNVdJe26q|c)GcOC~LOiNVYnEV>-1g4W zDI9@4nDcvGE?5HIiFJw>fXf%K zrEaDCs+^PD_U(3N>o&Q&h1vd@&TgY;=oxAEXTgTU;MWa3OByOUFCN3wzVs+hM{E2y zYbj&bD)w^NLXwxfwBmEkW#iH}ccU2mTfci0hcmoxiBf*Er7R8WGTp4*LnPh?%~%QG(tH<4!^ZLLe$F@ae^VVrAP|M?%N zS(#y{d6?v7-1Yfcs+!UVOj+A|(ZYT8Z+yhLfQv4N@jYa@U5TOX%PZ(gujYs#;(dJe z1o6v?139U7-_v#Nzo+H~r9DP6oY%gD-f{7^e9k7M^n6AqTmgQ9w)L@l@Ja1uEy8a&I*&f+iiCBXV}Iy3GNvk|EQ83?{!O8{kA=KW1rXMz1f84 zXO~|qByE>G3)Xb$Uf0O|?6d66^Urt(a^5e(JvPR^?^*;kU{hsGv_FaxUF4jn7 z+T*CY#*dFOZk_=mw6KLM z9s}2l&vh4E*xU+RVjK#46$y=WdLy&(RM>Cg58k^C-uq*TLwyIs?}4eLO&9>(0Dt+x(Ssk92ankPWW0GgnIcc)4){`N+`_{%=qAJ|L z7_R8vh3%{HO-b&xTT5<;_m(?l+sSuK3kd)&jtKw*N_qk(^kWIbE_+^>ywjL~8>&xxxhFhP^*-F^ZLyNQt@Nbplq=We?a6KawFw+P5fa7i2GKKCwtdYw9ybV_o6+R)(xG3x!TWqX}F@NuKbtno91 zmz0+6T6ay0t0wInu9w}ud95@*=v3LSt{u?YHlT(aQ|KO9h3RB}IpMqwyIK)l$CP-T zx;|!6koeiY5ibn7oz=+op}o1?{mr1W2w#}$EV{Tu;O>$wY5-z%s)&-w-7j}P-3G8f z>!fMN%AHH=KKNTyBBzlFm$<`e6IgrFFa4s;*|vWshEsbNy`$}MZ%}=543|F(=rXVW zK2OPR`t&kqfe#c{xWuzF!47Rdc7@`Wrp?FiuckKBle)4T;vH8*m>gRDX~MNq7q&%Siqo?e_NaA% z#m=x0xtsKY-ywRg=!d=ko+XLhJ8~(wR4gN7{RH7cO5Wy;oAC|up8C3i*SHPKDo3)5 zH$e#>i*`T%aqBId)#H5qg5NpzP)S_#WykACV4i-7{MzZVK;=ritJ`BWA{f*<(1anD zt$o6OGW?2RlCwzuS>Cdv`xeF*8XfYAZvL4PD-Vyn#}D`zc#WKBetD72qgwYQ^9I(y zfrkp-P40VU?2voio}uiJU2(G3MbhRsBk_MjsO%fiduLa&@Q7}m<{*E=@<*>uM~-5s zJlae{YL>IbxBJ1Q=eOz<=f;xrlzY@f2H|ZLiAVX{$+Y6m)o1K5<|u zvp{s@9Z+1^#WNRruU(!B7V z;O|s)gY>K&+KG4#e6lWV;m4Y~0Jp(_`@?g&oVbje#jlo6<=mcc;Mw%Is@C(k#682} z4VAV2fT(L!6YJ+7lJY*Pad{*^?BnJ$KvH2_^BeF1=xslFfq8l?NVw%#O6s^*bQEzx zrh_xV@HH;SbW-tVU`I3KJEt@^;rutin9}uWh;1RANS?_)r-y$7l{VhVY06u{H9uWV zJrQOm;P*83W-sYYqsP4+9b52Hm!Qi^m2 z@+>L~Xx*;4X0rKVhi+D&wAwygmf~++IJlX!y%|=UUlPaf(|D9ZH5@K~ZpesB5=;zA z5+mg9CD+jVif^svW-`B8bm^_1;3rBVjhYh%R2TZhX@8U(+Y4u=?k}%D13TPt?aO_N zoDG#nm<@r^T6H;-1HW^2)hq!1PDo&(3y_4(xZ6qMb2;~A!?7vF_@NN*uuRvOu4~Yr z8-CqVjcsHxS@Ld!t`DxBNo=z3PA&9AJ%&Bb8T`ih(4K$Xtw_1Fyq(Lf`4C^GK0)0P zsp@F{DVN=L+QaYSEm1mtU;jfrZYUzkfJJOnpEk? zqVb3ZAIsEJB^C04>#WioCM7cI^BVEY*a8XnZ6EqtquLZuJD%m)Pk*)-yBmnV{@%)4dAzeMZOM+H}mn2R#KBvP7=3RS;LMFv%Nnd) z;l(Y#B9$7}zNFNjM9Cyfn{tIz(ymP4Am1LUqdxDcmK0!u-Op1MZcp0w+$}j=-}Q5$ z{SGd2L$c|df(mRD01J+^QB$^){khKO6)djM#*W@T=-HwDRunR?PQIKOWT7^UNOVC6OaGTKfBCxj-}^vism2kl4{6Vm_Fa zJ20z3OVV$YlN9KN89Ijl%DNvOU3Q(IQ$!U$sbGB{`pjH}ePm&*3ABu@729AzhRKQTki5WF6A`@S{DFy7^%98- zMirFAxT;l3)%r)zgzF|H%n6fYg3MJnI4h8{(f~UZwQU0JV|p$aJ5fUbCW*^2ptt#cr`w8EsbSOm2aoOt;SAxF?ivLA+(tV511EQ*}77gvbpJ7 zU!_h}o~_E9^Hql~Or;FZ-lw&NpM4|4j6j zn?jDf5^Ca`LN;~;VXu&4qZNwLJ%XTGzkDrk%_Bfr8s9`&-}ABT>8%mP$|AkvFy+R_ zBXtQ>e2^aVk$Qgh7q`9+Y@XN@DmrqYe8o(7C54oq$*Zz-TB(DM#MOaRcQfK2VbJW6 zjmv?%-T0vq(}E1CFxk#$F#SgLTHU>ewfCURn?Wl~mVak6)YD?;T8MdjQEqiV>kGzX zj^WhLS1x?JfB~W=+CqRK^|Umxzz$648C;0s%sZ#==q-uDcCM2_2!ZK3S3T@f?_5(| z_GYe;k^r)=n&S&KYdeq(r7Lu}I}WYbZm&~Y?>FxoeCtU0&{<7|=F`#mSc390y3Z7n^ig6QnH!Be`R25AX!$kzh0Rlg z3$EeOwp}%^7o7CAOA1rqYpvetBvv;5R-Z}pVw&Jx<@s%0Ve+C=QFFEmLm>*M+fbh$ zgBO9eN-1)xEJo<>=W>ss2P=QtYxn9MkjCFBcS??{B+we5ACRad0R(9A?R1R!L(FIv z>XEBr*Z{S3#AUQ4y5Jxb006V*GE^*I8JUW*a>%S zE%41FNP>q|-Q&1?*`K%^U|5GFf>0VAYQfvgwEqq1=PF=cF%fk*KwXfM&>Mw|AWmwz z7qUvoomv>nq{r?m(vm)xwdagY;S<5G^u*5XG2Av_!=VyP&lkq!DVd+`u(K zn4@uqO~aiE5S}5({F=+ssdP)o8?8=ywBJFQ1waZrRN~&b`|I<@lYx_a*c9`5YxeV`kY#x&ceJlCAvh^_j1S1l*ss)eO{RG+bzFL=a~p+HKf!X_E?{YT9cGfg2~dkou1SVJFoa2`_CXE?ofFO7Y8jFxm42GPF{YOl6hjt~ zGBGBm6tR+?X?jCn&Z6|nD~2Jo=#Y%heh(>AH5yduhB!ind5hV|(X}HGWsPJsu}tls zK$Nwqr7e@5>30r13-7%AOf7GoQO}kCt_HP^VNgwTj-UZ+J}>DFZ566PWYufN42>cu$7JGyqw-pD1A<2|oNT^}ca z&ZX@L{YLF5QPZyZCk6YY8tmXaB^lFv>NsHo$cn#2b?~&W=fuF~%6YCcIxX5(lr>xI zW?{;!Bk~^vhpXA+n>X*}6udf3ZwlsvtAFqlY42`Pjv-L|B@1n4|3b1$MfrWqM-XI` z`OTzy$5V%4?gj>{-Ask(CL+c9Cbs*;Ok8zRpRC=NE*oL-W{vlnpJfkO;uf{!N7?TP zg%6yRdBBQOr?K^yQ`xm1Yb%%NwCKB>`rRaQ1KT7|%FB4mKG;11Q664C$fMo}G{>q;#j~DTT z;3HIX5- zMG^`V`v<>|df7T$hM(VzYy-TQ0cCUz(I^f`7*!`S$co_!wf$_`n?PdR>+fSnmv1G# zl#QY>#@U8%`f^i?JFO81`z_~d5GdkLiNYhY>H6R7)Q}UBK=5N~RzPL+k^`VKXa-q( z1Z_Qi(LyCP83<~@B14Yy@ws&eN24W+$~(-2l^gPp?}*T)liJnYBcG7suo00g56W+b ze&;+EIG!hDOx+9Ty6qq+f+iBp=#P)&kvN=mom_{HL52$HL>lVLMpVc9xLl(P4wjzY z*IbhoF_$0KB!$%oH2eJCYy$!DRFkKKW_#F7R79R3altd@3AO0^nAm?o|eF<%lx#{QKp~jBW|?XwS)Sy zHCA&|`JTJ^_o;=G`r~6sQH81UG-gK<^5qv<;%+hIxQw#48X_&c@o;GB5&=LxJe(qzE)En?)1e2=%n^W7U z^@HF7at;14kn#M`hT0xz@kpDAo=kr0wL^#Sbl@AE4Z*vxxORhR$mg(^VO-WfNwocx zuJg2soI-R?EcKDFP|G7DDw2kUR9Y@m*6X|pNq2r2t8srL{jlnZpqY{0lv|8Lc^vp1r$_{#jnXY$Y# zL65iG)b^V>QIW0zf;2lc_CS#}I5#_~`lXQ0Q*%&3C^3lrv^M`*PXY_|a8_~c2NTK} zSgw%S^%1uiWHhx$-_B|;N)-8d>$zw&dE6U zzbB6`;B(8oT4~=G0;&>sD7iy`P@(~OU2+ha1ybK-;he;Vq?L|6HMk!&J(<;J$eAOG z)u#SlwYIQmpuHS!3SUeQI~o;)JWb`6up3i>?fXHTIvi?eVTnxGU8YttMF9rW zwD%2S>GWwMd=cYD`lhBX=JMQfEc-w2dL~q(&{+|t6OP?E23UrjNl=5*;tqonPw zV5ju9FPzC;i$Mev=f6roEWbo1evRQmjavAh+g9=)c-dD2G6GuniLZ%Mv}5db7*p=C zPhbCvnlBYVw*A|n2gf4=n%Vqpp(AAOJv4= zc7=K5q}5@`3MlIC*S4`t{};uJ3Nq}=6sIljX=jpQefz_P4(0iU%xMtyoD-t8(j{N> z@GtQZGM_$WKWQHeY&%%V-$pLFtO6F-L7f9MQc@A+xbGC7KbOM07Om|_U3aFY3e(gR zPmw06ETomQ_79`gGtT@k9tXL9pw`8m^m3n#Rebkoo_nE2Ep};S!Vlp#j`;_>TsmRIU82ClLtO zll*tPWdXIYc=3qN>#nXxw*iIY)7eqsS*$>k|JuxcBfjHdZ*~+yPOZ-(Fe*Hm6}`W# z_&}u}jy?9@W%AR#tQ6HU5Z`~1A)OU??4Qnx4s?ffUq*o!+H|rcA|9x$!4rr3`c;e( zyf1R34lp0Sb|B&sIm5K#j9-yUdhUL`Vd5xI@l_?Q+~D?Fno5M24ALyeR7|GaEXPtz z24$9GD<;!ymg68M(}k%pPf#rDQIT8AxriUmaTXhvb55?1M!!+KW7sCsZY>xCpmlnX7BLGX0oog@13;nhUD7d}iZ|VYm0}xneTz>dxc?AydztnA6_PGad-e znhAeF(Am}&aFcK=w?z{O`q&SinM4<+&1+?%^p-_J#11g6po2Z=(^1L>#s=T>J6>;@ zicfw)XCo`04&MG9k#@h*B7krlb%_&%wkRoK_rtBDyZq0RB;rqz=39+Qg1 zW9dz2`j07sM;w0~y^e^|i)!CY+3`Ci34X{(A-r@v zefa&k|GA>`Yqu|pydW{5SwpNJetI1&Sf>3m9y8fwefdsv%|(KrqW0xyuPpm>R)igS zgeu_D>_Yq+`oa9Mp@`UL+LJvqJ1ws);bFGM$~=q-Z8b(8br|<;x<6Y;qplWBUPMWG zv`f_rjF}Ke>Dz6n>X~+0%7<~vnV_E@6@pR{uT>U(=HrZgEsd;o4`XHZt^O{)#r)W) zt&uLjtYCGb%EtZ~$)|o+(W4XPGInGj5nA;WuiMNu)EVN^A1of6gY~wI@^*e2cU{32 zXZ`>_pqEpPtB?C7H%`>dkyqsFyJC0}JC~_q`^q6qT*Uk4V)f7 z-NrvybZ{p!NWSFC-?=Du_nKe^t7t_;tkDLjeoRHq`uu=V{aNSWY5fO_Kh+Aa#ytyT zKA+%?zc*fFEB#|+XGRn+u**d8r5Q#GZ^{|BUMj7*FFKh&`_$Eu(*DqpKxy7?vYPjH z^f1M2UiqY}CNkdF#G4^1_wI0f7?P4BM0TgSTl^Rdv}>(q_{^bw@5s8bCEyC@UEi;n zq5Cl+9ek48fj*xqRwmPb+ASmt&)h9e`bTtJ;RSzMG1gG8GuGhy*Q)CN*D}@^eHTQz zTMRCF<@TSE3uouX8s6$9uO1|N*kLFM9#C6t>*0j650E$W>9xeNFEP&kO_^q@XtPa$ zpefURKGKlwR#am_X)o}jTb0dir72eJUeMJ&uX}hMNLY5T$FOjvspGo1p|oM&>jA&z!M|4M}mA$~lH7c&;~HtCv;Z0_p}L2h*X@*DLwzO~>X z{|NhDnjUj=m6?4kLqWgyh>_pB&N$~|Mw~=qv0$>*jhIXHw^Ot{FW;^kzjs^3IPtX$ zIPI&(k$|%qn=+NH?cQ6xd*!Or^ym$x!I!rZcWC>NE+)H5AZXC>TInsvwSeyn7jvUx zZf3+eUJfYyihJjrW5u*V>xxNMBq52zndM^WF~_S%x0s_0n-yb=7lsNXvjLYr!s*}I zU!B1ms;qL}e5{;3#@bUO8!)nT;?@b(h3*}yZ%yvH?on8`GL07H+)h$r9G!Bde+Nl_ zUs{2v^r+z!t~K|`rNkIpORWb;`wp-}Z?HsM%Sm27@&WS4xLYI3Z-n0%E-BB99gT&{ zAOh@e-AomX2c|h%jU*SryJJmx!?fA;Jve2UH0Z*i1;0}-h-yg44&SPV&4%G_rujM| zxNxZ{(~q9Q-Zwy$M4HF^UYslfJ1aNN)fW%{9nrABH@fVW-nGQ>fu*c#86~wh2@*@u zG0=<%Q2iyE;h*t_-_1NAjIF$AdviLLPuiBdy++^?vnTYt-Ac?|lzC!7AgA>G)l8T; zt1@u3;l#b@Nz!#i_;k_Kj7I*uEDopfIkH8O%|&L@pY-qc^s4G23Zj)-F~?jg#P5V* z?b77GE_CR2c|f8?90%)oHn0q$jowj@zZ$nEcFTRq~LGS82jX6EU2oo7dbsahhs9)B2B3k~u3J6are=GJ4Q4KOBNmfqHu z0W}^a6s~F|ge2_t)}zOdyU9*f>aQW6IP(B4`wI&*N;5FSyyX{^h}AdR`Wdguf#--E zw~u#A<*0L9GZ-w$NblVFD|G)q4E7lk_P^`-xqsCEfMOfzF2LXtE| zl3XU`RxaaC#K>UAbGtuDuKfxh`51Z2!li73iqXwM&P~f*V||uw4g>%6hTPs%R@}49^8)mgxCq?uHQ|>$$b=c7 zT*PemIp49<+^GCiO1^Vwe(vMX&l@kj_qmnqSkgrQ;O2h*!q&<-IiEYory{&k*X!=> z7WWl{LK|NuOx{}GN(ZimNxk_L)-{4D1@@cCxYpQ_0EYvEh4Diwfzq)rq4r6Q1;ABJ zF6F1m3YP5^6;7eUZ-H$#HZl%Vy(E0ntfKE(+wQqQ(z+IIUwtcOs5}E$HNyzEE%EOe zGb%HCE8G!&$CcGtGWeqmK0>CaRXH}P&-B;5HXQS=8DeQz9s^wep6>1lahWysn7#3r zR+j%@Ixn~kE1JJ4RUvJNwB-P5*(b;G`Exe&l6+UU^I zpCls+b^oQ4{j*p4mF^b5z%Iu>sLmE9Mn40~)-L^z996Z`De;z5vEu(f9X7JE`eYt3 zTZ`z4&6ZN?dStugYILv`T`CH;EWi0O`+$e|5b!@;yrn;rp1+#-hLb*8Q2qe@=2QE0 zYg1F{F!g^Eu&4VZZzwynanh83Coo^H+tka2?o2UyQ9EQkGV_=I^@M&f=*f3j*Cdn3tuR;meJS{1;PN zsY%8yzJvG&bRp)?6cPH{L3noMa?<+w2B;mj9pb}wLpP;|2mMYFtkQom4U7r*UtGQK z;CfFWlksJvLL2C8AE|7zuaa9U^bQIEFPE_d*DFdyk7Rm~;~K;lRIS#7jxJ6SsyoVQ zkoDq}PSIAlN4lXFIY-p}l!HIaqj#6SA`eo3t4kkCRjT#ov?J{JVT)5nyty=<`gfYL z+heTmr_J<3*N>9#4?ULaJR@!fg8AZPng3RNE>Am_R&H6&JR&pw~tBSLp|kWvO50NQZr>+J}sQBp&e>B7iss$lFPZR$RgV>e4~ zf*hgaI}=@Zj1vw(be<-+{uj23Q25g=v~t>1s#1Xs08asir89pOFviu9#3AUZEO(OW z!~C@rzwXpK7tA)}JY2QNgcm^Jal_)lK~MRl77HuVkPUiH1yI_!R)+zR2K35A>gXxV zuH)Dyv{BY)WA_{euEdi&HK2pDfp~CzS5W1=I%H3=Wo~r&lN}enS&Y9&-te{#b-&wr zT|YC*CEW{a%TNPlrdm-2Q#tMO1H=ff=j<}b+NV92Z(7CqulpS6$|sfJ1S$W{2HmEo zwjw`LBzCjms4D_L2QBZbSGE2}oC$RLL3TS4M76)O6{;(n-^!>v+{*g2n;wn70ryjQ z2ss{{_mmf4Sy)IzHt#vrL22_}3><$ywo?>3NUU0u!m%ZdNMnaopo7g0g>(KCv_AlkYCIsmOH9A5&)iCphdw9=$83R?NBvwS}-d4XG2P_ zs8O0mBIB74|2I(}iQgddK=*~pNE!K`5E6b%eWixwbL=2?Twt}pttODXNh z9Lf1V$?R`8f5oBr0$MSX7lh>^lah-6gt3+W6*i9S!)h-GJAkkys}@AHiKVyjhZZC} zfoXz03lemNUaC+}*ivtPQtq@SWu6F7u@4yxfzwU7R-~7o26Br`Y*E)}mu{#AGiW<<=1d|GOQMSO2%{7oRH+5i zxh6RhtNX}4=A|P7-^EBsRpZ04(q*uKqzTFQ5p4l_i)dXPS8(_6X4E-(0#fcpIUcy6 zL1*AvDQ4K&9*AhOo_P2;X`Ko0a!pN&vg-d+=bmNN2n-2GMamCwWr&?f{rTV!Nt;?; za73hj;8P&DDax)#r0w<@kNMp`cWYV7TZ+x6z;IcL1S-O>M29Y;Lzsmj^{=^;#qY>W z6n^0LIY*6@LVuJ$T&3>vWZVv8S8UXE9}ru2846jJGT(C%YLK#a7*G1!eEL9F`rQui zjIxvUGX=Xm&^XlKU&CR6?HWO{A{P%L~Yn--QAMq&5#({W_&VMg{(vgCvJ{;ytMFI(B1G9ce zq~VrOYa>X(1C(zz=$R89vSb<+xcX6PQU-2?j7<|P84(Cbil`ltVmHw1hpzkuI(H+- z7(l~~arm{6vTU~^oUwq;>j8aU@E zFUGO})Ez~hQ$3V65I77%8WPz}34H`(Oy8i+2dm5E#BRh5#>vqSoB#>EmCdjJEhjvZ z8_zMW!zs14X7nG!yN(l+v0sIkCA=W`^kt}Dm`Va`xh7)#Qf~cFn^f0=E_FrsCzLEK zg|mg1*{0wm@RoddmddtiupOeaCi~fJi3(p5Le~Gvd^ij+=m)P$WDz$0Y($ zcB7czCnaE`dLi(h;V;qsBqR;~uNnHck$VJ#N7N8))Cj)HfcH|hQu?FvAZS}PmN;*U zS{_0(zCI4yE<+&FrZGtOaFfg`-l0hliQ{6w@BQGE+~gmgEI^ll_uR3QL|->YPZpF?uzXg-ckRlR)pi?p1eg4un7y=Ukz8=$5e?!+yF=u?bP4cqeXdy%b_#b z-#iB~o;4L%`8~jT?Jo_#@hY!V5 zH*JB3x#*J)(*=apiD1N2xoXV_I*Keck(kDOr&}L~S9(kkRy(02scKCpb<<0DsmYva zOg>72R(eP&n_eQz{!c?gdn-Jo|1}J>_m_wCzlMwUR(VMO*K}j8o20riXTilLlax(f z(At_e^oXZ(E~|^-6&~GGl(-8eE;X5Cpu~+RG4knL5K4S7o05S=Dv{N{5t*!wIOsng zhUk4IK0tnfv9st?h^RX9Q85F`Teh&FIEeg(3zaTIm`oODqoW_gMj0-%S=LSIZ%U$WVosdD$b2~Nn|JD z(%;Z>M943IQV()zwj+rh7zt%c?)bE7O8z*9Y}?{}_r_1jE7WgVT<%I5(e8L-OVGlf z=({{3m$u7ekm`MeiBYQsE18U#5PGJvfNY~X2Hi)Ucw+*N%TT!4n_)LCLx>NE^c$r@>0nOkXK2icC{0~?7<)`4)APO$hlM)+YE+0t)iQS+rk2=q7 zlyaBB7T_;WF_*=o3d&KKx77NEl*$*vL$#<#Doe1Ph!)EId%+wrLmb;gypO!aDNAq4 zy-A0r^=rX8;wk(#co#k!HDZ8ex(`GS1%> z+^aBMMtKGP7(>dDnD&%rpaM=xCn(XtTrpALG@=@(ByAT26b1hcK?32yMDANW76fs>W_t|dDK}g6;6cN(2B{^(Qn|}d70HxQZh{EoPh?m$w z-(5A{9u=zo2WEwe@S(MJ&=16=hl3@}8g>xqNldURpx#$jCj5`@Yn z?5V0CqU#=!+cD~qkHp0(85CrCAvEFf*I@b_wi*QK+G9`$UwnUvPG_Q^)=Y;CBkb6S z1zz`4AWRpyE>2+}-tvC~)EFA=sR%>9u^O2N5D6A++}=^_?C#PbAswSSu%Ewf*%>D{ zNI!d7{oGywEpTsPw=PmNP7kr;0DGtX38hcANI?6-(cfQ?4N{uDO)VAr{1R9%tfxkw zzdzj5n&RDhBYvFnev`+nuidZ3p)WOvORC0#&$@*PZ4b2uNP<&+QaU_YHwM0zFvj=P z2B#x!YedCIe|tagFpS}ycT)=WBl`{atjhD=D;DeAZ7RxS3nrDXXHl{=Fxp!p2A>jB zwq9y6uY9Zlu#R~Ox5)dVNKV!ab(S@OE$j_;i~Rd+%;#a2(O&~ALif?%o@j4s&^V>c zQr_-t?cYcX*UE=F$F4q3dw8>9{0ik@<^s43C)WBEge+!>`RNV8mCXDv%-IBgWI7T8V z3Eiw2>>l%>rFki9S=F0yoHBXe9gBp=`QXXhva&IrGRG}N6kQ{$RTM=fWB_yFb+phk$`}_=! zn^})Cywv4LL`egt39AwJFOJOFNba{nP=L|yIq_0d1-nJg3MS?u++w#fXf z=fh7~+sR6#D+);DuFwWTgX#9=E29u?P#e2ew82|Agj14wHt>STK48>NZ**W*lW*I` zHj6WD2wL1RuL!agYV^f8^A=8e+2i~B>g}^OlRUkfctLU<{HyWimG$eaYIY45Z@#XE zg(&R_MM(8JtF0S(9y2J1HoTgUi$`blV(1QL*J6VIQEpbPe}jWJr#kQ?YlftThPj-&ehqwqW+txa1WsO*HfENsD67W0 zp!3hD9vJmLMAj1qEplKJw=HZiG(_=zKp(#WmRv;_IHEIKe=HT{oKggTq2yE@_gC`M zv8+sQZMrC!{P7@gHtXg4R>IE46-a+8?@g?={3^87%B}cio&hI>Bwr;^m3p$Ov2z#d zr!SU>gS(f9KB|oSih7>Ka9LsjYJgb#5cP=d~)jO>YvKs<86m z!u(8Ac8{$A(OE2Tj8{xd%rqVCacd2bwRw-z8u9bHQR76jM;c zXjGEMyh0WBL0`cB)fBqG|EHngPWj+1< z^jnRZIu_=tqqa~{ubB6+hdm!m$rEax!hYlcnk(^I_6{};jde~Teg_AfS`A})o%E}Z zklx@X{t`)zRDqq-8$4p6@$9=&*x(n+>mO=7CE3rc+(Qjjv)ERfs<7oqGm&$=;$@DwE+KIp0dO zPg+~Y=h6F|LJM!??vR|C6`?+0O&$r`TDFbj;2OKXb|AE5i4%JV;m;x(%I;e}rsEq15XPC`;}qL|0r$T0P$!$2)RMT)b_@ z`&(aBysmr+@{Xr=UApfMgZ$#tUXv1xRrW=4UFwqzlfC9vRAS1{UNXW2iFP%$>%fq&z9!7 ztY*p9;8uj5C;J_!(#rFmuMKW>4OoC`{VzRfgJlAJjuQGgZWZgbjup^=4RkiUH)>;wqC{^n7>I^j*)!JlKY8W9cwg)b^rLq z<}vtx2<@S+#p~?EO2d`*yg#SfRD@f@RV4*R!%4NcQ6dVoeKEL;#2Rl+Gy=k!u_*L< zt8s4SHM8PsHFJrX0@Fv_A3E4g8T-Ecru+T|g;-U|d&A*Bga$)|QIz)j062>nk6~bM zYf2yEAbv{v3w#FH0G(tn1=v`q2u|P8n&J%$uhtmKOQI#O(zN7jS@t6xFCVJIeR<#R zx0Y_Pm+W_)2Dw2Gi7zk-gB2#kBMf}Z8q#kS{LBgsQtRSrSCYZ53Ta!!(d%z1lO#!sr0 zL?_G{H|BAuZJiX5ADLl371`8Om7_r1G2s^ygcn8gKiCN&e)D zVdoKrnz*~6#U^;(>>%zQ(9TmE4lo+_Yh)GgL<6MD5U-pEh*P!rib?ga(ZJ`*lRN$l z*dROu?J@HXRZ7rSFn zj2zC7=J`G-mMezs9-k|M&}`&1EsMIXeqE)Ni1xZ(U?fm)QiqW5;*oxlV9{(eq-M$7 z8LA(z2=2rB>T#MSCB6p*0TkFNvf>OjO1g5yBBi~+npyQKB}TuKvTMqaPgI!OC|r$s z+rVhxI_*Q&k67Fc?WJDm@fNZ?=vI-?sU|G%zWu?&7<GNBkeQv+*p2PwaH$6d zEwIdgfY{Kp^`WcgOn2a=p_3H28eg)@N;^U%2&;|Y`YW^o;C#Inz3VH{q z#E_TqUkN`ihwe-N2$|BN_5yO74lG<#5ENk~(yAk!8;sklxFb{bd&FjSP ze^bUcLd=kxO)hm1C0laa#R!o5A%B!smhby%Vkrfp)4{ezE?> zVOlek+cjpEiXB#;GwOhc;s*;Lo~^6_rBp*D`2lI8VZD)~0ci4M&H~^1O<_h4k}|7C zci@}R2y9c;{2Q%`X>j+u_wLdkspRoip%|s9i3uAmBI*e9G)b2HXyd8sIw$F>F@t?IARxPFDXuQkQbZjBbwO5sdog_Zn*lO;~RL~256Eqw zm3DVyLm%cX-5^{aq4m}(bl?KZ+^WHobuKs9u{F}tekc&Gd)g6cdALt1B)&c4?|dB) zkE_8AUpLr-bFe{zN{`~Lh4;#K6H?nFAydo!z^QeV70U*pSy`@V- zXY&+i)P>i<^!DN#;t69k+b1aqPdU(9hACxxE7een0!*W=Sx zW$Zr!PvLd^BH`51Ms;lH6gl31J=jDU^#4Xa`j&W@8_)Z4krw$-UD`8*IYU?>`-(L{ zi;SiE*`ix$w0`4KEbRNkiUXitJ<~IOOHIWpIP`V^}vbat%4ZpQmGk%z?ugHr6nnI2u04^}`57T=v?@(#ofBCRc03v8+nN zYCY(c*i0GrGsbo33tidL3vdJ(JHPEj*jbwy+{Yi&J*IfEE2u$$2Bxmdb-7X_AhA?; zEZVp88$PLY>u_nDWLToDH7W{$f;;Mi4Jg|t{FV9h<8zrC(}@_?xP1GYpaU}dAs|y2 z_YNeq7M#JtW>GF{;ICp&%Zbtb4N9<0==mJp->Vi|al9jf4}e?eziEIRg}Lir1XS}& z^Dm|KAsq`hFqZ9*zSOXeI;I$KN3sl2K$IsEdKsR=FW9+&#S%+v4DSKyel}kBB4r(x z7y+|A$U_vV`AhkI9cly^+t>e9YWjh?4E8)mj}p5t5A~V+Mz3xuRSLypDROhQ`9;X` zN@Ht8(*c9#_>)#lOgL9P5*XH;3*0_+N2&x*ZGQKP9uL$JstGlkEW)(s3-{wuR$sss zVHW_xRQ*o)Ri0CWsk-n2MyhFX&TQ?xSuC%W{t6pUx21WbAJ{|07xP8$=*oS#rN}zr z9eMa#;X`gU)^?kn4s#c*!DW#zVrHowlRJf=s_-E(Ll_zj-7dl|g)fizca}bTrzlmp z{UpGFrhpb`Sn5OGvl0`y0sD#_fU*%=Cs)i*){re&l+db7d7}qpVhbFU6mPk#J;hUD zWr0Zy3eVPxc#?d%jdllo)>r>kiWgcglBcvPCJ=V%akPOuz=IblhpfEiCR%eI+ot}2 z4LJ%@#8C6qfXhL5mgEK?%XmhqZSUO2w{;X}sIpw)XUVU(h<+D;0W5NdW)=*uVLyy#qbND%T&-#_>BL|Ch9A!Yp(+Pj~g&p zKg}EC>Y~*Wwm<>d+sKHqMGw5-6}FeD$`EKE(E7QA(OnK0$#VG(gI5LxnrQeC@>Ps^N?)VH(5$8w;#L#FE@Fh5Q>RqO6^pG*s+N#nkpBT(F`EW4U$qpf z+`okC2rWMxgPOmFLd!yRnAmRWq)3$4dIe2O6Lharm^e-)ov;MD+pY9YF`ar>3aSWF zXMNNBO>0Fi1+ze>EDgq~d@P_4IA0I=YQSZftb9D-!Ipd!zVM)OOK2#J=F*%UK}UMl zrNbDgKemtdaSY8G|6z#Q;UTW1q|8zsO&S%G!F;l6rY7 zE%;TQ8BHexYXWoBEt`nq#~-FVDa(*KH!7vkg?x#p5??uTz|9}SS&?w_d@1I2{)NoVUthMF(PJK(^I1nG1f z6gCUCPcH4E``rv3@>f3#oQ_EoT}18FZ^~5c0jfYtWw3sNO8I8a9%Xm?{#Xv!wjQA8r<_Skdi+c=K!?dUlK-4o+k|C4A|hYemH z_TdcTFnxz>7`VhLokED9o&k5DujnGAg)74T0afO|NcQvOX*}C-hm)|qBjr@D0uxi$ zR+;n8mJlBe%ShySU?TspWKXSBL7vLN%vRW^MSIHka3bsSjHHoUqzdT9gr&ZyGJ!QH zp@qv)nJc9K!1@tdqyE`&^9?NrOB(8rzp<5h`BNNuuTCJYWg(jPuQ-Q-%pPe#Q9vLti>`TU>k-y3j3xul9GeaB1COM zF@t(v@E{(%*Y5v2q~4*`23mw}%V+fZiu!LawqY5niW;iQAr!0j&f~mZVTUDpD2V%I z4|+veonTZ`;n)l|d!ZunKOlJoyaOJtMT5cy>CrSrB`eGlP^e_Spo!X~t~B*-mia}B zA(p!zc>!LOJ2G!^&=h<&Xi%m;-4Jqmwufh_CJ}3MvY20JVse@8e=zbHeK7WTi2?+e zTg{d_GQFQ1=TsQ6DDs542;-?c0iK15#j`2 zG8yil6Ndy6OG;kPJN1bm_a+K28lQ=Lc#0KgR~atEn;~u{`JI5_0VwxewVWswllL!Y zh#a|Vr(9y$va6PSg=C-mv+D8Ql!O&~GjM!~#7)byxoU$ftG>?Vsyw0YKshffnz#Hg zby%&|nv#GUTF=r<)2b^LDZg{c*1)2LpfKzoVFk3^owtC%JBu!VMig6zn>=l8VwG7gh}^Wp^NW`K{47W(djeV!A1@=*A5 znpl3ls$(hi!7qx@@!!f=-M+xGzZRGMh>`dfo8?)+9p-R z%Mnlh7rg3y^-oq$E%id1GqACc`WD6-v!wbpu*;c%kg+ed@=y=Uk#%Tv4N((*j+fP^ zX(dMYQJ!2gpf2Rm9q8+f_$5{i#V>o-a(o%%)>?6By$0-7WoT*>?(&N_F^;zelvz5z z#ueyrBqaGC0%d8WrSoj0rJXf~zu}Gzc3)oo$Q{V7$+iYJl79yn`FTC`Vf6M|NF=C^ z-~?%7!p1eKXy=us{Wn8i2h$fPcgJfbMJLqDc5i=#*+f_?`IFi6c7^OfhSfYc6sT_k z7*Ot7TYTK}W!ySr#i0K`+`OJBcoRcyE(YFl2&72XhjAkLm`YHA{}i7KjxK=r+AQGC zuCOmeP2uOkG4!RxzKnG0H_4aJPnjE8`FKAu)2ShKtY_s9rW((&p2VwKLINsgY{&O- zZf%_7eVxAetqNb88i@b+&NjQ5wgv}kxk zD>3JsF-|V}Gh8Wr%_q_nwCU9Y?J)G(+)-*UrWh9dOY16}*;5nz92jKpsU}6}gnKfvSd|xs zIvgeR>K*zk+Xp-zuDF@a;A8fC zsLp?ZTx8et!arwZ+Om4;LJ~JuVK+~i>?f6FrP1phbUGeubX6@c|M6Qfv}q%GL@k@#L>; zK?W9mGu4VoxQk}d5#+xnmlx5i#o6G~6R@5muKtOZ#i>6E2~qT^8uT4a#zOvz?9P=R zd*L1d`Y@!dTVj%axfknvHzJTsFR`Msu7)2R#c5MRHh2qckVr}LDKv+fRc}x|(RS=> zl^Jkf@Nq1?pV}5_<(-)q0D8sv_ z-})eQTeocG6zzBT-YMwri;RM)kVT`>;x!EQt5bxmD%=@*_4uA5Y_~VWlZIkyhUVNO3}s0umqUfGjYI_)57L@Zu0 zg_Ek!mYzVmpAgTAv0|4MS0NjgO`75#$evtc7SG2ZLaV!Hi24M?;k2i5qJ=l$OfKuf_2?stRbp)2uZB{ZSk0e9lnq;V@t z68 ztzg=}Zt2?U`KIm+f8W zrj47xsU4bv?t37)OJ&0lU`D+o(L~gdgs+zAsov`2AqJ*hc^y7pB@I5$ga!p{FG17x z0>qFu9@l`pnB@*AO9^ZK_kaF+NL++frTt|j?m*jsOCDuz_M_e332jXiFSj>;-?(&1 zcG;1Ux*uc1Ka)<++?*T@yJBZGrKT6bEOF%z?pfx(!Hj)ntYnkOrTKVX2({WImKcBO1 zxnex&Ihq{uhVt`SK>z3fv@_p=mNmBd!+4ds7H(MvZ~kbp%lAjJf<#;TEhpD)wl@Zj zJ=}Y{xX1&4%qt{UeL0eta-#`;ea$@IX8<>I#QODCiHp}eAHv7ig_ch`=1nZA`y5_h zOFm7L_qrPTPM+=MoYwEv<5#&d)=eMm`>vS(`!*RI8~gF9*di$Tdre{92g??8|oBFYK_>dj8!z;6~VZN;n<5p6J>fvi8R`%-^?}kNGhTSs(r2Z*e~R=2gK6 zxyz}&vFF{5X~WY7j#sW=s7>Gi^TCyT8+%=TSNg^C_Kr|*>OkAo{8IO?zIzlqJnwS! z!SPl5YAw3B*`F%r(x!iZblN%a)!fy<{jtMXyP?;Ex|k+<`Fi8S&t|0aC*OA$c5}9$ zivn+zkbb#OTrJG$W7`Mp)RPN}FPnt>4CWoxcP`NPs<-#s>++zW`lDCj%hHUK4r)%S z0mtXSwz?9?>O9xbxBe$SPO#w__^qYnaPj!g@vYyBWjEFTc!nIa4~A;~89o5!cw*7gM;pk#^ z+xyRN^kYbU`B&NR6W6tYSIFJ$v8TO2TmI|vi~fh@y3AXV-QBNLkml`S?6&Hh`Sa8D z9sGA^sfIn))s88XYGp*~oT^`8k{&PR2<8gZ-(|QpI&h!hhrjKFagm#m;#hm->9nZw zDruv;bf3%X2`CxFUo*9EG<59>^S3x|{yh9dp>(_T@Hb4Sb16M22AuI7y~@H@=%)*> ze>yW-@46ElZ97r#oGR^k|NMJZ(~T48*(ru9teQ6guh%c>%0Cy72b=AyN-(@}3!8QM-8aPc-v^GX}BRNmUM zFUZfZy4cZY{99vX-sYaNfZFM$BV?VP!jHEq%3e(Nj7(S1tcW2!yRq4}!;XPB3s!~S z^jDUAu00H!os5wmGu=h-yBB0MzIa+%ba7y&tg4;&{Y&O_yVzj;{M*jSmm5bfO=*4Z z+QQp~%}a~To`elS^88ph`#Qt?SlIQwl(}6+gklSDcembMF+K12Nz)P=VV+P{NcJb| z@TW2L71Sdo{vY|B{dwQt2jodgvPM0cqgA?~bxhlObP!slXw==Nv{E;U3g$ zc{|ow-q%wBY6JUkCEBYnX?f+J^t@$fU2jy_)t)RI7-+#@yF9jdZr-i$>s)zSLV8+u z-?ibA+Udw%eP&@#$`v0coJHSyS9MQbzkD!cuX1j*-br9w_Mfk@FQf<{b&G5 zFQn7rmp)~t1=LHnRV@2)UF8R_y~XQT6#0c&lQ6v_rk7@Q?2W~>h)(_HwBw3Ned%J_ z>oo7WZ#nSBz~izf*HjUL^W(wpa_1N*fZp^11}?x`ZgC$%ed>`yPua zReu{9B%YKUnGIns``ocN3s{+v`qS*pFTeBap3Zc1sBW`u_D#6zd70syJ9_yV?7T7} zqs8On(@FE6ZKORd`)XaSZ|LW{SNbra^o(QTmfyFJJ#(0O*{L+}p1>jgx{_zn_SXw~ zTFHQ6%G!KjV%r`O?T)Q54BJ)Gb0bWT-(%RlKXv7Dr1L_%p(NI@h)SMWsdoFd%?QXb zY?q851asE--}cOY;%Zp~*eFHh>rbBooV*Q74-*m+)1orDr29xs9rf6cqM6?nXjfm?`PYAA#q#ekwbdIL1h>^4pS; z9yhi*RZxB9{nm%_5B;ML?h#!pLSx_l1Pc>OPce?_eH<+6O>5HpVZTwmeR;Xv6!UtT z6L|8utGPw(!7)e>~lh#D8Tc z2hAsBU4D03iNVF40e$+AkIuNhYUS8tp{dUylX<=O4x8r8UHY2y%GXv;TIf3QXq&-H zzn%{=CstL*2_8IZx*Q9RGVDipeuVt`+RC&2N1cW0K=s`a zNAdGJJS7OV#Ld@TTaARQr+s+8>nJjva@%_BBJ&98ZAV;y0kT=ZAPm3{#8ySbt>DAt z&)3bzbE+nix_|HMEw4ciNG_&vX~e=2{$VzqkyD6&1gt^2&B`1My`KYxkHQ=5Zw?$G zS$v=WU=r{*_%M88`^dAc_6 z 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 literal 23540 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_009_short_fiber_orientation_tensor_003.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_009_short_fiber_orientation_tensor_003.vtksz index 3bf22c23204007f7d4a019c2ef34441b0bacfc8e..3f224cdad09d984bae2b4c4c2683be547430c9c6 100644 GIT binary patch literal 23456 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 delta 3254 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_009_short_fiber_orientation_tensor_005.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_009_short_fiber_orientation_tensor_005.vtksz index e46849723c7b3b26654ac7d0b0613ea78c4f4ed0..fbdff90d1365983165dca40b27374e999596f474 100644 GIT binary patch delta 22250 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

PMhg1xsF8~n4~=H zjKj)cAJEf=KnF^quQ^xVFuz*lj0uR7kXJM(yB2@=O;3bJ0~BByeNj>Nh0GYWaLMDs zpljB6d!qdR8A?ykOK=MEUXTHtFEu6x5i$G3oXQfKX`LL z3s|!}t>38kU_i!XCPj1%pcJ{5uww-W0{wJGRE)7FCNQ9_=aLnW*)2!Y!us`Nok2&NH}BkDrFWjd4u9F zGwF5&y_2*W<&lM#&y{1U4q#2#eoo8Pn8sd zfHv6BC~UQ@{|QK&WpktO=*CwNu(3&bUhTbvzbcazbrOj2NX8#Xn@?Sq!Qbs!pqD5= z8nlXRPd_4#G1LBN!%JuvM83w~TOH*k`NR#1HbXy}ja1eK!074O4rpT{ybdMgRT{lF zPBb#hOvlBsV&KOJo0@&1-i`r5T0t*8xrc$&CL74KJl!Ljp1_?rPy>3e7Eu_-$k$$E zRf>!mH1%%|@_qlcUnw16L}|?4*#rsRV-kXq$>qB=?Az^Kt|RtQ#<#coyuV;OB`b}J zseOak4qQMmv70_V(TV&SYSvl)b6ReB=@Yy~6f?T2nId9@c&09-)p3n10Ieskd%OiQ zV(pzUFj5$n#RML0|PJNODtVMC;)*kR6YV)I%lrHD9?V2G~WwJ55r|gHRh= z`L`2V<;9TWNJVn~yCVSF7<<+@=zJ_)?r`MqoyZc_f`Jx{trA?T(N4%0bZb2c(-0&a zpGp4f6Ho143&aSJIgA2Jf+3OJYRlTzBaPOqi08H*b;HI8-;JR>z|G$yS}i9I8W4Gz zu}y7XL)&2TkDnw62wtqAR4lQ| z#7^-1Zp|Q(MA4c&6}F`Bx% zBl-uJ!Cm@|Z<^b;6m$_XBIfqW8!S4isi8J!;7LwGdyKHkU+(uay6l-)L)3z{Qj1iRZS(w!n2iRXU0V4EYLZ~w(CtOJTm}aY3alES}6}tgkte|$EcwMehv{*lZ zO-#VCo?gY)0m-xF76hnnkh)NQ96-g31N#UoMndrNU^jG$9D}IK+-D7$^LWgrUzC0U zv_!k0E#@hI%k7xBWmfI(n)a0tC49+ed8cSs?Ji*PH9T6XIU%#G^8EsEAIX-Bd`j|T zFNs=&FF^02g!gndTz;M;P#Fs{7n^!v1EzsG^3A6l$P>st&9yuLsvjj!%s+GlU0l0P zvULFEMcdN=?NjPN?)V7*N4keCy(o=8H@g~;0b?fo+uu<(JfBGQrzA*^=DMDsF$g{K zi2EZ?@TJ0P&_4z(Jyb@Jyr)cV9N0~>kvSpm*Q~?+RQma@Nszr~KxWiN*5i-5HU2Eo zQndXG=sfJj0=sGtx}-z{@=U$?{PF?xR%WU^Wf$}-OKvG@jf@~c=?m;Hb~grB*C6pR z2fDrZkW9JsR`kYhACkMb~v zFN8zeGmy_z`U(b6j}K=cJE3f(%0<9ERB{p+14tdnOIJ*Qtgv{77m(17>xh$3H_%Wk zPclMtsd*-@gt~RFREBUo0|_cAY3np0o25;2Uh@0MHChOh5U3VQhCFi8|7xyd0UdlL z^Z=mnkyOqLlOU;kyvznvmg#?4QRjia=n_!4$-V;^wplr_K{5DLAAMCo+%Bb>{o{sz zS1b|#+e@EJA9P7%d>65~FS0l(#>y#yQx#@MNJ-U?K#pZJsrL|#*szOo>xO_?^V(SW zrEtJ|rNl*CJ@%hlN6cPVI{@B}Cr9xu%cx2(RJat9PKxIHOVuUnvY$%v^95C9rH5V` z&7om>Q#Z@L0eS&bQC1^qG->Xum!N()^09uyoZF@Ey((kcgec_~ch1XC zx$S73=vlm3a<;gC_cglw9XK0qQJVg2gz%5Wu#?!?0X4k+y=LoByO`a12yQVK(vFWofyW27(V znqT~Mzgu(0$W71A_um%puFGK!8~uF4iI6R<*wWfiBiJ!_Q0nsdCnrF9NAm=IU(qGU zl*k4meLYY?O2D>mw&R=HEDl5onORynr$~jf7MZ>r!KhEw#y2AFo<$aSK8LE zw@O`-&()|$DewE_(%c=lbKvETFMsmS?H9hk8tSYK%wO+xQw}r=yYU_M`Jf%1MYH?C zd#h@il8@D`=ydB$FF>m3ee*4tyEX7R05KzR&HCr`!sX<%Y@;0UbvLCZZ2xxcn(vHG zamhWrd*&q*hFiqhynNPy{qo0Sn|_5(3}<{WsLW0b6{Wk0JG~O-xtpmA3B1~f zL}QPX<;rRWOSfCjMcmBuTYr9>u)+;S_y%sg&BaC-+}Ql!8yapkh`D{E_x<_jAAg)ElL^XHX+%>`3A0Or%^+5EC>lcsEjDBVw549Yc+b!gHBn<|f^!u}I*(P@Z z358pkEz=`uw=U(BW$m!MY(P#_ec8{rG@6pqBJCNRRzrCVopO19XQ1fh*1f1t)z?QC zeAYJs{pfE>Z4Je0tv4;7`K1wS4q5khX`N?>$d9M_=R}lJElOQ}eJep$_O5RzbUKag zm5tE;{tDtU%sTqr=FiN5TUyD&kPE0ReptNr zq>1(Vhp#kIG zoMKVgw6o|aUhX7;{f}vR4!Q5v*Fosa_sQ0;;qNf#j{MU3`ssj4Oy64=@~yaHZQ9>H zqnGgmHNB7OD@`o~0iy}lR=_*Y&B)U9=?TFtx7(4h-NGApU>F6L{n(og)TqdE zU^GeVmvT9 zv&iS`p3+8%?x~5AA5OM?{-fJ4!c?=e1(zM+cRM4Cv>LzpWb?kDa=t|z)IM?HEe@D( z?uy(ky<`_p>${B37FC;OHbbSVH=gmn2xHue0^KJENS<0aG_E;XW_L$q_}uB$|Cn`3x+t;>xtJo6=O?@*j# zC3&bf_H=QHBc|va?xqKJ!-)&{M|t)UM=W@w_;(ozOmkl2GO_YQ{LK&FC%OQ%{zZJ- zm7K0Y#dmEwNho5<(F%d)tM@;vLUZcxBu)mw`bmL=`5b;(WewwIpQS)LbKYRbD^Gum z;o4(qmyJz#3x9l8>REj9kPW>2*f?S3FCwQ#;vp8kYR*O5uHA{2q++>q=J*FU~b5aY`LM8qs@wk5~gAb{BfAQzXjV z&TVX${R_+svvrb;4nOzt)7e4p_Pjj5z96aG)IKNkNHMD2_s9*MXQ8vDJ4OgC*BHTH z0_U0DF>@@jyGPNew|uW(&|$MM{B*$q?79BY+G9H+{mTrGL%8p3W0`G$2)^T2iKBSu zz08uGeb3#(T~bnS-yJM|oOC(j*5c59#r~x0H>k|EwB0+T`;F6#ruGg(E&2zc<&T)$ zGx808z9z9sl$H}3)C}J(6A@7N2CwABpj!!4@4s)Yoa%8c4d0zK-wUF)uf3PgwqS6! z^b}Wp`R60{+}kqCa>vgF-+`khcN^;uS@Rj!0v|Yiu%~>QE6b1FhR*iVUT_HtzH2`t z8PJ3+IL3=rB1pyhzrj>a;Np2;Fs(Ux|CyN*dfZfGaFiw;wb8C&#mdGy||xn zn!-`NHgmT}iM;stRo?l;Qqt&agr`kkoSzlDa% zgl8GQ1+51E^v~rCW@;5qpME$|UlX#~0}4|XX4fJ)zV?&SaRY48q3z#;KDP9K8$Bu6 zdT!Y$U!;~L@ng*#c(or@o)LOZ-pJHTcWIA%&@YzSrlJ^nd7VJmUm$6pPy|@ zE4WfVIAgE355i9w!Uw^1tR;?b)_-Fro;xKWc9c@)euDraQTX^g`O`AhSv>#TPk#KG zo8~23nN$Z-oQ*Ztdq zTu$^_I0kpMqb5ARznf%|C9y2^O#LBJ{nHdGGNpOacP1GQ<9ZgWvJk4i6ID(_e>~oC z4!b8e7AZYUbJu%#o>3KgsH%DBQC!L${aakln}_Zu2-}(xKn*@&`W!gWD`YZ_Nk37P zA0FF@^@>eYABRt2FY^lXDKuZw&$+C`4~2M{+=dL6c4sEyK?MoMIFM<&zE_ z&isr;*k3@sk@R+HK8U+y#S=0jUgdmx_7(SfBd6p7H~u5RL2mB&pc`}FHNZJB-;m>U z?w;d94-!CZnTlbjGNDsn(`Zh&ciVLN+#=^K=yV}j$n40P2dr_mUgBVQWo4_QPsTE; zXKs}Aht_Vzu`$ueXU)2tI~nF!SY}T&{0!vfeb-J{?@r!pTX^Vq{I=(S`fy|Cu-SX? zbJovo97@O5d0y#1P#?-j|4HRL9G{$ibEd7B1o#H4=ZJWo{C#`}h6A?pJ6wDiGQGbx zBZF*Gxi3_juXb5b;}$(<0~~rZ;dLlm5<>3xj}mW9dUnx}`YXHKig8z^CU;-&wo|n= zn|8E!)6PBquCbij!XOGFiQIguw$}Gu-!H7Z1+e9&h0$ii3ruUlzLPXU z39$UFtw7;3K+hl9zKd(aF*V`nEi_{v^+W!+y1mQT?CIKGf7JYsm0PLx%S=E;<^tho zc8>|p(f!dcTicNqfAv3fv;FTL_g_z(pxhdmTj;)-!=dSRE_bf&r!Nz$Tg9Wg>=)ne z9JTDN2$=uzz3;+b<18Vk%YT?_@{rJ#{s4f(PVnKM?^VaMsvqvhK8lMh@NC}v3t3gO zyFg_#N1Og8gnUqVIaIn6Gf?KGj=W|O>8z4clG5MbHxZS#uyrm-t2d0Q10&B!TqtEm z&eHpWWNsT~yGC{G;HSoSn9MOrLG|&{YqRl8S567Mx+-m30~cowT+lPRZ}V!t1<3h_ zT0R%Cge~896sfnE**mmmN{&~8Johf0DW(nM}i`ypdd7R)7;2w{9Q^C)?E7Z!H1-U*sq8_+0KKVxA z_K6c`I}YTTDoZVUABkzb-2u6VCWXq3#EG2p*?*B-nmDcbZ8H`^xH;;#0 z^?@KBQIp$8+|(_A2C>_&U$c8AS>7ri(V2DV1E+1$p4QJu>#fAN9|v@#o90Juf9Ns! zSi4`rNxf?5;5UGNQ+?#uLaacp432f@_{no1;u4p)?O!Fbtx>YWfxr&GPf2&o@o5xlo}=x!s!W*3m3B_ zLF@?6%RY&HDpv*&m9Qaej?^GA;obAuJ)%1czf%3T7NUMO{sIcP{w133gb||?*Cx_8 zi8JmzY?B11u=j92Sdz9|U5`q+`Jl&e`g)WkiQ>=lc76slQHaC#${)yE?tH7Cx^e5k z*PF@7SQFfzo}r?N!Ia+~im)#caVF<_xnCo`$QzNcWo^eW1GGRf7I z<$xXj?F)K3Z+E|g753f@0jeFO)t3`#;`OY&A>tLaDef-TQU_|ikYBXS3K*|L^O)ds@>icV;L!q@)wkqvd< zv-fZgzNB??SE5B8pA4VW9*5Ir#gx%d4a{Psk!Qj4!am*hfu4ou zKq%HVurh|3R`R5e`z!yx$Y-KxjX2nf;l{A(9dE7^hJ8CS6N(NQ26~^*N-A_C-X7F6 zN=O`&d-uxtBBzZtbvIU!?|-pdi?ih$!D0D*cph|fRE}9O(&i%adtReBLi~)wmV{R! z$nBQSR$~4~gD;T6AMb~l3+&9Kyp&166jD~#pYA>XDXOGbA-(F>$=sJLCk$&8OAQwZp9`9IVRHm}X^{&bx;%GE9et}D**#l<9zwCW zn-p<)*o?epf{?_%oAup&M)Kis;9T6{QEB=;-Nda(M`>PV+uIK}!=>YcVGx6=m?hP+ zo0P6Q@rz*%Hr0+{en$y8op?K4`AJ+^-YCMjP{SR#{N=9OP$20P_Ro?2RP=pe!oB?A z%cm7T2i=moWWd|$F6B?=5^e!C?m4!(N6D(6#6k7)Dn5F;Ig+nO z(IdF!b9FT6wGh0H$!A;x%~+BZ2z<_w98r}&OCM1B*^K^@*+f++g#CJVZb?^oJph&o zC1!&$b7{?8xrVxoY{70-m*Rp1$BPy;N@9h$XN@xSwheuiV zM7`*qBUU8z0Z3cc-F{)?yG^Zl8>di5{FeM>X;aeRor3PopP{{%4Lxht!IY7AU>EI( zx$C}>8#C^SZJs{7w=nW|p=erZHtdtfYO`S6hGgPmnZBImt~2MFF{V`%(ag*3MJk?Q zKY%v~#qU=h>~=@G#iy0hJ`#Rtdttn^Azi9~qeHPvx8BNK)azrgJY_ zLr3JVen91#-fBU^f&WrbvlfX`LR4P=S&|7`-eY-8a7O+Q-jR?< z+(b{=Z&=|vw6NzYGN1rKIf>XQ4v2EQ0Y<)Xy`DEhGO7ZOBEw9T%bFRFDKO2qo#K02 z-oN$DZUHWS+7G_mM-G0|&QdiOB+}B#!YboiB+rhr~3 zlq0Qv{}%sf*O7kvVEVyM?J@iBe29Y{ke>j0Rw*r&k!Mw24>Z7PC0}3&81GyUqOxXR%PA+ z09{O(Jd|u-awFxZ!kl!1W}#~IPUZt4cROcD>C+B zdyYxZ5>T?(I;uuJwi`w(ceunaP%mv1`<2cYBI@0v9?);-J@@47*ZF_CxbkSIAFusQ z3reJf5*qt52H9$avSlBIWEa`DkU`-SvMaJj$ky1GF}4x&wI*4TWo$D-491LQOqMa` z?ft#yJ?}a1fA>D;xqsYy|GMYi`wa6-s^hV;V+lO@5gNC(-Ra~I99E3mv~GOO;pl?WK~W4uJiyOZI?MF&n_<*lDDSj zVA*HfPA@NyQ~5dC+zD50h{7VWt&KOQh+YmxWEZnpz}Gz-VZ1=l4UO6bZe;Vpgu6!_ zg8J%eHf9C(gK;h%pCP6ZknmMEokpl0z^Du_K*ciE!Zr^l-Q-&=GmU>66idLCPj;4s zX)%-Zs&&OwhW=;4DZw)7+=buGKchTxIwv%1hw3y&?_p@PlV=lDnAS*ea0H*|9dcRgN)`b8*BKYpNk7Omx`&K*=%~q5UiAlv@2Ntsz?RG3^S!i z*4yT>V@L2xUo~c|;N*s~#_BV!kxftj8VVS8k6PBU{pBaQX7lCJW_?H7T(HCp(#-Gi z-tNJ*#DSc;v0?Kl*v8?<>5oB*cUq}go)q2_eI;&rS9Q2>Shi0?a+0{w zz0d-4k_!hblPrj0(oLfgVL)f43Q8R>xDx2qu_Lo1a5rtX*eY?PQem=IW<6K=cxzpvIiC$FuJUf5EVxP0`(rjARuN~njS)Ajh0hQw`ctLl#E#Em>BD_5OP zDG7}ChKXSnuXsjbs_cWBfVrzai*0|ze4CPw;y&5sd-Q*~W;9u^WC}o>zFKVd@@b$F z()OGlk}{4x`RV}kj#^`z$xus_hE2r+rU(z>uF<=`fWV4dJBSwhUUw_~TJGs^L>&)Y z#%VXvKJ1l|`1=;_nO?a+9h|8bDm@#BpE3<&OG~1mJ9Wz$Ej$HcgOR35r9JmeUEj6@ zUk-O`Q#rTz_f~lP7r@PGca^&4hc)D`+h?C#2*8m9J@fe!7nH4$O0r7x04?D+d`k^= zl6TP6gi;=b!8*3Y$9nkj>JL5ABwSzk4&3e>Uf08qm@>!!n}^jOVu?hA&%T!5T8Xup zy^i%9O%d{W183(^5)ZQeK1;Wwh+xoJPYQ3Cs1n|Amn;G3*<5utvk9T~TNY8n7Wa0I z3!b_K3sglSz}P?3VzpxU-ii5Jnj2y0;+`=Eq}{aZe2psR?T=MYef+kAz~8Lf@VK{Y3S`i$~3+Hu25}-;vty* zl>P!aIR`+ei03zUb?O9}Ya&&?>`nMSvL8BL+|HUBZBsyxsPD+zOCx;cj>E)4fQE%s z^q>!+hkqnJQk@N)oT zH9{}J+k85)I=Fk(5*W3MndkUAz8;o%?A$S~8{QGKQCPppQ8xTkU59vD=I_v9s70;u z8hkr8rCSBQuM8g}c-%bMS#v2c>JZY(e(f^PC&Z6>UQnge+cDE8^%e5III zGZd7yR{4W6w5@!cvn?>%KU^bQTlVA1*YML#UzIoN%FId{(%t0Wjhfm_0(;Ni9WB?k zzq(PNI)Uk+zXxCNH8jz7zF{f5wZlw>>9-WYj9B*tcb1xSal&8JjdcyS?-56vuEXc5 z7P+_lB>cJX4vXihZb?VYfl9uk^$7NNFcnq~ce-t53zYQqXZI*!{qXDxz@Taz@aAJ? z{&v@hy#7)HF&-`;5pkPNyBIS)w!zy^q`T*O}PjtL9X^!>TZI%*NZk-&4C2fevQuwf4Ne9;F4S z+(8e(PdI>wd(6L{m1LghJjI|k%-Cv$El*!G;m{PIAFg)7TDFxBRWrGbW{6nh5h@T9@N?$7cW+Y_s__~Bn}hk{DpC_<0MS#429 zbw(9K0z2qw@%R!VG4YI~B@(EVSo2#s()c~J5CQzXvOZblXB@S2ZpR1I{7FGp8)PD_ zWi1W&0zcW16A%E(*^0C;V9+zX~^}jtDBRjlzH} z0B9g254XMEscGc6WlzU#IUpp?9DB8btZ6YnP#v9oAqW*03IB*=jZ=(n{M%=z2n>P- zV>kHzLby7Jm3~DhO7PdGV+Y0pfCvx8)af%QSjM&?K#=rFxO!5`a!t0c|lU6z14sLP8 z3A5{L1<9^r?RGD|RlORnoDU~b7c6~vE&T08`v2S$oRCr7W5ve*w?mMiyuN zv6L$M^dr0Ljo;sr`}#p{@Q*U*BFX#CP*{gy_%;Fs_=a78T^7hYr+=3T8T_<4Z&>Vc zbHt=oY>;n8aWEp5;St)1Yc*SRXr$|VU9dXUdupN`rht{o33EUw-Z0mO;?DK2Y0KQ6l< z#2V3;2Wy0l6`I07X85R?tr)dD%Em}}rK=>1+6O1;2;d#rEXM{eG3uuze=oyddox?k zS&~e@=L!lge4Y7XgL?Sqn}dHc^v=Pv5;t2IMVxYxIzIIkJ`TN8UaeB~w%W)ixx!^N zHQd#lb!7Oe^(aO<6R*kSDPvUT9p>Ww z@5;t32ho8A%GW?kOnr>}(_ZF_Jes(8fn6xq{70>$TPZlv6tI7PofbE|v^t1UIndv& z2yB=S{gm%8#I$>zQ#@PC>tnbvkxaUf*y0LCC3NB9IBIR0Ykmg&co%JxDfCD$YE8cQ z_01Jt$+P#l?r+E!Ux+ey?oH*s{xc~tqe4&C^Jmh_`3pp2)?4Hlu4Q{Y-hIvPRv!5I zOV8#n=zD__WJG|57?I}GUhcH%Zdk0J4%dCDsMn>bVyUHrqLYw{qo_*R@|S(6{7Osn zaQ(?_^N!CON)~k$FSRE5Dm#leq+Qo4j&dvi0+-A+SgcR6^rJt9UZXKNJ34~dk`p2u zu ztYB4aC*Q4oQHr_ij*l_C&ih->}8QYB9uv`)87&yic! zf~hg&L$5~_xS;$kcBJ*5s+?>9T17br?3>p5ZAmO45A2H!5!0Ob{n>=OF75Vtu1b;G z#*ob3??$nT*Peqfe|6$ z+KzybR=*~}8?;%NU%$V_5{M+<7x-RJmXPl~wtgC$L32&y=*Pa#3F%boVAm_(6%cE*gY9|cn&jidZdR^B@r(F{KOCB9QjZhP3z z5|AuE|4%I6zt2ze`u@{%(XsUuo676Ob8_?P^^ea2(M9Ka*kXCvWO=RSsvY&Zo<|j( z>0ybz#3slKmGgES`1g5a5fed_SG?`R!>&L}{A_a0Y~Mwv#H(A9bBm!t+jgFk4Itfh7=` zw~DK!g4-X|M4eWxc`#R#9WF(ln^eSJ$ySai(yj4BufxaYJ5$lMxTcik+=4VA|FH3Q zehWF~pP2Erh zq2Yk>5W{shbz4BKa2WoNKF|4N#HaR7s#C+SKOjUKZif`u>MHS2hKpaRVz#(3Lx3w} z{U}@GDztP6H%^WS>7m7NL|I>In!ZAW=H zKngEZ3lF8omEqc9ezC*)2_y1A@gWEB zAs(09C$<=JZ6dY0P-G<{0er=NoNFpw@rIS`GDCL!s#|pPCpNR zuftdj9&g?v;PO=?8_h%nHbN8ihKz;ZcWS9tviJ|=MWS#44F zRS82Q(k@UBt$BVPx6SY}Hqa)eHls_lAhax5<4?D}WOU(iQC$Y7!yoms_dbSqfwFUV zXrHBB1Uhy~Z`Ztd`sOXsfG<*S8L#)J=OujeRgsau=Q2C7=&X5JKxFxgx;ljE>uS4R zryipsIKbZdDjr?jG&UL%KSFM&3a+bv7$eEjZ5$7_q=BQAF8-`U>6OV1h%!!6^(dQ< z38-IRAUhP|Fel3?Dl>iV%8U?zYs3^ybpNS1H{^$Jcav#I1~w zaT$#x1vp;6walZrsFEo;BgTSmMzDKZcxT^jpArOh7p5sj?clGe)2xgIfN z$aY~SR!+Ifttz4SiF6Q#Xx!RR4i=f{xA9!Y{#>}hu@KZ)*pFQ)Jpc_699*|{$8_M9 zF0-j_)y@dWe4Z*xW zYN#lD`r(LRmKj1AVFO*j6(7d=g*IXsr%Vk`F>#&#e04$u$bA zR;^mM>g?(lH)?OkH12%4Wv{ljAA4|YUD`(<1Mj*`(rHf?=NrySXFs$Rb1inhO&YuP zwuDTJsW`;i@7_{KSe!#g`au{m?WNZf0J8Ft@m?{|%E1oLWZZE0o>;z{w6vJ+;PnPme!dvUVUf`L+VYVLMk(U| z;jPYgzY>gEzZ-CYV(?nLFRRF12(AE8dVj9=z6I=IwpxJQ#=TQGak zwd@LSrEy`xQ{JltC&?WN7|EURXCn{;6k2T5aN z3ym$M;QFFLUzf5+Jg$#--WcQ&j8-9Xaz#9Nef(tplDibs`fEt6_JV6b?)2o9dhiCQ zOR(+J)&z3M_32NArGguMHU?iF*?fR7?JfUJ%*n6S0Rjau1K=Nrc~|l5Aggl-Y!YjI zxAsQ+fpl$w>htc*$O^)DEuy|ON#Tcu-5B+DC=e+HZQaH*v2&u9)al<2#W$`7!=(f- zW!U?-&YB$QB3#QvemIA|8j63n8oVeaXdAnJy#^IXo10YxE6N>2cJ|M~m|!g)>_eN5 zZ|x$F0WPN9?{}BVeGPqbxeAfR0n=`KcX#cV|os_!zh5&Tcd{CTh ze=1i?la!}_0irALNY-Nj@k%IgRtg$d7@(+@5Uew)8}PUKIO(E*C}K*C54%wx2j2C5 zfj^~Xg5HsqL)_5WZLyX%s}knJPN*-gsyR-q>Q9_g38NKZyH)%Enczp!_|Lty+ z)c0%8@@B}vc*pR(Sz3n0*ktnR;qgfv_=v2S3#u>SBm`3#OLc5kXYw+mWL2^Z&#W3s z4uV1nK3v-hn&h&|5>6h8kX` zymXi6ep8n#g2Nvf%@u8d^&z#5;RF@5@-7vw2wu4!vK|nrUqK_B(jwyj^3Sr{^u(|0 z`D`DuILqQM|I>!fJYo<4ZGxF4yWJGa%8F3OmWd^G(CtvLVKo>fC74_xejr@iL;8RI z(B){0;8UEaqks(UC$XV|nde<3n&aqMKnk6S=m?)_ax%&R@F(K<>RMc!W36aMT9Ez; z478zBkCZZsoM?jS`t#Tjq8O;%x`=HZKk#IeGWdn`vY|o<=tcT)(O3N;R_IeM;l9)o zx2su-jKBwoFV& zqZ3eEQQ=BEfA}@v%~u>(6^Qty{D)j=Yp7!cb6JSSicbJ%(0?Hp88V=Ma~XW%d2<=} zeN4#xgQ8+B_?pSUA8~-lS}@H-{RV!L_#$hlZJO+@55N)ISQ2_q33KRhSP9BYj z;7@~Es?adaT@}KmG013u*)9aGiYmzBt0KPEBoU~cPUb4*(rIK@CVzgeT6x%87i)CLk049hQy%^nYa|38q0mH>jG0aD#5@HlevV3TlaK#-L@8 z|Ia#n#*AWGfm`C-PU1Tr>*1*2m~U}S5ErBk}^b=vAIt)A{MF*B(XgUl{c*^mMgdN!*f{Y>oh?@fhkZwSbStJ@s9s$~x zX%l>*#SRFk>nB!i{I^j)BxF2EoHR}pgCJ&9oJ0ar#>p){TorYAlORZ|MGU>5{YCkR zmazV?8436Q+s$%x=MuF7wp?*C^p*?0&fYAv7O|)Rqg}}V&57_s`-!0hTe({RshWhE zM&9I~1#OL?)13+EML?I|BMM;V&9SB|dT4E!De)X{@~7Apc>ABnTTJ^EiBzGRd}}rw z4rbvHkWOl(lS=)Iz}=4G^m-P{#I8-E6XDFfH@O>D7Nbo8P)@JgkI~tw?Zt%bRd*SZU$W12T8Ot^Oy&~b^L)szd9d3wqq*RRKd2?!4jS<}?0`I+&;?E(Je-(3Hq2sNV38@n zTCx~#R4>fqGZO1rBsE*FN7H+&0_94wTU9X-SKd-fI&(`pU8V#5?Tanr%v?_on;VHf(!o{!L@ly~)rF z!?~9XZ@KeBmwWYgW9z!MiOTx7J;|dep=TVhy&CcR3hge6VBY|;k=P^?3 zpugpOc(;2ueQlD3EC1ue+moS=mtnCt{&0G`o|8<>jA9I+AE$Q5%$@On5;lFbE|q7y zn;DT|s>YKJzq)10nI92;=sPoZ0zG;AV;x}p&=7H1?&CSP z<+s>>7`9dg(qTHNIf*=NDBSxW&2E_`d4 z4Xv$5`oZ9B8&R1=ZCJ*9(z{ZosyzGRp*6rTtf0dw;JPZz2b2OlY~hPgunx)n_kb-= zr&TWC$!tHVU1aJ5%d{>@VJKSpFk}P}1O>OR!b@{tHFQ4?mf;@>0VcWmOz{}0J6o$u zeGkdP4XDZ!_d`Xgv(q6l4!_2SSvkoc2L4 zcJFQr?b}I9ZT{bDL!bfCaSz=el*DeO9=iO1J8a*FqGMaw+MkFACIJKF*aO@5Bq=2V z2m3vCG}4h;g4;bq*3?i=8Q!6n?C5t+KWRy4vl3x0^w4^}?FhIMQ4&^c6#VSeUBNwZ;nK?sz?CD|Agc#zt(l)hqNNN zSkJ&wf%o!y8y%^rjl#GLG{X5ga7X9Q)!q0~}F8WXr}nMmP@bLAC=cVK1UC zRCX}8?m#es)ki}IZCxh!_SF-8pP+YW7~b`mK`kS8U{}4ss4S0I+@)w=UNp0y)2R&Y z_jzi*rl|K6&r=z{-9Iy=WBs<*9IVlh-%hm*T&qNF{N6U}J5UzRIG&?e$~b3{#cuWg zt}LOS&GyiC#5&;`W>wjhq0>EQOpEKAb+%(q1#Srh3d3;LrWSq!{+WK6|L`3p@R{r+ z50T`g`@d*9loE^2V%vL&ws{+4&5M2Gv5m9W=lo?8PVRiI9IHZ6`A+1wzl@U>f42<0 zt9#S01Q&T>&Ub*PG!{D=;i$BSn%F(m#kiHpbzNvoh-5p)cBPb9VNFHS%NDzR9z$f;C$1G|N5QRFX|7$ z$*sl+yEgxn4(9r!+0B45!^%xxK)B?=%eJ0Fuv>$ z;krq=l9u@HMz(J&X8*S01Nf8TwJRng;k-L55xiaX^y_=XYIZm$agP!&P&b=#VM4A4 zJI1HSFa0@&Jf|BcAuZNBA#N1U#-mh@DTic8i9U<8r>f+8kUa648H9)!3n+gh%JaQ9 zTZ<1u8wB+$J;Jf2%fMK%b*A(R&oc1PkE1-g!pwfFz_H>Jj!`&mC+1UZq&gAKb~(djovWlFnVcw2 zZdeU%413venQ~}A5@42gEJ#4w(z|#uvC6yxS*_WaKE!_@=F+oy0*}7h`xi#@u--)R zn1$@J$_#3(*u11gSrqplY*KAma~t*trXHE>1lW-4F%AQG?J42OJ|u&3a4d!7buuuM zs9x(BO8OkQ2Kv*m(zBOnkq;VL zciC>~6;1|JXA_UlhD|FnE!VDyahWF52f-Y}{sKXQ{SGGp1>HI@j$0=xfWy+Bj4YxX z=I|A!>M(-wHHT-RA0d)q9R8R3{6nFf4sSz?EU*pFZUUI9y?)Dnp%dYwi7T?65fcZ9 zhWfZkx@5DO4LTDO;x0K++CCKw7akLd(~{2=CFeV=gw2g){7K$^W$ZbevR!rheVn~n z^cEmcZYQaQ7bETp6NOHnJO*dApttBxvQ44NZOC}c6$SAiGD;N5abv^5(epmObo-TA z{%LVKoIzd1%1qQU63#vj-6D5YSbq7_Xv|@VRlS;toOQkY&=7ltZqx!tXj+%x;d2rX zq1S~Rh#3zbecfOD!swwPIh(V%+LVz{wR0yB{Lqll>)u5$duX_12o_BC;LJo)GqRxg zmT+c>NRy~TE|ll;le(%J{l^G2=Y<_Lay9t-gCgA~@nZu=JLEfoT&o}AaV~DEuP~(1wf$JZE;rO)0a*7jr>kNV+llm+iP(D3^ zNFd%|oA9!F@+8~^0D8>=Y{p_C}x;!Mk7!FACpLO;6iz7UAr>M`m3%cpbMT*Ah z-7$mynJp8^u`QHC@xb$x>V3PZErOFb(C3>QePgHT>cI0k|2tF_mSUKr-)G$WHg*)v z-H^n7zar>Hw#KkR*Mneco6>Ja@Un^xDySqQOptmX6AaEG#63}*9c=F2bY!>1YIX^* z;Fhc7|DD#5Rtdb!M5#crRMZgsxmrt7<-MkUU#Cu;@H%ozuD zJ;p47eQc*%^*RJbEMlNjki5pH0-ev&JnZ@@y)NF~mAVy;+raw`P`wB-;T}SBuRQIz zUT+pq`MC!*5Hqd#%ykRXC!$%5(A!Q}bT-7Vydj;#=huk}dNa;D#=A;u@nl&v#U5_x zjCwXnwXCJY;9;g_9qVLP?Z3(?wB|WF4Ibn2NgGTQR9IoW2!V|fY+Fm}0zpndj#d^W z57M@TJxp&PY|1CIh3TUPIi{AN6RdXQfLb>0$;b&O@WP@5$1uuOU7Bu!K?@{72i|hn z^M{Fi*;$jA&{_#PN}EK);p%RsaQ0IP)tM;i9{1Zf@2(u=Z)Zh85p2zKh^1LkYmOu- zjFD?H6-t-?1+Wv7Tb=7TjjMJ>q4eVOWVO2J>Ve*ilXU$Z7IUGxhi;l}#{#DU_mEe4 z>jIva;3@k)-U0+ek^bMvWY32$&^lrWpkyOvjg})Yi589p}1x z>V{?D0ra`*awq7r<3*_nNhW0{0c#a-soGF9w}<@p_kP9(#$Y60JwWOird3l%x7K|6 zAj3BbDm8t$Zz)oMNgb4(ea_Gv?V4>=ln#tX(C-3NUV;Mh74RZz*PT;Ab!Yga=MDLr z0=@ND&AthKg{oz@f+z5qpeLS(-?CtvEjY-|IHBxaLP>0s6`;b<(arpLOyIVW?ZIWN-kBEfczoTw#A zmh$D3y-s9q%Q-}IV?fgS9BImwh!+MsKQJcBxxl-Drh)hc2@oW+q8kY{&!BTu>v)rF z!9KRPXioAJI+l=MeV&*}Rqm5!D9&>0_2oQJ&R4*u*ZJVC#TfA{qS+asv?z#w2Jv1J zTXpWS!rb$td^z>f* zmSy5?fq9Aeb$4kj3eXCt+=UEzjsE$`>W5Iv#7X+07bd~Yv!QsKjTT+VFW`v=BwK>x zZOkI-tE@B&qFC>b=agqnD%KG=w&CbbgkalDqX@x6Wsa7Bx`qgz5qL8Mr=KIukmoDB z5FAU<>wk=sWs`2R_DDjO=;Rbk!nE}mwP8iW2~7QCu?8}`Op;>MxUxSsmp1OLkN`*` z3GCerlTFaT=-OV^{<0_uP}c43xbDN`e>IouSj)WhI2;GgiM_K|_K3)thykjLFg+ao zNt3(>S%6e2kxr8iXNg@O5RlNxDfGnBV|*QOo~iz0f3CDh#}e%X5cJ6VMJVZf>;a-x zU_3DdohCD1A~5*322@4h9%0i5%64h66pC0TZUWryW@xSkzSM^JSDpwuM>4o_u%3X( zX=z4;!Vjw>ev;lZTKr2{z0xs+bACSHzO*n^f)3{iXFe3ja}?tM8GG|gX|P$&n>b3I z1#v_fcCtMxL~mKNAz$pLLE2gq$y(GFLJy=xh6M;e6wX!QNpaEqc-z9t!xng!$?>k9nAAiH-F=X1M+6N-t zV)cQ*cpP;@EVKqZ1=e#Z+Lk~TKI|17S*d>q@FS8ZDDHv@_6 zU6Fz|4M=tlm9UP4quH{XT3hB#)~$pHZZ%Lgl}24|;Tni#Qjs%QLm-%7ApRu|0Z0ad zbSr_b+&I!%5S%aVfzGx)Q!5%5CI;J}*8#et;ey?zV9=PjnG*a7u+C$LkOmKccKdxs zqn2CXghtwXPngh!jb8#L4xjwjI(cCc0$WTt`Wso5%z$u4n7ccZA|^6-3*OcA_oPVv7Z#13~Nyite}kFus+pcLTR7l3Hyx^0y*B+T8vle|Hc`aQt4$| zI2j25>%cl{xS+QA?p2!SdY~1cmN;6b=w(v(P=Tl=QsRyp{oSZl|0{|m={l?e96p?Y zx9QSr1yi{?tJBHc0NvWPK?b1BplBV?B|S^}IU_B~s*TA6Y|tSjIZjv_a8LN$+q~Hb zyhlacuV)44bN4OSex?cU>P|`9y?_1-dLL`=SQ^E-kd%Q(c59 zAiH3CXNtpu z2Lp(EMe5Cy;{j&L>4a4Qk4q>DQ*j^kD(jH5p}{Jb0sY<7aK70!$9NNIuwxvOgzKf# zq13gL8adL;W6Qp>yp!Vn%#dK4?O4m8jX;1s@2xKSju3TTS<(9#p;J`+Fq7%A%9WM+ zg|UYm+ev6GZK8O72QJNR3Mc_B=bD)(!BAaKoM(ux8T^KNcFbLt?VH6urz|;S5e0et z%+P$QyKTlbL>KNn7);MO1@G9Fqu9f+O+oY^TYDt%d&n=kB?G)d!t@nP39ay9c~BkB zPV`jw))<1hOI0skTCHi4NDGteUwW!LmFv75>=`q+bbflSPI%DC&3yKDK&!t$F|wX1 z(b^M=lb}-mo)A9ORU8mY{}m(oJf%O{{7Ahs+hIpacT&ZmOdChW?~aH)4tLs|5} zl=feH{jV!Szd?5?)%mBP@ty8pz|B19&@A}}+k~o z2tE?ddwUFx2vwfKN)XC-)M(cnT2i{yVUaayVkeGUn=3sz{ke zO?tBJOf`Ho)-vI&(8K6L#C||0Fucu2iyKCzySxYdk72?FCE*hSvd~`sG2T-{xut6K zHfyNMoe3$f1dp`M>NxJ7{6Lyr*g2}`Tms(7#+H!RurV$INw}6d4B$8yX59{8?(7m0 zI|WCxk*(6!DdcBxjhl24%BI;+ktIQHj6DCcFc>sLcJsFcb|JO4 zV>M<)>)}SEJZJDMjwbfWkZ5ic z*3GIuuI7}pp8Fib$^xS4%QPc+G0u+?!V;e0@33*&_zN_aIyzGtk^;M4!8xTk6B))? zGeq4Z$^z_eLuxjtN)iTq8|X*;t+ zyaz<5QzN=#RIl`#*g@N-)QPa!bcyS54x8cb`?6v@pi-Y*mJ&QJI-FMCXY>FtL@ZRS z4V2-i+(Bd_$LVqdVI12rtmiI*AXR|Mk_Mr*6Prd|A7?@ykS?Z9tJmz?=u#uJvzi=P zO^WaHd9I776YbF-WJzsV$;+(8ULqOH$vL5a?FAX*G~EMlkjvCN0?)3csGmd4a2cL_ z8z80rOC+&Tc$apzw8$?LQR4a>&SWVzGLlk~SV8 zO3_;fJj1pUb>IX+isFTU5o&#Kx(4f&;js>LIfj5 znO&wK*qtYo7nZvIIiC3DZIJ%&$_Y7(Y-RbZR6m^p#x(O_XUh~9}GLw9RrpbZ@8 zeK1X|hj?0CFShy5DbboK;;>F)S0m(pF1WUd$`_{*LKse%0g@}3dkMTD**Rk|YoKc& zeu(@>i486OtRI))a$+k0-})$rf1;S%iSaZThr|itNb91nq+5h@lt0~Z>h8S_{@vZP zGBv6jP-17-U|>sK(^@x@LE#Zk<_Ka76Y66EUC4e$Y0FUC&cCHLqTF!}g^ z;;2}XrtSp&5l4uP4UQ}x70!F96`D=QRgSisR@fIV0HzKB7%T3y0QlhIlFG*@Ks7p7 z#m@~{0`IWEL>B3Aiq{w%^Q3aqdJO}%nS9YItNP=yWuffipz!HUM6kt1HP^dbl;KA1 zHDGJ6VtHh~3Gl z)^X!NwP*25qw^p6fgL}te<_NwUJPd5+r4*1VI)xccb(bmi~fG6{q6~(_v&kxaZc{o zD=?j7-YC3MTC}q*&w=EHPz%@eD(BoEe3QlZO?v2B{?_(u{->by`dMAB+{1gpjt1^U z=f8Lt>qiB)ldkW77(7Hui|Pt`e$=*iGGmz$)Bvb`-$0u$8jYTq&OSLGYhO^S^~DSl zSYiXM`+R38LoS;?t_TOM947c*i=z9XyMAU56wDKYYaU)p+oRy=;xilB5?E@xH8)d{ zu$JKH5#1=fTa{SsQx9z?l09qKE*Fj|74~IYFBu~*T>6;EVDDM?#AT;D>%*3xwTE}y z>RS)!*gxJDG1PJE?PBr+*&ez`d&}|KL(QF&ABd)2k8MuV=E+Ubp9Vi_D}8&Ail`KC zJ#2V2h;nBO*l{0i-+%rywXFG4u_x}a_|r&1l1lOwoQ-3`+?=lL&!=iBcP?eDD6b=a z#hSIRICh)Z(TPRFbK$1flu#pHXTNjhK9B7D2K3XN*AD`ZKj5xh@hmi1f*w)cROCAD zbJU%S^}4@rH`>((I6bge82lqZxVIMTxUaK6r{*}e(Q=zZBE2T>n$*dU{@r;`GTtZ| z4cA~sFWaBb`s8TwQUi0-zAXRsfsbD{AJ;SAkXyCa^E6r`!lw90$H={X1I%|S?9{i> zY}5fD)zs){R%Pb#Kp_Y%S5KmDbT(c&YZVU`6%HW0h!5FT>76udc|X05B(g71QuRw9 z_t{l`r0ZK{D;`YBexlTUqcj4vaubqGEH)89;i$F}<-XeC7E8)6zkSBjzPicW$^A@p z*|&gZO25Xd#Qa^~j#^2z*&ac?^%L3|GJvv-g&$u|co={AV>vZA{jfO3s_g4?1#sAq zH~r_n@?yZo!o)8N3j{CUr{45yuQ0v_qt6ScjkYgE#zh^|5Ds1Ky-7Bz`i=HdnfB`_ zi0+=yja#%**OpCfn}BxpDc*sdhjs zBr8<^W7l|`x%8)h{OJ|8`gw6Sg&)_;xvfI$8*nXFq>5P=s`?RJM@H4XEW>nTlZKSc=uu~?rmi>ZFwTtJ zzjGnznW=YR7C$a*@XO5)i5DD>>&el^oWzynrWTjp^U%T0Wa|QZ&V|OJzr$DUfTe?Y zBZXos^9;YJ!}y8LytDe9{c1W%FOnG^nh6I#yRaw#fwz{0a?tF+@S zc1A&4$%5TseL5xI!?FGO#>5#Fpz1R_qZO@~Fkb1K?06Wx^dgVZf;P54pijp;B^9J5 zY2B*yp$3idb_30SjEl2*$JcY)9Y-jCNlR`ZytNWKg*C5!>eY6SC*qeErMKPp+D7do-nL<{6ZnZcpF*9LURj@><|X zIvD*xYkT1#m2h-=;)K2ON90wbq|0u4CVa8BPKHBKwGlfRv{kLhaM3$LNfyxVI(maA z6Z&gH|0YKS>TXXlaC3~?Oh4GRk{R}w`=rci^MZ#0v7jgKPZIIz#=fIDbJiJ`H`a3L z_h?zV8=(^L^YIT^J3kbD{|YE?=%;@f$p8ASapqC<1ckBRyr?!R_b}u5$o-O=`}jlc zoYEnb@IJoK3tRn`6Az&)dpAVoQtUUD7k9WQcD`uUFPdLdR<(a0h&jkOt%mZ(U(dD{ zdcC#^t{tx0@9Ns$mw)e?RVbU9lZ^FA2F->lJXb@ zjrHBX!;j4Hb3F6sBG5v=H4VR{2u0_&O>dPh1;1q8e<8t66hq;rP+jABhR~7P~xO&wo?{;;xK%m&91%ac>;P z73O;UKL##-$c%72JaDP1PwD2!mP+)umYAUH=lEuGM=y<>t=M`EDAhWd)y_7nTtU(a|);BL;3@*s_mG1D9S&=r2Qsy$z9w-tm1 zmt{TCxk!3p^Jg*PWgH-?x=F-7ahGet-c>2ZGdDDp3G%Dho7H2lp5981y1VnrrwqW$wkhCu${=StHK0WwIXyuo0oJjDZ9$l%lR*V}O zNz~CRgYV7SS((Yxkah!ewuHB|dq2 z@w;~EOW?J|1U{$N?;{v+9bGjwXy|_68?C^P4mzr0o4x_Dn+hrM} z@sl-s1w+pM0k~m8QYUiye*aLRsRok}yw9%6oV>M%pLHOswNyS|ys?mS;5gdY=j3j2 zXC+1F*&R8qN}2F@J|glB?{DuDR{y==*#3zU`kIN{ewplRqT}i9MGTF}v7B8ShJu3+ zWhcELUtRJ5j0wCKQ%EyTZMANvI)kG1H>vqyi4lXp{o4GkTsQh0uX0fRbEQ&xJg^wX zZIlt@qhrv-QJ>$8jTyf&dJDE9%66J`dEQ4Nc}t(|d!X#A$@m`IO%NWJF@68R-366H zM&Pl&n!WR=-q64oPm*w#1~Jzs+|0q(3Ae84a0me5e83*?oya6$VOnr4t@R~)`%t-C zP&At?vY2(mj^q4|IiEE$io726+U0?YWtChXR;7;>`0`529Ii5POZTm7?u$JSFBF9v<&!j&uogg2@cGji5FcJ zmjXM6n-8OFZSj}%uj#%f7I|6#zrxN&V_j+GFTB=|h~12n@z`ydf^MR0j#i3UzId3+ zvBv-rcMjNeR6LsXw8D*Cz`9*3lX`_kt%+i>E3NmtJsaj$q!k%GRNr}-KJ=Y1QGW7O zaq-~$vM*G_E@HTSm-%_Q#Ojy$_1%J{Pe9EA^Fi1=Rp?f3+zMKOFRp;5RiBZQ93$5C z{(G+BltiBsa+W?;+X}66Y1F1weW-_r%Q{_OZ_8o+zN*RmW6aV){Jb}L#y*>;rSvUO z`1Q|yu+sEv@acL^6?hW+h*U14m-}f~ho!HVl1@?Knd=(zv-leJPHv6-MDc0Y+WNQJyLem|wJ#buIX3z+`C&Md>{Z-4f8jjX7Bn;L*N#^lL9atTQ5$HsxY6a<*EG2> z$tf%Ir@9112vRR`Mgo4eYgUr_{1?sp&{@y~c#3E&U0nQRe)$kl<-7O@R^IbQWtQkV z=z&=Jn;WqVs&paye#(u%JgCD24ma=%1C^_(p6ffv(N(UTZ|C?1!R`lzH@YpMi*uw~ z$)h75_XfBLas8K^4<{cg&^iNLPnxHDJE?tTi(a(+)!Rnd_OrOgXYvW6Q|+W0(te#L zJ!#ljklLZ0nCg~h1=*7>->w;W?009j20@O8_Ldy{UXo;|XCz6ks?sxVBXn8tCQMBe|H{QUQ^8qNILBw|&>_mLz^5KG?X z%sHT%4|p{fe#XxY97g*hI_Y=brbd3Z+;Tc*PQFQOdB#~B$a(DG7I)?71za|7)-%w7 zc0)CXXXVi1sl=IP9j@R4m)ni?-l5jgigd9T4%q`6s*0>E>|LvwFL!oyx`s>?r&g!Z zl2bA{31_PM1ck|&1DsLMngVy7UQ$d(b;j$N2G)L!;j8MigSVQteS7P(W4I~fz>}kk z_MB@&lY*gGVfpB`Lh9>U4dvm~va$nsLD+@GlR&0u=Pi@=P)%bxfcbp@bM$7Wh(^%7N4xeW3u^1#+0z#k#Vlo>bbUI6%i?n% zTxoxtD>s25*f*QsPcm~8e###3q4;f@!vcQI25l#Qe1%$+z*F`+tlyD>n+zRK=gYc* zr}#YrUy)1MaiYx?;3s-bkl!xVGWm}v)5hNBzfWQos8xTA%O6!`LI$1$q767`2pWk$ zCBFCh1Q?(56q=&~AoazSftE{MxoG2Q=8oDi(Dd*v``aBJHQq`Qh@A@)p- z`(Q2Z0zJ&x#7ECFZUQwbyzN||lP^{Z&akD}Wpg67eD|7Hb>FHelWzbjZrx>?1X zvcEuAWRx(0dGODtsD3Or&hm|x%6TAf*Tfg}@P6>3-dtCy@g{p}j{RQWxU=>|(gg1h z&hGjYhQT|@-6Azt9-ijm9k5f$?9-o#eX~({zo4rR#Fun`Ts2BN|5CLzY*O%bd;0la z(%GcyfyQ8Nat=rUbnM3Dtzb^q);GWVgC8De#1zFceQK(( z^!Am_h14b*>q*b3uL5!9cS2&&QqfQu$1Q_RIrN*T;AvCEosQ#`zc225R}}FEtVsOw z%^V1N9Gy2YzlC#TMSjqBd&NXwpYCgEG_(L46SeaGM30*|h5 z#1(p2e@lMusI#5AQ` z>xFI3?!Oo{IeygM9NvyT_}tL&ps!ja<^3Y!rwaMXV(}AnhCu(AYyAz6sL_kpE&w^( zuFn_Ts44>ry9L31T1AodXOsF0@-oW`bYpXV{6dPZuDQvGE{=5892il#s1aB7&Ud&Mc=3(lc$TH$O&R=(d) zE<@>`HfX1h?&4y~?p6XtrWyBQS~_m;(A>`cua|1V7f`Qj4rk1n zoTnZ}ERZ+#6AI_N0Y~7jUJZJ*h+NLHylw^P&u^d`9W9#uhSRCZ%bwfM2Re<^me06u z4|+iL@Rg(;S97zcYA@m8`biRt$XQtg*CWIk$<(u!LwD&A*_ zPAN=wJR-27`~jV5n_dHGTrJlI*eGWO&FWebn7gjC*%1803iDz~&p2W6{KtpSsQJ*( zX-Az8Ulm({*MnXPdcINs2jwAV`#5gUB$tQqiuVQY&M(|niFS)k6*$Fm(Rt~ncbY7E zNgw`xIrL%YDDZt{r16*69$n+YKi|KmWeL-lH(`56c62P=XCF=Yxti}<_@Nwe#XYJY zqv(FC|J#uID@^Gx&O7CCC~HL3&-PW=ywVWqx+{TI)mNA!*z4c`_#7#>vQYU;UGWIi z`f4Ti3Fexf$%&pvJ$ezkvM_WQeT(2@JBsACl3rLjlqjA2iD|gM9W@%G^4o&>YF93G zK1=j<$X2D@K$hd0zgYa&Z$i17`bo#4@UdsM;FPj5cJcGAdV0ZM=+9%LyO_IVMrBQ% z(0zy=#QET51t~@Wah+GR(_V_Mx34_DG&BLy-{=>bYTJ`kW<)tResAO>hJbC9@(=R@ zv#x2fO$Hn8Tf_@>v^xp^wqUwp^0XFjaigz#=oCB@=O&=eK9c+A71UXIrCr>oGn z=zj2uSGiJQvQLZfDE5L^_S47(9Xs}UPd@&6cTnj%3}p=shG!XqWA2=50$jz(SvMewe9CnX>F`u`r{Q{joM4X4e>D6r5 zqqDN+^JnD(S4MylJ%;&yOZ88E`=JqWpreCrwd=Ql6=j7Hcq ze0W4zjW&CF87e9BUX3h7ESd(e|N5Gw;E~f`1rPsbaRBmf+z1C+K6IW*?^d|gTkzup z2z<`|Ha!10eBQ*@HqN%VUbcxaEW54e;fK%#u6N!o@umaWw}SkhR2A^g3vSKZtU?Uu zHB5XCQu|eJ`RrA~Nowa`Ep%XRBt3!xhobj{utK}6XZ;pQ;|CYD=TTlJsy9Xn`xTH; zce8H6zdX|UNf?^?6HwckFTP7ghFiOwy2V|+W6pL?K2<$0is{TRC0()?o#QyG4HTQ9 z>dBOF!ttGqPqY}YH9oHPw;{{D7dvtChj72C`QN@L!gYfdLm$anFA*032aL^Ixbx*& zX8Y$R%}c3+JR*Og@F8xJ7ZY{wF)2Mf|NV`_rvRHH(c)ef;oHLc!)xR569SjT^rF3A zfCC+(`q7=^BI=P;LREkNBKf-Z&3l?@r1WU^c9i5-eUlHFUg;}Juc;H)PdzqAps8P! z?||Oxx<#*_kJj=L*H{atF3e$1^r@c~A0L}c|88OjfuHF%HuphQAmiuC?`>UR>5ZIW zci`97yJCl>n~z*IUyHBN&LA{qvja5ZJ0N`R`knk;$Uo`ij~rn zZ{L11jCwa9u!pX0Ws(ozz9ut=mJO{u?S_CLu~tR zh!K#MpBkkjLIe~C%7KIhe1r#7Ibdk^7 zIhmlnrTxNL0xL1G)uBVILu|XvG4 z)%qfad^pXE3ZHtvpUr1S@WxUa%|7QG3-&B`V`Ki1Y#eudOPlI?sE#4F8O7(`XB%Z7 z*p8HOjsk5y*`ny&7aJGD5oFr|qLur_#*|xq*ao2a?+?V|Ai9q##}bgT7ERV)i(64@ zMAzilg(TBkCwNPjAb|*c&Idd6&mXkSgY;iGY2r8KXWPM4ssN%X?_lhE7+2$NK@+B2 z*ZY}7K#E6*V5(uRuVT3W7(H6d&^dkeudIm%Krmm9gNI2`f@)f`O6-T)$@;ZTgGnk^ z-pFI@^f%P|FPcWKNvc=Wgo|T7E35ehZ0++K)@_buUTRTCLMA1K(wF`(aYGz5wuk%XFt6n#*_3aPoi<5L5n`^Ff$Zyk~Y=J^Tnjy|1?pB z{qypcSbNDYG$Ah=&kWfBW(x&Bj`u+PufR)cJKZ4vJaEfHOErFy0ds|sJNbrAj% zamad|5>ONpqbr`$O<5zyPT0g2Wp-a#lP#G}M^N`>pDURW5jP{f!}WKRxW;t2_8mpc z@p1c~>J_*JkxL7$BKjMu}`m$39mijdT+Z(%+ev)ZY63p+@tp1X#jM!ZFDsb zXUHjC8!h+9^$sCN(RQBE3-yU!Fqz z;J7PUd~$CC;HoM0@?&jBg7@swsE4=WoMx!Qe1}C7?`@JN_B9jZi^D=}rf<2#OjHE} zlj^+{y!$Sc+xho^BSuf zve`gU)$S@L^@6b$ICMEv8~%d5UAV~ms6|icLBw>A`$I^UAGr>AOKy7A6fv^Vqvbot zA+1rH`JPuEP;UN8hHoX5S3@HbCi{x{*df`hc&AOJd?<-0myBx_m!=>cIhN@!)nv;? z-Cj;49UiMTD}l$H>e5iYeU64dHT1DlxV9Q~Uv0?OuFj zmu5!2uOZm-VFwUx$W_P{E!psP%D7U55V4qdpzzNU0@C30A_`9tz@wQ&BYw&`mZo&> zJX6gUra#=SF>?yYJrtEVy5|l503A8Jd+xh==csAqM#fXun%WUDqj!mpd!bij0QIns zq81fDKqC*uV5FPv2X6-#TN7Dcr64rJi%gC(|324i@dLWb>$ZYpc8$J<>HE%(b9W7i zKM{^>#$2a=hFO~j1z*b}>(>aHV0=gT^73%SoVdFPlX2a)@vN)3&@Kd2z~xS?p#h}- zXxiuMc?1o6cn5>pat2dp|#4V#?ZRx8^jeb*~r6+Jk6cKhx5yYWPzrB+Gy?F3fTh;|{%=~>9 zxO`G!y&**I(oSuiP5*DpL?4|0t)G`bf#_9EazFq8?te9ta&hEx z&v<|Mu@=>0)c^NIiw>%Oa|7Cga<&4BO1_{zd+=w zi8Jz>#mGghNe7c1Bz+zIApAqkA5v%-LhGOnpn^2@Rs(`5{MS(7P57bPiffYdaDPBF zBBI>EkUu8=RliHj%Itb#2!;4FGka@BKcPpnr3b!xrZ5Xsvo-JELW(;2oVlrfTqw6v zi__Tgr*K@^A7Y2@6_3xF)RtHpUV3BlLMXM?F354MV)OMVX)5$nV;OF6c}}B4tzds> z6p~LrPTEcaa!1&uTpbSe44QDw!x#=q9cgx(@a@6y_66gh)$L|4PxW#T6ht|KaKS0;Z?7!1!ZjAd!ZgpH zXx#V^Y|kaLwtz~#;U(~Z8%f@I6A!|4AFbi3*hNkzpR=4)+|qC1nF9!*Ga~o`m1r%d zbNYC)#{ljy3XtZ_DUZ#DBs6W1{_*Yo4AfN^1*Nib;GL9zXINA+#$j5Tyh(U;s8 zCYib~M_7l1QL!sWJ>4zSNf)0Sc-|LQL}o7oW0fPHL3D1e)Z=RNa@rRM@lq?>)1-_7X655Fvoxz>bL$QFrIi>nv^722&Z^I_ zw!9=Je^>fi8a+U@Bc{1{Cn(?l6^pb)9tyC_E-$=(u+zWl4G)~0#0@P^z(K`EOV?F7 zFGRrS-l%QzpL}MMr$~Ctk~fjYaQH(}4JIKRXW*p-U!^|)2u;BAOx&NfR&8VF?MGA` zrNV-nk)|-qg^m=u<6p7Oj9)XkV)#jr-u41`yscODfi2D8~JivULDn%4L8BoN6lN^!x0%xAeJP!U~BFHz>x+&4AN=eHLD*T6D z*@`E_Z2s0)Lj3)ON?$0y(5tt>Y~R@;dEAhyq`5C@Ro(PgBq%dpI8Fa zbIx?Q=Wpq()=k=DtXW+LGcHt{|JddA{4?DUNgFSjf?3G7O0AACs*Bn#sP4mtq>hE^ zp4T=u;ma_?*&RZS$D6V>L=~87-1l^Nt%K|8GTWJS=P54nZ&hSi?QWeCH{^}H#VuEj zmm|2_?+qySB@JJ9h2DIv4E|acBv}iT`CSKt3pY5D+<#Lq$5vTX>pHS79~)o?h?hOx z?WHXnhtXrp(tR$w8CnZg^>)jXeE&S*FnRGeTDS0>QxAh2XL)VFf@yyS06`?gyVv`C z*+N1CjhR(ct7K(hIS0stsBZ5W*J$s=YnBrk<9gNwirr&!@E@A;C8s@C*dzh>$G<}6 z@^txnb%5t`^~xL?t!tW6^;DBEkHWwjYf-2DXs#m@?K?6TEo2l;j`AV|TMlovjcs)) zl{!+C?SWYC$o#8}Q3ZrI$pz8MJ`a_A3CJRF&P0c0U$;#+vqL$$)2)+5%kxGsfvY6- zFJg7wBNK{in7fsC{|uT%O%!l9d%c@dqpa>{J(*6!v_n&%S@Fww=IKyR9&iO$;8T^Q z#Z6DU5KoAydd4?XK_mtwI9uuG^mREW67*AC_r6f94pf9KCjXP6p%ysKV7*v}SI68$ zBx-N?otb66v96vO%4`g4_R!Z5j5RZm<$v>f?H1Tr|8e1|WMh3HR)8nPS%~#tm>2D| z5Q#Go6K1%tn-K#>JB&_?pj&gsd27PD_Oh%iyvQeJ{0 zD#`#)n2<^`FPMjczjO>?bLxuZrAD0rT)6Z-uW(6;$xv)sb`+By%RX-L_#o+_9M8a zllX$QQ^$0zhuC>+9XZxbJp(M`zys@F4Lg9cM>ol0rJ_Erge&|t7d=D^St{Gzf>2{7 z)=KwrCuCgyyo(8J-Hj|({N--0;ks(6&Ha`EHv<$ykMIsI;a-|*@eP4j28S`R*Uitw z#7`+RdbnnYy;wV2%silPpm1GV+XZ}G&jZUElQQ+3aRCfAXA~9zTQj0OK3~x?Pw)#>76qeNp4qMDajoGWo_fR!j_1BA_!eJxj`cDd-zt$_w)iBHFyWLVg>I$(+Ue!KhL18fxd=;J5+T zEi63?^&xOZf0OM#s);Ba?}2ZbMh|xjit8LcCIJf?s z)Zo*!8z~N!UG_DA0nL6ef$D6nYc<)qQ{>Fjf^9o+lReBysT#H%Hh(qCe+!?muh{S= z&Ei}OLEJ67yPni8@?0G%<)W~iMlA`iZr-qlNb*Rn9i~Grspb#huv_K8456aKx~%Ia z_F!qKgZ|)HFFHsps0u&ppim0tB&rG@w$Y~@ByA`{^3Q;3hri<3up_-=uWsC_Wz76% zO?#y=o2JLf4b*S8*%gzS0wioNTx^Nxj~$XWllrdl)BF9-qBK}Y5cPOlQC5Y#aByMc zLvD}6v}}CvK%Q=|Y`kKMDVoLTt!)i&kHpm*Y91s1rPJ5d|3h7QB+n+(WaF&`s=e+5 z&j<4OtG#SbQco_|k^ekmB0_k~<3DuXsP>_Z=&Cl)py08)b#Q%sf2AIW?2T%C)ZS}l zlD^i;=Bw4Ncu)1Lu)kWrJQVU{w?^e|eXmy8*ovTzRKR(5-a7@bRFmR+w{fau#Y9HW z`Uo*EWouG>xi>a``mnQSwJ{AC{^k0%HCWebOGV)LtOI+O?x*qFBwp(#r_Ek+BDBTM zDKEFg=Z2+K>2&6-{FhqOeVd0#mVDU?W4c1KjIAeXr6enNT}zKI;5*Q9uueFopx`?V zgFZOyt?qqkfw}GMR9s%OC$&>1)eQ+QZ|v+g94|3-w>7j7bN$5nj8zkGoTw_BZEUvl zq698vSXsHh)`i}##6AE(!l8zBQ>`D5yt7Ydt^k%OGF_FCNr&0!SyhfpZKL` zvty)FsX|JLmQf5lCf|XEmATy!g1{r7axZ#PaG-yFnQ0@Eh9G>J0=_0>)LO}gFQm%7 zu1vz1Gp9daN|i&*oD2WTj@XTEHP?$!d6LfD9o*Du!0WF8jHb#twd~|8mp*&^I&s60 z@1?d)5yII@xisZ%#lzod zwsKrPLrdO5eVnDqMVyJEx9${%fMC^@d+*aTXMP3QO!cZ1y5+nQ-pxS}e)=GeC#1&&*FkEJYK_E5RsH(=C}?QbN#j>ZCAXepbE zrR|^fY}EiC;CP@>t<4^W)#FpiKc67DMg5)Y#CF>!{o)f4BuQXpXszd+uVz4r25GxJ zxsQwC+TLwye(Zr7s|DxLJA~W23nq)5uebxmI4QpvsB_;$aW#EEh+7aEx78Z4OFywE76z`uNCgrC`1c zjBW2OpO>Axtado8e4}`r-AF&@dP)h>@6aWAK2mpryk6DZvSZZ-BE6D-(p{Vhkf-L|60pOU)X$b z;sgg{MDaL`#?A!11QCAi4ngg!n#DMjuHdMafRsH*!}LeGtFjNPPl)v5_KN=Oev+z0 z{T(FBUkIt6ero8D1mHTc8z*iUQYZGwci1j zPp|jTLGgR^Y59JB^h5N+@5hVhNxhAJP7lKESFuqG`hW+lf#{A6@^22`Y zMdQWx<(q>L!OMS7)#>(L{-5b(5zSY}c&}Wb=p7s#Y`@v_F2dl`;o^3i9NbQ#+bDl| zj3*!K!?Cv?f7-sPZ&p7z(Q3iM(ABHi5q&q_Jzntf;saL2G^b)jW~6K_MoYx|kn)kj zSnE9N<;T}En!h}JOY?-5AJRN27QF7PEM~N<({`!M=hJ^NEniO#$%>X7!o017&bU|} zH`UI1ZL*K&BNQd!WIS<{0jk8CgkA_})Hg`Chn5yw#w5PFD2sW{wVlBhditdMI%l<2 zG3MoHi*>mB;^j9fUCfHIZVC~{2O8={agwq{{xH3`tke90)dU7-{O5}z%ZdeCzi3H1 zoR10n8wr0?X+_H$x>saHxjUasjFRVcR$ul?a!Sg*ES=3*Q^y&}>1mNM?Rm^cgc*l; zBXL{dEy*wF{&Gh0DlKwR!DGeqik@5&=DVs@$^g;QF{N441&$VRoXxr5TT-V*qn^Q2 zvP`G*>8sYsT!!m$xyu;sOA^=V4YvmF?RCw!L$80+#6=Uk*V}P5eLg8-l8H@I>o)9h z$AR!3_t~td(z+QD?sCtK9N%$554+$-5wGUpsE4_N5d*Lz$h(s8ClSsGuFaYoyp zNlAY$w4aP3yL_5(;kukt&W|#^Nb`QztphwLteAJGbv81Mtka|?`Aip`6lF|b&&c(h zE0~b1q8)n5CP9_W<7U*lB4&1ZMCvkK$_A0;>rn;goZqZ3g8pY`ql(r?WHu9F=#0&U zs^-)3$A5m7exi&x%!6M>=jXf%6F6?1vRZ#D!d&a(NQj)@JBTVe42aSiFd&MwddLwL zg^G;Fr<66wTCGou8H-gHt2RQEBJQ51Q!1ka;cMVd9Mh^gDiYdO$7D06-*5p@2SonWT z;;m^Q#ajS(L5y{i)NNzcE@cd(e3aVwZaV%TpUrE&2e`}k&k|ON31}S9dbgeiF+!L= zj0T#s?KJ3Y8PMUl$X0DvhJ=_kSE7%(%;kILj8v6zO`A8)87YLDb-HH9)$J|zis`J# zX=9DU{g~czfq=WPu($#fadAWY6?ZN7d67Gj>Hrm+V?Zc(bikx4XErGu|y`D-NDA2YP(@X%Pn-h(APJFc5Eu zc*sCp1Br%+?-)opL;}OY!01J2)Cn|=UPMMOqG2yE8ukLCVJ|Qm_5#DO7Z`@Uz<6jO zHhh5%Utq%**zg55e1Q#LV8a(;GJGquO9v7IfBcKME&jmdUYjbkW`VUlqnYFrrwvrz zmFGK>bTXM&`i)Uv-a&OE)GR1lp&KAC46)bPqf1d>4!9_FJ;S_cHreJeEsUF1;mDNz}F_Z zu}jLw99%&6I=DdQbulG1O*CkkR)=IvGj7Gf+ZRv%bwrl`=B>5^mE{Vf*_9nWovQNfDLlL>!2#+0ck?_00fRn88cGn;Gs`%wR5A zydwEdo)@)FRF12h$jO4#@uij&;l(PS(l7pEq~P1E*lE#bsh)nvRJumhO*(Cp9ZuV% z(^_PcPU|72)Ps>tI_>Euoo2x{>9kEc?dg;G3ow7{(-Xc&SnKw5nt0gPa%Z<%q|H5Q zXj3zJ)#NGoqn~;r%(&P29Un=(_v5c5>k>vwc^?$or*v|p-A~tK z{rZ1yV~dFoVHgF-4I?)aF?TEQedMx_!%mx z^&jN5iT4LhC+?gmL{7wp)DL|u*2JyI>3^(~jXz)Px{>R+p6B7fbAy1#K%U|Ay$E|D z_Hh^?pI@Dbi5Z3gV%~FI2*SYso479W*F1lO{}|VSi$gDv-@yX{W8_4B#5}^Lp%Hy90J#Iu;=?>@ON$mIegX*(L|B(7TygaBrZC{D7Zq9$K ze~(P$g~{Yw-y>rX_Hpl#(Q7>NJu>0|jP*S-ddXkLaeUE8qz8!j=KW@JkW{3v5`&j{Cku#^EPGScFCpdM@9HVt)O)1rD%F0k&gd z+f3xHe=z)OL*%gi=x~U3mbCgSy+VIx@WPkwGO+poj-O(A;HRb9mGZJ!w5D@qqmO(D z#L1>l{I6U7*RSGy6I+ZX>BXoyP08OtBd1xN&ffBusLZ?7#BV{8r1Pqo3nA)#a8u)u z<`?3$UGoA8wlqy@Q&j_N%9>UEhKf)lX3lbFnO5?o4es&?f#~k4S19gDqKeA1^--YxeHz{pse8`TY4HfrZv0LvqEB3%l zCaf*HYxYsi4p?jNPLY<1-6_9m-Mpm8^L&@z^kSZ>#ajBA^YAU591M>2sr^GUpI=Yj z7QHu94R5N%-Rf+Cnu|uTMrxwhXRjTn27?FJClG9GX`T100000#0gAr delta 3153 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_011_rst_workflow_001.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_011_rst_workflow_001.vtksz index acb39e2f37575a00bf5a51cb487db829b26765b9..4d95939b3fd16bba1343c0216c22ae9dfe5ef3ed 100644 GIT binary patch delta 3710 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 delta 3721 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_012_fatigue_example_003.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_012_fatigue_example_003.vtksz index be563ff27c0fb6aae4d376014145093ca224be46..03eb12cc32eb0db3f22a6ba08ecb23db01ae74fb 100644 GIT binary patch literal 5258 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 literal 5269 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_013_thermal_example_001.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_013_thermal_example_001.vtksz index 06f11f959ca25cea83b594d2c74c788b9110fd54..17b0cbb88b791ec6da1230355a7596b7b6ae39ed 100644 GIT binary patch delta 22575 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

xinQiC8USNY>5QYvqlej)3FPHF} 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 IwhR8_KcgTX7XSbN diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_014_cyclic_symmetry_example_001.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_014_cyclic_symmetry_example_001.vtksz index 3bfe0e4be026dcaed398e81114e37e4ef47120ab..f15548c8a7d4e8ecd9e878c7870cf3a8008d6e68 100644 GIT binary patch delta 17797 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_014_cyclic_symmetry_example_002.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_014_cyclic_symmetry_example_002.vtksz index 24e4f17eedae055a9a1c9d63fdf2ec996ad34079..71c3a30d208d5a33ede9f30a3e95d888fe887f09 100644 GIT binary patch delta 15245 zcmYj&cT`i)6R(O2f*Mc(0VOIRA|fDNAQ2Hz`BDTCsR5B*1%yzND@~*~0qIS83B8j@ zFVb58fzW%000}8CzxV!m=iGbGnVsF8na|AZ?!9|A$}`Xt&{Uk)v_;^eI`(cLW=S?#!c92{H~kAI|{ppm0hZk`8_${B}seo_v= zz*(p8r+aS-fG*Vxx%k>k{7+8<3Y-0m*w7e`C#M_QMk9`rK0=e zhMHLYl*;tFRZK`DZaT+&ngP`C7x`J#obbhKdE;pZ9?&em!L&3ZnD*4GN&4nv@P5aE zvwp}FdP7&W7Tr5wKM0G4CJ{d4lB*i`D#$M1U9xU=KqH_*MSV>M*6`H2@FcSgi>G`T z4~+kY+~Pt0F^l8qIQvYoeS;@QjXgx<>c6sg|!5Fk{ENuhFyf31@?o zMI~wbfU@T`-i+>(qi5(rS@IV_1)}OfZ1;?@y{?uR*^c_=YDD-jYts7aK9ux>k~{v) zA!VRLoZZQrqRG8aWjT@DD*xw0%7Cu8#dC(Y*!><@1pdH|l9J48L(kATr#bh31R3Vf z>Zk4ZLz3S1ZEv0uk;6LegW&Pb_yz9Zkp>i$>M1HACJ z_@fiv=ErW-fzf$tLeYG3E zi7djC@mb9ubWgq=9CqcnCDzRrhekw=ym7cUeaB^b3EmEWLoIVGZu7h8C9pAKyCn(8 zo~Kmo&$~t&3wQS51zdnPR7t;&1?Id`3}Vd)(q?S!AzvAUAVcICkc1x(IrC%(G#; zs`XjgX0DLkaTsSvC)E%Zz~*9tf|E>U3dtzf9*c4+U^_TSA56v*r71i ze^c4N1Ki#Cu*NkFzm12p2>x3}YEBAprD{9=q9(y_RXg{`r|}UY zj`jTN-DV_3A!+q`hqq17c)upTlCZDB&M z=4`V#8CuSDx;x136CeLvfwl~&Q;{hlX5v6L6Tm3O)(302ImQ9nQ%LFCR(+6382TBX zu`ni{^91v+(zD~*0CchF$(b@xW!kei(5Y$=$>#DCqkwWR;WZMczCGy48A`BNR2>mJ zz}L;JZOi2trU46e7B%6|TKYPS^|P(`n}2SOeC9b*FaHDoIX<~_>u>zVNQ?B2Y*TY) z5W!kRaAjk2L(zGgj=~^Vq4%&8{kXI#iy&7N6}|+lB5R;K?MpVg1fx7>9-fvC+%%9yJCLaxMAEk~cqd zWmfwK<-E_qH;eUcdC1SrJPTi=@00l`D2|Fd?Ur_c>u3Ik0-wDb)J;zO2@ctL{c$ctGXA+THiRd0PfD~-x9t%7CypGu~3u8CHsXGT2aE1 zD!tI{vHSj@f{ym0jML%@BllXH0AcvXN3JZkl@d!yKZP-Cm2oEOaP5QfPnYMvSH!NI zJnc{=F`04Lf07H`-6fmbexund_O*+9=FP_U99|Xn%G5{6jFUZ=tpX>nr10YFlhy3YIjkxM%fUX_1z@ zPklnIFDfYm_`IP*ZXVAjvrZdA<^hPbdKAD%N?$hujoH(WVHC-axMHs8u3&`K=?L7W zjT}$?jrx?~LDaX&_UeDRTJWVVPF`Ub=lLjyu`^#%Tn64qxQwuM``Y|Fjrx)y8@l|X&lV*MYvH6DQ~=@DFO_t@ zrH@h25tRCk=DCy)vy%Llq3+k&pj#%?x1^9pi8}1#+bHE3-rZO{4`nDvE__!$^lTTqSrNoZcBh78<8Da&1!ER z*eyL0Pf{g2&emvgewx+?G-}4PLug|E651!ZwfwX273g|nT?XO(0kG6RIrLVfH@eYa z|IY~v#?RROcQSEUtN03jlP@29XQ1{~O{Jwy6k+t#{`ft01*ONuO2y zxcT~5iy@sU;6pS6TEehf|Mw5BEa%28oAs69GDS6rr;*#tYbD&fxCQiB--MC*R&Z>> z;wN(9W2l@6W|4(llV@5pOd}yhr_1{Tx{Ke0k8aYbWFom!kdmdYCzWbkc}$ zv`mp2Y#J&aMvt<_Y+g^EM947rkZ^c&^qU9%n}@+zX1!~)2wXHki2NA%h<2MEez7&R_Pq5-wXNNZ4aN8D z>wT+sGZc%BkBRKMl__R#mjmG_zP15Wz1KjP-+S_LIe_X?Exj6>|9x)?S#4Wn)5AnX zN4h0-v&}2(%$}U=YkJH>(PAmHpJj>!IwT?zlpJeW$SWq5#@WX~+d8h0BmEE5kJ`QC z)@i9l#r%Zlu!Jg*d+}49mb2yB2(cnys?f1kq8jB*onVvWxm8g0esgzW)(QyO7Tm`$ zZmD)<3B9+m==s_-V|w4AIqPqwnGOI`M!+1T~P zl2(^?>dj|GO3Jitn?S~gz^yA;Y8^U}WVPeywl{l;)Ghn@o<@Hsz`l2^>6E!~h3fQP z`%Ip0@u3*rp>s}x>S%1=k*d!lI4T24*{L74MY1W~* zRkGHaW4NthaB~Q7eKJs${TwUUQpJRuUiyy>y$23m*1jcr6EG6xEQ89tn!wz6nqRjsGWaW{a)x)Jo#2UjG|{CB<{*irbV4wD8@kGb}-`U|4rF!V=+H8o@K7 z*VNW&Aey?=_v+df0TVdO9r80~gxUA%EKjM}?4Ev6+w#;D9X*}xYx+-wC(w;TcA%il z*RjCy*DpN=3+LBYv2HH;PiT(P2ZM7ZB;IL^CFY6NX(9Tk_#zjPDdP3{{|X&WZB`|y z6^&n{$MD6T1-CcX$~D>l7e8a42TO`skjrO9IUit$Ky6_niQ@moLl?wb9ZWvVGMYM% zjPYm{sm4}47W`LMW0)q}g$a+adE)~Br!0R-$Tn5dFc>ksw(Ip37UP{;!JWEUB@+8~ z09O?*oN{Jd(v4=tZdqhC^%*-AVA^(78vl1UVhB9sju6V1LwJ8P(l)vDX8;;@){sEs$zV5ZoWx0=W~sPadNHm}hM2dAQjZ zl>gSe4*ECFK*uJ@`c3s~+Iv%5BTn1u=YtTrzey6lRdGZDxx(fGrHz z{HXd`yw3;uNmb5#%!oyVX}m!{?K#oE>vWj@%x!8DYP{ccnOFU@Ml(?RWwK;Mb}r?2pIU|Niu3y1Ns$%kr`RQC<+ zzqW$5pvHF}7(2L-n-IBAjl9s0v!oZc{Ye>Ri9IQ1k3<_CgM?r(-dKcjchyb;h@dAX z9=KQ^Spn>99)=`J#?^_nZwI_HFK7C4tp|Kx@?wYV#l2rcx!udc!}* z#)vbk=gtgnv~#ll8Klay-cUBR-{@!7Wn7Ab{%p9y zVXmnwk=t=QJa&F<=S|B-_})&x#D-Y7hYU0&wJB2cREcLysb7(#@0Jbe!Sw zf)(Odc!4R;*z*mDMZx16ghRAkG0vg6cZv<(za@7Ram z2Et62${WAPa|K?b-j2PqSQR$eu%&?XVi7K$xloJ? z)-f0ECq8?DFIzA99^?8v;;~G10@u$182>E@ z9Fgoi1~r9A?kQU#Hw{%|CM$wB;{T-;B@^WM6TkXt(ME**Wn;DG7N$ z!SwsGTE?dnF=?2=bkio>ce4<%)>o+EHzRn)j>OUxQ5^MWZu zu3EOZ6(ogmmkj92Cm9!-P=kWbbSJ>B$62nW&;=q^sZILM%0MAX9QutoIRmb@toGf; z#=h52sHJeYFZXkn0wTIb%`9IKViyppz4QVljvyp6P%mff)O~s00x-Y7Lg0M`UngI8 zRjH|wBrr}2cj4FcU4%+{2jt{RHj@MPs{mM6;^!~s6fc5_bh3_DYOdEyTglzIRV*L* zoXy=zm(3q|ZRGI1YL3fWINeE8voNw?6Y#9Q z?>}>Il|`;Fo#$^a04!m!maq)OFBF0o)i7kkx>ZIkZhBr*`-$5Ap&^&>;1!#3qBWr{-!J7Gl$Hep|S4@N#eXx#gI(qAIlK@`J#cK7cT zBH9US5A1V1;bK!Q7QRcWwPTedMwVe%@LwybdMr=0@MIdm(eYwgsFGqeaz82XpQte` zkDSt6P{9Fbkiw4Dj%bKbmcRqh6K@%zn9}tG2lLTJ!$3GWU0P6e>a_CJW_(>VeH@~7 zQ#U4_Q=WCpR@T{a^0kGU2KbB;8&&3gC9RU*xqbGY$6_VkU5D*&{1)um#>h@az&I2! z$t?3m4+N~8c2UI4gcHAp+U9+-uCd|h#G_^^LjN?>XOzXu${#lNWIyZ2X3ab7%;67L zwm13zz1qx$6#nN}xIkzSx2=-6+@0iri0+b$6Q1vdV>#(R&Nlj6^oW;vTT}a`-N&!3 zT9G9NQ*&=v*-)IR&O7dcEv`SDQVNBa&@uzC9RN0QIqTYW>u?7KwRLpC9r;Q~++N&3 z-9q{I<-R2EJjs2c5fW*%t@5=``Cz4}n#)P*39N-M*`;6U+DL(ow5wa06AH;T<~6d- zL_lm+swoUhjV2QxfIM%~&+7yHdHiXD^QYw7y4=b>&uUm(SBKHscNv{IaM!*fC;A5g zih>zJ;7!LzOift<@%&a&UwC}t&V3If(blOd$or*d++%$2sisuXPd5KK26sx?lUpvD zQ0;2!?OMG?Uth!7fD(BcF(OhkQQAw?S2$aJgwGd*xBd)2OUrhU*H>E;oNFaM5iKBb zt73+67diU!IDStJRZzKGAv1+L^2`Ce5*Nv8-H?vmIv$j;_$?uskh2|qR^zSJtm8-4 z30BlBu7Atvm_G+X?Z5QxOVf0YqK2;RQTT11{ijsK$Q&B5z9;pRRjv|-8ZANUS%3|JD3 zX|8jbpydu^MnvElOLx)~96MM@#|tY@b8$E|;;N($YnzoBsP9t>KU0ryoUj#FgdD@} zkCX?B@gvHp$qreq6AMq2*rzL4fP@Re^aNBrn%GnMQB`yR z{djiNnpUMAy~k1EyCk6l%qPWMiW5E@5DAQtJ{Y15*cP{mr(}^+cwYVOsFsH9y3F=W~VFQJ{9iCoq$ zS!E_LoJL>uXg!A&`Q6UVlHv!18&7+uLqwwF*;WFGfbs;lAvxs^e3$E064n9sh zLG#{`gad?W@Fz;_NH1p>eZ@N&@@P=VokkKJKy^BD}4e`pQb**)A=7VG%e z;IlFCK=Z>k+b}>)hFOs#3hkRX(xQ-k4Yq+(9J?r0cp}(RUqk(UUBTDi84c|e3HFXJ z#jS_uS8sKad~o+kf36ppd+y2cf<2iN3pO7mof_LUAGjB>7 z))z7}$lavgXYmxP*7y@>YUR?Dr=rT)O+>wc>%Zym!oV)j-$0Pd4~=Ss6l;7mZ&ZX^ z0~Hp5J55tF8E4o(*v&pqBlskEy2N79Tfb0E3H8?wwt1Cxf0_KRxvm|qV+WR1ecpVv zBlnC)eyuR4h=;8I>6qTZk+*RR{60UrI#hlbCE?yw!C@Cgxq;kpa`AA$CuNKm_iIFt zYQV;Uftl2xXs>W5c>`H*hvFgPM}3^c7fxfIhQ%Cxsn5r)gd6QBUex=`68(&#=wV-V zmw2AWO0;K1kZ}FO#dIRV8XhE^b^3E0Q{+5bkGwfQW%9Fc^h$^7W>RV4S?88<4ePb- zr5JME_Z^M5n-RE8{vwZ;wdlGK=a_bQK7)V`fTO8V_5VOlVn&(KoqAq0e1IYDH1B$O+e9^H1Hq^sL?|kkdM_Mol_wDxlSIp4k>g&|Mo|AHQF`J-=|Gq9H z{Y1W9e8FDU056mw2L!J|CH%R@%++qRH1PdgjmS_V^=E`E7Z=zcW=S*SR{=hCobhDZ&{}OxsZD!mdAdNei z36NBVL-U2Rrd5rX^ycf`16s>UekHA++h*-m%TC5j7gd~$x6(b+GbWfBH}J>C;~PqB z80$BSJ#q$euBAY&gb#q~LHp5!u0juG?wy5_(3e_qD8|C%G$tKI(IM^^a#D)fTK!a| z#b@eQl_YL8O*tPJs4Bn(sP4r-8iXZT6-7@U**MC9=CesBo?`f6JWEO6$2!l0Qf~pO zlv!oVx>|Bt6m;$V*PF|_GSnf6K~btEMSj+CQ}B}vrh;;>#1?o*hrx9p+0^+#fuRkC zLeq-}K8xx03I0&bP(^EdS8Ez(Z+zjNoe#-vQZ+p5d_T@1J9U6d8mfBW;Ntk)mTP|H z-RFtKki!OET#AP8Y(ghNPgQx*gMM}QkZ>XTgfMTEAjIroNK$tkapbRr@DRkr3{y8) zf2K{nnq9eh1z2@lC$*^^{3qqkAhk17N83E~j~~c=Og2z#C**_t-ni+{k-T>XBE2~! zLuZe^9qJk!yV~pYJMse1_m*#s6bXf!Th)l?^CXFQ{0Q+wBiOSC)bQ`de8h>ZsDnt@ zTJ2+!rJ=)DqYTnmQ+;Q{2Is19Y|V4MBv8&HpbEkRT;(5ww5T3Dg%)u;S|(%ubsxkr zW*$dFTfduVB+4dZ#J;p|^Qm}sr@<(MO&oIG!Z)v1MlWviwdSk)w|FeL-wr+b#QH8p zh@!ocC=A{t-uD>}tiQYuS*!!4tv}1$juVfEjAsjVyFl+EM{NC!y-wrt%k{_E0GVkv z9lHnoB{**nZ~kP6Eir%*YcO+nosB-uW@9BOh15%6@8-ZGPhTqMi0$pq#7iLbT!k>P zRhYO6TgnnXU?MRMzhu4mwd8S+9HY$l7`EVh<&2$uJQk8^!lwkl`D$z9!wyg|Nmq-m z@o}_C05CaWhX5 zIeeoc2yuPKX6ZdH+R*Zz#`eECm|9|iK>=v*qEo5LJ!0ZFMYe=j<%24R*vc+=06KDF zbAJE7p0t=4+wXht*8C_>=R{`1HVmRELVFtbiE?Wo@4Zvqq>Y9cTNlM81=vv9r8~eD zQxKYMTR3K)5%JWFyG)c~ z$=8@Jc49g}A7MFfYm`g8IE>kh*`KQcEiOX8J~E#niLxApo7KO!RtXoiUJ2=I~`FTsRO(BZ_eMvBw*3 znk1-_gosl6X%c%VHN1k{T&-29_W}s?32r%>;{xno! z1e(KX(&+(^cx*Txb4i zJk3mqd*E*vX(Z8igAPEdpK9E$R9}3z=NC4ZK~c|x%voMuY=w&s>F&8)zO$9P|LD|b z|Idg(7=7dgWyyQouH?Kx|1@Upp>*OmaP2t90xZK(h2;1`&bkTZ$N)WDzA1d<<4w1e zF-tGb{b%4#hadd+d+;6|UiJdyb|&c5`VU+LYAK%Plg7{y2nP&l0_is-F6JxHRG?dI z_GBK0PYXbqBOcQfpu?&z;1t38xNjv)Hel7$GJD_6SCq1tOOQ3@dF|{H6|gnF;Jk>)Bgrt8vh@~Ba0C|hKVG>@6+CtUEs3m`Jo;!a5Z2$;K`gU#1@+MV#P-R>8)IW{ue_;bs7Qdf*M9HIh%Xib z9@Y%%RS7uNU6Z{@O#+xT>Z!K+{%L;?g4l_S$a_f5T`ij0tG*~x4~aGM)jhgp)xV~4 z^~M*V+>{Z2-}oW#%SdPMZ3Q_v&EaOgFDH&9t>yj*fI9p<-E;OMuRyuO11HmoTFwX_ ziu@4^RV|NG*Cy@l>HZB`?4WCd8qQN)sfM&rJFhAeqyjX9BG;P#AM^$o*-(|;8b+j3 z!7t5S=Nl2eX|m|24xB;-ASaW{5cTaLxZxo`v|a6jB1!1fXERQPBzUCugZjk!$x(AB zfeHEjA}#dg=#G87V`#aUPN^^f(HuA8d+HbEego$Vex1mc3VzrGeN4+?h8iR{jS0}z zcv_r0);xP5Mo;mTH_Akr-$edNW2>UY!~&F`!b*HO1wOP_eh*VG@tE`Lm-=qVF17z8 ztTXw@(SRmSt*ffk`#@*SFH`FXcC&F%>LJ!XZI6jKCAkhlp{m!3m%Z7^rkLI#xSbU> za_)K9K=@wah&NmOZ))h=r7;npD&uvPg2W7nHT%Xf=0?|ur{?reMf6MgxHYn?dda`N z)z}T~AGXgXG)`>y8r%K7rD;O=V=z;U&0inrHC``ZZnP3gg?^LO^|k$71~;B6yJEcN z_dCE__kf?WhXsh*a=$qS$(iCiLZe%JbkVk#?XBgH*(1nITT(ADS85&Q@d^}0 zpbwk2XS=fifXMRXd|{!jX6)CZm6zLoly+>E|83O#$|v~?Ksv@}3@)CQ0TjZI zu8V zu2kK|lC(t!p-`sE)R*$le8A^7v(9EDLvfc86KRrtP!?c`b^6*kd-#S|r0iWpSNzpPjf_O?kw)Ok7w5f+@@x?jZWnn>UXgB_eC`AZwugyS{Q^^hfa_Sxljz zALvXf0}Sf~AYL3PP%~%$JIBBOh=?`y{(<{7MUQ8a%NM>+c?BDSHeZ=jxQ2hLk&j6Sch=-VHD58EdA0#5&1A)b0Unb03*!u;vvbqM=@6z?&o z$w2sq*$-%mveTet>nSsar{iwe1pTpeItVz0Fe6MNt{AYeRv(CSUq1!yf6L4m#v_sb|R!}-}diA7$-CcbYA-DAW}>|#4h5Bc0MC%2wvF?xQ z%bOY%1vGKFbc^%wbv9ruaC<1jz@5+rUX>SttkBs%DK z!&_Uh?J|h`2~Pl|G&k@Jd(Rj`Gtu+ZleUVXapeHywFUZ3wKQ4_BF)N8ZG;JEiVJOXoZKC? zlKVaf-IBTobKMZ05c8)n3)geA9=8ymU-saP$b`0mHcoyOsStgSP=0{uSZ?Gda3u~k zLhkTCrUz8s!~QGTgj3dBxUMgqb1Y1r>*4&UsGj9SFaQgIE4{LJ^ok&l(9F|j_A?cm$>NB zzYHgigP!N`Rcpdgo*&k1V~B&_Jns#ASHGcN8fE8%t-<`@d9;P;>W|T^%Wd%`@e)3U z!UwC~h+bH!?tP;2D5ML^w_~A*+*v36iu5*GphyBjx|s&-$Xz$dG(aM4SP zj2#vEXi`Fiau_fdfd088D0fM6jm)=XyT38SxDoT>h?NjVmf%#9A510QgJoc@9WT94 zdwC$yaUdBcyd-!eWg^cc0O&@eB*Rhj%!o*o5>=utq(9;T<_ns$G`0OF^!riG{nR^S zQuhe;-}kMWe7yrGmy0Y}mLvEH8*`_emBtEaHnLRYE>M}uMz}`#<5`_?sQ7?-JqoZZ5KC9C&#zhS;UGo}p)xcO6=39w(u zYJeOd7h%lOI9Nk}b`LGtje801+Vydq3z>zn5xIEN?$&c}&wE5EABa69Xm#!GpFUms z8@-|Z8rgXfkaKLI)<*7X3Y*!0yZGVW?1%P)WaSKSDyHZPEhUee5A!7xKmm|Q4HNGl zo!>VOyS(*jbEo^cvxmGm>?kA>`sY-009YeCW?&Q#aM}2|bH@shW{Q*IHXVU36hw&9 zM5JSw$h7%X_N6!fXQW*o;vR66cG#MJHu4fk>z69s1^(Fn_7+)uz<2eQ#r^!u=S&tE zjhfPY48Ifp2(3^BoLV-i5(}NY$Tfh|^s?UG{-woEjqH7rv8VROr3k2O;f4l4;-}oC z22tC91?Ya-DfQWOkCE{=_GR(vNtw=eS)u{9FbmC1SDj^rg^jNibHy z-(&eh zp7+Wi!iv6Ek5nbT=@0&m+2GTT6Vj510Hjsiy|3~%uJUZWl~UgU*@khj*6a;bCXa0U zoQ=oes?c`rPMQUdN8^gKjm66suR|nCR^$j(S1=AR;Gm)GkRJ107YlHckfCXD#N)C- zoZ(JD_q-}8w0W9=k(}cFi>W=~V_aUtwFwl{WWUg?jP-0-crh{v)gd1L?l5qnu-Jh7 z#uQ8;j1VTbc3T61a&8GQ>8Z+2-VY5i?j=dGG0NRT{wFuQp$y)pfrE#rAmM}!5e_5_ zofXE>@CUk*R$&7azBxHN*lDt73Lp(hgsC7sQfBKSu{$HJOQ5Ax-|UZUs;QSejmHVeW(a~_tzJ3`Z(g@lo|3|rxH@Vi}YyS zeJ6L7WHm;6^&y{0Q)PEtkclzP%8ys#Yj_WL=f)N~Nk`avgI;0TG`Ur*3ia(V`Ts@_ z^%(_SkDykwLzOD!4125TXFeD%j ze7A1Fy1(@X!hkEMcUK_?mvTCAREjF6xv`Vs6*(!GJpBA?cTvzgnE_MbMH4l1JA>51bie*sAvYft*&)zw|XINGp=zx zFI>nmV&jW%;&g;NOa2|;JVb1;MdYovaDqxixb#wUP%qs(HuV0T&h+&z2F8dU#=i`Y z6MtV7c6#>r%GFM)@hemUZ_;5#gjm^0rhma*WZx3A&Gxl$Vg2*BPq?gskL@@1Rp?HN z?7Ld;d0ma$V0l}@aP#QV*{*2KNubO32vv&C1dx=a{yO~@CE6VqYnxgq_AZiQc=_i7 zNro=9+Pm9dy}U`@kdVj}xIleC!BY5_Pi@~+D*DJUcZSEDpjLp*3*XO>i?@`bWVpALV(vcs4p48< z?^{uam3(ee|8y$dv0nvELJ=!x?cMQov#a9X{bZ>86;)*BKBQjYO|Mjff9aW26X4nTs*VVy7jJreuuT&gWCmm5f>w#_1~!9VUM+lUb%^$UcxpYm>X09Dp)Q@8O)dJ_FRpw0FuD`0h2 z|2InL!rAx(q&-VQ4cmON5_#&uzN1hNmW|N&lF-MrTpV$*5X>I~#>@=;*R9ExS$+2v1_EU3HyRTQsr4u%$9U(Rm4oaa=i$Tc2c#HF{+OWaR zlagdFY=2YXDsJp>cLN9jRbvX-XU9TzH`?9t!wsJ6MomX0#z@V0&_$sO zb#Y@Ay$#4X5AZj0$g2}=IJ7OE%xrS3=syX%Zvk!lMP~kdtoU;hWJ)6v$jny9ioYj8 z88jl1%xrh8SUCxrrx8hHW~XDtHd-4?Xj}3bvkS1J*jon@U4_sn@!YzTo>o>-OXGig zw=Wcb|0v&Pm|p%-tgZ1q^~Kc!-dOXXI~oCcPp-XN&3Ap5S+{x`kujOebq61?BB0W4 zof&5%uhFLWxc}ytxbc&~?w_X9kC?xF4<5N{kypES%TlMFGw7=I?}f}4ocXn{+gKl~ zYc(_iZV)!B>DTNs>l}6;au%Mk#OK%k*Jl3ssrHvd29O$jL-R|(k9bK&Mwa-z+Lvug ziB~^A`+4#J@9Y?%Y+j*MI{|*Z=%0210(#N0b^?NW(Q#Mp1cdaWr*+em}*dWbng?she9L& zU+t%nyrQZe-BFECviXW}*+suEHU9j0=S`26x-&2TUx{e8?r3SDXudCrk+eG^`-bXB zl%PcP=XCo3mptt{2w-NKx0@~bB;jCW{N%G>#MOwu`D!=U7|MIPo z+*jl}o9*x}jUbqSTN|sIH>l&s4&bGAgMST(q5}u;bYxT274Q^ff*(<;;dye+fgATf z0=cIKUri+^axIwA6RNfq9ZJE@e&k55t-xs$=+fo0m|Dr309b2L(Zc(6D9B^~z7XVd zd*JWW$eUoT1x01=*FQjnz590|pIZYzpGGo)wdS>BPc?ZVV?S!19Z4|#%6t`AShTRAFR=>x>~v$ zn7)^DSw6mlp7ju3CY`%XpLN5-_i^5TW$E797ZX@m0~VFkS%WVetC0_C@h7XzOMsDD zY0~`RArSL!{XXNszqunvE%rXl$(_2-&t;bB&r;xDwcT=yW@CKe(Xs&-hUSjr- zh%u?nQK^rpG2_l@yvw;*K^?@nTsgnr4Q_Wj#gjF-~ z({Hp-U-j19>=C(>ol(6Ip?>~fj(br>dy8}fIDmYD`0oUF>@jb0CZ|*%9r$}-fNz_} z9^;>zPFfs^&sI2_{oyM_z0gin80C4XO*2t$yy%KsUVJ>>+m}o04UC@#q)EXT9;7h3qQk#HH zix6W09vLvd7gu`qZt1gl%xA-U``u~04=it~FWica+A9W_xIbv#B6+xr$L{?kirl9P zUrl*t`Enk|{`|w-EyF=>%rdwnQTlg*e*q8V=}jGF7H-#ctNpxS=c|Hya{O}@KM;4d70~82 zwiraKzmjEE?>K36w4ctcwsa${vG4A!bpYpQL?2x({BdFShx6&mG1uRU))+uz!jCC#0^(5buifY=^P zZvT(hP~QzBW?V-1H0%VW6#U*B4UlX820OY%?ew0=y2uD#aw#BCTOCh-2=P z`osd1c>D(64EqP&tJGjM>}YH_5VL<8#5s% NcDasr-uB$N{{ugjLZ1Kt delta 15319 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 I?xjor3$Y0P2LJ#7 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_014_cyclic_symmetry_example_003.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_014_cyclic_symmetry_example_003.vtksz index 1e69850606213f3419e4b38797a76be079c9d5a3..184b534f1f3d6a5490485675bc77b4e09f29e799 100644 GIT binary patch delta 17789 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∨VqA^49lv3fTjVUjlQ>D=wj6!*&hn+zpdk4? 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 AbpQYW diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_014_cyclic_symmetry_example_004.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_014_cyclic_symmetry_example_004.vtksz index d58d86f5c7774fa1e45e2b5d82fc330a4b24e6d3..413fe451ce47492b5766149ef46f41fa9fd98606 100644 GIT binary patch delta 3485 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 diff --git a/version/dev/_images/sphx_glr_012_fatigue_example_003.png b/version/dev/_images/sphx_glr_012_fatigue_example_003.png index 2b159e5f40f58a00ffef685ccd6f1ac7a9e373d8..97216dc1739f1a24f04b27f2c9f5c1ecd7bfd685 100644 GIT binary patch literal 98126 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

    -}gED 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 WcW2>W_JUw8=Ey-ye1)lJ+] + [] @@ -509,7 +509,7 @@ Compute critical layer and critical failure mode. .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 13.998 seconds) + **Total running time of the script:** (0 minutes 10.539 seconds) .. _sphx_glr_download_examples_gallery_examples_010_harmonic_example.py: diff --git a/version/dev/_sources/examples/gallery_examples/011_rst_workflow.rst.txt b/version/dev/_sources/examples/gallery_examples/011_rst_workflow.rst.txt index fd9a09b99..f3c928ae3 100644 --- a/version/dev/_sources/examples/gallery_examples/011_rst_workflow.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/011_rst_workflow.rst.txt @@ -119,7 +119,7 @@ Get input files (RST and material.engd but skip the ACP layup file). .. code-block:: none - ContinuousFiberCompositesFiles(rst=['/tmp/dataProcessingTemp140679556622080/7d9a598c-e854-434a-9259-ccb1d39e172b/shell.rst'], composite={}, engineering_data='/tmp/dataProcessingTemp140679556622080/ed49a1a6-2c2f-4c0d-bbdc-81bb910ba948/material.engd', files_are_local=False) + ContinuousFiberCompositesFiles(rst=['/tmp/dataProcessingTemp140188923717376/42ef0b6b-432c-4967-b793-2c7f056c923a/shell.rst'], composite={}, engineering_data='/tmp/dataProcessingTemp140188923717376/06c3893f-3b3f-42c8-b5eb-4242b25b783a/material.engd', files_are_local=False) @@ -271,7 +271,7 @@ With ACP Standalone (for constant material properties only): .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 8.430 seconds) + **Total running time of the script:** (0 minutes 5.963 seconds) .. _sphx_glr_download_examples_gallery_examples_011_rst_workflow.py: diff --git a/version/dev/_sources/examples/gallery_examples/012_fatigue_example.rst.txt b/version/dev/_sources/examples/gallery_examples/012_fatigue_example.rst.txt index eed3830f6..4da56ed0e 100644 --- a/version/dev/_sources/examples/gallery_examples/012_fatigue_example.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/012_fatigue_example.rst.txt @@ -208,7 +208,7 @@ No mean stress correction is applied. .. code-block:: none - [] + [] @@ -384,7 +384,7 @@ Identify the element with the maximum damage .. code-block:: none The element with highest damage is 27. - The highest damage value is 1.2211892196295381e-07. + The highest damage value is 1.756061360699243e-07. @@ -392,7 +392,7 @@ Identify the element with the maximum damage .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 4.346 seconds) + **Total running time of the script:** (0 minutes 2.991 seconds) .. _sphx_glr_download_examples_gallery_examples_012_fatigue_example.py: diff --git a/version/dev/_sources/examples/gallery_examples/013_thermal_example.rst.txt b/version/dev/_sources/examples/gallery_examples/013_thermal_example.rst.txt index e805f4396..d04251c9a 100644 --- a/version/dev/_sources/examples/gallery_examples/013_thermal_example.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/013_thermal_example.rst.txt @@ -256,7 +256,7 @@ is extracted for the material `Honeycomb Aluminum Alloy`. .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 5.676 seconds) + **Total running time of the script:** (0 minutes 3.942 seconds) .. _sphx_glr_download_examples_gallery_examples_013_thermal_example.py: diff --git a/version/dev/_sources/examples/gallery_examples/014_cyclic_symmetry_example.rst.txt b/version/dev/_sources/examples/gallery_examples/014_cyclic_symmetry_example.rst.txt index 7a9d016bc..6d0079f05 100644 --- a/version/dev/_sources/examples/gallery_examples/014_cyclic_symmetry_example.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/014_cyclic_symmetry_example.rst.txt @@ -374,7 +374,7 @@ The same expansion is possible for strains and stresses. For more information, s .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 8.047 seconds) + **Total running time of the script:** (0 minutes 7.039 seconds) .. _sphx_glr_download_examples_gallery_examples_014_cyclic_symmetry_example.py: diff --git a/version/dev/_sources/examples/gallery_examples/099_dpf_composite_failure_workflow.rst.txt b/version/dev/_sources/examples/gallery_examples/099_dpf_composite_failure_workflow.rst.txt index 19087dae0..f65740090 100644 --- a/version/dev/_sources/examples/gallery_examples/099_dpf_composite_failure_workflow.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/099_dpf_composite_failure_workflow.rst.txt @@ -395,7 +395,7 @@ Plot the maximum and minimum values. .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 6.789 seconds) + **Total running time of the script:** (0 minutes 4.888 seconds) .. _sphx_glr_download_examples_gallery_examples_099_dpf_composite_failure_workflow.py: diff --git a/version/dev/_sources/examples/gallery_examples/sg_execution_times.rst.txt b/version/dev/_sources/examples/gallery_examples/sg_execution_times.rst.txt index 48c9fd4d0..455d04228 100644 --- a/version/dev/_sources/examples/gallery_examples/sg_execution_times.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/sg_execution_times.rst.txt @@ -6,7 +6,7 @@ Computation times ================= -**01:50.653** total execution time for 15 files **from examples/gallery_examples**: +**01:26.769** total execution time for 15 files **from examples/gallery_examples**: .. container:: @@ -33,47 +33,47 @@ Computation times - Time - Mem (MB) * - :ref:`sphx_glr_examples_gallery_examples_001_failure_operator_example.py` (``001_failure_operator_example.py``) - - 00:19.408 + - 00:15.187 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_010_harmonic_example.py` (``010_harmonic_example.py``) - - 00:13.998 + - 00:10.539 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_011_rst_workflow.py` (``011_rst_workflow.py``) - - 00:08.430 + * - :ref:`sphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py` (``007_interlaminar_normal_stress_example.py``) + - 00:07.215 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py` (``014_cyclic_symmetry_example.py``) - - 00:08.047 + - 00:07.039 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py` (``007_interlaminar_normal_stress_example.py``) - - 00:07.872 + * - :ref:`sphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py` (``009_short_fiber_orientation_tensor.py``) + - 00:06.005 + - 0.0 + * - :ref:`sphx_glr_examples_gallery_examples_011_rst_workflow.py` (``011_rst_workflow.py``) + - 00:05.963 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_002_sampling_point_example.py` (``002_sampling_point_example.py``) - - 00:07.682 + - 00:05.257 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_008_assembly_example.py` (``008_assembly_example.py``) - - 00:06.821 + - 00:05.202 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py` (``099_dpf_composite_failure_workflow.py``) - - 00:06.789 + - 00:04.888 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py` (``009_short_fiber_orientation_tensor.py``) - - 00:06.511 + * - :ref:`sphx_glr_examples_gallery_examples_006_filter_composite_data_example.py` (``006_filter_composite_data_example.py``) + - 00:04.628 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_013_thermal_example.py` (``013_thermal_example.py``) - - 00:05.676 + - 00:03.942 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_004_get_material_properties_example.py` (``004_get_material_properties_example.py``) - - 00:04.845 + * - :ref:`sphx_glr_examples_gallery_examples_003_short_fiber_example.py` (``003_short_fiber_example.py``) + - 00:03.480 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_006_filter_composite_data_example.py` (``006_filter_composite_data_example.py``) - - 00:04.640 + * - :ref:`sphx_glr_examples_gallery_examples_004_get_material_properties_example.py` (``004_get_material_properties_example.py``) + - 00:03.103 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_012_fatigue_example.py` (``012_fatigue_example.py``) - - 00:04.346 - - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_003_short_fiber_example.py` (``003_short_fiber_example.py``) - - 00:03.949 + - 00:02.991 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_005_get_layup_properties_example.py` (``005_get_layup_properties_example.py``) - - 00:01.638 + - 00:01.329 - 0.0 diff --git a/version/dev/_sources/sg_execution_times.rst.txt b/version/dev/_sources/sg_execution_times.rst.txt index 54e45aa6c..8c8b4b5cf 100644 --- a/version/dev/_sources/sg_execution_times.rst.txt +++ b/version/dev/_sources/sg_execution_times.rst.txt @@ -6,7 +6,7 @@ Computation times ================= -**01:50.653** total execution time for 15 files **from all galleries**: +**01:26.769** total execution time for 15 files **from all galleries**: .. container:: @@ -33,47 +33,47 @@ Computation times - Time - Mem (MB) * - :ref:`sphx_glr_examples_gallery_examples_001_failure_operator_example.py` (``../../examples/001_failure_operator_example.py``) - - 00:19.408 + - 00:15.187 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_010_harmonic_example.py` (``../../examples/010_harmonic_example.py``) - - 00:13.998 + - 00:10.539 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_011_rst_workflow.py` (``../../examples/011_rst_workflow.py``) - - 00:08.430 + * - :ref:`sphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py` (``../../examples/007_interlaminar_normal_stress_example.py``) + - 00:07.215 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py` (``../../examples/014_cyclic_symmetry_example.py``) - - 00:08.047 + - 00:07.039 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py` (``../../examples/007_interlaminar_normal_stress_example.py``) - - 00:07.872 + * - :ref:`sphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py` (``../../examples/009_short_fiber_orientation_tensor.py``) + - 00:06.005 + - 0.0 + * - :ref:`sphx_glr_examples_gallery_examples_011_rst_workflow.py` (``../../examples/011_rst_workflow.py``) + - 00:05.963 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_002_sampling_point_example.py` (``../../examples/002_sampling_point_example.py``) - - 00:07.682 + - 00:05.257 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_008_assembly_example.py` (``../../examples/008_assembly_example.py``) - - 00:06.821 + - 00:05.202 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py` (``../../examples/099_dpf_composite_failure_workflow.py``) - - 00:06.789 + - 00:04.888 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py` (``../../examples/009_short_fiber_orientation_tensor.py``) - - 00:06.511 + * - :ref:`sphx_glr_examples_gallery_examples_006_filter_composite_data_example.py` (``../../examples/006_filter_composite_data_example.py``) + - 00:04.628 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_013_thermal_example.py` (``../../examples/013_thermal_example.py``) - - 00:05.676 + - 00:03.942 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_004_get_material_properties_example.py` (``../../examples/004_get_material_properties_example.py``) - - 00:04.845 + * - :ref:`sphx_glr_examples_gallery_examples_003_short_fiber_example.py` (``../../examples/003_short_fiber_example.py``) + - 00:03.480 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_006_filter_composite_data_example.py` (``../../examples/006_filter_composite_data_example.py``) - - 00:04.640 + * - :ref:`sphx_glr_examples_gallery_examples_004_get_material_properties_example.py` (``../../examples/004_get_material_properties_example.py``) + - 00:03.103 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_012_fatigue_example.py` (``../../examples/012_fatigue_example.py``) - - 00:04.346 - - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_003_short_fiber_example.py` (``../../examples/003_short_fiber_example.py``) - - 00:03.949 + - 00:02.991 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_005_get_layup_properties_example.py` (``../../examples/005_get_layup_properties_example.py``) - - 00:01.638 + - 00:01.329 - 0.0 diff --git a/version/dev/_static/search.json b/version/dev/_static/search.json index b073cbf8e..782e4e5af 100644 --- a/version/dev/_static/search.json +++ b/version/dev/_static/search.json @@ -1,4 +1,18 @@ [ + { + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets.html#offsets", + "title": "offsets", + "section": "offsets", + "text": "Z coordinates for each interface and ply.\nndarray[Any, dtype[float64]]\noffsets\nndarray\nAny\ndtype\nfloat64" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets.html#ansys.dpf.composites.sampling_point.SamplingPoint.offsets", + "title": "offsets > offsets > offsets", + "section": "offsets > offsets", + "text": "property SamplingPoint.offsets: ndarray[Any, dtype[float64]]\n\nZ coordinates for each interface and ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + }, { "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYt", "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYt.html#eyt", @@ -14,2076 +28,1712 @@ "text": "property MaxStrainCriterion.eYt: float\n\nGlobal tensile strain limit in material direction 2.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pf.html#wf_pf", - "title": "wf_pf", - "section": "wf_pf", - "text": "Weighting factor of the fiber failure (pf) mode.\nfloat\nwf_pf\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.encode", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.encode.html#encode", + "title": "encode", + "section": "encode", + "text": "Encode the string using the codec registered for encoding.\nThe encoding in which to encode the string.\nThe error handling scheme to use for encoding errors.\nThe default is ‘strict’ meaning that encoding errors raise a\nUnicodeEncodeError. Other possible values are ‘ignore’, ‘replace’ and\n‘xmlcharrefreplace’ as well as any other name registered with\ncodecs.register_error that can handle UnicodeEncodeErrors.\nencode" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pf.html#ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pf", - "title": "wf_pf > wf_pf > wf_pf", - "section": "wf_pf > wf_pf", - "text": "property PuckCriterion.wf_pf: float\n\nWeighting factor of the fiber failure (pf) mode.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.encode", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.encode.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.encode", + "title": "encode > encode > encode", + "section": "encode > encode", + "text": "FailureMeasureEnum.encode(/, encoding='utf-8', errors='strict')\n\nEncode the string using the codec registered for encoding.\n\nencoding\n\nThe encoding in which to encode the string.\n\nerrors\n\nThe error handling scheme to use for encoding errors.\nThe default is ‘strict’ meaning that encoding errors raise a\nUnicodeEncodeError. Other possible values are ‘ignore’, ‘replace’ and\n‘xmlcharrefreplace’ as well as any other name registered with\ncodecs.register_error that can handle UnicodeEncodeErrors.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE_REF_SURFACE", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE_REF_SURFACE.html#failure_value_ref_surface", - "title": "FAILURE_VALUE_REF_SURFACE", - "section": "FAILURE_VALUE_REF_SURFACE", - "text": "FAILURE_VALUE_REF_SURFACE" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_constant_property_dict", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_constant_property_dict.html#get_constant_property_dict", + "title": "get_constant_property_dict", + "section": "get_constant_property_dict", + "text": "Get a dictionary with constant properties.\nReturns a dictionary with dpf_material_id as the key and\na dictionary with the requested properties as the value. Only constant properties\nare supported. Variable properties are evaluated at their\ndefault values.\nThis method can be slow to evaluate and should not\nbe called in a loop.\nmaterial_properties (Collection[MaterialProperty]) – List of the requested material properties.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nThe dictionary only contains the materials of the analysis plies defined\nin the specified composite definition.\ndict[int64, dict[MaterialProperty, float]]\nget_constant_property_dict\ndpf_material_id\nCollection\nMaterialProperty\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\ndict\nint64\ndict\nMaterialProperty\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE_REF_SURFACE", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE_REF_SURFACE.html#ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE_REF_SURFACE", - "title": "FAILURE_VALUE_REF_SURFACE > FAILURE_VALUE_REF_SURFACE > FAILURE_VALUE_REF_SURFACE", - "section": "FAILURE_VALUE_REF_SURFACE > FAILURE_VALUE_REF_SURFACE", - "text": "FailureOutput.FAILURE_VALUE_REF_SURFACE = 4\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_constant_property_dict", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_constant_property_dict.html#ansys.dpf.composites.composite_model.CompositeModel.get_constant_property_dict", + "title": "get_constant_property_dict > get_constant_property_dict > get_constant_property_dict", + "section": "get_constant_property_dict > get_constant_property_dict", + "text": "CompositeModel.get_constant_property_dict(material_properties, composite_definition_label=None)\n\nGet a dictionary with constant properties.\n\nReturns a dictionary with dpf_material_id as the key and\na dictionary with the requested properties as the value. Only constant properties\nare supported. Variable properties are evaluated at their\ndefault values.\n\nThis method can be slow to evaluate and should not\nbe called in a loop.\n\nParameters\n\nmaterial_properties (Collection[MaterialProperty]) – List of the requested material properties.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nThe dictionary only contains the materials of the analysis plies defined\nin the specified composite definition.\n\nReturn type\n\ndict[int64, dict[MaterialProperty, float]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots.html#get_offsets_by_spots", - "title": "get_offsets_by_spots", - "section": "get_offsets_by_spots", - "text": "Access the y coordinates of the selected spots (interfaces) for each ply.\nspots (Collection[Spot], default: (, , )) – Collection of spots.\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\nndarray[Any, dtype[float64]]\nget_offsets_by_spots\nCollection\nSpot\n(, , )\nfloat\n1.0\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s1", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s1.html#s1", + "title": "s1", + "section": "s1", + "text": "Stresses in the material 1 direction of each ply.\nndarray[Any, dtype[float64]]\ns1\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots.html#ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots", - "title": "get_offsets_by_spots > get_offsets_by_spots > get_offsets_by_spots", - "section": "get_offsets_by_spots > get_offsets_by_spots", - "text": "SamplingPoint.get_offsets_by_spots(spots=(Spot.BOTTOM, Spot.MIDDLE, Spot.TOP), core_scale_factor=1.0)\n\nAccess the y coordinates of the selected spots (interfaces) for each ply.\n\nParameters\n\nspots (Collection[Spot], default: (, , )) – Collection of spots.\n\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s1", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s1.html#ansys.dpf.composites.sampling_point.SamplingPoint.s1", + "title": "s1 > s1 > s1", + "section": "s1 > s1", + "text": "property SamplingPoint.s1: ndarray[Any, dtype[float64]]\n\nStresses in the material 1 direction of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.M", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.M.html#m", - "title": "M", - "section": "M", - "text": "Specifies the effect of fiber parallel stresses regarding inter-fiber failure. M = [0, 1). The default is 0.5.\nfloat\nM\n0.5\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_spots", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_spots.html#n_spots", + "title": "n_spots", + "section": "n_spots", + "text": "n_spots" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.M", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.M.html#ansys.dpf.composites.failure_criteria.PuckCriterion.M", - "title": "M > M > M", - "section": "M > M", - "text": "property PuckCriterion.M: float\n\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure. M = [0, 1). The default is 0.5.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_spots", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_spots.html#ansys.dpf.composites.layup_info.ElementInfo.n_spots", + "title": "n_spots > n_spots > n_spots", + "section": "n_spots > n_spots", + "text": "ElementInfo.n_spots: int\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3c.html#s3c", - "title": "s3c", - "section": "s3c", - "text": "s3c" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Specific_Heat_cp", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Specific_Heat_cp.html#specific_heat_cp", + "title": "Specific_Heat_cp", + "section": "Specific_Heat_cp", + "text": "Specific_Heat_cp" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s3c", - "title": "s3c > s3c > s3c", - "section": "s3c > s3c", - "text": "FailureModeEnum.s3c = 232\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Specific_Heat_cp", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Specific_Heat_cp.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Specific_Heat_cp", + "title": "Specific_Heat_cp > Specific_Heat_cp > Specific_Heat_cp", + "section": "Specific_Heat_cp > Specific_Heat_cp", + "text": "MaterialProperty.Specific_Heat_cp: str = 'specific_heat'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.l", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.l.html#l", - "title": "l", - "section": "l", - "text": "l" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.rst", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.rst.html#rst", + "title": "rst", + "section": "rst", + "text": "rst" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.l", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.l.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.l", - "title": "l > l > l", - "section": "l > l", - "text": "FailureModeEnum.l = 900\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.rst", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.rst.html#ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.rst", + "title": "rst > rst > rst", + "section": "rst > rst", + "text": "ShortFiberCompositesFiles.rst: list[str | PathLike[str]]\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s1.html#s1", - "title": "s1", - "section": "s1", - "text": "Whether to activate the failure evaluation regarding the stress in the material 1 direction.\nbool\ns1\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.JSON_DICT_KEY", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.JSON_DICT_KEY.html#json_dict_key", + "title": "JSON_DICT_KEY", + "section": "JSON_DICT_KEY", + "text": "JSON_DICT_KEY" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s1.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s1", - "title": "s1 > s1 > s1", - "section": "s1 > s1", - "text": "property MaxStressCriterion.s1: bool\n\nWhether to activate the failure evaluation regarding the stress in the material 1 direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.JSON_DICT_KEY", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.JSON_DICT_KEY.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.JSON_DICT_KEY", + "title": "JSON_DICT_KEY > JSON_DICT_KEY > JSON_DICT_KEY", + "section": "JSON_DICT_KEY > JSON_DICT_KEY", + "text": "CombinedFailureCriterion.JSON_DICT_KEY = 'criteria'\n\n" }, { - "objectID": "api/index", - "href": "api/index.html#api-reference", - "title": "API reference", - "section": "API reference", - "text": "This section describes the public classes, methods, and attributes of the PyDPF Composites API.\nFor in-depth documentation on the different failure criteria, refer to the ACP help.\nAPI reference" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.html#shearcrimpingcriterion", + "title": "ShearCrimpingCriterion", + "section": "ShearCrimpingCriterion", + "text": "Defines the shear crimping failure criterion for sandwich structures.\nkc (float, default: 1.0) – Weighting factor of the core material for evaluation of the maximum allowable load. The default is 1.\nkf (float, default: 0.0) – Weighting factor of the face sheets for evaluation of the maximum allowable load. The default is 0 so the face sheet does not contribute to the allowable load. This property is valid for thin face sheets.\nwf (float, default: 1.0) – Weighting factor of the failure mode (wb or wt).\nShearCrimpingCriterion.to_dict()\n\nShearCrimpingCriterion.to_json()\n\nShearCrimpingCriterion.active\nThe failure criterion is suppressed if active is False.\nShearCrimpingCriterion.kc\nWeighting factor of the core material for evaluation of the maximum allowable load.\nShearCrimpingCriterion.kf\nWeighting factor of the face sheets for evaluation of the maximum allowable load.\nShearCrimpingCriterion.name\nName of the failure criterion.\nShearCrimpingCriterion.wf\nWeighting factor of the failure mode (wb or wt).\nShearCrimpingCriterion\nfloat\n1.0\n1\nfloat\n0.0\n0\nfloat\n1.0\nShearCrimpingCriterion.to_dict\nShearCrimpingCriterion.to_json\nShearCrimpingCriterion.active\nShearCrimpingCriterion.kc\nShearCrimpingCriterion.kf\nShearCrimpingCriterion.name\nShearCrimpingCriterion.wf" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets.html#offsets", - "title": "offsets", - "section": "offsets", - "text": "Z coordinates for each interface and ply.\nndarray[Any, dtype[float64]]\noffsets\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion", + "title": "ShearCrimpingCriterion > ShearCrimpingCriterion > ShearCrimpingCriterion", + "section": "ShearCrimpingCriterion > ShearCrimpingCriterion", + "text": "class ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion(*, kc=1.0, kf=0.0, wf=1.0)\n\nDefines the shear crimping failure criterion for sandwich structures.\n\nParameters\n\nkc (float, default: 1.0) – Weighting factor of the core material for evaluation of the maximum allowable load. The default is 1.\n\nkf (float, default: 0.0) – Weighting factor of the face sheets for evaluation of the maximum allowable load. The default is 0 so the face sheet does not contribute to the allowable load. This property is valid for thin face sheets.\n\nwf (float, default: 1.0) – Weighting factor of the failure mode (wb or wt).\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nShearCrimpingCriterion.to_dict()\n\n\n\nShearCrimpingCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nShearCrimpingCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nShearCrimpingCriterion.kc\n\nWeighting factor of the core material for evaluation of the maximum allowable load.\n\nShearCrimpingCriterion.kf\n\nWeighting factor of the face sheets for evaluation of the maximum allowable load.\n\nShearCrimpingCriterion.name\n\nName of the failure criterion.\n\nShearCrimpingCriterion.wf\n\nWeighting factor of the failure mode (wb or wt).\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets.html#ansys.dpf.composites.sampling_point.SamplingPoint.offsets", - "title": "offsets > offsets > offsets", - "section": "offsets > offsets", - "text": "property SamplingPoint.offsets: ndarray[Any, dtype[float64]]\n\nZ coordinates for each interface and ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu.html#engineering_constants_nu", + "title": "Engineering_Constants_nu", + "section": "Engineering_Constants_nu", + "text": "Engineering_Constants_nu" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.include_ins", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.include_ins.html#include_ins", - "title": "include_ins", - "section": "include_ins", - "text": "Whether to activate the formulation that considers interlaminar normal stresses.\nbool\ninclude_ins\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu", + "title": "Engineering_Constants_nu > Engineering_Constants_nu > Engineering_Constants_nu", + "section": "Engineering_Constants_nu > Engineering_Constants_nu", + "text": "MaterialProperty.Engineering_Constants_nu: str = 'poisson_ratio'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.include_ins", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.include_ins.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.include_ins", - "title": "include_ins > include_ins > include_ins", - "section": "include_ins > include_ins", - "text": "property CoreFailureCriterion.include_ins: bool\n\nWhether to activate the formulation that considers interlaminar normal stresses.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.element_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.element_scope.html#element_scope", + "title": "element_scope", + "section": "element_scope", + "text": "element_scope" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft.html#cft", - "title": "cft", - "section": "cft", - "text": "Activates the failure evaluation regarding tension in fiber direction.\nbool\ncft\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.element_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.element_scope.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.element_scope", + "title": "element_scope > element_scope > element_scope", + "section": "element_scope > element_scope", + "text": "ResultDefinitionScope.element_scope: Sequence[int]\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft", - "title": "cft > cft > cft", - "section": "cft > cft", - "text": "property CuntzeCriterion.cft: bool\n\nActivates the failure evaluation regarding tension in fiber direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.composite_files_from_workbench_harmonic_analysis", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.composite_files_from_workbench_harmonic_analysis.html#composite_files_from_workbench_harmonic_analysis", + "title": "composite_files_from_workbench_harmonic_analysis", + "section": "composite_files_from_workbench_harmonic_analysis", + "text": "Get a ContinuousFiberCompositesFiles object for a harmonic analysis.\nresult_folder_modal (str) – Result folder of the Modal solution.\nIn the Modal system, right-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\nresult_folder_harmonic (str) – Result folder of the Harmonic Response solution.\nIn the Harmonic Response system,\nright-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\nContinuousFiberCompositesFiles\ncomposite_files_from_workbench_harmonic_analysis\nContinuousFiberCompositesFiles\nContinuousFiberCompositesFiles" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.html#samplingpoint", - "title": "SamplingPoint", - "section": "SamplingPoint", - "text": "Implements the Sampling Point object that wraps the DPF sampling point operator.\nUse CompositeModel.get_sampling_point() to get a sampling point object.\nThis class provides for plotting the lay-up and results at a certain point of the\nlayered structure. The results, including analysis_plies, e1, s12, and\nfailure_modes, are always from the bottom to the top of the laminate (along\nthe element normal direction). Postprocessing results such as e1 are returned\nas flat arrays where self.spots_per_ply can be used to compute the index for\na certain ply.\nThe results of layered elements are stored per integration point. A layered shell element\nhas a number of in-plane integration points (depending on the integration scheme) and\ntypically three integration points through the thickness. The through-the-thickness\nintegration points are called spots. They are typically at the BOTTOM, MIDDLE,\nand TOP of the layer. This notation is used here to identify the corresponding data.\nThe SamplingPoint class returns three results per layer (one for each spot) because\nthe results of the in-plane integration points are interpolated to the centroid of the element.\nThe following table shows an example of a laminate with three layers. So a result, such as\ns1 has nine values, three for each ply.\nLayer\nIndex\nSpot\nLayer 3\n8\n7\n6\nTOP of Layer 3\nMIDDLE of Layer 3\nBOTTOM of Layer 3\nLayer 2\n5\n4\n3\nTOP of Layer 2\nMIDDLE of Layer 2\nBOTTOM of Layer 2\nLayer 1\n2\n1\n0\nTOP of Layer 1\nMIDDLE of Layer 1\nBOTTOM of Layer 1\nThe get_indices and get_offsets_by_spots methods simplify the indexing and\nfiltering of the data.\nSamplingPoint.add_ply_sequence_to_plot(axes)\nAdd the stacking (ply and text) to an axis or plot.\nSamplingPoint.add_results_to_plot(axes, ...)\nAdd results (strain, stress, or failure values) to an Axes object.\nSamplingPoint.get_indices([spots])\nGet the indices of the selected spots (interfaces) for each ply.\nSamplingPoint.get_offsets_by_spots([spots, ...])\nAccess the y coordinates of the selected spots (interfaces) for each ply.\nSamplingPoint.get_ply_wise_critical_failures()\nGet the critical failure value and modes per ply.\nSamplingPoint.get_polar_plot([components])\nCreate a standard polar plot to visualize the polar properties of the laminate.\nSamplingPoint.get_result_plots([...])\nGenerate a figure with a grid of axes (plot) for each selected result entity.\nSamplingPoint.analysis_plies\nList of analysis plies from the bottom to the top.\nSamplingPoint.e1\nStrains in the material 1 direction of each ply.\nSamplingPoint.e12\nIn-plane shear strains e12 of each ply.\nSamplingPoint.e13\nOut-of-plane shear strains e13 of each ply.\nSamplingPoint.e2\nStrains in the material 2 direction of each ply.\nSamplingPoint.e23\nOut-of-plane shear strains e23 of each ply.\nSamplingPoint.e3\nStrains in the material 3 direction of each ply.\nSamplingPoint.element_id\nElement label for sampling the laminate.\nSamplingPoint.failure_modes\nCritical failure mode of each ply.\nSamplingPoint.inverse_reserve_factor\nCritical inverse reserve factor of each ply.\nSamplingPoint.is_uptodate\nTrue if the Sampling Point is up-to-date.\nSamplingPoint.margin_of_safety\nLowest margin of safety of each ply.\nSamplingPoint.name\nName of the object.\nSamplingPoint.number_of_plies\nNumber of plies.\nSamplingPoint.offsets\nZ coordinates for each interface and ply.\nSamplingPoint.polar_properties_E1\nPolar property E1 of the laminate.\nSamplingPoint.polar_properties_E2\nPolar property E2 of the laminate.\nSamplingPoint.polar_properties_G12\nPolar property G12 of the laminate.\nSamplingPoint.reserve_factor\nLowest reserve factor of each ply.\nSamplingPoint.results\nResults of the sampling point results as a JSON dictionary.\nSamplingPoint.s1\nStresses in the material 1 direction of each ply.\nSamplingPoint.s12\nIn-plane shear stresses s12 of each ply.\nSamplingPoint.s13\nOut-of-plane shear stresses s13 of each ply.\nSamplingPoint.s2\nStresses in the material 2 direction of each ply.\nSamplingPoint.s23\nOut-of-plane shear stresses s23 of each ply.\nSamplingPoint.s3\nStresses in the material 3 direction of each ply.\nSamplingPoint.spots_per_ply\nNumber of through-the-thickness integration points per ply.\nSamplingPoint\nSampling Point\nCompositeModel.get_sampling_point()\nanalysis_plies\ne1\ns12\nfailure_modes\ne1\nself.spots_per_ply\nBOTTOM\nMIDDLE\nTOP\nSamplingPoint\ns1\nSamplingPoint.add_ply_sequence_to_plot\nSamplingPoint.add_results_to_plot\nAxes\nSamplingPoint.get_indices\nSamplingPoint.get_offsets_by_spots\nSamplingPoint.get_ply_wise_critical_failures\nSamplingPoint.get_polar_plot\nSamplingPoint.get_result_plots\nSamplingPoint.analysis_plies\nSamplingPoint.e1\nSamplingPoint.e12\nSamplingPoint.e13\nSamplingPoint.e2\nSamplingPoint.e23\nSamplingPoint.e3\nSamplingPoint.element_id\nSamplingPoint.failure_modes\nSamplingPoint.inverse_reserve_factor\nSamplingPoint.is_uptodate\nSamplingPoint.margin_of_safety\nSamplingPoint.name\nSamplingPoint.number_of_plies\nSamplingPoint.offsets\nSamplingPoint.polar_properties_E1\nSamplingPoint.polar_properties_E2\nSamplingPoint.polar_properties_G12\nSamplingPoint.reserve_factor\nSamplingPoint.results\nSamplingPoint.s1\nSamplingPoint.s12\nSamplingPoint.s13\nSamplingPoint.s2\nSamplingPoint.s23\nSamplingPoint.s3\nSamplingPoint.spots_per_ply" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.composite_files_from_workbench_harmonic_analysis", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.composite_files_from_workbench_harmonic_analysis.html#ansys.dpf.composites.data_sources.composite_files_from_workbench_harmonic_analysis", + "title": "composite_files_from_workbench_harmonic_analysis > composite_files_from_workbench_harmonic_analysis > composite_files_from_workbench_harmonic_analysis", + "section": "composite_files_from_workbench_harmonic_analysis > composite_files_from_workbench_harmonic_analysis", + "text": "ansys.dpf.composites.data_sources.composite_files_from_workbench_harmonic_analysis(result_folder_modal, result_folder_harmonic)\n\nGet a ContinuousFiberCompositesFiles object for a harmonic analysis.\n\nParameters\n\nresult_folder_modal (str) – Result folder of the Modal solution.\nIn the Modal system, right-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\n\nresult_folder_harmonic (str) – Result folder of the Harmonic Response solution.\nIn the Harmonic Response system,\nright-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\n\nReturn type\n\nContinuousFiberCompositesFiles\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.html#ansys.dpf.composites.sampling_point.SamplingPoint", - "title": "SamplingPoint > SamplingPoint > SamplingPoint", - "section": "SamplingPoint > SamplingPoint", - "text": "class ansys.dpf.composites.sampling_point.SamplingPoint(*args, **kwargs)\n\nImplements the Sampling Point object that wraps the DPF sampling point operator.\n\nUse CompositeModel.get_sampling_point() to get a sampling point object.\nThis class provides for plotting the lay-up and results at a certain point of the\nlayered structure. The results, including analysis_plies, e1, s12, and\nfailure_modes, are always from the bottom to the top of the laminate (along\nthe element normal direction). Postprocessing results such as e1 are returned\nas flat arrays where self.spots_per_ply can be used to compute the index for\na certain ply.\n\nNotes\n\nThe results of layered elements are stored per integration point. A layered shell element\nhas a number of in-plane integration points (depending on the integration scheme) and\ntypically three integration points through the thickness. The through-the-thickness\nintegration points are called spots. They are typically at the BOTTOM, MIDDLE,\nand TOP of the layer. This notation is used here to identify the corresponding data.\n\nThe SamplingPoint class returns three results per layer (one for each spot) because\nthe results of the in-plane integration points are interpolated to the centroid of the element.\nThe following table shows an example of a laminate with three layers. So a result, such as\ns1 has nine values, three for each ply.\n\n\n\n\n\n\n\nLayer\n\nIndex\n\nSpot\n\nLayer 3\n\n8\n\n7\n\n6\n\nTOP of Layer 3\n\nMIDDLE of Layer 3\n\nBOTTOM of Layer 3\n\nLayer 2\n\n5\n\n4\n\n3\n\nTOP of Layer 2\n\nMIDDLE of Layer 2\n\nBOTTOM of Layer 2\n\nLayer 1\n\n2\n\n1\n\n0\n\nTOP of Layer 1\n\nMIDDLE of Layer 1\n\nBOTTOM of Layer 1\n\nThe get_indices and get_offsets_by_spots methods simplify the indexing and\nfiltering of the data.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nSamplingPoint.add_ply_sequence_to_plot(axes)\n\nAdd the stacking (ply and text) to an axis or plot.\n\nSamplingPoint.add_results_to_plot(axes, ...)\n\nAdd results (strain, stress, or failure values) to an Axes object.\n\nSamplingPoint.get_indices([spots])\n\nGet the indices of the selected spots (interfaces) for each ply.\n\nSamplingPoint.get_offsets_by_spots([spots, ...])\n\nAccess the y coordinates of the selected spots (interfaces) for each ply.\n\nSamplingPoint.get_ply_wise_critical_failures()\n\nGet the critical failure value and modes per ply.\n\nSamplingPoint.get_polar_plot([components])\n\nCreate a standard polar plot to visualize the polar properties of the laminate.\n\nSamplingPoint.get_result_plots([...])\n\nGenerate a figure with a grid of axes (plot) for each selected result entity.\n\n\n\nAttributes\n\n\n\n\n\n\n\nSamplingPoint.analysis_plies\n\nList of analysis plies from the bottom to the top.\n\nSamplingPoint.e1\n\nStrains in the material 1 direction of each ply.\n\nSamplingPoint.e12\n\nIn-plane shear strains e12 of each ply.\n\nSamplingPoint.e13\n\nOut-of-plane shear strains e13 of each ply.\n\nSamplingPoint.e2\n\nStrains in the material 2 direction of each ply.\n\nSamplingPoint.e23\n\nOut-of-plane shear strains e23 of each ply.\n\nSamplingPoint.e3\n\nStrains in the material 3 direction of each ply.\n\nSamplingPoint.element_id\n\nElement label for sampling the laminate.\n\nSamplingPoint.failure_modes\n\nCritical failure mode of each ply.\n\nSamplingPoint.inverse_reserve_factor\n\nCritical inverse reserve factor of each ply.\n\nSamplingPoint.is_uptodate\n\nTrue if the Sampling Point is up-to-date.\n\nSamplingPoint.margin_of_safety\n\nLowest margin of safety of each ply.\n\nSamplingPoint.name\n\nName of the object.\n\nSamplingPoint.number_of_plies\n\nNumber of plies.\n\nSamplingPoint.offsets\n\nZ coordinates for each interface and ply.\n\nSamplingPoint.polar_properties_E1\n\nPolar property E1 of the laminate.\n\nSamplingPoint.polar_properties_E2\n\nPolar property E2 of the laminate.\n\nSamplingPoint.polar_properties_G12\n\nPolar property G12 of the laminate.\n\nSamplingPoint.reserve_factor\n\nLowest reserve factor of each ply.\n\nSamplingPoint.results\n\nResults of the sampling point results as a JSON dictionary.\n\nSamplingPoint.s1\n\nStresses in the material 1 direction of each ply.\n\nSamplingPoint.s12\n\nIn-plane shear stresses s12 of each ply.\n\nSamplingPoint.s13\n\nOut-of-plane shear stresses s13 of each ply.\n\nSamplingPoint.s2\n\nStresses in the material 2 direction of each ply.\n\nSamplingPoint.s23\n\nOut-of-plane shear stresses s23 of each ply.\n\nSamplingPoint.s3\n\nStresses in the material 3 direction of each ply.\n\nSamplingPoint.spots_per_ply\n\nNumber of through-the-thickness integration points per ply.\n\n" + "objectID": "api/result_definition", + "href": "api/result_definition.html#result-definition", + "title": "Result definition", + "section": "Result definition", + "text": "ResultDefinition(name, ...[, measure, ...])\nRepresents the result definition of DPF Composites.\nResultDefinitionScope(composite_definition)\nProvides the result definition scope.\nFailureMeasureEnum(value[, names, module, ...])\nProvides available failure measures.\nResult definition\nResultDefinition\nResultDefinitionScope\nFailureMeasureEnum" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cf.html#cf", - "title": "cf", - "section": "cf", - "text": "cf" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.tw", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.tw.html#tw", + "title": "tw", + "section": "tw", + "text": "tw" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cf.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cf", - "title": "cf > cf > cf", - "section": "cf > cf", - "text": "FailureModeEnum.cf = 310\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E2", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E2.html#engineering_constants_e2", - "title": "Engineering_Constants_E2", - "section": "Engineering_Constants_E2", - "text": "Engineering_Constants_E2" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E2", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E2.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E2", - "title": "Engineering_Constants_E2 > Engineering_Constants_E2 > Engineering_Constants_E2", - "section": "Engineering_Constants_E2 > Engineering_Constants_E2", - "text": "MaterialProperty.Engineering_Constants_E2: str = 'young_modulus_y_direction'\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.ljust", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.ljust.html#ljust", - "title": "ljust", - "section": "ljust", - "text": "Return a left-justified string of length width.\nPadding is done using the specified fill character (default is a space).\nljust" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.ljust", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.ljust.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.ljust", - "title": "ljust > ljust > ljust", - "section": "ljust > ljust", - "text": "FailureMeasureEnum.ljust(width, fillchar=' ', /)\n\nReturn a left-justified string of length width.\n\nPadding is done using the specified fill character (default is a space).\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.html#elementinfo", - "title": "ElementInfo", - "section": "ElementInfo", - "text": "Provides lay-up information for an element.\nUse the ElementInfoProvider class to obtain the\nElementInfo class for an element.\nid (int) – Element ID or label.\nn_layers (int) – Number of layers. For non-layered elements, the value is 1.\nn_corner_nodes (int) – Number of corner nodes (without midside nodes).\nn_spots (int) – Number of spots (through-the-thickness integration points) per layer.\nelement_type (int) – APDL element type. For example, 181 for layered shells.\ndpf_material_ids (numpy.ndarray[Any, numpy.dtype[numpy.int64]]) – List of DPF material IDs for all layers.\nis_shell (bool) – Whether the element is a shell element.\nnumber_of_nodes_per_spot_plane (int) – Number of nodes per output plane. The value is equal\nto n_corner_nodes for shell elements and n_corner_nodes\ndivided by two for layered solid elements. The value is equal to -1\nfor non-layered elements.\nElementInfo.id\n\nElementInfo.n_layers\n\nElementInfo.n_corner_nodes\n\nElementInfo.n_spots\n\nElementInfo.is_layered\n\nElementInfo.element_type\n\nElementInfo.dpf_material_ids\n\nElementInfo.is_shell\n\nElementInfo.number_of_nodes_per_spot_plane\n\nElementInfo\nElementInfoProvider\nElementInfo\n1\n181\nn_corner_nodes\nn_corner_nodes\n-1\nElementInfo.id\nElementInfo.n_layers\nElementInfo.n_corner_nodes\nElementInfo.n_spots\nElementInfo.is_layered\nElementInfo.element_type\nElementInfo.dpf_material_ids\nElementInfo.is_shell\nElementInfo.number_of_nodes_per_spot_plane" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.html#ansys.dpf.composites.layup_info.ElementInfo", - "title": "ElementInfo > ElementInfo > ElementInfo", - "section": "ElementInfo > ElementInfo", - "text": "class ansys.dpf.composites.layup_info.ElementInfo(id, n_layers, n_corner_nodes, n_spots, is_layered, element_type, dpf_material_ids, is_shell, number_of_nodes_per_spot_plane)\n\nProvides lay-up information for an element.\n\nUse the ElementInfoProvider class to obtain the\nElementInfo class for an element.\n\nParameters\n\nid (int) – Element ID or label.\n\nn_layers (int) – Number of layers. For non-layered elements, the value is 1.\n\nn_corner_nodes (int) – Number of corner nodes (without midside nodes).\n\nn_spots (int) – Number of spots (through-the-thickness integration points) per layer.\n\nelement_type (int) – APDL element type. For example, 181 for layered shells.\n\ndpf_material_ids (numpy.ndarray[Any, numpy.dtype[numpy.int64]]) – List of DPF material IDs for all layers.\n\nis_shell (bool) – Whether the element is a shell element.\n\nnumber_of_nodes_per_spot_plane (int) – Number of nodes per output plane. The value is equal\nto n_corner_nodes for shell elements and n_corner_nodes\ndivided by two for layered solid elements. The value is equal to -1\nfor non-layered elements.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nElementInfo.id\n\n\n\nElementInfo.n_layers\n\n\n\nElementInfo.n_corner_nodes\n\n\n\nElementInfo.n_spots\n\n\n\nElementInfo.is_layered\n\n\n\nElementInfo.element_type\n\n\n\nElementInfo.dpf_material_ids\n\n\n\nElementInfo.is_shell\n\n\n\nElementInfo.number_of_nodes_per_spot_plane\n\n\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.replace", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.replace.html#replace", - "title": "replace", - "section": "replace", - "text": "Return a copy with all occurrences of substring old replaced by new.\nMaximum number of occurrences to replace.\n-1 (the default value) means replace all occurrences.\nIf the optional argument count is given, only the first count occurrences are\nreplaced.\nreplace" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.replace", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.replace.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.replace", - "title": "replace > replace > replace", - "section": "replace > replace", - "text": "FailureMeasureEnum.replace(old, new, /, count=-1)\n\nReturn a copy with all occurrences of substring old replaced by new.\n\ncount\n\nMaximum number of occurrences to replace.\n-1 (the default value) means replace all occurrences.\n\nIf the optional argument count is given, only the first count occurrences are\nreplaced.\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_indices", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_indices.html#get_indices", - "title": "get_indices", - "section": "get_indices", - "text": "Get the indices of the selected spots (interfaces) for each ply.\nThe indices are sorted from bottom to top.\nFor instance, this method can be used to access the stresses at the bottom of each ply.\nspots (Collection[Spot], default: (, , )) – Collection of spots. Only the indices of the bottom interfaces of plies\nare returned if [Spot.BOTTOM] is set.\nSequence[int]\nget_indices\nCollection\nSpot\n(, , )\n[Spot.BOTTOM]\nSequence\nint" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_indices", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_indices.html#ansys.dpf.composites.sampling_point.SamplingPoint.get_indices", - "title": "get_indices > get_indices > get_indices", - "section": "get_indices > get_indices", - "text": "SamplingPoint.get_indices(spots=(Spot.BOTTOM, Spot.MIDDLE, Spot.TOP))\n\nGet the indices of the selected spots (interfaces) for each ply.\n\nThe indices are sorted from bottom to top.\nFor instance, this method can be used to access the stresses at the bottom of each ply.\n\nParameters\n\nspots (Collection[Spot], default: (, , )) – Collection of spots. Only the indices of the bottom interfaces of plies\nare returned if [Spot.BOTTOM] is set.\n\nExamples\n\n>>> ply_top_indices = sampling_point.get_indices([Spot.TOP])\n\nReturn type\n\nSequence[int]\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.axes", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.axes.html#axes", - "title": "axes", - "section": "axes", - "text": "axes" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.axes", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.axes.html#ansys.dpf.composites.sampling_point.SamplingPointFigure.axes", - "title": "axes > axes > axes", - "section": "axes > axes", - "text": "SamplingPointFigure.axes: Any\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2c.html#e2c", - "title": "e2c", - "section": "e2c", - "text": "e2c" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e2c", - "title": "e2c > e2c > e2c", - "section": "e2c > e2c", - "text": "FailureModeEnum.e2c = 122\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmB", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmB.html#pmb", - "title": "pmB", - "section": "pmB", - "text": "pmB" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmB", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmB.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.pmB", - "title": "pmB > pmB > pmB", - "section": "pmB > pmB", - "text": "FailureModeEnum.pmB = 803\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property FaceSheetWrinklingCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax.html#emax", - "title": "emax", - "section": "emax", - "text": "emax" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.emax", - "title": "emax > emax > emax", - "section": "emax > emax", - "text": "FailureModeEnum.emax = 101\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids.html#get_all_dpf_material_ids", - "title": "get_all_dpf_material_ids", - "section": "get_all_dpf_material_ids", - "text": "Get all DPF material IDs.\nmesh (MeshedRegion) – DPF meshed region enriched with lay-up information.\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source or stream provider that contains the RST file.\nCollection[int64]\nget_all_dpf_material_ids\nMeshedRegion\nDataSources\nOperator\nCollection\nint64" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids.html#ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids", - "title": "get_all_dpf_material_ids > get_all_dpf_material_ids > get_all_dpf_material_ids", - "section": "get_all_dpf_material_ids > get_all_dpf_material_ids", - "text": "ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids(mesh, data_source_or_streams_provider)\n\nGet all DPF material IDs.\n\nParameters\n\nmesh (MeshedRegion) – DPF meshed region enriched with lay-up information.\n\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source or stream provider that contains the RST file.\n\nReturn type\n\nCollection[int64]\n\n!! processed by numpydoc !!" - }, - { - "objectID": "index", - "href": "index.html#pydpf-composites", - "title": "PyDPF Composites", - "section": "PyDPF Composites", - "text": "PyDPF Composites enables the post-processing of composite structures based on\nAnsys DPF and the DPF Composites plugin. It implements\nclasses on top of DPF Composites operators and data accessors for short\nfiber and layered composites (layered shell and solid elements). This module\ncan be used to postprocess fiber reinforced plastics and layered composites, and\nto implement custom failure criteria and computation.\nContains installation instructions and a simple\nexample to create a failure plot from a Workbench project.\nDemonstrates the use of PyDPF Composites for various workflows.\nDescribes the public Python classes, methods, and functions.\nProvides developer installation and usage information.\nThe minimum set of inputs to run a postprocessing for composites is the result files of an\nMAPDL solution and a material file (MATML) which was generated by Engineering Data.\nLay-up files from ACP are optional and only required for some advanced operations. Refer to\nLimitations.\nPyDPF Composites" - }, - { - "objectID": "index", - "href": "index.html#key-features", - "title": "PyDPF Composites > Key features", - "section": "Key features", - "text": "Here are some key features of PyDPF Composites:\nPostprocessing of layered shell and solid elements. MAPDL models as well as models preprocessed with ACP are supported.\nFailure criteria evaluation as shown in Composite failure analysis.\nA SamplingPoint class for extracting and visualizing a result over the entire thickness of a laminate as shown in\nSampling point.\nA ResultDefinition class for configuring combined failure criteria and scopes.\nAccessors for getting layered properties such as plies and materials as shown in\nLayered properties\nand Material properties and custom failure criterion.\nInterface to implement custom failure criteria and analysis as shown in\nMaterial properties and custom failure criterion.\nPostprocessing of homogeneous elements.\nKey features\nSamplingPoint\nResultDefinition" - }, - { - "objectID": "index", - "href": "index.html#limitations", - "title": "PyDPF Composites > Limitations", - "section": "Limitations", - "text": "Only the Mechanical APDL solver is supported.\nThe post-processing of expanded cyclic symmetry models is not implemented.\nThe following operators and features are only supported if the model was\npreprocessed with ACP and if the corresponding lay-up definition file is passed to the CompositeModel class.\nThe evaluation of the failure criteria for sandwich\n(FaceSheetWrinklingCriterion,\nShearCrimpingCriterion)\nfor solid elements. Layered shell elements are always supported.\nThe computation of interlaminar normal stresses (s3) for layered shell elements.\nWithout ACP layup definitions, s3 is always zero. This also affects 3D failure criteria which use s3,\nsuch as Puck 3D. This limitation does not affect (layered) solid elements.\nThe support of variable materials and material fields. Without ACP, only the\ntemperature is considered for the evaluation of variable material properties.\nGlobal plies, and scoping by plies. Layer-wise post-processing is always supported.\nPlotting results on the reference surface of a laminate.\nNote: MAPDL models that have not been preprocessed with ACP can be converted. For more\ninformation, see Import of Legacy Mechanical APDL Composite Models in the Ansys Help.\nLimitations\nCompositeModel\nFaceSheetWrinklingCriterion\nShearCrimpingCriterion" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.name.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property ShearCrimpingCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MID", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MID.html#mid", - "title": "MID", - "section": "MID", - "text": "MID" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MID", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MID.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MID", - "title": "MID > MID > MID", - "section": "MID > MID", - "text": "SpotReductionStrategy.MID = 'MID'\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G23", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G23.html#engineering_constants_g23", - "title": "Engineering_Constants_G23", - "section": "Engineering_Constants_G23", - "text": "Engineering_Constants_G23" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G23", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G23.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G23", - "title": "Engineering_Constants_G23 > Engineering_Constants_G23 > Engineering_Constants_G23", - "section": "Engineering_Constants_G23 > Engineering_Constants_G23", - "text": "MaterialProperty.Engineering_Constants_G23: str = 'shear_modulus_yz'\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode.html#stress_strain_eval_mode", - "title": "stress_strain_eval_mode", - "section": "stress_strain_eval_mode", - "text": "Results loaded from a result (RST) file by default.\nYou can set this property to \"mapdl_live\" to activate on-the-fly\nstrain and stress evaluation. This property can be used if the result\nfile contains only the primary results (deformations).\nstr\nstress_strain_eval_mode\n\"mapdl_live\"\nstr" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode.html#ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode", - "title": "stress_strain_eval_mode > stress_strain_eval_mode > stress_strain_eval_mode", - "section": "stress_strain_eval_mode > stress_strain_eval_mode", - "text": "property ResultDefinition.stress_strain_eval_mode: str\n\nResults loaded from a result (RST) file by default.\n\nYou can set this property to \"mapdl_live\" to activate on-the-fly\nstrain and stress evaluation. This property can be used if the result\nfile contains only the primary results (deformations).\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lft", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lft.html#lft", - "title": "lft", - "section": "lft", - "text": "Whether to activate the failure evaluation regarding tension in fiber direction.\nbool\nlft\nbool" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lft", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lft.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.lft", - "title": "lft > lft > lft", - "section": "lft > lft", - "text": "property LaRCCriterion.lft: bool\n\nWhether to activate the failure evaluation regarding tension in fiber direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.html#resultdefinition", - "title": "ResultDefinition", - "section": "ResultDefinition", - "text": "Represents the result definition of DPF Composites.\nThis class is used to configure the DPF operators composite::failure_evaluator\nand composite::sampling_point_evaluator.\nResultDefinition.check_has_single_scope(msg)\nCheck that the result definition has one scope.\nResultDefinition.to_dict()\nGet the result definition in a dictionary representation.\nResultDefinition.to_json()\nConvert the dictionary representation of the result definition to a JSON dictionary.\nResultDefinition.combined_failure_criterion\nConfiguration of the failure criteria such as maximum stress, puck, and wrinkling.\nResultDefinition.expression\nType of the result.\nResultDefinition.material_file\nPath of the material files that store the material properties.\nResultDefinition.max_chunk_size\nMaximum chunk size (number of elements) for the result evaluation.\nResultDefinition.measure\nReturn type of the failure values.\nResultDefinition.name\nCustom name.\nResultDefinition.rst_files\nPath of the result (RST) files.\nResultDefinition.scopes\nScopes of the result definition.\nResultDefinition.stress_strain_eval_mode\nResults loaded from a result (RST) file by default.\nResultDefinition.time\nTime or solution step.\nResultDefinition\ncomposite::failure_evaluator\ncomposite::sampling_point_evaluator\nResultDefinition.check_has_single_scope\nResultDefinition.to_dict\nResultDefinition.to_json\nResultDefinition.combined_failure_criterion\nResultDefinition.expression\nResultDefinition.material_file\nResultDefinition.max_chunk_size\nResultDefinition.measure\nResultDefinition.name\nResultDefinition.rst_files\nResultDefinition.scopes\nResultDefinition.stress_strain_eval_mode\nResultDefinition.time" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.html#ansys.dpf.composites.result_definition.ResultDefinition", - "title": "ResultDefinition > ResultDefinition > ResultDefinition", - "section": "ResultDefinition > ResultDefinition", - "text": "class ansys.dpf.composites.result_definition.ResultDefinition(name, combined_failure_criterion, composite_scopes, rst_files, material_file, measure='inverse_reserve_factor', stress_strain_eval_mode='rst_file', time=None, expression='composite_failure', max_chunk_size=50000)\n\nRepresents the result definition of DPF Composites.\n\nThis class is used to configure the DPF operators composite::failure_evaluator\nand composite::sampling_point_evaluator.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nResultDefinition.check_has_single_scope(msg)\n\nCheck that the result definition has one scope.\n\nResultDefinition.to_dict()\n\nGet the result definition in a dictionary representation.\n\nResultDefinition.to_json()\n\nConvert the dictionary representation of the result definition to a JSON dictionary.\n\n\n\nAttributes\n\n\n\n\n\n\n\nResultDefinition.combined_failure_criterion\n\nConfiguration of the failure criteria such as maximum stress, puck, and wrinkling.\n\nResultDefinition.expression\n\nType of the result.\n\nResultDefinition.material_file\n\nPath of the material files that store the material properties.\n\nResultDefinition.max_chunk_size\n\nMaximum chunk size (number of elements) for the result evaluation.\n\nResultDefinition.measure\n\nReturn type of the failure values.\n\nResultDefinition.name\n\nCustom name.\n\nResultDefinition.rst_files\n\nPath of the result (RST) files.\n\nResultDefinition.scopes\n\nScopes of the result definition.\n\nResultDefinition.stress_strain_eval_mode\n\nResults loaded from a result (RST) file by default.\n\nResultDefinition.time\n\nTime or solution step.\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.named_selection_scope", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.named_selection_scope.html#named_selection_scope", - "title": "named_selection_scope", - "section": "named_selection_scope", - "text": "Assembly files that define the mapping of the labels.\nThis attribute is needed if multiple parts are assembled in Workbench or\nMechanical to map the local element and node labels to the global labels.\nnamed_selection_scope" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.named_selection_scope", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.named_selection_scope.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.named_selection_scope", - "title": "named_selection_scope > named_selection_scope > named_selection_scope", - "section": "named_selection_scope > named_selection_scope", - "text": "ResultDefinitionScope.named_selection_scope: Sequence[str]\n\nAssembly files that define the mapping of the labels.\n\nThis attribute is needed if multiple parts are assembled in Workbench or\nMechanical to map the local element and node labels to the global labels.\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_effective_strain", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_effective_strain.html#strain_limits_effective_strain", - "title": "Strain_Limits_effective_strain", - "section": "Strain_Limits_effective_strain", - "text": "Strain_Limits_effective_strain" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_effective_strain", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_effective_strain.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_effective_strain", - "title": "Strain_Limits_effective_strain > Strain_Limits_effective_strain > Strain_Limits_effective_strain", - "section": "Strain_Limits_effective_strain > Strain_Limits_effective_strain", - "text": "MaterialProperty.Strain_Limits_effective_strain: str = 'von_mises'\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices", - "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices.html#get_selected_indices", - "title": "get_selected_indices", - "section": "get_selected_indices", - "text": "Get elementary indices based on element information, layers, nodes, and spots.\nelement_info (ElementInfo) – Lay-up information for the element.\nlayers (Optional[Collection[int]], default: None) – List of selected layers.\nnodes (Optional[Collection[int]], default: None) – List of selected corner nodes.\nspots (Optional[Collection[Spot]], default: None) – List of selected spots.\ndisable_checks (bool, default: False) – Whether to disable checks. Set to True to disable checks.\nDisabling checks results in better performance but potentially\ncryptic error messages or invalid indices.\nArray of selected indices.\nNDArray\nReturns an empty selection if any of the collections is empty.\nThe indices (nodes, layers, and spots) are 0-based. Pay attention to this\nwhen using the “composite::minmax_per_element_operator” or\nevaluate_failure_criteria\nwhere the min/max layer indices\nare 1-based starting with Workbench 2024 R1 (DPF server 7.1).\nget_selected_indices\nElementInfo\nOptional\nCollection\nint\nNone\nOptional\nCollection\nint\nNone\nOptional\nCollection\nSpot\nNone\nbool\nFalse\nTrue\nevaluate_failure_criteria" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices", - "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices.html#ansys.dpf.composites.select_indices.get_selected_indices", - "title": "get_selected_indices > get_selected_indices > get_selected_indices", - "section": "get_selected_indices > get_selected_indices", - "text": "ansys.dpf.composites.select_indices.get_selected_indices(element_info, layers=None, nodes=None, spots=None, disable_checks=False)\n\nGet elementary indices based on element information, layers, nodes, and spots.\n\nParameters\n\nelement_info (ElementInfo) – Lay-up information for the element.\n\nlayers (Optional[Collection[int]], default: None) – List of selected layers.\n\nnodes (Optional[Collection[int]], default: None) – List of selected corner nodes.\n\nspots (Optional[Collection[Spot]], default: None) – List of selected spots.\n\ndisable_checks (bool, default: False) – Whether to disable checks. Set to True to disable checks.\nDisabling checks results in better performance but potentially\ncryptic error messages or invalid indices.\n\nReturns\n\nArray of selected indices.\n\nReturn type\n\nNDArray\n\nNotes\n\nReturns an empty selection if any of the collections is empty.\n\nThe indices (nodes, layers, and spots) are 0-based. Pay attention to this\nwhen using the “composite::minmax_per_element_operator” or\nevaluate_failure_criteria\nwhere the min/max layer indices\nare 1-based starting with Workbench 2024 R1 (DPF server 7.1).\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ns", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ns.html#ns", - "title": "ns", - "section": "ns", - "text": "ns" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ns", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ns.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.ns", - "title": "ns > ns > ns", - "section": "ns > ns", - "text": "FailureModeEnum.ns = 9998\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32.html#b32", - "title": "b32", - "section": "b32", - "text": "Out-of-plane shear friction coefficient. The default is 1.3805. The value depends on the fracture plane angle.\nfloat\nb32\n1.3805\nfloat" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32", - "title": "b32 > b32 > b32", - "section": "b32 > b32", - "text": "property CuntzeCriterion.b32: float\n\nOut-of-plane shear friction coefficient. The default is 1.3805. The value depends on the fracture plane angle.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cfc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cfc.html#cfc", - "title": "cfc", - "section": "cfc", - "text": "Activates the failure evaluation regarding compression in fiber direction.\nbool\ncfc\nbool" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cfc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cfc.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cfc", - "title": "cfc > cfc > cfc", - "section": "cfc > cfc", - "text": "property CuntzeCriterion.cfc: bool\n\nActivates the failure evaluation regarding compression in fiber direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.html#failureresult", - "title": "FailureResult", - "section": "FailureResult", - "text": "Provides the components of a failure result.\nFailureResult.mode\n\nFailureResult.inverse_reserve_factor\n\nFailureResult.safety_factor\n\nFailureResult.safety_margin\n\nFailureResult\nFailureResult.mode\nFailureResult.inverse_reserve_factor\nFailureResult.safety_factor\nFailureResult.safety_margin" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.html#ansys.dpf.composites.sampling_point.FailureResult", - "title": "FailureResult > FailureResult > FailureResult", - "section": "FailureResult > FailureResult", - "text": "class ansys.dpf.composites.sampling_point.FailureResult(mode, inverse_reserve_factor, safety_factor, safety_margin)\n\nProvides the components of a failure result.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nFailureResult.mode\n\n\n\nFailureResult.inverse_reserve_factor\n\n\n\nFailureResult.safety_factor\n\n\n\nFailureResult.safety_margin\n\n\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE_REF_SURFACE", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE_REF_SURFACE.html#failure_mode_ref_surface", - "title": "FAILURE_MODE_REF_SURFACE", - "section": "FAILURE_MODE_REF_SURFACE", - "text": "FAILURE_MODE_REF_SURFACE" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE_REF_SURFACE", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE_REF_SURFACE.html#ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE_REF_SURFACE", - "title": "FAILURE_MODE_REF_SURFACE > FAILURE_MODE_REF_SURFACE > FAILURE_MODE_REF_SURFACE", - "section": "FAILURE_MODE_REF_SURFACE > FAILURE_MODE_REF_SURFACE", - "text": "FailureOutput.FAILURE_MODE_REF_SURFACE = 3\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.rst", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.rst.html#rst", - "title": "rst", - "section": "rst", - "text": "rst" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.rst", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.rst.html#ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.rst", - "title": "rst > rst > rst", - "section": "rst > rst", - "text": "ShortFiberCompositesFiles.rst: list[str | PathLike[str]]\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2t.html#e2t", - "title": "e2t", - "section": "e2t", - "text": "e2t" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e2t", - "title": "e2t > e2t > e2t", - "section": "e2t > e2t", - "text": "FailureModeEnum.e2t = 121\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith.html#startswith", - "title": "startswith", - "section": "startswith", - "text": "Return True if the string starts with the specified prefix, False otherwise.\nA string or a tuple of strings to try.\nOptional start position. Default: start of the string.\nOptional stop position. Default: end of the string.\nstartswith" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.tw", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.tw.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.tw", + "title": "tw > tw > tw", + "section": "tw > tw", + "text": "FailureModeEnum.tw = 400\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith", - "title": "startswith > startswith > startswith", - "section": "startswith > startswith", - "text": "FailureMeasureEnum.startswith(prefix, [start, [end]], /)\n\nReturn True if the string starts with the specified prefix, False otherwise.\n\nprefix\n\nA string or a tuple of strings to try.\n\nstart\n\nOptional start position. Default: start of the string.\n\nend\n\nOptional stop position. Default: end of the string.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot.BOTTOM", + "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.BOTTOM.html#bottom", + "title": "BOTTOM", + "section": "BOTTOM", + "text": "BOTTOM" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.id", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.id.html#id", - "title": "id", - "section": "id", - "text": "id" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot.BOTTOM", + "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.BOTTOM.html#ansys.dpf.composites.constants.Spot.BOTTOM", + "title": "BOTTOM > BOTTOM > BOTTOM", + "section": "BOTTOM > BOTTOM", + "text": "Spot.BOTTOM = 1\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.id", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.id.html#ansys.dpf.composites.layup_info.ElementInfo.id", - "title": "id > id > id", - "section": "id > id", - "text": "ElementInfo.id: int\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.zfill", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.zfill.html#zfill", + "title": "zfill", + "section": "zfill", + "text": "Pad a numeric string with zeros on the left, to fill a field of the given width.\nThe string is never truncated.\nzfill" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1.html#s1", - "title": "s1", - "section": "s1", - "text": "s1" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.zfill", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.zfill.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.zfill", + "title": "zfill > zfill > zfill", + "section": "zfill > zfill", + "text": "FailureMeasureEnum.zfill(width, /)\n\nPad a numeric string with zeros on the left, to fill a field of the given width.\n\nThe string is never truncated.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s1", - "title": "s1 > s1 > s1", - "section": "s1 > s1", - "text": "FailureModeEnum.s1 = 210\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12.html#polar_properties_g12", + "title": "polar_properties_G12", + "section": "polar_properties_G12", + "text": "Polar property G12 of the laminate.\nndarray[Any, dtype[float64]]\npolar_properties_G12\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "Get the result definition in a dictionary representation.\ndict[str, Any]\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12.html#ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12", + "title": "polar_properties_G12 > polar_properties_G12 > polar_properties_G12", + "section": "polar_properties_G12 > polar_properties_G12", + "text": "property SamplingPoint.polar_properties_G12: ndarray[Any, dtype[float64]]\n\nPolar property G12 of the laminate.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_dict.html#ansys.dpf.composites.result_definition.ResultDefinition.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "ResultDefinition.to_dict()\n\nGet the result definition in a dictionary representation.\n\nReturn type\n\ndict[str, Any]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e13.html#e13", + "title": "e13", + "section": "e13", + "text": "Whether to activate the failure evaluation regarding the interlaminar shear strain e13.\nbool\ne13\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.html#cuntzecriterion", - "title": "CuntzeCriterion", - "section": "CuntzeCriterion", - "text": "Defines the Cuntze criterion for uni-directional orthotropic reinforced materials.\ncfc (bool, default: True) – Activates the failure evaluation regarding compression in fiber direction.\ncft (bool, default: True) – Activates the failure evaluation regarding tension in fiber direction.\ncma (bool, default: True) – Activates the failure evaluation of the matrix due to tension.\ncmb (bool, default: True) – Activates the failure evaluation of the matrix due to compression.\ncmc (bool, default: True) – Activates the failure evaluation of the matrix due to compression or shear.\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used.\nwf_cfc (float, default: 1.0) – Weighting factor of fiber failure due to compression (cfc).\nwf_cft (float, default: 1.0) – Weighting factor of fiber failure due to tension (cft).\nwf_cma (float, default: 1.0) – Weighting factor of matrix failure due to tension (cma).\nwf_cmb (float, default: 1.0) – Weighting factor of matrix failure due to compression (cmb).\nwf_cmc (float, default: 1.0) – Weighting factor of matrix failure due to compression or shear (cmc).\nb21 (float, default: 0.2) – In-plane shear friction coefficient. The default is 0.2.\nb32 (float, default: 1.3805) – Out-of-plane shear friction coefficient. The default is 1.3805. The value depends on the fracture plane angle.\nfracture_plane_angle (float, default: 53.0) – Fracture plane angle in degrees. The default is 53. The value must be greater than 45. The value depends on the out-of-plane shear friction coefficient.\nmode_interaction_coeff (float, default: 2.6) – Mode interaction coefficient. The default is 2.6.\nCuntzeCriterion.to_dict()\n\nCuntzeCriterion.to_json()\n\nCuntzeCriterion.active\nThe failure criterion is suppressed if active is False.\nCuntzeCriterion.b21\nIn-plane shear friction coefficient.\nCuntzeCriterion.b32\nOut-of-plane shear friction coefficient.\nCuntzeCriterion.cfc\nActivates the failure evaluation regarding compression in fiber direction.\nCuntzeCriterion.cft\nActivates the failure evaluation regarding tension in fiber direction.\nCuntzeCriterion.cma\nActivates the failure evaluation of the matrix due to tension.\nCuntzeCriterion.cmb\nActivates the failure evaluation of the matrix due to compression.\nCuntzeCriterion.cmc\nActivates the failure evaluation of the matrix due to compression or shear.\nCuntzeCriterion.dim\nWhether the 2D or 3D formulation of the criterion is used.\nCuntzeCriterion.fracture_plane_angle\nFracture plane angle in degrees.\nCuntzeCriterion.mode_interaction_coeff\nMode interaction coefficient.\nCuntzeCriterion.name\nName of the failure criterion.\nCuntzeCriterion.wf_cfc\nWeighting factor of fiber failure due to compression (cfc).\nCuntzeCriterion.wf_cft\nWeighting factor of fiber failure due to tension (cft).\nCuntzeCriterion.wf_cma\nWeighting factor of matrix failure due to tension (cma).\nCuntzeCriterion.wf_cmb\nWeighting factor of matrix failure due to compression (cmb).\nCuntzeCriterion.wf_cmc\nWeighting factor of matrix failure due to compression or shear (cmc).\nCuntzeCriterion\nbool\nTrue\nbool\nTrue\nbool\nTrue\nbool\nTrue\nbool\nTrue\nint\n2\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n0.2\n0.2\nfloat\n1.3805\n1.3805\nfloat\n53.0\n53\nfloat\n2.6\n2.6\nCuntzeCriterion.to_dict\nCuntzeCriterion.to_json\nCuntzeCriterion.active\nCuntzeCriterion.b21\nCuntzeCriterion.b32\nCuntzeCriterion.cfc\nCuntzeCriterion.cft\nCuntzeCriterion.cma\nCuntzeCriterion.cmb\nCuntzeCriterion.cmc\nCuntzeCriterion.dim\nCuntzeCriterion.fracture_plane_angle\nCuntzeCriterion.mode_interaction_coeff\nCuntzeCriterion.name\nCuntzeCriterion.wf_cfc\nCuntzeCriterion.wf_cft\nCuntzeCriterion.wf_cma\nCuntzeCriterion.wf_cmb\nCuntzeCriterion.wf_cmc" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e13.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e13", + "title": "e13 > e13 > e13", + "section": "e13 > e13", + "text": "property MaxStrainCriterion.e13: bool\n\nWhether to activate the failure evaluation regarding the interlaminar shear strain e13.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion", - "title": "CuntzeCriterion > CuntzeCriterion > CuntzeCriterion", - "section": "CuntzeCriterion > CuntzeCriterion", - "text": "class ansys.dpf.composites.failure_criteria.CuntzeCriterion(*, cfc=True, cft=True, cma=True, cmb=True, cmc=True, dim=2, wf_cfc=1.0, wf_cft=1.0, wf_cma=1.0, wf_cmb=1.0, wf_cmc=1.0, b21=0.2, b32=1.3805, fracture_plane_angle=53.0, mode_interaction_coeff=2.6)\n\nDefines the Cuntze criterion for uni-directional orthotropic reinforced materials.\n\nParameters\n\ncfc (bool, default: True) – Activates the failure evaluation regarding compression in fiber direction.\n\ncft (bool, default: True) – Activates the failure evaluation regarding tension in fiber direction.\n\ncma (bool, default: True) – Activates the failure evaluation of the matrix due to tension.\n\ncmb (bool, default: True) – Activates the failure evaluation of the matrix due to compression.\n\ncmc (bool, default: True) – Activates the failure evaluation of the matrix due to compression or shear.\n\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used.\n\nwf_cfc (float, default: 1.0) – Weighting factor of fiber failure due to compression (cfc).\n\nwf_cft (float, default: 1.0) – Weighting factor of fiber failure due to tension (cft).\n\nwf_cma (float, default: 1.0) – Weighting factor of matrix failure due to tension (cma).\n\nwf_cmb (float, default: 1.0) – Weighting factor of matrix failure due to compression (cmb).\n\nwf_cmc (float, default: 1.0) – Weighting factor of matrix failure due to compression or shear (cmc).\n\nb21 (float, default: 0.2) – In-plane shear friction coefficient. The default is 0.2.\n\nb32 (float, default: 1.3805) – Out-of-plane shear friction coefficient. The default is 1.3805. The value depends on the fracture plane angle.\n\nfracture_plane_angle (float, default: 53.0) – Fracture plane angle in degrees. The default is 53. The value must be greater than 45. The value depends on the out-of-plane shear friction coefficient.\n\nmode_interaction_coeff (float, default: 2.6) – Mode interaction coefficient. The default is 2.6.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nCuntzeCriterion.to_dict()\n\n\n\nCuntzeCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nCuntzeCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nCuntzeCriterion.b21\n\nIn-plane shear friction coefficient.\n\nCuntzeCriterion.b32\n\nOut-of-plane shear friction coefficient.\n\nCuntzeCriterion.cfc\n\nActivates the failure evaluation regarding compression in fiber direction.\n\nCuntzeCriterion.cft\n\nActivates the failure evaluation regarding tension in fiber direction.\n\nCuntzeCriterion.cma\n\nActivates the failure evaluation of the matrix due to tension.\n\nCuntzeCriterion.cmb\n\nActivates the failure evaluation of the matrix due to compression.\n\nCuntzeCriterion.cmc\n\nActivates the failure evaluation of the matrix due to compression or shear.\n\nCuntzeCriterion.dim\n\nWhether the 2D or 3D formulation of the criterion is used.\n\nCuntzeCriterion.fracture_plane_angle\n\nFracture plane angle in degrees.\n\nCuntzeCriterion.mode_interaction_coeff\n\nMode interaction coefficient.\n\nCuntzeCriterion.name\n\nName of the failure criterion.\n\nCuntzeCriterion.wf_cfc\n\nWeighting factor of fiber failure due to compression (cfc).\n\nCuntzeCriterion.wf_cft\n\nWeighting factor of fiber failure due to tension (cft).\n\nCuntzeCriterion.wf_cma\n\nWeighting factor of matrix failure due to tension (cma).\n\nCuntzeCriterion.wf_cmb\n\nWeighting factor of matrix failure due to compression (cmb).\n\nCuntzeCriterion.wf_cmc\n\nWeighting factor of matrix failure due to compression or shear (cmc).\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc.html#strain_limits_ezc", + "title": "Strain_Limits_eZc", + "section": "Strain_Limits_eZc", + "text": "Strain_Limits_eZc" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.count", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.count.html#count", - "title": "count", - "section": "count", - "text": "Return the number of non-overlapping occurrences of substring sub in string S[start:end].\nOptional arguments start and end are interpreted as in slice notation.\ncount" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc", + "title": "Strain_Limits_eZc > Strain_Limits_eZc > Strain_Limits_eZc", + "section": "Strain_Limits_eZc > Strain_Limits_eZc", + "text": "MaterialProperty.Strain_Limits_eZc: str = 'strain_compressive_z_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.count", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.count.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.count", - "title": "count > count > count", - "section": "count > count", - "text": "FailureMeasureEnum.count(sub, [start, [end]], /)\n\nReturn the number of non-overlapping occurrences of substring sub in string S[start:end].\n\nOptional arguments start and end are interpreted as in slice notation.\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/002_sampling_point_example", + "href": "examples/gallery_examples/002_sampling_point_example.html#sampling-point", + "title": "Sampling point", + "section": "Sampling point", + "text": "This example extracts ply-wise laminate properties and results.\nThe Sampling Point class is used to extract\nthrough-the-thickness data of the laminate, such as ply-wise properties,\nstrains and stresses. It then implements basic visualization to plot\nthe laminate.\nThis example uses the Composite Model to scope a\nSampling Point to a certain element and to visualize the laminate.\nWhen using a Workbench project,\nuse the get_composite_files_from_workbench_result_folder()\nmethod to obtain the input files.\nSampling point\nSampling Point\nComposite Model\nget_composite_files_from_workbench_result_folder()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles.html#get_layer_angles", - "title": "get_layer_angles", - "section": "get_layer_angles", - "text": "Get angles for all layers. Returns None if element is not layered.\nelement_id (int) – Element Id/Label\nOptional[ndarray[Any, dtype[float64]]]\nget_layer_angles\nint\nOptional\nndarray\nAny\ndtype\nfloat64" + "objectID": "examples/gallery_examples/002_sampling_point_example", + "href": "examples/gallery_examples/002_sampling_point_example.html#set-up-analysis", + "title": "Sampling point > Set up analysis", + "section": "Set up analysis", + "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nConfigure the combined failure criterion\nSet up analysis" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles", - "title": "get_layer_angles > get_layer_angles > get_layer_angles", - "section": "get_layer_angles > get_layer_angles", - "text": "LayupPropertiesProvider.get_layer_angles(element_id)\n\nGet angles for all layers. Returns None if element is not layered.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[ndarray[Any, dtype[float64]]]\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/002_sampling_point_example", + "href": "examples/gallery_examples/002_sampling_point_example.html#set-up-model-and-create-sampling-point", + "title": "Sampling point > Set up model and create sampling point", + "section": "Set up model and create sampling point", + "text": "Set up the composite model.\nCreate a sampling point\nSet up model and create sampling point" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "examples/gallery_examples/002_sampling_point_example", + "href": "examples/gallery_examples/002_sampling_point_example.html#plot-results", + "title": "Sampling point > Plot results", + "section": "Plot results", + "text": "Plot results uing preconfigured plots. For more information, see the\nSamplingPoint.get_result_plots() method.\nPlot polar properties.\nGenerate custom plots. You can customize existing plots or build\nthem from scratch using a package like Matplot or Plotly. This code\nuses Matplotlib to generate a custom plot of results s13 and s23.\nThis code uses Matplotlib to generate a custom plot of results e12 and e2.\nThis code plots the lay-up only.\nPlot results\nSamplingPoint.get_result_plots()\ns13\ns23\ne12\ne2" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property TsaiWuCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/002_sampling_point_example", + "href": "examples/gallery_examples/002_sampling_point_example.html#sample-another-element", + "title": "Sampling point > Sample another element", + "section": "Sample another element", + "text": "You can change the element ID of the sampling point to generate another plot.\nTotal running time of the script: (0 minutes 5.257 seconds)\nDownload Jupyter notebook: 002_sampling_point_example.ipynb\nDownload Python source code: 002_sampling_point_example.py\nDownload zipped: 002_sampling_point_example.zip\nGallery generated by Sphinx-Gallery\nSample another element\nDownload Jupyter notebook: 002_sampling_point_example.ipynb\nDownload Python source code: 002_sampling_point_example.py\nDownload zipped: 002_sampling_point_example.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e1.html#wf_e1", - "title": "wf_e1", - "section": "wf_e1", - "text": "Weighting factor of the failure mode e1.\nfloat\nwf_e1\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices", + "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices.html#get_selected_indices", + "title": "get_selected_indices", + "section": "get_selected_indices", + "text": "Get elementary indices based on element information, layers, nodes, and spots.\nelement_info (ElementInfo) – Lay-up information for the element.\nlayers (Optional[Collection[int]], default: None) – List of selected layers.\nnodes (Optional[Collection[int]], default: None) – List of selected corner nodes.\nspots (Optional[Collection[Spot]], default: None) – List of selected spots.\ndisable_checks (bool, default: False) – Whether to disable checks. Set to True to disable checks.\nDisabling checks results in better performance but potentially\ncryptic error messages or invalid indices.\nArray of selected indices.\nNDArray\nReturns an empty selection if any of the collections is empty.\nThe indices (nodes, layers, and spots) are 0-based. Pay attention to this\nwhen using the “composite::minmax_per_element_operator” or\nevaluate_failure_criteria\nwhere the min/max layer indices\nare 1-based starting with Workbench 2024 R1 (DPF server 7.1).\nget_selected_indices\nElementInfo\nOptional\nCollection\nint\nNone\nOptional\nCollection\nint\nNone\nOptional\nCollection\nSpot\nNone\nbool\nFalse\nTrue\nevaluate_failure_criteria" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e1.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e1", - "title": "wf_e1 > wf_e1 > wf_e1", - "section": "wf_e1 > wf_e1", - "text": "property MaxStrainCriterion.wf_e1: float\n\nWeighting factor of the failure mode e1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices", + "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices.html#ansys.dpf.composites.select_indices.get_selected_indices", + "title": "get_selected_indices > get_selected_indices > get_selected_indices", + "section": "get_selected_indices > get_selected_indices", + "text": "ansys.dpf.composites.select_indices.get_selected_indices(element_info, layers=None, nodes=None, spots=None, disable_checks=False)\n\nGet elementary indices based on element information, layers, nodes, and spots.\n\nParameters\n\nelement_info (ElementInfo) – Lay-up information for the element.\n\nlayers (Optional[Collection[int]], default: None) – List of selected layers.\n\nnodes (Optional[Collection[int]], default: None) – List of selected corner nodes.\n\nspots (Optional[Collection[Spot]], default: None) – List of selected spots.\n\ndisable_checks (bool, default: False) – Whether to disable checks. Set to True to disable checks.\nDisabling checks results in better performance but potentially\ncryptic error messages or invalid indices.\n\nReturns\n\nArray of selected indices.\n\nReturn type\n\nNDArray\n\nNotes\n\nReturns an empty selection if any of the collections is empty.\n\nThe indices (nodes, layers, and spots) are 0-based. Pay attention to this\nwhen using the “composite::minmax_per_element_operator” or\nevaluate_failure_criteria\nwhere the min/max layer indices\nare 1-based starting with Workbench 2024 R1 (DPF server 7.1).\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format.html#format", - "title": "format", - "section": "format", - "text": "Return a formatted version of the string, using substitutions from args and kwargs.\nThe substitutions are identified by braces (‘{’ and ‘}’).\nformat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.format", - "title": "format > format > format", - "section": "format > format", - "text": "FailureMeasureEnum.format(*args, **kwargs)\n\nReturn a formatted version of the string, using substitutions from args and kwargs.\nThe substitutions are identified by braces (‘{’ and ‘}’).\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "LaRCCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot.MIDDLE", + "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.MIDDLE.html#middle", + "title": "MIDDLE", + "section": "MIDDLE", + "text": "MIDDLE" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.active.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property ShearCrimpingCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot.MIDDLE", + "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.MIDDLE.html#ansys.dpf.composites.constants.Spot.MIDDLE", + "title": "MIDDLE > MIDDLE > MIDDLE", + "section": "MIDDLE > MIDDLE", + "text": "Spot.MIDDLE = 2\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e23.html#wf_e23", - "title": "wf_e23", - "section": "wf_e23", - "text": "Weighting factor of the failure mode e23.\nfloat\nwf_e23\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "Get the result definition in a dictionary representation.\ndict[str, Any]\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e23.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e23", - "title": "wf_e23 > wf_e23 > wf_e23", - "section": "wf_e23 > wf_e23", - "text": "property MaxStrainCriterion.wf_e23: float\n\nWeighting factor of the failure mode e23.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_dict.html#ansys.dpf.composites.result_definition.ResultDefinition.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "ResultDefinition.to_dict()\n\nGet the result definition in a dictionary representation.\n\nReturn type\n\ndict[str, Any]\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", - "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#dpf-composite-failure-workflow", - "title": "DPF composite failure workflow", - "section": "DPF composite failure workflow", - "text": "This example shows how to use the native DPF Python interface to configure\nand run the composite failure evaluator. It connects the different DPF\noperators that are needed to evaluate composite failure criteria.\nFor simple use cases, using the composite failure operator or\ncomposite sampling point operator is preferable. For examples,\nsee sphx_glr_examples_gallery_examples_001_failure_operator_example.py\nand sphx_glr_examples_gallery_examples_002_sampling_point_example.py.\nAdditionally, sphx_glr_examples_gallery_examples_006_filter_composite_data_example.py\nshows how helper functions can be used to obtain composite result data.\nDPF composite failure workflow" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pd", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pd.html#pd", + "title": "pd", + "section": "pd", + "text": "pd" }, { - "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", - "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#set-up-analysis", - "title": "DPF composite failure workflow > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of loading Ansys libraries, configuring\nthe combined failure criterion, connecting to the DPF server, and\npreparing files.\nLoad Ansys libraries.\nConfigure the combined failure criterion.\nStart a DPF server and prepare files\nSet up analysis" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pd", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pd.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.pd", + "title": "pd > pd > pd", + "section": "pd > pd", + "text": "FailureModeEnum.pd = 805\n\n" }, { - "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", - "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#initialize-dpf-model-and-data-sources", - "title": "DPF composite failure workflow > Initialize DPF model and data sources", - "section": "Initialize DPF model and data sources", - "text": "Initialize the DPF model and the data sources.\nInitialize DPF model and data sources" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", - "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#set-up-providers", - "title": "DPF composite failure workflow > Set up providers", - "section": "Set up providers", - "text": "Set up the mesh provider.\nSet up the material support provider.\nThe material support provider takes care of mapping the materials in the RST file to\nthe materials in the composite definitions.\nThe material support contains all materials from the RST file.\nSet up the result information provider, which gets\nthe unit system from the RST file.\nSet up the material provider\nThe material provider combines the material support in the engineering data\nXML file and the unit system. Its output can be used to evaluate material\nproperties.\nSet up the lay-up provider, which reads the composite definition file\nand enriches the mesh with the composite lay-up information.\nSet up providers" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.name.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property TsaiHillCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", - "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#set-up-result-operators", - "title": "DPF composite failure workflow > Set up result operators", - "section": "Set up result operators", - "text": "Set up result operators for strains and stresses.\nrotate_to_global is False because the postprocessing engine expects the\nresults to be in the element coordinate system (material coordinate system).\nSet up result operators\nrotate_to_global\nFalse" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_corner_nodes", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_corner_nodes.html#n_corner_nodes", + "title": "n_corner_nodes", + "section": "n_corner_nodes", + "text": "n_corner_nodes" }, { - "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", - "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#set-up-failure-evaluator", - "title": "DPF composite failure workflow > Set up failure evaluator", - "section": "Set up failure evaluator", - "text": "Set up the failure evaluator, which combines the results and\nevaluates all failure criteria. The output contains the\nmaximum failure criteria for each integration point.\nSet up failure evaluator" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_corner_nodes", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_corner_nodes.html#ansys.dpf.composites.layup_info.ElementInfo.n_corner_nodes", + "title": "n_corner_nodes > n_corner_nodes > n_corner_nodes", + "section": "n_corner_nodes > n_corner_nodes", + "text": "ElementInfo.n_corner_nodes: int\n\n" }, { - "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", - "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#compute-and-plot-failure-criteria", - "title": "DPF composite failure workflow > Compute and plot failure criteria", - "section": "Compute and plot failure criteria", - "text": "Use the output of the multiple failure criteria operator to\ncompute the minimum and maximum failure criteria for each element.\nPlot the maximum and minimum values.\nTotal running time of the script: (0 minutes 6.789 seconds)\nDownload Jupyter notebook: 099_dpf_composite_failure_workflow.ipynb\nDownload Python source code: 099_dpf_composite_failure_workflow.py\nDownload zipped: 099_dpf_composite_failure_workflow.zip\nGallery generated by Sphinx-Gallery\nCompute and plot failure criteria\nDownload Jupyter notebook: 099_dpf_composite_failure_workflow.ipynb\nDownload Python source code: 099_dpf_composite_failure_workflow.py\nDownload zipped: 099_dpf_composite_failure_workflow.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff.html#homogeneous_core_coeff", + "title": "homogeneous_core_coeff", + "section": "homogeneous_core_coeff", + "text": "Wrinkling coefficient (reduction factor) for homogeneous core materials.\nfloat\nhomogeneous_core_coeff\nfloat" }, { - "objectID": "sg_execution_times", - "href": "sg_execution_times.html#computation-times", - "title": "Computation times", - "section": "Computation times", - "text": "01:50.653 total execution time for 15 files from all galleries:\nExample\nTime\nMem (MB)\nsphx_glr_examples_gallery_examples_001_failure_operator_example.py (../../examples/001_failure_operator_example.py)\n00:19.408\n0.0\nsphx_glr_examples_gallery_examples_010_harmonic_example.py (../../examples/010_harmonic_example.py)\n00:13.998\n0.0\nsphx_glr_examples_gallery_examples_011_rst_workflow.py (../../examples/011_rst_workflow.py)\n00:08.430\n0.0\nsphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py (../../examples/014_cyclic_symmetry_example.py)\n00:08.047\n0.0\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py (../../examples/007_interlaminar_normal_stress_example.py)\n00:07.872\n0.0\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py (../../examples/002_sampling_point_example.py)\n00:07.682\n0.0\nsphx_glr_examples_gallery_examples_008_assembly_example.py (../../examples/008_assembly_example.py)\n00:06.821\n0.0\nsphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py (../../examples/099_dpf_composite_failure_workflow.py)\n00:06.789\n0.0\nsphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py (../../examples/009_short_fiber_orientation_tensor.py)\n00:06.511\n0.0\nsphx_glr_examples_gallery_examples_013_thermal_example.py (../../examples/013_thermal_example.py)\n00:05.676\n0.0\nsphx_glr_examples_gallery_examples_004_get_material_properties_example.py (../../examples/004_get_material_properties_example.py)\n00:04.845\n0.0\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py (../../examples/006_filter_composite_data_example.py)\n00:04.640\n0.0\nsphx_glr_examples_gallery_examples_012_fatigue_example.py (../../examples/012_fatigue_example.py)\n00:04.346\n0.0\nsphx_glr_examples_gallery_examples_003_short_fiber_example.py (../../examples/003_short_fiber_example.py)\n00:03.949\n0.0\nsphx_glr_examples_gallery_examples_005_get_layup_properties_example.py (../../examples/005_get_layup_properties_example.py)\n00:01.638\n0.0\nComputation times\n../../examples/001_failure_operator_example.py\n../../examples/010_harmonic_example.py\n../../examples/011_rst_workflow.py\n../../examples/014_cyclic_symmetry_example.py\n../../examples/007_interlaminar_normal_stress_example.py\n../../examples/002_sampling_point_example.py\n../../examples/008_assembly_example.py\n../../examples/099_dpf_composite_failure_workflow.py\n../../examples/009_short_fiber_orientation_tensor.py\n../../examples/013_thermal_example.py\n../../examples/004_get_material_properties_example.py\n../../examples/006_filter_composite_data_example.py\n../../examples/012_fatigue_example.py\n../../examples/003_short_fiber_example.py\n../../examples/005_get_layup_properties_example.py" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff", + "title": "homogeneous_core_coeff > homogeneous_core_coeff > homogeneous_core_coeff", + "section": "homogeneous_core_coeff > homogeneous_core_coeff", + "text": "property FaceSheetWrinklingCriterion.homogeneous_core_coeff: float\n\nWrinkling coefficient (reduction factor) for homogeneous core materials.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.casefold", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.casefold.html#casefold", - "title": "casefold", - "section": "casefold", - "text": "Return a version of the string suitable for caseless comparisons.\ncasefold" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cfc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cfc.html#cfc", + "title": "cfc", + "section": "cfc", + "text": "cfc" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.casefold", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.casefold.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.casefold", - "title": "casefold > casefold > casefold", - "section": "casefold > casefold", - "text": "FailureMeasureEnum.casefold(/)\n\nReturn a version of the string suitable for caseless comparisons.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cfc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cfc.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cfc", + "title": "cfc > cfc > cfc", + "section": "cfc > cfc", + "text": "FailureModeEnum.cfc = 1002\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rjust", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rjust.html#rjust", - "title": "rjust", - "section": "rjust", - "text": "Return a right-justified string of length width.\nPadding is done using the specified fill character (default is a space).\nrjust" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc2.html#lmc2", + "title": "lmc2", + "section": "lmc2", + "text": "lmc2" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rjust", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rjust.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rjust", - "title": "rjust > rjust > rjust", - "section": "rjust > rjust", - "text": "FailureMeasureEnum.rjust(width, fillchar=' ', /)\n\nReturn a right-justified string of length width.\n\nPadding is done using the specified fill character (default is a space).\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc2.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc2", + "title": "lmc2 > lmc2 > lmc2", + "section": "lmc2 > lmc2", + "text": "FailureModeEnum.lmc2 = 905\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.get_element_info", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.get_element_info.html#get_element_info", + "title": "get_element_info", + "section": "get_element_info", + "text": "Get ElementInfo for a given element id.\nelement_id (int) – Element Id/Label\nReturns None if element type is not supported\nOptional[ElementInfo]\nget_element_info\nElementInfo\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.analysis_plies", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.analysis_plies.html#analysis_plies", - "title": "analysis_plies", - "section": "analysis_plies", - "text": "List of analysis plies from the bottom to the top.\nThis attribute returns a list of ply data, such as angle, thickness and material name,\nas a dictionary.\nSequence[Any]\nanalysis_plies\nSequence\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.get_element_info", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.get_element_info.html#ansys.dpf.composites.layup_info.ElementInfoProvider.get_element_info", + "title": "get_element_info > get_element_info > get_element_info", + "section": "get_element_info > get_element_info", + "text": "ElementInfoProvider.get_element_info(element_id)\n\nGet ElementInfo for a given element id.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturns\n\nReturns None if element type is not supported\n\nReturn type\n\nOptional[ElementInfo]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.analysis_plies", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.analysis_plies.html#ansys.dpf.composites.sampling_point.SamplingPoint.analysis_plies", - "title": "analysis_plies > analysis_plies > analysis_plies", - "section": "analysis_plies > analysis_plies", - "text": "property SamplingPoint.analysis_plies: Sequence[Any]\n\nList of analysis plies from the bottom to the top.\n\nThis attribute returns a list of ply data, such as angle, thickness and material name,\nas a dictionary.\n\nReturn type\n\nSequence[Any]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.af", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.af.html#af", + "title": "af", + "section": "af", + "text": "af" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.check_has_single_scope", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.check_has_single_scope.html#check_has_single_scope", - "title": "check_has_single_scope", - "section": "check_has_single_scope", - "text": "Check that the result definition has one scope.\nNone\ncheck_has_single_scope\nNone" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.af", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.af.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.af", + "title": "af > af > af", + "section": "af > af", + "text": "FailureModeEnum.af = 1203\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.check_has_single_scope", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.check_has_single_scope.html#ansys.dpf.composites.result_definition.ResultDefinition.check_has_single_scope", - "title": "check_has_single_scope > check_has_single_scope > check_has_single_scope", - "section": "check_has_single_scope > check_has_single_scope", - "text": "ResultDefinition.check_has_single_scope(msg)\n\nCheck that the result definition has one scope.\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s13.html#s13", + "title": "s13", + "section": "s13", + "text": "s13" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E3", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E3.html#engineering_constants_e3", - "title": "Engineering_Constants_E3", - "section": "Engineering_Constants_E3", - "text": "Engineering_Constants_E3" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s13.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s13", + "title": "s13 > s13 > s13", + "section": "s13 > s13", + "text": "FailureModeEnum.s13 = 250\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E3", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E3.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E3", - "title": "Engineering_Constants_E3 > Engineering_Constants_E3 > Engineering_Constants_E3", - "section": "Engineering_Constants_E3 > Engineering_Constants_E3", - "text": "MaterialProperty.Engineering_Constants_E3: str = 'young_modulus_z_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope", + "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.html#compositescope", + "title": "CompositeScope", + "section": "CompositeScope", + "text": "Provides the composite scope.\nThis class defines which part of the model and solution step are selected.\nelements (collections.abc.Sequence[int] | None) – List of elements.\nplies (collections.abc.Sequence[str] | None) – List of plies.\ntime (float | None) – Time or frequency. You can use the\nCompositeModel.get_result_times_or_frequencies() method\nto list the solution steps.\nnamed_selections (collections.abc.Sequence[str] | None) – List of element sets.\nUse composite_model.get_mesh().available_named_selections to list\nall named selections.\nIf more than one scope (elements, named_selections and plies)\nis set, then the final element scope is the intersection\nof the defined parameters. All elements are selected if no parameter is set.\nCompositeScope.elements\n\nCompositeScope.named_selections\n\nCompositeScope.plies\n\nCompositeScope.time\n\nCompositeScope\nCompositeModel.get_result_times_or_frequencies()\nelements\nnamed_selections\nplies\nCompositeScope.elements\nCompositeScope.named_selections\nCompositeScope.plies\nCompositeScope.time" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope", + "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.html#ansys.dpf.composites.composite_scope.CompositeScope", + "title": "CompositeScope > CompositeScope > CompositeScope", + "section": "CompositeScope > CompositeScope", + "text": "class ansys.dpf.composites.composite_scope.CompositeScope(elements=None, plies=None, time=None, named_selections=None)\n\nProvides the composite scope.\n\nThis class defines which part of the model and solution step are selected.\n\nParameters\n\nelements (collections.abc.Sequence[int] | None) – List of elements.\n\nplies (collections.abc.Sequence[str] | None) – List of plies.\n\ntime (float | None) – Time or frequency. You can use the\nCompositeModel.get_result_times_or_frequencies() method\nto list the solution steps.\n\nnamed_selections (collections.abc.Sequence[str] | None) – List of element sets.\nUse composite_model.get_mesh().available_named_selections to list\nall named selections.\n\nNotes\n\nIf more than one scope (elements, named_selections and plies)\nis set, then the final element scope is the intersection\nof the defined parameters. All elements are selected if no parameter is set.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nCompositeScope.elements\n\n\n\nCompositeScope.named_selections\n\n\n\nCompositeScope.plies\n\n\n\nCompositeScope.time\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.name.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property CuntzeCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2t.html#e2t", + "title": "e2t", + "section": "e2t", + "text": "e2t" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff.html#homogeneous_core_coeff", - "title": "homogeneous_core_coeff", - "section": "homogeneous_core_coeff", - "text": "Wrinkling coefficient (reduction factor) for homogeneous core materials.\nfloat\nhomogeneous_core_coeff\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e2t", + "title": "e2t > e2t > e2t", + "section": "e2t > e2t", + "text": "FailureModeEnum.e2t = 121\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff", - "title": "homogeneous_core_coeff > homogeneous_core_coeff > homogeneous_core_coeff", - "section": "homogeneous_core_coeff > homogeneous_core_coeff", - "text": "property FaceSheetWrinklingCriterion.homogeneous_core_coeff: float\n\nWrinkling coefficient (reduction factor) for homogeneous core materials.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/007_interlaminar_normal_stress_example", + "href": "examples/gallery_examples/007_interlaminar_normal_stress_example.html#interlaminar-normal-stresses", + "title": "Interlaminar normal stresses", + "section": "Interlaminar normal stresses", + "text": "This example shows how to enrich the stresses of layered shells by\ncomputing interlaminar normal stresses. Interlaminar normal\nstresses can be important in thick and curved laminates.\nBecause interlaminar normal stresses are typically not available\nfor layered shell elements, the INS operator is used to recompute\nthe s3 result based on the laminate strains, the geometrical\ncurvature, and the lay-up.\nFor simple use cases, using the composite failure operator or\ncomposite sampling point operator is preferable. For examples,\nsee sphx_glr_examples_gallery_examples_001_failure_operator_example.py\nand sphx_glr_examples_gallery_examples_002_sampling_point_example.py.\nIn these workflows, interlaminar normal stresses are computed automatically\nif required, such as if a 3D failure criterion is activated. Additionally,\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py\nshows how helper functions can be used to obtain composite result data.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nInterlaminar normal stresses\nINS\ns3\ncomposite_files_from_workbench_harmonic_analysis()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz.html#esxz", - "title": "eSxz", - "section": "eSxz", - "text": "Global strain limit in material direction 13.\nfloat\neSxz\nfloat" + "objectID": "examples/gallery_examples/007_interlaminar_normal_stress_example", + "href": "examples/gallery_examples/007_interlaminar_normal_stress_example.html#set-up-analysis", + "title": "Interlaminar normal stresses > Set up analysis", + "section": "Set up analysis", + "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nSet up analysis" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz", - "title": "eSxz > eSxz > eSxz", - "section": "eSxz > eSxz", - "text": "property MaxStrainCriterion.eSxz: float\n\nGlobal strain limit in material direction 13.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/007_interlaminar_normal_stress_example", + "href": "examples/gallery_examples/007_interlaminar_normal_stress_example.html#set-up-model-and-prepare-inputs", + "title": "Interlaminar normal stresses > Set up model and prepare inputs", + "section": "Set up model and prepare inputs", + "text": "Set up the composite model.\nPrepare the inputs for the INS operator.\nrotate_to_global is False because the postprocessing engine expects\nthe results to be in the element coordinate system (material coordinate system).\nSet up model and prepare inputs\nrotate_to_global\nFalse" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc4", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc4.html#lfc4", - "title": "lfc4", - "section": "lfc4", - "text": "lfc4" + "objectID": "examples/gallery_examples/007_interlaminar_normal_stress_example", + "href": "examples/gallery_examples/007_interlaminar_normal_stress_example.html#compute-interlaminar-normal-stresses", + "title": "Interlaminar normal stresses > Compute interlaminar normal stresses", + "section": "Compute interlaminar normal stresses", + "text": "Compute the interlaminar normal stresses.\nThe INS operator stores the stresses in the provided stress field.\nCompute interlaminar normal stresses\nINS" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc4", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc4.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc4", - "title": "lfc4 > lfc4 > lfc4", - "section": "lfc4 > lfc4", - "text": "FailureModeEnum.lfc4 = 902\n\n" + "objectID": "examples/gallery_examples/007_interlaminar_normal_stress_example", + "href": "examples/gallery_examples/007_interlaminar_normal_stress_example.html#plot-s3-stresses", + "title": "Interlaminar normal stresses > Plot s3 stresses", + "section": "Plot s3 stresses", + "text": "Get the first stress field.\nPlot the maximum s3 of each element.\nPlot s3 at the mid-plane of a certain ply.\nTotal running time of the script: (0 minutes 7.215 seconds)\nDownload Jupyter notebook: 007_interlaminar_normal_stress_example.ipynb\nDownload Python source code: 007_interlaminar_normal_stress_example.py\nDownload zipped: 007_interlaminar_normal_stress_example.zip\nGallery generated by Sphinx-Gallery\nPlot s3 stresses\nDownload Jupyter notebook: 007_interlaminar_normal_stress_example.ipynb\nDownload Python source code: 007_interlaminar_normal_stress_example.py\nDownload zipped: 007_interlaminar_normal_stress_example.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.combined_failure_criterion", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.combined_failure_criterion.html#combined_failure_criterion", - "title": "combined_failure_criterion", - "section": "combined_failure_criterion", - "text": "Configuration of the failure criteria such as maximum stress, puck, and wrinkling.\nCombinedFailureCriterion\ncombined_failure_criterion\nCombinedFailureCriterion" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.html#layerproperty", + "title": "LayerProperty", + "section": "LayerProperty", + "text": "Provides the layer properties available.\nLayerProperty.THICKNESSES\n\nLayerProperty.ANGLES\n\nLayerProperty.SHEAR_ANGLES\n\nLayerProperty\nLayerProperty.THICKNESSES\nLayerProperty.ANGLES\nLayerProperty.SHEAR_ANGLES" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.combined_failure_criterion", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.combined_failure_criterion.html#ansys.dpf.composites.result_definition.ResultDefinition.combined_failure_criterion", - "title": "combined_failure_criterion > combined_failure_criterion > combined_failure_criterion", - "section": "combined_failure_criterion > combined_failure_criterion", - "text": "property ResultDefinition.combined_failure_criterion: CombinedFailureCriterion\n\nConfiguration of the failure criteria such as maximum stress, puck, and wrinkling.\n\nReturn type\n\nCombinedFailureCriterion\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.html#ansys.dpf.composites.layup_info.LayerProperty", + "title": "LayerProperty > LayerProperty > LayerProperty", + "section": "LayerProperty > LayerProperty", + "text": "class ansys.dpf.composites.layup_info.LayerProperty(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides the layer properties available.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nLayerProperty.THICKNESSES\n\n\n\nLayerProperty.ANGLES\n\n\n\nLayerProperty.SHEAR_ANGLES\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.material_file", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.material_file.html#material_file", - "title": "material_file", - "section": "material_file", - "text": "Path of the material files that store the material properties.\nSupported formats are XML and ENGD.\nUnion[str, PathLike[str]]\nmaterial_file\nUnion\nstr\nPathLike\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active.html#active", + "title": "active", + "section": "active", + "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.material_file", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.material_file.html#ansys.dpf.composites.result_definition.ResultDefinition.material_file", - "title": "material_file > material_file > material_file", - "section": "material_file > material_file", - "text": "property ResultDefinition.material_file: str | PathLike[str]\n\nPath of the material files that store the material properties.\n\nSupported formats are XML and ENGD.\n\nReturn type\n\nUnion[str, PathLike[str]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property TsaiWuCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.html#tsaiwucriterion", - "title": "TsaiWuCriterion", - "section": "TsaiWuCriterion", - "text": "Defines the Tsai-Wu failure criterion for orthotropic reinforced materials.\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\nTsaiWuCriterion.to_dict()\n\nTsaiWuCriterion.to_json()\n\nTsaiWuCriterion.active\nThe failure criterion is suppressed if active is False.\nTsaiWuCriterion.dim\nSpecifies which formulation of the failure criterion is used.\nTsaiWuCriterion.name\nName of the failure criterion.\nTsaiWuCriterion.wf\nWeighting factor of this failure criterion.\nTsaiWuCriterion\nfloat\n1.0\nint\n2\nTsaiWuCriterion.to_dict\nTsaiWuCriterion.to_json\nTsaiWuCriterion.active\nTsaiWuCriterion.dim\nTsaiWuCriterion.name\nTsaiWuCriterion.wf" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids.html#get_all_layered_element_ids", + "title": "get_all_layered_element_ids", + "section": "get_all_layered_element_ids", + "text": "Get all element IDs with lay-up data.\nSequence[int]\nget_all_layered_element_ids\nSequence\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion", - "title": "TsaiWuCriterion > TsaiWuCriterion > TsaiWuCriterion", - "section": "TsaiWuCriterion > TsaiWuCriterion", - "text": "class ansys.dpf.composites.failure_criteria.TsaiWuCriterion(*, active=True, wf=1.0, dim=2)\n\nDefines the Tsai-Wu failure criterion for orthotropic reinforced materials.\n\nParameters\n\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\n\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nTsaiWuCriterion.to_dict()\n\n\n\nTsaiWuCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nTsaiWuCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nTsaiWuCriterion.dim\n\nSpecifies which formulation of the failure criterion is used.\n\nTsaiWuCriterion.name\n\nName of the failure criterion.\n\nTsaiWuCriterion.wf\n\nWeighting factor of this failure criterion.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids.html#ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids", + "title": "get_all_layered_element_ids > get_all_layered_element_ids > get_all_layered_element_ids", + "section": "get_all_layered_element_ids > get_all_layered_element_ids", + "text": "CompositeModel.get_all_layered_element_ids()\n\nGet all element IDs with lay-up data.\n\nReturn type\n\nSequence[int]\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/012_fatigue_example", - "href": "examples/gallery_examples/012_fatigue_example.html#evaluate-fatigue-for-a-composite-plate", - "title": "Evaluate fatigue for a composite plate", - "section": "Evaluate fatigue for a composite plate", - "text": "This example shows how to evaluate fatigue for a flat plate.\nIt shows how you can use PyPDF Composites to select specific layers and define a custom\ncombination method. For this example, the custom combination method is stress in fibre\ndirection.\nA random load time series is created. Taking into account that the load is assumed\nproportional, rainflow counting is applied to the load time series.\nLoad ranges are then applied on the stress combination method, and damage is evaluated\nby using a dummy S-N curve.\nBe aware that the fatpack package is not developed by Ansys, so it is the responsibility\nof the user to verify that it works as expected. For more information, see the\nfatpack package,\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nEvaluate fatigue for a composite plate\ncomposite_files_from_workbench_harmonic_analysis()" + "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_continuous_fiber_composite_files_to_server", + "href": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_continuous_fiber_composite_files_to_server.html#upload_continuous_fiber_composite_files_to_server", + "title": "upload_continuous_fiber_composite_files_to_server", + "section": "upload_continuous_fiber_composite_files_to_server", + "text": "Upload continuous fiber composites files to server.\nNote: If server.local_server == True the data_files are returned unmodified.\ndata_files (ContinuousFiberCompositesFiles)\nserver (BaseServer)\nContinuousFiberCompositesFiles\nupload_continuous_fiber_composite_files_to_server\nContinuousFiberCompositesFiles\nBaseServer\nContinuousFiberCompositesFiles" }, { - "objectID": "examples/gallery_examples/012_fatigue_example", - "href": "examples/gallery_examples/012_fatigue_example.html#set-up-analysis", - "title": "Evaluate fatigue for a composite plate > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of loading the required modules, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries and numpy, matplotlib and fatpack\nStart a DPF server and copy the example files into the current working directory.\nCreate a composite model\nSet up analysis" + "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_continuous_fiber_composite_files_to_server", + "href": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_continuous_fiber_composite_files_to_server.html#ansys.dpf.composites.server_helpers.upload_continuous_fiber_composite_files_to_server", + "title": "upload_continuous_fiber_composite_files_to_server > upload_continuous_fiber_composite_files_to_server > upload_continuous_fiber_composite_files_to_server", + "section": "upload_continuous_fiber_composite_files_to_server > upload_continuous_fiber_composite_files_to_server", + "text": "ansys.dpf.composites.server_helpers.upload_continuous_fiber_composite_files_to_server(data_files, server)\n\nUpload continuous fiber composites files to server.\n\nNote: If server.local_server == True the data_files are returned unmodified.\n\nParameters\n\ndata_files (ContinuousFiberCompositesFiles)\n\nserver (BaseServer)\n\nReturn type\n\nContinuousFiberCompositesFiles\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/012_fatigue_example", - "href": "examples/gallery_examples/012_fatigue_example.html#read-stresses-and-define-a-specific-layer-and-a-component-of-stress-tensor", - "title": "Evaluate fatigue for a composite plate > Read stresses and define a specific layer and a component of stress tensor", - "section": "Read stresses and define a specific layer and a component of stress tensor", - "text": "Read stresses\nSelect layer P1L1__ModelingPly.2\nSelect Sigma11 as the combination method\nRead stresses and define a specific layer and a component of stress tensor" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.html#cuntzecriterion", + "title": "CuntzeCriterion", + "section": "CuntzeCriterion", + "text": "Defines the Cuntze criterion for uni-directional orthotropic reinforced materials.\ncfc (bool, default: True) – Activates the failure evaluation regarding compression in fiber direction.\ncft (bool, default: True) – Activates the failure evaluation regarding tension in fiber direction.\ncma (bool, default: True) – Activates the failure evaluation of the matrix due to tension.\ncmb (bool, default: True) – Activates the failure evaluation of the matrix due to compression.\ncmc (bool, default: True) – Activates the failure evaluation of the matrix due to compression or shear.\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used.\nwf_cfc (float, default: 1.0) – Weighting factor of fiber failure due to compression (cfc).\nwf_cft (float, default: 1.0) – Weighting factor of fiber failure due to tension (cft).\nwf_cma (float, default: 1.0) – Weighting factor of matrix failure due to tension (cma).\nwf_cmb (float, default: 1.0) – Weighting factor of matrix failure due to compression (cmb).\nwf_cmc (float, default: 1.0) – Weighting factor of matrix failure due to compression or shear (cmc).\nb21 (float, default: 0.2) – In-plane shear friction coefficient. The default is 0.2.\nb32 (float, default: 1.3805) – Out-of-plane shear friction coefficient. The default is 1.3805. The value depends on the fracture plane angle.\nfracture_plane_angle (float, default: 53.0) – Fracture plane angle in degrees. The default is 53. The value must be greater than 45. The value depends on the out-of-plane shear friction coefficient.\nmode_interaction_coeff (float, default: 2.6) – Mode interaction coefficient. The default is 2.6.\nCuntzeCriterion.to_dict()\n\nCuntzeCriterion.to_json()\n\nCuntzeCriterion.active\nThe failure criterion is suppressed if active is False.\nCuntzeCriterion.b21\nIn-plane shear friction coefficient.\nCuntzeCriterion.b32\nOut-of-plane shear friction coefficient.\nCuntzeCriterion.cfc\nActivates the failure evaluation regarding compression in fiber direction.\nCuntzeCriterion.cft\nActivates the failure evaluation regarding tension in fiber direction.\nCuntzeCriterion.cma\nActivates the failure evaluation of the matrix due to tension.\nCuntzeCriterion.cmb\nActivates the failure evaluation of the matrix due to compression.\nCuntzeCriterion.cmc\nActivates the failure evaluation of the matrix due to compression or shear.\nCuntzeCriterion.dim\nWhether the 2D or 3D formulation of the criterion is used.\nCuntzeCriterion.fracture_plane_angle\nFracture plane angle in degrees.\nCuntzeCriterion.mode_interaction_coeff\nMode interaction coefficient.\nCuntzeCriterion.name\nName of the failure criterion.\nCuntzeCriterion.wf_cfc\nWeighting factor of fiber failure due to compression (cfc).\nCuntzeCriterion.wf_cft\nWeighting factor of fiber failure due to tension (cft).\nCuntzeCriterion.wf_cma\nWeighting factor of matrix failure due to tension (cma).\nCuntzeCriterion.wf_cmb\nWeighting factor of matrix failure due to compression (cmb).\nCuntzeCriterion.wf_cmc\nWeighting factor of matrix failure due to compression or shear (cmc).\nCuntzeCriterion\nbool\nTrue\nbool\nTrue\nbool\nTrue\nbool\nTrue\nbool\nTrue\nint\n2\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n0.2\n0.2\nfloat\n1.3805\n1.3805\nfloat\n53.0\n53\nfloat\n2.6\n2.6\nCuntzeCriterion.to_dict\nCuntzeCriterion.to_json\nCuntzeCriterion.active\nCuntzeCriterion.b21\nCuntzeCriterion.b32\nCuntzeCriterion.cfc\nCuntzeCriterion.cft\nCuntzeCriterion.cma\nCuntzeCriterion.cmb\nCuntzeCriterion.cmc\nCuntzeCriterion.dim\nCuntzeCriterion.fracture_plane_angle\nCuntzeCriterion.mode_interaction_coeff\nCuntzeCriterion.name\nCuntzeCriterion.wf_cfc\nCuntzeCriterion.wf_cft\nCuntzeCriterion.wf_cma\nCuntzeCriterion.wf_cmb\nCuntzeCriterion.wf_cmc" }, { - "objectID": "examples/gallery_examples/012_fatigue_example", - "href": "examples/gallery_examples/012_fatigue_example.html#load-time-series-and-apply-rainflow-counting", - "title": "Evaluate fatigue for a composite plate > Load time series and apply rainflow counting", - "section": "Load time series and apply rainflow counting", - "text": "A random time series is created. Load is assumed proportional, so rainflow counting\ncan be directly done on the load time series to get the load ranges.\nNo mean stress correction is applied.\nFatpack package is used for doing the rainflow counting\nLoad time series and apply rainflow counting" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion", + "title": "CuntzeCriterion > CuntzeCriterion > CuntzeCriterion", + "section": "CuntzeCriterion > CuntzeCriterion", + "text": "class ansys.dpf.composites.failure_criteria.CuntzeCriterion(*, cfc=True, cft=True, cma=True, cmb=True, cmc=True, dim=2, wf_cfc=1.0, wf_cft=1.0, wf_cma=1.0, wf_cmb=1.0, wf_cmc=1.0, b21=0.2, b32=1.3805, fracture_plane_angle=53.0, mode_interaction_coeff=2.6)\n\nDefines the Cuntze criterion for uni-directional orthotropic reinforced materials.\n\nParameters\n\ncfc (bool, default: True) – Activates the failure evaluation regarding compression in fiber direction.\n\ncft (bool, default: True) – Activates the failure evaluation regarding tension in fiber direction.\n\ncma (bool, default: True) – Activates the failure evaluation of the matrix due to tension.\n\ncmb (bool, default: True) – Activates the failure evaluation of the matrix due to compression.\n\ncmc (bool, default: True) – Activates the failure evaluation of the matrix due to compression or shear.\n\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used.\n\nwf_cfc (float, default: 1.0) – Weighting factor of fiber failure due to compression (cfc).\n\nwf_cft (float, default: 1.0) – Weighting factor of fiber failure due to tension (cft).\n\nwf_cma (float, default: 1.0) – Weighting factor of matrix failure due to tension (cma).\n\nwf_cmb (float, default: 1.0) – Weighting factor of matrix failure due to compression (cmb).\n\nwf_cmc (float, default: 1.0) – Weighting factor of matrix failure due to compression or shear (cmc).\n\nb21 (float, default: 0.2) – In-plane shear friction coefficient. The default is 0.2.\n\nb32 (float, default: 1.3805) – Out-of-plane shear friction coefficient. The default is 1.3805. The value depends on the fracture plane angle.\n\nfracture_plane_angle (float, default: 53.0) – Fracture plane angle in degrees. The default is 53. The value must be greater than 45. The value depends on the out-of-plane shear friction coefficient.\n\nmode_interaction_coeff (float, default: 2.6) – Mode interaction coefficient. The default is 2.6.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nCuntzeCriterion.to_dict()\n\n\n\nCuntzeCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nCuntzeCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nCuntzeCriterion.b21\n\nIn-plane shear friction coefficient.\n\nCuntzeCriterion.b32\n\nOut-of-plane shear friction coefficient.\n\nCuntzeCriterion.cfc\n\nActivates the failure evaluation regarding compression in fiber direction.\n\nCuntzeCriterion.cft\n\nActivates the failure evaluation regarding tension in fiber direction.\n\nCuntzeCriterion.cma\n\nActivates the failure evaluation of the matrix due to tension.\n\nCuntzeCriterion.cmb\n\nActivates the failure evaluation of the matrix due to compression.\n\nCuntzeCriterion.cmc\n\nActivates the failure evaluation of the matrix due to compression or shear.\n\nCuntzeCriterion.dim\n\nWhether the 2D or 3D formulation of the criterion is used.\n\nCuntzeCriterion.fracture_plane_angle\n\nFracture plane angle in degrees.\n\nCuntzeCriterion.mode_interaction_coeff\n\nMode interaction coefficient.\n\nCuntzeCriterion.name\n\nName of the failure criterion.\n\nCuntzeCriterion.wf_cfc\n\nWeighting factor of fiber failure due to compression (cfc).\n\nCuntzeCriterion.wf_cft\n\nWeighting factor of fiber failure due to tension (cft).\n\nCuntzeCriterion.wf_cma\n\nWeighting factor of matrix failure due to tension (cma).\n\nCuntzeCriterion.wf_cmb\n\nWeighting factor of matrix failure due to compression (cmb).\n\nCuntzeCriterion.wf_cmc\n\nWeighting factor of matrix failure due to compression or shear (cmc).\n\n" }, { - "objectID": "examples/gallery_examples/012_fatigue_example", - "href": "examples/gallery_examples/012_fatigue_example.html#s-n-curve", - "title": "Evaluate fatigue for a composite plate > S-N curve", - "section": "S-N curve", - "text": "A dummy S-N curve is created. Note that this curve is not based on any\nexperimental data. Sc is chosen to be twice the orthotropic stress limit in the fiber direction.\nand Nc is set to 1.\nS-N curve" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.max_chunk_size", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.max_chunk_size.html#max_chunk_size", + "title": "max_chunk_size", + "section": "max_chunk_size", + "text": "Maximum chunk size (number of elements) for the result evaluation.\nSmall chunks reduce the maximum peak of memory, but too many chunks causes\nsome overhead. The default is 50,000. Use -1 to disable chunking.\nint\nmax_chunk_size\n-1\nint" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.max_chunk_size", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.max_chunk_size.html#ansys.dpf.composites.result_definition.ResultDefinition.max_chunk_size", + "title": "max_chunk_size > max_chunk_size > max_chunk_size", + "section": "max_chunk_size > max_chunk_size", + "text": "property ResultDefinition.max_chunk_size: int\n\nMaximum chunk size (number of elements) for the result evaluation.\n\nSmall chunks reduce the maximum peak of memory, but too many chunks causes\nsome overhead. The default is 50,000. Use -1 to disable chunking.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/012_fatigue_example", - "href": "examples/gallery_examples/012_fatigue_example.html#damage-evaluation", - "title": "Evaluate fatigue for a composite plate > Damage evaluation", - "section": "Damage evaluation", - "text": "Stress S11 at time 1 and layer P1L1__ModelingPly.2 are read\nfor each load range. Its damage is evaluated using the dummy S-N curve.\nPlot damage\nDamage evaluation" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hf.html#hf", + "title": "hf", + "section": "hf", + "text": "Whether to activate the failure evaluation regarding fiber failure.\nbool\nhf\nbool" }, { - "objectID": "examples/gallery_examples/012_fatigue_example", - "href": "examples/gallery_examples/012_fatigue_example.html#identify-the-element-with-the-maximum-damage", - "title": "Evaluate fatigue for a composite plate > Identify the element with the maximum damage", - "section": "Identify the element with the maximum damage", - "text": "Total running time of the script: (0 minutes 4.346 seconds)\nDownload Jupyter notebook: 012_fatigue_example.ipynb\nDownload Python source code: 012_fatigue_example.py\nDownload zipped: 012_fatigue_example.zip\nGallery generated by Sphinx-Gallery\nIdentify the element with the maximum damage\nDownload Jupyter notebook: 012_fatigue_example.ipynb\nDownload Python source code: 012_fatigue_example.py\nDownload zipped: 012_fatigue_example.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hf.html#ansys.dpf.composites.failure_criteria.HashinCriterion.hf", + "title": "hf > hf > hf", + "section": "hf > hf", + "text": "property HashinCriterion.hf: bool\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pma", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pma.html#wf_pma", - "title": "wf_pma", - "section": "wf_pma", - "text": "Weighting factor of the matrix failure (pma) mode.\nfloat\nwf_pma\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmA", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmA.html#cma", + "title": "cmA", + "section": "cmA", + "text": "cmA" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pma", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pma.html#ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pma", - "title": "wf_pma > wf_pma > wf_pma", - "section": "wf_pma > wf_pma", - "text": "property PuckCriterion.wf_pma: float\n\nWeighting factor of the matrix failure (pma) mode.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmA", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmA.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cmA", + "title": "cmA > cmA > cmA", + "section": "cmA > cmA", + "text": "FailureModeEnum.cmA = 1003\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs.html#vms", - "title": "vMs", - "section": "vMs", - "text": "vMs" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.html#corefailurecriterion", + "title": "CoreFailureCriterion", + "section": "CoreFailureCriterion", + "text": "Defines the core shear failure criterion for\ncore materials like foam and honeycomb.\ninclude_ins (bool, default: False) – Whether to activate the formulation that considers interlaminar normal stresses.\nwf (float, default: 1.0) – Weighting factor of the failure mode (cs).\nCoreFailureCriterion.to_dict()\n\nCoreFailureCriterion.to_json()\n\nCoreFailureCriterion.active\nThe failure criterion is suppressed if active is False.\nCoreFailureCriterion.include_ins\nWhether to activate the formulation that considers interlaminar normal stresses.\nCoreFailureCriterion.name\nName of the failure criterion.\nCoreFailureCriterion.wf\nWeighting factor of the failure mode (cs).\nCoreFailureCriterion\nbool\nFalse\nfloat\n1.0\nCoreFailureCriterion.to_dict\nCoreFailureCriterion.to_json\nCoreFailureCriterion.active\nCoreFailureCriterion.include_ins\nCoreFailureCriterion.name\nCoreFailureCriterion.wf" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs", - "title": "vMs > vMs > vMs", - "section": "vMs > vMs", - "text": "FailureModeEnum.vMs = 1102\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion", + "title": "CoreFailureCriterion > CoreFailureCriterion > CoreFailureCriterion", + "section": "CoreFailureCriterion > CoreFailureCriterion", + "text": "class ansys.dpf.composites.failure_criteria.CoreFailureCriterion(*, include_ins=False, wf=1.0)\n\nDefines the core shear failure criterion for\ncore materials like foam and honeycomb.\n\nParameters\n\ninclude_ins (bool, default: False) – Whether to activate the formulation that considers interlaminar normal stresses.\n\nwf (float, default: 1.0) – Weighting factor of the failure mode (cs).\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nCoreFailureCriterion.to_dict()\n\n\n\nCoreFailureCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nCoreFailureCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nCoreFailureCriterion.include_ins\n\nWhether to activate the formulation that considers interlaminar normal stresses.\n\nCoreFailureCriterion.name\n\nName of the failure criterion.\n\nCoreFailureCriterion.wf\n\nWeighting factor of the failure mode (cs).\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removesuffix", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removesuffix.html#removesuffix", - "title": "removesuffix", - "section": "removesuffix", - "text": "Return a str with the given suffix string removed if present.\nIf the string ends with the suffix string and that suffix is not empty,\nreturn string[:-len(suffix)]. Otherwise, return a copy of the original\nstring.\nremovesuffix" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "Return the combined failure criterion as a dictionary.\ndict[str, Any]\nJSON dictionary that can be used for the result definition\nof the DPF Composites Failure evaluator operator.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removesuffix", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removesuffix.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.removesuffix", - "title": "removesuffix > removesuffix > removesuffix", - "section": "removesuffix > removesuffix", - "text": "FailureMeasureEnum.removesuffix(suffix, /)\n\nReturn a str with the given suffix string removed if present.\n\nIf the string ends with the suffix string and that suffix is not empty,\nreturn string[:-len(suffix)]. Otherwise, return a copy of the original\nstring.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "CombinedFailureCriterion.to_dict()\n\nReturn the combined failure criterion as a dictionary.\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\nJSON dictionary that can be used for the result definition\nof the DPF Composites Failure evaluator operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalpha", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalpha.html#isalpha", - "title": "isalpha", - "section": "isalpha", - "text": "Return True if the string is an alphabetic string, False otherwise.\nA string is alphabetic if all characters in the string are alphabetic and there\nis at least one character in the string.\nisalpha" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s12", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s12.html#s12", + "title": "s12", + "section": "s12", + "text": "s12" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalpha", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalpha.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isalpha", - "title": "isalpha > isalpha > isalpha", - "section": "isalpha > isalpha", - "text": "FailureMeasureEnum.isalpha(/)\n\nReturn True if the string is an alphabetic string, False otherwise.\n\nA string is alphabetic if all characters in the string are alphabetic and there\nis at least one character in the string.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s12", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s12.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s12", + "title": "s12 > s12 > s12", + "section": "s12 > s12", + "text": "FailureModeEnum.s12 = 240\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_constant_property_dict", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_constant_property_dict.html#get_constant_property_dict", - "title": "get_constant_property_dict", - "section": "get_constant_property_dict", - "text": "Get a dictionary with constant properties.\nReturns a dictionary with dpf_material_id as the key and\na dictionary with the requested properties as the value. Only constant properties\nare supported. Variable properties are evaluated at their\ndefault values.\nThis method can be slow to evaluate and should not\nbe called in a loop.\nmaterial_properties (Collection[MaterialProperty]) – List of the requested material properties.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nThe dictionary only contains the materials of the analysis plies defined\nin the specified composite definition.\ndict[int64, dict[MaterialProperty, float]]\nget_constant_property_dict\ndpf_material_id\nCollection\nMaterialProperty\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\ndict\nint64\ndict\nMaterialProperty\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids.html#dpf_material_ids", + "title": "dpf_material_ids", + "section": "dpf_material_ids", + "text": "dpf_material_ids" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_constant_property_dict", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_constant_property_dict.html#ansys.dpf.composites.composite_model.CompositeModel.get_constant_property_dict", - "title": "get_constant_property_dict > get_constant_property_dict > get_constant_property_dict", - "section": "get_constant_property_dict > get_constant_property_dict", - "text": "CompositeModel.get_constant_property_dict(material_properties, composite_definition_label=None)\n\nGet a dictionary with constant properties.\n\nReturns a dictionary with dpf_material_id as the key and\na dictionary with the requested properties as the value. Only constant properties\nare supported. Variable properties are evaluated at their\ndefault values.\n\nThis method can be slow to evaluate and should not\nbe called in a loop.\n\nParameters\n\nmaterial_properties (Collection[MaterialProperty]) – List of the requested material properties.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nThe dictionary only contains the materials of the analysis plies defined\nin the specified composite definition.\n\nReturn type\n\ndict[int64, dict[MaterialProperty, float]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids.html#ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids", + "title": "dpf_material_ids > dpf_material_ids > dpf_material_ids", + "section": "dpf_material_ids > dpf_material_ids", + "text": "ElementInfo.dpf_material_ids: ndarray[Any, dtype[int64]]\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.JSON_DICT_KEY", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.JSON_DICT_KEY.html#json_dict_key", - "title": "JSON_DICT_KEY", - "section": "JSON_DICT_KEY", - "text": "JSON_DICT_KEY" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.html#elementinfoprovider", + "title": "ElementInfoProvider", + "section": "ElementInfoProvider", + "text": "Provider for ElementInfo.\nUse get_element_info_provider() to create ElementInfoProvider\nobjects.\nInitialize the class before a loop and\ncall get_element_info() for each element.\nNote that the ElementInfoProvider class is not fully supported for\ndistributed RST files. The get_element_info() method will raise an\nexception if the DPF server version does not support reading the required\ninformation.\nmesh (MeshedRegion)\nlayer_indices (PropertyField)\nelement_types_apdl (PropertyField)\nelement_types_dpf (PropertyField)\nkeyopt_8_values (PropertyField)\nkeyopt_3_values (PropertyField)\nmaterial_ids (PropertyField)\nno_bounds_checks (bool, default: False) – Disable bounds checks.\nResults in better performance but potentially cryptic\nerror messages\nElementInfoProvider.get_element_info(element_id)\nGet ElementInfo for a given element id.\nElementInfoProvider\nElementInfo\nget_element_info_provider()\nElementInfoProvider\nget_element_info()\nElementInfoProvider\nget_element_info()\nMeshedRegion\nPropertyField\nPropertyField\nPropertyField\nPropertyField\nPropertyField\nPropertyField\nbool\nFalse\nElementInfoProvider.get_element_info\nElementInfo" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.JSON_DICT_KEY", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.JSON_DICT_KEY.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.JSON_DICT_KEY", - "title": "JSON_DICT_KEY > JSON_DICT_KEY > JSON_DICT_KEY", - "section": "JSON_DICT_KEY > JSON_DICT_KEY", - "text": "CombinedFailureCriterion.JSON_DICT_KEY = 'criteria'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.html#ansys.dpf.composites.layup_info.ElementInfoProvider", + "title": "ElementInfoProvider > ElementInfoProvider > ElementInfoProvider", + "section": "ElementInfoProvider > ElementInfoProvider", + "text": "class ansys.dpf.composites.layup_info.ElementInfoProvider(mesh, layer_indices, element_types_apdl, element_types_dpf, keyopt_8_values, keyopt_3_values, material_ids, solver_material_ids=None, no_bounds_checks=False)\n\nProvider for ElementInfo.\n\nUse get_element_info_provider() to create ElementInfoProvider\nobjects.\n\nInitialize the class before a loop and\ncall get_element_info() for each element.\n\nNote that the ElementInfoProvider class is not fully supported for\ndistributed RST files. The get_element_info() method will raise an\nexception if the DPF server version does not support reading the required\ninformation.\n\nParameters\n\nmesh (MeshedRegion)\n\nlayer_indices (PropertyField)\n\nelement_types_apdl (PropertyField)\n\nelement_types_dpf (PropertyField)\n\nkeyopt_8_values (PropertyField)\n\nkeyopt_3_values (PropertyField)\n\nmaterial_ids (PropertyField)\n\nno_bounds_checks (bool, default: False) – Disable bounds checks.\nResults in better performance but potentially cryptic\nerror messages\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nElementInfoProvider.get_element_info(element_id)\n\nGet ElementInfo for a given element id.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e1", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e1.html#e1", - "title": "e1", - "section": "e1", - "text": "Strains in the material 1 direction of each ply.\nndarray[Any, dtype[float64]]\ne1\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E3", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E3.html#engineering_constants_e3", + "title": "Engineering_Constants_E3", + "section": "Engineering_Constants_E3", + "text": "Engineering_Constants_E3" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e1", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e1.html#ansys.dpf.composites.sampling_point.SamplingPoint.e1", - "title": "e1 > e1 > e1", - "section": "e1 > e1", - "text": "property SamplingPoint.e1: ndarray[Any, dtype[float64]]\n\nStrains in the material 1 direction of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E3", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E3.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E3", + "title": "Engineering_Constants_E3 > Engineering_Constants_E3 > Engineering_Constants_E3", + "section": "Engineering_Constants_E3 > Engineering_Constants_E3", + "text": "MaterialProperty.Engineering_Constants_E3: str = 'young_modulus_z_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zt.html#stress_limits_zt", - "title": "Stress_Limits_Zt", - "section": "Stress_Limits_Zt", - "text": "Stress_Limits_Zt" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.active.html#active", + "title": "active", + "section": "active", + "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zt", - "title": "Stress_Limits_Zt > Stress_Limits_Zt > Stress_Limits_Zt", - "section": "Stress_Limits_Zt > Stress_Limits_Zt", - "text": "MaterialProperty.Stress_Limits_Zt: str = 'stress_tensile_z_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.active.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property HoffmanCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR21", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR21.html#tensor21", - "title": "TENSOR21", - "section": "TENSOR21", - "text": "TENSOR21" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.spots_per_ply", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.spots_per_ply.html#spots_per_ply", + "title": "spots_per_ply", + "section": "spots_per_ply", + "text": "Number of through-the-thickness integration points per ply.\nint\nspots_per_ply\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR21", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR21.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR21", - "title": "TENSOR21 > TENSOR21 > TENSOR21", - "section": "TENSOR21 > TENSOR21", - "text": "Sym3x3TensorComponent.TENSOR21 = 3\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.spots_per_ply", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.spots_per_ply.html#ansys.dpf.composites.sampling_point.SamplingPoint.spots_per_ply", + "title": "spots_per_ply > spots_per_ply > spots_per_ply", + "section": "spots_per_ply > spots_per_ply", + "text": "property SamplingPoint.spots_per_ply: int\n\nNumber of through-the-thickness integration points per ply.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot.html#add_results_to_plot", - "title": "add_results_to_plot", - "section": "add_results_to_plot", - "text": "Add results (strain, stress, or failure values) to an Axes object.\naxes (Any) – Matplotlib Axes object.\ncomponents (Sequence[str]) – List of result components. Valid components for\nstrain are \"e1\", \"e2\", \"e3\", \"e12\", \"e13\",\nand \"e23\" Valid components for stress are \"s1\", \"s2\",\n\"s3\", \"s12\", \"s13\", and \"s23\". Valid components\nfor failure are \"inverse_reserve_factor\", \"reserve_factor\",\nand \"margin_of_safety\".\nspots (Collection[Spot], default: (, )) – Collection of spots (interfaces).\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\ntitle (str, default: '') – Title of the plot. This parameter is ignored if empty.\nxlabel (str, default: '') – Becomes the label of the x-axis. This parameter is ignored if empty.\nNone\nadd_results_to_plot\nAxes\nAny\nAxes\nSequence\nstr\n\"e1\"\n\"e2\"\n\"e3\"\n\"e12\"\n\"e13\"\n\"e23\"\n\"s1\",\n\"s2\"\n\"s3\"\n\"s12\"\n\"s13\"\n\"s23\"\n\"inverse_reserve_factor\"\n\"reserve_factor\"\n\"margin_of_safety\"\nCollection\nSpot\n(, )\nfloat\n1.0\nstr\n''\nstr\n''\nNone" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property_dict", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property_dict.html#get_constant_property_dict", + "title": "get_constant_property_dict", + "section": "get_constant_property_dict", + "text": "Get a dictionary with constant properties.\nReturns a dictionary with the DPF material ID as a key and\na dictionary with the requested properties as the value. Only constant properties\nare supported. Variable properties are evaluated at their\ndefault values.\nBecause this method can be slow to evaluate, it should not\nbe called in a loop.\nmaterial_properties (Collection[MaterialProperty]) – Material properties to request.\nmaterials_provider (Operator) – DPF Materials provider operator. This value is Available from the\nCompositeModel.material_operators attribute.\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source or stream provider that contains the RST file.\nmesh (MeshedRegion) – DPF meshed region enriched with lay-up information.\ndict[int64, dict[MaterialProperty, float]]\nget_constant_property_dict\nCollection\nMaterialProperty\nOperator\nCompositeModel.material_operators\nDataSources\nOperator\nMeshedRegion\ndict\nint64\ndict\nMaterialProperty\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot.html#ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot", - "title": "add_results_to_plot > add_results_to_plot > add_results_to_plot", - "section": "add_results_to_plot > add_results_to_plot", - "text": "SamplingPoint.add_results_to_plot(axes, components, spots=(Spot.BOTTOM, Spot.TOP), core_scale_factor=1.0, title='', xlabel='')\n\nAdd results (strain, stress, or failure values) to an Axes object.\n\nParameters\n\naxes (Any) – Matplotlib Axes object.\n\ncomponents (Sequence[str]) – List of result components. Valid components for\nstrain are \"e1\", \"e2\", \"e3\", \"e12\", \"e13\",\nand \"e23\" Valid components for stress are \"s1\", \"s2\",\n\"s3\", \"s12\", \"s13\", and \"s23\". Valid components\nfor failure are \"inverse_reserve_factor\", \"reserve_factor\",\nand \"margin_of_safety\".\n\nspots (Collection[Spot], default: (, )) – Collection of spots (interfaces).\n\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\n\ntitle (str, default: '') – Title of the plot. This parameter is ignored if empty.\n\nxlabel (str, default: '') – Becomes the label of the x-axis. This parameter is ignored if empty.\n\nExamples\n\n>>> import matplotlib.pyplot as plt\n>>> fig, ax1 = plt.subplots()\n>>> sampling_point.add_results_to_plot(ax1,\n [\"s13\", \"s23\", \"s3\"],\n [Spot.BOTTOM, Spot.TOP],\n 0.1, \"Interlaminar Stresses\", \"[MPa]\")\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property_dict", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property_dict.html#ansys.dpf.composites.layup_info.material_properties.get_constant_property_dict", + "title": "get_constant_property_dict > get_constant_property_dict > get_constant_property_dict", + "section": "get_constant_property_dict > get_constant_property_dict", + "text": "ansys.dpf.composites.layup_info.material_properties.get_constant_property_dict(material_properties, materials_provider, data_source_or_streams_provider, mesh)\n\nGet a dictionary with constant properties.\n\nReturns a dictionary with the DPF material ID as a key and\na dictionary with the requested properties as the value. Only constant properties\nare supported. Variable properties are evaluated at their\ndefault values.\nBecause this method can be slow to evaluate, it should not\nbe called in a loop.\n\nParameters\n\nmaterial_properties (Collection[MaterialProperty]) – Material properties to request.\n\nmaterials_provider (Operator) – DPF Materials provider operator. This value is Available from the\nCompositeModel.material_operators attribute.\n\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source or stream provider that contains the RST file.\n\nmesh (MeshedRegion) – DPF meshed region enriched with lay-up information.\n\nReturn type\n\ndict[int64, dict[MaterialProperty, float]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_ratio", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_ratio.html#larc_constants_fracture_toughness_ratio", - "title": "Larc_Constants_fracture_toughness_ratio", - "section": "Larc_Constants_fracture_toughness_ratio", - "text": "Larc_Constants_fracture_toughness_ratio" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rfind", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rfind.html#rfind", + "title": "rfind", + "section": "rfind", + "text": "Return the highest index in S where substring sub is found, such that sub is contained within S[start:end].\nOptional arguments start and end are interpreted as in slice notation.\nReturn -1 on failure.\nrfind" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_ratio", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_ratio.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_ratio", - "title": "Larc_Constants_fracture_toughness_ratio > Larc_Constants_fracture_toughness_ratio > Larc_Constants_fracture_toughness_ratio", - "section": "Larc_Constants_fracture_toughness_ratio > Larc_Constants_fracture_toughness_ratio", - "text": "MaterialProperty.Larc_Constants_fracture_toughness_ratio: str = 'fracture_toughness_ratio_larc_constants'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rfind", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rfind.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rfind", + "title": "rfind > rfind > rfind", + "section": "rfind > rfind", + "text": "FailureMeasureEnum.rfind(sub, [start, [end]], /)\n\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nOptional arguments start and end are interpreted as in slice notation.\nReturn -1 on failure.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdigit", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdigit.html#isdigit", - "title": "isdigit", - "section": "isdigit", - "text": "Return True if the string is a digit string, False otherwise.\nA string is a digit string if all characters in the string are digits and there\nis at least one character in the string.\nisdigit" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e3.html#wf_e3", + "title": "wf_e3", + "section": "wf_e3", + "text": "Weighting factor of the failure mode e3.\nfloat\nwf_e3\nfloat" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e3.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e3", + "title": "wf_e3 > wf_e3 > wf_e3", + "section": "wf_e3 > wf_e3", + "text": "property MaxStrainCriterion.wf_e3: float\n\nWeighting factor of the failure mode e3.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdigit", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdigit.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isdigit", - "title": "isdigit > isdigit > isdigit", - "section": "isdigit > isdigit", - "text": "FailureMeasureEnum.isdigit(/)\n\nReturn True if the string is a digit string, False otherwise.\n\nA string is a digit string if all characters in the string are digits and there\nis at least one character in the string.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.dim.html#dim", + "title": "dim", + "section": "dim", + "text": "Whether the 2D or 3D formulation of the criterion is used.\nint\ndim\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf.html#wf", - "title": "wf", - "section": "wf", - "text": "Weighting factor of the failure mode (cs).\nfloat\nwf\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.dim.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.dim", + "title": "dim > dim > dim", + "section": "dim > dim", + "text": "property CuntzeCriterion.dim: int\n\nWhether the 2D or 3D formulation of the criterion is used.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf", - "title": "wf > wf > wf", - "section": "wf > wf", - "text": "property CoreFailureCriterion.wf: float\n\nWeighting factor of the failure mode (cs).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.number_of_plies", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.number_of_plies.html#number_of_plies", + "title": "number_of_plies", + "section": "number_of_plies", + "text": "Number of plies.\nint\nnumber_of_plies\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R13", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R13.html#hill_yield_criterion_r13", - "title": "Hill_Yield_Criterion_R13", - "section": "Hill_Yield_Criterion_R13", - "text": "Hill_Yield_Criterion_R13" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.number_of_plies", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.number_of_plies.html#ansys.dpf.composites.sampling_point.SamplingPoint.number_of_plies", + "title": "number_of_plies > number_of_plies > number_of_plies", + "section": "number_of_plies > number_of_plies", + "text": "property SamplingPoint.number_of_plies: int\n\nNumber of plies.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R13", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R13.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R13", - "title": "Hill_Yield_Criterion_R13 > Hill_Yield_Criterion_R13 > Hill_Yield_Criterion_R13", - "section": "Hill_Yield_Criterion_R13 > Hill_Yield_Criterion_R13", - "text": "MaterialProperty.Hill_Yield_Criterion_R13: str = 'yield_stress_ratio_xz_hill_criterion'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_json", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_json.html#to_json", + "title": "to_json", + "section": "to_json", + "text": "Convert the dictionary representation of the result definition to a JSON dictionary.\nstr\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s23.html#s23", - "title": "s23", - "section": "s23", - "text": "s23" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_json", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_json.html#ansys.dpf.composites.result_definition.ResultDefinition.to_json", + "title": "to_json > to_json > to_json", + "section": "to_json > to_json", + "text": "ResultDefinition.to_json()\n\nConvert the dictionary representation of the result definition to a JSON dictionary.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s23.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s23", - "title": "s23 > s23 > s23", - "section": "s23 > s23", - "text": "FailureModeEnum.s23 = 260\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.html#tsaiwucriterion", + "title": "TsaiWuCriterion", + "section": "TsaiWuCriterion", + "text": "Defines the Tsai-Wu failure criterion for orthotropic reinforced materials.\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\nTsaiWuCriterion.to_dict()\n\nTsaiWuCriterion.to_json()\n\nTsaiWuCriterion.active\nThe failure criterion is suppressed if active is False.\nTsaiWuCriterion.dim\nSpecifies which formulation of the failure criterion is used.\nTsaiWuCriterion.name\nName of the failure criterion.\nTsaiWuCriterion.wf\nWeighting factor of this failure criterion.\nTsaiWuCriterion\nfloat\n1.0\nint\n2\nTsaiWuCriterion.to_dict\nTsaiWuCriterion.to_json\nTsaiWuCriterion.active\nTsaiWuCriterion.dim\nTsaiWuCriterion.name\nTsaiWuCriterion.wf" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2.html#s2", - "title": "s2", - "section": "s2", - "text": "s2" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion", + "title": "TsaiWuCriterion > TsaiWuCriterion > TsaiWuCriterion", + "section": "TsaiWuCriterion > TsaiWuCriterion", + "text": "class ansys.dpf.composites.failure_criteria.TsaiWuCriterion(*, active=True, wf=1.0, dim=2)\n\nDefines the Tsai-Wu failure criterion for orthotropic reinforced materials.\n\nParameters\n\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\n\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nTsaiWuCriterion.to_dict()\n\n\n\nTsaiWuCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nTsaiWuCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nTsaiWuCriterion.dim\n\nSpecifies which formulation of the failure criterion is used.\n\nTsaiWuCriterion.name\n\nName of the failure criterion.\n\nTsaiWuCriterion.wf\n\nWeighting factor of this failure criterion.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s2", - "title": "s2 > s2 > s2", - "section": "s2 > s2", - "text": "FailureModeEnum.s2 = 220\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.material_name", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.material_name.html#material_name", + "title": "material_name", + "section": "material_name", + "text": "material_name" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.html#compositemodel", - "title": "CompositeModel", - "section": "CompositeModel", - "text": "Provides access to the basic composite postprocessing functionality.\nOn initialization, the CompositeModel class automatically adds composite lay-up\ninformation to the meshed regions. It prepares the providers for different lay-up properties\nso that they can be efficiently evaluated. The composite_files provided are automatically\nuploaded to the server if needed.\nWhen creating a CompositeModel instance, several providers are created and\nlay-up information is added to the DPF meshed regions. Depending on the use\ncase, it can be more efficient to create the providers separately.\nThe handling of models with multiple composite definition files (assemblies)\ndiffer depending on the version of the DPF server. The handling is simplified\nwith DPF Server 7.0 (2024 R1) or later and the full assembly can be post-processed\nin the same way as a model with a single ACP model.\nBefore DPF Server 7.0 (2024 R1):\nFor assemblies with multiple composite definition files, separate meshes and\nlay-up operators are generated (wrapped by the CompositeInfo class). This\nis needed because the lay-up provider can only add the data of a single\ncomposite definitions file to a mesh. All functions that depend on composite\ndefinitions mut be called with the correct composite_definition_label\nparameter. The layered elements that get information from a given\ncomposite definition label can be determined by calling\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label().\nAll the elements that are not part of a composite definition are either homogeneous\nsolids or layered models defined outside of an ACP model. The\nCompositeModel.composite_definition_labels() command returns all available composite\ndefinition labels. For more information, see\nsphx_glr_examples_gallery_examples_008_assembly_example.py.\ncomposite_files (ContinuousFiberCompositesFiles) – Use the get_composite_files_from_workbench_result_folder() function to obtain\nthe ContinuousFiberCompositesFiles object.\nserver (BaseServer) – DPF Server on which the model is created\ndefault_unit_system (Optional[UnitSystem], default: None) – Unit system that is used if the result file\ndoes not specify the unit system. This happens\nfor pure MAPDL projects.\nCompositeModel.add_interlaminar_normal_stresses(...)\nAdd interlaminar normal stresses to the stresses fields container.\nCompositeModel.evaluate_failure_criteria(...)\nGet a fields container with the evaluated failure criteria.\nCompositeModel.get_all_layered_element_ids()\nGet all element IDs with lay-up data.\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label([...])\nGet all layered element IDs that belong to a composite definition label.\nCompositeModel.get_analysis_plies(element_id)\nGet analysis ply names.\nCompositeModel.get_constant_property_dict(...)\nGet a dictionary with constant properties.\nCompositeModel.get_element_info(element_id)\nGet element information for an element ID.\nCompositeModel.get_element_laminate_offset(...)\nGet the laminate offset of an element.\nCompositeModel.get_layup_operator([...])\nGet the lay-up operator.\nCompositeModel.get_mesh([...])\nGet the underlying DPF meshed region.\nCompositeModel.get_property_for_all_layers(...)\nGet a layer property for an element ID.\nCompositeModel.get_result_times_or_frequencies()\nGet the times or frequencies in the result file.\nCompositeModel.get_rst_streams_provider()\nGet the streams provider of the loaded result file.\nCompositeModel.get_sampling_point(...[, ...])\nGet a sampling point for an element ID and failure criteria.\nCompositeModel.composite_definition_labels\nAll composite definition labels in the model.\nCompositeModel.composite_files\nGet the composite file paths on the server.\nCompositeModel.core_model\nUnderlying DPF core model.\nCompositeModel.data_sources\nComposite data sources.\nCompositeModel.layup_model_type\nGet the context type of the lay-up model.\nCompositeModel.material_metadata\nDPF material ID to metadata map of the materials.\nCompositeModel.material_names\nMaterial name to DPF material ID map.\nCompositeModel.material_operators\nMaterial operators.\nCompositeModel\nCompositeModel\nCompositeModel\nCompositeInfo\ncomposite_definition_label\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label()\nCompositeModel.composite_definition_labels()\nContinuousFiberCompositesFiles\nget_composite_files_from_workbench_result_folder()\nContinuousFiberCompositesFiles\nBaseServer\nOptional\nUnitSystem\nNone\nCompositeModel.add_interlaminar_normal_stresses\nCompositeModel.evaluate_failure_criteria\nCompositeModel.get_all_layered_element_ids\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label\nCompositeModel.get_analysis_plies\nCompositeModel.get_constant_property_dict\nCompositeModel.get_element_info\nCompositeModel.get_element_laminate_offset\nCompositeModel.get_layup_operator\nCompositeModel.get_mesh\nCompositeModel.get_property_for_all_layers\nCompositeModel.get_result_times_or_frequencies\nCompositeModel.get_rst_streams_provider\nCompositeModel.get_sampling_point\nCompositeModel.composite_definition_labels\nCompositeModel.composite_files\nCompositeModel.core_model\nCompositeModel.data_sources\nCompositeModel.layup_model_type\nCompositeModel.material_metadata\nCompositeModel.material_names\nCompositeModel.material_operators" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.material_name", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.material_name.html#ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.material_name", + "title": "material_name > material_name > material_name", + "section": "material_name > material_name", + "text": "MaterialMetadata.material_name: str = ''\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.html#ansys.dpf.composites.composite_model.CompositeModel", - "title": "CompositeModel > CompositeModel > CompositeModel", - "section": "CompositeModel > CompositeModel", - "text": "class ansys.dpf.composites.composite_model.CompositeModel(composite_files, server, default_unit_system=None)\n\nProvides access to the basic composite postprocessing functionality.\n\nOn initialization, the CompositeModel class automatically adds composite lay-up\ninformation to the meshed regions. It prepares the providers for different lay-up properties\nso that they can be efficiently evaluated. The composite_files provided are automatically\nuploaded to the server if needed.\n\nWhen creating a CompositeModel instance, several providers are created and\nlay-up information is added to the DPF meshed regions. Depending on the use\ncase, it can be more efficient to create the providers separately.\n\nThe handling of models with multiple composite definition files (assemblies)\ndiffer depending on the version of the DPF server. The handling is simplified\nwith DPF Server 7.0 (2024 R1) or later and the full assembly can be post-processed\nin the same way as a model with a single ACP model.\n\nBefore DPF Server 7.0 (2024 R1):\n\nFor assemblies with multiple composite definition files, separate meshes and\nlay-up operators are generated (wrapped by the CompositeInfo class). This\nis needed because the lay-up provider can only add the data of a single\ncomposite definitions file to a mesh. All functions that depend on composite\ndefinitions mut be called with the correct composite_definition_label\nparameter. The layered elements that get information from a given\ncomposite definition label can be determined by calling\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label().\nAll the elements that are not part of a composite definition are either homogeneous\nsolids or layered models defined outside of an ACP model. The\nCompositeModel.composite_definition_labels() command returns all available composite\ndefinition labels. For more information, see\nsphx_glr_examples_gallery_examples_008_assembly_example.py.\n\nParameters\n\ncomposite_files (ContinuousFiberCompositesFiles) – Use the get_composite_files_from_workbench_result_folder() function to obtain\nthe ContinuousFiberCompositesFiles object.\n\nserver (BaseServer) – DPF Server on which the model is created\n\ndefault_unit_system (Optional[UnitSystem], default: None) – Unit system that is used if the result file\ndoes not specify the unit system. This happens\nfor pure MAPDL projects.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nCompositeModel.add_interlaminar_normal_stresses(...)\n\nAdd interlaminar normal stresses to the stresses fields container.\n\nCompositeModel.evaluate_failure_criteria(...)\n\nGet a fields container with the evaluated failure criteria.\n\nCompositeModel.get_all_layered_element_ids()\n\nGet all element IDs with lay-up data.\n\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label([...])\n\nGet all layered element IDs that belong to a composite definition label.\n\nCompositeModel.get_analysis_plies(element_id)\n\nGet analysis ply names.\n\nCompositeModel.get_constant_property_dict(...)\n\nGet a dictionary with constant properties.\n\nCompositeModel.get_element_info(element_id)\n\nGet element information for an element ID.\n\nCompositeModel.get_element_laminate_offset(...)\n\nGet the laminate offset of an element.\n\nCompositeModel.get_layup_operator([...])\n\nGet the lay-up operator.\n\nCompositeModel.get_mesh([...])\n\nGet the underlying DPF meshed region.\n\nCompositeModel.get_property_for_all_layers(...)\n\nGet a layer property for an element ID.\n\nCompositeModel.get_result_times_or_frequencies()\n\nGet the times or frequencies in the result file.\n\nCompositeModel.get_rst_streams_provider()\n\nGet the streams provider of the loaded result file.\n\nCompositeModel.get_sampling_point(...[, ...])\n\nGet a sampling point for an element ID and failure criteria.\n\n\n\nAttributes\n\n\n\n\n\n\n\nCompositeModel.composite_definition_labels\n\nAll composite definition labels in the model.\n\nCompositeModel.composite_files\n\nGet the composite file paths on the server.\n\nCompositeModel.core_model\n\nUnderlying DPF core model.\n\nCompositeModel.data_sources\n\nComposite data sources.\n\nCompositeModel.layup_model_type\n\nGet the context type of the lay-up model.\n\nCompositeModel.material_metadata\n\nDPF material ID to metadata map of the materials.\n\nCompositeModel.material_names\n\nMaterial name to DPF material ID map.\n\nCompositeModel.material_operators\n\nMaterial operators.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE.html#failure_mode", + "title": "FAILURE_MODE", + "section": "FAILURE_MODE", + "text": "FAILURE_MODE" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmt.html#wf_lmt", - "title": "wf_lmt", - "section": "wf_lmt", - "text": "Weighting factor of matrix failure due to tension (lmt).\nfloat\nwf_lmt\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE.html#ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE", + "title": "FAILURE_MODE > FAILURE_MODE > FAILURE_MODE", + "section": "FAILURE_MODE > FAILURE_MODE", + "text": "FailureOutput.FAILURE_MODE = 0\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmt.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmt", - "title": "wf_lmt > wf_lmt > wf_lmt", - "section": "wf_lmt > wf_lmt", - "text": "property LaRCCriterion.wf_lmt: float\n\nWeighting factor of matrix failure due to tension (lmt).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety.html#margin_of_safety", + "title": "margin_of_safety", + "section": "margin_of_safety", + "text": "Lowest margin of safety of each ply.\nThis attribute is equivalent to the safety margin.\nndarray[Any, dtype[float64]]\nmargin_of_safety\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.name.html#name", + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety.html#ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety", + "title": "margin_of_safety > margin_of_safety > margin_of_safety", + "section": "margin_of_safety > margin_of_safety", + "text": "property SamplingPoint.margin_of_safety: ndarray[Any, dtype[float64]]\n\nLowest margin of safety of each ply.\n\nThis attribute is equivalent to the safety margin.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.name.html#name", "title": "name", "section": "name", "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.name.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion.name", + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.name.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.name", "title": "name > name > name", "section": "name > name", - "text": "property HoffmanCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "text": "property LaRCCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e2.html#e2", - "title": "e2", - "section": "e2", - "text": "Activates the failure evaluation regarding the strain in the material 2 direction.\nbool\ne2\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.html#facesheetwrinklingcriterion", + "title": "FaceSheetWrinklingCriterion", + "section": "FaceSheetWrinklingCriterion", + "text": "Defines the face sheet wrinkling criterion for sandwiches (laminate with cores).\nhomogeneous_core_coeff (float, default: 0.5) – Wrinkling coefficient (reduction factor) for homogeneous core materials.\nhoneycomb_core_coeff (float, default: 0.33) – Wrinkling coefficient (reduction factor) for honeycombs. The default is 0.33.\nwf (float, default: 1.0) – Weighting factor of the failure mode (wb or wt). The default is 0.5.\nFaceSheetWrinklingCriterion.to_dict()\n\nFaceSheetWrinklingCriterion.to_json()\n\nFaceSheetWrinklingCriterion.active\nThe failure criterion is suppressed if active is False.\nFaceSheetWrinklingCriterion.homogeneous_core_coeff\nWrinkling coefficient (reduction factor) for homogeneous core materials.\nFaceSheetWrinklingCriterion.honeycomb_core_coeff\nWrinkling coefficient (reduction factor) for honeycombs.\nFaceSheetWrinklingCriterion.name\nName of the failure criterion.\nFaceSheetWrinklingCriterion.wf\nWeighting factor of the failure mode (wb or wt).\nFaceSheetWrinklingCriterion\nfloat\n0.5\nfloat\n0.33\n0.33\nfloat\n1.0\n0.5\nFaceSheetWrinklingCriterion.to_dict\nFaceSheetWrinklingCriterion.to_json\nFaceSheetWrinklingCriterion.active\nFaceSheetWrinklingCriterion.homogeneous_core_coeff\nFaceSheetWrinklingCriterion.honeycomb_core_coeff\nFaceSheetWrinklingCriterion.name\nFaceSheetWrinklingCriterion.wf" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e2.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e2", - "title": "e2 > e2 > e2", - "section": "e2 > e2", - "text": "property MaxStrainCriterion.e2: bool\n\nActivates the failure evaluation regarding the strain in the material 2 direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion", + "title": "FaceSheetWrinklingCriterion > FaceSheetWrinklingCriterion > FaceSheetWrinklingCriterion", + "section": "FaceSheetWrinklingCriterion > FaceSheetWrinklingCriterion", + "text": "class ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion(*, homogeneous_core_coeff=0.5, honeycomb_core_coeff=0.33, wf=1.0)\n\nDefines the face sheet wrinkling criterion for sandwiches (laminate with cores).\n\nParameters\n\nhomogeneous_core_coeff (float, default: 0.5) – Wrinkling coefficient (reduction factor) for homogeneous core materials.\n\nhoneycomb_core_coeff (float, default: 0.33) – Wrinkling coefficient (reduction factor) for honeycombs. The default is 0.33.\n\nwf (float, default: 1.0) – Weighting factor of the failure mode (wb or wt). The default is 0.5.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nFaceSheetWrinklingCriterion.to_dict()\n\n\n\nFaceSheetWrinklingCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nFaceSheetWrinklingCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nFaceSheetWrinklingCriterion.homogeneous_core_coeff\n\nWrinkling coefficient (reduction factor) for homogeneous core materials.\n\nFaceSheetWrinklingCriterion.honeycomb_core_coeff\n\nWrinkling coefficient (reduction factor) for honeycombs.\n\nFaceSheetWrinklingCriterion.name\n\nName of the failure criterion.\n\nFaceSheetWrinklingCriterion.wf\n\nWeighting factor of the failure mode (wb or wt).\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s12", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s12.html#s12", + "title": "s12", + "section": "s12", + "text": "In-plane shear stresses s12 of each ply.\nndarray[Any, dtype[float64]]\ns12\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.active.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property FaceSheetWrinklingCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s12", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s12.html#ansys.dpf.composites.sampling_point.SamplingPoint.s12", + "title": "s12 > s12 > s12", + "section": "s12 > s12", + "text": "property SamplingPoint.s12: ndarray[Any, dtype[float64]]\n\nIn-plane shear stresses s12 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot.MIDDLE", - "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.MIDDLE.html#middle", - "title": "MIDDLE", - "section": "MIDDLE", - "text": "MIDDLE" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.html#spotreductionstrategy", + "title": "SpotReductionStrategy", + "section": "SpotReductionStrategy", + "text": "Provides the strategy for getting from spot values (BOT, MID, TOP) to a single value.\nSpotReductionStrategy.MIN\n\nSpotReductionStrategy.MAX\n\nSpotReductionStrategy.AVG\n\nSpotReductionStrategy.BOT\n\nSpotReductionStrategy.MID\n\nSpotReductionStrategy.TOP\n\nSpotReductionStrategy\nSpotReductionStrategy.MIN\nSpotReductionStrategy.MAX\nSpotReductionStrategy.AVG\nSpotReductionStrategy.BOT\nSpotReductionStrategy.MID\nSpotReductionStrategy.TOP" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot.MIDDLE", - "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.MIDDLE.html#ansys.dpf.composites.constants.Spot.MIDDLE", - "title": "MIDDLE > MIDDLE > MIDDLE", - "section": "MIDDLE > MIDDLE", - "text": "Spot.MIDDLE = 2\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy", + "title": "SpotReductionStrategy > SpotReductionStrategy > SpotReductionStrategy", + "section": "SpotReductionStrategy > SpotReductionStrategy", + "text": "class ansys.dpf.composites.ply_wise_data.SpotReductionStrategy(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides the strategy for getting from spot values (BOT, MID, TOP) to a single value.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nSpotReductionStrategy.MIN\n\n\n\nSpotReductionStrategy.MAX\n\n\n\nSpotReductionStrategy.AVG\n\n\n\nSpotReductionStrategy.BOT\n\n\n\nSpotReductionStrategy.MID\n\n\n\nSpotReductionStrategy.TOP\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.rst", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.rst.html#rst", - "title": "rst", - "section": "rst", - "text": "rst" + "objectID": "examples/gallery_examples/sg_execution_times", + "href": "examples/gallery_examples/sg_execution_times.html#computation-times", + "title": "Computation times", + "section": "Computation times", + "text": "01:26.769 total execution time for 15 files from examples/gallery_examples:\nExample\nTime\nMem (MB)\nsphx_glr_examples_gallery_examples_001_failure_operator_example.py (001_failure_operator_example.py)\n00:15.187\n0.0\nsphx_glr_examples_gallery_examples_010_harmonic_example.py (010_harmonic_example.py)\n00:10.539\n0.0\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py (007_interlaminar_normal_stress_example.py)\n00:07.215\n0.0\nsphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py (014_cyclic_symmetry_example.py)\n00:07.039\n0.0\nsphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py (009_short_fiber_orientation_tensor.py)\n00:06.005\n0.0\nsphx_glr_examples_gallery_examples_011_rst_workflow.py (011_rst_workflow.py)\n00:05.963\n0.0\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py (002_sampling_point_example.py)\n00:05.257\n0.0\nsphx_glr_examples_gallery_examples_008_assembly_example.py (008_assembly_example.py)\n00:05.202\n0.0\nsphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py (099_dpf_composite_failure_workflow.py)\n00:04.888\n0.0\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py (006_filter_composite_data_example.py)\n00:04.628\n0.0\nsphx_glr_examples_gallery_examples_013_thermal_example.py (013_thermal_example.py)\n00:03.942\n0.0\nsphx_glr_examples_gallery_examples_003_short_fiber_example.py (003_short_fiber_example.py)\n00:03.480\n0.0\nsphx_glr_examples_gallery_examples_004_get_material_properties_example.py (004_get_material_properties_example.py)\n00:03.103\n0.0\nsphx_glr_examples_gallery_examples_012_fatigue_example.py (012_fatigue_example.py)\n00:02.991\n0.0\nsphx_glr_examples_gallery_examples_005_get_layup_properties_example.py (005_get_layup_properties_example.py)\n00:01.329\n0.0\nComputation times\n001_failure_operator_example.py\n010_harmonic_example.py\n007_interlaminar_normal_stress_example.py\n014_cyclic_symmetry_example.py\n009_short_fiber_orientation_tensor.py\n011_rst_workflow.py\n002_sampling_point_example.py\n008_assembly_example.py\n099_dpf_composite_failure_workflow.py\n006_filter_composite_data_example.py\n013_thermal_example.py\n003_short_fiber_example.py\n004_get_material_properties_example.py\n012_fatigue_example.py\n005_get_layup_properties_example.py" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.rst", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.rst.html#ansys.dpf.composites.data_sources.CompositeDataSources.rst", - "title": "rst > rst > rst", - "section": "rst > rst", - "text": "CompositeDataSources.rst: DataSources\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2t.html#s2t", + "title": "s2t", + "section": "s2t", + "text": "s2t" }, { - "objectID": "api/composite_scope", - "href": "api/composite_scope.html#composite-scope", - "title": "Composite scope", - "section": "Composite scope", - "text": "CompositeScope([elements, plies, time, ...])\nProvides the composite scope.\nComposite scope\nCompositeScope" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s2t", + "title": "s2t > s2t > s2t", + "section": "s2t > s2t", + "text": "FailureModeEnum.s2t = 221\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.ply_scope", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.ply_scope.html#ply_scope", - "title": "ply_scope", - "section": "ply_scope", - "text": "ply_scope" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.failure_modes", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.failure_modes.html#failure_modes", + "title": "failure_modes", + "section": "failure_modes", + "text": "Critical failure mode of each ply.\nSequence[str]\nfailure_modes\nSequence\nstr" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.failure_modes", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.failure_modes.html#ansys.dpf.composites.sampling_point.SamplingPoint.failure_modes", + "title": "failure_modes > failure_modes > failure_modes", + "section": "failure_modes > failure_modes", + "text": "property SamplingPoint.failure_modes: Sequence[str]\n\nCritical failure mode of each ply.\n\nReturn type\n\nSequence[str]\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.find", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.find.html#find", + "title": "find", + "section": "find", + "text": "Return the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\nOptional arguments start and end are interpreted as in slice notation.\nReturn -1 on failure.\nfind" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.ply_scope", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.ply_scope.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.ply_scope", - "title": "ply_scope > ply_scope > ply_scope", - "section": "ply_scope > ply_scope", - "text": "ResultDefinitionScope.ply_scope: Sequence[str]\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.find", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.find.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.find", + "title": "find > find > find", + "section": "find > find", + "text": "FailureMeasureEnum.find(sub, [start, [end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nOptional arguments start and end are interpreted as in slice notation.\nReturn -1 on failure.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.force_global_constants", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.force_global_constants.html#force_global_constants", - "title": "force_global_constants", - "section": "force_global_constants", - "text": "Whether to use global constants instead of the material-wise properties.\nbool\nforce_global_constants\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_metadata", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_metadata.html#material_metadata", + "title": "material_metadata", + "section": "material_metadata", + "text": "DPF material ID to metadata map of the materials.\nThis data can be used to filter analysis plies\nor element layers by ply type, material name etc.\nNote: ply type is only available in DPF server version 9.0 (2025 R1 pre0) and later.\ndict[int, MaterialMetadata]\nmaterial_metadata\ndict\nint\nMaterialMetadata" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.force_global_constants", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.force_global_constants.html#ansys.dpf.composites.failure_criteria.PuckCriterion.force_global_constants", - "title": "force_global_constants > force_global_constants > force_global_constants", - "section": "force_global_constants > force_global_constants", - "text": "property PuckCriterion.force_global_constants: bool\n\nWhether to use global constants instead of the material-wise properties.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_metadata", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_metadata.html#ansys.dpf.composites.composite_model.CompositeModel.material_metadata", + "title": "material_metadata > material_metadata > material_metadata", + "section": "material_metadata > material_metadata", + "text": "property CompositeModel.material_metadata: dict[int, MaterialMetadata]\n\nDPF material ID to metadata map of the materials.\n\nThis data can be used to filter analysis plies\nor element layers by ply type, material name etc.\n\nNote: ply type is only available in DPF server version 9.0 (2025 R1 pre0) and later.\n\nReturn type\n\ndict[int, MaterialMetadata]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_margin", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_margin.html#safety_margin", - "title": "safety_margin", - "section": "safety_margin", - "text": "safety_margin" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.named_selection_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.named_selection_scope.html#named_selection_scope", + "title": "named_selection_scope", + "section": "named_selection_scope", + "text": "Assembly files that define the mapping of the labels.\nThis attribute is needed if multiple parts are assembled in Workbench or\nMechanical to map the local element and node labels to the global labels.\nnamed_selection_scope" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_margin", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_margin.html#ansys.dpf.composites.sampling_point.FailureResult.safety_margin", - "title": "safety_margin > safety_margin > safety_margin", - "section": "safety_margin > safety_margin", - "text": "FailureResult.safety_margin: float\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.named_selection_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.named_selection_scope.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.named_selection_scope", + "title": "named_selection_scope > named_selection_scope > named_selection_scope", + "section": "named_selection_scope > named_selection_scope", + "text": "ResultDefinitionScope.named_selection_scope: Sequence[str]\n\nAssembly files that define the mapping of the labels.\n\nThis attribute is needed if multiple parts are assembled in Workbench or\nMechanical to map the local element and node labels to the global labels.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.dim.html#dim", + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.dim.html#dim", "title": "dim", "section": "dim", - "text": "Specifies which formulation of the failure criterion is used.\nint\ndim\nint" + "text": "Whether the 2D or 3D formulation of the criterion is used. The latter one also supports the failure mode delamination. Use 1 for a simplified Puck criterion.\nint\ndim\n1\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.dim.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.dim", + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.dim.html#ansys.dpf.composites.failure_criteria.PuckCriterion.dim", "title": "dim > dim > dim", "section": "dim > dim", - "text": "property TsaiHillCriterion.dim: int\n\nSpecifies which formulation of the failure criterion is used.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.get_material_operators", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.get_material_operators.html#get_material_operators", - "title": "get_material_operators", - "section": "get_material_operators", - "text": "Get material properties related to operators.\nrst_data_source (DataSources) – Data source that contains a RST file. Note that multiple (distributed)\nRST files are not supported.\nengineering_data_source (DataSources) – Data source that contains the Engineering Data file.\nunit_system (Optional[Union[UnitSystem, Operator]], default: None) – Unit System\n----------\nMaterialOperators\nget_material_operators\nDataSources\nDataSources\nOptional\nUnion\nUnitSystem\nOperator\nNone\nMaterialOperators" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.get_material_operators", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.get_material_operators.html#ansys.dpf.composites.layup_info.material_operators.get_material_operators", - "title": "get_material_operators > get_material_operators > get_material_operators", - "section": "get_material_operators > get_material_operators", - "text": "ansys.dpf.composites.layup_info.material_operators.get_material_operators(rst_data_source, engineering_data_source, unit_system=None)\n\nGet material properties related to operators.\n\nParameters\n\nrst_data_source (DataSources) – Data source that contains a RST file. Note that multiple (distributed)\nRST files are not supported.\n\nengineering_data_source (DataSources) – Data source that contains the Engineering Data file.\n\nunit_system (Optional[Union[UnitSystem, Operator]], default: None) – Unit System\n\n----------\n\nReturn type\n\nMaterialOperators\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.files_are_local", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.files_are_local.html#files_are_local", - "title": "files_are_local", - "section": "files_are_local", - "text": "files_are_local" + "text": "property PuckCriterion.dim: int\n\nWhether the 2D or 3D formulation of the criterion is used. The latter one also supports the failure mode delamination. Use 1 for a simplified Puck criterion.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.files_are_local", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.files_are_local.html#ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.files_are_local", - "title": "files_are_local > files_are_local > files_are_local", - "section": "files_are_local > files_are_local", - "text": "ContinuousFiberCompositesFiles.files_are_local: bool = True\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hm", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hm.html#hm", + "title": "hm", + "section": "hm", + "text": "Whether to activate the failure evaluation regarding matrix failure.\nbool\nhm\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.dsdat", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.dsdat.html#dsdat", - "title": "dsdat", - "section": "dsdat", - "text": "dsdat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hm", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hm.html#ansys.dpf.composites.failure_criteria.HashinCriterion.hm", + "title": "hm > hm > hm", + "section": "hm > hm", + "text": "property HashinCriterion.hm: bool\n\nWhether to activate the failure evaluation regarding matrix failure.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.dsdat", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.dsdat.html#ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.dsdat", - "title": "dsdat > dsdat > dsdat", - "section": "dsdat > dsdat", - "text": "ShortFiberCompositesFiles.dsdat: str | PathLike[str]\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.html#failuremodeenum", + "title": "FailureModeEnum", + "section": "FailureModeEnum", + "text": "FailureModeEnum.emax\n\nFailureModeEnum.evm\n\nFailureModeEnum.e1\n\nFailureModeEnum.e1t\n\nFailureModeEnum.e1c\n\nFailureModeEnum.e2\n\nFailureModeEnum.e2t\n\nFailureModeEnum.e2c\n\nFailureModeEnum.e3\n\nFailureModeEnum.e3t\n\nFailureModeEnum.e3c\n\nFailureModeEnum.e12\n\nFailureModeEnum.e13\n\nFailureModeEnum.e23\n\nFailureModeEnum.smax\n\nFailureModeEnum.svm\n\nFailureModeEnum.s1\n\nFailureModeEnum.s1t\n\nFailureModeEnum.s1c\n\nFailureModeEnum.s2\n\nFailureModeEnum.s2t\n\nFailureModeEnum.s2c\n\nFailureModeEnum.s3\n\nFailureModeEnum.s3t\n\nFailureModeEnum.s3c\n\nFailureModeEnum.s12\n\nFailureModeEnum.s13\n\nFailureModeEnum.s23\n\nFailureModeEnum.cf\n\nFailureModeEnum.w\n\nFailureModeEnum.wb\n\nFailureModeEnum.wt\n\nFailureModeEnum.sc\n\nFailureModeEnum.tw\n\nFailureModeEnum.th\n\nFailureModeEnum.h\n\nFailureModeEnum.hf\n\nFailureModeEnum.hm\n\nFailureModeEnum.hd\n\nFailureModeEnum.ho\n\nFailureModeEnum.p\n\nFailureModeEnum.pf\n\nFailureModeEnum.pmA\n\nFailureModeEnum.pmB\n\nFailureModeEnum.pmC\n\nFailureModeEnum.pd\n\nFailureModeEnum.l\n\nFailureModeEnum.lft3\n\nFailureModeEnum.lfc4\n\nFailureModeEnum.lfc6\n\nFailureModeEnum.lmt1\n\nFailureModeEnum.lmc2\n\nFailureModeEnum.lmc5\n\nFailureModeEnum.c\n\nFailureModeEnum.cft\n\nFailureModeEnum.cfc\n\nFailureModeEnum.cmA\n\nFailureModeEnum.cmB\n\nFailureModeEnum.cmC\n\nFailureModeEnum.vMe\n\nFailureModeEnum.vMs\n\nFailureModeEnum.as\n\nFailureModeEnum.ap\n\nFailureModeEnum.af\n\nFailureModeEnum.ns\n\nFailureModeEnum.na\n\nFailureModeEnum\nFailureModeEnum.emax\nFailureModeEnum.evm\nFailureModeEnum.e1\nFailureModeEnum.e1t\nFailureModeEnum.e1c\nFailureModeEnum.e2\nFailureModeEnum.e2t\nFailureModeEnum.e2c\nFailureModeEnum.e3\nFailureModeEnum.e3t\nFailureModeEnum.e3c\nFailureModeEnum.e12\nFailureModeEnum.e13\nFailureModeEnum.e23\nFailureModeEnum.smax\nFailureModeEnum.svm\nFailureModeEnum.s1\nFailureModeEnum.s1t\nFailureModeEnum.s1c\nFailureModeEnum.s2\nFailureModeEnum.s2t\nFailureModeEnum.s2c\nFailureModeEnum.s3\nFailureModeEnum.s3t\nFailureModeEnum.s3c\nFailureModeEnum.s12\nFailureModeEnum.s13\nFailureModeEnum.s23\nFailureModeEnum.cf\nFailureModeEnum.w\nFailureModeEnum.wb\nFailureModeEnum.wt\nFailureModeEnum.sc\nFailureModeEnum.tw\nFailureModeEnum.th\nFailureModeEnum.h\nFailureModeEnum.hf\nFailureModeEnum.hm\nFailureModeEnum.hd\nFailureModeEnum.ho\nFailureModeEnum.p\nFailureModeEnum.pf\nFailureModeEnum.pmA\nFailureModeEnum.pmB\nFailureModeEnum.pmC\nFailureModeEnum.pd\nFailureModeEnum.l\nFailureModeEnum.lft3\nFailureModeEnum.lfc4\nFailureModeEnum.lfc6\nFailureModeEnum.lmt1\nFailureModeEnum.lmc2\nFailureModeEnum.lmc5\nFailureModeEnum.c\nFailureModeEnum.cft\nFailureModeEnum.cfc\nFailureModeEnum.cmA\nFailureModeEnum.cmB\nFailureModeEnum.cmC\nFailureModeEnum.vMe\nFailureModeEnum.vMs\nFailureModeEnum.as\nFailureModeEnum.ap\nFailureModeEnum.af\nFailureModeEnum.ns\nFailureModeEnum.na" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.interface_weakening_factor", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.interface_weakening_factor.html#interface_weakening_factor", - "title": "interface_weakening_factor", - "section": "interface_weakening_factor", - "text": "Multiplicator for the interlaminar strength if failure mode pd is active. The default is 0.8.\nfloat\ninterface_weakening_factor\npd\n0.8\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.html#ansys.dpf.composites.failure_criteria.FailureModeEnum", + "title": "FailureModeEnum > FailureModeEnum > FailureModeEnum", + "section": "FailureModeEnum > FailureModeEnum", + "text": "class ansys.dpf.composites.failure_criteria.FailureModeEnum(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nFailureModeEnum.emax\n\n\n\nFailureModeEnum.evm\n\n\n\nFailureModeEnum.e1\n\n\n\nFailureModeEnum.e1t\n\n\n\nFailureModeEnum.e1c\n\n\n\nFailureModeEnum.e2\n\n\n\nFailureModeEnum.e2t\n\n\n\nFailureModeEnum.e2c\n\n\n\nFailureModeEnum.e3\n\n\n\nFailureModeEnum.e3t\n\n\n\nFailureModeEnum.e3c\n\n\n\nFailureModeEnum.e12\n\n\n\nFailureModeEnum.e13\n\n\n\nFailureModeEnum.e23\n\n\n\nFailureModeEnum.smax\n\n\n\nFailureModeEnum.svm\n\n\n\nFailureModeEnum.s1\n\n\n\nFailureModeEnum.s1t\n\n\n\nFailureModeEnum.s1c\n\n\n\nFailureModeEnum.s2\n\n\n\nFailureModeEnum.s2t\n\n\n\nFailureModeEnum.s2c\n\n\n\nFailureModeEnum.s3\n\n\n\nFailureModeEnum.s3t\n\n\n\nFailureModeEnum.s3c\n\n\n\nFailureModeEnum.s12\n\n\n\nFailureModeEnum.s13\n\n\n\nFailureModeEnum.s23\n\n\n\nFailureModeEnum.cf\n\n\n\nFailureModeEnum.w\n\n\n\nFailureModeEnum.wb\n\n\n\nFailureModeEnum.wt\n\n\n\nFailureModeEnum.sc\n\n\n\nFailureModeEnum.tw\n\n\n\nFailureModeEnum.th\n\n\n\nFailureModeEnum.h\n\n\n\nFailureModeEnum.hf\n\n\n\nFailureModeEnum.hm\n\n\n\nFailureModeEnum.hd\n\n\n\nFailureModeEnum.ho\n\n\n\nFailureModeEnum.p\n\n\n\nFailureModeEnum.pf\n\n\n\nFailureModeEnum.pmA\n\n\n\nFailureModeEnum.pmB\n\n\n\nFailureModeEnum.pmC\n\n\n\nFailureModeEnum.pd\n\n\n\nFailureModeEnum.l\n\n\n\nFailureModeEnum.lft3\n\n\n\nFailureModeEnum.lfc4\n\n\n\nFailureModeEnum.lfc6\n\n\n\nFailureModeEnum.lmt1\n\n\n\nFailureModeEnum.lmc2\n\n\n\nFailureModeEnum.lmc5\n\n\n\nFailureModeEnum.c\n\n\n\nFailureModeEnum.cft\n\n\n\nFailureModeEnum.cfc\n\n\n\nFailureModeEnum.cmA\n\n\n\nFailureModeEnum.cmB\n\n\n\nFailureModeEnum.cmC\n\n\n\nFailureModeEnum.vMe\n\n\n\nFailureModeEnum.vMs\n\n\n\nFailureModeEnum.as\n\n\n\nFailureModeEnum.ap\n\n\n\nFailureModeEnum.af\n\n\n\nFailureModeEnum.ns\n\n\n\nFailureModeEnum.na\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.interface_weakening_factor", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.interface_weakening_factor.html#ansys.dpf.composites.failure_criteria.PuckCriterion.interface_weakening_factor", - "title": "interface_weakening_factor > interface_weakening_factor > interface_weakening_factor", - "section": "interface_weakening_factor > interface_weakening_factor", - "text": "property PuckCriterion.interface_weakening_factor: float\n\nMultiplicator for the interlaminar strength if failure mode pd is active. The default is 0.8.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.data_sources", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.data_sources.html#data_sources", + "title": "data_sources", + "section": "data_sources", + "text": "Composite data sources.\nCompositeDataSources\ndata_sources\nCompositeDataSources" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.evm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.evm.html#evm", - "title": "evm", - "section": "evm", - "text": "evm" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.data_sources", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.data_sources.html#ansys.dpf.composites.composite_model.CompositeModel.data_sources", + "title": "data_sources > data_sources > data_sources", + "section": "data_sources > data_sources", + "text": "property CompositeModel.data_sources: CompositeDataSources\n\nComposite data sources.\n\nReturn type\n\nCompositeDataSources\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.evm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.evm.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.evm", - "title": "evm > evm > evm", - "section": "evm > evm", - "text": "FailureModeEnum.evm = 102\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.THICKNESS", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.THICKNESS.html#thickness", + "title": "THICKNESS", + "section": "THICKNESS", + "text": "THICKNESS" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MIN", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MIN.html#min", - "title": "MIN", - "section": "MIN", - "text": "MIN" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.THICKNESS", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.THICKNESS.html#ansys.dpf.composites.layup_info.LayupProperty.THICKNESS", + "title": "THICKNESS > THICKNESS > THICKNESS", + "section": "THICKNESS > THICKNESS", + "text": "LayupProperty.THICKNESS = 2\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MIN", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MIN.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MIN", - "title": "MIN > MIN > MIN", - "section": "MIN > MIN", - "text": "SpotReductionStrategy.MIN = 'MIN'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.active.html#active", + "title": "active", + "section": "active", + "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_json.html#to_json", - "title": "to_json", - "section": "to_json", - "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.active.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property TsaiHillCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_json.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_json", - "title": "to_json > to_json > to_json", - "section": "to_json > to_json", - "text": "ShearCrimpingCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id.html#get_layer_index_by_element_id", + "title": "get_layer_index_by_element_id", + "section": "get_layer_index_by_element_id", + "text": "Get the layer index for the analysis ply in a given element.\nelement_id (int) – Element Id/Label\nOptional[int64]\nget_layer_index_by_element_id\nint\nOptional\nint64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.get_element_info", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.get_element_info.html#get_element_info", - "title": "get_element_info", - "section": "get_element_info", - "text": "Get ElementInfo for a given element id.\nelement_id (int) – Element Id/Label\nReturns None if element type is not supported\nOptional[ElementInfo]\nget_element_info\nElementInfo\nint" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id.html#ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id", + "title": "get_layer_index_by_element_id > get_layer_index_by_element_id > get_layer_index_by_element_id", + "section": "get_layer_index_by_element_id > get_layer_index_by_element_id", + "text": "AnalysisPlyInfoProvider.get_layer_index_by_element_id(element_id)\n\nGet the layer index for the analysis ply in a given element.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[int64]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.get_element_info", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.get_element_info.html#ansys.dpf.composites.layup_info.ElementInfoProvider.get_element_info", - "title": "get_element_info > get_element_info > get_element_info", - "section": "get_element_info > get_element_info", - "text": "ElementInfoProvider.get_element_info(element_id)\n\nGet ElementInfo for a given element id.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturns\n\nReturns None if element type is not supported\n\nReturn type\n\nOptional[ElementInfo]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12.html#e12", + "title": "e12", + "section": "e12", + "text": "Whether to activate the failure evaluation regarding the in-plane shear strain e12.\nbool\ne12\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R33", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R33.html#hill_yield_criterion_r33", - "title": "Hill_Yield_Criterion_R33", - "section": "Hill_Yield_Criterion_R33", - "text": "Hill_Yield_Criterion_R33" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12", + "title": "e12 > e12 > e12", + "section": "e12 > e12", + "text": "property MaxStrainCriterion.e12: bool\n\nWhether to activate the failure evaluation regarding the in-plane shear strain e12.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R33", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R33.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R33", - "title": "Hill_Yield_Criterion_R33 > Hill_Yield_Criterion_R33 > Hill_Yield_Criterion_R33", - "section": "Hill_Yield_Criterion_R33 > Hill_Yield_Criterion_R33", - "text": "MaterialProperty.Hill_Yield_Criterion_R33: str = 'yield_stress_ratio_z_hill_criterion'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aZ", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aZ.html#thermal_expansion_coefficients_az", + "title": "Thermal_Expansion_Coefficients_aZ", + "section": "Thermal_Expansion_Coefficients_aZ", + "text": "Thermal_Expansion_Coefficients_aZ" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_layup_operator", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_layup_operator.html#get_layup_operator", - "title": "get_layup_operator", - "section": "get_layup_operator", - "text": "Get the lay-up operator.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nOperator\nget_layup_operator\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nOperator" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aZ", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aZ.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aZ", + "title": "Thermal_Expansion_Coefficients_aZ > Thermal_Expansion_Coefficients_aZ > Thermal_Expansion_Coefficients_aZ", + "section": "Thermal_Expansion_Coefficients_aZ > Thermal_Expansion_Coefficients_aZ", + "text": "MaterialProperty.Thermal_Expansion_Coefficients_aZ: str = 'coefficient_thermal_expansion_z'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_layup_operator", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_layup_operator.html#ansys.dpf.composites.composite_model.CompositeModel.get_layup_operator", - "title": "get_layup_operator > get_layup_operator > get_layup_operator", - "section": "get_layup_operator > get_layup_operator", - "text": "CompositeModel.get_layup_operator(composite_definition_label=None)\n\nGet the lay-up operator.\n\nParameters\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MAX", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MAX.html#max", + "title": "MAX", + "section": "MAX", + "text": "MAX" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_json.html#to_json", - "title": "to_json", - "section": "to_json", - "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MAX", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MAX.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MAX", + "title": "MAX > MAX > MAX", + "section": "MAX > MAX", + "text": "SpotReductionStrategy.MAX = 'MAX'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_json.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_json", - "title": "to_json > to_json > to_json", - "section": "to_json > to_json", - "text": "FaceSheetWrinklingCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.TOP", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.TOP.html#top", - "title": "TOP", - "section": "TOP", - "text": "TOP" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "FaceSheetWrinklingCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.TOP", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.TOP.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.TOP", - "title": "TOP > TOP > TOP", - "section": "TOP > TOP", - "text": "SpotReductionStrategy.TOP = 'TOP'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.force_global_strain_limits", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.force_global_strain_limits.html#force_global_strain_limits", + "title": "force_global_strain_limits", + "section": "force_global_strain_limits", + "text": "Whether to use one set of global strain limits instead of the strain limits of the materials.\nbool\nforce_global_strain_limits\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmb", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmb.html#wf_pmb", - "title": "wf_pmb", - "section": "wf_pmb", - "text": "Weighting factor of the matrix failure (pmb) mode.\nfloat\nwf_pmb\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.force_global_strain_limits", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.force_global_strain_limits.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.force_global_strain_limits", + "title": "force_global_strain_limits > force_global_strain_limits > force_global_strain_limits", + "section": "force_global_strain_limits > force_global_strain_limits", + "text": "property MaxStrainCriterion.force_global_strain_limits: bool\n\nWhether to use one set of global strain limits instead of the strain limits of the materials.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmb", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmb.html#ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmb", - "title": "wf_pmb > wf_pmb > wf_pmb", - "section": "wf_pmb > wf_pmb", - "text": "property PuckCriterion.wf_pmb: float\n\nWeighting factor of the matrix failure (pmb) mode.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s23", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s23.html#s23", - "title": "s23", - "section": "s23", - "text": "Out-of-plane shear stresses s23 of each ply.\nndarray[Any, dtype[float64]]\ns23\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "CuntzeCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s23", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s23.html#ansys.dpf.composites.sampling_point.SamplingPoint.s23", - "title": "s23 > s23 > s23", - "section": "s23 > s23", - "text": "property SamplingPoint.s23: ndarray[Any, dtype[float64]]\n\nOut-of-plane shear stresses s23 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/composite_scope", + "href": "api/composite_scope.html#composite-scope", + "title": "Composite scope", + "section": "Composite scope", + "text": "CompositeScope([elements, plies, time, ...])\nProvides the composite scope.\nComposite scope\nCompositeScope" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1t.html#s1t", - "title": "s1t", - "section": "s1t", - "text": "s1t" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.html#samplingpointfigure", + "title": "SamplingPointFigure", + "section": "SamplingPointFigure", + "text": "Provides the sampling point figure and axes.\nSamplingPointFigure.figure\n\nSamplingPointFigure.axes\n\nSamplingPointFigure\nSamplingPointFigure.figure\nSamplingPointFigure.axes" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s1t", - "title": "s1t > s1t > s1t", - "section": "s1t > s1t", - "text": "FailureModeEnum.s1t = 211\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.html#ansys.dpf.composites.sampling_point.SamplingPointFigure", + "title": "SamplingPointFigure > SamplingPointFigure > SamplingPointFigure", + "section": "SamplingPointFigure > SamplingPointFigure", + "text": "class ansys.dpf.composites.sampling_point.SamplingPointFigure(figure, axes)\n\nProvides the sampling point figure and axes.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nSamplingPointFigure.figure\n\n\n\nSamplingPointFigure.axes\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.html#layuppropertiesprovider", - "title": "LayupPropertiesProvider", - "section": "LayupPropertiesProvider", - "text": "Provider for lay-up properties.\nSome properties such as layered dpf_material_ids and\ninformation about the element type are available\nthrough the ElementInfoProvider.\nlayup_provider (Operator) – Use add_layup_info_to_mesh() to obtain a lay-up provider.\nmesh (MeshedRegion)\nLayupPropertiesProvider.get_analysis_plies(...)\nGet analysis ply names.\nLayupPropertiesProvider.get_element_laminate_offset(...)\nGet laminate offset of element.\nLayupPropertiesProvider.get_layer_angles(...)\nGet angles for all layers.\nLayupPropertiesProvider.get_layer_shear_angles(...)\nGet shear angle for all layers.\nLayupPropertiesProvider.get_layer_thicknesses(...)\nGet thicknesses for all layers.\nLayupPropertiesProvider\nElementInfoProvider\nOperator\nadd_layup_info_to_mesh()\nMeshedRegion\nLayupPropertiesProvider.get_analysis_plies\nLayupPropertiesProvider.get_element_laminate_offset\nLayupPropertiesProvider.get_layer_angles\nLayupPropertiesProvider.get_layer_shear_angles\nLayupPropertiesProvider.get_layer_thicknesses" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.html#failureoutput", + "title": "FailureOutput", + "section": "FailureOutput", + "text": "Provides failure output types.\nThe enum value corresponds to the index in the fields container.\nFailureOutput.FAILURE_MODE\n\nFailureOutput.FAILURE_VALUE\n\nFailureOutput.MAX_LAYER_INDEX\n\nFailureOutput.FAILURE_MODE_REF_SURFACE\n\nFailureOutput.FAILURE_VALUE_REF_SURFACE\n\nFailureOutput.MAX_GLOBAL_LAYER_IN_STACK\n\nFailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT\n\nFailureOutput.MAX_SOLID_ELEMENT_ID\n\nFailureOutput\nFailureOutput.FAILURE_MODE\nFailureOutput.FAILURE_VALUE\nFailureOutput.MAX_LAYER_INDEX\nFailureOutput.FAILURE_MODE_REF_SURFACE\nFailureOutput.FAILURE_VALUE_REF_SURFACE\nFailureOutput.MAX_GLOBAL_LAYER_IN_STACK\nFailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT\nFailureOutput.MAX_SOLID_ELEMENT_ID" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider", - "title": "LayupPropertiesProvider > LayupPropertiesProvider > LayupPropertiesProvider", - "section": "LayupPropertiesProvider > LayupPropertiesProvider", - "text": "class ansys.dpf.composites.layup_info.LayupPropertiesProvider(layup_provider, mesh)\n\nProvider for lay-up properties.\n\nSome properties such as layered dpf_material_ids and\ninformation about the element type are available\nthrough the ElementInfoProvider.\n\nParameters\n\nlayup_provider (Operator) – Use add_layup_info_to_mesh() to obtain a lay-up provider.\n\nmesh (MeshedRegion)\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nLayupPropertiesProvider.get_analysis_plies(...)\n\nGet analysis ply names.\n\nLayupPropertiesProvider.get_element_laminate_offset(...)\n\nGet laminate offset of element.\n\nLayupPropertiesProvider.get_layer_angles(...)\n\nGet angles for all layers.\n\nLayupPropertiesProvider.get_layer_shear_angles(...)\n\nGet shear angle for all layers.\n\nLayupPropertiesProvider.get_layer_thicknesses(...)\n\nGet thicknesses for all layers.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.html#ansys.dpf.composites.constants.FailureOutput", + "title": "FailureOutput > FailureOutput > FailureOutput", + "section": "FailureOutput > FailureOutput", + "text": "class ansys.dpf.composites.constants.FailureOutput(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides failure output types.\n\nThe enum value corresponds to the index in the fields container.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nFailureOutput.FAILURE_MODE\n\n\n\nFailureOutput.FAILURE_VALUE\n\n\n\nFailureOutput.MAX_LAYER_INDEX\n\n\n\nFailureOutput.FAILURE_MODE_REF_SURFACE\n\n\n\nFailureOutput.FAILURE_VALUE_REF_SURFACE\n\n\n\nFailureOutput.MAX_GLOBAL_LAYER_IN_STACK\n\n\n\nFailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT\n\n\n\nFailureOutput.MAX_SOLID_ELEMENT_ID\n\n\n\n" }, { - "objectID": "examples/gallery_examples/013_thermal_example", - "href": "examples/gallery_examples/013_thermal_example.html#thermal-analysis", - "title": "Thermal analysis", - "section": "Thermal analysis", - "text": "This example shows how to evaluate a thermal analysis.\nThe simulation’s thermal analysis results are also\nthe input of a structural analysis.\nTherefore, the RST file contains temperature and structural results.\nThe example imitates a printed circuit board (PCB) that was\nmodeled with Ansys Composites PrepPost (ACP), using the solid model feature to\ngenerate the volume mesh.\nDescriptions of how to extract temperatures for a specific ply\nand material are provided.\nWhen using a Workbench project,\nuse the get_composite_files_from_workbench_result_folder()\nmethod to obtain the input files.\nThermal analysis\nget_composite_files_from_workbench_result_folder()" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b21", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b21.html#b21", + "title": "b21", + "section": "b21", + "text": "In-plane shear friction coefficient. The default is 0.2.\nfloat\nb21\n0.2\nfloat" }, { - "objectID": "examples/gallery_examples/013_thermal_example", - "href": "examples/gallery_examples/013_thermal_example.html#set-up-analysis", - "title": "Thermal analysis > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of loading the required modules, connecting to the\nDPF server, and retrieving the example files.\nSet up analysis" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b21", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b21.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.b21", + "title": "b21 > b21 > b21", + "section": "b21 > b21", + "text": "property CuntzeCriterion.b21: float\n\nIn-plane shear friction coefficient. The default is 0.2.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/013_thermal_example", - "href": "examples/gallery_examples/013_thermal_example.html#initialize-the-model", - "title": "Thermal analysis > Initialize the model", - "section": "Initialize the model", - "text": "Initialize the composite model with the composite files and server.\nThe model provides access to the mesh, results, lay-up, and materials.\nInitialize the model" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.html#larccriterion", + "title": "LaRCCriterion", + "section": "LaRCCriterion", + "text": "Defines the LaRC failure criterion for UD reinforced materials.\nlft (bool, default: True) – Whether to activate the failure evaluation regarding tension in fiber direction.\nlfc (bool, default: True) – Whether to activate the failure evaluation regarding compression in fiber direction.\nlmt (bool, default: True) – Whether to activate the failure evaluation of the matrix due to tension.\nlmc (bool, default: True) – Whether to activate the failure evaluation of the matrix due to compression.\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used. 2D is equivalent to LaRC03, and 3D is equivalent to LaRC04.\nwf_lft (float, default: 1.0) – Weighting factor of fiber failure due to tension (lft).\nwf_lfc (float, default: 1.0) – Weighting factor of fiber failure due to compression (lfc).\nwf_lmt (float, default: 1.0) – Weighting factor of matrix failure due to tension (lmt).\nwf_lmc (float, default: 1.0) – Weighting factor of matrix failure due to compression (lmc).\nLaRCCriterion.to_dict()\n\nLaRCCriterion.to_json()\n\nLaRCCriterion.active\nThe failure criterion is suppressed if active is False.\nLaRCCriterion.dim\nWhether the 2D or 3D formulation of the criterion is used.\nLaRCCriterion.lfc\nWhether to activate the failure evaluation regarding compression in fiber direction.\nLaRCCriterion.lft\nWhether to activate the failure evaluation regarding tension in fiber direction.\nLaRCCriterion.lmc\nWhether to activate the failure evaluation of the matrix due to compression.\nLaRCCriterion.lmt\nWhether to activate the failure evaluation of the matrix due to tension.\nLaRCCriterion.name\nName of the failure criterion.\nLaRCCriterion.wf_lfc\nWeighting factor of fiber failure due to compression (lfc).\nLaRCCriterion.wf_lft\nWeighting factor of fiber failure due to tension (lft).\nLaRCCriterion.wf_lmc\nWeighting factor of matrix failure due to compression (lmc).\nLaRCCriterion.wf_lmt\nWeighting factor of matrix failure due to tension (lmt).\nLaRCCriterion\nbool\nTrue\nbool\nTrue\nbool\nTrue\nbool\nTrue\nint\n2\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nLaRCCriterion.to_dict\nLaRCCriterion.to_json\nLaRCCriterion.active\nLaRCCriterion.dim\nLaRCCriterion.lfc\nLaRCCriterion.lft\nLaRCCriterion.lmc\nLaRCCriterion.lmt\nLaRCCriterion.name\nLaRCCriterion.wf_lfc\nLaRCCriterion.wf_lft\nLaRCCriterion.wf_lmc\nLaRCCriterion.wf_lmt" }, { - "objectID": "examples/gallery_examples/013_thermal_example", - "href": "examples/gallery_examples/013_thermal_example.html#get-temperature-results", - "title": "Thermal analysis > Get temperature results", - "section": "Get temperature results", - "text": "The temperatures are stored under structural_temperature.\nGet temperature results\nstructural_temperature" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.html#ansys.dpf.composites.failure_criteria.LaRCCriterion", + "title": "LaRCCriterion > LaRCCriterion > LaRCCriterion", + "section": "LaRCCriterion > LaRCCriterion", + "text": "class ansys.dpf.composites.failure_criteria.LaRCCriterion(*, lft=True, lfc=True, lmt=True, lmc=True, dim=2, wf_lft=1.0, wf_lfc=1.0, wf_lmt=1.0, wf_lmc=1.0)\n\nDefines the LaRC failure criterion for UD reinforced materials.\n\nParameters\n\nlft (bool, default: True) – Whether to activate the failure evaluation regarding tension in fiber direction.\n\nlfc (bool, default: True) – Whether to activate the failure evaluation regarding compression in fiber direction.\n\nlmt (bool, default: True) – Whether to activate the failure evaluation of the matrix due to tension.\n\nlmc (bool, default: True) – Whether to activate the failure evaluation of the matrix due to compression.\n\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used. 2D is equivalent to LaRC03, and 3D is equivalent to LaRC04.\n\nwf_lft (float, default: 1.0) – Weighting factor of fiber failure due to tension (lft).\n\nwf_lfc (float, default: 1.0) – Weighting factor of fiber failure due to compression (lfc).\n\nwf_lmt (float, default: 1.0) – Weighting factor of matrix failure due to tension (lmt).\n\nwf_lmc (float, default: 1.0) – Weighting factor of matrix failure due to compression (lmc).\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nLaRCCriterion.to_dict()\n\n\n\nLaRCCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nLaRCCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nLaRCCriterion.dim\n\nWhether the 2D or 3D formulation of the criterion is used.\n\nLaRCCriterion.lfc\n\nWhether to activate the failure evaluation regarding compression in fiber direction.\n\nLaRCCriterion.lft\n\nWhether to activate the failure evaluation regarding tension in fiber direction.\n\nLaRCCriterion.lmc\n\nWhether to activate the failure evaluation of the matrix due to compression.\n\nLaRCCriterion.lmt\n\nWhether to activate the failure evaluation of the matrix due to tension.\n\nLaRCCriterion.name\n\nName of the failure criterion.\n\nLaRCCriterion.wf_lfc\n\nWeighting factor of fiber failure due to compression (lfc).\n\nLaRCCriterion.wf_lft\n\nWeighting factor of fiber failure due to tension (lft).\n\nLaRCCriterion.wf_lmc\n\nWeighting factor of matrix failure due to compression (lmc).\n\nLaRCCriterion.wf_lmt\n\nWeighting factor of matrix failure due to tension (lmt).\n\n" }, { - "objectID": "examples/gallery_examples/013_thermal_example", - "href": "examples/gallery_examples/013_thermal_example.html#get-ply-results", - "title": "Thermal analysis > Get ply results", - "section": "Get ply results", - "text": "Extract the ply-wise results by passing the ply name\nto the function get_ply_wise_data().\nGet ply results\nget_ply_wise_data()" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "examples/gallery_examples/013_thermal_example", - "href": "examples/gallery_examples/013_thermal_example.html#get-results-by-material", - "title": "Thermal analysis > Get results by material", - "section": "Get results by material", - "text": "You can filter the results by material.\nIn this example, the element-wise maximum temperature\nis extracted for the material Honeycomb Aluminum Alloy.\nTotal running time of the script: (0 minutes 5.676 seconds)\nDownload Jupyter notebook: 013_thermal_example.ipynb\nDownload Python source code: 013_thermal_example.py\nDownload zipped: 013_thermal_example.zip\nGallery generated by Sphinx-Gallery\nGet results by material\nDownload Jupyter notebook: 013_thermal_example.ipynb\nDownload Python source code: 013_thermal_example.py\nDownload zipped: 013_thermal_example.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.name.html#ansys.dpf.composites.failure_criteria.HashinCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property HashinCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt.html#stress_limits_yt", - "title": "Stress_Limits_Yt", - "section": "Stress_Limits_Yt", - "text": "Stress_Limits_Yt" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removeprefix", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removeprefix.html#removeprefix", + "title": "removeprefix", + "section": "removeprefix", + "text": "Return a str with the given prefix string removed if present.\nIf the string starts with the prefix string, return string[len(prefix):].\nOtherwise, return a copy of the original string.\nremoveprefix" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt", - "title": "Stress_Limits_Yt > Stress_Limits_Yt > Stress_Limits_Yt", - "section": "Stress_Limits_Yt > Stress_Limits_Yt", - "text": "MaterialProperty.Stress_Limits_Yt: str = 'stress_tensile_y_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removeprefix", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removeprefix.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.removeprefix", + "title": "removeprefix > removeprefix > removeprefix", + "section": "removeprefix > removeprefix", + "text": "FailureMeasureEnum.removeprefix(prefix, /)\n\nReturn a str with the given prefix string removed if present.\n\nIf the string starts with the prefix string, return string[len(prefix):].\nOtherwise, return a copy of the original string.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.html#layerproperty", - "title": "LayerProperty", - "section": "LayerProperty", - "text": "Provides the layer properties available.\nLayerProperty.THICKNESSES\n\nLayerProperty.ANGLES\n\nLayerProperty.SHEAR_ANGLES\n\nLayerProperty\nLayerProperty.THICKNESSES\nLayerProperty.ANGLES\nLayerProperty.SHEAR_ANGLES" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_s", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_s.html#puck_constants_s", + "title": "Puck_Constants_s", + "section": "Puck_Constants_s", + "text": "Puck_Constants_s" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.html#ansys.dpf.composites.layup_info.LayerProperty", - "title": "LayerProperty > LayerProperty > LayerProperty", - "section": "LayerProperty > LayerProperty", - "text": "class ansys.dpf.composites.layup_info.LayerProperty(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides the layer properties available.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nLayerProperty.THICKNESSES\n\n\n\nLayerProperty.ANGLES\n\n\n\nLayerProperty.SHEAR_ANGLES\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_s", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_s.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_s", + "title": "Puck_Constants_s > Puck_Constants_s > Puck_Constants_s", + "section": "Puck_Constants_s > Puck_Constants_s", + "text": "MaterialProperty.Puck_Constants_s: str = 'degradation_parameter_s_puck_constants'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e12", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e12.html#e12", - "title": "e12", - "section": "e12", - "text": "In-plane shear strains e12 of each ply.\nndarray[Any, dtype[float64]]\ne12\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pf.html#pf", + "title": "pf", + "section": "pf", + "text": "pf" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e12", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e12.html#ansys.dpf.composites.sampling_point.SamplingPoint.e12", - "title": "e12 > e12 > e12", - "section": "e12 > e12", - "text": "property SamplingPoint.e12: ndarray[Any, dtype[float64]]\n\nIn-plane shear strains e12 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pf.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.pf", + "title": "pf > pf > pf", + "section": "pf > pf", + "text": "FailureModeEnum.pf = 801\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxy", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxy.html#stress_limits_sxy", - "title": "Stress_Limits_Sxy", - "section": "Stress_Limits_Sxy", - "text": "Stress_Limits_Sxy" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE_REF_SURFACE", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE_REF_SURFACE.html#failure_mode_ref_surface", + "title": "FAILURE_MODE_REF_SURFACE", + "section": "FAILURE_MODE_REF_SURFACE", + "text": "FAILURE_MODE_REF_SURFACE" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE_REF_SURFACE", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE_REF_SURFACE.html#ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE_REF_SURFACE", + "title": "FAILURE_MODE_REF_SURFACE > FAILURE_MODE_REF_SURFACE > FAILURE_MODE_REF_SURFACE", + "section": "FAILURE_MODE_REF_SURFACE > FAILURE_MODE_REF_SURFACE", + "text": "FailureOutput.FAILURE_MODE_REF_SURFACE = 3\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxy", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxy.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxy", - "title": "Stress_Limits_Sxy > Stress_Limits_Sxy > Stress_Limits_Sxy", - "section": "Stress_Limits_Sxy > Stress_Limits_Sxy", - "text": "MaterialProperty.Stress_Limits_Sxy: str = 'stress_shear_xy'\n\n" + "objectID": "api/server_helpers", + "href": "api/server_helpers.html#server-helpers", + "title": "Server helpers", + "section": "Server helpers", + "text": "load_composites_plugin(server[, ansys_path])\nLoad composites plugins and its dependencies.\nconnect_to_or_start_server([port, ip, ...])\nConnect to or start a DPF server with the DPF Composites plugin loaded.\nupload_continuous_fiber_composite_files_to_server(...)\nUpload continuous fiber composites files to server.\nupload_short_fiber_composite_files_to_server(...)\nUpload short fiber composites files to server.\nServer helpers\nload_composites_plugin\nconnect_to_or_start_server\nupload_continuous_fiber_composite_files_to_server\nupload_short_fiber_composite_files_to_server" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply", - "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply.html#get_selected_indices_by_analysis_ply", - "title": "get_selected_indices_by_analysis_ply", - "section": "get_selected_indices_by_analysis_ply", - "text": "Get selected indices by analysis ply.\nSelects all indices that are in a layer with the given analysis ply\nanalysis_ply_info_provider (AnalysisPlyInfoProvider) – Provider for the analysis ply information.\nelement_info (ElementInfo) – Lay-up information for the element.\nSelected elementary indices.\nNDArray[int64]\nget_selected_indices_by_analysis_ply" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc6", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc6.html#lfc6", + "title": "lfc6", + "section": "lfc6", + "text": "lfc6" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply", - "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply.html#ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply", - "title": "get_selected_indices_by_analysis_ply > get_selected_indices_by_analysis_ply > get_selected_indices_by_analysis_ply", - "section": "get_selected_indices_by_analysis_ply > get_selected_indices_by_analysis_ply", - "text": "ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply(analysis_ply_info_provider, element_info)\n\nGet selected indices by analysis ply.\n\nSelects all indices that are in a layer with the given analysis ply\n\nParameters\n\nanalysis_ply_info_provider (AnalysisPlyInfoProvider) – Provider for the analysis ply information.\n\nelement_info (ElementInfo) – Lay-up information for the element.\n\nReturns\n\nSelected elementary indices.\n\nReturn type\n\nNDArray[int64]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc6", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc6.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc6", + "title": "lfc6 > lfc6 > lfc6", + "section": "lfc6 > lfc6", + "text": "FailureModeEnum.lfc6 = 903\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the combined failure criterion.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vme", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vme.html#wf_vme", + "title": "wf_vme", + "section": "wf_vme", + "text": "Weighting factor of the strain criterion (vme).\nfloat\nwf_vme\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.name.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property CombinedFailureCriterion.name: str\n\nName of the combined failure criterion.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vme", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vme.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vme", + "title": "wf_vme > wf_vme > wf_vme", + "section": "wf_vme > wf_vme", + "text": "property VonMisesCriterion.wf_vme: float\n\nWeighting factor of the strain criterion (vme).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos.html#p21_pos", - "title": "p21_pos", - "section": "p21_pos", - "text": "Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.\nfloat\np21_pos\nfloat" + "objectID": "examples/gallery_examples/008_assembly_example", + "href": "examples/gallery_examples/008_assembly_example.html#postprocess-an-assembly", + "title": "Postprocess an assembly", + "section": "Postprocess an assembly", + "text": "This example shows how to postprocess an assembly with multiple composite parts.\nThe assembly consists of a shell and solid composite model. The\nComposite Model class is used to access\nthe data of the different parts.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nPostprocess an assembly\nComposite Model\ncomposite_files_from_workbench_harmonic_analysis()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos.html#ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos", - "title": "p21_pos > p21_pos > p21_pos", - "section": "p21_pos > p21_pos", - "text": "property PuckCriterion.p21_pos: float\n\nGlobal inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/008_assembly_example", + "href": "examples/gallery_examples/008_assembly_example.html#set-up-analysis", + "title": "Postprocess an assembly > Set up analysis", + "section": "Set up analysis", + "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nSet up analysis" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xy", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xy.html#tsai_wu_constant_xy", - "title": "Tsai_Wu_Constant_xy", - "section": "Tsai_Wu_Constant_xy", - "text": "Tsai_Wu_Constant_xy" + "objectID": "examples/gallery_examples/008_assembly_example", + "href": "examples/gallery_examples/008_assembly_example.html#configure-combined-failure-criterion", + "title": "Postprocess an assembly > Configure combined failure criterion", + "section": "Configure combined failure criterion", + "text": "Configure the combined failure crition.\nConfigure combined failure criterion" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xy", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xy.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xy", - "title": "Tsai_Wu_Constant_xy > Tsai_Wu_Constant_xy > Tsai_Wu_Constant_xy", - "section": "Tsai_Wu_Constant_xy > Tsai_Wu_Constant_xy", - "text": "MaterialProperty.Tsai_Wu_Constant_xy: str = 'coupling_coef_xy_tsai_wu'\n\n" + "objectID": "examples/gallery_examples/008_assembly_example", + "href": "examples/gallery_examples/008_assembly_example.html#set-up-model", + "title": "Postprocess an assembly > Set up model", + "section": "Set up model", + "text": "Set up the composite model.\nSet up model" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_m", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_m.html#puck_constants_m", - "title": "Puck_Constants_m", - "section": "Puck_Constants_m", - "text": "Puck_Constants_m" + "objectID": "examples/gallery_examples/008_assembly_example", + "href": "examples/gallery_examples/008_assembly_example.html#plot-irf", + "title": "Postprocess an assembly > Plot IRF", + "section": "Plot IRF", + "text": "Plot the maximum IRF per (solid) element.\nPlot IRF" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_m", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_m.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_m", - "title": "Puck_Constants_m > Puck_Constants_m > Puck_Constants_m", - "section": "Puck_Constants_m > Puck_Constants_m", - "text": "MaterialProperty.Puck_Constants_m: str = 'degradation_parameter_m_puck_constants'\n\n" + "objectID": "examples/gallery_examples/008_assembly_example", + "href": "examples/gallery_examples/008_assembly_example.html#plot-irf-on-the-reference-surface", + "title": "Postprocess an assembly > Plot IRF on the reference surface", + "section": "Plot IRF on the reference surface", + "text": "Plot the maximum IRF on the reference surface\nPlot IRF on the reference surface" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc.html#cmc", - "title": "cmc", - "section": "cmc", - "text": "Activates the failure evaluation of the matrix due to compression or shear.\nbool\ncmc\nbool" + "objectID": "examples/gallery_examples/008_assembly_example", + "href": "examples/gallery_examples/008_assembly_example.html#get-element-information", + "title": "Postprocess an assembly > Get element information", + "section": "Get element information", + "text": "In the assembly, two composite definitions exist: one with a “shell” label\nand one with a “solid” label. For DPF Server versions earlier than 7.0,\nthe lay-up properties must be queried with the correct composite definition label. The code\nfollowing gets element information for all layered elements.\nFor DPF Server versions 7.0 and later, element information can be retrieved directly.\nTotal running time of the script: (0 minutes 5.202 seconds)\nDownload Jupyter notebook: 008_assembly_example.ipynb\nDownload Python source code: 008_assembly_example.py\nDownload zipped: 008_assembly_example.zip\nGallery generated by Sphinx-Gallery\nGet element information\nDownload Jupyter notebook: 008_assembly_example.ipynb\nDownload Python source code: 008_assembly_example.py\nDownload zipped: 008_assembly_example.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc", - "title": "cmc > cmc > cmc", - "section": "cmc > cmc", - "text": "property CuntzeCriterion.cmc: bool\n\nActivates the failure evaluation of the matrix due to compression or shear.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/010_harmonic_example", + "href": "examples/gallery_examples/010_harmonic_example.html#postprocess-a-harmonic-analysis", + "title": "Postprocess a harmonic analysis", + "section": "Postprocess a harmonic analysis", + "text": "This example shows how to evaluate failure criteria for a harmonic simulation.\nIt shows how to create a phase sweep to compute the maximum IRF in the frequency-phase\nspace and shows how to identify the critical failure mode and the critical layer.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nPostprocess a harmonic analysis\ncomposite_files_from_workbench_harmonic_analysis()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.ANGLE", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.ANGLE.html#angle", - "title": "ANGLE", - "section": "ANGLE", - "text": "ANGLE" + "objectID": "examples/gallery_examples/010_harmonic_example", + "href": "examples/gallery_examples/010_harmonic_example.html#set-up-analysis", + "title": "Postprocess a harmonic analysis > Set up analysis", + "section": "Set up analysis", + "text": "Setting up the analysis consists of loading the required modules, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries and matplotlib\nStart a DPF server and copy the example files into the current working directory.\nCreate a composite model\nDefine a failure criterion\nSet up analysis" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.ANGLE", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.ANGLE.html#ansys.dpf.composites.layup_info.LayupProperty.ANGLE", - "title": "ANGLE > ANGLE > ANGLE", - "section": "ANGLE > ANGLE", - "text": "LayupProperty.ANGLE = 0\n\n" + "objectID": "examples/gallery_examples/010_harmonic_example", + "href": "examples/gallery_examples/010_harmonic_example.html#obtain-stresses-and-strains-and-compute-max-irf-over-all-phases-and-frequencies", + "title": "Postprocess a harmonic analysis > Obtain stresses and strains and compute max IRF over all phases and frequencies", + "section": "Obtain stresses and strains and compute max IRF over all phases and frequencies", + "text": "Get complex stresses and strains at all frequencies\nGet operators that provide material data\nDefine the frequency sweep. This is relatively coarse so the example does not take\ntoo much time.\nInitialize result containers. We create a result container for the failure value,\nthe failure mode and the layer index in which the failure occurs.\nLoop over all the phases and evaluate the failure criterion.\nThe result is added to the field containers declared in the previous cell.\nIn the end each container contains a field for each combination of frequency\nand phase\nCompute maximum over all the phases and frequencies for each element and plot the resulting\nIRF values\nObtain stresses and strains and compute max IRF over all phases and frequencies" }, { - "objectID": "api/sampling_point", - "href": "api/sampling_point.html#sampling-point", - "title": "Sampling point", - "section": "Sampling point", - "text": "SamplingPoint(*args, **kwargs)\nImplements the Sampling Point object that wraps the DPF sampling point operator.\nSamplingPointFigure(figure, axes)\nProvides the sampling point figure and axes.\nFailureResult(mode, inverse_reserve_factor, ...)\nProvides the components of a failure result.\nSampling point\nSamplingPoint\nSampling Point\nSamplingPointFigure\nFailureResult" + "objectID": "examples/gallery_examples/010_harmonic_example", + "href": "examples/gallery_examples/010_harmonic_example.html#detailed-analysis-of-the-critical-element", + "title": "Postprocess a harmonic analysis > Detailed analysis of the critical element", + "section": "Detailed analysis of the critical element", + "text": "Identify the element with the maximum IRF\nScope container with all frequencies and phases to critical element so we can plot\nthe critical IRF over all the frequencies\nCompute the maximum IRF over all the phases for each frequency and plot the result for\nthe critical element. Note: this can be different from maximum overall IRF\nat each frequency, because we look only at the element that has the highest IRF overall.\nCompute the critical phase\nCompute critical layer and critical failure mode.\nTotal running time of the script: (0 minutes 10.539 seconds)\nDownload Jupyter notebook: 010_harmonic_example.ipynb\nDownload Python source code: 010_harmonic_example.py\nDownload zipped: 010_harmonic_example.zip\nGallery generated by Sphinx-Gallery\nDetailed analysis of the critical element\nDownload Jupyter notebook: 010_harmonic_example.ipynb\nDownload Python source code: 010_harmonic_example.py\nDownload zipped: 010_harmonic_example.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu13", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu13.html#engineering_constants_nu13", - "title": "Engineering_Constants_nu13", - "section": "Engineering_Constants_nu13", - "text": "Engineering_Constants_nu13" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_ply_sequence_to_plot", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_ply_sequence_to_plot.html#add_ply_sequence_to_plot", + "title": "add_ply_sequence_to_plot", + "section": "add_ply_sequence_to_plot", + "text": "Add the stacking (ply and text) to an axis or plot.\naxes (Any) – Matplotlib Axes object.\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\nNone\nadd_ply_sequence_to_plot\nAny\nAxes\nfloat\n1.0\nNone" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu13", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu13.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu13", - "title": "Engineering_Constants_nu13 > Engineering_Constants_nu13 > Engineering_Constants_nu13", - "section": "Engineering_Constants_nu13 > Engineering_Constants_nu13", - "text": "MaterialProperty.Engineering_Constants_nu13: str = 'poisson_ratio_xz'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_ply_sequence_to_plot", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_ply_sequence_to_plot.html#ansys.dpf.composites.sampling_point.SamplingPoint.add_ply_sequence_to_plot", + "title": "add_ply_sequence_to_plot > add_ply_sequence_to_plot > add_ply_sequence_to_plot", + "section": "add_ply_sequence_to_plot > add_ply_sequence_to_plot", + "text": "SamplingPoint.add_ply_sequence_to_plot(axes, core_scale_factor=1.0)\n\nAdd the stacking (ply and text) to an axis or plot.\n\nParameters\n\naxes (Any) – Matplotlib Axes object.\n\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYc.html#strain_limits_eyc", - "title": "Strain_Limits_eYc", - "section": "Strain_Limits_eYc", - "text": "Strain_Limits_eYc" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_json.html#to_json", + "title": "to_json", + "section": "to_json", + "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYc", - "title": "Strain_Limits_eYc > Strain_Limits_eYc > Strain_Limits_eYc", - "section": "Strain_Limits_eYc > Strain_Limits_eYc", - "text": "MaterialProperty.Strain_Limits_eYc: str = 'strain_compressive_y_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_json.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_json", + "title": "to_json > to_json > to_json", + "section": "to_json > to_json", + "text": "MaxStressCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.get_ply_wise_data", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.get_ply_wise_data.html#get_ply_wise_data", - "title": "get_ply_wise_data", - "section": "get_ply_wise_data", - "text": "Get ply-wise data from a field.\nfield (Field) – Field to extract data from.\nply_name (str) – Name of the ply to extract data from.\nmesh (MeshedRegion) – Meshed region that needs to be enriched with composite information.\nUse the CompositeModel.get_mesh() method to get the meshed region.\nspot_reduction_strategy (SpotReductionStrategy, default: ) – Reduction strategy for getting from spot values (BOT, MID, TOP) to a single value\nper corner node and layer. The default is AVG.\nrequested_location (str, default: 'ElementalNodal') – Location of the output field. Important: The function always averages nodal values\nfor \"elemental\" or \"nodal\" locations,\nirrespective of \"spot_reduction_strategy\".\nOptions are \"elemental\", \"elemental_nodal\", and \"nodal\".\nThe default is \"elemental_nodal\".\ncomponent (IntEnum | int, default: 0) – Component to extract data from. The default is 0.\nField\nget_ply_wise_data\nField\nstr\nMeshedRegion\nCompositeModel.get_mesh()\nSpotReductionStrategy\n\nAVG\nstr\n'ElementalNodal'\n\"elemental\"\n\"nodal\"\n\"spot_reduction_strategy\"\n\"elemental\"\n\"elemental_nodal\"\n\"nodal\"\n\"elemental_nodal\"\nIntEnum\nint\n0\n0\nField" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses.html#get_layer_thicknesses", + "title": "get_layer_thicknesses", + "section": "get_layer_thicknesses", + "text": "Get thicknesses for all layers. Returns None if element is not layered.\nelement_id (int) – Element Id/Label\nOptional[ndarray[Any, dtype[float64]]]\nget_layer_thicknesses\nint\nOptional\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.get_ply_wise_data", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.get_ply_wise_data.html#ansys.dpf.composites.ply_wise_data.get_ply_wise_data", - "title": "get_ply_wise_data > get_ply_wise_data > get_ply_wise_data", - "section": "get_ply_wise_data > get_ply_wise_data", - "text": "ansys.dpf.composites.ply_wise_data.get_ply_wise_data(field, ply_name, mesh, spot_reduction_strategy=SpotReductionStrategy.AVG, requested_location='ElementalNodal', component=0)\n\nGet ply-wise data from a field.\n\nParameters\n\nfield (Field) – Field to extract data from.\n\nply_name (str) – Name of the ply to extract data from.\n\nmesh (MeshedRegion) – Meshed region that needs to be enriched with composite information.\nUse the CompositeModel.get_mesh() method to get the meshed region.\n\nspot_reduction_strategy (SpotReductionStrategy, default: ) – Reduction strategy for getting from spot values (BOT, MID, TOP) to a single value\nper corner node and layer. The default is AVG.\n\nrequested_location (str, default: 'ElementalNodal') – Location of the output field. Important: The function always averages nodal values\nfor \"elemental\" or \"nodal\" locations,\nirrespective of \"spot_reduction_strategy\".\nOptions are \"elemental\", \"elemental_nodal\", and \"nodal\".\nThe default is \"elemental_nodal\".\n\ncomponent (IntEnum | int, default: 0) – Component to extract data from. The default is 0.\n\nReturn type\n\nField\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses", + "title": "get_layer_thicknesses > get_layer_thicknesses > get_layer_thicknesses", + "section": "get_layer_thicknesses > get_layer_thicknesses", + "text": "LayupPropertiesProvider.get_layer_thicknesses(element_id)\n\nGet thicknesses for all layers. Returns None if element is not layered.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[ndarray[Any, dtype[float64]]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.add_layup_info_to_mesh", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.add_layup_info_to_mesh.html#add_layup_info_to_mesh", - "title": "add_layup_info_to_mesh", - "section": "add_layup_info_to_mesh", - "text": "Add lay-up information to the mesh.\nCreates a lay-up provider operator that is run and returned.\ndata_sources (CompositeDataSources) – DPF data sources available from the CompositeModel.data_sources attribute.\nmesh (MeshedRegion) – DPF meshed region available from the CompositeModel.get_mesh() method.\nmaterial_operators (MaterialOperators) – MaterialOperators object available from the CompositeModel.material_operators\nattribute.\nunit_system (Optional[Union[UnitSystem, Operator]], default: None) – Unit system specification\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nrst_stream_provider (Optional[Operator], default: None) – Pass RST stream to load the section data directly from the RST file. This parameter is\nsupported in DPF version 8.0 (2024 R2) and later.\nOperator\nadd_layup_info_to_mesh\nCompositeDataSources\nCompositeModel.data_sources\nMeshedRegion\nCompositeModel.get_mesh()\nMaterialOperators\nCompositeModel.material_operators\nOptional\nUnion\nUnitSystem\nOperator\nNone\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nOptional\nOperator\nNone\nOperator" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots.html#get_offsets_by_spots", + "title": "get_offsets_by_spots", + "section": "get_offsets_by_spots", + "text": "Access the y coordinates of the selected spots (interfaces) for each ply.\nspots (Collection[Spot], default: (, , )) – Collection of spots.\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\nndarray[Any, dtype[float64]]\nget_offsets_by_spots\nCollection\nSpot\n(, , )\nfloat\n1.0\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.add_layup_info_to_mesh", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.add_layup_info_to_mesh.html#ansys.dpf.composites.layup_info.add_layup_info_to_mesh", - "title": "add_layup_info_to_mesh > add_layup_info_to_mesh > add_layup_info_to_mesh", - "section": "add_layup_info_to_mesh > add_layup_info_to_mesh", - "text": "ansys.dpf.composites.layup_info.add_layup_info_to_mesh(data_sources, material_operators, mesh, unit_system=None, composite_definition_label=None, rst_stream_provider=None)\n\nAdd lay-up information to the mesh.\n\nCreates a lay-up provider operator that is run and returned.\n\nParameters\n\ndata_sources (CompositeDataSources) – DPF data sources available from the CompositeModel.data_sources attribute.\n\nmesh (MeshedRegion) – DPF meshed region available from the CompositeModel.get_mesh() method.\n\nmaterial_operators (MaterialOperators) – MaterialOperators object available from the CompositeModel.material_operators\nattribute.\n\nunit_system (Optional[Union[UnitSystem, Operator]], default: None) – Unit system specification\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nrst_stream_provider (Optional[Operator], default: None) – Pass RST stream to load the section data directly from the RST file. This parameter is\nsupported in DPF version 8.0 (2024 R2) and later.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots.html#ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots", + "title": "get_offsets_by_spots > get_offsets_by_spots > get_offsets_by_spots", + "section": "get_offsets_by_spots > get_offsets_by_spots", + "text": "SamplingPoint.get_offsets_by_spots(spots=(Spot.BOTTOM, Spot.MIDDLE, Spot.TOP), core_scale_factor=1.0)\n\nAccess the y coordinates of the selected spots (interfaces) for each ply.\n\nParameters\n\nspots (Collection[Spot], default: (, , )) – Collection of spots.\n\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_dpf_material_ids", - "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_dpf_material_ids.html#get_selected_indices_by_dpf_material_ids", - "title": "get_selected_indices_by_dpf_material_ids", - "section": "get_selected_indices_by_dpf_material_ids", - "text": "Get selected indices by DPF material IDs.\nThis method selects all indices that are in a layer with one of the selected materials.\nelement_info (ElementInfo) – Lay-up information for the element.\ndpf_material_ids (Collection[int64]) – Collection of DPF materials.\nSelected elementary indices\nNDArray[int64]\nget_selected_indices_by_dpf_material_ids\nCollection\nint64" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isnumeric", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isnumeric.html#isnumeric", + "title": "isnumeric", + "section": "isnumeric", + "text": "Return True if the string is a numeric string, False otherwise.\nA string is numeric if all characters in the string are numeric and there is at\nleast one character in the string.\nisnumeric" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isnumeric", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isnumeric.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isnumeric", + "title": "isnumeric > isnumeric > isnumeric", + "section": "isnumeric > isnumeric", + "text": "FailureMeasureEnum.isnumeric(/)\n\nReturn True if the string is a numeric string, False otherwise.\n\nA string is numeric if all characters in the string are numeric and there is at\nleast one character in the string.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_dpf_material_ids", - "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_dpf_material_ids.html#ansys.dpf.composites.select_indices.get_selected_indices_by_dpf_material_ids", - "title": "get_selected_indices_by_dpf_material_ids > get_selected_indices_by_dpf_material_ids > get_selected_indices_by_dpf_material_ids", - "section": "get_selected_indices_by_dpf_material_ids > get_selected_indices_by_dpf_material_ids", - "text": "ansys.dpf.composites.select_indices.get_selected_indices_by_dpf_material_ids(element_info, dpf_material_ids)\n\nGet selected indices by DPF material IDs.\n\nThis method selects all indices that are in a layer with one of the selected materials.\n\nParameters\n\nelement_info (ElementInfo) – Lay-up information for the element.\n\ndpf_material_ids (Collection[int64]) – Collection of DPF materials.\n\nReturns\n\nSelected elementary indices\n\nReturn type\n\nNDArray[int64]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmb", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmb.html#cmb", + "title": "cmb", + "section": "cmb", + "text": "Activates the failure evaluation of the matrix due to compression.\nbool\ncmb\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.dim.html#dim", - "title": "dim", - "section": "dim", - "text": "Specifies which formulation of the failure criterion is used.\nint\ndim\nint" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmb", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmb.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmb", + "title": "cmb > cmb > cmb", + "section": "cmb > cmb", + "text": "property CuntzeCriterion.cmb: bool\n\nActivates the failure evaluation of the matrix due to compression.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.dim.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.dim", - "title": "dim > dim > dim", - "section": "dim > dim", - "text": "property TsaiWuCriterion.dim: int\n\nSpecifies which formulation of the failure criterion is used.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.th", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.th.html#th", + "title": "th", + "section": "th", + "text": "th" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.c.html#c", - "title": "c", - "section": "c", - "text": "c" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.th", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.th.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.th", + "title": "th > th > th", + "section": "th > th", + "text": "FailureModeEnum.th = 500\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.c", - "title": "c > c > c", - "section": "c > c", - "text": "FailureModeEnum.c = 1000\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers.html#get_property_for_all_layers", + "title": "get_property_for_all_layers", + "section": "get_property_for_all_layers", + "text": "Get a layer property for an element ID.\nReturns a numpy array with the values of the property for all the layers.\nValues are ordered from bottom to top.\nThis method returns None if the element is not layered.\nlayup_property (LayerProperty) – Lay-up property.\nelement_id (int) – Element ID or label.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nOptional[ndarray[Any, dtype[float64]]]\nget_property_for_all_layers\nNone\nLayerProperty\nint\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nOptional\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc.html#wf_lmc", - "title": "wf_lmc", - "section": "wf_lmc", - "text": "Weighting factor of matrix failure due to compression (lmc).\nfloat\nwf_lmc\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers.html#ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers", + "title": "get_property_for_all_layers > get_property_for_all_layers > get_property_for_all_layers", + "section": "get_property_for_all_layers > get_property_for_all_layers", + "text": "CompositeModel.get_property_for_all_layers(layup_property, element_id, composite_definition_label=None)\n\nGet a layer property for an element ID.\n\nReturns a numpy array with the values of the property for all the layers.\nValues are ordered from bottom to top.\n\nThis method returns None if the element is not layered.\n\nParameters\n\nlayup_property (LayerProperty) – Lay-up property.\n\nelement_id (int) – Element ID or label.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nOptional[ndarray[Any, dtype[float64]]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc", - "title": "wf_lmc > wf_lmc > wf_lmc", - "section": "wf_lmc > wf_lmc", - "text": "property LaRCCriterion.wf_lmc: float\n\nWeighting factor of matrix failure due to compression (lmc).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.active.html#active", + "title": "active", + "section": "active", + "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Syz", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Syz.html#stress_limits_syz", - "title": "Stress_Limits_Syz", - "section": "Stress_Limits_Syz", - "text": "Stress_Limits_Syz" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.active.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property VonMisesCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Syz", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Syz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Syz", - "title": "Stress_Limits_Syz > Stress_Limits_Syz > Stress_Limits_Syz", - "section": "Stress_Limits_Syz > Stress_Limits_Syz", - "text": "MaterialProperty.Stress_Limits_Syz: str = 'stress_shear_yz'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmc.html#lmc", + "title": "lmc", + "section": "lmc", + "text": "Whether to activate the failure evaluation of the matrix due to compression.\nbool\nlmc\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZt.html#strain_limits_ezt", - "title": "Strain_Limits_eZt", - "section": "Strain_Limits_eZt", - "text": "Strain_Limits_eZt" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmc.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.lmc", + "title": "lmc > lmc > lmc", + "section": "lmc > lmc", + "text": "property LaRCCriterion.lmc: bool\n\nWhether to activate the failure evaluation of the matrix due to compression.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZt", - "title": "Strain_Limits_eZt > Strain_Limits_eZt > Strain_Limits_eZt", - "section": "Strain_Limits_eZt > Strain_Limits_eZt", - "text": "MaterialProperty.Strain_Limits_eZt: str = 'strain_tensile_z_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s1.html#s1", + "title": "s1", + "section": "s1", + "text": "Whether to activate the failure evaluation regarding the stress in the material 1 direction.\nbool\ns1\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalnum", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalnum.html#isalnum", - "title": "isalnum", - "section": "isalnum", - "text": "Return True if the string is an alpha-numeric string, False otherwise.\nA string is alpha-numeric if all characters in the string are alpha-numeric and\nthere is at least one character in the string.\nisalnum" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s1.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s1", + "title": "s1 > s1 > s1", + "section": "s1 > s1", + "text": "property MaxStressCriterion.s1: bool\n\nWhether to activate the failure evaluation regarding the stress in the material 1 direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalnum", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalnum.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isalnum", - "title": "isalnum > isalnum > isalnum", - "section": "isalnum > isalnum", - "text": "FailureMeasureEnum.isalnum(/)\n\nReturn True if the string is an alpha-numeric string, False otherwise.\n\nA string is alpha-numeric if all characters in the string are alpha-numeric and\nthere is at least one character in the string.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lfc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lfc.html#wf_lfc", + "title": "wf_lfc", + "section": "wf_lfc", + "text": "Weighting factor of fiber failure due to compression (lfc).\nfloat\nwf_lfc\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.af", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.af.html#af", - "title": "af", - "section": "af", - "text": "af" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lfc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lfc.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lfc", + "title": "wf_lfc > wf_lfc > wf_lfc", + "section": "wf_lfc > wf_lfc", + "text": "property LaRCCriterion.wf_lfc: float\n\nWeighting factor of fiber failure due to compression (lfc).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.af", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.af.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.af", - "title": "af > af > af", - "section": "af > af", - "text": "FailureModeEnum.af = 1203\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.solver_material_id", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.solver_material_id.html#solver_material_id", + "title": "solver_material_id", + "section": "solver_material_id", + "text": "solver_material_id" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.composite_definition", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.composite_definition.html#composite_definition", - "title": "composite_definition", - "section": "composite_definition", - "text": "composite_definition" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.solver_material_id", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.solver_material_id.html#ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.solver_material_id", + "title": "solver_material_id > solver_material_id > solver_material_id", + "section": "solver_material_id > solver_material_id", + "text": "MaterialMetadata.solver_material_id: int | None = None\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.composite_definition", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.composite_definition.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.composite_definition", - "title": "composite_definition > composite_definition > composite_definition", - "section": "composite_definition > composite_definition", - "text": "ResultDefinitionScope.composite_definition: str | PathLike[str]\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.strip", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.strip.html#strip", + "title": "strip", + "section": "strip", + "text": "Return a copy of the string with leading and trailing whitespace removed.\nIf chars is given and not None, remove characters in chars instead.\nstrip" }, { - "objectID": "examples/gallery_examples/007_interlaminar_normal_stress_example", - "href": "examples/gallery_examples/007_interlaminar_normal_stress_example.html#interlaminar-normal-stresses", - "title": "Interlaminar normal stresses", - "section": "Interlaminar normal stresses", - "text": "This example shows how to enrich the stresses of layered shells by\ncomputing interlaminar normal stresses. Interlaminar normal\nstresses can be important in thick and curved laminates.\nBecause interlaminar normal stresses are typically not available\nfor layered shell elements, the INS operator is used to recompute\nthe s3 result based on the laminate strains, the geometrical\ncurvature, and the lay-up.\nFor simple use cases, using the composite failure operator or\ncomposite sampling point operator is preferable. For examples,\nsee sphx_glr_examples_gallery_examples_001_failure_operator_example.py\nand sphx_glr_examples_gallery_examples_002_sampling_point_example.py.\nIn these workflows, interlaminar normal stresses are computed automatically\nif required, such as if a 3D failure criterion is activated. Additionally,\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py\nshows how helper functions can be used to obtain composite result data.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nInterlaminar normal stresses\nINS\ns3\ncomposite_files_from_workbench_harmonic_analysis()" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.strip", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.strip.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.strip", + "title": "strip > strip > strip", + "section": "strip > strip", + "text": "FailureMeasureEnum.strip(chars=None, /)\n\nReturn a copy of the string with leading and trailing whitespace removed.\n\nIf chars is given and not None, remove characters in chars instead.\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/007_interlaminar_normal_stress_example", - "href": "examples/gallery_examples/007_interlaminar_normal_stress_example.html#set-up-analysis", - "title": "Interlaminar normal stresses > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nSet up analysis" + "objectID": "examples/gallery_examples/003_short_fiber_example", + "href": "examples/gallery_examples/003_short_fiber_example.html#failure-analysis-for-short-fiber-composites", + "title": "Failure analysis for short fiber composites", + "section": "Failure analysis for short fiber composites", + "text": "This example shows how to evaluate failures of a short fiber reinforced\npart.\nAs part of the short fiber workflows, you can evaluate and plot Tsai-Hill\ntype orientation tensor-dependent failure criteria. This example shows\nhow to configure the DPF operator short_fiber_failure_criterion_evaluator\nto compute such failure criteria.\nThe model shown in this example consists of a tensile specimen made of\na short glass fiber reinforced thermoplastic injection molded from both sides.\nThe evaluation of failure criteria in short fiber workflows is a\nbeta feature, introduced in Ansys 2021 R2.\nFailure analysis for short fiber composites\nshort_fiber_failure_criterion_evaluator" }, { - "objectID": "examples/gallery_examples/007_interlaminar_normal_stress_example", - "href": "examples/gallery_examples/007_interlaminar_normal_stress_example.html#set-up-model-and-prepare-inputs", - "title": "Interlaminar normal stresses > Set up model and prepare inputs", - "section": "Set up model and prepare inputs", - "text": "Set up the composite model.\nPrepare the inputs for the INS operator.\nrotate_to_global is False because the postprocessing engine expects\nthe results to be in the element coordinate system (material coordinate system).\nSet up model and prepare inputs\nrotate_to_global\nFalse" + "objectID": "examples/gallery_examples/003_short_fiber_example", + "href": "examples/gallery_examples/003_short_fiber_example.html#set-up-analysis", + "title": "Failure analysis for short fiber composites > Set up analysis", + "section": "Set up analysis", + "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nThese files are needed:\nMechanical APDL result (RST) file containing the simulation results\nEngineering Data (MATML) file containing the material properties of the composite\nMechanical APDL input file (DS.DAT) containing the fiber orientation tensor data\nSet up analysis" }, { - "objectID": "examples/gallery_examples/007_interlaminar_normal_stress_example", - "href": "examples/gallery_examples/007_interlaminar_normal_stress_example.html#compute-interlaminar-normal-stresses", - "title": "Interlaminar normal stresses > Compute interlaminar normal stresses", - "section": "Compute interlaminar normal stresses", - "text": "Compute the interlaminar normal stresses.\nThe INS operator stores the stresses in the provided stress field.\nCompute interlaminar normal stresses\nINS" + "objectID": "examples/gallery_examples/003_short_fiber_example", + "href": "examples/gallery_examples/003_short_fiber_example.html#set-up-data-sources", + "title": "Failure analysis for short fiber composites > Set up data sources", + "section": "Set up data sources", + "text": "Set up the data sources.\nSet up data sources" }, { - "objectID": "examples/gallery_examples/007_interlaminar_normal_stress_example", - "href": "examples/gallery_examples/007_interlaminar_normal_stress_example.html#plot-s3-stresses", - "title": "Interlaminar normal stresses > Plot s3 stresses", - "section": "Plot s3 stresses", - "text": "Get the first stress field.\nPlot the maximum s3 of each element.\nPlot s3 at the mid-plane of a certain ply.\nTotal running time of the script: (0 minutes 7.872 seconds)\nDownload Jupyter notebook: 007_interlaminar_normal_stress_example.ipynb\nDownload Python source code: 007_interlaminar_normal_stress_example.py\nDownload zipped: 007_interlaminar_normal_stress_example.zip\nGallery generated by Sphinx-Gallery\nPlot s3 stresses\nDownload Jupyter notebook: 007_interlaminar_normal_stress_example.ipynb\nDownload Python source code: 007_interlaminar_normal_stress_example.py\nDownload zipped: 007_interlaminar_normal_stress_example.zip" + "objectID": "examples/gallery_examples/003_short_fiber_example", + "href": "examples/gallery_examples/003_short_fiber_example.html#initialize-dpf-model", + "title": "Failure analysis for short fiber composites > Initialize DPF model", + "section": "Initialize DPF model", + "text": "Initialize the DPF model.\nInitialize DPF model" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isascii", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isascii.html#isascii", - "title": "isascii", - "section": "isascii", - "text": "Return True if all characters in the string are ASCII, False otherwise.\nASCII characters have code points in the range U+0000-U+007F.\nEmpty string is ASCII too.\nisascii" + "objectID": "examples/gallery_examples/003_short_fiber_example", + "href": "examples/gallery_examples/003_short_fiber_example.html#plot-results", + "title": "Failure analysis for short fiber composites > Plot results", + "section": "Plot results", + "text": "Plot the two largest eigenvalues (a11 and a22) of the fiber orientation tensor.\nNote that the plots reveal the presence of a weld line in the middle of the specimen.\nPlot results" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isascii", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isascii.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isascii", - "title": "isascii > isascii > isascii", - "section": "isascii > isascii", - "text": "FailureMeasureEnum.isascii(/)\n\nReturn True if all characters in the string are ASCII, False otherwise.\n\nASCII characters have code points in the range U+0000-U+007F.\nEmpty string is ASCII too.\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/003_short_fiber_example", + "href": "examples/gallery_examples/003_short_fiber_example.html#configure-and-evaluate", + "title": "Failure analysis for short fiber composites > Configure and evaluate", + "section": "Configure and evaluate", + "text": "Configure the short fiber failure criterion evaluator and evaluate.\nNote that you can specify optional time and mesh scoping inputs.\nConfigure and evaluate" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lfc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lfc.html#lfc", - "title": "lfc", - "section": "lfc", - "text": "Whether to activate the failure evaluation regarding compression in fiber direction.\nbool\nlfc\nbool" + "objectID": "examples/gallery_examples/003_short_fiber_example", + "href": "examples/gallery_examples/003_short_fiber_example.html#compute-and-plot-results", + "title": "Failure analysis for short fiber composites > Compute and plot results", + "section": "Compute and plot results", + "text": "Compute and plot the maximum failure value per element.\nTotal running time of the script: (0 minutes 3.480 seconds)\nDownload Jupyter notebook: 003_short_fiber_example.ipynb\nDownload Python source code: 003_short_fiber_example.py\nDownload zipped: 003_short_fiber_example.zip\nGallery generated by Sphinx-Gallery\nCompute and plot results\nDownload Jupyter notebook: 003_short_fiber_example.ipynb\nDownload Python source code: 003_short_fiber_example.py\nDownload zipped: 003_short_fiber_example.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lfc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lfc.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.lfc", - "title": "lfc > lfc > lfc", - "section": "lfc > lfc", - "text": "property LaRCCriterion.lfc: bool\n\nWhether to activate the failure evaluation regarding compression in fiber direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.rst", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.rst.html#rst", + "title": "rst", + "section": "rst", + "text": "rst" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.rst", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.rst.html#ansys.dpf.composites.data_sources.CompositeDataSources.rst", + "title": "rst > rst > rst", + "section": "rst > rst", + "text": "CompositeDataSources.rst: DataSources\n\n" }, { "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.dim", @@ -2100,74 +1750,32 @@ "text": "property HashinCriterion.dim: int\n\nWhether the 2D or 3D formulation of the criterion is used. The latter one also supports the failure mode delamination.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.failure_criteria", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.failure_criteria.html#failure_criteria", - "title": "failure_criteria", - "section": "failure_criteria", - "text": "List of failure criteria. Use insert and remove to edit the list.\ndict[str, FailureCriterionBase]\nfailure_criteria\ndict\nstr\nFailureCriterionBase" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.failure_criteria", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.failure_criteria.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.failure_criteria", - "title": "failure_criteria > failure_criteria > failure_criteria", - "section": "failure_criteria > failure_criteria", - "text": "property CombinedFailureCriterion.failure_criteria: dict[str, FailureCriterionBase]\n\nList of failure criteria. Use insert and remove to edit the list.\n\nReturn type\n\ndict[str, FailureCriterionBase]\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope", - "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.html#compositescope", - "title": "CompositeScope", - "section": "CompositeScope", - "text": "Provides the composite scope.\nThis class defines which part of the model and solution step are selected.\nelements (collections.abc.Sequence[int] | None) – List of elements.\nplies (collections.abc.Sequence[str] | None) – List of plies.\ntime (float | None) – Time or frequency. You can use the\nCompositeModel.get_result_times_or_frequencies() method\nto list the solution steps.\nnamed_selections (collections.abc.Sequence[str] | None) – List of element sets.\nUse composite_model.get_mesh().available_named_selections to list\nall named selections.\nIf more than one scope (elements, named_selections and plies)\nis set, then the final element scope is the intersection\nof the defined parameters. All elements are selected if no parameter is set.\nCompositeScope.elements\n\nCompositeScope.named_selections\n\nCompositeScope.plies\n\nCompositeScope.time\n\nCompositeScope\nCompositeModel.get_result_times_or_frequencies()\nelements\nnamed_selections\nplies\nCompositeScope.elements\nCompositeScope.named_selections\nCompositeScope.plies\nCompositeScope.time" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope", - "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.html#ansys.dpf.composites.composite_scope.CompositeScope", - "title": "CompositeScope > CompositeScope > CompositeScope", - "section": "CompositeScope > CompositeScope", - "text": "class ansys.dpf.composites.composite_scope.CompositeScope(elements=None, plies=None, time=None, named_selections=None)\n\nProvides the composite scope.\n\nThis class defines which part of the model and solution step are selected.\n\nParameters\n\nelements (collections.abc.Sequence[int] | None) – List of elements.\n\nplies (collections.abc.Sequence[str] | None) – List of plies.\n\ntime (float | None) – Time or frequency. You can use the\nCompositeModel.get_result_times_or_frequencies() method\nto list the solution steps.\n\nnamed_selections (collections.abc.Sequence[str] | None) – List of element sets.\nUse composite_model.get_mesh().available_named_selections to list\nall named selections.\n\nNotes\n\nIf more than one scope (elements, named_selections and plies)\nis set, then the final element scope is the intersection\nof the defined parameters. All elements are selected if no parameter is set.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nCompositeScope.elements\n\n\n\nCompositeScope.named_selections\n\n\n\nCompositeScope.plies\n\n\n\nCompositeScope.time\n\n\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.get_composites_data_sources", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composites_data_sources.html#get_composites_data_sources", - "title": "get_composites_data_sources", - "section": "get_composites_data_sources", - "text": "Create DPF data sources from a ContinuousFiberCompositeFiles object.\ncontinuous_composite_files (ContinuousFiberCompositesFiles)\nCompositeDataSources\nget_composites_data_sources\nContinuousFiberCompositeFiles\nContinuousFiberCompositesFiles\nCompositeDataSources" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.swapcase", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.swapcase.html#swapcase", + "title": "swapcase", + "section": "swapcase", + "text": "Convert uppercase characters to lowercase and lowercase characters to uppercase.\nswapcase" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.get_composites_data_sources", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composites_data_sources.html#ansys.dpf.composites.data_sources.get_composites_data_sources", - "title": "get_composites_data_sources > get_composites_data_sources > get_composites_data_sources", - "section": "get_composites_data_sources > get_composites_data_sources", - "text": "ansys.dpf.composites.data_sources.get_composites_data_sources(continuous_composite_files)\n\nCreate DPF data sources from a ContinuousFiberCompositeFiles object.\n\nParameters\n\ncontinuous_composite_files (ContinuousFiberCompositesFiles)\n\nReturn type\n\nCompositeDataSources\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.swapcase", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.swapcase.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.swapcase", + "title": "swapcase > swapcase > swapcase", + "section": "swapcase > swapcase", + "text": "FailureMeasureEnum.swapcase(/)\n\nConvert uppercase characters to lowercase and lowercase characters to uppercase.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict.html#to_dict", + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_dict.html#to_dict", "title": "to_dict", "section": "to_dict", - "text": "Return the combined failure criterion as a dictionary.\ndict[str, Any]\nJSON dictionary that can be used for the result definition\nof the DPF Composites Failure evaluator operator.\nto_dict\ndict\nstr\nAny" + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict", + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.PuckCriterion.to_dict", "title": "to_dict > to_dict > to_dict", "section": "to_dict > to_dict", - "text": "CombinedFailureCriterion.to_dict()\n\nReturn the combined failure criterion as a dictionary.\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\nJSON dictionary that can be used for the result definition\nof the DPF Composites Failure evaluator operator.\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_support_provider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_support_provider.html#material_support_provider", - "title": "material_support_provider", - "section": "material_support_provider", - "text": "Get material_support_provider.\nOperator\nmaterial_support_provider\nOperator" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_support_provider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_support_provider.html#ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_support_provider", - "title": "material_support_provider > material_support_provider > material_support_provider", - "section": "material_support_provider > material_support_provider", - "text": "property MaterialOperators.material_support_provider: Operator\n\nGet material_support_provider.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" + "text": "PuckCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { "objectID": "api/failure_criteria", @@ -2177,571 +1785,564 @@ "text": "CombinedFailureCriterion([name, ...])\nDefines the combined failure criterion.\nCoreFailureCriterion(*[, include_ins, wf])\nDefines the core shear failure criterion for core materials like foam and honeycomb.\nCuntzeCriterion(*[, cfc, cft, cma, cmb, ...])\nDefines the Cuntze criterion for uni-directional orthotropic reinforced materials.\nFaceSheetWrinklingCriterion(*[, ...])\nDefines the face sheet wrinkling criterion for sandwiches (laminate with cores).\nHashinCriterion(*[, hf, hm, hd, dim, wf_hf, ...])\nDefines the Hashin failure criterion for UD reinforced materials.\nHoffmanCriterion(*[, active, wf, dim])\nDefines the Hoffman failure criterion for orthotropic reinforced materials.\nLaRCCriterion(*[, lft, lfc, lmt, lmc, dim, ...])\nDefines the LaRC failure criterion for UD reinforced materials.\nMaxStrainCriterion(*[, e1, e2, e3, e12, ...])\nDefines the maximum strain failure criterion for orthotropic reinforced materials.\nMaxStressCriterion(*[, s1, s2, s3, s12, ...])\nDefines the maximum stress failure criterion for orthotropic reinforced materials.\nPuckCriterion(*[, pf, pma, pmb, pmc, pd, ...])\nDefines the Puck failure criterion for UD reinforced materials.\nShearCrimpingCriterion(*[, kc, kf, wf])\nDefines the shear crimping failure criterion for sandwich structures.\nTsaiHillCriterion(*[, active, wf, dim])\nDefines the Tsai-Hill failure criterion for orthotropic reinforced materials.\nTsaiWuCriterion(*[, active, wf, dim])\nDefines the Tsai-Wu failure criterion for orthotropic reinforced materials.\nVonMisesCriterion(*[, vme, vms, wf_vme, ...])\nDefines the von Mises criterion for isotropic materials.\nFailureModeEnum(value[, names, module, ...])\n\nFailure criteria\nCombinedFailureCriterion\nCoreFailureCriterion\nCuntzeCriterion\nFaceSheetWrinklingCriterion\nHashinCriterion\nHoffmanCriterion\nLaRCCriterion\nMaxStrainCriterion\nMaxStressCriterion\nPuckCriterion\nShearCrimpingCriterion\nTsaiHillCriterion\nTsaiWuCriterion\nVonMisesCriterion\nFailureModeEnum" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_files", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_files.html#composite_files", - "title": "composite_files", - "section": "composite_files", - "text": "Get the composite file paths on the server.\nContinuousFiberCompositesFiles\ncomposite_files\nContinuousFiberCompositesFiles" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_files", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_files.html#ansys.dpf.composites.composite_model.CompositeModel.composite_files", - "title": "composite_files > composite_files > composite_files", - "section": "composite_files > composite_files", - "text": "property CompositeModel.composite_files: ContinuousFiberCompositesFiles\n\nGet the composite file paths on the server.\n\nReturn type\n\nContinuousFiberCompositesFiles\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.partition", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.partition.html#partition", + "title": "partition", + "section": "partition", + "text": "Partition the string into three parts using the given separator.\nThis will search for the separator in the string. If the separator is found,\nreturns a 3-tuple containing the part before the separator, the separator\nitself, and the part after it.\nIf the separator is not found, returns a 3-tuple containing the original string\nand two empty strings.\npartition" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot", - "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.html#spot", - "title": "Spot", - "section": "Spot", - "text": "Implements an interface to access the spots of the results of layered elements.\nSpot.BOTTOM\n\nSpot.MIDDLE\n\nSpot.TOP\n\nSpot\nSpot.BOTTOM\nSpot.MIDDLE\nSpot.TOP" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.partition", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.partition.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.partition", + "title": "partition > partition > partition", + "section": "partition > partition", + "text": "FailureMeasureEnum.partition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nThis will search for the separator in the string. If the separator is found,\nreturns a 3-tuple containing the part before the separator, the separator\nitself, and the part after it.\n\nIf the separator is not found, returns a 3-tuple containing the original string\nand two empty strings.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot", - "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.html#ansys.dpf.composites.constants.Spot", - "title": "Spot > Spot > Spot", - "section": "Spot > Spot", - "text": "class ansys.dpf.composites.constants.Spot(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nImplements an interface to access the spots of the results of layered elements.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nSpot.BOTTOM\n\n\n\nSpot.MIDDLE\n\n\n\nSpot.TOP\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_SOLID_ELEMENT_ID", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_SOLID_ELEMENT_ID.html#max_solid_element_id", + "title": "MAX_SOLID_ELEMENT_ID", + "section": "MAX_SOLID_ELEMENT_ID", + "text": "MAX_SOLID_ELEMENT_ID" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_SOLID_ELEMENT_ID", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_SOLID_ELEMENT_ID.html#ansys.dpf.composites.constants.FailureOutput.MAX_SOLID_ELEMENT_ID", + "title": "MAX_SOLID_ELEMENT_ID > MAX_SOLID_ELEMENT_ID > MAX_SOLID_ELEMENT_ID", + "section": "MAX_SOLID_ELEMENT_ID > MAX_SOLID_ELEMENT_ID", + "text": "FailureOutput.MAX_SOLID_ELEMENT_ID = 7\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.name.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property TsaiHillCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.join", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.join.html#join", + "title": "join", + "section": "join", + "text": "Concatenate any number of strings.\nThe string whose method is called is inserted in between each given string.\nThe result is returned as a new string.\nExample: ‘.’.join([‘ab’, ‘pq’, ‘rs’]) -> ‘ab.pq.rs’\njoin" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXt.html#ext", - "title": "eXt", - "section": "eXt", - "text": "Global tensile strain limit in material direction 1.\nfloat\neXt\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.join", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.join.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.join", + "title": "join > join > join", + "section": "join > join", + "text": "FailureMeasureEnum.join(iterable, /)\n\nConcatenate any number of strings.\n\nThe string whose method is called is inserted in between each given string.\nThe result is returned as a new string.\n\nExample: ‘.’.join([‘ab’, ‘pq’, ‘rs’]) -> ‘ab.pq.rs’\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXt.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXt", - "title": "eXt > eXt > eXt", - "section": "eXt > eXt", - "text": "property MaxStrainCriterion.eXt: float\n\nGlobal tensile strain limit in material direction 1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.failure_criteria", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.failure_criteria.html#failure_criteria", + "title": "failure_criteria", + "section": "failure_criteria", + "text": "List of failure criteria. Use insert and remove to edit the list.\ndict[str, FailureCriterionBase]\nfailure_criteria\ndict\nstr\nFailureCriterionBase" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removeprefix", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removeprefix.html#removeprefix", - "title": "removeprefix", - "section": "removeprefix", - "text": "Return a str with the given prefix string removed if present.\nIf the string starts with the prefix string, return string[len(prefix):].\nOtherwise, return a copy of the original string.\nremoveprefix" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.failure_criteria", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.failure_criteria.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.failure_criteria", + "title": "failure_criteria > failure_criteria > failure_criteria", + "section": "failure_criteria > failure_criteria", + "text": "property CombinedFailureCriterion.failure_criteria: dict[str, FailureCriterionBase]\n\nList of failure criteria. Use insert and remove to edit the list.\n\nReturn type\n\ndict[str, FailureCriterionBase]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removeprefix", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removeprefix.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.removeprefix", - "title": "removeprefix > removeprefix > removeprefix", - "section": "removeprefix > removeprefix", - "text": "FailureMeasureEnum.removeprefix(prefix, /)\n\nReturn a str with the given prefix string removed if present.\n\nIf the string starts with the prefix string, return string[len(prefix):].\nOtherwise, return a copy of the original string.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.active.html#active", + "title": "active", + "section": "active", + "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.active.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property MaxStrainCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "VonMisesCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yc.html#stress_limits_yc", + "title": "Stress_Limits_Yc", + "section": "Stress_Limits_Yc", + "text": "Stress_Limits_Yc" }, { - "objectID": "api/constants", - "href": "api/constants.html#constants", - "title": "Constants", - "section": "Constants", - "text": "FailureOutput(value[, names, module, ...])\nProvides failure output types.\nSpot(value[, names, module, qualname, type, ...])\nImplements an interface to access the spots of the results of layered elements.\nSym3x3TensorComponent(value[, names, ...])\nProvides tensor indices for symmetrical 3x3 tensors.\nConstants\nFailureOutput\nSpot\nSym3x3TensorComponent" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yc", + "title": "Stress_Limits_Yc > Stress_Limits_Yc > Stress_Limits_Yc", + "section": "Stress_Limits_Yc > Stress_Limits_Yc", + "text": "MaterialProperty.Stress_Limits_Yc: str = 'stress_compressive_y_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isprintable", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isprintable.html#isprintable", + "title": "isprintable", + "section": "isprintable", + "text": "Return True if the string is printable, False otherwise.\nA string is printable if all of its characters are considered printable in\nrepr() or if it is empty.\nisprintable" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "MaxStrainCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isprintable", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isprintable.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isprintable", + "title": "isprintable > isprintable > isprintable", + "section": "isprintable > isprintable", + "text": "FailureMeasureEnum.isprintable(/)\n\nReturn True if the string is printable, False otherwise.\n\nA string is printable if all of its characters are considered printable in\nrepr() or if it is empty.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s3.html#s3", - "title": "s3", - "section": "s3", - "text": "Whether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\nbool\ns3\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.html#failureresult", + "title": "FailureResult", + "section": "FailureResult", + "text": "Provides the components of a failure result.\nFailureResult.mode\n\nFailureResult.inverse_reserve_factor\n\nFailureResult.safety_factor\n\nFailureResult.safety_margin\n\nFailureResult\nFailureResult.mode\nFailureResult.inverse_reserve_factor\nFailureResult.safety_factor\nFailureResult.safety_margin" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s3.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s3", - "title": "s3 > s3 > s3", - "section": "s3 > s3", - "text": "property MaxStressCriterion.s3: bool\n\nWhether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.html#ansys.dpf.composites.sampling_point.FailureResult", + "title": "FailureResult > FailureResult > FailureResult", + "section": "FailureResult > FailureResult", + "text": "class ansys.dpf.composites.sampling_point.FailureResult(mode, inverse_reserve_factor, safety_factor, safety_margin)\n\nProvides the components of a failure result.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nFailureResult.mode\n\n\n\nFailureResult.inverse_reserve_factor\n\n\n\nFailureResult.safety_factor\n\n\n\nFailureResult.safety_margin\n\n\n\n" }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.mapping", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.mapping.html#mapping", - "title": "mapping", - "section": "mapping", - "text": "mapping" + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmc.html#wf_cmc", + "title": "wf_cmc", + "section": "wf_cmc", + "text": "Weighting factor of matrix failure due to compression or shear (cmc).\nfloat\nwf_cmc\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.mapping", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.mapping.html#ansys.dpf.composites.data_sources.CompositeDefinitionFiles.mapping", - "title": "mapping > mapping > mapping", - "section": "mapping > mapping", - "text": "CompositeDefinitionFiles.mapping: str | PathLike[str] | None = None\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmc.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmc", + "title": "wf_cmc > wf_cmc > wf_cmc", + "section": "wf_cmc > wf_cmc", + "text": "property CuntzeCriterion.wf_cmc: float\n\nWeighting factor of matrix failure due to compression or shear (cmc).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3.html#lft3", + "title": "lft3", + "section": "lft3", + "text": "lft3" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.name.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property MaxStrainCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3", + "title": "lft3 > lft3 > lft3", + "section": "lft3 > lft3", + "text": "FailureModeEnum.lft3 = 901\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cma", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cma.html#wf_cma", - "title": "wf_cma", - "section": "wf_cma", - "text": "Weighting factor of matrix failure due to tension (cma).\nfloat\nwf_cma\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc.html#wf_pmc", + "title": "wf_pmc", + "section": "wf_pmc", + "text": "Weighting factor of the matrix failure (pmc) mode.\nfloat\nwf_pmc\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cma", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cma.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cma", - "title": "wf_cma > wf_cma > wf_cma", - "section": "wf_cma > wf_cma", - "text": "property CuntzeCriterion.wf_cma: float\n\nWeighting factor of matrix failure due to tension (cma).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc.html#ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc", + "title": "wf_pmc > wf_pmc > wf_pmc", + "section": "wf_pmc > wf_pmc", + "text": "property PuckCriterion.wf_pmc: float\n\nWeighting factor of the matrix failure (pmc) mode.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.istitle", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.istitle.html#istitle", - "title": "istitle", - "section": "istitle", - "text": "Return True if the string is a title-cased string, False otherwise.\nIn a title-cased string, upper- and title-case characters may only\nfollow uncased characters and lowercase characters only cased ones.\nistitle" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_support_provider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_support_provider.html#material_support_provider", + "title": "material_support_provider", + "section": "material_support_provider", + "text": "Get material_support_provider.\nOperator\nmaterial_support_provider\nOperator" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.istitle", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.istitle.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.istitle", - "title": "istitle > istitle > istitle", - "section": "istitle > istitle", - "text": "FailureMeasureEnum.istitle(/)\n\nReturn True if the string is a title-cased string, False otherwise.\n\nIn a title-cased string, upper- and title-case characters may only\nfollow uncased characters and lowercase characters only cased ones.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_support_provider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_support_provider.html#ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_support_provider", + "title": "material_support_provider > material_support_provider > material_support_provider", + "section": "material_support_provider > material_support_provider", + "text": "property MaterialOperators.material_support_provider: Operator\n\nGet material_support_provider.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.composite_files_from_workbench_harmonic_analysis", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.composite_files_from_workbench_harmonic_analysis.html#composite_files_from_workbench_harmonic_analysis", - "title": "composite_files_from_workbench_harmonic_analysis", - "section": "composite_files_from_workbench_harmonic_analysis", - "text": "Get a ContinuousFiberCompositesFiles object for a harmonic analysis.\nresult_folder_modal (str) – Result folder of the Modal solution.\nIn the Modal system, right-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\nresult_folder_harmonic (str) – Result folder of the Harmonic Response solution.\nIn the Harmonic Response system,\nright-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\nContinuousFiberCompositesFiles\ncomposite_files_from_workbench_harmonic_analysis\nContinuousFiberCompositesFiles\nContinuousFiberCompositesFiles" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft.html#cft", + "title": "cft", + "section": "cft", + "text": "Activates the failure evaluation regarding tension in fiber direction.\nbool\ncft\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.composite_files_from_workbench_harmonic_analysis", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.composite_files_from_workbench_harmonic_analysis.html#ansys.dpf.composites.data_sources.composite_files_from_workbench_harmonic_analysis", - "title": "composite_files_from_workbench_harmonic_analysis > composite_files_from_workbench_harmonic_analysis > composite_files_from_workbench_harmonic_analysis", - "section": "composite_files_from_workbench_harmonic_analysis > composite_files_from_workbench_harmonic_analysis", - "text": "ansys.dpf.composites.data_sources.composite_files_from_workbench_harmonic_analysis(result_folder_modal, result_folder_harmonic)\n\nGet a ContinuousFiberCompositesFiles object for a harmonic analysis.\n\nParameters\n\nresult_folder_modal (str) – Result folder of the Modal solution.\nIn the Modal system, right-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\n\nresult_folder_harmonic (str) – Result folder of the Harmonic Response solution.\nIn the Harmonic Response system,\nright-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\n\nReturn type\n\nContinuousFiberCompositesFiles\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft", + "title": "cft > cft > cft", + "section": "cft > cft", + "text": "property CuntzeCriterion.cft: bool\n\nActivates the failure evaluation regarding tension in fiber direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2t.html#s2t", - "title": "s2t", - "section": "s2t", - "text": "s2t" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3.html#e3", + "title": "e3", + "section": "e3", + "text": "e3" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s2t", - "title": "s2t > s2t > s2t", - "section": "s2t > s2t", - "text": "FailureModeEnum.s2t = 221\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e3", + "title": "e3 > e3 > e3", + "section": "e3 > e3", + "text": "FailureModeEnum.e3 = 130\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.html#puckcriterion", - "title": "PuckCriterion", - "section": "PuckCriterion", - "text": "Defines the Puck failure criterion for UD reinforced materials.\npf (bool, default: True) – Whether to activate the failure evaluation regarding fiber failure.\npma (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure due to tension.\npmb (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure due to compression.\npmc (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure due to shear failure.\npd (bool, default: False) – Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used. The latter one also supports the failure mode delamination. Use 1 for a simplified Puck criterion.\nwf_pf (float, default: 1.0) – Weighting factor of the fiber failure (pf) mode.\nwf_pma (float, default: 1.0) – Weighting factor of the matrix failure (pma) mode.\nwf_pmb (float, default: 1.0) – Weighting factor of the matrix failure (pmb) mode.\nwf_pmc (float, default: 1.0) – Weighting factor of the matrix failure (pmc) mode.\nwf_pd (float, default: 1.0) – Weighting factor of the delamination failure (pd) mode.\ncfps (bool, default: True) – Whether to consider inter-fiber strength reduction due to fiber parallel stresses.\ns (float, default: 0.5) – Specifies the effect of fiber parallel stresses regarding inter-fiber failure. s = [0, 1) and the default is 0.5.\nm – Specifies the effect of fiber parallel stresses regarding inter-fiber failure. M = [0, 1). The default is 0.5.\ninterface_weakening_factor (float, default: 0.8) – Multiplicator for the interlaminar strength if failure mode pd is active. The default is 0.8.\nforce_global_constants (bool, default: False) – Whether to use global constants instead of the material-wise properties.\np21_neg (float, default: 0.275) – Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for compression.\np21_pos (float, default: 0.325) – Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.,\np22_neg (float, default: 0.225) – Global inclination factor of the fracture plane \\perp \\perp for compression.\np22_pos (float, default: 0.225) – Global inclination factor of the fracture plane \\perp \\perp for tension.\nPuckCriterion.to_dict()\n\nPuckCriterion.to_json()\n\nPuckCriterion.M\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure.\nPuckCriterion.active\nThe failure criterion is suppressed if active is False.\nPuckCriterion.cfps\nWhether to consider inter-fiber strength reduction due to fiber parallel stresses.\nPuckCriterion.dim\nWhether the 2D or 3D formulation of the criterion is used.\nPuckCriterion.force_global_constants\nWhether to use global constants instead of the material-wise properties.\nPuckCriterion.interface_weakening_factor\nMultiplicator for the interlaminar strength if failure mode pd is active.\nPuckCriterion.name\nName of the failure criterion.\nPuckCriterion.p21_neg\nGlobal inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for compression.\nPuckCriterion.p21_pos\nGlobal inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.\nPuckCriterion.p22_neg\nGlobal inclination factor of the fracture plane \\perp \\perp for compression.\nPuckCriterion.p22_pos\nGlobal inclination factor of the fracture plane \\perp \\perp for tension.\nPuckCriterion.pd\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\nPuckCriterion.pf\nWhether to activate the failure evaluation regarding fiber failure.\nPuckCriterion.pma\nWhether to activate the failure evaluation regarding matrix failure due to tension.\nPuckCriterion.pmb\nWhether to activate the failure evaluation regarding matrix failure due to compression.\nPuckCriterion.pmc\nWhether to activate the failure evaluation regarding matrix failure due to shear failure.\nPuckCriterion.s\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure.\nPuckCriterion.wf_pd\nWeighting factor of the delamination failure (pd) mode.\nPuckCriterion.wf_pf\nWeighting factor of the fiber failure (pf) mode.\nPuckCriterion.wf_pma\nWeighting factor of the matrix failure (pma) mode.\nPuckCriterion.wf_pmb\nWeighting factor of the matrix failure (pmb) mode.\nPuckCriterion.wf_pmc\nWeighting factor of the matrix failure (pmc) mode.\nPuckCriterion\nbool\nTrue\nbool\nTrue\nbool\nTrue\nbool\nTrue\nbool\nFalse\nint\n2\n1\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nbool\nTrue\nfloat\n0.5\n0.5\n0.5\nfloat\n0.8\npd\n0.8\nbool\nFalse\nfloat\n0.275\nfloat\n0.325\nfloat\n0.225\nfloat\n0.225\nPuckCriterion.to_dict\nPuckCriterion.to_json\nPuckCriterion.M\nPuckCriterion.active\nPuckCriterion.cfps\nPuckCriterion.dim\nPuckCriterion.force_global_constants\nPuckCriterion.interface_weakening_factor\npd\nPuckCriterion.name\nPuckCriterion.p21_neg\nPuckCriterion.p21_pos\nPuckCriterion.p22_neg\nPuckCriterion.p22_pos\nPuckCriterion.pd\nPuckCriterion.pf\nPuckCriterion.pma\nPuckCriterion.pmb\nPuckCriterion.pmc\nPuckCriterion.s\nPuckCriterion.wf_pd\nPuckCriterion.wf_pf\nPuckCriterion.wf_pma\nPuckCriterion.wf_pmb\nPuckCriterion.wf_pmc" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.get_dpf_material_id_by_analyis_ply_map", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.get_dpf_material_id_by_analyis_ply_map.html#get_dpf_material_id_by_analyis_ply_map", + "title": "get_dpf_material_id_by_analyis_ply_map", + "section": "get_dpf_material_id_by_analyis_ply_map", + "text": "Get Dict that maps analysis ply names to dpf_material_ids.\nmesh (MeshedRegion) – DPF Meshed region enriched with lay-up information\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source with rst file or streams_provider. The streams provider is\navailable from CompositeModel.core_model (under metadata.streams_provider).\nCache the output because the computation can be performance-critical.\ndict[str, int64]\nget_dpf_material_id_by_analyis_ply_map\nMeshedRegion\nDataSources\nOperator\nCompositeModel.core_model\ndict\nstr\nint64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.html#ansys.dpf.composites.failure_criteria.PuckCriterion", - "title": "PuckCriterion > PuckCriterion > PuckCriterion", - "section": "PuckCriterion > PuckCriterion", - "text": "class ansys.dpf.composites.failure_criteria.PuckCriterion(*, pf=True, pma=True, pmb=True, pmc=True, pd=False, dim=2, wf_pf=1.0, wf_pma=1.0, wf_pmb=1.0, wf_pmc=1.0, wf_pd=1.0, cfps=True, s=0.5, M=0.5, interface_weakening_factor=0.8, force_global_constants=False, p21_neg=0.275, p21_pos=0.325, p22_neg=0.225, p22_pos=0.225)\n\nDefines the Puck failure criterion for UD reinforced materials.\n\nParameters\n\npf (bool, default: True) – Whether to activate the failure evaluation regarding fiber failure.\n\npma (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure due to tension.\n\npmb (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure due to compression.\n\npmc (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure due to shear failure.\n\npd (bool, default: False) – Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used. The latter one also supports the failure mode delamination. Use 1 for a simplified Puck criterion.\n\nwf_pf (float, default: 1.0) – Weighting factor of the fiber failure (pf) mode.\n\nwf_pma (float, default: 1.0) – Weighting factor of the matrix failure (pma) mode.\n\nwf_pmb (float, default: 1.0) – Weighting factor of the matrix failure (pmb) mode.\n\nwf_pmc (float, default: 1.0) – Weighting factor of the matrix failure (pmc) mode.\n\nwf_pd (float, default: 1.0) – Weighting factor of the delamination failure (pd) mode.\n\ncfps (bool, default: True) – Whether to consider inter-fiber strength reduction due to fiber parallel stresses.\n\ns (float, default: 0.5) – Specifies the effect of fiber parallel stresses regarding inter-fiber failure. s = [0, 1) and the default is 0.5.\n\nm – Specifies the effect of fiber parallel stresses regarding inter-fiber failure. M = [0, 1). The default is 0.5.\n\ninterface_weakening_factor (float, default: 0.8) – Multiplicator for the interlaminar strength if failure mode pd is active. The default is 0.8.\n\nforce_global_constants (bool, default: False) – Whether to use global constants instead of the material-wise properties.\n\np21_neg (float, default: 0.275) – Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for compression.\n\np21_pos (float, default: 0.325) – Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.,\n\np22_neg (float, default: 0.225) – Global inclination factor of the fracture plane \\perp \\perp for compression.\n\np22_pos (float, default: 0.225) – Global inclination factor of the fracture plane \\perp \\perp for tension.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nPuckCriterion.to_dict()\n\n\n\nPuckCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nPuckCriterion.M\n\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure.\n\nPuckCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nPuckCriterion.cfps\n\nWhether to consider inter-fiber strength reduction due to fiber parallel stresses.\n\nPuckCriterion.dim\n\nWhether the 2D or 3D formulation of the criterion is used.\n\nPuckCriterion.force_global_constants\n\nWhether to use global constants instead of the material-wise properties.\n\nPuckCriterion.interface_weakening_factor\n\nMultiplicator for the interlaminar strength if failure mode pd is active.\n\nPuckCriterion.name\n\nName of the failure criterion.\n\nPuckCriterion.p21_neg\n\nGlobal inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for compression.\n\nPuckCriterion.p21_pos\n\nGlobal inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.\n\nPuckCriterion.p22_neg\n\nGlobal inclination factor of the fracture plane \\perp \\perp for compression.\n\nPuckCriterion.p22_pos\n\nGlobal inclination factor of the fracture plane \\perp \\perp for tension.\n\nPuckCriterion.pd\n\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\nPuckCriterion.pf\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nPuckCriterion.pma\n\nWhether to activate the failure evaluation regarding matrix failure due to tension.\n\nPuckCriterion.pmb\n\nWhether to activate the failure evaluation regarding matrix failure due to compression.\n\nPuckCriterion.pmc\n\nWhether to activate the failure evaluation regarding matrix failure due to shear failure.\n\nPuckCriterion.s\n\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure.\n\nPuckCriterion.wf_pd\n\nWeighting factor of the delamination failure (pd) mode.\n\nPuckCriterion.wf_pf\n\nWeighting factor of the fiber failure (pf) mode.\n\nPuckCriterion.wf_pma\n\nWeighting factor of the matrix failure (pma) mode.\n\nPuckCriterion.wf_pmb\n\nWeighting factor of the matrix failure (pmb) mode.\n\nPuckCriterion.wf_pmc\n\nWeighting factor of the matrix failure (pmc) mode.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.get_dpf_material_id_by_analyis_ply_map", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.get_dpf_material_id_by_analyis_ply_map.html#ansys.dpf.composites.layup_info.get_dpf_material_id_by_analyis_ply_map", + "title": "get_dpf_material_id_by_analyis_ply_map > get_dpf_material_id_by_analyis_ply_map > get_dpf_material_id_by_analyis_ply_map", + "section": "get_dpf_material_id_by_analyis_ply_map > get_dpf_material_id_by_analyis_ply_map", + "text": "ansys.dpf.composites.layup_info.get_dpf_material_id_by_analyis_ply_map(mesh, data_source_or_streams_provider)\n\nGet Dict that maps analysis ply names to dpf_material_ids.\n\nParameters\n\nmesh (MeshedRegion) – DPF Meshed region enriched with lay-up information\n\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source with rst file or streams_provider. The streams provider is\navailable from CompositeModel.core_model (under metadata.streams_provider).\n\nNotes\n\nCache the output because the computation can be performance-critical.\n\nReturn type\n\ndict[str, int64]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b21", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b21.html#b21", - "title": "b21", - "section": "b21", - "text": "In-plane shear friction coefficient. The default is 0.2.\nfloat\nb21\n0.2\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.material_support", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.material_support.html#material_support", + "title": "material_support", + "section": "material_support", + "text": "material_support" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b21", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b21.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.b21", - "title": "b21 > b21 > b21", - "section": "b21 > b21", - "text": "property CuntzeCriterion.b21: float\n\nIn-plane shear friction coefficient. The default is 0.2.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.material_support", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.material_support.html#ansys.dpf.composites.data_sources.CompositeDataSources.material_support", + "title": "material_support > material_support > material_support", + "section": "material_support > material_support", + "text": "CompositeDataSources.material_support: DataSources\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.write_data_for_full_element_scope", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.write_data_for_full_element_scope.html#write_data_for_full_element_scope", - "title": "write_data_for_full_element_scope", - "section": "write_data_for_full_element_scope", - "text": "Whether to write the data for all element labels in the element scope.\nThis makes sense if an element scope is explicitly requested\nbut the actual scope where postprocessing has happened is smaller,\nperhaps due to ply scoping.\nwrite_data_for_full_element_scope" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.MIXED", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.MIXED.html#mixed", + "title": "MIXED", + "section": "MIXED", + "text": "MIXED" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.write_data_for_full_element_scope", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.write_data_for_full_element_scope.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.write_data_for_full_element_scope", - "title": "write_data_for_full_element_scope > write_data_for_full_element_scope > write_data_for_full_element_scope", - "section": "write_data_for_full_element_scope > write_data_for_full_element_scope", - "text": "ResultDefinitionScope.write_data_for_full_element_scope: bool = True\n\nWhether to write the data for all element labels in the element scope.\n\nThis makes sense if an element scope is explicitly requested\nbut the actual scope where postprocessing has happened is smaller,\nperhaps due to ply scoping.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.MIXED", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.MIXED.html#ansys.dpf.composites.layup_info.LayupModelContextType.MIXED", + "title": "MIXED > MIXED > MIXED", + "section": "MIXED > MIXED", + "text": "LayupModelContextType.MIXED = 3\n\n" }, { - "objectID": "api/composite_model", - "href": "api/composite_model.html#composite-model", - "title": "Composite model", - "section": "Composite model", - "text": "CompositeModel(composite_files, server[, ...])\nProvides access to the basic composite postprocessing functionality.\nComposite model\nCompositeModel" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_m", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_m.html#puck_constants_m", + "title": "Puck_Constants_m", + "section": "Puck_Constants_m", + "text": "Puck_Constants_m" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MAX", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MAX.html#max", - "title": "MAX", - "section": "MAX", - "text": "MAX" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_m", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_m.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_m", + "title": "Puck_Constants_m > Puck_Constants_m > Puck_Constants_m", + "section": "Puck_Constants_m > Puck_Constants_m", + "text": "MaterialProperty.Puck_Constants_m: str = 'degradation_parameter_m_puck_constants'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MAX", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MAX.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MAX", - "title": "MAX > MAX > MAX", - "section": "MAX > MAX", - "text": "SpotReductionStrategy.MAX = 'MAX'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.p", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.p.html#p", + "title": "p", + "section": "p", + "text": "p" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR32", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR32.html#tensor32", - "title": "TENSOR32", - "section": "TENSOR32", - "text": "TENSOR32" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.p", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.p.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.p", + "title": "p > p > p", + "section": "p > p", + "text": "FailureModeEnum.p = 800\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR32", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR32.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR32", - "title": "TENSOR32 > TENSOR32 > TENSOR32", - "section": "TENSOR32 > TENSOR32", - "text": "Sym3x3TensorComponent.TENSOR32 = 4\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA.html#pma", - "title": "pmA", - "section": "pmA", - "text": "pmA" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.name.html#ansys.dpf.composites.failure_criteria.PuckCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property PuckCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA", - "title": "pmA > pmA > pmA", - "section": "pmA > pmA", - "text": "FailureModeEnum.pmA = 802\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_short_fiber_composite_files_to_server", + "href": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_short_fiber_composite_files_to_server.html#upload_short_fiber_composite_files_to_server", + "title": "upload_short_fiber_composite_files_to_server", + "section": "upload_short_fiber_composite_files_to_server", + "text": "Upload short fiber composites files to server.\ndata_files (ShortFiberCompositesFiles)\nserver (BaseServer)\nShortFiberCompositesFiles\nupload_short_fiber_composite_files_to_server\nShortFiberCompositesFiles\nBaseServer\nShortFiberCompositesFiles" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pf.html#pf", - "title": "pf", - "section": "pf", - "text": "pf" + "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_short_fiber_composite_files_to_server", + "href": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_short_fiber_composite_files_to_server.html#ansys.dpf.composites.server_helpers.upload_short_fiber_composite_files_to_server", + "title": "upload_short_fiber_composite_files_to_server > upload_short_fiber_composite_files_to_server > upload_short_fiber_composite_files_to_server", + "section": "upload_short_fiber_composite_files_to_server > upload_short_fiber_composite_files_to_server", + "text": "ansys.dpf.composites.server_helpers.upload_short_fiber_composite_files_to_server(data_files, server)\n\nUpload short fiber composites files to server.\n\nParameters\n\ndata_files (ShortFiberCompositesFiles)\n\nserver (BaseServer)\n\nReturn type\n\nShortFiberCompositesFiles\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pf.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.pf", - "title": "pf > pf > pf", - "section": "pf > pf", - "text": "FailureModeEnum.pf = 801\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removesuffix", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removesuffix.html#removesuffix", + "title": "removesuffix", + "section": "removesuffix", + "text": "Return a str with the given suffix string removed if present.\nIf the string ends with the suffix string and that suffix is not empty,\nreturn string[:-len(suffix)]. Otherwise, return a copy of the original\nstring.\nremovesuffix" }, { - "objectID": "examples/gallery_examples/003_short_fiber_example", - "href": "examples/gallery_examples/003_short_fiber_example.html#failure-analysis-for-short-fiber-composites", - "title": "Failure analysis for short fiber composites", - "section": "Failure analysis for short fiber composites", - "text": "This example shows how to evaluate failures of a short fiber reinforced\npart.\nAs part of the short fiber workflows, you can evaluate and plot Tsai-Hill\ntype orientation tensor-dependent failure criteria. This example shows\nhow to configure the DPF operator short_fiber_failure_criterion_evaluator\nto compute such failure criteria.\nThe model shown in this example consists of a tensile specimen made of\na short glass fiber reinforced thermoplastic injection molded from both sides.\nThe evaluation of failure criteria in short fiber workflows is a\nbeta feature, introduced in Ansys 2021 R2.\nFailure analysis for short fiber composites\nshort_fiber_failure_criterion_evaluator" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removesuffix", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.removesuffix.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.removesuffix", + "title": "removesuffix > removesuffix > removesuffix", + "section": "removesuffix > removesuffix", + "text": "FailureMeasureEnum.removesuffix(suffix, /)\n\nReturn a str with the given suffix string removed if present.\n\nIf the string ends with the suffix string and that suffix is not empty,\nreturn string[:-len(suffix)]. Otherwise, return a copy of the original\nstring.\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/003_short_fiber_example", - "href": "examples/gallery_examples/003_short_fiber_example.html#set-up-analysis", - "title": "Failure analysis for short fiber composites > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nThese files are needed:\nMechanical APDL result (RST) file containing the simulation results\nEngineering Data (MATML) file containing the material properties of the composite\nMechanical APDL input file (DS.DAT) containing the fiber orientation tensor data\nSet up analysis" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isupper", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isupper.html#isupper", + "title": "isupper", + "section": "isupper", + "text": "Return True if the string is an uppercase string, False otherwise.\nA string is uppercase if all cased characters in the string are uppercase and\nthere is at least one cased character in the string.\nisupper" }, { - "objectID": "examples/gallery_examples/003_short_fiber_example", - "href": "examples/gallery_examples/003_short_fiber_example.html#set-up-data-sources", - "title": "Failure analysis for short fiber composites > Set up data sources", - "section": "Set up data sources", - "text": "Set up the data sources.\nSet up data sources" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isupper", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isupper.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isupper", + "title": "isupper > isupper > isupper", + "section": "isupper > isupper", + "text": "FailureMeasureEnum.isupper(/)\n\nReturn True if the string is an uppercase string, False otherwise.\n\nA string is uppercase if all cased characters in the string are uppercase and\nthere is at least one cased character in the string.\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/003_short_fiber_example", - "href": "examples/gallery_examples/003_short_fiber_example.html#initialize-dpf-model", - "title": "Failure analysis for short fiber composites > Initialize DPF model", - "section": "Initialize DPF model", - "text": "Initialize the DPF model.\nInitialize DPF model" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdigit", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdigit.html#isdigit", + "title": "isdigit", + "section": "isdigit", + "text": "Return True if the string is a digit string, False otherwise.\nA string is a digit string if all characters in the string are digits and there\nis at least one character in the string.\nisdigit" }, { - "objectID": "examples/gallery_examples/003_short_fiber_example", - "href": "examples/gallery_examples/003_short_fiber_example.html#plot-results", - "title": "Failure analysis for short fiber composites > Plot results", - "section": "Plot results", - "text": "Plot the two largest eigenvalues (a11 and a22) of the fiber orientation tensor.\nNote that the plots reveal the presence of a weld line in the middle of the specimen.\nPlot results" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdigit", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdigit.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isdigit", + "title": "isdigit > isdigit > isdigit", + "section": "isdigit > isdigit", + "text": "FailureMeasureEnum.isdigit(/)\n\nReturn True if the string is a digit string, False otherwise.\n\nA string is a digit string if all characters in the string are digits and there\nis at least one character in the string.\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/003_short_fiber_example", - "href": "examples/gallery_examples/003_short_fiber_example.html#configure-and-evaluate", - "title": "Failure analysis for short fiber composites > Configure and evaluate", - "section": "Configure and evaluate", - "text": "Configure the short fiber failure criterion evaluator and evaluate.\nNote that you can specify optional time and mesh scoping inputs.\nConfigure and evaluate" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.wf.html#wf", + "title": "wf", + "section": "wf", + "text": "Weighting factor of this failure criterion.\nfloat\nwf\nfloat" }, { - "objectID": "examples/gallery_examples/003_short_fiber_example", - "href": "examples/gallery_examples/003_short_fiber_example.html#compute-and-plot-results", - "title": "Failure analysis for short fiber composites > Compute and plot results", - "section": "Compute and plot results", - "text": "Compute and plot the maximum failure value per element.\nTotal running time of the script: (0 minutes 3.949 seconds)\nDownload Jupyter notebook: 003_short_fiber_example.ipynb\nDownload Python source code: 003_short_fiber_example.py\nDownload zipped: 003_short_fiber_example.zip\nGallery generated by Sphinx-Gallery\nCompute and plot results\nDownload Jupyter notebook: 003_short_fiber_example.ipynb\nDownload Python source code: 003_short_fiber_example.py\nDownload zipped: 003_short_fiber_example.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.wf.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion.wf", + "title": "wf > wf > wf", + "section": "wf > wf", + "text": "property HoffmanCriterion.wf: float\n\nWeighting factor of this failure criterion.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmb", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmb.html#pmb", - "title": "pmb", - "section": "pmb", - "text": "Whether to activate the failure evaluation regarding matrix failure due to compression.\nbool\npmb\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZt.html#strain_limits_ezt", + "title": "Strain_Limits_eZt", + "section": "Strain_Limits_eZt", + "text": "Strain_Limits_eZt" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmb", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmb.html#ansys.dpf.composites.failure_criteria.PuckCriterion.pmb", - "title": "pmb > pmb > pmb", - "section": "pmb > pmb", - "text": "property PuckCriterion.pmb: bool\n\nWhether to activate the failure evaluation regarding matrix failure due to compression.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZt", + "title": "Strain_Limits_eZt > Strain_Limits_eZt > Strain_Limits_eZt", + "section": "Strain_Limits_eZt > Strain_Limits_eZt", + "text": "MaterialProperty.Strain_Limits_eZt: str = 'strain_tensile_z_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s12.html#wf_s12", - "title": "wf_s12", - "section": "wf_s12", - "text": "Weighting factor of the failure mode s12.\nfloat\nwf_s12\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aY", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aY.html#thermal_expansion_coefficients_ay", + "title": "Thermal_Expansion_Coefficients_aY", + "section": "Thermal_Expansion_Coefficients_aY", + "text": "Thermal_Expansion_Coefficients_aY" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s12.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s12", - "title": "wf_s12 > wf_s12 > wf_s12", - "section": "wf_s12 > wf_s12", - "text": "property MaxStressCriterion.wf_s12: float\n\nWeighting factor of the failure mode s12.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aY", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aY.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aY", + "title": "Thermal_Expansion_Coefficients_aY > Thermal_Expansion_Coefficients_aY > Thermal_Expansion_Coefficients_aY", + "section": "Thermal_Expansion_Coefficients_aY > Thermal_Expansion_Coefficients_aY", + "text": "MaterialProperty.Thermal_Expansion_Coefficients_aY: str = 'coefficient_thermal_expansion_y'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.RESERVE_FACTOR", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.RESERVE_FACTOR.html#reserve_factor", - "title": "RESERVE_FACTOR", - "section": "RESERVE_FACTOR", - "text": "RESERVE_FACTOR" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt.html#stress_limits_xt", + "title": "Stress_Limits_Xt", + "section": "Stress_Limits_Xt", + "text": "Stress_Limits_Xt" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.RESERVE_FACTOR", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.RESERVE_FACTOR.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.RESERVE_FACTOR", - "title": "RESERVE_FACTOR > RESERVE_FACTOR > RESERVE_FACTOR", - "section": "RESERVE_FACTOR > RESERVE_FACTOR", - "text": "FailureMeasureEnum.RESERVE_FACTOR: str = 'safety_factor'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt", + "title": "Stress_Limits_Xt > Stress_Limits_Xt > Stress_Limits_Xt", + "section": "Stress_Limits_Xt > Stress_Limits_Xt", + "text": "MaterialProperty.Stress_Limits_Xt: str = 'stress_tensile_x_direction'\n\n" }, { - "objectID": "examples/gallery_examples/010_harmonic_example", - "href": "examples/gallery_examples/010_harmonic_example.html#postprocess-a-harmonic-analysis", - "title": "Postprocess a harmonic analysis", - "section": "Postprocess a harmonic analysis", - "text": "This example shows how to evaluate failure criteria for a harmonic simulation.\nIt shows how to create a phase sweep to compute the maximum IRF in the frequency-phase\nspace and shows how to identify the critical failure mode and the critical layer.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nPostprocess a harmonic analysis\ncomposite_files_from_workbench_harmonic_analysis()" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.rst_files", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.rst_files.html#rst_files", + "title": "rst_files", + "section": "rst_files", + "text": "Path of the result (RST) files.\nlist[Union[str, PathLike[str]]]\nrst_files\nlist\nUnion\nstr\nPathLike\nstr" }, { - "objectID": "examples/gallery_examples/010_harmonic_example", - "href": "examples/gallery_examples/010_harmonic_example.html#set-up-analysis", - "title": "Postprocess a harmonic analysis > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of loading the required modules, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries and matplotlib\nStart a DPF server and copy the example files into the current working directory.\nCreate a composite model\nDefine a failure criterion\nSet up analysis" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.rst_files", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.rst_files.html#ansys.dpf.composites.result_definition.ResultDefinition.rst_files", + "title": "rst_files > rst_files > rst_files", + "section": "rst_files > rst_files", + "text": "property ResultDefinition.rst_files: list[str | PathLike[str]]\n\nPath of the result (RST) files.\n\nReturn type\n\nlist[Union[str, PathLike[str]]]\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/010_harmonic_example", - "href": "examples/gallery_examples/010_harmonic_example.html#obtain-stresses-and-strains-and-compute-max-irf-over-all-phases-and-frequencies", - "title": "Postprocess a harmonic analysis > Obtain stresses and strains and compute max IRF over all phases and frequencies", - "section": "Obtain stresses and strains and compute max IRF over all phases and frequencies", - "text": "Get complex stresses and strains at all frequencies\nGet operators that provide material data\nDefine the frequency sweep. This is relatively coarse so the example does not take\ntoo much time.\nInitialize result containers. We create a result container for the failure value,\nthe failure mode and the layer index in which the failure occurs.\nLoop over all the phases and evaluate the failure criterion.\nThe result is added to the field containers declared in the previous cell.\nIn the end each container contains a field for each combination of frequency\nand phase\nCompute maximum over all the phases and frequencies for each element and plot the resulting\nIRF values\nObtain stresses and strains and compute max IRF over all phases and frequencies" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lower", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lower.html#lower", + "title": "lower", + "section": "lower", + "text": "Return a copy of the string converted to lowercase.\nlower" }, { - "objectID": "examples/gallery_examples/010_harmonic_example", - "href": "examples/gallery_examples/010_harmonic_example.html#detailed-analysis-of-the-critical-element", - "title": "Postprocess a harmonic analysis > Detailed analysis of the critical element", - "section": "Detailed analysis of the critical element", - "text": "Identify the element with the maximum IRF\nScope container with all frequencies and phases to critical element so we can plot\nthe critical IRF over all the frequencies\nCompute the maximum IRF over all the phases for each frequency and plot the result for\nthe critical element. Note: this can be different from maximum overall IRF\nat each frequency, because we look only at the element that has the highest IRF overall.\nCompute the critical phase\nCompute critical layer and critical failure mode.\nTotal running time of the script: (0 minutes 13.998 seconds)\nDownload Jupyter notebook: 010_harmonic_example.ipynb\nDownload Python source code: 010_harmonic_example.py\nDownload zipped: 010_harmonic_example.zip\nGallery generated by Sphinx-Gallery\nDetailed analysis of the critical element\nDownload Jupyter notebook: 010_harmonic_example.ipynb\nDownload Python source code: 010_harmonic_example.py\nDownload zipped: 010_harmonic_example.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lower", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lower.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.lower", + "title": "lower > lower > lower", + "section": "lower > lower", + "text": "FailureMeasureEnum.lower(/)\n\nReturn a copy of the string converted to lowercase.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.remove", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.remove.html#remove", - "title": "remove", - "section": "remove", - "text": "Remove a failure criterion.\nkey (str) – Name of the failure criterion.\nFailureCriterionBase\nRemoved failure criterion or None.\nremove\nstr\nFailureCriterionBase\nNone" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmt", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmt.html#wf_lmt", + "title": "wf_lmt", + "section": "wf_lmt", + "text": "Weighting factor of matrix failure due to tension (lmt).\nfloat\nwf_lmt\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.remove", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.remove.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.remove", - "title": "remove > remove > remove", - "section": "remove > remove", - "text": "CombinedFailureCriterion.remove(key)\n\nRemove a failure criterion.\n\nParameters\n\nkey (str) – Name of the failure criterion.\n\nReturn type\n\nFailureCriterionBase\n\nReturns\n\nRemoved failure criterion or None.\n\nExamples\n\n>>> combined_failure.remove(\"Max Stress\")\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmt", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmt.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmt", + "title": "wf_lmt > wf_lmt > wf_lmt", + "section": "wf_lmt > wf_lmt", + "text": "property LaRCCriterion.wf_lmt: float\n\nWeighting factor of matrix failure due to tension (lmt).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSyz", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSyz.html#esyz", - "title": "eSyz", - "section": "eSyz", - "text": "Global strain limit in material direction 23.\nfloat\neSyz\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1.html#e1", + "title": "e1", + "section": "e1", + "text": "e1" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSyz", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSyz.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSyz", - "title": "eSyz > eSyz > eSyz", - "section": "eSyz > eSyz", - "text": "property MaxStrainCriterion.eSyz: float\n\nGlobal strain limit in material direction 23.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e1", + "title": "e1 > e1 > e1", + "section": "e1 > e1", + "text": "FailureModeEnum.e1 = 110\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_pos", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_pos.html#p22_pos", - "title": "p22_pos", - "section": "p22_pos", - "text": "Global inclination factor of the fracture plane \\perp \\perp for tension.\nfloat\np22_pos\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_layers", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_layers.html#n_layers", + "title": "n_layers", + "section": "n_layers", + "text": "n_layers" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_pos", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_pos.html#ansys.dpf.composites.failure_criteria.PuckCriterion.p22_pos", - "title": "p22_pos > p22_pos > p22_pos", - "section": "p22_pos > p22_pos", - "text": "property PuckCriterion.p22_pos: float\n\nGlobal inclination factor of the fracture plane \\perp \\perp for tension.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_layers", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_layers.html#ansys.dpf.composites.layup_info.ElementInfo.n_layers", + "title": "n_layers > n_layers > n_layers", + "section": "n_layers > n_layers", + "text": "ElementInfo.n_layers: int\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_container_helper_op", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_container_helper_op.html#material_container_helper_op", - "title": "material_container_helper_op", - "section": "material_container_helper_op", - "text": "Get material container helper operator.\nThis operator can be used to access metadata of the materials.\nReturn value is None if the server version does not support this operator.\nThe minimum version is 2024 R1-pre0 (7.1).\nOperator\nmaterial_container_helper_op\nOperator" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.translate", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.translate.html#translate", + "title": "translate", + "section": "translate", + "text": "Replace each character in the string using the given translation table.\nTranslation table, which must be a mapping of Unicode ordinals to\nUnicode ordinals, strings, or None.\nThe table must implement lookup/indexing via __getitem__, for instance a\ndictionary or list. If this operation raises LookupError, the character is\nleft untouched. Characters mapped to None are deleted.\ntranslate" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_container_helper_op", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_container_helper_op.html#ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_container_helper_op", - "title": "material_container_helper_op > material_container_helper_op > material_container_helper_op", - "section": "material_container_helper_op > material_container_helper_op", - "text": "property MaterialOperators.material_container_helper_op: Operator\n\nGet material container helper operator.\n\nThis operator can be used to access metadata of the materials.\nReturn value is None if the server version does not support this operator.\nThe minimum version is 2024 R1-pre0 (7.1).\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.translate", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.translate.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.translate", + "title": "translate > translate > translate", + "section": "translate > translate", + "text": "FailureMeasureEnum.translate(table, /)\n\nReplace each character in the string using the given translation table.\n\ntable\n\nTranslation table, which must be a mapping of Unicode ordinals to\nUnicode ordinals, strings, or None.\n\nThe table must implement lookup/indexing via __getitem__, for instance a\ndictionary or list. If this operation raises LookupError, the character is\nleft untouched. Characters mapped to None are deleted.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.dpf_material_id", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.dpf_material_id.html#dpf_material_id", + "title": "dpf_material_id", + "section": "dpf_material_id", + "text": "dpf_material_id" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.active.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property MaxStressCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.dpf_material_id", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.dpf_material_id.html#ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.dpf_material_id", + "title": "dpf_material_id > dpf_material_id > dpf_material_id", + "section": "dpf_material_id > dpf_material_id", + "text": "MaterialMetadata.dpf_material_id: int = 0\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_info", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_info.html#get_element_info", + "title": "get_element_info", + "section": "get_element_info", + "text": "Get element information for an element ID.\nThis method returns None if the element type is not supported.\nelement_id (int) – Element ID or label.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nOptional[ElementInfo]\nget_element_info\nNone\nint\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nOptional\nElementInfo" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "HoffmanCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_info", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_info.html#ansys.dpf.composites.composite_model.CompositeModel.get_element_info", + "title": "get_element_info > get_element_info > get_element_info", + "section": "get_element_info > get_element_info", + "text": "CompositeModel.get_element_info(element_id, composite_definition_label=None)\n\nGet element information for an element ID.\n\nThis method returns None if the element type is not supported.\n\nParameters\n\nelement_id (int) – Element ID or label.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nOptional[ElementInfo]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize.html#capitalize", - "title": "capitalize", - "section": "capitalize", - "text": "Return a capitalized version of the string.\nMore specifically, make the first character have upper case and the rest lower\ncase.\ncapitalize" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format.html#format", + "title": "format", + "section": "format", + "text": "Return a formatted version of the string, using substitutions from args and kwargs.\nThe substitutions are identified by braces (‘{’ and ‘}’).\nformat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize", - "title": "capitalize > capitalize > capitalize", - "section": "capitalize > capitalize", - "text": "FailureMeasureEnum.capitalize(/)\n\nReturn a capitalized version of the string.\n\nMore specifically, make the first character have upper case and the rest lower\ncase.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.format", + "title": "format > format > format", + "section": "format > format", + "text": "FailureMeasureEnum.format(*args, **kwargs)\n\nReturn a formatted version of the string, using substitutions from args and kwargs.\nThe substitutions are identified by braces (‘{’ and ‘}’).\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e23", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e23.html#e23", - "title": "e23", - "section": "e23", - "text": "Out-of-plane shear strains e23 of each ply.\nndarray[Any, dtype[float64]]\ne23\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.sc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.sc.html#sc", + "title": "sc", + "section": "sc", + "text": "sc" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e23", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e23.html#ansys.dpf.composites.sampling_point.SamplingPoint.e23", - "title": "e23 > e23 > e23", - "section": "e23 > e23", - "text": "property SamplingPoint.e23: ndarray[Any, dtype[float64]]\n\nOut-of-plane shear strains e23 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.sc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.sc.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.sc", + "title": "sc > sc > sc", + "section": "sc > sc", + "text": "FailureModeEnum.sc = 330\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_json.html#to_json", - "title": "to_json", - "section": "to_json", - "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zt.html#stress_limits_zt", + "title": "Stress_Limits_Zt", + "section": "Stress_Limits_Zt", + "text": "Stress_Limits_Zt" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_json.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_json", - "title": "to_json > to_json > to_json", - "section": "to_json > to_json", - "text": "HoffmanCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zt", + "title": "Stress_Limits_Zt > Stress_Limits_Zt > Stress_Limits_Zt", + "section": "Stress_Limits_Zt > Stress_Limits_Zt", + "text": "MaterialProperty.Stress_Limits_Zt: str = 'stress_tensile_z_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s12.html#s12", - "title": "s12", - "section": "s12", - "text": "s12" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2.html#polar_properties_e2", + "title": "polar_properties_E2", + "section": "polar_properties_E2", + "text": "Polar property E2 of the laminate.\nndarray[Any, dtype[float64]]\npolar_properties_E2\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s12.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s12", - "title": "s12 > s12 > s12", - "section": "s12 > s12", - "text": "FailureModeEnum.s12 = 240\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2.html#ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2", + "title": "polar_properties_E2 > polar_properties_E2 > polar_properties_E2", + "section": "polar_properties_E2 > polar_properties_E2", + "text": "property SamplingPoint.polar_properties_E2: ndarray[Any, dtype[float64]]\n\nPolar property E2 of the laminate.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.endswith", @@ -2758,186 +2359,158 @@ "text": "FailureMeasureEnum.endswith(suffix, [start, [end]], /)\n\nReturn True if the string ends with the specified suffix, False otherwise.\n\nsuffix\n\nA string or a tuple of strings to try.\n\nstart\n\nOptional start position. Default: start of the string.\n\nend\n\nOptional stop position. Default: end of the string.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.time", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.time.html#time", - "title": "time", - "section": "time", - "text": "Time or solution step.\nDPF Composites automatically selects the last time step if time is not set.\nYou can use the CompositeModel.get_result_times_or_frequencies() method\nto list the available times or frequencies in the result file.\nOptional[float]\ntime\nCompositeModel.get_result_times_or_frequencies()\nOptional\nfloat" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.time", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.time.html#ansys.dpf.composites.result_definition.ResultDefinition.time", - "title": "time > time > time", - "section": "time > time", - "text": "property ResultDefinition.time: float | None\n\nTime or solution step.\n\nDPF Composites automatically selects the last time step if time is not set.\n\nYou can use the CompositeModel.get_result_times_or_frequencies() method\nto list the available times or frequencies in the result file.\n\nReturn type\n\nOptional[float]\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.results", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.results.html#results", - "title": "results", - "section": "results", - "text": "Results of the sampling point results as a JSON dictionary.\nAny\nresults\nAny" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.results", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.results.html#ansys.dpf.composites.sampling_point.SamplingPoint.results", - "title": "results > results > results", - "section": "results > results", - "text": "property SamplingPoint.results: Any\n\nResults of the sampling point results as a JSON dictionary.\n\nReturn type\n\nAny\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_json.html#to_json", - "title": "to_json", - "section": "to_json", - "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_json.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.to_json", - "title": "to_json > to_json > to_json", - "section": "to_json > to_json", - "text": "LaRCCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_pos", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_pos.html#puck_constants_p_22_pos", + "title": "Puck_Constants_p_22_pos", + "section": "Puck_Constants_p_22_pos", + "text": "Puck_Constants_p_22_pos" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s23.html#wf_s23", - "title": "wf_s23", - "section": "wf_s23", - "text": "Weighting factor of the failure mode s23.\nfloat\nwf_s23\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_pos", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_pos.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_pos", + "title": "Puck_Constants_p_22_pos > Puck_Constants_p_22_pos > Puck_Constants_p_22_pos", + "section": "Puck_Constants_p_22_pos > Puck_Constants_p_22_pos", + "text": "MaterialProperty.Puck_Constants_p_22_pos: str = 'tensile_inclination_yz_puck_constants'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s23.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s23", - "title": "wf_s23 > wf_s23 > wf_s23", - "section": "wf_s23 > wf_s23", - "text": "property MaxStressCriterion.wf_s23: float\n\nWeighting factor of the failure mode s23.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc.html#stress_limits_xc", + "title": "Stress_Limits_Xc", + "section": "Stress_Limits_Xc", + "text": "Stress_Limits_Xc" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s13.html#wf_s13", - "title": "wf_s13", - "section": "wf_s13", - "text": "Weighting factor of the failure mode s13.\nfloat\nwf_s13\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc", + "title": "Stress_Limits_Xc > Stress_Limits_Xc > Stress_Limits_Xc", + "section": "Stress_Limits_Xc > Stress_Limits_Xc", + "text": "MaterialProperty.Stress_Limits_Xc: str = 'stress_compressive_x_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s13.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s13", - "title": "wf_s13 > wf_s13 > wf_s13", - "section": "wf_s13 > wf_s13", - "text": "property MaxStressCriterion.wf_s13: float\n\nWeighting factor of the failure mode s13.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2.html#s2", + "title": "s2", + "section": "s2", + "text": "Stresses in the material 2 direction of each ply.\nndarray[Any, dtype[float64]]\ns2\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_a", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_a.html#thermal_expansion_coefficients_a", - "title": "Thermal_Expansion_Coefficients_a", - "section": "Thermal_Expansion_Coefficients_a", - "text": "Thermal_Expansion_Coefficients_a" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2.html#ansys.dpf.composites.sampling_point.SamplingPoint.s2", + "title": "s2 > s2 > s2", + "section": "s2 > s2", + "text": "property SamplingPoint.s2: ndarray[Any, dtype[float64]]\n\nStresses in the material 2 direction of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_a", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_a.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_a", - "title": "Thermal_Expansion_Coefficients_a > Thermal_Expansion_Coefficients_a > Thermal_Expansion_Coefficients_a", - "section": "Thermal_Expansion_Coefficients_a > Thermal_Expansion_Coefficients_a", - "text": "MaterialProperty.Thermal_Expansion_Coefficients_a: str = 'coefficient_thermal_expansion'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_operators", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_operators.html#material_operators", + "title": "material_operators", + "section": "material_operators", + "text": "Material operators.\nMaterialOperators\nmaterial_operators\nMaterialOperators" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e13", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e13.html#e13", - "title": "e13", - "section": "e13", - "text": "Out-of-plane shear strains e13 of each ply.\nndarray[Any, dtype[float64]]\ne13\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_operators", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_operators.html#ansys.dpf.composites.composite_model.CompositeModel.material_operators", + "title": "material_operators > material_operators > material_operators", + "section": "material_operators > material_operators", + "text": "property CompositeModel.material_operators: MaterialOperators\n\nMaterial operators.\n\nReturn type\n\nMaterialOperators\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e13", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e13.html#ansys.dpf.composites.sampling_point.SamplingPoint.e13", - "title": "e13 > e13 > e13", - "section": "e13 > e13", - "text": "property SamplingPoint.e13: ndarray[Any, dtype[float64]]\n\nOut-of-plane shear strains e13 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.measure", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.measure.html#measure", + "title": "measure", + "section": "measure", + "text": "Return type of the failure values.\nSupported types are \"inverse_reserve_factor\", \"safety_factor\",\nand \"safety_margin\".\nstr\nmeasure\n\"inverse_reserve_factor\"\n\"safety_factor\"\n\"safety_margin\"\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYt.html#strain_limits_eyt", - "title": "Strain_Limits_eYt", - "section": "Strain_Limits_eYt", - "text": "Strain_Limits_eYt" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.measure", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.measure.html#ansys.dpf.composites.result_definition.ResultDefinition.measure", + "title": "measure > measure > measure", + "section": "measure > measure", + "text": "property ResultDefinition.measure: str\n\nReturn type of the failure values.\n\nSupported types are \"inverse_reserve_factor\", \"safety_factor\",\nand \"safety_margin\".\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYt", - "title": "Strain_Limits_eYt > Strain_Limits_eYt > Strain_Limits_eYt", - "section": "Strain_Limits_eYt > Strain_Limits_eYt", - "text": "MaterialProperty.Strain_Limits_eYt: str = 'strain_tensile_y_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.eval_ins", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.eval_ins.html#eval_ins", + "title": "eval_ins", + "section": "eval_ins", + "text": "Whether to consider interlaminar normal stresses (s3) and compute them for layered shells.\nbool\neval_ins\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_polar_plot", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_polar_plot.html#get_polar_plot", - "title": "get_polar_plot", - "section": "get_polar_plot", - "text": "Create a standard polar plot to visualize the polar properties of the laminate.\ncomponents (Sequence[str], default: ('E1', 'E2', 'G12')) – Stiffness quantities to plot.\nSamplingPointFigure\nget_polar_plot\nSequence\nstr\n('E1', 'E2', 'G12')\nSamplingPointFigure" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.eval_ins", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.eval_ins.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.eval_ins", + "title": "eval_ins > eval_ins > eval_ins", + "section": "eval_ins > eval_ins", + "text": "property VonMisesCriterion.eval_ins: bool\n\nWhether to consider interlaminar normal stresses (s3) and compute them for layered shells.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_polar_plot", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_polar_plot.html#ansys.dpf.composites.sampling_point.SamplingPoint.get_polar_plot", - "title": "get_polar_plot > get_polar_plot > get_polar_plot", - "section": "get_polar_plot > get_polar_plot", - "text": "SamplingPoint.get_polar_plot(components=('E1', 'E2', 'G12'))\n\nCreate a standard polar plot to visualize the polar properties of the laminate.\n\nParameters\n\ncomponents (Sequence[str], default: ('E1', 'E2', 'G12')) – Stiffness quantities to plot.\n\nExamples\n\n>>> figure, axes = sampling_point.get_polar_plot(components=[\"E1\", \"G12\"])\n\nReturn type\n\nSamplingPointFigure\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_layered", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_layered.html#is_layered", + "title": "is_layered", + "section": "is_layered", + "text": "is_layered" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e2.html#wf_e2", - "title": "wf_e2", - "section": "wf_e2", - "text": "Weighting factor of the failure mode e2.\nfloat\nwf_e2\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_layered", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_layered.html#ansys.dpf.composites.layup_info.ElementInfo.is_layered", + "title": "is_layered > is_layered > is_layered", + "section": "is_layered > is_layered", + "text": "ElementInfo.is_layered: bool\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e2.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e2", - "title": "wf_e2 > wf_e2 > wf_e2", - "section": "wf_e2 > wf_e2", - "text": "property MaxStrainCriterion.wf_e2: float\n\nWeighting factor of the failure mode e2.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz.html#esxz", + "title": "eSxz", + "section": "eSxz", + "text": "Global strain limit in material direction 13.\nfloat\neSxz\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.LAMINATE_OFFSET", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.LAMINATE_OFFSET.html#laminate_offset", - "title": "LAMINATE_OFFSET", - "section": "LAMINATE_OFFSET", - "text": "LAMINATE_OFFSET" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz", + "title": "eSxz > eSxz > eSxz", + "section": "eSxz > eSxz", + "text": "property MaxStrainCriterion.eSxz: float\n\nGlobal strain limit in material direction 13.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.LAMINATE_OFFSET", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.LAMINATE_OFFSET.html#ansys.dpf.composites.layup_info.LayupProperty.LAMINATE_OFFSET", - "title": "LAMINATE_OFFSET > LAMINATE_OFFSET > LAMINATE_OFFSET", - "section": "LAMINATE_OFFSET > LAMINATE_OFFSET", - "text": "LayupProperty.LAMINATE_OFFSET = 3\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1.html#polar_properties_e1", + "title": "polar_properties_E1", + "section": "polar_properties_E1", + "text": "Polar property E1 of the laminate.\nndarray[Any, dtype[float64]]\npolar_properties_E1\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local.html#files_are_local", - "title": "files_are_local", - "section": "files_are_local", - "text": "files_are_local" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1.html#ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1", + "title": "polar_properties_E1 > polar_properties_E1 > polar_properties_E1", + "section": "polar_properties_E1 > polar_properties_E1", + "text": "property SamplingPoint.polar_properties_E1: ndarray[Any, dtype[float64]]\n\nPolar property E1 of the laminate.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local.html#ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local", - "title": "files_are_local > files_are_local > files_are_local", - "section": "files_are_local > files_are_local", - "text": "ShortFiberCompositesFiles.files_are_local: bool = True\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cma", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cma.html#wf_cma", + "title": "wf_cma", + "section": "wf_cma", + "text": "Weighting factor of matrix failure due to tension (cma).\nfloat\nwf_cma\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.dim.html#dim", - "title": "dim", - "section": "dim", - "text": "Specifies which formulation of the failure criterion is used.\nint\ndim\nint" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cma", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cma.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cma", + "title": "wf_cma > wf_cma > wf_cma", + "section": "wf_cma > wf_cma", + "text": "property CuntzeCriterion.wf_cma: float\n\nWeighting factor of matrix failure due to tension (cma).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.dim.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion.dim", - "title": "dim > dim > dim", - "section": "dim > dim", - "text": "property HoffmanCriterion.dim: int\n\nSpecifies which formulation of the failure criterion is used.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.element_type", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.element_type.html#element_type", + "title": "element_type", + "section": "element_type", + "text": "element_type" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.element_type", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.element_type.html#ansys.dpf.composites.layup_info.ElementInfo.element_type", + "title": "element_type > element_type > element_type", + "section": "element_type > element_type", + "text": "ElementInfo.element_type: int\n\n" }, { "objectID": "examples/gallery_examples/014_cyclic_symmetry_example", @@ -2972,224 +2545,322 @@ "href": "examples/gallery_examples/014_cyclic_symmetry_example.html#plot-deformations-on-the-expanded-model", "title": "Cyclic symmetry > Plot deformations on the expanded model", "section": "Plot deformations on the expanded model", - "text": "You can expand the deformations of the cyclic symmetry model as shown below.\nThe same expansion is possible for strains and stresses. For more information, see Ansys DPF.\nTotal running time of the script: (0 minutes 8.047 seconds)\nDownload Jupyter notebook: 014_cyclic_symmetry_example.ipynb\nDownload Python source code: 014_cyclic_symmetry_example.py\nDownload zipped: 014_cyclic_symmetry_example.zip\nGallery generated by Sphinx-Gallery\nPlot deformations on the expanded model\nDownload Jupyter notebook: 014_cyclic_symmetry_example.ipynb\nDownload Python source code: 014_cyclic_symmetry_example.py\nDownload zipped: 014_cyclic_symmetry_example.zip" + "text": "You can expand the deformations of the cyclic symmetry model as shown below.\nThe same expansion is possible for strains and stresses. For more information, see Ansys DPF.\nTotal running time of the script: (0 minutes 7.039 seconds)\nDownload Jupyter notebook: 014_cyclic_symmetry_example.ipynb\nDownload Python source code: 014_cyclic_symmetry_example.py\nDownload zipped: 014_cyclic_symmetry_example.zip\nGallery generated by Sphinx-Gallery\nPlot deformations on the expanded model\nDownload Jupyter notebook: 014_cyclic_symmetry_example.ipynb\nDownload Python source code: 014_cyclic_symmetry_example.py\nDownload zipped: 014_cyclic_symmetry_example.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.ply_type", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.ply_type.html#ply_type", - "title": "ply_type", - "section": "ply_type", - "text": "ply_type" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_names", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_names.html#material_names", + "title": "material_names", + "section": "material_names", + "text": "Material name to DPF material ID map.\nThis property can be used to filter analysis plies\nor element layers by material name.\ndict[str, int]\nmaterial_names\ndict\nstr\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.ply_type", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.ply_type.html#ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.ply_type", - "title": "ply_type > ply_type > ply_type", - "section": "ply_type > ply_type", - "text": "MaterialMetadata.ply_type: str | None = None\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_names", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_names.html#ansys.dpf.composites.composite_model.CompositeModel.material_names", + "title": "material_names > material_names > material_names", + "section": "material_names > material_names", + "text": "property CompositeModel.material_names: dict[str, int]\n\nMaterial name to DPF material ID map.\n\nThis property can be used to filter analysis plies\nor element layers by material name.\n\nReturn type\n\ndict[str, int]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt.html#stress_limits_xt", - "title": "Stress_Limits_Xt", - "section": "Stress_Limits_Xt", - "text": "Stress_Limits_Xt" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_json.html#to_json", + "title": "to_json", + "section": "to_json", + "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt", - "title": "Stress_Limits_Xt > Stress_Limits_Xt > Stress_Limits_Xt", - "section": "Stress_Limits_Xt > Stress_Limits_Xt", - "text": "MaterialProperty.Stress_Limits_Xt: str = 'stress_tensile_x_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_json.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_json", + "title": "to_json > to_json > to_json", + "section": "to_json > to_json", + "text": "CoreFailureCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.ACP", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.ACP.html#acp", + "title": "ACP", + "section": "ACP", + "text": "ACP" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.ACP", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.ACP.html#ansys.dpf.composites.layup_info.LayupModelContextType.ACP", + "title": "ACP > ACP > ACP", + "section": "ACP > ACP", + "text": "LayupModelContextType.ACP = 1\n\n" + }, + { + "objectID": "contribute", + "href": "contribute.html#contribute", + "title": "Contribute", + "section": "Contribute", + "text": "Contribute" + }, + { + "objectID": "contribute", + "href": "contribute.html#install-in-development-mode", + "title": "Contribute > Install in development mode", + "section": "Install in development mode", + "text": "Installing PyDPF Composites in development mode allows\nyou to modify the source and enhance it.\nBefore attempting to contribute to PyDPF Composites, ensure that you are thoroughly\nfamiliar with the PyAnsys Developer’s Guide.\nClone the repository:\nInstall dependencies:\nPyDPF Composites uses Poetry\nto manage the development environment.\nCreate a virtual environment and install the package with the\ndevelopment dependencies:\nActivate the virtual environment:\nInstall in development mode" + }, + { + "objectID": "contribute", + "href": "contribute.html#test", + "title": "Contribute > Test", + "section": "Test", + "text": "There are different ways to run the PyDPF Composites tests, depending on how the DPF\nserver is started.\nRun tests with a Docker container:\nFollow the steps in Getting the DPF server Docker image to get\nand run the DPF docker image. Run the tests with the following command\nRun tests with a DPF server started from the Ansys installer. The Ansys version must\nbe 2023 R2 or later.\nRun tests with a Docker container from Github (Ansys Internal only):\nTest" + }, + { + "objectID": "contribute", + "href": "contribute.html#build-documentation", + "title": "Contribute > Build documentation", + "section": "Build documentation", + "text": "Follow the description in Getting the DPF server Docker image image to get\nand run the dpf docker image.\nOn Windows, build the documentation with:\nOn Linux, build the documentation with:\nAnsys internal only: Build the docs with the latest container from Github:\nBuild documentation" + }, + { + "objectID": "contribute", + "href": "contribute.html#run-style-checks", + "title": "Contribute > Run style checks", + "section": "Run style checks", + "text": "The style checks use pre-commit and can be run through tox:\nThe style checks can also be configured to run automatically before each git commit:\nRun style checks\ngit commit" + }, + { + "objectID": "contribute", + "href": "contribute.html#view-documentation", + "title": "Contribute > View documentation", + "section": "View documentation", + "text": "Documentation for the latest stable release of PyDPF Composites is hosted at\nPyDPF Composites Documentation.\nIn the upper right corner of the documentation’s title bar, there is an option\nfor switching from viewing the documentation for the latest stable release\nto viewing the documentation for the development version or previously\nreleased versions.\nView documentation" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.inverse_reserve_factor", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.inverse_reserve_factor.html#inverse_reserve_factor", + "title": "inverse_reserve_factor", + "section": "inverse_reserve_factor", + "text": "inverse_reserve_factor" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.inverse_reserve_factor", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.inverse_reserve_factor.html#ansys.dpf.composites.sampling_point.FailureResult.inverse_reserve_factor", + "title": "inverse_reserve_factor > inverse_reserve_factor > inverse_reserve_factor", + "section": "inverse_reserve_factor > inverse_reserve_factor", + "text": "FailureResult.inverse_reserve_factor: float\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.html#maxstraincriterion", + "title": "MaxStrainCriterion", + "section": "MaxStrainCriterion", + "text": "Defines the maximum strain failure criterion for orthotropic reinforced materials.\ne1 (bool, default: True) – Activates the failure evaluation regarding the strain in the material 1 direction.\ne2 (bool, default: True) – Activates the failure evaluation regarding the strain in the material 2 direction.\ne3 (bool, default: False) – Activates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\ne12 (bool, default: True) – Whether to activate the failure evaluation regarding the in-plane shear strain e12.\ne13 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear strain e13.\ne23 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear strain e23.\nwf_e1 (float, default: 1.0) – Weighting factor of the failure mode e1.\nwf_e2 (float, default: 1.0) – Weighting factor of the failure mode e2.\nwf_e3 (float, default: 1.0) – Weighting factor of the failure mode e3.\nwf_e12 (float, default: 1.0) – Weighting factor of the failure mode e12.\nwf_e13 (float, default: 1.0) – Weighting factor of the failure mode e13.\nwf_e23 (float, default: 1.0) – Weighting factor of the failure mode e23.\neXt (float, default: 0.0) – Global tensile strain limit in material direction 1.\neXc (float, default: 0.0) – Global compressive strain limit in material direction 1.\neYt (float, default: 0.0) – Global tensile strain limit in material direction 2.\neYc (float, default: 0.0) – Global compressive strain limit in material direction 2.\neZt (float, default: 0.0) – Global strain limit in material direction 3.\neZc (float, default: 0.0) – Global compressive strain limit in material direction 3.\neSxy (float, default: 0.0) – Global strain limit in material direction 12.\neSxz (float, default: 0.0) – Global strain limit in material direction 13.\neSyz (float, default: 0.0) – Global strain limit in material direction 23.\nMaxStrainCriterion.to_dict()\n\nMaxStrainCriterion.to_json()\n\nMaxStrainCriterion.active\nThe failure criterion is suppressed if active is False.\nMaxStrainCriterion.e1\nActivates the failure evaluation regarding the strain in the material 1 direction.\nMaxStrainCriterion.e12\nWhether to activate the failure evaluation regarding the in-plane shear strain e12.\nMaxStrainCriterion.e13\nWhether to activate the failure evaluation regarding the interlaminar shear strain e13.\nMaxStrainCriterion.e2\nActivates the failure evaluation regarding the strain in the material 2 direction.\nMaxStrainCriterion.e23\nWhether to activate the failure evaluation regarding the interlaminar shear strain e23.\nMaxStrainCriterion.e3\nActivates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\nMaxStrainCriterion.eSxy\nGlobal strain limit in material direction 12.\nMaxStrainCriterion.eSxz\nGlobal strain limit in material direction 13.\nMaxStrainCriterion.eSyz\nGlobal strain limit in material direction 23.\nMaxStrainCriterion.eXc\nGlobal compressive strain limit in material direction 1.\nMaxStrainCriterion.eXt\nGlobal tensile strain limit in material direction 1.\nMaxStrainCriterion.eYc\nGlobal compressive strain limit in material direction 1.\nMaxStrainCriterion.eYt\nGlobal tensile strain limit in material direction 2.\nMaxStrainCriterion.eZc\nGlobal compressive strain limit in material direction 3.\nMaxStrainCriterion.eZt\nGlobal strain limit in material direction 3.\nMaxStrainCriterion.force_global_strain_limits\nWhether to use one set of global strain limits instead of the strain limits of the materials.\nMaxStrainCriterion.name\nName of the failure criterion.\nMaxStrainCriterion.wf_e1\nWeighting factor of the failure mode e1.\nMaxStrainCriterion.wf_e12\nWeighting factor of the failure mode e12.\nMaxStrainCriterion.wf_e13\nWeighting factor of the failure mode e13.\nMaxStrainCriterion.wf_e2\nWeighting factor of the failure mode e2.\nMaxStrainCriterion.wf_e23\nWeighting factor of the failure mode e23.\nMaxStrainCriterion.wf_e3\nWeighting factor of the failure mode e3.\nMaxStrainCriterion\nbool\nTrue\nbool\nTrue\nbool\nFalse\nbool\nTrue\nbool\nFalse\nbool\nFalse\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nMaxStrainCriterion.to_dict\nMaxStrainCriterion.to_json\nMaxStrainCriterion.active\nMaxStrainCriterion.e1\nMaxStrainCriterion.e12\nMaxStrainCriterion.e13\nMaxStrainCriterion.e2\nMaxStrainCriterion.e23\nMaxStrainCriterion.e3\nMaxStrainCriterion.eSxy\nMaxStrainCriterion.eSxz\nMaxStrainCriterion.eSyz\nMaxStrainCriterion.eXc\nMaxStrainCriterion.eXt\nMaxStrainCriterion.eYc\nMaxStrainCriterion.eYt\nMaxStrainCriterion.eZc\nMaxStrainCriterion.eZt\nMaxStrainCriterion.force_global_strain_limits\nMaxStrainCriterion.name\nMaxStrainCriterion.wf_e1\nMaxStrainCriterion.wf_e12\nMaxStrainCriterion.wf_e13\nMaxStrainCriterion.wf_e2\nMaxStrainCriterion.wf_e23\nMaxStrainCriterion.wf_e3" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion", + "title": "MaxStrainCriterion > MaxStrainCriterion > MaxStrainCriterion", + "section": "MaxStrainCriterion > MaxStrainCriterion", + "text": "class ansys.dpf.composites.failure_criteria.MaxStrainCriterion(*, e1=True, e2=True, e3=False, e12=True, e13=False, e23=False, wf_e1=1.0, wf_e2=1.0, wf_e3=1.0, wf_e12=1.0, wf_e13=1.0, wf_e23=1.0, force_global_strain_limits=False, eXt=0.0, eXc=0.0, eYt=0.0, eYc=0.0, eZt=0.0, eZc=0.0, eSxy=0.0, eSxz=0.0, eSyz=0.0)\n\nDefines the maximum strain failure criterion for orthotropic reinforced materials.\n\nParameters\n\ne1 (bool, default: True) – Activates the failure evaluation regarding the strain in the material 1 direction.\n\ne2 (bool, default: True) – Activates the failure evaluation regarding the strain in the material 2 direction.\n\ne3 (bool, default: False) – Activates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\n\ne12 (bool, default: True) – Whether to activate the failure evaluation regarding the in-plane shear strain e12.\n\ne13 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear strain e13.\n\ne23 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear strain e23.\n\nwf_e1 (float, default: 1.0) – Weighting factor of the failure mode e1.\n\nwf_e2 (float, default: 1.0) – Weighting factor of the failure mode e2.\n\nwf_e3 (float, default: 1.0) – Weighting factor of the failure mode e3.\n\nwf_e12 (float, default: 1.0) – Weighting factor of the failure mode e12.\n\nwf_e13 (float, default: 1.0) – Weighting factor of the failure mode e13.\n\nwf_e23 (float, default: 1.0) – Weighting factor of the failure mode e23.\n\neXt (float, default: 0.0) – Global tensile strain limit in material direction 1.\n\neXc (float, default: 0.0) – Global compressive strain limit in material direction 1.\n\neYt (float, default: 0.0) – Global tensile strain limit in material direction 2.\n\neYc (float, default: 0.0) – Global compressive strain limit in material direction 2.\n\neZt (float, default: 0.0) – Global strain limit in material direction 3.\n\neZc (float, default: 0.0) – Global compressive strain limit in material direction 3.\n\neSxy (float, default: 0.0) – Global strain limit in material direction 12.\n\neSxz (float, default: 0.0) – Global strain limit in material direction 13.\n\neSyz (float, default: 0.0) – Global strain limit in material direction 23.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nMaxStrainCriterion.to_dict()\n\n\n\nMaxStrainCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nMaxStrainCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nMaxStrainCriterion.e1\n\nActivates the failure evaluation regarding the strain in the material 1 direction.\n\nMaxStrainCriterion.e12\n\nWhether to activate the failure evaluation regarding the in-plane shear strain e12.\n\nMaxStrainCriterion.e13\n\nWhether to activate the failure evaluation regarding the interlaminar shear strain e13.\n\nMaxStrainCriterion.e2\n\nActivates the failure evaluation regarding the strain in the material 2 direction.\n\nMaxStrainCriterion.e23\n\nWhether to activate the failure evaluation regarding the interlaminar shear strain e23.\n\nMaxStrainCriterion.e3\n\nActivates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\n\nMaxStrainCriterion.eSxy\n\nGlobal strain limit in material direction 12.\n\nMaxStrainCriterion.eSxz\n\nGlobal strain limit in material direction 13.\n\nMaxStrainCriterion.eSyz\n\nGlobal strain limit in material direction 23.\n\nMaxStrainCriterion.eXc\n\nGlobal compressive strain limit in material direction 1.\n\nMaxStrainCriterion.eXt\n\nGlobal tensile strain limit in material direction 1.\n\nMaxStrainCriterion.eYc\n\nGlobal compressive strain limit in material direction 1.\n\nMaxStrainCriterion.eYt\n\nGlobal tensile strain limit in material direction 2.\n\nMaxStrainCriterion.eZc\n\nGlobal compressive strain limit in material direction 3.\n\nMaxStrainCriterion.eZt\n\nGlobal strain limit in material direction 3.\n\nMaxStrainCriterion.force_global_strain_limits\n\nWhether to use one set of global strain limits instead of the strain limits of the materials.\n\nMaxStrainCriterion.name\n\nName of the failure criterion.\n\nMaxStrainCriterion.wf_e1\n\nWeighting factor of the failure mode e1.\n\nMaxStrainCriterion.wf_e12\n\nWeighting factor of the failure mode e12.\n\nMaxStrainCriterion.wf_e13\n\nWeighting factor of the failure mode e13.\n\nMaxStrainCriterion.wf_e2\n\nWeighting factor of the failure mode e2.\n\nMaxStrainCriterion.wf_e23\n\nWeighting factor of the failure mode e23.\n\nMaxStrainCriterion.wf_e3\n\nWeighting factor of the failure mode e3.\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_definition_labels", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_definition_labels.html#composite_definition_labels", + "title": "composite_definition_labels", + "section": "composite_definition_labels", + "text": "All composite definition labels in the model.\nThis property is only relevant for assemblies.\nSequence[str]\ncomposite_definition_labels\nSequence\nstr" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_definition_labels", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_definition_labels.html#ansys.dpf.composites.composite_model.CompositeModel.composite_definition_labels", + "title": "composite_definition_labels > composite_definition_labels > composite_definition_labels", + "section": "composite_definition_labels > composite_definition_labels", + "text": "property CompositeModel.composite_definition_labels: Sequence[str]\n\nAll composite definition labels in the model.\n\nThis property is only relevant for assemblies.\n\nReturn type\n\nSequence[str]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tensile_Yield_Strength_effective_stress", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tensile_Yield_Strength_effective_stress.html#tensile_yield_strength_effective_stress", - "title": "Tensile_Yield_Strength_effective_stress", - "section": "Tensile_Yield_Strength_effective_stress", - "text": "Tensile_Yield_Strength_effective_stress" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R22", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R22.html#hill_yield_criterion_r22", + "title": "Hill_Yield_Criterion_R22", + "section": "Hill_Yield_Criterion_R22", + "text": "Hill_Yield_Criterion_R22" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tensile_Yield_Strength_effective_stress", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tensile_Yield_Strength_effective_stress.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tensile_Yield_Strength_effective_stress", - "title": "Tensile_Yield_Strength_effective_stress > Tensile_Yield_Strength_effective_stress > Tensile_Yield_Strength_effective_stress", - "section": "Tensile_Yield_Strength_effective_stress > Tensile_Yield_Strength_effective_stress", - "text": "MaterialProperty.Tensile_Yield_Strength_effective_stress: str = 'tensile_yield_strength'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R22", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R22.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R22", + "title": "Hill_Yield_Criterion_R22 > Hill_Yield_Criterion_R22 > Hill_Yield_Criterion_R22", + "section": "Hill_Yield_Criterion_R22 > Hill_Yield_Criterion_R22", + "text": "MaterialProperty.Hill_Yield_Criterion_R22: str = 'yield_stress_ratio_y_hill_criterion'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.strip", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.strip.html#strip", - "title": "strip", - "section": "strip", - "text": "Return a copy of the string with leading and trailing whitespace removed.\nIf chars is given and not None, remove characters in chars instead.\nstrip" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E2", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E2.html#engineering_constants_e2", + "title": "Engineering_Constants_E2", + "section": "Engineering_Constants_E2", + "text": "Engineering_Constants_E2" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.strip", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.strip.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.strip", - "title": "strip > strip > strip", - "section": "strip > strip", - "text": "FailureMeasureEnum.strip(chars=None, /)\n\nReturn a copy of the string with leading and trailing whitespace removed.\n\nIf chars is given and not None, remove characters in chars instead.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E2", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E2.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E2", + "title": "Engineering_Constants_E2 > Engineering_Constants_E2 > Engineering_Constants_E2", + "section": "Engineering_Constants_E2 > Engineering_Constants_E2", + "text": "MaterialProperty.Engineering_Constants_E2: str = 'young_modulus_y_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.material_name", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.material_name.html#material_name", - "title": "material_name", - "section": "material_name", - "text": "material_name" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.html#shortfibercompositesfiles", + "title": "ShortFiberCompositesFiles", + "section": "ShortFiberCompositesFiles", + "text": "Provides the container for short fiber composite file paths.\nShortFiberCompositesFiles.files_are_local\n\nShortFiberCompositesFiles.rst\n\nShortFiberCompositesFiles.dsdat\n\nShortFiberCompositesFiles.engineering_data\n\nShortFiberCompositesFiles\nShortFiberCompositesFiles.files_are_local\nShortFiberCompositesFiles.rst\nShortFiberCompositesFiles.dsdat\nShortFiberCompositesFiles.engineering_data" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.material_name", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.material_name.html#ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.material_name", - "title": "material_name > material_name > material_name", - "section": "material_name > material_name", - "text": "MaterialMetadata.material_name: str = ''\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.html#ansys.dpf.composites.data_sources.ShortFiberCompositesFiles", + "title": "ShortFiberCompositesFiles > ShortFiberCompositesFiles > ShortFiberCompositesFiles", + "section": "ShortFiberCompositesFiles > ShortFiberCompositesFiles", + "text": "class ansys.dpf.composites.data_sources.ShortFiberCompositesFiles(rst, dsdat, engineering_data, files_are_local=True)\n\nProvides the container for short fiber composite file paths.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nShortFiberCompositesFiles.files_are_local\n\n\n\nShortFiberCompositesFiles.rst\n\n\n\nShortFiberCompositesFiles.dsdat\n\n\n\nShortFiberCompositesFiles.engineering_data\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_mesh", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_mesh.html#get_mesh", - "title": "get_mesh", - "section": "get_mesh", - "text": "Get the underlying DPF meshed region.\nThe meshed region contains the lay-up information.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nMeshedRegion\nget_mesh\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nMeshedRegion" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu12", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu12.html#engineering_constants_nu12", + "title": "Engineering_Constants_nu12", + "section": "Engineering_Constants_nu12", + "text": "Engineering_Constants_nu12" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_mesh", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_mesh.html#ansys.dpf.composites.composite_model.CompositeModel.get_mesh", - "title": "get_mesh > get_mesh > get_mesh", - "section": "get_mesh > get_mesh", - "text": "CompositeModel.get_mesh(composite_definition_label=None)\n\nGet the underlying DPF meshed region.\n\nThe meshed region contains the lay-up information.\n\nParameters\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nMeshedRegion\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu12", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu12.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu12", + "title": "Engineering_Constants_nu12 > Engineering_Constants_nu12 > Engineering_Constants_nu12", + "section": "Engineering_Constants_nu12 > Engineering_Constants_nu12", + "text": "MaterialProperty.Engineering_Constants_nu12: str = 'poisson_ratio_xy'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_analysis_plies", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_analysis_plies.html#get_analysis_plies", - "title": "get_analysis_plies", - "section": "get_analysis_plies", - "text": "Get analysis ply names. Returns None if element is not layered.\nelement_id (int) – Element Id/Label\nOptional[Sequence[str]]\nget_analysis_plies\nint\nOptional\nSequence\nstr" + "objectID": "api/data_sources", + "href": "api/data_sources.html#data-sources", + "title": "Data sources", + "section": "Data sources", + "text": "CompositeDefinitionFiles(definition[, mapping])\nProvides the container for composite definition file paths.\nContinuousFiberCompositesFiles(rst, ...[, ...])\nProvides the container for continuous fiber composite file paths.\nShortFiberCompositesFiles(rst, dsdat, ...[, ...])\nProvides the container for short fiber composite file paths.\nCompositeDataSources(rst, material_support, ...)\nProvides data sources related to the composite lay-up.\nget_composite_files_from_workbench_result_folder(...)\nGet a ContinuousFiberCompositesFiles object from a result folder.\ncomposite_files_from_workbench_harmonic_analysis(...)\nGet a ContinuousFiberCompositesFiles object for a harmonic analysis.\nget_composites_data_sources(...)\nCreate DPF data sources from a ContinuousFiberCompositeFiles object.\nData sources\nCompositeDefinitionFiles\nContinuousFiberCompositesFiles\nShortFiberCompositesFiles\nCompositeDataSources\nget_composite_files_from_workbench_result_folder\nContinuousFiberCompositesFiles\ncomposite_files_from_workbench_harmonic_analysis\nContinuousFiberCompositesFiles\nget_composites_data_sources\nContinuousFiberCompositeFiles" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_analysis_plies", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_analysis_plies.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_analysis_plies", - "title": "get_analysis_plies > get_analysis_plies > get_analysis_plies", - "section": "get_analysis_plies > get_analysis_plies", - "text": "LayupPropertiesProvider.get_analysis_plies(element_id)\n\nGet analysis ply names. Returns None if element is not layered.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[Sequence[str]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.BOT", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.BOT.html#bot", + "title": "BOT", + "section": "BOT", + "text": "BOT" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1.html#e1", - "title": "e1", - "section": "e1", - "text": "e1" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.BOT", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.BOT.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.BOT", + "title": "BOT > BOT > BOT", + "section": "BOT > BOT", + "text": "SpotReductionStrategy.BOT = 'BOT'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e1", - "title": "e1 > e1 > e1", - "section": "e1 > e1", - "text": "FailureModeEnum.e1 = 110\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t.html#e3t", + "title": "e3t", + "section": "e3t", + "text": "e3t" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmb", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmb.html#wf_cmb", - "title": "wf_cmb", - "section": "wf_cmb", - "text": "Weighting factor of matrix failure due to compression (cmb).\nfloat\nwf_cmb\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t", + "title": "e3t > e3t > e3t", + "section": "e3t > e3t", + "text": "FailureModeEnum.e3t = 131\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmb", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmb.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmb", - "title": "wf_cmb > wf_cmb > wf_cmb", - "section": "wf_cmb > wf_cmb", - "text": "property CuntzeCriterion.wf_cmb: float\n\nWeighting factor of matrix failure due to compression (cmb).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cft.html#cft", + "title": "cft", + "section": "cft", + "text": "cft" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc.html#stress_limits_xc", - "title": "Stress_Limits_Xc", - "section": "Stress_Limits_Xc", - "text": "Stress_Limits_Xc" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cft.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cft", + "title": "cft > cft > cft", + "section": "cft > cft", + "text": "FailureModeEnum.cft = 1001\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc", - "title": "Stress_Limits_Xc > Stress_Limits_Xc > Stress_Limits_Xc", - "section": "Stress_Limits_Xc > Stress_Limits_Xc", - "text": "MaterialProperty.Stress_Limits_Xc: str = 'stress_compressive_x_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.html#compositedefinitionfiles", + "title": "CompositeDefinitionFiles", + "section": "CompositeDefinitionFiles", + "text": "Provides the container for composite definition file paths.\nCompositeDefinitionFiles.mapping\n\nCompositeDefinitionFiles.definition\n\nCompositeDefinitionFiles\nCompositeDefinitionFiles.mapping\nCompositeDefinitionFiles.definition" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.html#ansys.dpf.composites.data_sources.CompositeDefinitionFiles", + "title": "CompositeDefinitionFiles > CompositeDefinitionFiles > CompositeDefinitionFiles", + "section": "CompositeDefinitionFiles > CompositeDefinitionFiles", + "text": "class ansys.dpf.composites.data_sources.CompositeDefinitionFiles(definition, mapping=None)\n\nProvides the container for composite definition file paths.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nCompositeDefinitionFiles.mapping\n\n\n\nCompositeDefinitionFiles.definition\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.name.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property LaRCCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.add_layup_info_to_mesh", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.add_layup_info_to_mesh.html#add_layup_info_to_mesh", + "title": "add_layup_info_to_mesh", + "section": "add_layup_info_to_mesh", + "text": "Add lay-up information to the mesh.\nCreates a lay-up provider operator that is run and returned.\ndata_sources (CompositeDataSources) – DPF data sources available from the CompositeModel.data_sources attribute.\nmesh (MeshedRegion) – DPF meshed region available from the CompositeModel.get_mesh() method.\nmaterial_operators (MaterialOperators) – MaterialOperators object available from the CompositeModel.material_operators\nattribute.\nunit_system (Optional[Union[UnitSystem, Operator]], default: None) – Unit system specification\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nrst_stream_provider (Optional[Operator], default: None) – Pass RST stream to load the section data directly from the RST file. This parameter is\nsupported in DPF version 8.0 (2024 R2) and later.\nOperator\nadd_layup_info_to_mesh\nCompositeDataSources\nCompositeModel.data_sources\nMeshedRegion\nCompositeModel.get_mesh()\nMaterialOperators\nCompositeModel.material_operators\nOptional\nUnion\nUnitSystem\nOperator\nNone\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nOptional\nOperator\nNone\nOperator" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.figure", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.figure.html#figure", - "title": "figure", - "section": "figure", - "text": "figure" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.add_layup_info_to_mesh", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.add_layup_info_to_mesh.html#ansys.dpf.composites.layup_info.add_layup_info_to_mesh", + "title": "add_layup_info_to_mesh > add_layup_info_to_mesh > add_layup_info_to_mesh", + "section": "add_layup_info_to_mesh > add_layup_info_to_mesh", + "text": "ansys.dpf.composites.layup_info.add_layup_info_to_mesh(data_sources, material_operators, mesh, unit_system=None, composite_definition_label=None, rst_stream_provider=None)\n\nAdd lay-up information to the mesh.\n\nCreates a lay-up provider operator that is run and returned.\n\nParameters\n\ndata_sources (CompositeDataSources) – DPF data sources available from the CompositeModel.data_sources attribute.\n\nmesh (MeshedRegion) – DPF meshed region available from the CompositeModel.get_mesh() method.\n\nmaterial_operators (MaterialOperators) – MaterialOperators object available from the CompositeModel.material_operators\nattribute.\n\nunit_system (Optional[Union[UnitSystem, Operator]], default: None) – Unit system specification\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nrst_stream_provider (Optional[Operator], default: None) – Pass RST stream to load the section data directly from the RST file. This parameter is\nsupported in DPF version 8.0 (2024 R2) and later.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.figure", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.figure.html#ansys.dpf.composites.sampling_point.SamplingPointFigure.figure", - "title": "figure > figure > figure", - "section": "figure > figure", - "text": "SamplingPointFigure.figure: Any\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_margin", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_margin.html#safety_margin", + "title": "safety_margin", + "section": "safety_margin", + "text": "safety_margin" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.name", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the object.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_margin", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_margin.html#ansys.dpf.composites.sampling_point.FailureResult.safety_margin", + "title": "safety_margin > safety_margin > safety_margin", + "section": "safety_margin > safety_margin", + "text": "FailureResult.safety_margin: float\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.name", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.name.html#ansys.dpf.composites.sampling_point.SamplingPoint.name", - "title": "name > name > name", - "section": "name > name", - "text": "property SamplingPoint.name: str\n\nName of the object.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYc.html#strain_limits_eyc", + "title": "Strain_Limits_eYc", + "section": "Strain_Limits_eYc", + "text": "Strain_Limits_eYc" }, { - "objectID": "examples/gallery_examples/005_get_layup_properties_example", - "href": "examples/gallery_examples/005_get_layup_properties_example.html#lay-up-properties", - "title": "Lay-up properties", - "section": "Lay-up properties", - "text": "This example shows how to efficiently extract elemental lay-up properties such as\nthickness, angles, and analysis ply names. These are typically used for layer-wise\npostprocessing and data filtering.\nTo get the full layer information of an element, including results,\nconsider using the SamplingPoint class.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nLay-up properties\nSamplingPoint\ncomposite_files_from_workbench_harmonic_analysis()" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYc", + "title": "Strain_Limits_eYc > Strain_Limits_eYc > Strain_Limits_eYc", + "section": "Strain_Limits_eYc > Strain_Limits_eYc", + "text": "MaterialProperty.Strain_Limits_eYc: str = 'strain_compressive_y_direction'\n\n" }, { - "objectID": "examples/gallery_examples/005_get_layup_properties_example", - "href": "examples/gallery_examples/005_get_layup_properties_example.html#set-up-analysis", - "title": "Lay-up properties > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of importing dependencies, connecting to the\nDPF server, and retrieving the example files.\nImport dependencies.\nStart a DPF server and copy the example files into the current working directory.\nSet up analysis" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxy", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxy.html#stress_limits_sxy", + "title": "Stress_Limits_Sxy", + "section": "Stress_Limits_Sxy", + "text": "Stress_Limits_Sxy" }, { - "objectID": "examples/gallery_examples/005_get_layup_properties_example", - "href": "examples/gallery_examples/005_get_layup_properties_example.html#set-up-model", - "title": "Lay-up properties > Set up model", - "section": "Set up model", - "text": "Set up the composite model.\nSet up model" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxy", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxy.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxy", + "title": "Stress_Limits_Sxy > Stress_Limits_Sxy > Stress_Limits_Sxy", + "section": "Stress_Limits_Sxy > Stress_Limits_Sxy", + "text": "MaterialProperty.Stress_Limits_Sxy: str = 'stress_shear_xy'\n\n" }, - { - "objectID": "examples/gallery_examples/005_get_layup_properties_example", - "href": "examples/gallery_examples/005_get_layup_properties_example.html#get-lay-up-properties", - "title": "Lay-up properties > Get lay-up properties", - "section": "Get lay-up properties", - "text": "Get lay-up properties for all elements and show the first one as an example.\nGet lay-up properties" + { + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.layup_model_type", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.layup_model_type.html#layup_model_type", + "title": "layup_model_type", + "section": "layup_model_type", + "text": "Get the context type of the lay-up model.\nThe type specifies whether the lay-up data was loaded from an ACP model, RST, or both.\nType can be one of the following values: NOT_AVAILABLE, ACP, RST, MIXED.\nLayupModelContextType\nlayup_model_type\nNOT_AVAILABLE\nACP\nRST\nMIXED\nLayupModelContextType" }, { - "objectID": "examples/gallery_examples/005_get_layup_properties_example", - "href": "examples/gallery_examples/005_get_layup_properties_example.html#plot-lay-up-properties", - "title": "Lay-up properties > Plot lay-up properties", - "section": "Plot lay-up properties", - "text": "Plot basic layer properties (layer thicknesses, angles, and analysis ply names).\nTotal running time of the script: (0 minutes 1.638 seconds)\nDownload Jupyter notebook: 005_get_layup_properties_example.ipynb\nDownload Python source code: 005_get_layup_properties_example.py\nDownload zipped: 005_get_layup_properties_example.zip\nGallery generated by Sphinx-Gallery\nPlot lay-up properties\nDownload Jupyter notebook: 005_get_layup_properties_example.ipynb\nDownload Python source code: 005_get_layup_properties_example.py\nDownload zipped: 005_get_layup_properties_example.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.layup_model_type", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.layup_model_type.html#ansys.dpf.composites.composite_model.CompositeModel.layup_model_type", + "title": "layup_model_type > layup_model_type > layup_model_type", + "section": "layup_model_type > layup_model_type", + "text": "property CompositeModel.layup_model_type: LayupModelContextType\n\nGet the context type of the lay-up model.\n\nThe type specifies whether the lay-up data was loaded from an ACP model, RST, or both.\nType can be one of the following values: NOT_AVAILABLE, ACP, RST, MIXED.\n\nReturn type\n\nLayupModelContextType\n\n!! processed by numpydoc !!" }, { "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc5", @@ -3206,984 +2877,977 @@ "text": "FailureModeEnum.lmc5 = 906\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.insert", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.insert.html#insert", - "title": "insert", - "section": "insert", - "text": "Add a failure criterion to a list of selected criteria.\nfc (FailureCriterionBase) – Failure criterion to add. If a failure criterion of the same type\nalready exists, it is overwritten.\nNone\ninsert\nFailureCriterionBase\nNone" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.insert", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.insert.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.insert", - "title": "insert > insert > insert", - "section": "insert > insert", - "text": "CombinedFailureCriterion.insert(fc)\n\nAdd a failure criterion to a list of selected criteria.\n\nParameters\n\nfc (FailureCriterionBase) – Failure criterion to add. If a failure criterion of the same type\nalready exists, it is overwritten.\n\nExamples\n\n>>> combined_failure = CombinedFailureCriterion(\"max_stress 3D\")\n>>> max_stress = MaxStressCriterion(s1=True, s2=True, s3=True,\n s12=True, s13=True, s23=True)\n>>> combined_failure.insert(max_stress)\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.number_of_plies", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.number_of_plies.html#number_of_plies", - "title": "number_of_plies", - "section": "number_of_plies", - "text": "Number of plies.\nint\nnumber_of_plies\nint" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.number_of_plies", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.number_of_plies.html#ansys.dpf.composites.sampling_point.SamplingPoint.number_of_plies", - "title": "number_of_plies > number_of_plies > number_of_plies", - "section": "number_of_plies > number_of_plies", - "text": "property SamplingPoint.number_of_plies: int\n\nNumber of plies.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.wf.html#wf", + "title": "wf", + "section": "wf", + "text": "Weighting factor of this failure criterion.\nfloat\nwf\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.html#samplingpointfigure", - "title": "SamplingPointFigure", - "section": "SamplingPointFigure", - "text": "Provides the sampling point figure and axes.\nSamplingPointFigure.figure\n\nSamplingPointFigure.axes\n\nSamplingPointFigure\nSamplingPointFigure.figure\nSamplingPointFigure.axes" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.wf.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.wf", + "title": "wf > wf > wf", + "section": "wf > wf", + "text": "property TsaiWuCriterion.wf: float\n\nWeighting factor of this failure criterion.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.html#ansys.dpf.composites.sampling_point.SamplingPointFigure", - "title": "SamplingPointFigure > SamplingPointFigure > SamplingPointFigure", - "section": "SamplingPointFigure > SamplingPointFigure", - "text": "class ansys.dpf.composites.sampling_point.SamplingPointFigure(figure, axes)\n\nProvides the sampling point figure and axes.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nSamplingPointFigure.figure\n\n\n\nSamplingPointFigure.axes\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc.html#strain_limits_ezc", - "title": "Strain_Limits_eZc", - "section": "Strain_Limits_eZc", - "text": "Strain_Limits_eZc" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "MaxStrainCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc", - "title": "Strain_Limits_eZc > Strain_Limits_eZc > Strain_Limits_eZc", - "section": "Strain_Limits_eZc > Strain_Limits_eZc", - "text": "MaterialProperty.Strain_Limits_eZc: str = 'strain_compressive_z_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor.html#inverse_reserve_factor", + "title": "inverse_reserve_factor", + "section": "inverse_reserve_factor", + "text": "Critical inverse reserve factor of each ply.\nndarray[Any, dtype[float64]]\ninverse_reserve_factor\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1t.html#e1t", - "title": "e1t", - "section": "e1t", - "text": "e1t" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor.html#ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor", + "title": "inverse_reserve_factor > inverse_reserve_factor > inverse_reserve_factor", + "section": "inverse_reserve_factor > inverse_reserve_factor", + "text": "property SamplingPoint.inverse_reserve_factor: ndarray[Any, dtype[float64]]\n\nCritical inverse reserve factor of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e1t", - "title": "e1t > e1t > e1t", - "section": "e1t > e1t", - "text": "FailureModeEnum.e1t = 111\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E.html#engineering_constants_e", + "title": "Engineering_Constants_E", + "section": "Engineering_Constants_E", + "text": "Engineering_Constants_E" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZc.html#ezc", - "title": "eZc", - "section": "eZc", - "text": "Global compressive strain limit in material direction 3.\nfloat\neZc\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E", + "title": "Engineering_Constants_E > Engineering_Constants_E > Engineering_Constants_E", + "section": "Engineering_Constants_E > Engineering_Constants_E", + "text": "MaterialProperty.Engineering_Constants_E: str = 'young_modulus'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZc.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZc", - "title": "eZc > eZc > eZc", - "section": "eZc > eZc", - "text": "property MaxStrainCriterion.eZc: float\n\nGlobal compressive strain limit in material direction 3.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc.html#cmc", + "title": "cmc", + "section": "cmc", + "text": "Activates the failure evaluation of the matrix due to compression or shear.\nbool\ncmc\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder.html#get_composite_files_from_workbench_result_folder", - "title": "get_composite_files_from_workbench_result_folder", - "section": "get_composite_files_from_workbench_result_folder", - "text": "Get a ContinuousFiberCompositesFiles object from a result folder.\nThis function assumes a typical Workbench folder structure for a composite\nsimulation. If this method is not able to build the ContinuousFiberCompositesFiles\nobject, you can follow these steps:\nIn the main Workbench window, activate the files panel by selecting\nView > Files. This shows the location of all files used in the\nworkbench project. You can determine the different attributes of the\nContinuousFiberCompositesFiles object:\nrst: A list of files containing either the single file.rst\nfile that belongs to the cell ID of the solution, or the distributed\nfile0.rst to fileN.rst files.\nengineering_data: The MatML.xml file in the same folder as the RST file.\ncomposite: There can be multiple composite definitions,\none definition for each ACP system if shell data is transferred\nand one definition for each solid model if solid data is transferred.\nAll the ACPCompositeDefinitions.h5 and ACPSolidModel*.h5\nfiles that are used in the solution must be added to the\nContinuousFiberCompositesFiles.composite dictionary.\nThe key can be chosen freely. Next to the ACPCompositeDefinitions.h5\nand ACPSolidModel\\*.h5 files, corresponding ACPCompositeDefinitions.mapping\nand ACPSolidModel*.mapping files can be found (optional).\nIf they exist, they must be added as well.\nThe following example shows how a\nContinuousFiberCompositesFiles object can be built.\nThe project in this example has two ACP Pre systems, one that exports\nshell information and one that exports solid information.\nThe files are located in these locations:\nResult file:\nproject_root_folder/dp0/SYS/MECH/file.rst\nEngineering data file:\nproject_root_folder/dp0/SYS/MECH/MatML.xml\nComposite definition and mapping files for the solid model:\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\nComposite definition and mapping files for the shell model:\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\nThe code creates the corresponding ContinuousFiberCompositesFiles object:\nresult_folder (Union[str, PathLike[str]]) – Result folder of the solution. Right-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\nensure_composite_definitions_found (bool, default: True) – Whether to check if at least one composite definition (shell or solid) has been found.\nContinuousFiberCompositesFiles\nget_composite_files_from_workbench_result_folder\nContinuousFiberCompositesFiles\nContinuousFiberCompositesFiles\nContinuousFiberCompositesFiles\nrst\nfile.rst\nfile0.rst\nfileN.rst\nengineering_data\nMatML.xml\ncomposite\nACPCompositeDefinitions.h5\nACPSolidModel*.h5\nContinuousFiberCompositesFiles.composite\nACPCompositeDefinitions.h5\nACPSolidModel\\*.h5\nACPCompositeDefinitions.mapping\nACPSolidModel*.mapping\nContinuousFiberCompositesFiles\nproject_root_folder/dp0/SYS/MECH/file.rst\nproject_root_folder/dp0/SYS/MECH/MatML.xml\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\nContinuousFiberCompositesFiles\nUnion\nstr\nPathLike\nstr\nbool\nTrue\nContinuousFiberCompositesFiles" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc", + "title": "cmc > cmc > cmc", + "section": "cmc > cmc", + "text": "property CuntzeCriterion.cmc: bool\n\nActivates the failure evaluation of the matrix due to compression or shear.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder.html#ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder", - "title": "get_composite_files_from_workbench_result_folder > get_composite_files_from_workbench_result_folder > get_composite_files_from_workbench_result_folder", - "section": "get_composite_files_from_workbench_result_folder > get_composite_files_from_workbench_result_folder", - "text": "ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder(result_folder, ensure_composite_definitions_found=True)\n\nGet a ContinuousFiberCompositesFiles object from a result folder.\n\nThis function assumes a typical Workbench folder structure for a composite\nsimulation. If this method is not able to build the ContinuousFiberCompositesFiles\nobject, you can follow these steps:\n\nIn the main Workbench window, activate the files panel by selecting\nView > Files. This shows the location of all files used in the\nworkbench project. You can determine the different attributes of the\nContinuousFiberCompositesFiles object:\n\nrst: A list of files containing either the single file.rst\nfile that belongs to the cell ID of the solution, or the distributed\nfile0.rst to fileN.rst files.\n\nengineering_data: The MatML.xml file in the same folder as the RST file.\n\ncomposite: There can be multiple composite definitions,\none definition for each ACP system if shell data is transferred\nand one definition for each solid model if solid data is transferred.\nAll the ACPCompositeDefinitions.h5 and ACPSolidModel*.h5\nfiles that are used in the solution must be added to the\nContinuousFiberCompositesFiles.composite dictionary.\nThe key can be chosen freely. Next to the ACPCompositeDefinitions.h5\nand ACPSolidModel\\*.h5 files, corresponding ACPCompositeDefinitions.mapping\nand ACPSolidModel*.mapping files can be found (optional).\nIf they exist, they must be added as well.\n\nThe following example shows how a\nContinuousFiberCompositesFiles object can be built.\nThe project in this example has two ACP Pre systems, one that exports\nshell information and one that exports solid information.\n\nThe files are located in these locations:\n\nResult file:\n\nproject_root_folder/dp0/SYS/MECH/file.rst\n\nEngineering data file:\n\nproject_root_folder/dp0/SYS/MECH/MatML.xml\n\nComposite definition and mapping files for the solid model:\n\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\n\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\n\nComposite definition and mapping files for the shell model:\n\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\n\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\n\nThe code creates the corresponding ContinuousFiberCompositesFiles object:\n\nContinuousFiberCompositesFiles(\n rst=[\"project_root_folder/dp0/SYS/MECH/file.rst\"],\n composite={\n \"solid\": CompositeDefinitionFiles(\n definition=\"project_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\",\n mapping=\"project_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\"\n ),\n \"shell\": CompositeDefinitionFiles(\n definition=\"project_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\",\n mapping=\"project_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\"\n )\n },\n engineering_data=\"project_root_folder/dp0/SYS/MECH/MatML.xml\"\n)\n\nParameters\n\nresult_folder (Union[str, PathLike[str]]) – Result folder of the solution. Right-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\n\nensure_composite_definitions_found (bool, default: True) – Whether to check if at least one composite definition (shell or solid) has been found.\n\nReturn type\n\nContinuousFiberCompositesFiles\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition.html#rpartition", + "title": "rpartition", + "section": "rpartition", + "text": "Partition the string into three parts using the given separator.\nThis will search for the separator in the string, starting at the end. If\nthe separator is found, returns a 3-tuple containing the part before the\nseparator, the separator itself, and the part after it.\nIf the separator is not found, returns a 3-tuple containing two empty strings\nand the original string.\nrpartition" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.html#facesheetwrinklingcriterion", - "title": "FaceSheetWrinklingCriterion", - "section": "FaceSheetWrinklingCriterion", - "text": "Defines the face sheet wrinkling criterion for sandwiches (laminate with cores).\nhomogeneous_core_coeff (float, default: 0.5) – Wrinkling coefficient (reduction factor) for homogeneous core materials.\nhoneycomb_core_coeff (float, default: 0.33) – Wrinkling coefficient (reduction factor) for honeycombs. The default is 0.33.\nwf (float, default: 1.0) – Weighting factor of the failure mode (wb or wt). The default is 0.5.\nFaceSheetWrinklingCriterion.to_dict()\n\nFaceSheetWrinklingCriterion.to_json()\n\nFaceSheetWrinklingCriterion.active\nThe failure criterion is suppressed if active is False.\nFaceSheetWrinklingCriterion.homogeneous_core_coeff\nWrinkling coefficient (reduction factor) for homogeneous core materials.\nFaceSheetWrinklingCriterion.honeycomb_core_coeff\nWrinkling coefficient (reduction factor) for honeycombs.\nFaceSheetWrinklingCriterion.name\nName of the failure criterion.\nFaceSheetWrinklingCriterion.wf\nWeighting factor of the failure mode (wb or wt).\nFaceSheetWrinklingCriterion\nfloat\n0.5\nfloat\n0.33\n0.33\nfloat\n1.0\n0.5\nFaceSheetWrinklingCriterion.to_dict\nFaceSheetWrinklingCriterion.to_json\nFaceSheetWrinklingCriterion.active\nFaceSheetWrinklingCriterion.homogeneous_core_coeff\nFaceSheetWrinklingCriterion.honeycomb_core_coeff\nFaceSheetWrinklingCriterion.name\nFaceSheetWrinklingCriterion.wf" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition", + "title": "rpartition > rpartition > rpartition", + "section": "rpartition > rpartition", + "text": "FailureMeasureEnum.rpartition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nThis will search for the separator in the string, starting at the end. If\nthe separator is found, returns a 3-tuple containing the part before the\nseparator, the separator itself, and the part after it.\n\nIf the separator is not found, returns a 3-tuple containing two empty strings\nand the original string.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion", - "title": "FaceSheetWrinklingCriterion > FaceSheetWrinklingCriterion > FaceSheetWrinklingCriterion", - "section": "FaceSheetWrinklingCriterion > FaceSheetWrinklingCriterion", - "text": "class ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion(*, homogeneous_core_coeff=0.5, honeycomb_core_coeff=0.33, wf=1.0)\n\nDefines the face sheet wrinkling criterion for sandwiches (laminate with cores).\n\nParameters\n\nhomogeneous_core_coeff (float, default: 0.5) – Wrinkling coefficient (reduction factor) for homogeneous core materials.\n\nhoneycomb_core_coeff (float, default: 0.33) – Wrinkling coefficient (reduction factor) for honeycombs. The default is 0.33.\n\nwf (float, default: 1.0) – Weighting factor of the failure mode (wb or wt). The default is 0.5.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nFaceSheetWrinklingCriterion.to_dict()\n\n\n\nFaceSheetWrinklingCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nFaceSheetWrinklingCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nFaceSheetWrinklingCriterion.homogeneous_core_coeff\n\nWrinkling coefficient (reduction factor) for homogeneous core materials.\n\nFaceSheetWrinklingCriterion.honeycomb_core_coeff\n\nWrinkling coefficient (reduction factor) for honeycombs.\n\nFaceSheetWrinklingCriterion.name\n\nName of the failure criterion.\n\nFaceSheetWrinklingCriterion.wf\n\nWeighting factor of the failure mode (wb or wt).\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_json.html#to_json", + "title": "to_json", + "section": "to_json", + "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.html#layupproperty", - "title": "LayupProperty", - "section": "LayupProperty", - "text": "Enum for lay-up properties.\nValues correspond to labels in the output container of the lay-up provider.\nLayupProperty.ANGLE\n\nLayupProperty.SHEAR_ANGLE\n\nLayupProperty.THICKNESS\n\nLayupProperty.LAMINATE_OFFSET\n\nLayupProperty\nLayupProperty.ANGLE\nLayupProperty.SHEAR_ANGLE\nLayupProperty.THICKNESS\nLayupProperty.LAMINATE_OFFSET" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_json.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_json", + "title": "to_json > to_json > to_json", + "section": "to_json > to_json", + "text": "MaxStrainCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.html#ansys.dpf.composites.layup_info.LayupProperty", - "title": "LayupProperty > LayupProperty > LayupProperty", - "section": "LayupProperty > LayupProperty", - "text": "class ansys.dpf.composites.layup_info.LayupProperty(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nEnum for lay-up properties.\n\nValues correspond to labels in the output container of the lay-up provider.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nLayupProperty.ANGLE\n\n\n\nLayupProperty.SHEAR_ANGLE\n\n\n\nLayupProperty.THICKNESS\n\n\n\nLayupProperty.LAMINATE_OFFSET\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.evm", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.evm.html#evm", + "title": "evm", + "section": "evm", + "text": "evm" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K2", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K2.html#thermal_conductivity_k2", - "title": "Thermal_Conductivity_K2", - "section": "Thermal_Conductivity_K2", - "text": "Thermal_Conductivity_K2" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.evm", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.evm.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.evm", + "title": "evm > evm > evm", + "section": "evm > evm", + "text": "FailureModeEnum.evm = 102\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K2", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K2.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K2", - "title": "Thermal_Conductivity_K2 > Thermal_Conductivity_K2 > Thermal_Conductivity_K2", - "section": "Thermal_Conductivity_K2 > Thermal_Conductivity_K2", - "text": "MaterialProperty.Thermal_Conductivity_K2: str = 'thermal_conductivity_y_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset.html#get_element_laminate_offset", + "title": "get_element_laminate_offset", + "section": "get_element_laminate_offset", + "text": "Get laminate offset of element. Returns None if element is not layered.\nelement_id (int) – Element Id/Label\nOptional[float64]\nget_element_laminate_offset\nint\nOptional\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.html#corefailurecriterion", - "title": "CoreFailureCriterion", - "section": "CoreFailureCriterion", - "text": "Defines the core shear failure criterion for\ncore materials like foam and honeycomb.\ninclude_ins (bool, default: False) – Whether to activate the formulation that considers interlaminar normal stresses.\nwf (float, default: 1.0) – Weighting factor of the failure mode (cs).\nCoreFailureCriterion.to_dict()\n\nCoreFailureCriterion.to_json()\n\nCoreFailureCriterion.active\nThe failure criterion is suppressed if active is False.\nCoreFailureCriterion.include_ins\nWhether to activate the formulation that considers interlaminar normal stresses.\nCoreFailureCriterion.name\nName of the failure criterion.\nCoreFailureCriterion.wf\nWeighting factor of the failure mode (cs).\nCoreFailureCriterion\nbool\nFalse\nfloat\n1.0\nCoreFailureCriterion.to_dict\nCoreFailureCriterion.to_json\nCoreFailureCriterion.active\nCoreFailureCriterion.include_ins\nCoreFailureCriterion.name\nCoreFailureCriterion.wf" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset", + "title": "get_element_laminate_offset > get_element_laminate_offset > get_element_laminate_offset", + "section": "get_element_laminate_offset > get_element_laminate_offset", + "text": "LayupPropertiesProvider.get_element_laminate_offset(element_id)\n\nGet laminate offset of element. Returns None if element is not layered.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[float64]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion", - "title": "CoreFailureCriterion > CoreFailureCriterion > CoreFailureCriterion", - "section": "CoreFailureCriterion > CoreFailureCriterion", - "text": "class ansys.dpf.composites.failure_criteria.CoreFailureCriterion(*, include_ins=False, wf=1.0)\n\nDefines the core shear failure criterion for\ncore materials like foam and honeycomb.\n\nParameters\n\ninclude_ins (bool, default: False) – Whether to activate the formulation that considers interlaminar normal stresses.\n\nwf (float, default: 1.0) – Weighting factor of the failure mode (cs).\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nCoreFailureCriterion.to_dict()\n\n\n\nCoreFailureCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nCoreFailureCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nCoreFailureCriterion.include_ins\n\nWhether to activate the formulation that considers interlaminar normal stresses.\n\nCoreFailureCriterion.name\n\nName of the failure criterion.\n\nCoreFailureCriterion.wf\n\nWeighting factor of the failure mode (cs).\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s3", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s3.html#s3", + "title": "s3", + "section": "s3", + "text": "Stresses in the material 3 direction of each ply.\nndarray[Any, dtype[float64]]\ns3\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pd.html#wf_pd", - "title": "wf_pd", - "section": "wf_pd", - "text": "Weighting factor of the delamination failure (pd) mode.\nfloat\nwf_pd\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s3", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s3.html#ansys.dpf.composites.sampling_point.SamplingPoint.s3", + "title": "s3 > s3 > s3", + "section": "s3 > s3", + "text": "property SamplingPoint.s3: ndarray[Any, dtype[float64]]\n\nStresses in the material 3 direction of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pd.html#ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pd", - "title": "wf_pd > wf_pd > wf_pd", - "section": "wf_pd > wf_pd", - "text": "property PuckCriterion.wf_pd: float\n\nWeighting factor of the delamination failure (pd) mode.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.active.html#active", + "title": "active", + "section": "active", + "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_json.html#to_json", - "title": "to_json", - "section": "to_json", - "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.active.html#ansys.dpf.composites.failure_criteria.PuckCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property PuckCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_json.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_json", - "title": "to_json > to_json > to_json", - "section": "to_json > to_json", - "text": "TsaiWuCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.number_of_nodes_per_spot_plane", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.number_of_nodes_per_spot_plane.html#number_of_nodes_per_spot_plane", + "title": "number_of_nodes_per_spot_plane", + "section": "number_of_nodes_per_spot_plane", + "text": "number_of_nodes_per_spot_plane" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.engineering_data", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.engineering_data.html#engineering_data", - "title": "engineering_data", - "section": "engineering_data", - "text": "engineering_data" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.number_of_nodes_per_spot_plane", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.number_of_nodes_per_spot_plane.html#ansys.dpf.composites.layup_info.ElementInfo.number_of_nodes_per_spot_plane", + "title": "number_of_nodes_per_spot_plane > number_of_nodes_per_spot_plane > number_of_nodes_per_spot_plane", + "section": "number_of_nodes_per_spot_plane > number_of_nodes_per_spot_plane", + "text": "ElementInfo.number_of_nodes_per_spot_plane: int\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.engineering_data", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.engineering_data.html#ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.engineering_data", - "title": "engineering_data > engineering_data > engineering_data", - "section": "engineering_data > engineering_data", - "text": "ShortFiberCompositesFiles.engineering_data: str | PathLike[str]\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.force_global_constants", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.force_global_constants.html#force_global_constants", + "title": "force_global_constants", + "section": "force_global_constants", + "text": "Whether to use global constants instead of the material-wise properties.\nbool\nforce_global_constants\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.s", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.s.html#s", - "title": "s", - "section": "s", - "text": "Specifies the effect of fiber parallel stresses regarding inter-fiber failure. s = [0, 1) and the default is 0.5.\nfloat\ns\n0.5\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.force_global_constants", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.force_global_constants.html#ansys.dpf.composites.failure_criteria.PuckCriterion.force_global_constants", + "title": "force_global_constants > force_global_constants > force_global_constants", + "section": "force_global_constants > force_global_constants", + "text": "property PuckCriterion.force_global_constants: bool\n\nWhether to use global constants instead of the material-wise properties.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.s", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.s.html#ansys.dpf.composites.failure_criteria.PuckCriterion.s", - "title": "s > s > s", - "section": "s > s", - "text": "property PuckCriterion.s: float\n\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure. s = [0, 1) and the default is 0.5.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.html#resultdefinitionscope", + "title": "ResultDefinitionScope", + "section": "ResultDefinitionScope", + "text": "Provides the result definition scope.\nResultDefinitionScope.mapping_file\nPath to the mapping file for all element labels in the element scope.\nResultDefinitionScope.write_data_for_full_element_scope\nWhether to write the data for all element labels in the element scope.\nResultDefinitionScope.composite_definition\n\nResultDefinitionScope.element_scope\n\nResultDefinitionScope.ply_scope\n\nResultDefinitionScope.named_selection_scope\nAssembly files that define the mapping of the labels.\nResultDefinitionScope\nResultDefinitionScope.mapping_file\nResultDefinitionScope.write_data_for_full_element_scope\nResultDefinitionScope.composite_definition\nResultDefinitionScope.element_scope\nResultDefinitionScope.ply_scope\nResultDefinitionScope.named_selection_scope" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.html#materialproperty", - "title": "MaterialProperty", - "section": "MaterialProperty", - "text": "Provides the material properties that are available.\nMaterialProperty.Engineering_Constants_E1\n\nMaterialProperty.Engineering_Constants_E2\n\nMaterialProperty.Engineering_Constants_E3\n\nMaterialProperty.Engineering_Constants_E\n\nMaterialProperty.Engineering_Constants_G12\n\nMaterialProperty.Engineering_Constants_G23\n\nMaterialProperty.Engineering_Constants_G13\n\nMaterialProperty.Engineering_Constants_nu12\n\nMaterialProperty.Engineering_Constants_nu23\n\nMaterialProperty.Engineering_Constants_nu13\n\nMaterialProperty.Engineering_Constants_nu\n\nMaterialProperty.Strain_Limits_effective_strain\n\nMaterialProperty.Tensile_Yield_Strength_effective_stress\n\nMaterialProperty.Strain_Limits_eXt\n\nMaterialProperty.Strain_Limits_eYt\n\nMaterialProperty.Strain_Limits_eZt\n\nMaterialProperty.Strain_Limits_eXc\n\nMaterialProperty.Strain_Limits_eYc\n\nMaterialProperty.Strain_Limits_eZc\n\nMaterialProperty.Strain_Limits_eSxy\n\nMaterialProperty.Strain_Limits_eSyz\n\nMaterialProperty.Strain_Limits_eSxz\n\nMaterialProperty.Stress_Limits_Xt\n\nMaterialProperty.Stress_Limits_Yt\n\nMaterialProperty.Stress_Limits_Zt\n\nMaterialProperty.Stress_Limits_Xc\n\nMaterialProperty.Stress_Limits_Yc\n\nMaterialProperty.Stress_Limits_Zc\n\nMaterialProperty.Stress_Limits_Sxy\n\nMaterialProperty.Stress_Limits_Syz\n\nMaterialProperty.Stress_Limits_Sxz\n\nMaterialProperty.Thermal_Conductivity_K\n\nMaterialProperty.Thermal_Conductivity_K1\n\nMaterialProperty.Thermal_Conductivity_K2\n\nMaterialProperty.Thermal_Conductivity_K3\n\nMaterialProperty.Specific_Heat_cp\n\nMaterialProperty.Thermal_Expansion_Coefficients_a\n\nMaterialProperty.Thermal_Expansion_Coefficients_aX\n\nMaterialProperty.Thermal_Expansion_Coefficients_aY\n\nMaterialProperty.Thermal_Expansion_Coefficients_aZ\n\nMaterialProperty.Fabric_Fiber_Angle_phi\n\nMaterialProperty.Hill_Yield_Criterion_R11\n\nMaterialProperty.Hill_Yield_Criterion_R22\n\nMaterialProperty.Hill_Yield_Criterion_R33\n\nMaterialProperty.Hill_Yield_Criterion_R12\n\nMaterialProperty.Hill_Yield_Criterion_R23\n\nMaterialProperty.Hill_Yield_Criterion_R13\n\nMaterialProperty.Tsai_Wu_Constant_xy\n\nMaterialProperty.Tsai_Wu_Constant_yz\n\nMaterialProperty.Tsai_Wu_Constant_xz\n\nMaterialProperty.Puck_Constants_p_21_pos\n\nMaterialProperty.Puck_Constants_p_21_neg\n\nMaterialProperty.Puck_Constants_p_22_pos\n\nMaterialProperty.Puck_Constants_p_22_neg\n\nMaterialProperty.Puck_Constants_s\n\nMaterialProperty.Puck_Constants_m\n\nMaterialProperty.Puck_Constants_interface_weakening_factor\n\nMaterialProperty.Larc_Constants_fracture_angle_under_compression\n\nMaterialProperty.Larc_Constants_fracture_toughness_ratio\n\nMaterialProperty.Larc_Constants_fracture_toughness_mode_1\n\nMaterialProperty.Larc_Constants_fracture_toughness_mode_2\n\nMaterialProperty\nMaterialProperty.Engineering_Constants_E1\nMaterialProperty.Engineering_Constants_E2\nMaterialProperty.Engineering_Constants_E3\nMaterialProperty.Engineering_Constants_E\nMaterialProperty.Engineering_Constants_G12\nMaterialProperty.Engineering_Constants_G23\nMaterialProperty.Engineering_Constants_G13\nMaterialProperty.Engineering_Constants_nu12\nMaterialProperty.Engineering_Constants_nu23\nMaterialProperty.Engineering_Constants_nu13\nMaterialProperty.Engineering_Constants_nu\nMaterialProperty.Strain_Limits_effective_strain\nMaterialProperty.Tensile_Yield_Strength_effective_stress\nMaterialProperty.Strain_Limits_eXt\nMaterialProperty.Strain_Limits_eYt\nMaterialProperty.Strain_Limits_eZt\nMaterialProperty.Strain_Limits_eXc\nMaterialProperty.Strain_Limits_eYc\nMaterialProperty.Strain_Limits_eZc\nMaterialProperty.Strain_Limits_eSxy\nMaterialProperty.Strain_Limits_eSyz\nMaterialProperty.Strain_Limits_eSxz\nMaterialProperty.Stress_Limits_Xt\nMaterialProperty.Stress_Limits_Yt\nMaterialProperty.Stress_Limits_Zt\nMaterialProperty.Stress_Limits_Xc\nMaterialProperty.Stress_Limits_Yc\nMaterialProperty.Stress_Limits_Zc\nMaterialProperty.Stress_Limits_Sxy\nMaterialProperty.Stress_Limits_Syz\nMaterialProperty.Stress_Limits_Sxz\nMaterialProperty.Thermal_Conductivity_K\nMaterialProperty.Thermal_Conductivity_K1\nMaterialProperty.Thermal_Conductivity_K2\nMaterialProperty.Thermal_Conductivity_K3\nMaterialProperty.Specific_Heat_cp\nMaterialProperty.Thermal_Expansion_Coefficients_a\nMaterialProperty.Thermal_Expansion_Coefficients_aX\nMaterialProperty.Thermal_Expansion_Coefficients_aY\nMaterialProperty.Thermal_Expansion_Coefficients_aZ\nMaterialProperty.Fabric_Fiber_Angle_phi\nMaterialProperty.Hill_Yield_Criterion_R11\nMaterialProperty.Hill_Yield_Criterion_R22\nMaterialProperty.Hill_Yield_Criterion_R33\nMaterialProperty.Hill_Yield_Criterion_R12\nMaterialProperty.Hill_Yield_Criterion_R23\nMaterialProperty.Hill_Yield_Criterion_R13\nMaterialProperty.Tsai_Wu_Constant_xy\nMaterialProperty.Tsai_Wu_Constant_yz\nMaterialProperty.Tsai_Wu_Constant_xz\nMaterialProperty.Puck_Constants_p_21_pos\nMaterialProperty.Puck_Constants_p_21_neg\nMaterialProperty.Puck_Constants_p_22_pos\nMaterialProperty.Puck_Constants_p_22_neg\nMaterialProperty.Puck_Constants_s\nMaterialProperty.Puck_Constants_m\nMaterialProperty.Puck_Constants_interface_weakening_factor\nMaterialProperty.Larc_Constants_fracture_angle_under_compression\nMaterialProperty.Larc_Constants_fracture_toughness_ratio\nMaterialProperty.Larc_Constants_fracture_toughness_mode_1\nMaterialProperty.Larc_Constants_fracture_toughness_mode_2" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.html#ansys.dpf.composites.result_definition.ResultDefinitionScope", + "title": "ResultDefinitionScope > ResultDefinitionScope > ResultDefinitionScope", + "section": "ResultDefinitionScope > ResultDefinitionScope", + "text": "class ansys.dpf.composites.result_definition.ResultDefinitionScope(composite_definition, element_scope=, ply_scope=, named_selection_scope=, mapping_file=None, write_data_for_full_element_scope=True)\n\nProvides the result definition scope.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nResultDefinitionScope.mapping_file\n\nPath to the mapping file for all element labels in the element scope.\n\nResultDefinitionScope.write_data_for_full_element_scope\n\nWhether to write the data for all element labels in the element scope.\n\nResultDefinitionScope.composite_definition\n\n\n\nResultDefinitionScope.element_scope\n\n\n\nResultDefinitionScope.ply_scope\n\n\n\nResultDefinitionScope.named_selection_scope\n\nAssembly files that define the mapping of the labels.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty", - "title": "MaterialProperty > MaterialProperty > MaterialProperty", - "section": "MaterialProperty > MaterialProperty", - "text": "class ansys.dpf.composites.layup_info.material_properties.MaterialProperty(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides the material properties that are available.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nMaterialProperty.Engineering_Constants_E1\n\n\n\nMaterialProperty.Engineering_Constants_E2\n\n\n\nMaterialProperty.Engineering_Constants_E3\n\n\n\nMaterialProperty.Engineering_Constants_E\n\n\n\nMaterialProperty.Engineering_Constants_G12\n\n\n\nMaterialProperty.Engineering_Constants_G23\n\n\n\nMaterialProperty.Engineering_Constants_G13\n\n\n\nMaterialProperty.Engineering_Constants_nu12\n\n\n\nMaterialProperty.Engineering_Constants_nu23\n\n\n\nMaterialProperty.Engineering_Constants_nu13\n\n\n\nMaterialProperty.Engineering_Constants_nu\n\n\n\nMaterialProperty.Strain_Limits_effective_strain\n\n\n\nMaterialProperty.Tensile_Yield_Strength_effective_stress\n\n\n\nMaterialProperty.Strain_Limits_eXt\n\n\n\nMaterialProperty.Strain_Limits_eYt\n\n\n\nMaterialProperty.Strain_Limits_eZt\n\n\n\nMaterialProperty.Strain_Limits_eXc\n\n\n\nMaterialProperty.Strain_Limits_eYc\n\n\n\nMaterialProperty.Strain_Limits_eZc\n\n\n\nMaterialProperty.Strain_Limits_eSxy\n\n\n\nMaterialProperty.Strain_Limits_eSyz\n\n\n\nMaterialProperty.Strain_Limits_eSxz\n\n\n\nMaterialProperty.Stress_Limits_Xt\n\n\n\nMaterialProperty.Stress_Limits_Yt\n\n\n\nMaterialProperty.Stress_Limits_Zt\n\n\n\nMaterialProperty.Stress_Limits_Xc\n\n\n\nMaterialProperty.Stress_Limits_Yc\n\n\n\nMaterialProperty.Stress_Limits_Zc\n\n\n\nMaterialProperty.Stress_Limits_Sxy\n\n\n\nMaterialProperty.Stress_Limits_Syz\n\n\n\nMaterialProperty.Stress_Limits_Sxz\n\n\n\nMaterialProperty.Thermal_Conductivity_K\n\n\n\nMaterialProperty.Thermal_Conductivity_K1\n\n\n\nMaterialProperty.Thermal_Conductivity_K2\n\n\n\nMaterialProperty.Thermal_Conductivity_K3\n\n\n\nMaterialProperty.Specific_Heat_cp\n\n\n\nMaterialProperty.Thermal_Expansion_Coefficients_a\n\n\n\nMaterialProperty.Thermal_Expansion_Coefficients_aX\n\n\n\nMaterialProperty.Thermal_Expansion_Coefficients_aY\n\n\n\nMaterialProperty.Thermal_Expansion_Coefficients_aZ\n\n\n\nMaterialProperty.Fabric_Fiber_Angle_phi\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R11\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R22\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R33\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R12\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R23\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R13\n\n\n\nMaterialProperty.Tsai_Wu_Constant_xy\n\n\n\nMaterialProperty.Tsai_Wu_Constant_yz\n\n\n\nMaterialProperty.Tsai_Wu_Constant_xz\n\n\n\nMaterialProperty.Puck_Constants_p_21_pos\n\n\n\nMaterialProperty.Puck_Constants_p_21_neg\n\n\n\nMaterialProperty.Puck_Constants_p_22_pos\n\n\n\nMaterialProperty.Puck_Constants_p_22_neg\n\n\n\nMaterialProperty.Puck_Constants_s\n\n\n\nMaterialProperty.Puck_Constants_m\n\n\n\nMaterialProperty.Puck_Constants_interface_weakening_factor\n\n\n\nMaterialProperty.Larc_Constants_fracture_angle_under_compression\n\n\n\nMaterialProperty.Larc_Constants_fracture_toughness_ratio\n\n\n\nMaterialProperty.Larc_Constants_fracture_toughness_mode_1\n\n\n\nMaterialProperty.Larc_Constants_fracture_toughness_mode_2\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_analysis_plies", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_analysis_plies.html#get_analysis_plies", + "title": "get_analysis_plies", + "section": "get_analysis_plies", + "text": "Get analysis ply names.\nThis method returns None if the element is not layered.\nelement_id (int) – Element ID or label.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nThe dictionary only contains the analysis plies in the specified composite\ndefinition.\nOptional[Sequence[str]]\nget_analysis_plies\nNone\nint\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nOptional\nSequence\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal.html#isdecimal", - "title": "isdecimal", - "section": "isdecimal", - "text": "Return True if the string is a decimal string, False otherwise.\nA string is a decimal string if all characters in the string are decimal and\nthere is at least one character in the string.\nisdecimal" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_analysis_plies", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_analysis_plies.html#ansys.dpf.composites.composite_model.CompositeModel.get_analysis_plies", + "title": "get_analysis_plies > get_analysis_plies > get_analysis_plies", + "section": "get_analysis_plies > get_analysis_plies", + "text": "CompositeModel.get_analysis_plies(element_id, composite_definition_label=None)\n\nGet analysis ply names.\n\nThis method returns None if the element is not layered.\n\nParameters\n\nelement_id (int) – Element ID or label.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nThe dictionary only contains the analysis plies in the specified composite\ndefinition.\n\nReturn type\n\nOptional[Sequence[str]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal", - "title": "isdecimal > isdecimal > isdecimal", - "section": "isdecimal > isdecimal", - "text": "FailureMeasureEnum.isdecimal(/)\n\nReturn True if the string is a decimal string, False otherwise.\n\nA string is a decimal string if all characters in the string are decimal and\nthere is at least one character in the string.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_shell", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_shell.html#is_shell", + "title": "is_shell", + "section": "is_shell", + "text": "is_shell" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e23.html#e23", - "title": "e23", - "section": "e23", - "text": "e23" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_shell", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_shell.html#ansys.dpf.composites.layup_info.ElementInfo.is_shell", + "title": "is_shell > is_shell > is_shell", + "section": "is_shell > is_shell", + "text": "ElementInfo.is_shell: bool\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e23.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e23", - "title": "e23 > e23 > e23", - "section": "e23 > e23", - "text": "FailureModeEnum.e23 = 160\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.ply_type", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.ply_type.html#ply_type", + "title": "ply_type", + "section": "ply_type", + "text": "ply_type" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.wf.html#wf", - "title": "wf", - "section": "wf", - "text": "Weighting factor of the failure mode (wb or wt). The default is 0.5.\nfloat\nwf\n0.5\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.ply_type", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.ply_type.html#ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.ply_type", + "title": "ply_type > ply_type > ply_type", + "section": "ply_type > ply_type", + "text": "MaterialMetadata.ply_type: str | None = None\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.wf.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.wf", - "title": "wf > wf > wf", - "section": "wf > wf", - "text": "property FaceSheetWrinklingCriterion.wf: float\n\nWeighting factor of the failure mode (wb or wt). The default is 0.5.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pd", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pd.html#wf_pd", + "title": "wf_pd", + "section": "wf_pd", + "text": "Weighting factor of the delamination failure (pd) mode.\nfloat\nwf_pd\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kf.html#kf", - "title": "kf", - "section": "kf", - "text": "Weighting factor of the face sheets for evaluation of the maximum allowable load. The default is 0 so the face sheet does not contribute to the allowable load. This property is valid for thin face sheets.\nfloat\nkf\n0\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pd", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pd.html#ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pd", + "title": "wf_pd > wf_pd > wf_pd", + "section": "wf_pd > wf_pd", + "text": "property PuckCriterion.wf_pd: float\n\nWeighting factor of the delamination failure (pd) mode.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kf.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kf", - "title": "kf > kf > kf", - "section": "kf > kf", - "text": "property ShearCrimpingCriterion.kf: float\n\nWeighting factor of the face sheets for evaluation of the maximum allowable load. The default is 0 so the face sheet does not contribute to the allowable load. This property is valid for thin face sheets.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA.html#pma", + "title": "pmA", + "section": "pmA", + "text": "pmA" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_operators", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_operators.html#material_operators", - "title": "material_operators", - "section": "material_operators", - "text": "Material operators.\nMaterialOperators\nmaterial_operators\nMaterialOperators" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA", + "title": "pmA > pmA > pmA", + "section": "pmA > pmA", + "text": "FailureModeEnum.pmA = 802\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_operators", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_operators.html#ansys.dpf.composites.composite_model.CompositeModel.material_operators", - "title": "material_operators > material_operators > material_operators", - "section": "material_operators > material_operators", - "text": "property CompositeModel.material_operators: MaterialOperators\n\nMaterial operators.\n\nReturn type\n\nMaterialOperators\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.SHEAR_ANGLE", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.SHEAR_ANGLE.html#shear_angle", + "title": "SHEAR_ANGLE", + "section": "SHEAR_ANGLE", + "text": "SHEAR_ANGLE" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_analysis_plies", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_analysis_plies.html#get_analysis_plies", - "title": "get_analysis_plies", - "section": "get_analysis_plies", - "text": "Get analysis ply names.\nThis method returns None if the element is not layered.\nelement_id (int) – Element ID or label.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nThe dictionary only contains the analysis plies in the specified composite\ndefinition.\nOptional[Sequence[str]]\nget_analysis_plies\nNone\nint\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nOptional\nSequence\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.SHEAR_ANGLE", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.SHEAR_ANGLE.html#ansys.dpf.composites.layup_info.LayupProperty.SHEAR_ANGLE", + "title": "SHEAR_ANGLE > SHEAR_ANGLE > SHEAR_ANGLE", + "section": "SHEAR_ANGLE > SHEAR_ANGLE", + "text": "LayupProperty.SHEAR_ANGLE = 1\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_analysis_plies", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_analysis_plies.html#ansys.dpf.composites.composite_model.CompositeModel.get_analysis_plies", - "title": "get_analysis_plies > get_analysis_plies > get_analysis_plies", - "section": "get_analysis_plies > get_analysis_plies", - "text": "CompositeModel.get_analysis_plies(element_id, composite_definition_label=None)\n\nGet analysis ply names.\n\nThis method returns None if the element is not layered.\n\nParameters\n\nelement_id (int) – Element ID or label.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nThe dictionary only contains the analysis plies in the specified composite\ndefinition.\n\nReturn type\n\nOptional[Sequence[str]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.html#failuremeasureenum", + "title": "FailureMeasureEnum", + "section": "FailureMeasureEnum", + "text": "Provides available failure measures.\nFailureMeasureEnum.encode(/[, encoding, errors])\nEncode the string using the codec registered for encoding.\nFailureMeasureEnum.replace(old, new, /[, count])\nReturn a copy with all occurrences of substring old replaced by new.\nFailureMeasureEnum.split(/[, sep, maxsplit])\nReturn a list of the substrings in the string, using sep as the separator string.\nFailureMeasureEnum.rsplit(/[, sep, maxsplit])\nReturn a list of the substrings in the string, using sep as the separator string.\nFailureMeasureEnum.join(iterable, /)\nConcatenate any number of strings.\nFailureMeasureEnum.capitalize(/)\nReturn a capitalized version of the string.\nFailureMeasureEnum.casefold(/)\nReturn a version of the string suitable for caseless comparisons.\nFailureMeasureEnum.title(/)\nReturn a version of the string where each word is titlecased.\nFailureMeasureEnum.center(width[, fillchar])\nReturn a centered string of length width.\nFailureMeasureEnum.count(sub[, start[, end]], /)\nReturn the number of non-overlapping occurrences of substring sub in string S[start:end].\nFailureMeasureEnum.expandtabs(/[, tabsize])\nReturn a copy where all tab characters are expanded using spaces.\nFailureMeasureEnum.find(sub[, start[, end]], /)\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.partition(sep, /)\nPartition the string into three parts using the given separator.\nFailureMeasureEnum.index(sub[, start[, end]], /)\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.ljust(width[, fillchar])\nReturn a left-justified string of length width.\nFailureMeasureEnum.lower(/)\nReturn a copy of the string converted to lowercase.\nFailureMeasureEnum.lstrip([chars])\nReturn a copy of the string with leading whitespace removed.\nFailureMeasureEnum.rfind(sub[, start[, end]], /)\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.rindex(sub[, start[, end]], /)\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.rjust(width[, fillchar])\nReturn a right-justified string of length width.\nFailureMeasureEnum.rstrip([chars])\nReturn a copy of the string with trailing whitespace removed.\nFailureMeasureEnum.rpartition(sep, /)\nPartition the string into three parts using the given separator.\nFailureMeasureEnum.splitlines(/[, keepends])\nReturn a list of the lines in the string, breaking at line boundaries.\nFailureMeasureEnum.strip([chars])\nReturn a copy of the string with leading and trailing whitespace removed.\nFailureMeasureEnum.swapcase(/)\nConvert uppercase characters to lowercase and lowercase characters to uppercase.\nFailureMeasureEnum.translate(table, /)\nReplace each character in the string using the given translation table.\nFailureMeasureEnum.upper(/)\nReturn a copy of the string converted to uppercase.\nFailureMeasureEnum.startswith(prefix[, ...)\nReturn True if the string starts with the specified prefix, False otherwise.\nFailureMeasureEnum.endswith(suffix[, start[, ...)\nReturn True if the string ends with the specified suffix, False otherwise.\nFailureMeasureEnum.removeprefix(prefix, /)\nReturn a str with the given prefix string removed if present.\nFailureMeasureEnum.removesuffix(suffix, /)\nReturn a str with the given suffix string removed if present.\nFailureMeasureEnum.isascii(/)\nReturn True if all characters in the string are ASCII, False otherwise.\nFailureMeasureEnum.islower(/)\nReturn True if the string is a lowercase string, False otherwise.\nFailureMeasureEnum.isupper(/)\nReturn True if the string is an uppercase string, False otherwise.\nFailureMeasureEnum.istitle(/)\nReturn True if the string is a title-cased string, False otherwise.\nFailureMeasureEnum.isspace(/)\nReturn True if the string is a whitespace string, False otherwise.\nFailureMeasureEnum.isdecimal(/)\nReturn True if the string is a decimal string, False otherwise.\nFailureMeasureEnum.isdigit(/)\nReturn True if the string is a digit string, False otherwise.\nFailureMeasureEnum.isnumeric(/)\nReturn True if the string is a numeric string, False otherwise.\nFailureMeasureEnum.isalpha(/)\nReturn True if the string is an alphabetic string, False otherwise.\nFailureMeasureEnum.isalnum(/)\nReturn True if the string is an alpha-numeric string, False otherwise.\nFailureMeasureEnum.isidentifier(/)\nReturn True if the string is a valid Python identifier, False otherwise.\nFailureMeasureEnum.isprintable(/)\nReturn True if the string is printable, False otherwise.\nFailureMeasureEnum.zfill(width, /)\nPad a numeric string with zeros on the left, to fill a field of the given width.\nFailureMeasureEnum.format(*args, **kwargs)\nReturn a formatted version of the string, using substitutions from args and kwargs.\nFailureMeasureEnum.format_map(mapping, /)\nReturn a formatted version of the string, using substitutions from mapping.\nFailureMeasureEnum.maketrans(x[, y, z])\nReturn a translation table usable for str.translate().\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\n\nFailureMeasureEnum.MARGIN_OF_SAFETY\n\nFailureMeasureEnum.RESERVE_FACTOR\n\nFailureMeasureEnum\nFailureMeasureEnum.encode\nFailureMeasureEnum.replace\nFailureMeasureEnum.split\nFailureMeasureEnum.rsplit\nFailureMeasureEnum.join\nFailureMeasureEnum.capitalize\nFailureMeasureEnum.casefold\nFailureMeasureEnum.title\nFailureMeasureEnum.center\nFailureMeasureEnum.count\nFailureMeasureEnum.expandtabs\nFailureMeasureEnum.find\nFailureMeasureEnum.partition\nFailureMeasureEnum.index\nFailureMeasureEnum.ljust\nFailureMeasureEnum.lower\nFailureMeasureEnum.lstrip\nFailureMeasureEnum.rfind\nFailureMeasureEnum.rindex\nFailureMeasureEnum.rjust\nFailureMeasureEnum.rstrip\nFailureMeasureEnum.rpartition\nFailureMeasureEnum.splitlines\nFailureMeasureEnum.strip\nFailureMeasureEnum.swapcase\nFailureMeasureEnum.translate\nFailureMeasureEnum.upper\nFailureMeasureEnum.startswith\nFailureMeasureEnum.endswith\nFailureMeasureEnum.removeprefix\nFailureMeasureEnum.removesuffix\nFailureMeasureEnum.isascii\nFailureMeasureEnum.islower\nFailureMeasureEnum.isupper\nFailureMeasureEnum.istitle\nFailureMeasureEnum.isspace\nFailureMeasureEnum.isdecimal\nFailureMeasureEnum.isdigit\nFailureMeasureEnum.isnumeric\nFailureMeasureEnum.isalpha\nFailureMeasureEnum.isalnum\nFailureMeasureEnum.isidentifier\nFailureMeasureEnum.isprintable\nFailureMeasureEnum.zfill\nFailureMeasureEnum.format\nFailureMeasureEnum.format_map\nFailureMeasureEnum.maketrans\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\nFailureMeasureEnum.MARGIN_OF_SAFETY\nFailureMeasureEnum.RESERVE_FACTOR" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2.html#e2", - "title": "e2", - "section": "e2", - "text": "e2" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.html#ansys.dpf.composites.result_definition.FailureMeasureEnum", + "title": "FailureMeasureEnum > FailureMeasureEnum > FailureMeasureEnum", + "section": "FailureMeasureEnum > FailureMeasureEnum", + "text": "class ansys.dpf.composites.result_definition.FailureMeasureEnum(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides available failure measures.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nFailureMeasureEnum.encode(/[, encoding, errors])\n\nEncode the string using the codec registered for encoding.\n\nFailureMeasureEnum.replace(old, new, /[, count])\n\nReturn a copy with all occurrences of substring old replaced by new.\n\nFailureMeasureEnum.split(/[, sep, maxsplit])\n\nReturn a list of the substrings in the string, using sep as the separator string.\n\nFailureMeasureEnum.rsplit(/[, sep, maxsplit])\n\nReturn a list of the substrings in the string, using sep as the separator string.\n\nFailureMeasureEnum.join(iterable, /)\n\nConcatenate any number of strings.\n\nFailureMeasureEnum.capitalize(/)\n\nReturn a capitalized version of the string.\n\nFailureMeasureEnum.casefold(/)\n\nReturn a version of the string suitable for caseless comparisons.\n\nFailureMeasureEnum.title(/)\n\nReturn a version of the string where each word is titlecased.\n\nFailureMeasureEnum.center(width[, fillchar])\n\nReturn a centered string of length width.\n\nFailureMeasureEnum.count(sub[, start[, end]], /)\n\nReturn the number of non-overlapping occurrences of substring sub in string S[start:end].\n\nFailureMeasureEnum.expandtabs(/[, tabsize])\n\nReturn a copy where all tab characters are expanded using spaces.\n\nFailureMeasureEnum.find(sub[, start[, end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.partition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nFailureMeasureEnum.index(sub[, start[, end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.ljust(width[, fillchar])\n\nReturn a left-justified string of length width.\n\nFailureMeasureEnum.lower(/)\n\nReturn a copy of the string converted to lowercase.\n\nFailureMeasureEnum.lstrip([chars])\n\nReturn a copy of the string with leading whitespace removed.\n\nFailureMeasureEnum.rfind(sub[, start[, end]], /)\n\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.rindex(sub[, start[, end]], /)\n\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.rjust(width[, fillchar])\n\nReturn a right-justified string of length width.\n\nFailureMeasureEnum.rstrip([chars])\n\nReturn a copy of the string with trailing whitespace removed.\n\nFailureMeasureEnum.rpartition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nFailureMeasureEnum.splitlines(/[, keepends])\n\nReturn a list of the lines in the string, breaking at line boundaries.\n\nFailureMeasureEnum.strip([chars])\n\nReturn a copy of the string with leading and trailing whitespace removed.\n\nFailureMeasureEnum.swapcase(/)\n\nConvert uppercase characters to lowercase and lowercase characters to uppercase.\n\nFailureMeasureEnum.translate(table, /)\n\nReplace each character in the string using the given translation table.\n\nFailureMeasureEnum.upper(/)\n\nReturn a copy of the string converted to uppercase.\n\nFailureMeasureEnum.startswith(prefix[, ...)\n\nReturn True if the string starts with the specified prefix, False otherwise.\n\nFailureMeasureEnum.endswith(suffix[, start[, ...)\n\nReturn True if the string ends with the specified suffix, False otherwise.\n\nFailureMeasureEnum.removeprefix(prefix, /)\n\nReturn a str with the given prefix string removed if present.\n\nFailureMeasureEnum.removesuffix(suffix, /)\n\nReturn a str with the given suffix string removed if present.\n\nFailureMeasureEnum.isascii(/)\n\nReturn True if all characters in the string are ASCII, False otherwise.\n\nFailureMeasureEnum.islower(/)\n\nReturn True if the string is a lowercase string, False otherwise.\n\nFailureMeasureEnum.isupper(/)\n\nReturn True if the string is an uppercase string, False otherwise.\n\nFailureMeasureEnum.istitle(/)\n\nReturn True if the string is a title-cased string, False otherwise.\n\nFailureMeasureEnum.isspace(/)\n\nReturn True if the string is a whitespace string, False otherwise.\n\nFailureMeasureEnum.isdecimal(/)\n\nReturn True if the string is a decimal string, False otherwise.\n\nFailureMeasureEnum.isdigit(/)\n\nReturn True if the string is a digit string, False otherwise.\n\nFailureMeasureEnum.isnumeric(/)\n\nReturn True if the string is a numeric string, False otherwise.\n\nFailureMeasureEnum.isalpha(/)\n\nReturn True if the string is an alphabetic string, False otherwise.\n\nFailureMeasureEnum.isalnum(/)\n\nReturn True if the string is an alpha-numeric string, False otherwise.\n\nFailureMeasureEnum.isidentifier(/)\n\nReturn True if the string is a valid Python identifier, False otherwise.\n\nFailureMeasureEnum.isprintable(/)\n\nReturn True if the string is printable, False otherwise.\n\nFailureMeasureEnum.zfill(width, /)\n\nPad a numeric string with zeros on the left, to fill a field of the given width.\n\nFailureMeasureEnum.format(*args, **kwargs)\n\nReturn a formatted version of the string, using substitutions from args and kwargs.\n\nFailureMeasureEnum.format_map(mapping, /)\n\nReturn a formatted version of the string, using substitutions from mapping.\n\nFailureMeasureEnum.maketrans(x[, y, z])\n\nReturn a translation table usable for str.translate().\n\n\n\nAttributes\n\n\n\n\n\n\n\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\n\n\n\nFailureMeasureEnum.MARGIN_OF_SAFETY\n\n\n\nFailureMeasureEnum.RESERVE_FACTOR\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e2", - "title": "e2 > e2 > e2", - "section": "e2 > e2", - "text": "FailureModeEnum.e2 = 120\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.element_id", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.element_id.html#element_id", - "title": "element_id", - "section": "element_id", - "text": "Element label for sampling the laminate.\nThis attribute returns -1 if the element ID is not set.\nOptional[int]\nelement_id\n-1\nOptional\nint" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "HoffmanCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.element_id", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.element_id.html#ansys.dpf.composites.sampling_point.SamplingPoint.element_id", - "title": "element_id > element_id > element_id", - "section": "element_id > element_id", - "text": "property SamplingPoint.element_id: int | None\n\nElement label for sampling the laminate.\n\nThis attribute returns -1 if the element ID is not set.\n\nReturn type\n\nOptional[int]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg.html#p22_neg", + "title": "p22_neg", + "section": "p22_neg", + "text": "Global inclination factor of the fracture plane \\perp \\perp for compression.\nfloat\np22_neg\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses.html#get_layer_thicknesses", - "title": "get_layer_thicknesses", - "section": "get_layer_thicknesses", - "text": "Get thicknesses for all layers. Returns None if element is not layered.\nelement_id (int) – Element Id/Label\nOptional[ndarray[Any, dtype[float64]]]\nget_layer_thicknesses\nint\nOptional\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg.html#ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg", + "title": "p22_neg > p22_neg > p22_neg", + "section": "p22_neg > p22_neg", + "text": "property PuckCriterion.p22_neg: float\n\nGlobal inclination factor of the fracture plane \\perp \\perp for compression.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses", - "title": "get_layer_thicknesses > get_layer_thicknesses > get_layer_thicknesses", - "section": "get_layer_thicknesses > get_layer_thicknesses", - "text": "LayupPropertiesProvider.get_layer_thicknesses(element_id)\n\nGet thicknesses for all layers. Returns None if element is not layered.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[ndarray[Any, dtype[float64]]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_polar_plot", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_polar_plot.html#get_polar_plot", + "title": "get_polar_plot", + "section": "get_polar_plot", + "text": "Create a standard polar plot to visualize the polar properties of the laminate.\ncomponents (Sequence[str], default: ('E1', 'E2', 'G12')) – Stiffness quantities to plot.\nSamplingPointFigure\nget_polar_plot\nSequence\nstr\n('E1', 'E2', 'G12')\nSamplingPointFigure" }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.elements", - "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.elements.html#elements", - "title": "elements", - "section": "elements", - "text": "elements" + { + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_polar_plot", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_polar_plot.html#ansys.dpf.composites.sampling_point.SamplingPoint.get_polar_plot", + "title": "get_polar_plot > get_polar_plot > get_polar_plot", + "section": "get_polar_plot > get_polar_plot", + "text": "SamplingPoint.get_polar_plot(components=('E1', 'E2', 'G12'))\n\nCreate a standard polar plot to visualize the polar properties of the laminate.\n\nParameters\n\ncomponents (Sequence[str], default: ('E1', 'E2', 'G12')) – Stiffness quantities to plot.\n\nExamples\n\n>>> figure, axes = sampling_point.get_polar_plot(components=[\"E1\", \"G12\"])\n\nReturn type\n\nSamplingPointFigure\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.elements", - "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.elements.html#ansys.dpf.composites.composite_scope.CompositeScope.elements", - "title": "elements > elements > elements", - "section": "elements > elements", - "text": "CompositeScope.elements: Sequence[int] | None = None\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.html#samplingpoint", + "title": "SamplingPoint", + "section": "SamplingPoint", + "text": "Implements the Sampling Point object that wraps the DPF sampling point operator.\nUse CompositeModel.get_sampling_point() to get a sampling point object.\nThis class provides for plotting the lay-up and results at a certain point of the\nlayered structure. The results, including analysis_plies, e1, s12, and\nfailure_modes, are always from the bottom to the top of the laminate (along\nthe element normal direction). Postprocessing results such as e1 are returned\nas flat arrays where self.spots_per_ply can be used to compute the index for\na certain ply.\nThe results of layered elements are stored per integration point. A layered shell element\nhas a number of in-plane integration points (depending on the integration scheme) and\ntypically three integration points through the thickness. The through-the-thickness\nintegration points are called spots. They are typically at the BOTTOM, MIDDLE,\nand TOP of the layer. This notation is used here to identify the corresponding data.\nThe SamplingPoint class returns three results per layer (one for each spot) because\nthe results of the in-plane integration points are interpolated to the centroid of the element.\nThe following table shows an example of a laminate with three layers. So a result, such as\ns1 has nine values, three for each ply.\nLayer\nIndex\nSpot\nLayer 3\n8\n7\n6\nTOP of Layer 3\nMIDDLE of Layer 3\nBOTTOM of Layer 3\nLayer 2\n5\n4\n3\nTOP of Layer 2\nMIDDLE of Layer 2\nBOTTOM of Layer 2\nLayer 1\n2\n1\n0\nTOP of Layer 1\nMIDDLE of Layer 1\nBOTTOM of Layer 1\nThe get_indices and get_offsets_by_spots methods simplify the indexing and\nfiltering of the data.\nSamplingPoint.add_ply_sequence_to_plot(axes)\nAdd the stacking (ply and text) to an axis or plot.\nSamplingPoint.add_results_to_plot(axes, ...)\nAdd results (strain, stress, or failure values) to an Axes object.\nSamplingPoint.get_indices([spots])\nGet the indices of the selected spots (interfaces) for each ply.\nSamplingPoint.get_offsets_by_spots([spots, ...])\nAccess the y coordinates of the selected spots (interfaces) for each ply.\nSamplingPoint.get_ply_wise_critical_failures()\nGet the critical failure value and modes per ply.\nSamplingPoint.get_polar_plot([components])\nCreate a standard polar plot to visualize the polar properties of the laminate.\nSamplingPoint.get_result_plots([...])\nGenerate a figure with a grid of axes (plot) for each selected result entity.\nSamplingPoint.analysis_plies\nList of analysis plies from the bottom to the top.\nSamplingPoint.e1\nStrains in the material 1 direction of each ply.\nSamplingPoint.e12\nIn-plane shear strains e12 of each ply.\nSamplingPoint.e13\nOut-of-plane shear strains e13 of each ply.\nSamplingPoint.e2\nStrains in the material 2 direction of each ply.\nSamplingPoint.e23\nOut-of-plane shear strains e23 of each ply.\nSamplingPoint.e3\nStrains in the material 3 direction of each ply.\nSamplingPoint.element_id\nElement label for sampling the laminate.\nSamplingPoint.failure_modes\nCritical failure mode of each ply.\nSamplingPoint.inverse_reserve_factor\nCritical inverse reserve factor of each ply.\nSamplingPoint.is_uptodate\nTrue if the Sampling Point is up-to-date.\nSamplingPoint.margin_of_safety\nLowest margin of safety of each ply.\nSamplingPoint.name\nName of the object.\nSamplingPoint.number_of_plies\nNumber of plies.\nSamplingPoint.offsets\nZ coordinates for each interface and ply.\nSamplingPoint.polar_properties_E1\nPolar property E1 of the laminate.\nSamplingPoint.polar_properties_E2\nPolar property E2 of the laminate.\nSamplingPoint.polar_properties_G12\nPolar property G12 of the laminate.\nSamplingPoint.reserve_factor\nLowest reserve factor of each ply.\nSamplingPoint.results\nResults of the sampling point results as a JSON dictionary.\nSamplingPoint.s1\nStresses in the material 1 direction of each ply.\nSamplingPoint.s12\nIn-plane shear stresses s12 of each ply.\nSamplingPoint.s13\nOut-of-plane shear stresses s13 of each ply.\nSamplingPoint.s2\nStresses in the material 2 direction of each ply.\nSamplingPoint.s23\nOut-of-plane shear stresses s23 of each ply.\nSamplingPoint.s3\nStresses in the material 3 direction of each ply.\nSamplingPoint.spots_per_ply\nNumber of through-the-thickness integration points per ply.\nSamplingPoint\nSampling Point\nCompositeModel.get_sampling_point()\nanalysis_plies\ne1\ns12\nfailure_modes\ne1\nself.spots_per_ply\nBOTTOM\nMIDDLE\nTOP\nSamplingPoint\ns1\nSamplingPoint.add_ply_sequence_to_plot\nSamplingPoint.add_results_to_plot\nAxes\nSamplingPoint.get_indices\nSamplingPoint.get_offsets_by_spots\nSamplingPoint.get_ply_wise_critical_failures\nSamplingPoint.get_polar_plot\nSamplingPoint.get_result_plots\nSamplingPoint.analysis_plies\nSamplingPoint.e1\nSamplingPoint.e12\nSamplingPoint.e13\nSamplingPoint.e2\nSamplingPoint.e23\nSamplingPoint.e3\nSamplingPoint.element_id\nSamplingPoint.failure_modes\nSamplingPoint.inverse_reserve_factor\nSamplingPoint.is_uptodate\nSamplingPoint.margin_of_safety\nSamplingPoint.name\nSamplingPoint.number_of_plies\nSamplingPoint.offsets\nSamplingPoint.polar_properties_E1\nSamplingPoint.polar_properties_E2\nSamplingPoint.polar_properties_G12\nSamplingPoint.reserve_factor\nSamplingPoint.results\nSamplingPoint.s1\nSamplingPoint.s12\nSamplingPoint.s13\nSamplingPoint.s2\nSamplingPoint.s23\nSamplingPoint.s3\nSamplingPoint.spots_per_ply" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.maketrans", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.maketrans.html#maketrans", - "title": "maketrans", - "section": "maketrans", - "text": "Return a translation table usable for str.translate().\nIf there is only one argument, it must be a dictionary mapping Unicode\nordinals (integers) or characters to Unicode ordinals, strings or None.\nCharacter keys will be then converted to ordinals.\nIf there are two arguments, they must be strings of equal length, and\nin the resulting dictionary, each character in x will be mapped to the\ncharacter at the same position in y. If there is a third argument, it\nmust be a string, whose characters will be mapped to None in the result.\nmaketrans" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.html#ansys.dpf.composites.sampling_point.SamplingPoint", + "title": "SamplingPoint > SamplingPoint > SamplingPoint", + "section": "SamplingPoint > SamplingPoint", + "text": "class ansys.dpf.composites.sampling_point.SamplingPoint(*args, **kwargs)\n\nImplements the Sampling Point object that wraps the DPF sampling point operator.\n\nUse CompositeModel.get_sampling_point() to get a sampling point object.\nThis class provides for plotting the lay-up and results at a certain point of the\nlayered structure. The results, including analysis_plies, e1, s12, and\nfailure_modes, are always from the bottom to the top of the laminate (along\nthe element normal direction). Postprocessing results such as e1 are returned\nas flat arrays where self.spots_per_ply can be used to compute the index for\na certain ply.\n\nNotes\n\nThe results of layered elements are stored per integration point. A layered shell element\nhas a number of in-plane integration points (depending on the integration scheme) and\ntypically three integration points through the thickness. The through-the-thickness\nintegration points are called spots. They are typically at the BOTTOM, MIDDLE,\nand TOP of the layer. This notation is used here to identify the corresponding data.\n\nThe SamplingPoint class returns three results per layer (one for each spot) because\nthe results of the in-plane integration points are interpolated to the centroid of the element.\nThe following table shows an example of a laminate with three layers. So a result, such as\ns1 has nine values, three for each ply.\n\n\n\n\n\n\n\nLayer\n\nIndex\n\nSpot\n\nLayer 3\n\n8\n\n7\n\n6\n\nTOP of Layer 3\n\nMIDDLE of Layer 3\n\nBOTTOM of Layer 3\n\nLayer 2\n\n5\n\n4\n\n3\n\nTOP of Layer 2\n\nMIDDLE of Layer 2\n\nBOTTOM of Layer 2\n\nLayer 1\n\n2\n\n1\n\n0\n\nTOP of Layer 1\n\nMIDDLE of Layer 1\n\nBOTTOM of Layer 1\n\nThe get_indices and get_offsets_by_spots methods simplify the indexing and\nfiltering of the data.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nSamplingPoint.add_ply_sequence_to_plot(axes)\n\nAdd the stacking (ply and text) to an axis or plot.\n\nSamplingPoint.add_results_to_plot(axes, ...)\n\nAdd results (strain, stress, or failure values) to an Axes object.\n\nSamplingPoint.get_indices([spots])\n\nGet the indices of the selected spots (interfaces) for each ply.\n\nSamplingPoint.get_offsets_by_spots([spots, ...])\n\nAccess the y coordinates of the selected spots (interfaces) for each ply.\n\nSamplingPoint.get_ply_wise_critical_failures()\n\nGet the critical failure value and modes per ply.\n\nSamplingPoint.get_polar_plot([components])\n\nCreate a standard polar plot to visualize the polar properties of the laminate.\n\nSamplingPoint.get_result_plots([...])\n\nGenerate a figure with a grid of axes (plot) for each selected result entity.\n\n\n\nAttributes\n\n\n\n\n\n\n\nSamplingPoint.analysis_plies\n\nList of analysis plies from the bottom to the top.\n\nSamplingPoint.e1\n\nStrains in the material 1 direction of each ply.\n\nSamplingPoint.e12\n\nIn-plane shear strains e12 of each ply.\n\nSamplingPoint.e13\n\nOut-of-plane shear strains e13 of each ply.\n\nSamplingPoint.e2\n\nStrains in the material 2 direction of each ply.\n\nSamplingPoint.e23\n\nOut-of-plane shear strains e23 of each ply.\n\nSamplingPoint.e3\n\nStrains in the material 3 direction of each ply.\n\nSamplingPoint.element_id\n\nElement label for sampling the laminate.\n\nSamplingPoint.failure_modes\n\nCritical failure mode of each ply.\n\nSamplingPoint.inverse_reserve_factor\n\nCritical inverse reserve factor of each ply.\n\nSamplingPoint.is_uptodate\n\nTrue if the Sampling Point is up-to-date.\n\nSamplingPoint.margin_of_safety\n\nLowest margin of safety of each ply.\n\nSamplingPoint.name\n\nName of the object.\n\nSamplingPoint.number_of_plies\n\nNumber of plies.\n\nSamplingPoint.offsets\n\nZ coordinates for each interface and ply.\n\nSamplingPoint.polar_properties_E1\n\nPolar property E1 of the laminate.\n\nSamplingPoint.polar_properties_E2\n\nPolar property E2 of the laminate.\n\nSamplingPoint.polar_properties_G12\n\nPolar property G12 of the laminate.\n\nSamplingPoint.reserve_factor\n\nLowest reserve factor of each ply.\n\nSamplingPoint.results\n\nResults of the sampling point results as a JSON dictionary.\n\nSamplingPoint.s1\n\nStresses in the material 1 direction of each ply.\n\nSamplingPoint.s12\n\nIn-plane shear stresses s12 of each ply.\n\nSamplingPoint.s13\n\nOut-of-plane shear stresses s13 of each ply.\n\nSamplingPoint.s2\n\nStresses in the material 2 direction of each ply.\n\nSamplingPoint.s23\n\nOut-of-plane shear stresses s23 of each ply.\n\nSamplingPoint.s3\n\nStresses in the material 3 direction of each ply.\n\nSamplingPoint.spots_per_ply\n\nNumber of through-the-thickness integration points per ply.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.maketrans", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.maketrans.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.maketrans", - "title": "maketrans > maketrans > maketrans", - "section": "maketrans > maketrans", - "text": "static FailureMeasureEnum.maketrans(x, y=, z=, /)\n\nReturn a translation table usable for str.translate().\n\nIf there is only one argument, it must be a dictionary mapping Unicode\nordinals (integers) or characters to Unicode ordinals, strings or None.\nCharacter keys will be then converted to ordinals.\nIf there are two arguments, they must be strings of equal length, and\nin the resulting dictionary, each character in x will be mapped to the\ncharacter at the same position in y. If there is a third argument, it\nmust be a string, whose characters will be mapped to None in the result.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.engineering_data", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.engineering_data.html#engineering_data", + "title": "engineering_data", + "section": "engineering_data", + "text": "engineering_data" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.mode_interaction_coeff", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.mode_interaction_coeff.html#mode_interaction_coeff", - "title": "mode_interaction_coeff", - "section": "mode_interaction_coeff", - "text": "Mode interaction coefficient. The default is 2.6.\nfloat\nmode_interaction_coeff\n2.6\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.engineering_data", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.engineering_data.html#ansys.dpf.composites.data_sources.CompositeDataSources.engineering_data", + "title": "engineering_data > engineering_data > engineering_data", + "section": "engineering_data > engineering_data", + "text": "CompositeDataSources.engineering_data: DataSources\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.mode_interaction_coeff", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.mode_interaction_coeff.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.mode_interaction_coeff", - "title": "mode_interaction_coeff > mode_interaction_coeff > mode_interaction_coeff", - "section": "mode_interaction_coeff > mode_interaction_coeff", - "text": "property CuntzeCriterion.mode_interaction_coeff: float\n\nMode interaction coefficient. The default is 2.6.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e2", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e2.html#e2", + "title": "e2", + "section": "e2", + "text": "Strains in the material 2 direction of each ply.\nndarray[Any, dtype[float64]]\ne2\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.connect_to_or_start_server", - "href": "api/_autosummary/ansys.dpf.composites.server_helpers.connect_to_or_start_server.html#connect_to_or_start_server", - "title": "connect_to_or_start_server", - "section": "connect_to_or_start_server", - "text": "Connect to or start a DPF server with the DPF Composites plugin loaded.\nIf a port or IP address is set, this method tries to connect to the server specified\nand the ansys_path parameter is ignored. If no parameters are set, a local server\nfrom the latest available Ansys installation is started.\nport (Optional[int], default: None) – Port that the DPF server is listening on.\nip (Optional[str], default: None) – IP address for the DPF server.\nansys_path (Optional[str], default: None) – Root path for the Ansys installation. For example, C:\\\\Program Files\\\\ANSYS Inc\\\\v232.\nThis parameter is ignored if either the port or IP address is set.\nAny\nDPF server.\nconnect_to_or_start_server\nansys_path\nOptional\nint\nNone\nOptional\nstr\nNone\nOptional\nstr\nNone\nC:\\\\Program Files\\\\ANSYS Inc\\\\v232\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e2", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e2.html#ansys.dpf.composites.sampling_point.SamplingPoint.e2", + "title": "e2 > e2 > e2", + "section": "e2 > e2", + "text": "property SamplingPoint.e2: ndarray[Any, dtype[float64]]\n\nStrains in the material 2 direction of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.connect_to_or_start_server", - "href": "api/_autosummary/ansys.dpf.composites.server_helpers.connect_to_or_start_server.html#ansys.dpf.composites.server_helpers.connect_to_or_start_server", - "title": "connect_to_or_start_server > connect_to_or_start_server > connect_to_or_start_server", - "section": "connect_to_or_start_server > connect_to_or_start_server", - "text": "ansys.dpf.composites.server_helpers.connect_to_or_start_server(port=None, ip=None, ansys_path=None)\n\nConnect to or start a DPF server with the DPF Composites plugin loaded.\n\nIf a port or IP address is set, this method tries to connect to the server specified\nand the ansys_path parameter is ignored. If no parameters are set, a local server\nfrom the latest available Ansys installation is started.\n\nParameters\n\nport (Optional[int], default: None) – Port that the DPF server is listening on.\n\nip (Optional[str], default: None) – IP address for the DPF server.\n\nansys_path (Optional[str], default: None) – Root path for the Ansys installation. For example, C:\\\\Program Files\\\\ANSYS Inc\\\\v232.\nThis parameter is ignored if either the port or IP address is set.\n\nReturn type\n\nAny\n\nReturns\n\nDPF server.\n\n!! processed by numpydoc !!" + "objectID": "api/index", + "href": "api/index.html#api-reference", + "title": "API reference", + "section": "API reference", + "text": "This section describes the public classes, methods, and attributes of the PyDPF Composites API.\nFor in-depth documentation on the different failure criteria, refer to the ACP help.\nAPI reference" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1.html#larc_constants_fracture_toughness_mode_1", - "title": "Larc_Constants_fracture_toughness_mode_1", - "section": "Larc_Constants_fracture_toughness_mode_1", - "text": "Larc_Constants_fracture_toughness_mode_1" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.rst", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.rst.html#rst", + "title": "rst", + "section": "rst", + "text": "rst" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1", - "title": "Larc_Constants_fracture_toughness_mode_1 > Larc_Constants_fracture_toughness_mode_1 > Larc_Constants_fracture_toughness_mode_1", - "section": "Larc_Constants_fracture_toughness_mode_1 > Larc_Constants_fracture_toughness_mode_1", - "text": "MaterialProperty.Larc_Constants_fracture_toughness_mode_1: str = 'longitudinal_friction_coefficient_larc_constants'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.rst", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.rst.html#ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.rst", + "title": "rst > rst > rst", + "section": "rst > rst", + "text": "ContinuousFiberCompositesFiles.rst: list[str | PathLike[str]]\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map.html#format_map", - "title": "format_map", - "section": "format_map", - "text": "Return a formatted version of the string, using substitutions from mapping.\nThe substitutions are identified by braces (‘{’ and ‘}’).\nformat_map" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.html#elementinfo", + "title": "ElementInfo", + "section": "ElementInfo", + "text": "Provides lay-up information for an element.\nUse the ElementInfoProvider class to obtain the\nElementInfo class for an element.\nid (int) – Element ID or label.\nn_layers (int) – Number of layers. For non-layered elements, the value is 1.\nn_corner_nodes (int) – Number of corner nodes (without midside nodes).\nn_spots (int) – Number of spots (through-the-thickness integration points) per layer.\nelement_type (int) – APDL element type. For example, 181 for layered shells.\ndpf_material_ids (numpy.ndarray[Any, numpy.dtype[numpy.int64]]) – List of DPF material IDs for all layers.\nis_shell (bool) – Whether the element is a shell element.\nnumber_of_nodes_per_spot_plane (int) – Number of nodes per output plane. The value is equal\nto n_corner_nodes for shell elements and n_corner_nodes\ndivided by two for layered solid elements. The value is equal to -1\nfor non-layered elements.\nElementInfo.id\n\nElementInfo.n_layers\n\nElementInfo.n_corner_nodes\n\nElementInfo.n_spots\n\nElementInfo.is_layered\n\nElementInfo.element_type\n\nElementInfo.dpf_material_ids\n\nElementInfo.is_shell\n\nElementInfo.number_of_nodes_per_spot_plane\n\nElementInfo\nElementInfoProvider\nElementInfo\n1\n181\nn_corner_nodes\nn_corner_nodes\n-1\nElementInfo.id\nElementInfo.n_layers\nElementInfo.n_corner_nodes\nElementInfo.n_spots\nElementInfo.is_layered\nElementInfo.element_type\nElementInfo.dpf_material_ids\nElementInfo.is_shell\nElementInfo.number_of_nodes_per_spot_plane" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map", - "title": "format_map > format_map > format_map", - "section": "format_map > format_map", - "text": "FailureMeasureEnum.format_map(mapping, /)\n\nReturn a formatted version of the string, using substitutions from mapping.\nThe substitutions are identified by braces (‘{’ and ‘}’).\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.html#ansys.dpf.composites.layup_info.ElementInfo", + "title": "ElementInfo > ElementInfo > ElementInfo", + "section": "ElementInfo > ElementInfo", + "text": "class ansys.dpf.composites.layup_info.ElementInfo(id, n_layers, n_corner_nodes, n_spots, is_layered, element_type, dpf_material_ids, is_shell, number_of_nodes_per_spot_plane)\n\nProvides lay-up information for an element.\n\nUse the ElementInfoProvider class to obtain the\nElementInfo class for an element.\n\nParameters\n\nid (int) – Element ID or label.\n\nn_layers (int) – Number of layers. For non-layered elements, the value is 1.\n\nn_corner_nodes (int) – Number of corner nodes (without midside nodes).\n\nn_spots (int) – Number of spots (through-the-thickness integration points) per layer.\n\nelement_type (int) – APDL element type. For example, 181 for layered shells.\n\ndpf_material_ids (numpy.ndarray[Any, numpy.dtype[numpy.int64]]) – List of DPF material IDs for all layers.\n\nis_shell (bool) – Whether the element is a shell element.\n\nnumber_of_nodes_per_spot_plane (int) – Number of nodes per output plane. The value is equal\nto n_corner_nodes for shell elements and n_corner_nodes\ndivided by two for layered solid elements. The value is equal to -1\nfor non-layered elements.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nElementInfo.id\n\n\n\nElementInfo.n_layers\n\n\n\nElementInfo.n_corner_nodes\n\n\n\nElementInfo.n_spots\n\n\n\nElementInfo.is_layered\n\n\n\nElementInfo.element_type\n\n\n\nElementInfo.dpf_material_ids\n\n\n\nElementInfo.is_shell\n\n\n\nElementInfo.number_of_nodes_per_spot_plane\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXc.html#exc", - "title": "eXc", - "section": "eXc", - "text": "Global compressive strain limit in material direction 1.\nfloat\neXc\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles.html#get_layer_shear_angles", + "title": "get_layer_shear_angles", + "section": "get_layer_shear_angles", + "text": "Get shear angle for all layers. Returns None if element is not layered.\nelement_id (int) – Element Id/Label\nOptional[ndarray[Any, dtype[float64]]]\nget_layer_shear_angles\nint\nOptional\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXc.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXc", - "title": "eXc > eXc > eXc", - "section": "eXc > eXc", - "text": "property MaxStrainCriterion.eXc: float\n\nGlobal compressive strain limit in material direction 1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles", + "title": "get_layer_shear_angles > get_layer_shear_angles > get_layer_shear_angles", + "section": "get_layer_shear_angles > get_layer_shear_angles", + "text": "LayupPropertiesProvider.get_layer_shear_angles(element_id)\n\nGet shear angle for all layers. Returns None if element is not layered.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[ndarray[Any, dtype[float64]]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc2.html#lmc2", - "title": "lmc2", - "section": "lmc2", - "text": "lmc2" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ho", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ho.html#ho", + "title": "ho", + "section": "ho", + "text": "ho" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc2.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc2", - "title": "lmc2 > lmc2 > lmc2", - "section": "lmc2 > lmc2", - "text": "FailureModeEnum.lmc2 = 905\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ho", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ho.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.ho", + "title": "ho > ho > ho", + "section": "ho > ho", + "text": "FailureModeEnum.ho = 700\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_json.html#to_json", + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_json.html#to_json", "title": "to_json", "section": "to_json", "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_json.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_json", + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_json.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_json", "title": "to_json > to_json > to_json", "section": "to_json > to_json", - "text": "MaxStressCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + "text": "VonMisesCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_layers", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_layers.html#n_layers", - "title": "n_layers", - "section": "n_layers", - "text": "n_layers" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.active.html#active", + "title": "active", + "section": "active", + "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_layers", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_layers.html#ansys.dpf.composites.layup_info.ElementInfo.n_layers", - "title": "n_layers > n_layers > n_layers", - "section": "n_layers > n_layers", - "text": "ElementInfo.n_layers: int\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.active.html#ansys.dpf.composites.failure_criteria.HashinCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property HashinCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.SHEAR_ANGLE", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.SHEAR_ANGLE.html#shear_angle", - "title": "SHEAR_ANGLE", - "section": "SHEAR_ANGLE", - "text": "SHEAR_ANGLE" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot.html#add_results_to_plot", + "title": "add_results_to_plot", + "section": "add_results_to_plot", + "text": "Add results (strain, stress, or failure values) to an Axes object.\naxes (Any) – Matplotlib Axes object.\ncomponents (Sequence[str]) – List of result components. Valid components for\nstrain are \"e1\", \"e2\", \"e3\", \"e12\", \"e13\",\nand \"e23\" Valid components for stress are \"s1\", \"s2\",\n\"s3\", \"s12\", \"s13\", and \"s23\". Valid components\nfor failure are \"inverse_reserve_factor\", \"reserve_factor\",\nand \"margin_of_safety\".\nspots (Collection[Spot], default: (, )) – Collection of spots (interfaces).\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\ntitle (str, default: '') – Title of the plot. This parameter is ignored if empty.\nxlabel (str, default: '') – Becomes the label of the x-axis. This parameter is ignored if empty.\nNone\nadd_results_to_plot\nAxes\nAny\nAxes\nSequence\nstr\n\"e1\"\n\"e2\"\n\"e3\"\n\"e12\"\n\"e13\"\n\"e23\"\n\"s1\",\n\"s2\"\n\"s3\"\n\"s12\"\n\"s13\"\n\"s23\"\n\"inverse_reserve_factor\"\n\"reserve_factor\"\n\"margin_of_safety\"\nCollection\nSpot\n(, )\nfloat\n1.0\nstr\n''\nstr\n''\nNone" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.SHEAR_ANGLE", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.SHEAR_ANGLE.html#ansys.dpf.composites.layup_info.LayupProperty.SHEAR_ANGLE", - "title": "SHEAR_ANGLE > SHEAR_ANGLE > SHEAR_ANGLE", - "section": "SHEAR_ANGLE > SHEAR_ANGLE", - "text": "LayupProperty.SHEAR_ANGLE = 1\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot.html#ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot", + "title": "add_results_to_plot > add_results_to_plot > add_results_to_plot", + "section": "add_results_to_plot > add_results_to_plot", + "text": "SamplingPoint.add_results_to_plot(axes, components, spots=(Spot.BOTTOM, Spot.TOP), core_scale_factor=1.0, title='', xlabel='')\n\nAdd results (strain, stress, or failure values) to an Axes object.\n\nParameters\n\naxes (Any) – Matplotlib Axes object.\n\ncomponents (Sequence[str]) – List of result components. Valid components for\nstrain are \"e1\", \"e2\", \"e3\", \"e12\", \"e13\",\nand \"e23\" Valid components for stress are \"s1\", \"s2\",\n\"s3\", \"s12\", \"s13\", and \"s23\". Valid components\nfor failure are \"inverse_reserve_factor\", \"reserve_factor\",\nand \"margin_of_safety\".\n\nspots (Collection[Spot], default: (, )) – Collection of spots (interfaces).\n\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\n\ntitle (str, default: '') – Title of the plot. This parameter is ignored if empty.\n\nxlabel (str, default: '') – Becomes the label of the x-axis. This parameter is ignored if empty.\n\nExamples\n\n>>> import matplotlib.pyplot as plt\n>>> fig, ax1 = plt.subplots()\n>>> sampling_point.add_results_to_plot(ax1,\n [\"s13\", \"s23\", \"s3\"],\n [Spot.BOTTOM, Spot.TOP],\n 0.1, \"Interlaminar Stresses\", \"[MPa]\")\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s13.html#s13", - "title": "s13", - "section": "s13", - "text": "s13" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s13.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s13", - "title": "s13 > s13 > s13", - "section": "s13 > s13", - "text": "FailureModeEnum.s13 = 250\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.name.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property CuntzeCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_provider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_provider.html#material_provider", + "title": "material_provider", + "section": "material_provider", + "text": "Get material_provider.\nOperator\nmaterial_provider\nOperator" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.active.html#ansys.dpf.composites.failure_criteria.HashinCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property HashinCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_provider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_provider.html#ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_provider", + "title": "material_provider > material_provider > material_provider", + "section": "material_provider > material_provider", + "text": "property MaterialOperators.material_provider: Operator\n\nGet material_provider.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wt.html#wt", - "title": "wt", - "section": "wt", - "text": "wt" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc4", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc4.html#lfc4", + "title": "lfc4", + "section": "lfc4", + "text": "lfc4" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wt.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.wt", - "title": "wt > wt > wt", - "section": "wt > wt", - "text": "FailureModeEnum.wt = 322\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc4", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc4.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc4", + "title": "lfc4 > lfc4 > lfc4", + "section": "lfc4 > lfc4", + "text": "FailureModeEnum.lfc4 = 902\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXt.html#strain_limits_ext", - "title": "Strain_Limits_eXt", - "section": "Strain_Limits_eXt", - "text": "Strain_Limits_eXt" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e23", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e23.html#e23", + "title": "e23", + "section": "e23", + "text": "Out-of-plane shear strains e23 of each ply.\nndarray[Any, dtype[float64]]\ne23\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXt", - "title": "Strain_Limits_eXt > Strain_Limits_eXt > Strain_Limits_eXt", - "section": "Strain_Limits_eXt > Strain_Limits_eXt", - "text": "MaterialProperty.Strain_Limits_eXt: str = 'strain_tensile_x_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e23", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e23.html#ansys.dpf.composites.sampling_point.SamplingPoint.e23", + "title": "e23 > e23 > e23", + "section": "e23 > e23", + "text": "property SamplingPoint.e23: ndarray[Any, dtype[float64]]\n\nOut-of-plane shear strains e23 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.swapcase", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.swapcase.html#swapcase", - "title": "swapcase", - "section": "swapcase", - "text": "Convert uppercase characters to lowercase and lowercase characters to uppercase.\nswapcase" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot.TOP", + "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.TOP.html#top", + "title": "TOP", + "section": "TOP", + "text": "TOP" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.swapcase", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.swapcase.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.swapcase", - "title": "swapcase > swapcase > swapcase", - "section": "swapcase > swapcase", - "text": "FailureMeasureEnum.swapcase(/)\n\nConvert uppercase characters to lowercase and lowercase characters to uppercase.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot.TOP", + "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.TOP.html#ansys.dpf.composites.constants.Spot.TOP", + "title": "TOP > TOP > TOP", + "section": "TOP > TOP", + "text": "Spot.TOP = 3\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.remove", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.remove.html#remove", + "title": "remove", + "section": "remove", + "text": "Remove a failure criterion.\nkey (str) – Name of the failure criterion.\nFailureCriterionBase\nRemoved failure criterion or None.\nremove\nstr\nFailureCriterionBase\nNone" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.active.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property TsaiHillCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.remove", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.remove.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.remove", + "title": "remove > remove > remove", + "section": "remove > remove", + "text": "CombinedFailureCriterion.remove(key)\n\nRemove a failure criterion.\n\nParameters\n\nkey (str) – Name of the failure criterion.\n\nReturn type\n\nFailureCriterionBase\n\nReturns\n\nRemoved failure criterion or None.\n\nExamples\n\n>>> combined_failure.remove(\"Max Stress\")\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.html#combinedfailurecriterion", - "title": "CombinedFailureCriterion", - "section": "CombinedFailureCriterion", - "text": "Defines the combined failure criterion.\nThis class can be used in combination with the failure evaluator operator in\nDPF Composites.\nCombinedFailureCriterion.insert(fc)\nAdd a failure criterion to a list of selected criteria.\nCombinedFailureCriterion.remove(key)\nRemove a failure criterion.\nCombinedFailureCriterion.to_dict()\nReturn the combined failure criterion as a dictionary.\nCombinedFailureCriterion.to_json()\nReturn the combined failure criterion as a JSON dictionary.\nCombinedFailureCriterion.JSON_DICT_KEY\n\nCombinedFailureCriterion.failure_criteria\nList of failure criteria.\nCombinedFailureCriterion.name\nName of the combined failure criterion.\nCombinedFailureCriterion\nCombinedFailureCriterion.insert\nCombinedFailureCriterion.remove\nCombinedFailureCriterion.to_dict\nCombinedFailureCriterion.to_json\nCombinedFailureCriterion.JSON_DICT_KEY\nCombinedFailureCriterion.failure_criteria\nCombinedFailureCriterion.name" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cfc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cfc.html#cfc", + "title": "cfc", + "section": "cfc", + "text": "Activates the failure evaluation regarding compression in fiber direction.\nbool\ncfc\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion", - "title": "CombinedFailureCriterion > CombinedFailureCriterion > CombinedFailureCriterion", - "section": "CombinedFailureCriterion > CombinedFailureCriterion", - "text": "class ansys.dpf.composites.failure_criteria.CombinedFailureCriterion(name='CombinedFailureCriterion', failure_criteria=())\n\nDefines the combined failure criterion.\n\nThis class can be used in combination with the failure evaluator operator in\nDPF Composites.\n\nExamples\n\n>>> combined_failure = CombinedFailureCriterion(\"max_stress 3D\")\n>>> max_stress = MaxStressCriterion(s1=True, s2=True, s3=True, s12=True, s13=True, s23=True)\n>>> combined_failure.insert(max_stress)\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nCombinedFailureCriterion.insert(fc)\n\nAdd a failure criterion to a list of selected criteria.\n\nCombinedFailureCriterion.remove(key)\n\nRemove a failure criterion.\n\nCombinedFailureCriterion.to_dict()\n\nReturn the combined failure criterion as a dictionary.\n\nCombinedFailureCriterion.to_json()\n\nReturn the combined failure criterion as a JSON dictionary.\n\n\n\nAttributes\n\n\n\n\n\n\n\nCombinedFailureCriterion.JSON_DICT_KEY\n\n\n\nCombinedFailureCriterion.failure_criteria\n\nList of failure criteria.\n\nCombinedFailureCriterion.name\n\nName of the combined failure criterion.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cfc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cfc.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cfc", + "title": "cfc > cfc > cfc", + "section": "cfc > cfc", + "text": "property CuntzeCriterion.cfc: bool\n\nActivates the failure evaluation regarding compression in fiber direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s3", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s3.html#s3", - "title": "s3", - "section": "s3", - "text": "Stresses in the material 3 direction of each ply.\nndarray[Any, dtype[float64]]\ns3\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_container_helper_op", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_container_helper_op.html#material_container_helper_op", + "title": "material_container_helper_op", + "section": "material_container_helper_op", + "text": "Get material container helper operator.\nThis operator can be used to access metadata of the materials.\nReturn value is None if the server version does not support this operator.\nThe minimum version is 2024 R1-pre0 (7.1).\nOperator\nmaterial_container_helper_op\nOperator" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s3", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s3.html#ansys.dpf.composites.sampling_point.SamplingPoint.s3", - "title": "s3 > s3 > s3", - "section": "s3 > s3", - "text": "property SamplingPoint.s3: ndarray[Any, dtype[float64]]\n\nStresses in the material 3 direction of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_container_helper_op", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_container_helper_op.html#ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_container_helper_op", + "title": "material_container_helper_op > material_container_helper_op > material_container_helper_op", + "section": "material_container_helper_op > material_container_helper_op", + "text": "property MaterialOperators.material_container_helper_op: Operator\n\nGet material container helper operator.\n\nThis operator can be used to access metadata of the materials.\nReturn value is None if the server version does not support this operator.\nThe minimum version is 2024 R1-pre0 (7.1).\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1.html#polar_properties_e1", - "title": "polar_properties_E1", - "section": "polar_properties_E1", - "text": "Polar property E1 of the laminate.\nndarray[Any, dtype[float64]]\npolar_properties_E1\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmB", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmB.html#pmb", + "title": "pmB", + "section": "pmB", + "text": "pmB" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1.html#ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1", - "title": "polar_properties_E1 > polar_properties_E1 > polar_properties_E1", - "section": "polar_properties_E1 > polar_properties_E1", - "text": "property SamplingPoint.polar_properties_E1: ndarray[Any, dtype[float64]]\n\nPolar property E1 of the laminate.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmB", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmB.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.pmB", + "title": "pmB > pmB > pmB", + "section": "pmB > pmB", + "text": "FailureModeEnum.pmB = 803\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZt", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZt.html#ezt", + "title": "eZt", + "section": "eZt", + "text": "Global strain limit in material direction 3.\nfloat\neZt\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "LaRCCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZt", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZt.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZt", + "title": "eZt > eZt > eZt", + "section": "eZt > eZt", + "text": "property MaxStrainCriterion.eZt: float\n\nGlobal strain limit in material direction 3.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rsplit", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rsplit.html#rsplit", - "title": "rsplit", - "section": "rsplit", - "text": "Return a list of the substrings in the string, using sep as the separator string.\nThe separator used to split the string.\nWhen set to None (the default value), will split on any whitespace\ncharacter (including n r t f and spaces) and will discard\nempty strings from the result.\nMaximum number of splits.\n-1 (the default value) means no limit.\nSplitting starts at the end of the string and works to the front.\nrsplit" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lstrip", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lstrip.html#lstrip", + "title": "lstrip", + "section": "lstrip", + "text": "Return a copy of the string with leading whitespace removed.\nIf chars is given and not None, remove characters in chars instead.\nlstrip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rsplit", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rsplit.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rsplit", - "title": "rsplit > rsplit > rsplit", - "section": "rsplit > rsplit", - "text": "FailureMeasureEnum.rsplit(/, sep=None, maxsplit=-1)\n\nReturn a list of the substrings in the string, using sep as the separator string.\n\nsep\n\nThe separator used to split the string.\n\nWhen set to None (the default value), will split on any whitespace\ncharacter (including n r t f and spaces) and will discard\nempty strings from the result.\n\nmaxsplit\n\nMaximum number of splits.\n-1 (the default value) means no limit.\n\nSplitting starts at the end of the string and works to the front.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lstrip", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lstrip.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.lstrip", + "title": "lstrip > lstrip > lstrip", + "section": "lstrip > lstrip", + "text": "FailureMeasureEnum.lstrip(chars=None, /)\n\nReturn a copy of the string with leading whitespace removed.\n\nIf chars is given and not None, remove characters in chars instead.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.html#sym3x3tensorcomponent", - "title": "Sym3x3TensorComponent", - "section": "Sym3x3TensorComponent", - "text": "Provides tensor indices for symmetrical 3x3 tensors.\nSym3x3TensorComponent.TENSOR11\n\nSym3x3TensorComponent.TENSOR22\n\nSym3x3TensorComponent.TENSOR33\n\nSym3x3TensorComponent.TENSOR21\n\nSym3x3TensorComponent.TENSOR31\n\nSym3x3TensorComponent.TENSOR32\n\nSym3x3TensorComponent\nSym3x3TensorComponent.TENSOR11\nSym3x3TensorComponent.TENSOR22\nSym3x3TensorComponent.TENSOR33\nSym3x3TensorComponent.TENSOR21\nSym3x3TensorComponent.TENSOR31\nSym3x3TensorComponent.TENSOR32" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.time", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.time.html#time", + "title": "time", + "section": "time", + "text": "Time or solution step.\nDPF Composites automatically selects the last time step if time is not set.\nYou can use the CompositeModel.get_result_times_or_frequencies() method\nto list the available times or frequencies in the result file.\nOptional[float]\ntime\nCompositeModel.get_result_times_or_frequencies()\nOptional\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.html#ansys.dpf.composites.constants.Sym3x3TensorComponent", - "title": "Sym3x3TensorComponent > Sym3x3TensorComponent > Sym3x3TensorComponent", - "section": "Sym3x3TensorComponent > Sym3x3TensorComponent", - "text": "class ansys.dpf.composites.constants.Sym3x3TensorComponent(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides tensor indices for symmetrical 3x3 tensors.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nSym3x3TensorComponent.TENSOR11\n\n\n\nSym3x3TensorComponent.TENSOR22\n\n\n\nSym3x3TensorComponent.TENSOR33\n\n\n\nSym3x3TensorComponent.TENSOR21\n\n\n\nSym3x3TensorComponent.TENSOR31\n\n\n\nSym3x3TensorComponent.TENSOR32\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.time", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.time.html#ansys.dpf.composites.result_definition.ResultDefinition.time", + "title": "time > time > time", + "section": "time > time", + "text": "property ResultDefinition.time: float | None\n\nTime or solution step.\n\nDPF Composites automatically selects the last time step if time is not set.\n\nYou can use the CompositeModel.get_result_times_or_frequencies() method\nto list the available times or frequencies in the result file.\n\nReturn type\n\nOptional[float]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hf.html#wf_hf", - "title": "wf_hf", - "section": "wf_hf", - "text": "Whether to activate the failure evaluation regarding fiber failure.\nfloat\nwf_hf\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos.html#puck_constants_p_21_pos", + "title": "Puck_Constants_p_21_pos", + "section": "Puck_Constants_p_21_pos", + "text": "Puck_Constants_p_21_pos" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hf.html#ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hf", - "title": "wf_hf > wf_hf > wf_hf", - "section": "wf_hf > wf_hf", - "text": "property HashinCriterion.wf_hf: float\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos", + "title": "Puck_Constants_p_21_pos > Puck_Constants_p_21_pos > Puck_Constants_p_21_pos", + "section": "Puck_Constants_p_21_pos > Puck_Constants_p_21_pos", + "text": "MaterialProperty.Puck_Constants_p_21_pos: str = 'tensile_inclination_xz_puck_constants'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cfc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cfc.html#cfc", - "title": "cfc", - "section": "cfc", - "text": "cfc" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg.html#puck_constants_p_22_neg", + "title": "Puck_Constants_p_22_neg", + "section": "Puck_Constants_p_22_neg", + "text": "Puck_Constants_p_22_neg" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cfc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cfc.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cfc", - "title": "cfc > cfc > cfc", - "section": "cfc > cfc", - "text": "FailureModeEnum.cfc = 1002\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg", + "title": "Puck_Constants_p_22_neg > Puck_Constants_p_22_neg > Puck_Constants_p_22_neg", + "section": "Puck_Constants_p_22_neg > Puck_Constants_p_22_neg", + "text": "MaterialProperty.Puck_Constants_p_22_neg: str = 'compressive_inclination_yz_puck_constants'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft.html#wf_lft", - "title": "wf_lft", - "section": "wf_lft", - "text": "Weighting factor of fiber failure due to tension (lft).\nfloat\nwf_lft\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1c.html#e1c", + "title": "e1c", + "section": "e1c", + "text": "e1c" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft", - "title": "wf_lft > wf_lft > wf_lft", - "section": "wf_lft > wf_lft", - "text": "property LaRCCriterion.wf_lft: float\n\nWeighting factor of fiber failure due to tension (lft).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e1c", + "title": "e1c > e1c > e1c", + "section": "e1c > e1c", + "text": "FailureModeEnum.e1c = 112\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.engineering_data", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.engineering_data.html#engineering_data", + "title": "engineering_data", + "section": "engineering_data", + "text": "engineering_data" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids.html#get_all_layered_element_ids", - "title": "get_all_layered_element_ids", - "section": "get_all_layered_element_ids", - "text": "Get all element IDs with lay-up data.\nSequence[int]\nget_all_layered_element_ids\nSequence\nint" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.engineering_data", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.engineering_data.html#ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.engineering_data", + "title": "engineering_data > engineering_data > engineering_data", + "section": "engineering_data > engineering_data", + "text": "ShortFiberCompositesFiles.engineering_data: str | PathLike[str]\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids.html#ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids", - "title": "get_all_layered_element_ids > get_all_layered_element_ids > get_all_layered_element_ids", - "section": "get_all_layered_element_ids > get_all_layered_element_ids", - "text": "CompositeModel.get_all_layered_element_ids()\n\nGet all element IDs with lay-up data.\n\nReturn type\n\nSequence[int]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.mode", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.mode.html#mode", + "title": "mode", + "section": "mode", + "text": "mode" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmt1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmt1.html#lmt1", - "title": "lmt1", - "section": "lmt1", - "text": "lmt1" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.mode", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.mode.html#ansys.dpf.composites.sampling_point.FailureResult.mode", + "title": "mode > mode > mode", + "section": "mode > mode", + "text": "FailureResult.mode: str\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmt1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmt1.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lmt1", - "title": "lmt1 > lmt1 > lmt1", - "section": "lmt1 > lmt1", - "text": "FailureModeEnum.lmt1 = 904\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.html#continuousfibercompositesfiles", + "title": "ContinuousFiberCompositesFiles", + "section": "ContinuousFiberCompositesFiles", + "text": "Provides the container for continuous fiber composite file paths.\nContinuousFiberCompositesFiles.files_are_local\n\nContinuousFiberCompositesFiles.rst\n\nContinuousFiberCompositesFiles.composite\n\nContinuousFiberCompositesFiles.engineering_data\n\nContinuousFiberCompositesFiles\nContinuousFiberCompositesFiles.files_are_local\nContinuousFiberCompositesFiles.rst\nContinuousFiberCompositesFiles.composite\nContinuousFiberCompositesFiles.engineering_data" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12.html#e12", - "title": "e12", - "section": "e12", - "text": "Whether to activate the failure evaluation regarding the in-plane shear strain e12.\nbool\ne12\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.html#ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles", + "title": "ContinuousFiberCompositesFiles > ContinuousFiberCompositesFiles > ContinuousFiberCompositesFiles", + "section": "ContinuousFiberCompositesFiles > ContinuousFiberCompositesFiles", + "text": "class ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles(rst, composite, engineering_data, files_are_local=True)\n\nProvides the container for continuous fiber composite file paths.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nContinuousFiberCompositesFiles.files_are_local\n\n\n\nContinuousFiberCompositesFiles.rst\n\n\n\nContinuousFiberCompositesFiles.composite\n\n\n\nContinuousFiberCompositesFiles.engineering_data\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12", - "title": "e12 > e12 > e12", - "section": "e12 > e12", - "text": "property MaxStrainCriterion.e12: bool\n\nWhether to activate the failure evaluation regarding the in-plane shear strain e12.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXc.html#strain_limits_exc", + "title": "Strain_Limits_eXc", + "section": "Strain_Limits_eXc", + "text": "Strain_Limits_eXc" }, { - "objectID": "contribute", - "href": "contribute.html#contribute", - "title": "Contribute", - "section": "Contribute", - "text": "Contribute" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXc", + "title": "Strain_Limits_eXc > Strain_Limits_eXc > Strain_Limits_eXc", + "section": "Strain_Limits_eXc > Strain_Limits_eXc", + "text": "MaterialProperty.Strain_Limits_eXc: str = 'strain_compressive_x_direction'\n\n" }, { - "objectID": "contribute", - "href": "contribute.html#install-in-development-mode", - "title": "Contribute > Install in development mode", - "section": "Install in development mode", - "text": "Installing PyDPF Composites in development mode allows\nyou to modify the source and enhance it.\nBefore attempting to contribute to PyDPF Composites, ensure that you are thoroughly\nfamiliar with the PyAnsys Developer’s Guide.\nClone the repository:\nInstall dependencies:\nPyDPF Composites uses Poetry\nto manage the development environment.\nCreate a virtual environment and install the package with the\ndevelopment dependencies:\nActivate the virtual environment:\nInstall in development mode" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "contribute", - "href": "contribute.html#test", - "title": "Contribute > Test", - "section": "Test", - "text": "There are different ways to run the PyDPF Composites tests, depending on how the DPF\nserver is started.\nRun tests with a Docker container:\nFollow the steps in Getting the DPF server Docker image to get\nand run the DPF docker image. Run the tests with the following command\nRun tests with a DPF server started from the Ansys installer. The Ansys version must\nbe 2023 R2 or later.\nRun tests with a Docker container from Github (Ansys Internal only):\nTest" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "MaxStressCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "contribute", - "href": "contribute.html#build-documentation", - "title": "Contribute > Build documentation", - "section": "Build documentation", - "text": "Follow the description in Getting the DPF server Docker image image to get\nand run the dpf docker image.\nOn Windows, build the documentation with:\nOn Linux, build the documentation with:\nAnsys internal only: Build the docs with the latest container from Github:\nBuild documentation" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pf.html#pf", + "title": "pf", + "section": "pf", + "text": "Whether to activate the failure evaluation regarding fiber failure.\nbool\npf\nbool" }, { - "objectID": "contribute", - "href": "contribute.html#run-style-checks", - "title": "Contribute > Run style checks", - "section": "Run style checks", - "text": "The style checks use pre-commit and can be run through tox:\nThe style checks can also be configured to run automatically before each git commit:\nRun style checks\ngit commit" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pf.html#ansys.dpf.composites.failure_criteria.PuckCriterion.pf", + "title": "pf > pf > pf", + "section": "pf > pf", + "text": "property PuckCriterion.pf: bool\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "contribute", - "href": "contribute.html#view-documentation", - "title": "Contribute > View documentation", - "section": "View documentation", - "text": "Documentation for the latest stable release of PyDPF Composites is hosted at\nPyDPF Composites Documentation.\nIn the upper right corner of the documentation’s title bar, there is an option\nfor switching from viewing the documentation for the latest stable release\nto viewing the documentation for the development version or previously\nreleased versions.\nView documentation" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map.html#format_map", + "title": "format_map", + "section": "format_map", + "text": "Return a formatted version of the string, using substitutions from mapping.\nThe substitutions are identified by braces (‘{’ and ‘}’).\nformat_map" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.wf.html#wf", - "title": "wf", - "section": "wf", - "text": "Weighting factor of this failure criterion.\nfloat\nwf\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map", + "title": "format_map > format_map > format_map", + "section": "format_map > format_map", + "text": "FailureMeasureEnum.format_map(mapping, /)\n\nReturn a formatted version of the string, using substitutions from mapping.\nThe substitutions are identified by braces (‘{’ and ‘}’).\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.wf.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion.wf", - "title": "wf > wf > wf", - "section": "wf > wf", - "text": "property HoffmanCriterion.wf: float\n\nWeighting factor of this failure criterion.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.w", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.w.html#w", + "title": "w", + "section": "w", + "text": "w" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.html#maxstresscriterion", - "title": "MaxStressCriterion", - "section": "MaxStressCriterion", - "text": "Defines the maximum stress failure criterion for orthotropic reinforced materials.\ns1 (bool, default: True) – Whether to activate the failure evaluation regarding the stress in the material 1 direction.\ns2 (bool, default: True) – Whether to activate the failure evaluation regarding the stress in the material 2 direction.\ns3 (bool, default: False) – Whether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\ns12 (bool, default: True) – Whether to activate the failure evaluation regarding the in-plane shear stress s12.\ns13 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear stress s13.\ns23 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear stress s23.\nwf_s1 (float, default: 1.0) – Weighting factor of the failure mode s1.\nwf_s2 (float, default: 1.0) – Weighting factor of the failure mode s2.\nwf_s3 (float, default: 1.0) – Weighting factor of the failure mode s3.\nwf_s12 (float, default: 1.0) – Weighting factor of the failure mode s12.\nwf_s13 (float, default: 1.0) – Weighting factor of the failure mode s13.\nwf_s23 (float, default: 1.0) – Weighting factor of the failure mode s23.\nMaxStressCriterion.to_dict()\n\nMaxStressCriterion.to_json()\n\nMaxStressCriterion.active\nThe failure criterion is suppressed if active is False.\nMaxStressCriterion.name\nName of the failure criterion.\nMaxStressCriterion.s1\nWhether to activate the failure evaluation regarding the stress in the material 1 direction.\nMaxStressCriterion.s12\nWhether to activate the failure evaluation regarding the in-plane shear stress s12.\nMaxStressCriterion.s13\nWhether to activate the failure evaluation regarding the interlaminar shear stress s13.\nMaxStressCriterion.s2\nWhether to activate the failure evaluation regarding the stress in the material 2 direction.\nMaxStressCriterion.s23\nWhether to activate the failure evaluation regarding the interlaminar shear stress s23.\nMaxStressCriterion.s3\nWhether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\nMaxStressCriterion.wf_s1\nWeighting factor of the failure mode s1.\nMaxStressCriterion.wf_s12\nWeighting factor of the failure mode s12.\nMaxStressCriterion.wf_s13\nWeighting factor of the failure mode s13.\nMaxStressCriterion.wf_s2\nWeighting factor of the failure mode s2.\nMaxStressCriterion.wf_s23\nWeighting factor of the failure mode s23.\nMaxStressCriterion.wf_s3\nWeighting factor of the failure mode s3.\nMaxStressCriterion\nbool\nTrue\nbool\nTrue\nbool\nFalse\nbool\nTrue\nbool\nFalse\nbool\nFalse\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nMaxStressCriterion.to_dict\nMaxStressCriterion.to_json\nMaxStressCriterion.active\nMaxStressCriterion.name\nMaxStressCriterion.s1\nMaxStressCriterion.s12\nMaxStressCriterion.s13\nMaxStressCriterion.s2\nMaxStressCriterion.s23\nMaxStressCriterion.s3\nMaxStressCriterion.wf_s1\nMaxStressCriterion.wf_s12\nMaxStressCriterion.wf_s13\nMaxStressCriterion.wf_s2\nMaxStressCriterion.wf_s23\nMaxStressCriterion.wf_s3" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.w", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.w.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.w", + "title": "w > w > w", + "section": "w > w", + "text": "FailureModeEnum.w = 320\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion", - "title": "MaxStressCriterion > MaxStressCriterion > MaxStressCriterion", - "section": "MaxStressCriterion > MaxStressCriterion", - "text": "class ansys.dpf.composites.failure_criteria.MaxStressCriterion(*, s1=True, s2=True, s3=False, s12=True, s13=False, s23=False, wf_s1=1.0, wf_s2=1.0, wf_s3=1.0, wf_s12=1.0, wf_s13=1.0, wf_s23=1.0)\n\nDefines the maximum stress failure criterion for orthotropic reinforced materials.\n\nParameters\n\ns1 (bool, default: True) – Whether to activate the failure evaluation regarding the stress in the material 1 direction.\n\ns2 (bool, default: True) – Whether to activate the failure evaluation regarding the stress in the material 2 direction.\n\ns3 (bool, default: False) – Whether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\n\ns12 (bool, default: True) – Whether to activate the failure evaluation regarding the in-plane shear stress s12.\n\ns13 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear stress s13.\n\ns23 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear stress s23.\n\nwf_s1 (float, default: 1.0) – Weighting factor of the failure mode s1.\n\nwf_s2 (float, default: 1.0) – Weighting factor of the failure mode s2.\n\nwf_s3 (float, default: 1.0) – Weighting factor of the failure mode s3.\n\nwf_s12 (float, default: 1.0) – Weighting factor of the failure mode s12.\n\nwf_s13 (float, default: 1.0) – Weighting factor of the failure mode s13.\n\nwf_s23 (float, default: 1.0) – Weighting factor of the failure mode s23.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nMaxStressCriterion.to_dict()\n\n\n\nMaxStressCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nMaxStressCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nMaxStressCriterion.name\n\nName of the failure criterion.\n\nMaxStressCriterion.s1\n\nWhether to activate the failure evaluation regarding the stress in the material 1 direction.\n\nMaxStressCriterion.s12\n\nWhether to activate the failure evaluation regarding the in-plane shear stress s12.\n\nMaxStressCriterion.s13\n\nWhether to activate the failure evaluation regarding the interlaminar shear stress s13.\n\nMaxStressCriterion.s2\n\nWhether to activate the failure evaluation regarding the stress in the material 2 direction.\n\nMaxStressCriterion.s23\n\nWhether to activate the failure evaluation regarding the interlaminar shear stress s23.\n\nMaxStressCriterion.s3\n\nWhether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\n\nMaxStressCriterion.wf_s1\n\nWeighting factor of the failure mode s1.\n\nMaxStressCriterion.wf_s12\n\nWeighting factor of the failure mode s12.\n\nMaxStressCriterion.wf_s13\n\nWeighting factor of the failure mode s13.\n\nMaxStressCriterion.wf_s2\n\nWeighting factor of the failure mode s2.\n\nMaxStressCriterion.wf_s23\n\nWeighting factor of the failure mode s23.\n\nMaxStressCriterion.wf_s3\n\nWeighting factor of the failure mode s3.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.html#layupmodelcontexttype", + "title": "LayupModelContextType", + "section": "LayupModelContextType", + "text": "Type of the lay-up information.\nLayupModelContextType.NOT_AVAILABLE\n\nLayupModelContextType.ACP\n\nLayupModelContextType.RST\n\nLayupModelContextType.MIXED\n\nLayupModelContextType\nLayupModelContextType.NOT_AVAILABLE\nLayupModelContextType.ACP\nLayupModelContextType.RST\nLayupModelContextType.MIXED" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.split", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.split.html#split", - "title": "split", - "section": "split", - "text": "Return a list of the substrings in the string, using sep as the separator string.\nThe separator used to split the string.\nWhen set to None (the default value), will split on any whitespace\ncharacter (including n r t f and spaces) and will discard\nempty strings from the result.\nMaximum number of splits.\n-1 (the default value) means no limit.\nSplitting starts at the front of the string and works to the end.\nNote, str.split() is mainly useful for data that has been intentionally\ndelimited. With natural text that includes punctuation, consider using\nthe regular expression module.\nsplit" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.html#ansys.dpf.composites.layup_info.LayupModelContextType", + "title": "LayupModelContextType > LayupModelContextType > LayupModelContextType", + "section": "LayupModelContextType > LayupModelContextType", + "text": "class ansys.dpf.composites.layup_info.LayupModelContextType(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nType of the lay-up information.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nLayupModelContextType.NOT_AVAILABLE\n\n\n\nLayupModelContextType.ACP\n\n\n\nLayupModelContextType.RST\n\n\n\nLayupModelContextType.MIXED\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.split", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.split.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.split", - "title": "split > split > split", - "section": "split > split", - "text": "FailureMeasureEnum.split(/, sep=None, maxsplit=-1)\n\nReturn a list of the substrings in the string, using sep as the separator string.\n\nsep\n\nThe separator used to split the string.\n\nWhen set to None (the default value), will split on any whitespace\ncharacter (including n r t f and spaces) and will discard\nempty strings from the result.\n\nmaxsplit\n\nMaximum number of splits.\n-1 (the default value) means no limit.\n\nSplitting starts at the front of the string and works to the end.\n\nNote, str.split() is mainly useful for data that has been intentionally\ndelimited. With natural text that includes punctuation, consider using\nthe regular expression module.\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/011_rst_workflow", + "href": "examples/gallery_examples/011_rst_workflow.html#failure-analysis-of-an-mapdl-rst-model", + "title": "Failure analysis of an MAPDL (RST) model", + "section": "Failure analysis of an MAPDL (RST) model", + "text": "This example shows the postprocessing of an MAPDL (RST) model with layered elements that was not\npreprocessed by ACP. The difference between the RST-only and ACP-based workflow is that\nthe section data are loaded from the RST file instead of the ACP layup file.\nThis happens automatically if the parameter composite of the\nContinuousFiberCompositesFiles class is not set.\nThe engineering data file (XML or ENGD) with the material properties is needed anyway.\nOtherwise, the material properties cannot be mapped.\nAt the end of this example, two workflows are shown on how to create\nthe engineering data file based on a MAPDL model and how to set the\nmaterial UUIDs in MAPDL.\nThe material UUIDs in the engineering data file must be identical\nto the UUIDs in Mechanical APDL (RST file).\nThe postprocessing of MAPDL models is supported in 2024 R2 (DPF Server version 8.0)\nand later. A few advanced features are not supported with the RST only workflow.\nFor more information, see limitations.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nFailure analysis of an MAPDL (RST) model\nContinuousFiberCompositesFiles\ncomposite_files_from_workbench_harmonic_analysis()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.number_of_nodes_per_spot_plane", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.number_of_nodes_per_spot_plane.html#number_of_nodes_per_spot_plane", - "title": "number_of_nodes_per_spot_plane", - "section": "number_of_nodes_per_spot_plane", - "text": "number_of_nodes_per_spot_plane" + "objectID": "examples/gallery_examples/011_rst_workflow", + "href": "examples/gallery_examples/011_rst_workflow.html#set-up-analysis", + "title": "Failure analysis of an MAPDL (RST) model > Set up analysis", + "section": "Set up analysis", + "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nGet input files (RST and material.engd but skip the ACP layup file).\nSet up analysis" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.number_of_nodes_per_spot_plane", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.number_of_nodes_per_spot_plane.html#ansys.dpf.composites.layup_info.ElementInfo.number_of_nodes_per_spot_plane", - "title": "number_of_nodes_per_spot_plane > number_of_nodes_per_spot_plane > number_of_nodes_per_spot_plane", - "section": "number_of_nodes_per_spot_plane > number_of_nodes_per_spot_plane", - "text": "ElementInfo.number_of_nodes_per_spot_plane: int\n\n" + "objectID": "examples/gallery_examples/011_rst_workflow", + "href": "examples/gallery_examples/011_rst_workflow.html#configure-combined-failure-criterion", + "title": "Failure analysis of an MAPDL (RST) model > Configure combined failure criterion", + "section": "Configure combined failure criterion", + "text": "Configure the combined failure criterion.\nConfigure combined failure criterion" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.scopes", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.scopes.html#scopes", - "title": "scopes", - "section": "scopes", - "text": "Scopes of the result definition.\nSequence[ResultDefinitionScope]\nscopes\nSequence\nResultDefinitionScope" + "objectID": "examples/gallery_examples/011_rst_workflow", + "href": "examples/gallery_examples/011_rst_workflow.html#set-up-model-and-evaluate-failures", + "title": "Failure analysis of an MAPDL (RST) model > Set up model and evaluate failures", + "section": "Set up model and evaluate failures", + "text": "Set up the composite model.\nEvaluate failures for the entire model\nSet up model and evaluate failures" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.scopes", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.scopes.html#ansys.dpf.composites.result_definition.ResultDefinition.scopes", - "title": "scopes > scopes > scopes", - "section": "scopes > scopes", - "text": "property ResultDefinition.scopes: Sequence[ResultDefinitionScope]\n\nScopes of the result definition.\n\nReturn type\n\nSequence[ResultDefinitionScope]\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/011_rst_workflow", + "href": "examples/gallery_examples/011_rst_workflow.html#create-and-plot-a-sampling-point", + "title": "Failure analysis of an MAPDL (RST) model > Create and plot a sampling point", + "section": "Create and plot a sampling point", + "text": "Create and plot a sampling point" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aY", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aY.html#thermal_expansion_coefficients_ay", - "title": "Thermal_Expansion_Coefficients_aY", - "section": "Thermal_Expansion_Coefficients_aY", - "text": "Thermal_Expansion_Coefficients_aY" + "objectID": "examples/gallery_examples/011_rst_workflow", + "href": "examples/gallery_examples/011_rst_workflow.html#create-engineering-data-file-and-set-material-uuids-in-mapdl", + "title": "Failure analysis of an MAPDL (RST) model > Create Engineering Data file and set material UUIDs in MAPDL", + "section": "Create Engineering Data file and set material UUIDs in MAPDL", + "text": "Here are two workflows for setting up the engineering data file\nand the material UUIDs in MAPDL. The material UUIDs must be set\nin MAPDL before the model is solved.\nCreate an External Model system in WB and load the solver input file\nLink the External Model with an Engineering Data system and update it\nSave the project and copy the generated engineering data file (EngineeringData.xml)\nFor each material, look for the DataTransferID, go to MAPDL and set the material\nUUIDs with the MP,UVID,, command\nStart ACP, go to File - Import Model and load the solver input file (CDB)\nGo to the Materials folder and export the engineering data file (Ansys Workbench XML)\nFor each material, look for the DataTransferID, go to MAPDL and set the material\nUUID with the MP,UVID,, command.\nTotal running time of the script: (0 minutes 5.963 seconds)\nDownload Jupyter notebook: 011_rst_workflow.ipynb\nDownload Python source code: 011_rst_workflow.py\nDownload zipped: 011_rst_workflow.zip\nGallery generated by Sphinx-Gallery\nCreate Engineering Data file and set material UUIDs in MAPDL\nDataTransferID\nMP,UVID,,\nDataTransferID\nMP,UVID,,\nDownload Jupyter notebook: 011_rst_workflow.ipynb\nDownload Python source code: 011_rst_workflow.py\nDownload zipped: 011_rst_workflow.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aY", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aY.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aY", - "title": "Thermal_Expansion_Coefficients_aY > Thermal_Expansion_Coefficients_aY > Thermal_Expansion_Coefficients_aY", - "section": "Thermal_Expansion_Coefficients_aY > Thermal_Expansion_Coefficients_aY", - "text": "MaterialProperty.Thermal_Expansion_Coefficients_aY: str = 'coefficient_thermal_expansion_y'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.cfps", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.cfps.html#cfps", + "title": "cfps", + "section": "cfps", + "text": "Whether to consider inter-fiber strength reduction due to fiber parallel stresses.\nbool\ncfps\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s23.html#s23", - "title": "s23", - "section": "s23", - "text": "Whether to activate the failure evaluation regarding the interlaminar shear stress s23.\nbool\ns23\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.cfps", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.cfps.html#ansys.dpf.composites.failure_criteria.PuckCriterion.cfps", + "title": "cfps > cfps > cfps", + "section": "cfps > cfps", + "text": "property PuckCriterion.cfps: bool\n\nWhether to consider inter-fiber strength reduction due to fiber parallel stresses.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.analysis_plies", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.analysis_plies.html#analysis_plies", + "title": "analysis_plies", + "section": "analysis_plies", + "text": "List of analysis plies from the bottom to the top.\nThis attribute returns a list of ply data, such as angle, thickness and material name,\nas a dictionary.\nSequence[Any]\nanalysis_plies\nSequence\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s23.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s23", - "title": "s23 > s23 > s23", - "section": "s23 > s23", - "text": "property MaxStressCriterion.s23: bool\n\nWhether to activate the failure evaluation regarding the interlaminar shear stress s23.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.analysis_plies", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.analysis_plies.html#ansys.dpf.composites.sampling_point.SamplingPoint.analysis_plies", + "title": "analysis_plies > analysis_plies > analysis_plies", + "section": "analysis_plies > analysis_plies", + "text": "property SamplingPoint.analysis_plies: Sequence[Any]\n\nList of analysis plies from the bottom to the top.\n\nThis attribute returns a list of ply data, such as angle, thickness and material name,\nas a dictionary.\n\nReturn type\n\nSequence[Any]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_ply_sequence_to_plot", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_ply_sequence_to_plot.html#add_ply_sequence_to_plot", - "title": "add_ply_sequence_to_plot", - "section": "add_ply_sequence_to_plot", - "text": "Add the stacking (ply and text) to an axis or plot.\naxes (Any) – Matplotlib Axes object.\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\nNone\nadd_ply_sequence_to_plot\nAny\nAxes\nfloat\n1.0\nNone" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.get_material_operators", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.get_material_operators.html#get_material_operators", + "title": "get_material_operators", + "section": "get_material_operators", + "text": "Get material properties related to operators.\nrst_data_source (DataSources) – Data source that contains a RST file. Note that multiple (distributed)\nRST files are not supported.\nengineering_data_source (DataSources) – Data source that contains the Engineering Data file.\nunit_system (Optional[Union[UnitSystem, Operator]], default: None) – Unit System\n----------\nMaterialOperators\nget_material_operators\nDataSources\nDataSources\nOptional\nUnion\nUnitSystem\nOperator\nNone\nMaterialOperators" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_ply_sequence_to_plot", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_ply_sequence_to_plot.html#ansys.dpf.composites.sampling_point.SamplingPoint.add_ply_sequence_to_plot", - "title": "add_ply_sequence_to_plot > add_ply_sequence_to_plot > add_ply_sequence_to_plot", - "section": "add_ply_sequence_to_plot > add_ply_sequence_to_plot", - "text": "SamplingPoint.add_ply_sequence_to_plot(axes, core_scale_factor=1.0)\n\nAdd the stacking (ply and text) to an axis or plot.\n\nParameters\n\naxes (Any) – Matplotlib Axes object.\n\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.get_material_operators", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.get_material_operators.html#ansys.dpf.composites.layup_info.material_operators.get_material_operators", + "title": "get_material_operators > get_material_operators > get_material_operators", + "section": "get_material_operators > get_material_operators", + "text": "ansys.dpf.composites.layup_info.material_operators.get_material_operators(rst_data_source, engineering_data_source, unit_system=None)\n\nGet material properties related to operators.\n\nParameters\n\nrst_data_source (DataSources) – Data source that contains a RST file. Note that multiple (distributed)\nRST files are not supported.\n\nengineering_data_source (DataSources) – Data source that contains the Engineering Data file.\n\nunit_system (Optional[Union[UnitSystem, Operator]], default: None) – Unit System\n\n----------\n\nReturn type\n\nMaterialOperators\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R13", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R13.html#hill_yield_criterion_r13", + "title": "Hill_Yield_Criterion_R13", + "section": "Hill_Yield_Criterion_R13", + "text": "Hill_Yield_Criterion_R13" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "TsaiHillCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R13", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R13.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R13", + "title": "Hill_Yield_Criterion_R13 > Hill_Yield_Criterion_R13 > Hill_Yield_Criterion_R13", + "section": "Hill_Yield_Criterion_R13 > Hill_Yield_Criterion_R13", + "text": "MaterialProperty.Hill_Yield_Criterion_R13: str = 'yield_stress_ratio_xz_hill_criterion'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_result_plots", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_result_plots.html#get_result_plots", - "title": "get_result_plots", - "section": "get_result_plots", - "text": "Generate a figure with a grid of axes (plot) for each selected result entity.\nstrain_components (Sequence[str], default: ('e1', 'e2', 'e3', 'e12', 'e13', 'e23')) – Strain entities of interest. Supported values are \"e1\", \"e2\",\n\"e3\", \"e12\", \"e13\", and \"e23\". The plot is skipped\nif the list is empty.\nstress_components (Sequence[str], default: ('s1', 's2', 's3', 's12', 's13', 's23')) – Stress entities of interest. Supported values are \"s1\", \"s2\",\n\"s3\", \"s12\", \"s13\", and \"s23\". The plot is skipped\nif the list is empty.\nfailure_components (Sequence[FailureMeasureEnum], default: (, , )) – Failure values of interest. Values supported are \"irf\", \"rf\",\nand \"mos\". The plot is skipped if the list is empty.\nshow_failure_modes (bool, default: False) – WHether to add the critical failure mode to the failure plot.\ncreate_laminate_plot (bool, default: True) – Whether to plot the stacking sequence of the laminate, including text information\nsuch as material, thickness, and angle.\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\nspots (Collection[Spot], default: (, , )) – Spots (interfaces) to show results at.\nSamplingPointFigure\nget_result_plots\nSequence\nstr\n('e1', 'e2', 'e3', 'e12', 'e13', 'e23')\n\"e1\"\n\"e2\"\n\"e3\"\n\"e12\"\n\"e13\"\n\"e23\"\nSequence\nstr\n('s1', 's2', 's3', 's12', 's13', 's23')\n\"s1\"\n\"s2\"\n\"s3\"\n\"s12\"\n\"s13\"\n\"s23\"\nSequence\nFailureMeasureEnum\n(, , )\n\"irf\"\n\"rf\"\n\"mos\"\nbool\nFalse\nbool\nTrue\nfloat\n1.0\nCollection\nSpot\n(, , )\nSamplingPointFigure" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXt.html#strain_limits_ext", + "title": "Strain_Limits_eXt", + "section": "Strain_Limits_eXt", + "text": "Strain_Limits_eXt" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_result_plots", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_result_plots.html#ansys.dpf.composites.sampling_point.SamplingPoint.get_result_plots", - "title": "get_result_plots > get_result_plots > get_result_plots", - "section": "get_result_plots > get_result_plots", - "text": "SamplingPoint.get_result_plots(strain_components=('e1', 'e2', 'e3', 'e12', 'e13', 'e23'), stress_components=('s1', 's2', 's3', 's12', 's13', 's23'), failure_components=(FailureMeasureEnum.INVERSE_RESERVE_FACTOR, FailureMeasureEnum.RESERVE_FACTOR, FailureMeasureEnum.MARGIN_OF_SAFETY), show_failure_modes=False, create_laminate_plot=True, core_scale_factor=1.0, spots=(Spot.BOTTOM, Spot.MIDDLE, Spot.TOP))\n\nGenerate a figure with a grid of axes (plot) for each selected result entity.\n\nParameters\n\nstrain_components (Sequence[str], default: ('e1', 'e2', 'e3', 'e12', 'e13', 'e23')) – Strain entities of interest. Supported values are \"e1\", \"e2\",\n\"e3\", \"e12\", \"e13\", and \"e23\". The plot is skipped\nif the list is empty.\n\nstress_components (Sequence[str], default: ('s1', 's2', 's3', 's12', 's13', 's23')) – Stress entities of interest. Supported values are \"s1\", \"s2\",\n\"s3\", \"s12\", \"s13\", and \"s23\". The plot is skipped\nif the list is empty.\n\nfailure_components (Sequence[FailureMeasureEnum], default: (, , )) – Failure values of interest. Values supported are \"irf\", \"rf\",\nand \"mos\". The plot is skipped if the list is empty.\n\nshow_failure_modes (bool, default: False) – WHether to add the critical failure mode to the failure plot.\n\ncreate_laminate_plot (bool, default: True) – Whether to plot the stacking sequence of the laminate, including text information\nsuch as material, thickness, and angle.\n\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\n\nspots (Collection[Spot], default: (, , )) – Spots (interfaces) to show results at.\n\nExamples\n\n>>> figure, axes = sampling_point.get_result_plots()\n\nReturn type\n\nSamplingPointFigure\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXt", + "title": "Strain_Limits_eXt > Strain_Limits_eXt > Strain_Limits_eXt", + "section": "Strain_Limits_eXt > Strain_Limits_eXt", + "text": "MaterialProperty.Strain_Limits_eXt: str = 'strain_tensile_x_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.expandtabs", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.expandtabs.html#expandtabs", - "title": "expandtabs", - "section": "expandtabs", - "text": "Return a copy where all tab characters are expanded using spaces.\nIf tabsize is not given, a tab size of 8 characters is assumed.\nexpandtabs" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.ply_element_ids", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.ply_element_ids.html#ply_element_ids", + "title": "ply_element_ids", + "section": "ply_element_ids", + "text": "Return list of element labels of the analysis ply.\nSequence[int64]\nply_element_ids\nSequence\nint64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.expandtabs", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.expandtabs.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.expandtabs", - "title": "expandtabs > expandtabs > expandtabs", - "section": "expandtabs > expandtabs", - "text": "FailureMeasureEnum.expandtabs(/, tabsize=8)\n\nReturn a copy where all tab characters are expanded using spaces.\n\nIf tabsize is not given, a tab size of 8 characters is assumed.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.ply_element_ids", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.ply_element_ids.html#ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.ply_element_ids", + "title": "ply_element_ids > ply_element_ids > ply_element_ids", + "section": "ply_element_ids > ply_element_ids", + "text": "AnalysisPlyInfoProvider.ply_element_ids()\n\nReturn list of element labels of the analysis ply.\n\nReturn type\n\nSequence[int64]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.h", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.h.html#h", - "title": "h", - "section": "h", - "text": "h" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.islower", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.islower.html#islower", + "title": "islower", + "section": "islower", + "text": "Return True if the string is a lowercase string, False otherwise.\nA string is lowercase if all cased characters in the string are lowercase and\nthere is at least one cased character in the string.\nislower" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.h", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.h.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.h", - "title": "h > h > h", - "section": "h > h", - "text": "FailureModeEnum.h = 501\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.islower", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.islower.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.islower", + "title": "islower > islower > islower", + "section": "islower > islower", + "text": "FailureMeasureEnum.islower(/)\n\nReturn True if the string is a lowercase string, False otherwise.\n\nA string is lowercase if all cased characters in the string are lowercase and\nthere is at least one cased character in the string.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma.html#cma", - "title": "cma", - "section": "cma", - "text": "Activates the failure evaluation of the matrix due to tension.\nbool\ncma\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.count", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.count.html#count", + "title": "count", + "section": "count", + "text": "Return the number of non-overlapping occurrences of substring sub in string S[start:end].\nOptional arguments start and end are interpreted as in slice notation.\ncount" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma", - "title": "cma > cma > cma", - "section": "cma > cma", - "text": "property CuntzeCriterion.cma: bool\n\nActivates the failure evaluation of the matrix due to tension.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.count", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.count.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.count", + "title": "count > count > count", + "section": "count > count", + "text": "FailureMeasureEnum.count(sub, [start, [end]], /)\n\nReturn the number of non-overlapping occurrences of substring sub in string S[start:end].\n\nOptional arguments start and end are interpreted as in slice notation.\n\n!! processed by numpydoc !!" }, { "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_dict", @@ -4200,74 +3864,116 @@ "text": "HashinCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_shell", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_shell.html#is_shell", - "title": "is_shell", - "section": "is_shell", - "text": "is_shell" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt.html#stress_limits_yt", + "title": "Stress_Limits_Yt", + "section": "Stress_Limits_Yt", + "text": "Stress_Limits_Yt" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_shell", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_shell.html#ansys.dpf.composites.layup_info.ElementInfo.is_shell", - "title": "is_shell > is_shell > is_shell", - "section": "is_shell > is_shell", - "text": "ElementInfo.is_shell: bool\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt", + "title": "Stress_Limits_Yt > Stress_Limits_Yt > Stress_Limits_Yt", + "section": "Stress_Limits_Yt > Stress_Limits_Yt", + "text": "MaterialProperty.Stress_Limits_Yt: str = 'stress_tensile_y_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXc.html#strain_limits_exc", - "title": "Strain_Limits_eXc", - "section": "Strain_Limits_eXc", - "text": "Strain_Limits_eXc" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.html#compositemodel", + "title": "CompositeModel", + "section": "CompositeModel", + "text": "Provides access to the basic composite postprocessing functionality.\nOn initialization, the CompositeModel class automatically adds composite lay-up\ninformation to the meshed regions. It prepares the providers for different lay-up properties\nso that they can be efficiently evaluated. The composite_files provided are automatically\nuploaded to the server if needed.\nWhen creating a CompositeModel instance, several providers are created and\nlay-up information is added to the DPF meshed regions. Depending on the use\ncase, it can be more efficient to create the providers separately.\nThe handling of models with multiple composite definition files (assemblies)\ndiffer depending on the version of the DPF server. The handling is simplified\nwith DPF Server 7.0 (2024 R1) or later and the full assembly can be post-processed\nin the same way as a model with a single ACP model.\nBefore DPF Server 7.0 (2024 R1):\nFor assemblies with multiple composite definition files, separate meshes and\nlay-up operators are generated (wrapped by the CompositeInfo class). This\nis needed because the lay-up provider can only add the data of a single\ncomposite definitions file to a mesh. All functions that depend on composite\ndefinitions mut be called with the correct composite_definition_label\nparameter. The layered elements that get information from a given\ncomposite definition label can be determined by calling\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label().\nAll the elements that are not part of a composite definition are either homogeneous\nsolids or layered models defined outside of an ACP model. The\nCompositeModel.composite_definition_labels() command returns all available composite\ndefinition labels. For more information, see\nsphx_glr_examples_gallery_examples_008_assembly_example.py.\ncomposite_files (ContinuousFiberCompositesFiles) – Use the get_composite_files_from_workbench_result_folder() function to obtain\nthe ContinuousFiberCompositesFiles object.\nserver (BaseServer) – DPF Server on which the model is created\ndefault_unit_system (Optional[UnitSystem], default: None) – Unit system that is used if the result file\ndoes not specify the unit system. This happens\nfor pure MAPDL projects.\nCompositeModel.add_interlaminar_normal_stresses(...)\nAdd interlaminar normal stresses to the stresses fields container.\nCompositeModel.evaluate_failure_criteria(...)\nGet a fields container with the evaluated failure criteria.\nCompositeModel.get_all_layered_element_ids()\nGet all element IDs with lay-up data.\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label([...])\nGet all layered element IDs that belong to a composite definition label.\nCompositeModel.get_analysis_plies(element_id)\nGet analysis ply names.\nCompositeModel.get_constant_property_dict(...)\nGet a dictionary with constant properties.\nCompositeModel.get_element_info(element_id)\nGet element information for an element ID.\nCompositeModel.get_element_laminate_offset(...)\nGet the laminate offset of an element.\nCompositeModel.get_layup_operator([...])\nGet the lay-up operator.\nCompositeModel.get_mesh([...])\nGet the underlying DPF meshed region.\nCompositeModel.get_property_for_all_layers(...)\nGet a layer property for an element ID.\nCompositeModel.get_result_times_or_frequencies()\nGet the times or frequencies in the result file.\nCompositeModel.get_rst_streams_provider()\nGet the streams provider of the loaded result file.\nCompositeModel.get_sampling_point(...[, ...])\nGet a sampling point for an element ID and failure criteria.\nCompositeModel.composite_definition_labels\nAll composite definition labels in the model.\nCompositeModel.composite_files\nGet the composite file paths on the server.\nCompositeModel.core_model\nUnderlying DPF core model.\nCompositeModel.data_sources\nComposite data sources.\nCompositeModel.layup_model_type\nGet the context type of the lay-up model.\nCompositeModel.material_metadata\nDPF material ID to metadata map of the materials.\nCompositeModel.material_names\nMaterial name to DPF material ID map.\nCompositeModel.material_operators\nMaterial operators.\nCompositeModel\nCompositeModel\nCompositeModel\nCompositeInfo\ncomposite_definition_label\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label()\nCompositeModel.composite_definition_labels()\nContinuousFiberCompositesFiles\nget_composite_files_from_workbench_result_folder()\nContinuousFiberCompositesFiles\nBaseServer\nOptional\nUnitSystem\nNone\nCompositeModel.add_interlaminar_normal_stresses\nCompositeModel.evaluate_failure_criteria\nCompositeModel.get_all_layered_element_ids\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label\nCompositeModel.get_analysis_plies\nCompositeModel.get_constant_property_dict\nCompositeModel.get_element_info\nCompositeModel.get_element_laminate_offset\nCompositeModel.get_layup_operator\nCompositeModel.get_mesh\nCompositeModel.get_property_for_all_layers\nCompositeModel.get_result_times_or_frequencies\nCompositeModel.get_rst_streams_provider\nCompositeModel.get_sampling_point\nCompositeModel.composite_definition_labels\nCompositeModel.composite_files\nCompositeModel.core_model\nCompositeModel.data_sources\nCompositeModel.layup_model_type\nCompositeModel.material_metadata\nCompositeModel.material_names\nCompositeModel.material_operators" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eXc", - "title": "Strain_Limits_eXc > Strain_Limits_eXc > Strain_Limits_eXc", - "section": "Strain_Limits_eXc > Strain_Limits_eXc", - "text": "MaterialProperty.Strain_Limits_eXc: str = 'strain_compressive_x_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.html#ansys.dpf.composites.composite_model.CompositeModel", + "title": "CompositeModel > CompositeModel > CompositeModel", + "section": "CompositeModel > CompositeModel", + "text": "class ansys.dpf.composites.composite_model.CompositeModel(composite_files, server, default_unit_system=None)\n\nProvides access to the basic composite postprocessing functionality.\n\nOn initialization, the CompositeModel class automatically adds composite lay-up\ninformation to the meshed regions. It prepares the providers for different lay-up properties\nso that they can be efficiently evaluated. The composite_files provided are automatically\nuploaded to the server if needed.\n\nWhen creating a CompositeModel instance, several providers are created and\nlay-up information is added to the DPF meshed regions. Depending on the use\ncase, it can be more efficient to create the providers separately.\n\nThe handling of models with multiple composite definition files (assemblies)\ndiffer depending on the version of the DPF server. The handling is simplified\nwith DPF Server 7.0 (2024 R1) or later and the full assembly can be post-processed\nin the same way as a model with a single ACP model.\n\nBefore DPF Server 7.0 (2024 R1):\n\nFor assemblies with multiple composite definition files, separate meshes and\nlay-up operators are generated (wrapped by the CompositeInfo class). This\nis needed because the lay-up provider can only add the data of a single\ncomposite definitions file to a mesh. All functions that depend on composite\ndefinitions mut be called with the correct composite_definition_label\nparameter. The layered elements that get information from a given\ncomposite definition label can be determined by calling\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label().\nAll the elements that are not part of a composite definition are either homogeneous\nsolids or layered models defined outside of an ACP model. The\nCompositeModel.composite_definition_labels() command returns all available composite\ndefinition labels. For more information, see\nsphx_glr_examples_gallery_examples_008_assembly_example.py.\n\nParameters\n\ncomposite_files (ContinuousFiberCompositesFiles) – Use the get_composite_files_from_workbench_result_folder() function to obtain\nthe ContinuousFiberCompositesFiles object.\n\nserver (BaseServer) – DPF Server on which the model is created\n\ndefault_unit_system (Optional[UnitSystem], default: None) – Unit system that is used if the result file\ndoes not specify the unit system. This happens\nfor pure MAPDL projects.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nCompositeModel.add_interlaminar_normal_stresses(...)\n\nAdd interlaminar normal stresses to the stresses fields container.\n\nCompositeModel.evaluate_failure_criteria(...)\n\nGet a fields container with the evaluated failure criteria.\n\nCompositeModel.get_all_layered_element_ids()\n\nGet all element IDs with lay-up data.\n\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label([...])\n\nGet all layered element IDs that belong to a composite definition label.\n\nCompositeModel.get_analysis_plies(element_id)\n\nGet analysis ply names.\n\nCompositeModel.get_constant_property_dict(...)\n\nGet a dictionary with constant properties.\n\nCompositeModel.get_element_info(element_id)\n\nGet element information for an element ID.\n\nCompositeModel.get_element_laminate_offset(...)\n\nGet the laminate offset of an element.\n\nCompositeModel.get_layup_operator([...])\n\nGet the lay-up operator.\n\nCompositeModel.get_mesh([...])\n\nGet the underlying DPF meshed region.\n\nCompositeModel.get_property_for_all_layers(...)\n\nGet a layer property for an element ID.\n\nCompositeModel.get_result_times_or_frequencies()\n\nGet the times or frequencies in the result file.\n\nCompositeModel.get_rst_streams_provider()\n\nGet the streams provider of the loaded result file.\n\nCompositeModel.get_sampling_point(...[, ...])\n\nGet a sampling point for an element ID and failure criteria.\n\n\n\nAttributes\n\n\n\n\n\n\n\nCompositeModel.composite_definition_labels\n\nAll composite definition labels in the model.\n\nCompositeModel.composite_files\n\nGet the composite file paths on the server.\n\nCompositeModel.core_model\n\nUnderlying DPF core model.\n\nCompositeModel.data_sources\n\nComposite data sources.\n\nCompositeModel.layup_model_type\n\nGet the context type of the lay-up model.\n\nCompositeModel.material_metadata\n\nDPF material ID to metadata map of the materials.\n\nCompositeModel.material_names\n\nMaterial name to DPF material ID map.\n\nCompositeModel.material_operators\n\nMaterial operators.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e23.html#e23", - "title": "e23", - "section": "e23", - "text": "Whether to activate the failure evaluation regarding the interlaminar shear strain e23.\nbool\ne23\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.html#resultdefinition", + "title": "ResultDefinition", + "section": "ResultDefinition", + "text": "Represents the result definition of DPF Composites.\nThis class is used to configure the DPF operators composite::failure_evaluator\nand composite::sampling_point_evaluator.\nResultDefinition.check_has_single_scope(msg)\nCheck that the result definition has one scope.\nResultDefinition.to_dict()\nGet the result definition in a dictionary representation.\nResultDefinition.to_json()\nConvert the dictionary representation of the result definition to a JSON dictionary.\nResultDefinition.combined_failure_criterion\nConfiguration of the failure criteria such as maximum stress, puck, and wrinkling.\nResultDefinition.expression\nType of the result.\nResultDefinition.material_file\nPath of the material files that store the material properties.\nResultDefinition.max_chunk_size\nMaximum chunk size (number of elements) for the result evaluation.\nResultDefinition.measure\nReturn type of the failure values.\nResultDefinition.name\nCustom name.\nResultDefinition.rst_files\nPath of the result (RST) files.\nResultDefinition.scopes\nScopes of the result definition.\nResultDefinition.stress_strain_eval_mode\nResults loaded from a result (RST) file by default.\nResultDefinition.time\nTime or solution step.\nResultDefinition\ncomposite::failure_evaluator\ncomposite::sampling_point_evaluator\nResultDefinition.check_has_single_scope\nResultDefinition.to_dict\nResultDefinition.to_json\nResultDefinition.combined_failure_criterion\nResultDefinition.expression\nResultDefinition.material_file\nResultDefinition.max_chunk_size\nResultDefinition.measure\nResultDefinition.name\nResultDefinition.rst_files\nResultDefinition.scopes\nResultDefinition.stress_strain_eval_mode\nResultDefinition.time" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e23.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e23", - "title": "e23 > e23 > e23", - "section": "e23 > e23", - "text": "property MaxStrainCriterion.e23: bool\n\nWhether to activate the failure evaluation regarding the interlaminar shear strain e23.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.html#ansys.dpf.composites.result_definition.ResultDefinition", + "title": "ResultDefinition > ResultDefinition > ResultDefinition", + "section": "ResultDefinition > ResultDefinition", + "text": "class ansys.dpf.composites.result_definition.ResultDefinition(name, combined_failure_criterion, composite_scopes, rst_files, material_file, measure='inverse_reserve_factor', stress_strain_eval_mode='rst_file', time=None, expression='composite_failure', max_chunk_size=50000)\n\nRepresents the result definition of DPF Composites.\n\nThis class is used to configure the DPF operators composite::failure_evaluator\nand composite::sampling_point_evaluator.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nResultDefinition.check_has_single_scope(msg)\n\nCheck that the result definition has one scope.\n\nResultDefinition.to_dict()\n\nGet the result definition in a dictionary representation.\n\nResultDefinition.to_json()\n\nConvert the dictionary representation of the result definition to a JSON dictionary.\n\n\n\nAttributes\n\n\n\n\n\n\n\nResultDefinition.combined_failure_criterion\n\nConfiguration of the failure criteria such as maximum stress, puck, and wrinkling.\n\nResultDefinition.expression\n\nType of the result.\n\nResultDefinition.material_file\n\nPath of the material files that store the material properties.\n\nResultDefinition.max_chunk_size\n\nMaximum chunk size (number of elements) for the result evaluation.\n\nResultDefinition.measure\n\nReturn type of the failure values.\n\nResultDefinition.name\n\nCustom name.\n\nResultDefinition.rst_files\n\nPath of the result (RST) files.\n\nResultDefinition.scopes\n\nScopes of the result definition.\n\nResultDefinition.stress_strain_eval_mode\n\nResults loaded from a result (RST) file by default.\n\nResultDefinition.time\n\nTime or solution step.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_interface_weakening_factor", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_interface_weakening_factor.html#puck_constants_interface_weakening_factor", - "title": "Puck_Constants_interface_weakening_factor", - "section": "Puck_Constants_interface_weakening_factor", - "text": "Puck_Constants_interface_weakening_factor" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MID", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MID.html#mid", + "title": "MID", + "section": "MID", + "text": "MID" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_interface_weakening_factor", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_interface_weakening_factor.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_interface_weakening_factor", - "title": "Puck_Constants_interface_weakening_factor > Puck_Constants_interface_weakening_factor > Puck_Constants_interface_weakening_factor", - "section": "Puck_Constants_interface_weakening_factor > Puck_Constants_interface_weakening_factor", - "text": "MaterialProperty.Puck_Constants_interface_weakening_factor: str = 'interface_weakening_factor_puck_constants'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MID", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MID.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MID", + "title": "MID > MID > MID", + "section": "MID > MID", + "text": "SpotReductionStrategy.MID = 'MID'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hm.html#hm", - "title": "hm", - "section": "hm", - "text": "hm" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.old_composite_sources", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.old_composite_sources.html#old_composite_sources", + "title": "old_composite_sources", + "section": "old_composite_sources", + "text": "old_composite_sources" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.old_composite_sources", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.old_composite_sources.html#ansys.dpf.composites.data_sources.CompositeDataSources.old_composite_sources", + "title": "old_composite_sources > old_composite_sources > old_composite_sources", + "section": "old_composite_sources > old_composite_sources", + "text": "CompositeDataSources.old_composite_sources: dict[str, DataSources]\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K2", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K2.html#thermal_conductivity_k2", + "title": "Thermal_Conductivity_K2", + "section": "Thermal_Conductivity_K2", + "text": "Thermal_Conductivity_K2" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K2", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K2.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K2", + "title": "Thermal_Conductivity_K2 > Thermal_Conductivity_K2 > Thermal_Conductivity_K2", + "section": "Thermal_Conductivity_K2 > Thermal_Conductivity_K2", + "text": "MaterialProperty.Thermal_Conductivity_K2: str = 'thermal_conductivity_y_direction'\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11.html#tensor11", + "title": "TENSOR11", + "section": "TENSOR11", + "text": "TENSOR11" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11", + "title": "TENSOR11 > TENSOR11 > TENSOR11", + "section": "TENSOR11 > TENSOR11", + "text": "Sym3x3TensorComponent.TENSOR11 = 0\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hm.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.hm", - "title": "hm > hm > hm", - "section": "hm > hm", - "text": "FailureModeEnum.hm = 602\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmt1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmt1.html#lmt1", + "title": "lmt1", + "section": "lmt1", + "text": "lmt1" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmt1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmt1.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lmt1", + "title": "lmt1 > lmt1 > lmt1", + "section": "lmt1 > lmt1", + "text": "FailureModeEnum.lmt1 = 904\n\n" }, { "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e1", @@ -4284,466 +3990,529 @@ "text": "property MaxStrainCriterion.e1: bool\n\nActivates the failure evaluation regarding the strain in the material 1 direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/layup_info", - "href": "api/layup_info.html#lay-up-information", - "title": "Lay-up information", - "section": "Lay-up information", - "text": "General features to access information on the composite lay-up.\nadd_layup_info_to_mesh(data_sources, ...[, ...])\nAdd lay-up information to the mesh.\nget_element_info_provider(mesh, ...[, ...])\nGet ElementInfoProvider Object.\nget_dpf_material_id_by_analyis_ply_map(mesh, ...)\nGet Dict that maps analysis ply names to dpf_material_ids.\nAnalysisPlyInfoProvider(mesh, name)\nAnalysisPlyInfoProvider.\nElementInfoProvider(mesh, layer_indices, ...)\nProvider for ElementInfo.\nElementInfo(id, n_layers, n_corner_nodes, ...)\nProvides lay-up information for an element.\nLayupPropertiesProvider(layup_provider, mesh)\nProvider for lay-up properties.\nLayerProperty(value[, names, module, ...])\nProvides the layer properties available.\nLayupProperty(value[, names, module, ...])\nEnum for lay-up properties.\nLayupModelContextType(value[, names, ...])\nType of the lay-up information.\nLay-up information\nadd_layup_info_to_mesh\nget_element_info_provider\nElementInfoProvider\nget_dpf_material_id_by_analyis_ply_map\nAnalysisPlyInfoProvider\nElementInfoProvider\nElementInfo\nElementInfo\nLayupPropertiesProvider\nLayerProperty\nLayupProperty\nLayupModelContextType" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu13", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu13.html#engineering_constants_nu13", + "title": "Engineering_Constants_nu13", + "section": "Engineering_Constants_nu13", + "text": "Engineering_Constants_nu13" }, { - "objectID": "api/layup_info", - "href": "api/layup_info.html#material-properties", - "title": "Lay-up information > Material properties", - "section": "Material properties", - "text": "A note on material ids: in the PyDPF Composites module,\nmaterials are reference by their dpf_material_id. The dpf_material_id\nis generated based on the materials present in the result file.\nThe dpf_material_id can be different from the material id used in the solver.\nElementInfo contains the dpf_material_id for the materials\nof a given element. The dpf_material_id for a given analysis ply can be obtained\nby calling get_dpf_material_id_by_analyis_ply_map(). A lookup by\nmaterial name is currently not available.\nThe sphx_glr_examples_gallery_examples_004_get_material_properties_example.py\nexample shows how to evaluate material properties.\nget_constant_property(material_property, ...)\nGet a constant material property.\nget_all_dpf_material_ids(mesh, ...)\nGet all DPF material IDs.\nget_constant_property_dict(...)\nGet a dictionary with constant properties.\nMaterialProperty(value[, names, module, ...])\nProvides the material properties that are available.\nMaterialMetadata([dpf_material_id, ...])\nMaterial metadata such as name and ply type.\nMaterial properties\ndpf_material_id\ndpf_material_id\ndpf_material_id\nElementInfo\ndpf_material_id\ndpf_material_id\nget_dpf_material_id_by_analyis_ply_map()\nget_constant_property\nget_all_dpf_material_ids\nget_constant_property_dict\nMaterialProperty\nMaterialMetadata" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu13", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu13.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu13", + "title": "Engineering_Constants_nu13 > Engineering_Constants_nu13 > Engineering_Constants_nu13", + "section": "Engineering_Constants_nu13 > Engineering_Constants_nu13", + "text": "MaterialProperty.Engineering_Constants_nu13: str = 'poisson_ratio_xz'\n\n" }, { - "objectID": "api/layup_info", - "href": "api/layup_info.html#material-operators", - "title": "Lay-up information > Material operators", - "section": "Material operators", - "text": "MaterialOperators(material_provider, ...)\nProvides the container for material-related operators.\nget_material_operators(rst_data_source, ...)\nGet material properties related to operators.\nMaterial operators\nMaterialOperators\nget_material_operators" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE.html#failure_value", + "title": "FAILURE_VALUE", + "section": "FAILURE_VALUE", + "text": "FAILURE_VALUE" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aZ", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aZ.html#thermal_expansion_coefficients_az", - "title": "Thermal_Expansion_Coefficients_aZ", - "section": "Thermal_Expansion_Coefficients_aZ", - "text": "Thermal_Expansion_Coefficients_aZ" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE.html#ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE", + "title": "FAILURE_VALUE > FAILURE_VALUE > FAILURE_VALUE", + "section": "FAILURE_VALUE > FAILURE_VALUE", + "text": "FailureOutput.FAILURE_VALUE = 1\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aZ", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aZ.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aZ", - "title": "Thermal_Expansion_Coefficients_aZ > Thermal_Expansion_Coefficients_aZ > Thermal_Expansion_Coefficients_aZ", - "section": "Thermal_Expansion_Coefficients_aZ > Thermal_Expansion_Coefficients_aZ", - "text": "MaterialProperty.Thermal_Expansion_Coefficients_aZ: str = 'coefficient_thermal_expansion_z'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.svm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.svm.html#svm", - "title": "svm", - "section": "svm", - "text": "svm" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.name.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property VonMisesCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.svm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.svm.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.svm", - "title": "svm > svm > svm", - "section": "svm > svm", - "text": "FailureModeEnum.svm = 202\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.active.html#active", + "title": "active", + "section": "active", + "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_json.html#to_json", + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.active.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property CuntzeCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hm", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hm.html#hm", + "title": "hm", + "section": "hm", + "text": "hm" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hm", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hm.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.hm", + "title": "hm > hm > hm", + "section": "hm > hm", + "text": "FailureModeEnum.hm = 602\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cft.html#wf_cft", + "title": "wf_cft", + "section": "wf_cft", + "text": "Weighting factor of fiber failure due to tension (cft).\nfloat\nwf_cft\nfloat" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cft.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cft", + "title": "wf_cft > wf_cft > wf_cft", + "section": "wf_cft > wf_cft", + "text": "property CuntzeCriterion.wf_cft: float\n\nWeighting factor of fiber failure due to tension (cft).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_json.html#to_json", "title": "to_json", "section": "to_json", "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_json.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_json", + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_json.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_json", "title": "to_json > to_json > to_json", "section": "to_json > to_json", - "text": "CoreFailureCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + "text": "TsaiWuCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.mapping_file", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.mapping_file.html#mapping_file", - "title": "mapping_file", - "section": "mapping_file", - "text": "Path to the mapping file for all element labels in the element scope.\nmapping_file" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.check_has_single_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.check_has_single_scope.html#check_has_single_scope", + "title": "check_has_single_scope", + "section": "check_has_single_scope", + "text": "Check that the result definition has one scope.\nNone\ncheck_has_single_scope\nNone" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.mapping_file", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.mapping_file.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.mapping_file", - "title": "mapping_file > mapping_file > mapping_file", - "section": "mapping_file > mapping_file", - "text": "ResultDefinitionScope.mapping_file: str | PathLike[str] | None = None\n\nPath to the mapping file for all element labels in the element scope.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.check_has_single_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.check_has_single_scope.html#ansys.dpf.composites.result_definition.ResultDefinition.check_has_single_scope", + "title": "check_has_single_scope > check_has_single_scope > check_has_single_scope", + "section": "check_has_single_scope > check_has_single_scope", + "text": "ResultDefinition.check_has_single_scope(msg)\n\nCheck that the result definition has one scope.\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3.html#wf_s3", - "title": "wf_s3", - "section": "wf_s3", - "text": "Weighting factor of the failure mode s3.\nfloat\nwf_s3\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rindex", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rindex.html#rindex", + "title": "rindex", + "section": "rindex", + "text": "Return the highest index in S where substring sub is found, such that sub is contained within S[start:end].\nOptional arguments start and end are interpreted as in slice notation.\nRaises ValueError when the substring is not found.\nrindex" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3", - "title": "wf_s3 > wf_s3 > wf_s3", - "section": "wf_s3 > wf_s3", - "text": "property MaxStressCriterion.wf_s3: float\n\nWeighting factor of the failure mode s3.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rindex", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rindex.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rindex", + "title": "rindex > rindex > rindex", + "section": "rindex > rindex", + "text": "FailureMeasureEnum.rindex(sub, [start, [end]], /)\n\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nOptional arguments start and end are interpreted as in slice notation.\nRaises ValueError when the substring is not found.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id.html#get_layer_index_by_element_id", - "title": "get_layer_index_by_element_id", - "section": "get_layer_index_by_element_id", - "text": "Get the layer index for the analysis ply in a given element.\nelement_id (int) – Element Id/Label\nOptional[int64]\nget_layer_index_by_element_id\nint\nOptional\nint64" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc.html#wf_lmc", + "title": "wf_lmc", + "section": "wf_lmc", + "text": "Weighting factor of matrix failure due to compression (lmc).\nfloat\nwf_lmc\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id.html#ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id", - "title": "get_layer_index_by_element_id > get_layer_index_by_element_id > get_layer_index_by_element_id", - "section": "get_layer_index_by_element_id > get_layer_index_by_element_id", - "text": "AnalysisPlyInfoProvider.get_layer_index_by_element_id(element_id)\n\nGet the layer index for the analysis ply in a given element.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[int64]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc", + "title": "wf_lmc > wf_lmc > wf_lmc", + "section": "wf_lmc > wf_lmc", + "text": "property LaRCCriterion.wf_lmc: float\n\nWeighting factor of matrix failure due to compression (lmc).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2.html#polar_properties_e2", - "title": "polar_properties_E2", - "section": "polar_properties_E2", - "text": "Polar property E2 of the laminate.\nndarray[Any, dtype[float64]]\npolar_properties_E2\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.material_file", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.material_file.html#material_file", + "title": "material_file", + "section": "material_file", + "text": "Path of the material files that store the material properties.\nSupported formats are XML and ENGD.\nUnion[str, PathLike[str]]\nmaterial_file\nUnion\nstr\nPathLike\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2.html#ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2", - "title": "polar_properties_E2 > polar_properties_E2 > polar_properties_E2", - "section": "polar_properties_E2 > polar_properties_E2", - "text": "property SamplingPoint.polar_properties_E2: ndarray[Any, dtype[float64]]\n\nPolar property E2 of the laminate.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.material_file", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.material_file.html#ansys.dpf.composites.result_definition.ResultDefinition.material_file", + "title": "material_file > material_file > material_file", + "section": "material_file > material_file", + "text": "property ResultDefinition.material_file: str | PathLike[str]\n\nPath of the material files that store the material properties.\n\nSupported formats are XML and ENGD.\n\nReturn type\n\nUnion[str, PathLike[str]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmC", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmC.html#cmc", - "title": "cmC", - "section": "cmC", - "text": "cmC" + "objectID": "examples/gallery_examples/013_thermal_example", + "href": "examples/gallery_examples/013_thermal_example.html#thermal-analysis", + "title": "Thermal analysis", + "section": "Thermal analysis", + "text": "This example shows how to evaluate a thermal analysis.\nThe simulation’s thermal analysis results are also\nthe input of a structural analysis.\nTherefore, the RST file contains temperature and structural results.\nThe example imitates a printed circuit board (PCB) that was\nmodeled with Ansys Composites PrepPost (ACP), using the solid model feature to\ngenerate the volume mesh.\nDescriptions of how to extract temperatures for a specific ply\nand material are provided.\nWhen using a Workbench project,\nuse the get_composite_files_from_workbench_result_folder()\nmethod to obtain the input files.\nThermal analysis\nget_composite_files_from_workbench_result_folder()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmC", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmC.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cmC", - "title": "cmC > cmC > cmC", - "section": "cmC > cmC", - "text": "FailureModeEnum.cmC = 1005\n\n" + "objectID": "examples/gallery_examples/013_thermal_example", + "href": "examples/gallery_examples/013_thermal_example.html#set-up-analysis", + "title": "Thermal analysis > Set up analysis", + "section": "Set up analysis", + "text": "Setting up the analysis consists of loading the required modules, connecting to the\nDPF server, and retrieving the example files.\nSet up analysis" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE.html#failure_value", - "title": "FAILURE_VALUE", - "section": "FAILURE_VALUE", - "text": "FAILURE_VALUE" + "objectID": "examples/gallery_examples/013_thermal_example", + "href": "examples/gallery_examples/013_thermal_example.html#initialize-the-model", + "title": "Thermal analysis > Initialize the model", + "section": "Initialize the model", + "text": "Initialize the composite model with the composite files and server.\nThe model provides access to the mesh, results, lay-up, and materials.\nInitialize the model" + }, + { + "objectID": "examples/gallery_examples/013_thermal_example", + "href": "examples/gallery_examples/013_thermal_example.html#get-temperature-results", + "title": "Thermal analysis > Get temperature results", + "section": "Get temperature results", + "text": "The temperatures are stored under structural_temperature.\nGet temperature results\nstructural_temperature" + }, + { + "objectID": "examples/gallery_examples/013_thermal_example", + "href": "examples/gallery_examples/013_thermal_example.html#get-ply-results", + "title": "Thermal analysis > Get ply results", + "section": "Get ply results", + "text": "Extract the ply-wise results by passing the ply name\nto the function get_ply_wise_data().\nGet ply results\nget_ply_wise_data()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE.html#ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE", - "title": "FAILURE_VALUE > FAILURE_VALUE > FAILURE_VALUE", - "section": "FAILURE_VALUE > FAILURE_VALUE", - "text": "FailureOutput.FAILURE_VALUE = 1\n\n" + "objectID": "examples/gallery_examples/013_thermal_example", + "href": "examples/gallery_examples/013_thermal_example.html#get-results-by-material", + "title": "Thermal analysis > Get results by material", + "section": "Get results by material", + "text": "You can filter the results by material.\nIn this example, the element-wise maximum temperature\nis extracted for the material Honeycomb Aluminum Alloy.\nTotal running time of the script: (0 minutes 3.942 seconds)\nDownload Jupyter notebook: 013_thermal_example.ipynb\nDownload Python source code: 013_thermal_example.py\nDownload zipped: 013_thermal_example.zip\nGallery generated by Sphinx-Gallery\nGet results by material\nDownload Jupyter notebook: 013_thermal_example.ipynb\nDownload Python source code: 013_thermal_example.py\nDownload zipped: 013_thermal_example.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.smax", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.smax.html#smax", + "title": "smax", + "section": "smax", + "text": "smax" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.active.html#ansys.dpf.composites.failure_criteria.PuckCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property PuckCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.smax", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.smax.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.smax", + "title": "smax > smax > smax", + "section": "smax > smax", + "text": "FailureModeEnum.smax = 201\n\n" }, { - "objectID": "intro", - "href": "intro.html#getting-started", - "title": "Getting started", - "section": "Getting started", - "text": "Getting started" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "intro", - "href": "intro.html#installation", - "title": "Getting started > Installation", - "section": "Installation", - "text": "PyDPF Composites supports Ansys version 2023 R1 and later. Make sure you have a licensed copy of Ansys installed. See\nCompatibility to understand which ansys-dpf-composites version corresponds to which Ansys version.\nInstall the ansys-dpf-composites package with pip:\nTo install the optional dependencies used in the examples, add the [examples] suffix when installing the package:\nSpecific versions can be installed by specifying the version in the pip command. For example, Ansys 2023 R1 requires ansys-dpf-composites version 0.1.0:\nYou should use a virtual environment,\nbecause it keeps Python packages isolated from your system Python.\nInstallation\nansys-dpf-composites\nansys-dpf-composites\npip\n[examples]" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.name.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property ShearCrimpingCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "intro", - "href": "intro.html#examples", - "title": "Getting started > Examples", - "section": "Examples", - "text": "The examples/index section provides these basic examples for getting started:\nsphx_glr_examples_gallery_examples_001_failure_operator_example.py\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py\nAt the end of each example, there is a button for downloading the example’s Python source code.\nInput files, such as the results file and composite definition, are downloaded from a Git\nrepository when running the example.\nFor larger models, initializing the CompositeModel class can be slow because it\nautomatically creates many different providers that are not needed in all workflows.\nConsider using the Lay-up information classes directly.\nExamples\nCompositeModel" + "objectID": "api/sampling_point", + "href": "api/sampling_point.html#sampling-point", + "title": "Sampling point", + "section": "Sampling point", + "text": "SamplingPoint(*args, **kwargs)\nImplements the Sampling Point object that wraps the DPF sampling point operator.\nSamplingPointFigure(figure, axes)\nProvides the sampling point figure and axes.\nFailureResult(mode, inverse_reserve_factor, ...)\nProvides the components of a failure result.\nSampling point\nSamplingPoint\nSampling Point\nSamplingPointFigure\nFailureResult" }, { - "objectID": "intro", - "href": "intro.html#start-from-a-local-ansys-workbench-project", - "title": "Getting started > Start from a local Ansys Workbench project", - "section": "Start from a local Ansys Workbench project", - "text": "To get started on a local Ansys Workbench project, first determine the result folder by\nright-clicking the solution object in Ansys Mechanical and selecting Open Solver Files Directory.\nThen call the get_composite_files_from_workbench_result_folder() function with this folder.\nThis code shows how to set up a project from Workbench, create a basic failure plot, and display\ndetailed output for a sampling point:\nStart from a local Ansys Workbench project\nget_composite_files_from_workbench_result_folder()" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_pos", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_pos.html#p22_pos", + "title": "p22_pos", + "section": "p22_pos", + "text": "Global inclination factor of the fracture plane \\perp \\perp for tension.\nfloat\np22_pos\nfloat" }, { - "objectID": "intro", - "href": "intro.html#compatibility", - "title": "Getting started > Compatibility", - "section": "Compatibility", - "text": "The following table shows which ansys-dpf-composites version is compatible with which server version (Ansys version). See Get DPF Docker image to get the pre-releases.\nBy default the DPF server is started from the latest Ansys installer. To choose a specific Ansys version or connect to an existing server, use the appropriate arguments for connect_to_or_start_server()\nServer version\nansys.dpf.composites Python module version\n9.0 (Ansys 2025 R1 pre0)\n0.3.0 and later\n8.1 (Ansys 2024 R2 pre1)\n0.3.0 and later\n8.0 (Ansys 2024 R2 pre0)\n0.3.0 and later\n7.0 (Ansys 2024 R1)\n0.3.0 and later\n7.0 (Ansys 2024 R1 pre0)\n0.3.0 and later\n6.2 (Ansys 2023 R2)\n0.2.0 and 0.3\n6.1 (Ansys 2023 R2 pre1)\n0.2.0 and 0.3\n6.0 (Ansys 2023 R2 pre0)\nNot available. The composites plugin is not part of the Ansys 2023 R2 pre0 release.\n5.0 (Ansys 2023 R1)\n0.1.0\nCompatibility\nansys-dpf-composites\nconnect_to_or_start_server()" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_pos", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_pos.html#ansys.dpf.composites.failure_criteria.PuckCriterion.p22_pos", + "title": "p22_pos > p22_pos > p22_pos", + "section": "p22_pos > p22_pos", + "text": "property PuckCriterion.p22_pos: float\n\nGlobal inclination factor of the fracture plane \\perp \\perp for tension.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "intro", - "href": "intro.html#getting-the-dpf-server-docker-image", - "title": "Getting started > Getting the DPF server Docker image", - "section": "Getting the DPF server Docker image", - "text": "Follow the steps described in the DPF documentation in the section Run DPF Server in A Docker Container.\nMake sure you also download the composites plugin (e.g ansys_dpf_composites_lin_v2024.1.pre0.zip).\nAfter following the preceding steps, you should have a running DPF Docker container that listens to port 50052.\nGetting the DPF server Docker image\nansys_dpf_composites_lin_v2024.1.pre0.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pma", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pma.html#pma", + "title": "pma", + "section": "pma", + "text": "Whether to activate the failure evaluation regarding matrix failure due to tension.\nbool\npma\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s12.html#s12", - "title": "s12", - "section": "s12", - "text": "Whether to activate the failure evaluation regarding the in-plane shear stress s12.\nbool\ns12\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pma", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pma.html#ansys.dpf.composites.failure_criteria.PuckCriterion.pma", + "title": "pma > pma > pma", + "section": "pma > pma", + "text": "property PuckCriterion.pma: bool\n\nWhether to activate the failure evaluation regarding matrix failure due to tension.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s12.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s12", - "title": "s12 > s12 > s12", - "section": "s12 > s12", - "text": "property MaxStressCriterion.s12: bool\n\nWhether to activate the failure evaluation regarding the in-plane shear stress s12.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmC", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmC.html#cmc", + "title": "cmC", + "section": "cmC", + "text": "cmC" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.MARGIN_OF_SAFETY", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.MARGIN_OF_SAFETY.html#margin_of_safety", - "title": "MARGIN_OF_SAFETY", - "section": "MARGIN_OF_SAFETY", - "text": "MARGIN_OF_SAFETY" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmC", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmC.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cmC", + "title": "cmC > cmC > cmC", + "section": "cmC > cmC", + "text": "FailureModeEnum.cmC = 1005\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.MARGIN_OF_SAFETY", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.MARGIN_OF_SAFETY.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.MARGIN_OF_SAFETY", - "title": "MARGIN_OF_SAFETY > MARGIN_OF_SAFETY > MARGIN_OF_SAFETY", - "section": "MARGIN_OF_SAFETY > MARGIN_OF_SAFETY", - "text": "FailureMeasureEnum.MARGIN_OF_SAFETY: str = 'safety_margin'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_interface_weakening_factor", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_interface_weakening_factor.html#puck_constants_interface_weakening_factor", + "title": "Puck_Constants_interface_weakening_factor", + "section": "Puck_Constants_interface_weakening_factor", + "text": "Puck_Constants_interface_weakening_factor" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES.html#shear_angles", - "title": "SHEAR_ANGLES", - "section": "SHEAR_ANGLES", - "text": "SHEAR_ANGLES" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_interface_weakening_factor", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_interface_weakening_factor.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_interface_weakening_factor", + "title": "Puck_Constants_interface_weakening_factor > Puck_Constants_interface_weakening_factor > Puck_Constants_interface_weakening_factor", + "section": "Puck_Constants_interface_weakening_factor > Puck_Constants_interface_weakening_factor", + "text": "MaterialProperty.Puck_Constants_interface_weakening_factor: str = 'interface_weakening_factor_puck_constants'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES.html#ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES", - "title": "SHEAR_ANGLES > SHEAR_ANGLES > SHEAR_ANGLES", - "section": "SHEAR_ANGLES > SHEAR_ANGLES", - "text": "LayerProperty.SHEAR_ANGLES = 2\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.wf.html#wf", + "title": "wf", + "section": "wf", + "text": "Weighting factor of the failure mode (wb or wt). The default is 0.5.\nfloat\nwf\n0.5\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.wf.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.wf", + "title": "wf > wf > wf", + "section": "wf > wf", + "text": "property FaceSheetWrinklingCriterion.wf: float\n\nWeighting factor of the failure mode (wb or wt). The default is 0.5.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.name.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property VonMisesCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pma", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pma.html#wf_pma", + "title": "wf_pma", + "section": "wf_pma", + "text": "Weighting factor of the matrix failure (pma) mode.\nfloat\nwf_pma\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.p", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.p.html#p", - "title": "p", - "section": "p", - "text": "p" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pma", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pma.html#ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pma", + "title": "wf_pma > wf_pma > wf_pma", + "section": "wf_pma > wf_pma", + "text": "property PuckCriterion.wf_pma: float\n\nWeighting factor of the matrix failure (pma) mode.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.p", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.p.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.p", - "title": "p > p > p", - "section": "p > p", - "text": "FailureModeEnum.p = 800\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K.html#thermal_conductivity_k", + "title": "Thermal_Conductivity_K", + "section": "Thermal_Conductivity_K", + "text": "Thermal_Conductivity_K" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZt.html#ezt", - "title": "eZt", - "section": "eZt", - "text": "Global strain limit in material direction 3.\nfloat\neZt\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K", + "title": "Thermal_Conductivity_K > Thermal_Conductivity_K > Thermal_Conductivity_K", + "section": "Thermal_Conductivity_K > Thermal_Conductivity_K", + "text": "MaterialProperty.Thermal_Conductivity_K: str = 'thermal_conductivity_isotropic'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZt.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZt", - "title": "eZt > eZt > eZt", - "section": "eZt > eZt", - "text": "property MaxStrainCriterion.eZt: float\n\nGlobal strain limit in material direction 3.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kf.html#kf", + "title": "kf", + "section": "kf", + "text": "Weighting factor of the face sheets for evaluation of the maximum allowable load. The default is 0 so the face sheet does not contribute to the allowable load. This property is valid for thin face sheets.\nfloat\nkf\n0\nfloat" }, { - "objectID": "examples/gallery_examples/008_assembly_example", - "href": "examples/gallery_examples/008_assembly_example.html#postprocess-an-assembly", - "title": "Postprocess an assembly", - "section": "Postprocess an assembly", - "text": "This example shows how to postprocess an assembly with multiple composite parts.\nThe assembly consists of a shell and solid composite model. The\nComposite Model class is used to access\nthe data of the different parts.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nPostprocess an assembly\nComposite Model\ncomposite_files_from_workbench_harmonic_analysis()" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kf.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kf", + "title": "kf > kf > kf", + "section": "kf > kf", + "text": "property ShearCrimpingCriterion.kf: float\n\nWeighting factor of the face sheets for evaluation of the maximum allowable load. The default is 0 so the face sheet does not contribute to the allowable load. This property is valid for thin face sheets.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/008_assembly_example", - "href": "examples/gallery_examples/008_assembly_example.html#set-up-analysis", - "title": "Postprocess an assembly > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nSet up analysis" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.plies", + "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.plies.html#plies", + "title": "plies", + "section": "plies", + "text": "plies" }, { - "objectID": "examples/gallery_examples/008_assembly_example", - "href": "examples/gallery_examples/008_assembly_example.html#configure-combined-failure-criterion", - "title": "Postprocess an assembly > Configure combined failure criterion", - "section": "Configure combined failure criterion", - "text": "Configure the combined failure crition.\nConfigure combined failure criterion" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.plies", + "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.plies.html#ansys.dpf.composites.composite_scope.CompositeScope.plies", + "title": "plies > plies > plies", + "section": "plies > plies", + "text": "CompositeScope.plies: Sequence[str] | None = None\n\n" }, { - "objectID": "examples/gallery_examples/008_assembly_example", - "href": "examples/gallery_examples/008_assembly_example.html#set-up-model", - "title": "Postprocess an assembly > Set up model", - "section": "Set up model", - "text": "Set up the composite model.\nSet up model" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.active.html#active", + "title": "active", + "section": "active", + "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.active.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property ShearCrimpingCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/008_assembly_example", - "href": "examples/gallery_examples/008_assembly_example.html#plot-irf", - "title": "Postprocess an assembly > Plot IRF", - "section": "Plot IRF", - "text": "Plot the maximum IRF per (solid) element.\nPlot IRF" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.write_data_for_full_element_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.write_data_for_full_element_scope.html#write_data_for_full_element_scope", + "title": "write_data_for_full_element_scope", + "section": "write_data_for_full_element_scope", + "text": "Whether to write the data for all element labels in the element scope.\nThis makes sense if an element scope is explicitly requested\nbut the actual scope where postprocessing has happened is smaller,\nperhaps due to ply scoping.\nwrite_data_for_full_element_scope" }, { - "objectID": "examples/gallery_examples/008_assembly_example", - "href": "examples/gallery_examples/008_assembly_example.html#plot-irf-on-the-reference-surface", - "title": "Postprocess an assembly > Plot IRF on the reference surface", - "section": "Plot IRF on the reference surface", - "text": "Plot the maximum IRF on the reference surface\nPlot IRF on the reference surface" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.write_data_for_full_element_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.write_data_for_full_element_scope.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.write_data_for_full_element_scope", + "title": "write_data_for_full_element_scope > write_data_for_full_element_scope > write_data_for_full_element_scope", + "section": "write_data_for_full_element_scope > write_data_for_full_element_scope", + "text": "ResultDefinitionScope.write_data_for_full_element_scope: bool = True\n\nWhether to write the data for all element labels in the element scope.\n\nThis makes sense if an element scope is explicitly requested\nbut the actual scope where postprocessing has happened is smaller,\nperhaps due to ply scoping.\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/008_assembly_example", - "href": "examples/gallery_examples/008_assembly_example.html#get-element-information", - "title": "Postprocess an assembly > Get element information", - "section": "Get element information", - "text": "In the assembly, two composite definitions exist: one with a “shell” label\nand one with a “solid” label. For DPF Server versions earlier than 7.0,\nthe lay-up properties must be queried with the correct composite definition label. The code\nfollowing gets element information for all layered elements.\nFor DPF Server versions 7.0 and later, element information can be retrieved directly.\nTotal running time of the script: (0 minutes 6.821 seconds)\nDownload Jupyter notebook: 008_assembly_example.ipynb\nDownload Python source code: 008_assembly_example.py\nDownload zipped: 008_assembly_example.zip\nGallery generated by Sphinx-Gallery\nGet element information\nDownload Jupyter notebook: 008_assembly_example.ipynb\nDownload Python source code: 008_assembly_example.py\nDownload zipped: 008_assembly_example.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.c.html#c", + "title": "c", + "section": "c", + "text": "c" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider.html#result_info_provider", - "title": "result_info_provider", - "section": "result_info_provider", - "text": "Get result_info_provider.\nOperator\nresult_info_provider\nOperator" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.c", + "title": "c > c > c", + "section": "c > c", + "text": "FailureModeEnum.c = 1000\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider.html#ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider", - "title": "result_info_provider > result_info_provider > result_info_provider", - "section": "result_info_provider > result_info_provider", - "text": "property MaterialOperators.result_info_provider: Operator\n\nGet result_info_provider.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.html#puckcriterion", + "title": "PuckCriterion", + "section": "PuckCriterion", + "text": "Defines the Puck failure criterion for UD reinforced materials.\npf (bool, default: True) – Whether to activate the failure evaluation regarding fiber failure.\npma (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure due to tension.\npmb (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure due to compression.\npmc (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure due to shear failure.\npd (bool, default: False) – Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used. The latter one also supports the failure mode delamination. Use 1 for a simplified Puck criterion.\nwf_pf (float, default: 1.0) – Weighting factor of the fiber failure (pf) mode.\nwf_pma (float, default: 1.0) – Weighting factor of the matrix failure (pma) mode.\nwf_pmb (float, default: 1.0) – Weighting factor of the matrix failure (pmb) mode.\nwf_pmc (float, default: 1.0) – Weighting factor of the matrix failure (pmc) mode.\nwf_pd (float, default: 1.0) – Weighting factor of the delamination failure (pd) mode.\ncfps (bool, default: True) – Whether to consider inter-fiber strength reduction due to fiber parallel stresses.\ns (float, default: 0.5) – Specifies the effect of fiber parallel stresses regarding inter-fiber failure. s = [0, 1) and the default is 0.5.\nm – Specifies the effect of fiber parallel stresses regarding inter-fiber failure. M = [0, 1). The default is 0.5.\ninterface_weakening_factor (float, default: 0.8) – Multiplicator for the interlaminar strength if failure mode pd is active. The default is 0.8.\nforce_global_constants (bool, default: False) – Whether to use global constants instead of the material-wise properties.\np21_neg (float, default: 0.275) – Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for compression.\np21_pos (float, default: 0.325) – Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.,\np22_neg (float, default: 0.225) – Global inclination factor of the fracture plane \\perp \\perp for compression.\np22_pos (float, default: 0.225) – Global inclination factor of the fracture plane \\perp \\perp for tension.\nPuckCriterion.to_dict()\n\nPuckCriterion.to_json()\n\nPuckCriterion.M\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure.\nPuckCriterion.active\nThe failure criterion is suppressed if active is False.\nPuckCriterion.cfps\nWhether to consider inter-fiber strength reduction due to fiber parallel stresses.\nPuckCriterion.dim\nWhether the 2D or 3D formulation of the criterion is used.\nPuckCriterion.force_global_constants\nWhether to use global constants instead of the material-wise properties.\nPuckCriterion.interface_weakening_factor\nMultiplicator for the interlaminar strength if failure mode pd is active.\nPuckCriterion.name\nName of the failure criterion.\nPuckCriterion.p21_neg\nGlobal inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for compression.\nPuckCriterion.p21_pos\nGlobal inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.\nPuckCriterion.p22_neg\nGlobal inclination factor of the fracture plane \\perp \\perp for compression.\nPuckCriterion.p22_pos\nGlobal inclination factor of the fracture plane \\perp \\perp for tension.\nPuckCriterion.pd\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\nPuckCriterion.pf\nWhether to activate the failure evaluation regarding fiber failure.\nPuckCriterion.pma\nWhether to activate the failure evaluation regarding matrix failure due to tension.\nPuckCriterion.pmb\nWhether to activate the failure evaluation regarding matrix failure due to compression.\nPuckCriterion.pmc\nWhether to activate the failure evaluation regarding matrix failure due to shear failure.\nPuckCriterion.s\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure.\nPuckCriterion.wf_pd\nWeighting factor of the delamination failure (pd) mode.\nPuckCriterion.wf_pf\nWeighting factor of the fiber failure (pf) mode.\nPuckCriterion.wf_pma\nWeighting factor of the matrix failure (pma) mode.\nPuckCriterion.wf_pmb\nWeighting factor of the matrix failure (pmb) mode.\nPuckCriterion.wf_pmc\nWeighting factor of the matrix failure (pmc) mode.\nPuckCriterion\nbool\nTrue\nbool\nTrue\nbool\nTrue\nbool\nTrue\nbool\nFalse\nint\n2\n1\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nbool\nTrue\nfloat\n0.5\n0.5\n0.5\nfloat\n0.8\npd\n0.8\nbool\nFalse\nfloat\n0.275\nfloat\n0.325\nfloat\n0.225\nfloat\n0.225\nPuckCriterion.to_dict\nPuckCriterion.to_json\nPuckCriterion.M\nPuckCriterion.active\nPuckCriterion.cfps\nPuckCriterion.dim\nPuckCriterion.force_global_constants\nPuckCriterion.interface_weakening_factor\npd\nPuckCriterion.name\nPuckCriterion.p21_neg\nPuckCriterion.p21_pos\nPuckCriterion.p22_neg\nPuckCriterion.p22_pos\nPuckCriterion.pd\nPuckCriterion.pf\nPuckCriterion.pma\nPuckCriterion.pmb\nPuckCriterion.pmc\nPuckCriterion.s\nPuckCriterion.wf_pd\nPuckCriterion.wf_pf\nPuckCriterion.wf_pma\nPuckCriterion.wf_pmb\nPuckCriterion.wf_pmc" }, { - "objectID": "examples/gallery_examples/001_failure_operator_example", - "href": "examples/gallery_examples/001_failure_operator_example.html#composite-failure-analysis", - "title": "Composite failure analysis", - "section": "Composite failure analysis", - "text": "This example shows how to analyze a composite structure by a combined failure criterion.\nThe failure operator of DPF Composites computes the minimum and maximum failure values\nand failure modes of a combined failure criterion. A combined failure criterion is a selection of\nfailure criteria such as Puck, Tsai-Wu, or face sheet wrinkling. For a list of all\nfailure criteria, see failure_criteria.\nThe Combined Failure Criterion class\nallows you to assess different type of materials and failure modes at once.\nThe scoping enables you to evaluate the minimum and maximum failures per element\nor select a list of materials or plies.\nWhen using a Workbench project,\nuse the get_composite_files_from_workbench_result_folder()\nmethod to obtain the input files.\nComposite failure analysis\nCombined Failure Criterion\nget_composite_files_from_workbench_result_folder()" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.html#ansys.dpf.composites.failure_criteria.PuckCriterion", + "title": "PuckCriterion > PuckCriterion > PuckCriterion", + "section": "PuckCriterion > PuckCriterion", + "text": "class ansys.dpf.composites.failure_criteria.PuckCriterion(*, pf=True, pma=True, pmb=True, pmc=True, pd=False, dim=2, wf_pf=1.0, wf_pma=1.0, wf_pmb=1.0, wf_pmc=1.0, wf_pd=1.0, cfps=True, s=0.5, M=0.5, interface_weakening_factor=0.8, force_global_constants=False, p21_neg=0.275, p21_pos=0.325, p22_neg=0.225, p22_pos=0.225)\n\nDefines the Puck failure criterion for UD reinforced materials.\n\nParameters\n\npf (bool, default: True) – Whether to activate the failure evaluation regarding fiber failure.\n\npma (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure due to tension.\n\npmb (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure due to compression.\n\npmc (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure due to shear failure.\n\npd (bool, default: False) – Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used. The latter one also supports the failure mode delamination. Use 1 for a simplified Puck criterion.\n\nwf_pf (float, default: 1.0) – Weighting factor of the fiber failure (pf) mode.\n\nwf_pma (float, default: 1.0) – Weighting factor of the matrix failure (pma) mode.\n\nwf_pmb (float, default: 1.0) – Weighting factor of the matrix failure (pmb) mode.\n\nwf_pmc (float, default: 1.0) – Weighting factor of the matrix failure (pmc) mode.\n\nwf_pd (float, default: 1.0) – Weighting factor of the delamination failure (pd) mode.\n\ncfps (bool, default: True) – Whether to consider inter-fiber strength reduction due to fiber parallel stresses.\n\ns (float, default: 0.5) – Specifies the effect of fiber parallel stresses regarding inter-fiber failure. s = [0, 1) and the default is 0.5.\n\nm – Specifies the effect of fiber parallel stresses regarding inter-fiber failure. M = [0, 1). The default is 0.5.\n\ninterface_weakening_factor (float, default: 0.8) – Multiplicator for the interlaminar strength if failure mode pd is active. The default is 0.8.\n\nforce_global_constants (bool, default: False) – Whether to use global constants instead of the material-wise properties.\n\np21_neg (float, default: 0.275) – Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for compression.\n\np21_pos (float, default: 0.325) – Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.,\n\np22_neg (float, default: 0.225) – Global inclination factor of the fracture plane \\perp \\perp for compression.\n\np22_pos (float, default: 0.225) – Global inclination factor of the fracture plane \\perp \\perp for tension.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nPuckCriterion.to_dict()\n\n\n\nPuckCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nPuckCriterion.M\n\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure.\n\nPuckCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nPuckCriterion.cfps\n\nWhether to consider inter-fiber strength reduction due to fiber parallel stresses.\n\nPuckCriterion.dim\n\nWhether the 2D or 3D formulation of the criterion is used.\n\nPuckCriterion.force_global_constants\n\nWhether to use global constants instead of the material-wise properties.\n\nPuckCriterion.interface_weakening_factor\n\nMultiplicator for the interlaminar strength if failure mode pd is active.\n\nPuckCriterion.name\n\nName of the failure criterion.\n\nPuckCriterion.p21_neg\n\nGlobal inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for compression.\n\nPuckCriterion.p21_pos\n\nGlobal inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.\n\nPuckCriterion.p22_neg\n\nGlobal inclination factor of the fracture plane \\perp \\perp for compression.\n\nPuckCriterion.p22_pos\n\nGlobal inclination factor of the fracture plane \\perp \\perp for tension.\n\nPuckCriterion.pd\n\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\nPuckCriterion.pf\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nPuckCriterion.pma\n\nWhether to activate the failure evaluation regarding matrix failure due to tension.\n\nPuckCriterion.pmb\n\nWhether to activate the failure evaluation regarding matrix failure due to compression.\n\nPuckCriterion.pmc\n\nWhether to activate the failure evaluation regarding matrix failure due to shear failure.\n\nPuckCriterion.s\n\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure.\n\nPuckCriterion.wf_pd\n\nWeighting factor of the delamination failure (pd) mode.\n\nPuckCriterion.wf_pf\n\nWeighting factor of the fiber failure (pf) mode.\n\nPuckCriterion.wf_pma\n\nWeighting factor of the matrix failure (pma) mode.\n\nPuckCriterion.wf_pmb\n\nWeighting factor of the matrix failure (pmb) mode.\n\nPuckCriterion.wf_pmc\n\nWeighting factor of the matrix failure (pmc) mode.\n\n" }, { - "objectID": "examples/gallery_examples/001_failure_operator_example", - "href": "examples/gallery_examples/001_failure_operator_example.html#set-up-analysis", - "title": "Composite failure analysis > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nSet up analysis" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.RST", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.RST.html#rst", + "title": "RST", + "section": "RST", + "text": "RST" }, { - "objectID": "examples/gallery_examples/001_failure_operator_example", - "href": "examples/gallery_examples/001_failure_operator_example.html#configure-combined-failure-criterion", - "title": "Composite failure analysis > Configure combined failure criterion", - "section": "Configure combined failure criterion", - "text": "Configure the combined failure criterion.\nConfigure combined failure criterion" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.RST", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.RST.html#ansys.dpf.composites.layup_info.LayupModelContextType.RST", + "title": "RST > RST > RST", + "section": "RST > RST", + "text": "LayupModelContextType.RST = 2\n\n" }, { - "objectID": "examples/gallery_examples/001_failure_operator_example", - "href": "examples/gallery_examples/001_failure_operator_example.html#set-up-model-and-evaluate-failures", - "title": "Composite failure analysis > Set up model and evaluate failures", - "section": "Set up model and evaluate failures", - "text": "Set up the composite model.\nEvaluate failures for the entire model\nScope failure evaluation to a certain element scope.\nScope failure evaluation by plies.\nTotal running time of the script: (0 minutes 19.408 seconds)\nDownload Jupyter notebook: 001_failure_operator_example.ipynb\nDownload Python source code: 001_failure_operator_example.py\nDownload zipped: 001_failure_operator_example.zip\nGallery generated by Sphinx-Gallery\nSet up model and evaluate failures\nDownload Jupyter notebook: 001_failure_operator_example.ipynb\nDownload Python source code: 001_failure_operator_example.py\nDownload zipped: 001_failure_operator_example.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_yz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_yz.html#tsai_wu_constant_yz", + "title": "Tsai_Wu_Constant_yz", + "section": "Tsai_Wu_Constant_yz", + "text": "Tsai_Wu_Constant_yz" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles.html#get_layer_shear_angles", - "title": "get_layer_shear_angles", - "section": "get_layer_shear_angles", - "text": "Get shear angle for all layers. Returns None if element is not layered.\nelement_id (int) – Element Id/Label\nOptional[ndarray[Any, dtype[float64]]]\nget_layer_shear_angles\nint\nOptional\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_yz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_yz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_yz", + "title": "Tsai_Wu_Constant_yz > Tsai_Wu_Constant_yz > Tsai_Wu_Constant_yz", + "section": "Tsai_Wu_Constant_yz > Tsai_Wu_Constant_yz", + "text": "MaterialProperty.Tsai_Wu_Constant_yz: str = 'coupling_coef_yz_tsai_wu'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles", - "title": "get_layer_shear_angles > get_layer_shear_angles > get_layer_shear_angles", - "section": "get_layer_shear_angles > get_layer_shear_angles", - "text": "LayupPropertiesProvider.get_layer_shear_angles(element_id)\n\nGet shear angle for all layers. Returns None if element is not layered.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[ndarray[Any, dtype[float64]]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s13", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s13.html#s13", + "title": "s13", + "section": "s13", + "text": "Out-of-plane shear stresses s13 of each ply.\nndarray[Any, dtype[float64]]\ns13\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.expression", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.expression.html#expression", - "title": "expression", - "section": "expression", - "text": "Type of the result. The supported type is \"composite_failure\".\nstr\nexpression\n\"composite_failure\"\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s13", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s13.html#ansys.dpf.composites.sampling_point.SamplingPoint.s13", + "title": "s13 > s13 > s13", + "section": "s13 > s13", + "text": "property SamplingPoint.s13: ndarray[Any, dtype[float64]]\n\nOut-of-plane shear stresses s13 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.expression", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.expression.html#ansys.dpf.composites.result_definition.ResultDefinition.expression", - "title": "expression > expression > expression", - "section": "expression > expression", - "text": "property ResultDefinition.expression: str\n\nType of the result. The supported type is \"composite_failure\".\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_json.html#to_json", + "title": "to_json", + "section": "to_json", + "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11.html#tensor11", - "title": "TENSOR11", - "section": "TENSOR11", - "text": "TENSOR11" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_json.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_json", + "title": "to_json > to_json > to_json", + "section": "to_json > to_json", + "text": "TsaiHillCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11", - "title": "TENSOR11 > TENSOR11 > TENSOR11", - "section": "TENSOR11 > TENSOR11", - "text": "Sym3x3TensorComponent.TENSOR11 = 0\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_ratio", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_ratio.html#larc_constants_fracture_toughness_ratio", + "title": "Larc_Constants_fracture_toughness_ratio", + "section": "Larc_Constants_fracture_toughness_ratio", + "text": "Larc_Constants_fracture_toughness_ratio" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.html#resultdefinitionscope", - "title": "ResultDefinitionScope", - "section": "ResultDefinitionScope", - "text": "Provides the result definition scope.\nResultDefinitionScope.mapping_file\nPath to the mapping file for all element labels in the element scope.\nResultDefinitionScope.write_data_for_full_element_scope\nWhether to write the data for all element labels in the element scope.\nResultDefinitionScope.composite_definition\n\nResultDefinitionScope.element_scope\n\nResultDefinitionScope.ply_scope\n\nResultDefinitionScope.named_selection_scope\nAssembly files that define the mapping of the labels.\nResultDefinitionScope\nResultDefinitionScope.mapping_file\nResultDefinitionScope.write_data_for_full_element_scope\nResultDefinitionScope.composite_definition\nResultDefinitionScope.element_scope\nResultDefinitionScope.ply_scope\nResultDefinitionScope.named_selection_scope" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_ratio", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_ratio.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_ratio", + "title": "Larc_Constants_fracture_toughness_ratio > Larc_Constants_fracture_toughness_ratio > Larc_Constants_fracture_toughness_ratio", + "section": "Larc_Constants_fracture_toughness_ratio > Larc_Constants_fracture_toughness_ratio", + "text": "MaterialProperty.Larc_Constants_fracture_toughness_ratio: str = 'fracture_toughness_ratio_larc_constants'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.html#ansys.dpf.composites.result_definition.ResultDefinitionScope", - "title": "ResultDefinitionScope > ResultDefinitionScope > ResultDefinitionScope", - "section": "ResultDefinitionScope > ResultDefinitionScope", - "text": "class ansys.dpf.composites.result_definition.ResultDefinitionScope(composite_definition, element_scope=, ply_scope=, named_selection_scope=, mapping_file=None, write_data_for_full_element_scope=True)\n\nProvides the result definition scope.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nResultDefinitionScope.mapping_file\n\nPath to the mapping file for all element labels in the element scope.\n\nResultDefinitionScope.write_data_for_full_element_scope\n\nWhether to write the data for all element labels in the element scope.\n\nResultDefinitionScope.composite_definition\n\n\n\nResultDefinitionScope.element_scope\n\n\n\nResultDefinitionScope.ply_scope\n\n\n\nResultDefinitionScope.named_selection_scope\n\nAssembly files that define the mapping of the labels.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3.html#wf_s3", + "title": "wf_s3", + "section": "wf_s3", + "text": "Weighting factor of the failure mode s3.\nfloat\nwf_s3\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.as", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.as.html#as", - "title": "as", - "section": "as", - "text": "as" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3", + "title": "wf_s3 > wf_s3 > wf_s3", + "section": "wf_s3 > wf_s3", + "text": "property MaxStressCriterion.wf_s3: float\n\nWeighting factor of the failure mode s3.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.as", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.as.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.as", - "title": "as > as > as", - "section": "as > as", - "text": "FailureModeEnum.as = 1201\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R11", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R11.html#hill_yield_criterion_r11", + "title": "Hill_Yield_Criterion_R11", + "section": "Hill_Yield_Criterion_R11", + "text": "Hill_Yield_Criterion_R11" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.composite", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.composite.html#composite", - "title": "composite", - "section": "composite", - "text": "composite" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R11", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R11.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R11", + "title": "Hill_Yield_Criterion_R11 > Hill_Yield_Criterion_R11 > Hill_Yield_Criterion_R11", + "section": "Hill_Yield_Criterion_R11 > Hill_Yield_Criterion_R11", + "text": "MaterialProperty.Hill_Yield_Criterion_R11: str = 'yield_stress_ratio_x_hill_criterion'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.composite", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.composite.html#ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.composite", - "title": "composite > composite > composite", - "section": "composite > composite", - "text": "ContinuousFiberCompositesFiles.composite: dict[str, CompositeDefinitionFiles]\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.composite_definition", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.composite_definition.html#composite_definition", + "title": "composite_definition", + "section": "composite_definition", + "text": "composite_definition" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.composite_definition", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.composite_definition.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.composite_definition", + "title": "composite_definition > composite_definition > composite_definition", + "section": "composite_definition > composite_definition", + "text": "ResultDefinitionScope.composite_definition: str | PathLike[str]\n\n" }, { "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hf", @@ -4759,1027 +4528,1013 @@ "section": "hf > hf", "text": "FailureModeEnum.hf = 601\n\n" }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.max_chunk_size", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.max_chunk_size.html#max_chunk_size", - "title": "max_chunk_size", - "section": "max_chunk_size", - "text": "Maximum chunk size (number of elements) for the result evaluation.\nSmall chunks reduce the maximum peak of memory, but too many chunks causes\nsome overhead. The default is 50,000. Use -1 to disable chunking.\nint\nmax_chunk_size\n-1\nint" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.max_chunk_size", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.max_chunk_size.html#ansys.dpf.composites.result_definition.ResultDefinition.max_chunk_size", - "title": "max_chunk_size > max_chunk_size > max_chunk_size", - "section": "max_chunk_size > max_chunk_size", - "text": "property ResultDefinition.max_chunk_size: int\n\nMaximum chunk size (number of elements) for the result evaluation.\n\nSmall chunks reduce the maximum peak of memory, but too many chunks causes\nsome overhead. The default is 50,000. Use -1 to disable chunking.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "CuntzeCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.material_support", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.material_support.html#material_support", - "title": "material_support", - "section": "material_support", - "text": "material_support" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.material_support", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.material_support.html#ansys.dpf.composites.data_sources.CompositeDataSources.material_support", - "title": "material_support > material_support > material_support", - "section": "material_support > material_support", - "text": "CompositeDataSources.material_support: DataSources\n\n" + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s23.html#s23", + "title": "s23", + "section": "s23", + "text": "Whether to activate the failure evaluation regarding the interlaminar shear stress s23.\nbool\ns23\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.wf.html#wf", - "title": "wf", - "section": "wf", - "text": "Weighting factor of this failure criterion.\nfloat\nwf\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s23.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s23", + "title": "s23 > s23 > s23", + "section": "s23 > s23", + "text": "property MaxStressCriterion.s23: bool\n\nWhether to activate the failure evaluation regarding the interlaminar shear stress s23.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.wf.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.wf", - "title": "wf > wf > wf", - "section": "wf > wf", - "text": "property TsaiHillCriterion.wf: float\n\nWeighting factor of this failure criterion.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.engineering_data", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.engineering_data.html#engineering_data", + "title": "engineering_data", + "section": "engineering_data", + "text": "engineering_data" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e12.html#e12", - "title": "e12", - "section": "e12", - "text": "e12" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.engineering_data", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.engineering_data.html#ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.engineering_data", + "title": "engineering_data > engineering_data > engineering_data", + "section": "engineering_data > engineering_data", + "text": "ContinuousFiberCompositesFiles.engineering_data: str | PathLike[str]\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e12.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e12", - "title": "e12 > e12 > e12", - "section": "e12 > e12", - "text": "FailureModeEnum.e12 = 140\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.html#hashincriterion", + "title": "HashinCriterion", + "section": "HashinCriterion", + "text": "Defines the Hashin failure criterion for UD reinforced materials.\nhf (bool, default: True) – Whether to activate the failure evaluation regarding fiber failure.\nhm (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure.\nhd (bool, default: False) – Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used. The latter one also supports the failure mode delamination.\nwf_hf (float, default: 1.0) – Weighting factor of the fiber failure (hf) mode.\nwf_hm (float, default: 1.0) – Weighting factor of the matrix failure (hm) mode.\nwf_hd (float, default: 1.0) – Weighting factor of the delamination (hd) mode.\nHashinCriterion.to_dict()\n\nHashinCriterion.to_json()\n\nHashinCriterion.active\nThe failure criterion is suppressed if active is False.\nHashinCriterion.dim\nWhether the 2D or 3D formulation of the criterion is used.\nHashinCriterion.hd\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\nHashinCriterion.hf\nWhether to activate the failure evaluation regarding fiber failure.\nHashinCriterion.hm\nWhether to activate the failure evaluation regarding matrix failure.\nHashinCriterion.name\nName of the failure criterion.\nHashinCriterion.wf_hd\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\nHashinCriterion.wf_hf\nWhether to activate the failure evaluation regarding fiber failure.\nHashinCriterion.wf_hm\nWhether to activate the failure evaluation regarding matrix failure.\nHashinCriterion\nbool\nTrue\nbool\nTrue\nbool\nFalse\nint\n2\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nHashinCriterion.to_dict\nHashinCriterion.to_json\nHashinCriterion.active\nHashinCriterion.dim\nHashinCriterion.hd\nHashinCriterion.hf\nHashinCriterion.hm\nHashinCriterion.name\nHashinCriterion.wf_hd\nHashinCriterion.wf_hf\nHashinCriterion.wf_hm" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.failure_modes", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.failure_modes.html#failure_modes", - "title": "failure_modes", - "section": "failure_modes", - "text": "Critical failure mode of each ply.\nSequence[str]\nfailure_modes\nSequence\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.html#ansys.dpf.composites.failure_criteria.HashinCriterion", + "title": "HashinCriterion > HashinCriterion > HashinCriterion", + "section": "HashinCriterion > HashinCriterion", + "text": "class ansys.dpf.composites.failure_criteria.HashinCriterion(*, hf=True, hm=True, hd=False, dim=2, wf_hf=1.0, wf_hm=1.0, wf_hd=1.0)\n\nDefines the Hashin failure criterion for UD reinforced materials.\n\nParameters\n\nhf (bool, default: True) – Whether to activate the failure evaluation regarding fiber failure.\n\nhm (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure.\n\nhd (bool, default: False) – Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used. The latter one also supports the failure mode delamination.\n\nwf_hf (float, default: 1.0) – Weighting factor of the fiber failure (hf) mode.\n\nwf_hm (float, default: 1.0) – Weighting factor of the matrix failure (hm) mode.\n\nwf_hd (float, default: 1.0) – Weighting factor of the delamination (hd) mode.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nHashinCriterion.to_dict()\n\n\n\nHashinCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nHashinCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nHashinCriterion.dim\n\nWhether the 2D or 3D formulation of the criterion is used.\n\nHashinCriterion.hd\n\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\nHashinCriterion.hf\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nHashinCriterion.hm\n\nWhether to activate the failure evaluation regarding matrix failure.\n\nHashinCriterion.name\n\nName of the failure criterion.\n\nHashinCriterion.wf_hd\n\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\nHashinCriterion.wf_hf\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nHashinCriterion.wf_hm\n\nWhether to activate the failure evaluation regarding matrix failure.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.failure_modes", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.failure_modes.html#ansys.dpf.composites.sampling_point.SamplingPoint.failure_modes", - "title": "failure_modes > failure_modes > failure_modes", - "section": "failure_modes > failure_modes", - "text": "property SamplingPoint.failure_modes: Sequence[str]\n\nCritical failure mode of each ply.\n\nReturn type\n\nSequence[str]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.elements", + "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.elements.html#elements", + "title": "elements", + "section": "elements", + "text": "elements" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pf.html#pf", - "title": "pf", - "section": "pf", - "text": "Whether to activate the failure evaluation regarding fiber failure.\nbool\npf\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.elements", + "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.elements.html#ansys.dpf.composites.composite_scope.CompositeScope.elements", + "title": "elements > elements > elements", + "section": "elements > elements", + "text": "CompositeScope.elements: Sequence[int] | None = None\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pf.html#ansys.dpf.composites.failure_criteria.PuckCriterion.pf", - "title": "pf > pf > pf", - "section": "pf > pf", - "text": "property PuckCriterion.pf: bool\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.get_element_info_provider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.get_element_info_provider.html#get_element_info_provider", + "title": "get_element_info_provider", + "section": "get_element_info_provider", + "text": "Get ElementInfoProvider Object.\nmesh (MeshedRegion)\nstream_provider_or_data_source (Operator | DataSources) – dpf stream provider or dpf data source\nmaterial_provider (Optional[Operator], default: None) – DPF operator that provides material information.\nno_bounds_checks (bool, default: False) – Disable bounds checks. Improves\nperformance but can result in cryptic error messages\nElementInfoProvider\nEither a data_source or a stream_provider is required\nget_element_info_provider\nElementInfoProvider\nMeshedRegion\nOperator\nDataSources\nOptional\nOperator\nNone\nbool\nFalse" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_SOLID_ELEMENT_ID", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_SOLID_ELEMENT_ID.html#max_solid_element_id", - "title": "MAX_SOLID_ELEMENT_ID", - "section": "MAX_SOLID_ELEMENT_ID", - "text": "MAX_SOLID_ELEMENT_ID" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.get_element_info_provider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.get_element_info_provider.html#ansys.dpf.composites.layup_info.get_element_info_provider", + "title": "get_element_info_provider > get_element_info_provider > get_element_info_provider", + "section": "get_element_info_provider > get_element_info_provider", + "text": "ansys.dpf.composites.layup_info.get_element_info_provider(mesh, stream_provider_or_data_source, material_provider=None, no_bounds_checks=False)\n\nGet ElementInfoProvider Object.\n\nParameters\n\nmesh (MeshedRegion)\n\nstream_provider_or_data_source (Operator | DataSources) – dpf stream provider or dpf data source\n\nmaterial_provider (Optional[Operator], default: None) – DPF operator that provides material information.\n\nno_bounds_checks (bool, default: False) – Disable bounds checks. Improves\nperformance but can result in cryptic error messages\n\nReturn type\n\nElementInfoProvider\n\nNotes\n\nEither a data_source or a stream_provider is required\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_SOLID_ELEMENT_ID", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_SOLID_ELEMENT_ID.html#ansys.dpf.composites.constants.FailureOutput.MAX_SOLID_ELEMENT_ID", - "title": "MAX_SOLID_ELEMENT_ID > MAX_SOLID_ELEMENT_ID > MAX_SOLID_ELEMENT_ID", - "section": "MAX_SOLID_ELEMENT_ID > MAX_SOLID_ELEMENT_ID", - "text": "FailureOutput.MAX_SOLID_ELEMENT_ID = 7\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G23", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G23.html#engineering_constants_g23", + "title": "Engineering_Constants_G23", + "section": "Engineering_Constants_G23", + "text": "Engineering_Constants_G23" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.html#materialmetadata", - "title": "MaterialMetadata", - "section": "MaterialMetadata", - "text": "Material metadata such as name and ply type.\ndpf_material_id (int) – Material index in the DPF materials container.\nmaterial_name (str) – Name of the material. Is empty if the name is not available.\nply_type (str | None) – Ply type. One of regular, woven, honeycomb_core,\nisotropic_homogeneous_core, orthotropic_homogeneous_core,\nisotropic, adhesive, undefined. Regular stands for uni-directional.\nNone if the DPF server older than 2025 R1 pre 0 (9.0).\nsolver_material_id (int | None) – Material index of the solver.\nNone if DPF server older than 2024 R1 pre 0 (8.0).\nMaterialMetadata.dpf_material_id\n\nMaterialMetadata.material_name\n\nMaterialMetadata.ply_type\n\nMaterialMetadata.solver_material_id\n\nMaterialMetadata\nMaterialMetadata.dpf_material_id\nMaterialMetadata.material_name\nMaterialMetadata.ply_type\nMaterialMetadata.solver_material_id" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G23", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G23.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G23", + "title": "Engineering_Constants_G23 > Engineering_Constants_G23 > Engineering_Constants_G23", + "section": "Engineering_Constants_G23 > Engineering_Constants_G23", + "text": "MaterialProperty.Engineering_Constants_G23: str = 'shear_modulus_yz'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.html#ansys.dpf.composites.layup_info.material_properties.MaterialMetadata", - "title": "MaterialMetadata > MaterialMetadata > MaterialMetadata", - "section": "MaterialMetadata > MaterialMetadata", - "text": "class ansys.dpf.composites.layup_info.material_properties.MaterialMetadata(dpf_material_id=0, material_name='', ply_type=None, solver_material_id=None)\n\nMaterial metadata such as name and ply type.\n\nParameters\n\ndpf_material_id (int) – Material index in the DPF materials container.\n\nmaterial_name (str) – Name of the material. Is empty if the name is not available.\n\nply_type (str | None) – Ply type. One of regular, woven, honeycomb_core,\nisotropic_homogeneous_core, orthotropic_homogeneous_core,\nisotropic, adhesive, undefined. Regular stands for uni-directional.\nNone if the DPF server older than 2025 R1 pre 0 (9.0).\n\nsolver_material_id (int | None) – Material index of the solver.\nNone if DPF server older than 2024 R1 pre 0 (8.0).\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nMaterialMetadata.dpf_material_id\n\n\n\nMaterialMetadata.material_name\n\n\n\nMaterialMetadata.ply_type\n\n\n\nMaterialMetadata.solver_material_id\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1t.html#e1t", + "title": "e1t", + "section": "e1t", + "text": "e1t" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_names", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_names.html#material_names", - "title": "material_names", - "section": "material_names", - "text": "Material name to DPF material ID map.\nThis property can be used to filter analysis plies\nor element layers by material name.\ndict[str, int]\nmaterial_names\ndict\nstr\nint" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e1t", + "title": "e1t > e1t > e1t", + "section": "e1t > e1t", + "text": "FailureModeEnum.e1t = 111\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_names", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_names.html#ansys.dpf.composites.composite_model.CompositeModel.material_names", - "title": "material_names > material_names > material_names", - "section": "material_names > material_names", - "text": "property CompositeModel.material_names: dict[str, int]\n\nMaterial name to DPF material ID map.\n\nThis property can be used to filter analysis plies\nor element layers by material name.\n\nReturn type\n\ndict[str, int]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R12", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R12.html#hill_yield_criterion_r12", + "title": "Hill_Yield_Criterion_R12", + "section": "Hill_Yield_Criterion_R12", + "text": "Hill_Yield_Criterion_R12" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vms", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vms.html#vms", - "title": "vms", - "section": "vms", - "text": "Whether to activate the von Mises stress criterion.\nbool\nvms\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R12", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R12.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R12", + "title": "Hill_Yield_Criterion_R12 > Hill_Yield_Criterion_R12 > Hill_Yield_Criterion_R12", + "section": "Hill_Yield_Criterion_R12 > Hill_Yield_Criterion_R12", + "text": "MaterialProperty.Hill_Yield_Criterion_R12: str = 'yield_stress_ratio_xy_hill_criterion'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vms", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vms.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.vms", - "title": "vms > vms > vms", - "section": "vms > vms", - "text": "property VonMisesCriterion.vms: bool\n\nWhether to activate the von Mises stress criterion.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.casefold", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.casefold.html#casefold", + "title": "casefold", + "section": "casefold", + "text": "Return a version of the string suitable for caseless comparisons.\ncasefold" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property.html#get_constant_property", - "title": "get_constant_property", - "section": "get_constant_property", - "text": "Get a constant material property.\nOnly constant properties are supported. Variable properties are evaluated at their\ndefault values.\nmaterial_property (MaterialProperty) – Material property.\ndpf_material_id (int64) – DPF material ID.\nmaterials_provider (Operator) – DPF Materials provider operator. This value is available from the\nCompositeModel.material_operators attribute.\nunit_system (Union[UnitSystem, Operator])\nfloat\nget_constant_property\nMaterialProperty\nint64\nOperator\nCompositeModel.material_operators\nUnion\nUnitSystem\nOperator\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.casefold", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.casefold.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.casefold", + "title": "casefold > casefold > casefold", + "section": "casefold > casefold", + "text": "FailureMeasureEnum.casefold(/)\n\nReturn a version of the string suitable for caseless comparisons.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property.html#ansys.dpf.composites.layup_info.material_properties.get_constant_property", - "title": "get_constant_property > get_constant_property > get_constant_property", - "section": "get_constant_property > get_constant_property", - "text": "ansys.dpf.composites.layup_info.material_properties.get_constant_property(material_property, dpf_material_id, materials_provider, unit_system)\n\nGet a constant material property.\n\nOnly constant properties are supported. Variable properties are evaluated at their\ndefault values.\n\nParameters\n\nmaterial_property (MaterialProperty) – Material property.\n\ndpf_material_id (int64) – DPF material ID.\n\nmaterials_provider (Operator) – DPF Materials provider operator. This value is available from the\nCompositeModel.material_operators attribute.\n\nunit_system (Union[UnitSystem, Operator])\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalpha", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalpha.html#isalpha", + "title": "isalpha", + "section": "isalpha", + "text": "Return True if the string is an alphabetic string, False otherwise.\nA string is alphabetic if all characters in the string are alphabetic and there\nis at least one character in the string.\nisalpha" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz.html#strain_limits_esxz", - "title": "Strain_Limits_eSxz", - "section": "Strain_Limits_eSxz", - "text": "Strain_Limits_eSxz" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalpha", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalpha.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isalpha", + "title": "isalpha > isalpha > isalpha", + "section": "isalpha > isalpha", + "text": "FailureMeasureEnum.isalpha(/)\n\nReturn True if the string is an alphabetic string, False otherwise.\n\nA string is alphabetic if all characters in the string are alphabetic and there\nis at least one character in the string.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz", - "title": "Strain_Limits_eSxz > Strain_Limits_eSxz > Strain_Limits_eSxz", - "section": "Strain_Limits_eSxz > Strain_Limits_eSxz", - "text": "MaterialProperty.Strain_Limits_eSxz: str = 'strain_shear_xz'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2.html#s2", - "title": "s2", - "section": "s2", - "text": "Whether to activate the failure evaluation regarding the stress in the material 2 direction.\nbool\ns2\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.name.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property MaxStressCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2", - "title": "s2 > s2 > s2", - "section": "s2 > s2", - "text": "property MaxStressCriterion.s2: bool\n\nWhether to activate the failure evaluation regarding the stress in the material 2 direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e1", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e1.html#e1", + "title": "e1", + "section": "e1", + "text": "Strains in the material 1 direction of each ply.\nndarray[Any, dtype[float64]]\ne1\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety.html#margin_of_safety", - "title": "margin_of_safety", - "section": "margin_of_safety", - "text": "Lowest margin of safety of each ply.\nThis attribute is equivalent to the safety margin.\nndarray[Any, dtype[float64]]\nmargin_of_safety\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e1", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e1.html#ansys.dpf.composites.sampling_point.SamplingPoint.e1", + "title": "e1 > e1 > e1", + "section": "e1 > e1", + "text": "property SamplingPoint.e1: ndarray[Any, dtype[float64]]\n\nStrains in the material 1 direction of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety.html#ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety", - "title": "margin_of_safety > margin_of_safety > margin_of_safety", - "section": "margin_of_safety > margin_of_safety", - "text": "property SamplingPoint.margin_of_safety: ndarray[Any, dtype[float64]]\n\nLowest margin of safety of each ply.\n\nThis attribute is equivalent to the safety margin.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/layup_info", + "href": "api/layup_info.html#lay-up-information", + "title": "Lay-up information", + "section": "Lay-up information", + "text": "General features to access information on the composite lay-up.\nadd_layup_info_to_mesh(data_sources, ...[, ...])\nAdd lay-up information to the mesh.\nget_element_info_provider(mesh, ...[, ...])\nGet ElementInfoProvider Object.\nget_dpf_material_id_by_analyis_ply_map(mesh, ...)\nGet Dict that maps analysis ply names to dpf_material_ids.\nAnalysisPlyInfoProvider(mesh, name)\nAnalysisPlyInfoProvider.\nElementInfoProvider(mesh, layer_indices, ...)\nProvider for ElementInfo.\nElementInfo(id, n_layers, n_corner_nodes, ...)\nProvides lay-up information for an element.\nLayupPropertiesProvider(layup_provider, mesh)\nProvider for lay-up properties.\nLayerProperty(value[, names, module, ...])\nProvides the layer properties available.\nLayupProperty(value[, names, module, ...])\nEnum for lay-up properties.\nLayupModelContextType(value[, names, ...])\nType of the lay-up information.\nLay-up information\nadd_layup_info_to_mesh\nget_element_info_provider\nElementInfoProvider\nget_dpf_material_id_by_analyis_ply_map\nAnalysisPlyInfoProvider\nElementInfoProvider\nElementInfo\nElementInfo\nLayupPropertiesProvider\nLayerProperty\nLayupProperty\nLayupModelContextType" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isidentifier", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isidentifier.html#isidentifier", - "title": "isidentifier", - "section": "isidentifier", - "text": "Return True if the string is a valid Python identifier, False otherwise.\nCall keyword.iskeyword(s) to test whether string s is a reserved identifier,\nsuch as “def” or “class”.\nisidentifier" + "objectID": "api/layup_info", + "href": "api/layup_info.html#material-properties", + "title": "Lay-up information > Material properties", + "section": "Material properties", + "text": "A note on material ids: in the PyDPF Composites module,\nmaterials are reference by their dpf_material_id. The dpf_material_id\nis generated based on the materials present in the result file.\nThe dpf_material_id can be different from the material id used in the solver.\nElementInfo contains the dpf_material_id for the materials\nof a given element. The dpf_material_id for a given analysis ply can be obtained\nby calling get_dpf_material_id_by_analyis_ply_map(). A lookup by\nmaterial name is currently not available.\nThe sphx_glr_examples_gallery_examples_004_get_material_properties_example.py\nexample shows how to evaluate material properties.\nget_constant_property(material_property, ...)\nGet a constant material property.\nget_all_dpf_material_ids(mesh, ...)\nGet all DPF material IDs.\nget_constant_property_dict(...)\nGet a dictionary with constant properties.\nMaterialProperty(value[, names, module, ...])\nProvides the material properties that are available.\nMaterialMetadata([dpf_material_id, ...])\nMaterial metadata such as name and ply type.\nMaterial properties\ndpf_material_id\ndpf_material_id\ndpf_material_id\nElementInfo\ndpf_material_id\ndpf_material_id\nget_dpf_material_id_by_analyis_ply_map()\nget_constant_property\nget_all_dpf_material_ids\nget_constant_property_dict\nMaterialProperty\nMaterialMetadata" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isidentifier", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isidentifier.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isidentifier", - "title": "isidentifier > isidentifier > isidentifier", - "section": "isidentifier > isidentifier", - "text": "FailureMeasureEnum.isidentifier(/)\n\nReturn True if the string is a valid Python identifier, False otherwise.\n\nCall keyword.iskeyword(s) to test whether string s is a reserved identifier,\nsuch as “def” or “class”.\n\n!! processed by numpydoc !!" + "objectID": "api/layup_info", + "href": "api/layup_info.html#material-operators", + "title": "Lay-up information > Material operators", + "section": "Material operators", + "text": "MaterialOperators(material_provider, ...)\nProvides the container for material-related operators.\nget_material_operators(rst_data_source, ...)\nGet material properties related to operators.\nMaterial operators\nMaterialOperators\nget_material_operators" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.upper", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.upper.html#upper", - "title": "upper", - "section": "upper", - "text": "Return a copy of the string converted to uppercase.\nupper" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e12", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e12.html#e12", + "title": "e12", + "section": "e12", + "text": "e12" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.upper", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.upper.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.upper", - "title": "upper > upper > upper", - "section": "upper > upper", - "text": "FailureMeasureEnum.upper(/)\n\nReturn a copy of the string converted to uppercase.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e12", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e12.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e12", + "title": "e12 > e12 > e12", + "section": "e12 > e12", + "text": "FailureModeEnum.e12 = 140\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vms", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vms.html#wf_vms", - "title": "wf_vms", - "section": "wf_vms", - "text": "Weighting factor of the stress criterion (vms).\nfloat\nwf_vms\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G12", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G12.html#engineering_constants_g12", + "title": "Engineering_Constants_G12", + "section": "Engineering_Constants_G12", + "text": "Engineering_Constants_G12" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vms", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vms.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vms", - "title": "wf_vms > wf_vms > wf_vms", - "section": "wf_vms > wf_vms", - "text": "property VonMisesCriterion.wf_vms: float\n\nWeighting factor of the stress criterion (vms).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G12", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G12.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G12", + "title": "Engineering_Constants_G12 > Engineering_Constants_G12 > Engineering_Constants_G12", + "section": "Engineering_Constants_G12 > Engineering_Constants_G12", + "text": "MaterialProperty.Engineering_Constants_G12: str = 'shear_modulus_xy'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids.html#dpf_material_ids", - "title": "dpf_material_ids", - "section": "dpf_material_ids", - "text": "dpf_material_ids" + "objectID": "sg_execution_times", + "href": "sg_execution_times.html#computation-times", + "title": "Computation times", + "section": "Computation times", + "text": "01:26.769 total execution time for 15 files from all galleries:\nExample\nTime\nMem (MB)\nsphx_glr_examples_gallery_examples_001_failure_operator_example.py (../../examples/001_failure_operator_example.py)\n00:15.187\n0.0\nsphx_glr_examples_gallery_examples_010_harmonic_example.py (../../examples/010_harmonic_example.py)\n00:10.539\n0.0\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py (../../examples/007_interlaminar_normal_stress_example.py)\n00:07.215\n0.0\nsphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py (../../examples/014_cyclic_symmetry_example.py)\n00:07.039\n0.0\nsphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py (../../examples/009_short_fiber_orientation_tensor.py)\n00:06.005\n0.0\nsphx_glr_examples_gallery_examples_011_rst_workflow.py (../../examples/011_rst_workflow.py)\n00:05.963\n0.0\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py (../../examples/002_sampling_point_example.py)\n00:05.257\n0.0\nsphx_glr_examples_gallery_examples_008_assembly_example.py (../../examples/008_assembly_example.py)\n00:05.202\n0.0\nsphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py (../../examples/099_dpf_composite_failure_workflow.py)\n00:04.888\n0.0\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py (../../examples/006_filter_composite_data_example.py)\n00:04.628\n0.0\nsphx_glr_examples_gallery_examples_013_thermal_example.py (../../examples/013_thermal_example.py)\n00:03.942\n0.0\nsphx_glr_examples_gallery_examples_003_short_fiber_example.py (../../examples/003_short_fiber_example.py)\n00:03.480\n0.0\nsphx_glr_examples_gallery_examples_004_get_material_properties_example.py (../../examples/004_get_material_properties_example.py)\n00:03.103\n0.0\nsphx_glr_examples_gallery_examples_012_fatigue_example.py (../../examples/012_fatigue_example.py)\n00:02.991\n0.0\nsphx_glr_examples_gallery_examples_005_get_layup_properties_example.py (../../examples/005_get_layup_properties_example.py)\n00:01.329\n0.0\nComputation times\n../../examples/001_failure_operator_example.py\n../../examples/010_harmonic_example.py\n../../examples/007_interlaminar_normal_stress_example.py\n../../examples/014_cyclic_symmetry_example.py\n../../examples/009_short_fiber_orientation_tensor.py\n../../examples/011_rst_workflow.py\n../../examples/002_sampling_point_example.py\n../../examples/008_assembly_example.py\n../../examples/099_dpf_composite_failure_workflow.py\n../../examples/006_filter_composite_data_example.py\n../../examples/013_thermal_example.py\n../../examples/003_short_fiber_example.py\n../../examples/004_get_material_properties_example.py\n../../examples/012_fatigue_example.py\n../../examples/005_get_layup_properties_example.py" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids.html#ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids", - "title": "dpf_material_ids > dpf_material_ids > dpf_material_ids", - "section": "dpf_material_ids > dpf_material_ids", - "text": "ElementInfo.dpf_material_ids: ndarray[Any, dtype[int64]]\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3.html#s3", + "title": "s3", + "section": "s3", + "text": "s3" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmC", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmC.html#pmc", - "title": "pmC", - "section": "pmC", - "text": "pmC" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s3", + "title": "s3 > s3 > s3", + "section": "s3 > s3", + "text": "FailureModeEnum.s3 = 230\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmC", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmC.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.pmC", - "title": "pmC > pmC > pmC", - "section": "pmC > pmC", - "text": "FailureModeEnum.pmC = 804\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.RESERVE_FACTOR", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.RESERVE_FACTOR.html#reserve_factor", + "title": "RESERVE_FACTOR", + "section": "RESERVE_FACTOR", + "text": "RESERVE_FACTOR" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vme", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vme.html#vme", - "title": "vme", - "section": "vme", - "text": "Whether to activate the von Mises strain criterion.\nbool\nvme\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.RESERVE_FACTOR", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.RESERVE_FACTOR.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.RESERVE_FACTOR", + "title": "RESERVE_FACTOR > RESERVE_FACTOR > RESERVE_FACTOR", + "section": "RESERVE_FACTOR > RESERVE_FACTOR", + "text": "FailureMeasureEnum.RESERVE_FACTOR: str = 'safety_factor'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vme", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vme.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.vme", - "title": "vme > vme > vme", - "section": "vme > vme", - "text": "property VonMisesCriterion.vme: bool\n\nWhether to activate the von Mises strain criterion.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e13", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e13.html#e13", + "title": "e13", + "section": "e13", + "text": "Out-of-plane shear strains e13 of each ply.\nndarray[Any, dtype[float64]]\ne13\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s2.html#wf_s2", - "title": "wf_s2", - "section": "wf_s2", - "text": "Weighting factor of the failure mode s2.\nfloat\nwf_s2\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e13", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e13.html#ansys.dpf.composites.sampling_point.SamplingPoint.e13", + "title": "e13 > e13 > e13", + "section": "e13 > e13", + "text": "property SamplingPoint.e13: ndarray[Any, dtype[float64]]\n\nOut-of-plane shear strains e13 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s2.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s2", - "title": "wf_s2 > wf_s2 > wf_s2", - "section": "wf_s2 > wf_s2", - "text": "property MaxStressCriterion.wf_s2: float\n\nWeighting factor of the failure mode s2.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.composite", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.composite.html#composite", + "title": "composite", + "section": "composite", + "text": "composite" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.element_type", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.element_type.html#element_type", - "title": "element_type", - "section": "element_type", - "text": "element_type" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.composite", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.composite.html#ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.composite", + "title": "composite > composite > composite", + "section": "composite > composite", + "text": "ContinuousFiberCompositesFiles.composite: dict[str, CompositeDefinitionFiles]\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.element_type", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.element_type.html#ansys.dpf.composites.layup_info.ElementInfo.element_type", - "title": "element_type > element_type > element_type", - "section": "element_type > element_type", - "text": "ElementInfo.element_type: int\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith.html#startswith", + "title": "startswith", + "section": "startswith", + "text": "Return True if the string starts with the specified prefix, False otherwise.\nA string or a tuple of strings to try.\nOptional start position. Default: start of the string.\nOptional stop position. Default: end of the string.\nstartswith" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_json.html#to_json", - "title": "to_json", - "section": "to_json", - "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith", + "title": "startswith > startswith > startswith", + "section": "startswith > startswith", + "text": "FailureMeasureEnum.startswith(prefix, [start, [end]], /)\n\nReturn True if the string starts with the specified prefix, False otherwise.\n\nprefix\n\nA string or a tuple of strings to try.\n\nstart\n\nOptional start position. Default: start of the string.\n\nend\n\nOptional stop position. Default: end of the string.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_json.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_json", - "title": "to_json > to_json > to_json", - "section": "to_json > to_json", - "text": "MaxStrainCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu23", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu23.html#engineering_constants_nu23", + "title": "Engineering_Constants_nu23", + "section": "Engineering_Constants_nu23", + "text": "Engineering_Constants_nu23" }, { - "objectID": "api/data_sources", - "href": "api/data_sources.html#data-sources", - "title": "Data sources", - "section": "Data sources", - "text": "CompositeDefinitionFiles(definition[, mapping])\nProvides the container for composite definition file paths.\nContinuousFiberCompositesFiles(rst, ...[, ...])\nProvides the container for continuous fiber composite file paths.\nShortFiberCompositesFiles(rst, dsdat, ...[, ...])\nProvides the container for short fiber composite file paths.\nCompositeDataSources(rst, material_support, ...)\nProvides data sources related to the composite lay-up.\nget_composite_files_from_workbench_result_folder(...)\nGet a ContinuousFiberCompositesFiles object from a result folder.\ncomposite_files_from_workbench_harmonic_analysis(...)\nGet a ContinuousFiberCompositesFiles object for a harmonic analysis.\nget_composites_data_sources(...)\nCreate DPF data sources from a ContinuousFiberCompositeFiles object.\nData sources\nCompositeDefinitionFiles\nContinuousFiberCompositesFiles\nShortFiberCompositesFiles\nCompositeDataSources\nget_composite_files_from_workbench_result_folder\nContinuousFiberCompositesFiles\ncomposite_files_from_workbench_harmonic_analysis\nContinuousFiberCompositesFiles\nget_composites_data_sources\nContinuousFiberCompositeFiles" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu23", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu23.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu23", + "title": "Engineering_Constants_nu23 > Engineering_Constants_nu23 > Engineering_Constants_nu23", + "section": "Engineering_Constants_nu23 > Engineering_Constants_nu23", + "text": "MaterialProperty.Engineering_Constants_nu23: str = 'poisson_ratio_yz'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.data_sources", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.data_sources.html#data_sources", - "title": "data_sources", - "section": "data_sources", - "text": "Composite data sources.\nCompositeDataSources\ndata_sources\nCompositeDataSources" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K1", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K1.html#thermal_conductivity_k1", + "title": "Thermal_Conductivity_K1", + "section": "Thermal_Conductivity_K1", + "text": "Thermal_Conductivity_K1" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.data_sources", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.data_sources.html#ansys.dpf.composites.composite_model.CompositeModel.data_sources", - "title": "data_sources > data_sources > data_sources", - "section": "data_sources > data_sources", - "text": "property CompositeModel.data_sources: CompositeDataSources\n\nComposite data sources.\n\nReturn type\n\nCompositeDataSources\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K1", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K1.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K1", + "title": "Thermal_Conductivity_K1 > Thermal_Conductivity_K1 > Thermal_Conductivity_K1", + "section": "Thermal_Conductivity_K1 > Thermal_Conductivity_K1", + "text": "MaterialProperty.Thermal_Conductivity_K1: str = 'thermal_conductivity_x_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LAYER_INDEX", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LAYER_INDEX.html#max_layer_index", - "title": "MAX_LAYER_INDEX", - "section": "MAX_LAYER_INDEX", - "text": "MAX_LAYER_INDEX" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.html#compositedatasources", + "title": "CompositeDataSources", + "section": "CompositeDataSources", + "text": "Provides data sources related to the composite lay-up.\nrst (ansys.dpf.core.data_sources.DataSources) – Result file. Currently only RST (MAPDL) is supported.\nmaterial_support (ansys.dpf.core.data_sources.DataSources) – NOTE: The material_support parameter is explicitly listed because it is currently not\nsupported (by the DPF Core) to use a distributed RST file as source for the\nmaterial support. Instead, we create a separate DataSources object for the\nmaterial support from the first RST file. This is a workaround until the\nsupport for distributed RST is added.\nengineering_data (ansys.dpf.core.data_sources.DataSources) – File with the material properties.\nold_composite_sources (dict[str, ansys.dpf.core.data_sources.DataSources]) – Member used to support assemblies in combination with the old\nDPF server (<7.0). It should be removed once the support of this\nserver version is dropped.\nCompositeDataSources.rst\n\nCompositeDataSources.material_support\n\nCompositeDataSources.composite\n\nCompositeDataSources.engineering_data\n\nCompositeDataSources.old_composite_sources\n\nCompositeDataSources\nmaterial_support\nCompositeDataSources.rst\nCompositeDataSources.material_support\nCompositeDataSources.composite\nCompositeDataSources.engineering_data\nCompositeDataSources.old_composite_sources" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LAYER_INDEX", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LAYER_INDEX.html#ansys.dpf.composites.constants.FailureOutput.MAX_LAYER_INDEX", - "title": "MAX_LAYER_INDEX > MAX_LAYER_INDEX > MAX_LAYER_INDEX", - "section": "MAX_LAYER_INDEX > MAX_LAYER_INDEX", - "text": "FailureOutput.MAX_LAYER_INDEX = 2\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.html#ansys.dpf.composites.data_sources.CompositeDataSources", + "title": "CompositeDataSources > CompositeDataSources > CompositeDataSources", + "section": "CompositeDataSources > CompositeDataSources", + "text": "class ansys.dpf.composites.data_sources.CompositeDataSources(rst, material_support, composite, engineering_data, old_composite_sources)\n\nProvides data sources related to the composite lay-up.\n\nParameters\n\nrst (ansys.dpf.core.data_sources.DataSources) – Result file. Currently only RST (MAPDL) is supported.\n\nmaterial_support (ansys.dpf.core.data_sources.DataSources) – NOTE: The material_support parameter is explicitly listed because it is currently not\nsupported (by the DPF Core) to use a distributed RST file as source for the\nmaterial support. Instead, we create a separate DataSources object for the\nmaterial support from the first RST file. This is a workaround until the\nsupport for distributed RST is added.\n\nengineering_data (ansys.dpf.core.data_sources.DataSources) – File with the material properties.\n\nold_composite_sources (dict[str, ansys.dpf.core.data_sources.DataSources]) – Member used to support assemblies in combination with the old\nDPF server (<7.0). It should be removed once the support of this\nserver version is dropped.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nCompositeDataSources.rst\n\n\n\nCompositeDataSources.material_support\n\n\n\nCompositeDataSources.composite\n\n\n\nCompositeDataSources.engineering_data\n\n\n\nCompositeDataSources.old_composite_sources\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor.html#reserve_factor", - "title": "reserve_factor", - "section": "reserve_factor", - "text": "Lowest reserve factor of each ply.\nThis attribute is equivalent to the safety factor.\nndarray[Any, dtype[float64]]\nreserve_factor\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_GLOBAL_LAYER_IN_STACK", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_GLOBAL_LAYER_IN_STACK.html#max_global_layer_in_stack", + "title": "MAX_GLOBAL_LAYER_IN_STACK", + "section": "MAX_GLOBAL_LAYER_IN_STACK", + "text": "MAX_GLOBAL_LAYER_IN_STACK" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor.html#ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor", - "title": "reserve_factor > reserve_factor > reserve_factor", - "section": "reserve_factor > reserve_factor", - "text": "property SamplingPoint.reserve_factor: ndarray[Any, dtype[float64]]\n\nLowest reserve factor of each ply.\n\nThis attribute is equivalent to the safety factor.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_GLOBAL_LAYER_IN_STACK", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_GLOBAL_LAYER_IN_STACK.html#ansys.dpf.composites.constants.FailureOutput.MAX_GLOBAL_LAYER_IN_STACK", + "title": "MAX_GLOBAL_LAYER_IN_STACK > MAX_GLOBAL_LAYER_IN_STACK > MAX_GLOBAL_LAYER_IN_STACK", + "section": "MAX_GLOBAL_LAYER_IN_STACK > MAX_GLOBAL_LAYER_IN_STACK", + "text": "FailureOutput.MAX_GLOBAL_LAYER_IN_STACK = 5\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.element_scope", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.element_scope.html#element_scope", - "title": "element_scope", - "section": "element_scope", - "text": "element_scope" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3.html#e3", + "title": "e3", + "section": "e3", + "text": "Activates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\nbool\ne3\nbool" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3", + "title": "e3 > e3 > e3", + "section": "e3 > e3", + "text": "property MaxStrainCriterion.e3: bool\n\nActivates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.element_scope", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.element_scope.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.element_scope", - "title": "element_scope > element_scope > element_scope", - "section": "element_scope > element_scope", - "text": "ResultDefinitionScope.element_scope: Sequence[int]\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids.html#get_all_dpf_material_ids", + "title": "get_all_dpf_material_ids", + "section": "get_all_dpf_material_ids", + "text": "Get all DPF material IDs.\nmesh (MeshedRegion) – DPF meshed region enriched with lay-up information.\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source or stream provider that contains the RST file.\nCollection[int64]\nget_all_dpf_material_ids\nMeshedRegion\nDataSources\nOperator\nCollection\nint64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_laminate_offset", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_laminate_offset.html#get_element_laminate_offset", - "title": "get_element_laminate_offset", - "section": "get_element_laminate_offset", - "text": "Get the laminate offset of an element.\nTHis method returns None if the element is not layered.\nelement_id (int) – Element ID or label.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nOptional[float64]\nget_element_laminate_offset\nNone\nint\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nOptional\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids.html#ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids", + "title": "get_all_dpf_material_ids > get_all_dpf_material_ids > get_all_dpf_material_ids", + "section": "get_all_dpf_material_ids > get_all_dpf_material_ids", + "text": "ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids(mesh, data_source_or_streams_provider)\n\nGet all DPF material IDs.\n\nParameters\n\nmesh (MeshedRegion) – DPF meshed region enriched with lay-up information.\n\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source or stream provider that contains the RST file.\n\nReturn type\n\nCollection[int64]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_laminate_offset", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_laminate_offset.html#ansys.dpf.composites.composite_model.CompositeModel.get_element_laminate_offset", - "title": "get_element_laminate_offset > get_element_laminate_offset > get_element_laminate_offset", - "section": "get_element_laminate_offset > get_element_laminate_offset", - "text": "CompositeModel.get_element_laminate_offset(element_id, composite_definition_label=None)\n\nGet the laminate offset of an element.\n\nTHis method returns None if the element is not layered.\n\nParameters\n\nelement_id (int) – Element ID or label.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nOptional[float64]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G13", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G13.html#engineering_constants_g13", + "title": "Engineering_Constants_G13", + "section": "Engineering_Constants_G13", + "text": "Engineering_Constants_G13" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids_for_composite_definition_label", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids_for_composite_definition_label.html#get_all_layered_element_ids_for_composite_definition_label", - "title": "get_all_layered_element_ids_for_composite_definition_label", - "section": "get_all_layered_element_ids_for_composite_definition_label", - "text": "Get all layered element IDs that belong to a composite definition label.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nSequence[int]\nget_all_layered_element_ids_for_composite_definition_label\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nSequence\nint" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G13", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G13.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G13", + "title": "Engineering_Constants_G13 > Engineering_Constants_G13 > Engineering_Constants_G13", + "section": "Engineering_Constants_G13 > Engineering_Constants_G13", + "text": "MaterialProperty.Engineering_Constants_G13: str = 'shear_modulus_xz'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids_for_composite_definition_label", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids_for_composite_definition_label.html#ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids_for_composite_definition_label", - "title": "get_all_layered_element_ids_for_composite_definition_label > get_all_layered_element_ids_for_composite_definition_label > get_all_layered_element_ids_for_composite_definition_label", - "section": "get_all_layered_element_ids_for_composite_definition_label > get_all_layered_element_ids_for_composite_definition_label", - "text": "CompositeModel.get_all_layered_element_ids_for_composite_definition_label(composite_definition_label=None)\n\nGet all layered element IDs that belong to a composite definition label.\n\nParameters\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nSequence[int]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cf.html#cf", + "title": "cf", + "section": "cf", + "text": "cf" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_metadata", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_metadata.html#material_metadata", - "title": "material_metadata", - "section": "material_metadata", - "text": "DPF material ID to metadata map of the materials.\nThis data can be used to filter analysis plies\nor element layers by ply type, material name etc.\nNote: ply type is only available in DPF server version 9.0 (2025 R1 pre0) and later.\ndict[int, MaterialMetadata]\nmaterial_metadata\ndict\nint\nMaterialMetadata" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cf.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cf", + "title": "cf > cf > cf", + "section": "cf > cf", + "text": "FailureModeEnum.cf = 310\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_metadata", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_metadata.html#ansys.dpf.composites.composite_model.CompositeModel.material_metadata", - "title": "material_metadata > material_metadata > material_metadata", - "section": "material_metadata > material_metadata", - "text": "property CompositeModel.material_metadata: dict[int, MaterialMetadata]\n\nDPF material ID to metadata map of the materials.\n\nThis data can be used to filter analysis plies\nor element layers by ply type, material name etc.\n\nNote: ply type is only available in DPF server version 9.0 (2025 R1 pre0) and later.\n\nReturn type\n\ndict[int, MaterialMetadata]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft.html#wf_lft", + "title": "wf_lft", + "section": "wf_lft", + "text": "Weighting factor of fiber failure due to tension (lft).\nfloat\nwf_lft\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.html#shearcrimpingcriterion", - "title": "ShearCrimpingCriterion", - "section": "ShearCrimpingCriterion", - "text": "Defines the shear crimping failure criterion for sandwich structures.\nkc (float, default: 1.0) – Weighting factor of the core material for evaluation of the maximum allowable load. The default is 1.\nkf (float, default: 0.0) – Weighting factor of the face sheets for evaluation of the maximum allowable load. The default is 0 so the face sheet does not contribute to the allowable load. This property is valid for thin face sheets.\nwf (float, default: 1.0) – Weighting factor of the failure mode (wb or wt).\nShearCrimpingCriterion.to_dict()\n\nShearCrimpingCriterion.to_json()\n\nShearCrimpingCriterion.active\nThe failure criterion is suppressed if active is False.\nShearCrimpingCriterion.kc\nWeighting factor of the core material for evaluation of the maximum allowable load.\nShearCrimpingCriterion.kf\nWeighting factor of the face sheets for evaluation of the maximum allowable load.\nShearCrimpingCriterion.name\nName of the failure criterion.\nShearCrimpingCriterion.wf\nWeighting factor of the failure mode (wb or wt).\nShearCrimpingCriterion\nfloat\n1.0\n1\nfloat\n0.0\n0\nfloat\n1.0\nShearCrimpingCriterion.to_dict\nShearCrimpingCriterion.to_json\nShearCrimpingCriterion.active\nShearCrimpingCriterion.kc\nShearCrimpingCriterion.kf\nShearCrimpingCriterion.name\nShearCrimpingCriterion.wf" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft", + "title": "wf_lft > wf_lft > wf_lft", + "section": "wf_lft > wf_lft", + "text": "property LaRCCriterion.wf_lft: float\n\nWeighting factor of fiber failure due to tension (lft).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion", - "title": "ShearCrimpingCriterion > ShearCrimpingCriterion > ShearCrimpingCriterion", - "section": "ShearCrimpingCriterion > ShearCrimpingCriterion", - "text": "class ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion(*, kc=1.0, kf=0.0, wf=1.0)\n\nDefines the shear crimping failure criterion for sandwich structures.\n\nParameters\n\nkc (float, default: 1.0) – Weighting factor of the core material for evaluation of the maximum allowable load. The default is 1.\n\nkf (float, default: 0.0) – Weighting factor of the face sheets for evaluation of the maximum allowable load. The default is 0 so the face sheet does not contribute to the allowable load. This property is valid for thin face sheets.\n\nwf (float, default: 1.0) – Weighting factor of the failure mode (wb or wt).\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nShearCrimpingCriterion.to_dict()\n\n\n\nShearCrimpingCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nShearCrimpingCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nShearCrimpingCriterion.kc\n\nWeighting factor of the core material for evaluation of the maximum allowable load.\n\nShearCrimpingCriterion.kf\n\nWeighting factor of the face sheets for evaluation of the maximum allowable load.\n\nShearCrimpingCriterion.name\n\nName of the failure criterion.\n\nShearCrimpingCriterion.wf\n\nWeighting factor of the failure mode (wb or wt).\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e12", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e12.html#wf_e12", + "title": "wf_e12", + "section": "wf_e12", + "text": "Weighting factor of the failure mode e12.\nfloat\nwf_e12\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aX", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aX.html#thermal_expansion_coefficients_ax", - "title": "Thermal_Expansion_Coefficients_aX", - "section": "Thermal_Expansion_Coefficients_aX", - "text": "Thermal_Expansion_Coefficients_aX" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e12", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e12.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e12", + "title": "wf_e12 > wf_e12 > wf_e12", + "section": "wf_e12 > wf_e12", + "text": "property MaxStrainCriterion.wf_e12: float\n\nWeighting factor of the failure mode e12.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aX", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aX.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aX", - "title": "Thermal_Expansion_Coefficients_aX > Thermal_Expansion_Coefficients_aX > Thermal_Expansion_Coefficients_aX", - "section": "Thermal_Expansion_Coefficients_aX > Thermal_Expansion_Coefficients_aX", - "text": "MaterialProperty.Thermal_Expansion_Coefficients_aX: str = 'coefficient_thermal_expansion_x'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s2.html#wf_s2", + "title": "wf_s2", + "section": "wf_s2", + "text": "Weighting factor of the failure mode s2.\nfloat\nwf_s2\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_s", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_s.html#puck_constants_s", - "title": "Puck_Constants_s", - "section": "Puck_Constants_s", - "text": "Puck_Constants_s" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s2.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s2", + "title": "wf_s2 > wf_s2 > wf_s2", + "section": "wf_s2 > wf_s2", + "text": "property MaxStressCriterion.wf_s2: float\n\nWeighting factor of the failure mode s2.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_s", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_s.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_s", - "title": "Puck_Constants_s > Puck_Constants_s > Puck_Constants_s", - "section": "Puck_Constants_s > Puck_Constants_s", - "text": "MaterialProperty.Puck_Constants_s: str = 'degradation_parameter_s_puck_constants'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE_REF_SURFACE", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE_REF_SURFACE.html#failure_value_ref_surface", + "title": "FAILURE_VALUE_REF_SURFACE", + "section": "FAILURE_VALUE_REF_SURFACE", + "text": "FAILURE_VALUE_REF_SURFACE" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.named_selections", - "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.named_selections.html#named_selections", - "title": "named_selections", - "section": "named_selections", - "text": "named_selections" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE_REF_SURFACE", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE_REF_SURFACE.html#ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE_REF_SURFACE", + "title": "FAILURE_VALUE_REF_SURFACE > FAILURE_VALUE_REF_SURFACE > FAILURE_VALUE_REF_SURFACE", + "section": "FAILURE_VALUE_REF_SURFACE > FAILURE_VALUE_REF_SURFACE", + "text": "FailureOutput.FAILURE_VALUE_REF_SURFACE = 4\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.named_selections", - "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.named_selections.html#ansys.dpf.composites.composite_scope.CompositeScope.named_selections", - "title": "named_selections > named_selections > named_selections", - "section": "named_selections > named_selections", - "text": "CompositeScope.named_selections: Sequence[str] | None = None\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR31", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR31.html#tensor31", + "title": "TENSOR31", + "section": "TENSOR31", + "text": "TENSOR31" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.html#continuousfibercompositesfiles", - "title": "ContinuousFiberCompositesFiles", - "section": "ContinuousFiberCompositesFiles", - "text": "Provides the container for continuous fiber composite file paths.\nContinuousFiberCompositesFiles.files_are_local\n\nContinuousFiberCompositesFiles.rst\n\nContinuousFiberCompositesFiles.composite\n\nContinuousFiberCompositesFiles.engineering_data\n\nContinuousFiberCompositesFiles\nContinuousFiberCompositesFiles.files_are_local\nContinuousFiberCompositesFiles.rst\nContinuousFiberCompositesFiles.composite\nContinuousFiberCompositesFiles.engineering_data" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR31", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR31.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR31", + "title": "TENSOR31 > TENSOR31 > TENSOR31", + "section": "TENSOR31 > TENSOR31", + "text": "Sym3x3TensorComponent.TENSOR31 = 5\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.html#ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles", - "title": "ContinuousFiberCompositesFiles > ContinuousFiberCompositesFiles > ContinuousFiberCompositesFiles", - "section": "ContinuousFiberCompositesFiles > ContinuousFiberCompositesFiles", - "text": "class ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles(rst, composite, engineering_data, files_are_local=True)\n\nProvides the container for continuous fiber composite file paths.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nContinuousFiberCompositesFiles.files_are_local\n\n\n\nContinuousFiberCompositesFiles.rst\n\n\n\nContinuousFiberCompositesFiles.composite\n\n\n\nContinuousFiberCompositesFiles.engineering_data\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e2.html#e2", + "title": "e2", + "section": "e2", + "text": "Activates the failure evaluation regarding the strain in the material 2 direction.\nbool\ne2\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxy", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxy.html#esxy", - "title": "eSxy", - "section": "eSxy", - "text": "Global strain limit in material direction 12.\nfloat\neSxy\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e2.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e2", + "title": "e2 > e2 > e2", + "section": "e2 > e2", + "text": "property MaxStrainCriterion.e2: bool\n\nActivates the failure evaluation regarding the strain in the material 2 direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxy", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxy.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxy", - "title": "eSxy > eSxy > eSxy", - "section": "eSxy > eSxy", - "text": "property MaxStrainCriterion.eSxy: float\n\nGlobal strain limit in material direction 12.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lfc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lfc.html#lfc", + "title": "lfc", + "section": "lfc", + "text": "Whether to activate the failure evaluation regarding compression in fiber direction.\nbool\nlfc\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G12", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G12.html#engineering_constants_g12", - "title": "Engineering_Constants_G12", - "section": "Engineering_Constants_G12", - "text": "Engineering_Constants_G12" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lfc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lfc.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.lfc", + "title": "lfc > lfc > lfc", + "section": "lfc > lfc", + "text": "property LaRCCriterion.lfc: bool\n\nWhether to activate the failure evaluation regarding compression in fiber direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G12", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G12.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G12", - "title": "Engineering_Constants_G12 > Engineering_Constants_G12 > Engineering_Constants_G12", - "section": "Engineering_Constants_G12 > Engineering_Constants_G12", - "text": "MaterialProperty.Engineering_Constants_G12: str = 'shear_modulus_xy'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "VonMisesCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.active.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property HoffmanCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.include_ins", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.include_ins.html#include_ins", + "title": "include_ins", + "section": "include_ins", + "text": "Whether to activate the formulation that considers interlaminar normal stresses.\nbool\ninclude_ins\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_GLOBAL_LAYER_IN_STACK", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_GLOBAL_LAYER_IN_STACK.html#max_global_layer_in_stack", - "title": "MAX_GLOBAL_LAYER_IN_STACK", - "section": "MAX_GLOBAL_LAYER_IN_STACK", - "text": "MAX_GLOBAL_LAYER_IN_STACK" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.include_ins", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.include_ins.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.include_ins", + "title": "include_ins > include_ins > include_ins", + "section": "include_ins > include_ins", + "text": "property CoreFailureCriterion.include_ins: bool\n\nWhether to activate the formulation that considers interlaminar normal stresses.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_GLOBAL_LAYER_IN_STACK", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_GLOBAL_LAYER_IN_STACK.html#ansys.dpf.composites.constants.FailureOutput.MAX_GLOBAL_LAYER_IN_STACK", - "title": "MAX_GLOBAL_LAYER_IN_STACK > MAX_GLOBAL_LAYER_IN_STACK > MAX_GLOBAL_LAYER_IN_STACK", - "section": "MAX_GLOBAL_LAYER_IN_STACK > MAX_GLOBAL_LAYER_IN_STACK", - "text": "FailureOutput.MAX_GLOBAL_LAYER_IN_STACK = 5\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_json.html#to_json", + "title": "to_json", + "section": "to_json", + "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_json.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_json", + "title": "to_json > to_json > to_json", + "section": "to_json > to_json", + "text": "FaceSheetWrinklingCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isprintable", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isprintable.html#isprintable", - "title": "isprintable", - "section": "isprintable", - "text": "Return True if the string is printable, False otherwise.\nA string is printable if all of its characters are considered printable in\nrepr() or if it is empty.\nisprintable" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.MARGIN_OF_SAFETY", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.MARGIN_OF_SAFETY.html#margin_of_safety", + "title": "MARGIN_OF_SAFETY", + "section": "MARGIN_OF_SAFETY", + "text": "MARGIN_OF_SAFETY" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isprintable", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isprintable.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isprintable", - "title": "isprintable > isprintable > isprintable", - "section": "isprintable > isprintable", - "text": "FailureMeasureEnum.isprintable(/)\n\nReturn True if the string is printable, False otherwise.\n\nA string is printable if all of its characters are considered printable in\nrepr() or if it is empty.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.MARGIN_OF_SAFETY", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.MARGIN_OF_SAFETY.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.MARGIN_OF_SAFETY", + "title": "MARGIN_OF_SAFETY > MARGIN_OF_SAFETY > MARGIN_OF_SAFETY", + "section": "MARGIN_OF_SAFETY > MARGIN_OF_SAFETY", + "text": "FailureMeasureEnum.MARGIN_OF_SAFETY: str = 'safety_margin'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMe", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMe.html#vme", - "title": "vMe", - "section": "vMe", - "text": "vMe" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.na", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.na.html#na", + "title": "na", + "section": "na", + "text": "na" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMe", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMe.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.vMe", - "title": "vMe > vMe > vMe", - "section": "vMe > vMe", - "text": "FailureModeEnum.vMe = 1101\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.na", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.na.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.na", + "title": "na > na > na", + "section": "na > na", + "text": "FailureModeEnum.na = 9999\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_rst_streams_provider", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_rst_streams_provider.html#get_rst_streams_provider", - "title": "get_rst_streams_provider", - "section": "get_rst_streams_provider", - "text": "Get the streams provider of the loaded result file.\nOperator\nget_rst_streams_provider\nOperator" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isidentifier", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isidentifier.html#isidentifier", + "title": "isidentifier", + "section": "isidentifier", + "text": "Return True if the string is a valid Python identifier, False otherwise.\nCall keyword.iskeyword(s) to test whether string s is a reserved identifier,\nsuch as “def” or “class”.\nisidentifier" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_rst_streams_provider", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_rst_streams_provider.html#ansys.dpf.composites.composite_model.CompositeModel.get_rst_streams_provider", - "title": "get_rst_streams_provider > get_rst_streams_provider > get_rst_streams_provider", - "section": "get_rst_streams_provider > get_rst_streams_provider", - "text": "CompositeModel.get_rst_streams_provider()\n\nGet the streams provider of the loaded result file.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isidentifier", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isidentifier.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isidentifier", + "title": "isidentifier > isidentifier > isidentifier", + "section": "isidentifier > isidentifier", + "text": "FailureMeasureEnum.isidentifier(/)\n\nReturn True if the string is a valid Python identifier, False otherwise.\n\nCall keyword.iskeyword(s) to test whether string s is a reserved identifier,\nsuch as “def” or “class”.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/server_helpers", - "href": "api/server_helpers.html#server-helpers", - "title": "Server helpers", - "section": "Server helpers", - "text": "load_composites_plugin(server[, ansys_path])\nLoad composites plugins and its dependencies.\nconnect_to_or_start_server([port, ip, ...])\nConnect to or start a DPF server with the DPF Composites plugin loaded.\nupload_continuous_fiber_composite_files_to_server(...)\nUpload continuous fiber composites files to server.\nupload_short_fiber_composite_files_to_server(...)\nUpload short fiber composites files to server.\nServer helpers\nload_composites_plugin\nconnect_to_or_start_server\nupload_continuous_fiber_composite_files_to_server\nupload_short_fiber_composite_files_to_server" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1t.html#s1t", + "title": "s1t", + "section": "s1t", + "text": "s1t" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lstrip", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lstrip.html#lstrip", - "title": "lstrip", - "section": "lstrip", - "text": "Return a copy of the string with leading whitespace removed.\nIf chars is given and not None, remove characters in chars instead.\nlstrip" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s1t", + "title": "s1t > s1t > s1t", + "section": "s1t > s1t", + "text": "FailureModeEnum.s1t = 211\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lstrip", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lstrip.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.lstrip", - "title": "lstrip > lstrip > lstrip", - "section": "lstrip > lstrip", - "text": "FailureMeasureEnum.lstrip(chars=None, /)\n\nReturn a copy of the string with leading whitespace removed.\n\nIf chars is given and not None, remove characters in chars instead.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZc.html#ezc", + "title": "eZc", + "section": "eZc", + "text": "Global compressive strain limit in material direction 3.\nfloat\neZc\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.name", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.name.html#name", - "title": "name", - "section": "name", - "text": "Custom name.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZc.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZc", + "title": "eZc > eZc > eZc", + "section": "eZc > eZc", + "text": "property MaxStrainCriterion.eZc: float\n\nGlobal compressive strain limit in material direction 3.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.name", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.name.html#ansys.dpf.composites.result_definition.ResultDefinition.name", - "title": "name > name > name", - "section": "name > name", - "text": "property ResultDefinition.name: str\n\nCustom name.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.html#analysisplyinfoprovider", + "title": "AnalysisPlyInfoProvider", + "section": "AnalysisPlyInfoProvider", + "text": "AnalysisPlyInfoProvider. Can be used to compute the layer indices of a given analysis ply.\nmesh (MeshedRegion) – DPF MeshedRegion with lay-up information.\nname (str) – Analysis Ply Name\nAnalysisPlyInfoProvider.get_layer_index_by_element_id(...)\nGet the layer index for the analysis ply in a given element.\nAnalysisPlyInfoProvider.ply_element_ids()\nReturn list of element labels of the analysis ply.\nAnalysisPlyInfoProvider\nMeshedRegion\nstr\nAnalysisPlyInfoProvider.get_layer_index_by_element_id\nAnalysisPlyInfoProvider.ply_element_ids" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ap", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ap.html#ap", - "title": "ap", - "section": "ap", - "text": "ap" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.html#ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider", + "title": "AnalysisPlyInfoProvider > AnalysisPlyInfoProvider > AnalysisPlyInfoProvider", + "section": "AnalysisPlyInfoProvider > AnalysisPlyInfoProvider", + "text": "class ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider(mesh, name)\n\nAnalysisPlyInfoProvider. Can be used to compute the layer indices of a given analysis ply.\n\nParameters\n\nmesh (MeshedRegion) – DPF MeshedRegion with lay-up information.\n\nname (str) – Analysis Ply Name\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nAnalysisPlyInfoProvider.get_layer_index_by_element_id(...)\n\nGet the layer index for the analysis ply in a given element.\n\nAnalysisPlyInfoProvider.ply_element_ids()\n\nReturn list of element labels of the analysis ply.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ap", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ap.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.ap", - "title": "ap > ap > ap", - "section": "ap > ap", - "text": "FailureModeEnum.ap = 1202\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_ply_wise_critical_failures", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_ply_wise_critical_failures.html#get_ply_wise_critical_failures", + "title": "get_ply_wise_critical_failures", + "section": "get_ply_wise_critical_failures", + "text": "Get the critical failure value and modes per ply.\nlist[FailureResult]\nget_ply_wise_critical_failures\nlist\nFailureResult" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isnumeric", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isnumeric.html#isnumeric", - "title": "isnumeric", - "section": "isnumeric", - "text": "Return True if the string is a numeric string, False otherwise.\nA string is numeric if all characters in the string are numeric and there is at\nleast one character in the string.\nisnumeric" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_ply_wise_critical_failures", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_ply_wise_critical_failures.html#ansys.dpf.composites.sampling_point.SamplingPoint.get_ply_wise_critical_failures", + "title": "get_ply_wise_critical_failures > get_ply_wise_critical_failures > get_ply_wise_critical_failures", + "section": "get_ply_wise_critical_failures > get_ply_wise_critical_failures", + "text": "SamplingPoint.get_ply_wise_critical_failures()\n\nGet the critical failure value and modes per ply.\n\nReturn type\n\nlist[FailureResult]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isnumeric", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isnumeric.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isnumeric", - "title": "isnumeric > isnumeric > isnumeric", - "section": "isnumeric > isnumeric", - "text": "FailureMeasureEnum.isnumeric(/)\n\nReturn True if the string is a numeric string, False otherwise.\n\nA string is numeric if all characters in the string are numeric and there is at\nleast one character in the string.\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/001_failure_operator_example", + "href": "examples/gallery_examples/001_failure_operator_example.html#composite-failure-analysis", + "title": "Composite failure analysis", + "section": "Composite failure analysis", + "text": "This example shows how to analyze a composite structure by a combined failure criterion.\nThe failure operator of DPF Composites computes the minimum and maximum failure values\nand failure modes of a combined failure criterion. A combined failure criterion is a selection of\nfailure criteria such as Puck, Tsai-Wu, or face sheet wrinkling. For a list of all\nfailure criteria, see failure_criteria.\nThe Combined Failure Criterion class\nallows you to assess different type of materials and failure modes at once.\nThe scoping enables you to evaluate the minimum and maximum failures per element\nor select a list of materials or plies.\nWhen using a Workbench project,\nuse the get_composite_files_from_workbench_result_folder()\nmethod to obtain the input files.\nComposite failure analysis\nCombined Failure Criterion\nget_composite_files_from_workbench_result_folder()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu23", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu23.html#engineering_constants_nu23", - "title": "Engineering_Constants_nu23", - "section": "Engineering_Constants_nu23", - "text": "Engineering_Constants_nu23" + "objectID": "examples/gallery_examples/001_failure_operator_example", + "href": "examples/gallery_examples/001_failure_operator_example.html#set-up-analysis", + "title": "Composite failure analysis > Set up analysis", + "section": "Set up analysis", + "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nSet up analysis" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu23", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu23.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu23", - "title": "Engineering_Constants_nu23 > Engineering_Constants_nu23 > Engineering_Constants_nu23", - "section": "Engineering_Constants_nu23 > Engineering_Constants_nu23", - "text": "MaterialProperty.Engineering_Constants_nu23: str = 'poisson_ratio_yz'\n\n" + "objectID": "examples/gallery_examples/001_failure_operator_example", + "href": "examples/gallery_examples/001_failure_operator_example.html#configure-combined-failure-criterion", + "title": "Composite failure analysis > Configure combined failure criterion", + "section": "Configure combined failure criterion", + "text": "Configure the combined failure criterion.\nConfigure combined failure criterion" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset.html#get_element_laminate_offset", - "title": "get_element_laminate_offset", - "section": "get_element_laminate_offset", - "text": "Get laminate offset of element. Returns None if element is not layered.\nelement_id (int) – Element Id/Label\nOptional[float64]\nget_element_laminate_offset\nint\nOptional\nfloat64" + "objectID": "examples/gallery_examples/001_failure_operator_example", + "href": "examples/gallery_examples/001_failure_operator_example.html#set-up-model-and-evaluate-failures", + "title": "Composite failure analysis > Set up model and evaluate failures", + "section": "Set up model and evaluate failures", + "text": "Set up the composite model.\nEvaluate failures for the entire model\nScope failure evaluation to a certain element scope.\nScope failure evaluation by plies.\nTotal running time of the script: (0 minutes 15.187 seconds)\nDownload Jupyter notebook: 001_failure_operator_example.ipynb\nDownload Python source code: 001_failure_operator_example.py\nDownload zipped: 001_failure_operator_example.zip\nGallery generated by Sphinx-Gallery\nSet up model and evaluate failures\nDownload Jupyter notebook: 001_failure_operator_example.ipynb\nDownload Python source code: 001_failure_operator_example.py\nDownload zipped: 001_failure_operator_example.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset", - "title": "get_element_laminate_offset > get_element_laminate_offset > get_element_laminate_offset", - "section": "get_element_laminate_offset > get_element_laminate_offset", - "text": "LayupPropertiesProvider.get_element_laminate_offset(element_id)\n\nGet laminate offset of element. Returns None if element is not layered.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[float64]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hd", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hd.html#hd", + "title": "hd", + "section": "hd", + "text": "Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\nbool\nhd\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.na", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.na.html#na", - "title": "na", - "section": "na", - "text": "na" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hd", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hd.html#ansys.dpf.composites.failure_criteria.HashinCriterion.hd", + "title": "hd > hd > hd", + "section": "hd > hd", + "text": "property HashinCriterion.hd: bool\n\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.na", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.na.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.na", - "title": "na > na > na", - "section": "na > na", - "text": "FailureModeEnum.na = 9999\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.ANGLES", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.ANGLES.html#angles", + "title": "ANGLES", + "section": "ANGLES", + "text": "ANGLES" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_provider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_provider.html#material_provider", - "title": "material_provider", - "section": "material_provider", - "text": "Get material_provider.\nOperator\nmaterial_provider\nOperator" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.ANGLES", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.ANGLES.html#ansys.dpf.composites.layup_info.LayerProperty.ANGLES", + "title": "ANGLES > ANGLES > ANGLES", + "section": "ANGLES > ANGLES", + "text": "LayerProperty.ANGLES = 1\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_provider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_provider.html#ansys.dpf.composites.layup_info.material_operators.MaterialOperators.material_provider", - "title": "material_provider > material_provider > material_provider", - "section": "material_provider > material_provider", - "text": "property MaterialOperators.material_provider: Operator\n\nGet material_provider.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.active.html#active", + "title": "active", + "section": "active", + "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wb", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wb.html#wb", - "title": "wb", - "section": "wb", - "text": "wb" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.active.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property CoreFailureCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wb", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wb.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.wb", - "title": "wb > wb > wb", - "section": "wb > wb", - "text": "FailureModeEnum.wb = 321\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lft.html#lft", + "title": "lft", + "section": "lft", + "text": "Whether to activate the failure evaluation regarding tension in fiber direction.\nbool\nlft\nbool" }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.zfill", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.zfill.html#zfill", - "title": "zfill", - "section": "zfill", - "text": "Pad a numeric string with zeros on the left, to fill a field of the given width.\nThe string is never truncated.\nzfill" + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lft.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.lft", + "title": "lft > lft > lft", + "section": "lft > lft", + "text": "property LaRCCriterion.lft: bool\n\nWhether to activate the failure evaluation regarding tension in fiber direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.zfill", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.zfill.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.zfill", - "title": "zfill > zfill > zfill", - "section": "zfill > zfill", - "text": "FailureMeasureEnum.zfill(width, /)\n\nPad a numeric string with zeros on the left, to fill a field of the given width.\n\nThe string is never truncated.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSyz", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSyz.html#esyz", + "title": "eSyz", + "section": "eSyz", + "text": "Global strain limit in material direction 23.\nfloat\neSyz\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isupper", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isupper.html#isupper", - "title": "isupper", - "section": "isupper", - "text": "Return True if the string is an uppercase string, False otherwise.\nA string is uppercase if all cased characters in the string are uppercase and\nthere is at least one cased character in the string.\nisupper" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSyz", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSyz.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSyz", + "title": "eSyz > eSyz > eSyz", + "section": "eSyz > eSyz", + "text": "property MaxStrainCriterion.eSyz: float\n\nGlobal strain limit in material direction 23.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isupper", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isupper.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isupper", - "title": "isupper > isupper > isupper", - "section": "isupper > isupper", - "text": "FailureMeasureEnum.isupper(/)\n\nReturn True if the string is an uppercase string, False otherwise.\n\nA string is uppercase if all cased characters in the string are uppercase and\nthere is at least one cased character in the string.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.add_interlaminar_normal_stresses", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.add_interlaminar_normal_stresses.html#add_interlaminar_normal_stresses", - "title": "add_interlaminar_normal_stresses", - "section": "add_interlaminar_normal_stresses", - "text": "Add interlaminar normal stresses to the stresses fields container.\nInterlaminar normal stresses (s3) are not available for layered shells.\nThis function performs a post-processing step which computes s3 and adds\nit to the stress field. s3 is automatically computed if a formulation\nof a failure criterion depends on this stress component, for instance\nPuck 3D .\nFor a usage example, see\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py.\nstresses (FieldsContainer) – Stresses fields container to add interlaminar normal stresses to.\nstrains (FieldsContainer)\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nInterlaminar normal stresses are only added to the layered elements defined\nin the specified composite definition.\nNone\nadd_interlaminar_normal_stresses\nPuck 3D\nFieldsContainer\nFieldsContainer\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nNone" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.name.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property TsaiWuCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.add_interlaminar_normal_stresses", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.add_interlaminar_normal_stresses.html#ansys.dpf.composites.composite_model.CompositeModel.add_interlaminar_normal_stresses", - "title": "add_interlaminar_normal_stresses > add_interlaminar_normal_stresses > add_interlaminar_normal_stresses", - "section": "add_interlaminar_normal_stresses > add_interlaminar_normal_stresses", - "text": "CompositeModel.add_interlaminar_normal_stresses(stresses, strains, composite_definition_label=None)\n\nAdd interlaminar normal stresses to the stresses fields container.\n\nInterlaminar normal stresses (s3) are not available for layered shells.\nThis function performs a post-processing step which computes s3 and adds\nit to the stress field. s3 is automatically computed if a formulation\nof a failure criterion depends on this stress component, for instance\nPuck 3D .\n\nFor a usage example, see\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py.\n\nParameters\n\nstresses (FieldsContainer) – Stresses fields container to add interlaminar normal stresses to.\n\nstrains (FieldsContainer)\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nInterlaminar normal stresses are only added to the layered elements defined\nin the specified composite definition.\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Syz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Syz.html#stress_limits_syz", + "title": "Stress_Limits_Syz", + "section": "Stress_Limits_Syz", + "text": "Stress_Limits_Syz" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Syz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Syz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Syz", + "title": "Stress_Limits_Syz > Stress_Limits_Syz > Stress_Limits_Syz", + "section": "Stress_Limits_Syz > Stress_Limits_Syz", + "text": "MaterialProperty.Stress_Limits_Syz: str = 'stress_shear_yz'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.active.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property LaRCCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.results", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.results.html#results", + "title": "results", + "section": "results", + "text": "Results of the sampling point results as a JSON dictionary.\nAny\nresults\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lower", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lower.html#lower", - "title": "lower", - "section": "lower", - "text": "Return a copy of the string converted to lowercase.\nlower" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.results", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.results.html#ansys.dpf.composites.sampling_point.SamplingPoint.results", + "title": "results > results > results", + "section": "results > results", + "text": "property SamplingPoint.results: Any\n\nResults of the sampling point results as a JSON dictionary.\n\nReturn type\n\nAny\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lower", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lower.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.lower", - "title": "lower > lower > lower", - "section": "lower > lower", - "text": "FailureMeasureEnum.lower(/)\n\nReturn a copy of the string converted to lowercase.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K3", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K3.html#thermal_conductivity_k3", + "title": "Thermal_Conductivity_K3", + "section": "Thermal_Conductivity_K3", + "text": "Thermal_Conductivity_K3" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K3", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K3.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K3", + "title": "Thermal_Conductivity_K3 > Thermal_Conductivity_K3 > Thermal_Conductivity_K3", + "section": "Thermal_Conductivity_K3 > Thermal_Conductivity_K3", + "text": "MaterialProperty.Thermal_Conductivity_K3: str = 'thermal_conductivity_z_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.active.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property CuntzeCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxy", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxy.html#strain_limits_esxy", + "title": "Strain_Limits_eSxy", + "section": "Strain_Limits_eSxy", + "text": "Strain_Limits_eSxy" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmB", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmB.html#cmb", - "title": "cmB", - "section": "cmB", - "text": "cmB" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxy", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxy.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxy", + "title": "Strain_Limits_eSxy > Strain_Limits_eSxy > Strain_Limits_eSxy", + "section": "Strain_Limits_eSxy > Strain_Limits_eSxy", + "text": "MaterialProperty.Strain_Limits_eSxy: str = 'strain_shear_xy'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmB", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmB.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cmB", - "title": "cmB > cmB > cmB", - "section": "cmB > cmB", - "text": "FailureModeEnum.cmB = 1004\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.combined_failure_criterion", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.combined_failure_criterion.html#combined_failure_criterion", + "title": "combined_failure_criterion", + "section": "combined_failure_criterion", + "text": "Configuration of the failure criteria such as maximum stress, puck, and wrinkling.\nCombinedFailureCriterion\ncombined_failure_criterion\nCombinedFailureCriterion" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip.html#rstrip", - "title": "rstrip", - "section": "rstrip", - "text": "Return a copy of the string with trailing whitespace removed.\nIf chars is given and not None, remove characters in chars instead.\nrstrip" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.combined_failure_criterion", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.combined_failure_criterion.html#ansys.dpf.composites.result_definition.ResultDefinition.combined_failure_criterion", + "title": "combined_failure_criterion > combined_failure_criterion > combined_failure_criterion", + "section": "combined_failure_criterion > combined_failure_criterion", + "text": "property ResultDefinition.combined_failure_criterion: CombinedFailureCriterion\n\nConfiguration of the failure criteria such as maximum stress, puck, and wrinkling.\n\nReturn type\n\nCombinedFailureCriterion\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip", - "title": "rstrip > rstrip > rstrip", - "section": "rstrip > rstrip", - "text": "FailureMeasureEnum.rstrip(chars=None, /)\n\nReturn a copy of the string with trailing whitespace removed.\n\nIf chars is given and not None, remove characters in chars instead.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1.html#engineering_constants_e1", + "title": "Engineering_Constants_E1", + "section": "Engineering_Constants_E1", + "text": "Engineering_Constants_E1" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.center", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.center.html#center", - "title": "center", - "section": "center", - "text": "Return a centered string of length width.\nPadding is done using the specified fill character (default is a space).\ncenter" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1", + "title": "Engineering_Constants_E1 > Engineering_Constants_E1 > Engineering_Constants_E1", + "section": "Engineering_Constants_E1 > Engineering_Constants_E1", + "text": "MaterialProperty.Engineering_Constants_E1: str = 'young_modulus_x_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.center", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.center.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.center", - "title": "center > center > center", - "section": "center > center", - "text": "FailureMeasureEnum.center(width, fillchar=' ', /)\n\nReturn a centered string of length width.\n\nPadding is done using the specified fill character (default is a space).\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR33", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR33.html#tensor33", + "title": "TENSOR33", + "section": "TENSOR33", + "text": "TENSOR33" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.html#hoffmancriterion", - "title": "HoffmanCriterion", - "section": "HoffmanCriterion", - "text": "Defines the Hoffman failure criterion for orthotropic reinforced materials.\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\nHoffmanCriterion.to_dict()\n\nHoffmanCriterion.to_json()\n\nHoffmanCriterion.active\nThe failure criterion is suppressed if active is False.\nHoffmanCriterion.dim\nSpecifies which formulation of the failure criterion is used.\nHoffmanCriterion.name\nName of the failure criterion.\nHoffmanCriterion.wf\nWeighting factor of this failure criterion.\nHoffmanCriterion\nfloat\n1.0\nint\n2\nHoffmanCriterion.to_dict\nHoffmanCriterion.to_json\nHoffmanCriterion.active\nHoffmanCriterion.dim\nHoffmanCriterion.name\nHoffmanCriterion.wf" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR33", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR33.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR33", + "title": "TENSOR33 > TENSOR33 > TENSOR33", + "section": "TENSOR33 > TENSOR33", + "text": "Sym3x3TensorComponent.TENSOR33 = 2\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion", - "title": "HoffmanCriterion > HoffmanCriterion > HoffmanCriterion", - "section": "HoffmanCriterion > HoffmanCriterion", - "text": "class ansys.dpf.composites.failure_criteria.HoffmanCriterion(*, active=True, wf=1.0, dim=2)\n\nDefines the Hoffman failure criterion for orthotropic reinforced materials.\n\nParameters\n\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\n\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nHoffmanCriterion.to_dict()\n\n\n\nHoffmanCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nHoffmanCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nHoffmanCriterion.dim\n\nSpecifies which formulation of the failure criterion is used.\n\nHoffmanCriterion.name\n\nName of the failure criterion.\n\nHoffmanCriterion.wf\n\nWeighting factor of this failure criterion.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.ANGLE", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.ANGLE.html#angle", + "title": "ANGLE", + "section": "ANGLE", + "text": "ANGLE" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.cfps", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.cfps.html#cfps", - "title": "cfps", - "section": "cfps", - "text": "Whether to consider inter-fiber strength reduction due to fiber parallel stresses.\nbool\ncfps\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.ANGLE", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.ANGLE.html#ansys.dpf.composites.layup_info.LayupProperty.ANGLE", + "title": "ANGLE > ANGLE > ANGLE", + "section": "ANGLE > ANGLE", + "text": "LayupProperty.ANGLE = 0\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.cfps", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.cfps.html#ansys.dpf.composites.failure_criteria.PuckCriterion.cfps", - "title": "cfps > cfps > cfps", - "section": "cfps > cfps", - "text": "property PuckCriterion.cfps: bool\n\nWhether to consider inter-fiber strength reduction due to fiber parallel stresses.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle.html#fracture_plane_angle", + "title": "fracture_plane_angle", + "section": "fracture_plane_angle", + "text": "Fracture plane angle in degrees. The default is 53. The value must be greater than 45. The value depends on the out-of-plane shear friction coefficient.\nfloat\nfracture_plane_angle\n53\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Specific_Heat_cp", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Specific_Heat_cp.html#specific_heat_cp", - "title": "Specific_Heat_cp", - "section": "Specific_Heat_cp", - "text": "Specific_Heat_cp" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle", + "title": "fracture_plane_angle > fracture_plane_angle > fracture_plane_angle", + "section": "fracture_plane_angle > fracture_plane_angle", + "text": "property CuntzeCriterion.fracture_plane_angle: float\n\nFracture plane angle in degrees. The default is 53. The value must be greater than 45. The value depends on the out-of-plane shear friction coefficient.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Specific_Heat_cp", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Specific_Heat_cp.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Specific_Heat_cp", - "title": "Specific_Heat_cp > Specific_Heat_cp > Specific_Heat_cp", - "section": "Specific_Heat_cp > Specific_Heat_cp", - "text": "MaterialProperty.Specific_Heat_cp: str = 'specific_heat'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_factor", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_factor.html#safety_factor", + "title": "safety_factor", + "section": "safety_factor", + "text": "safety_factor" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.is_uptodate", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.is_uptodate.html#is_uptodate", - "title": "is_uptodate", - "section": "is_uptodate", - "text": "True if the Sampling Point is up-to-date.\nbool\nis_uptodate\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_factor", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_factor.html#ansys.dpf.composites.sampling_point.FailureResult.safety_factor", + "title": "safety_factor > safety_factor > safety_factor", + "section": "safety_factor > safety_factor", + "text": "FailureResult.safety_factor: float\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.is_uptodate", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.is_uptodate.html#ansys.dpf.composites.sampling_point.SamplingPoint.is_uptodate", - "title": "is_uptodate > is_uptodate > is_uptodate", - "section": "is_uptodate > is_uptodate", - "text": "property SamplingPoint.is_uptodate: bool\n\nTrue if the Sampling Point is up-to-date.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vms", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vms.html#vms", + "title": "vms", + "section": "vms", + "text": "Whether to activate the von Mises stress criterion.\nbool\nvms\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc6", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc6.html#lfc6", - "title": "lfc6", - "section": "lfc6", - "text": "lfc6" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vms", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vms.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.vms", + "title": "vms > vms > vms", + "section": "vms > vms", + "text": "property VonMisesCriterion.vms: bool\n\nWhether to activate the von Mises stress criterion.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc6", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc6.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc6", - "title": "lfc6 > lfc6 > lfc6", - "section": "lfc6 > lfc6", - "text": "FailureModeEnum.lfc6 = 903\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rjust", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rjust.html#rjust", + "title": "rjust", + "section": "rjust", + "text": "Return a right-justified string of length width.\nPadding is done using the specified fill character (default is a space).\nrjust" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos.html#puck_constants_p_21_pos", - "title": "Puck_Constants_p_21_pos", - "section": "Puck_Constants_p_21_pos", - "text": "Puck_Constants_p_21_pos" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rjust", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rjust.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rjust", + "title": "rjust > rjust > rjust", + "section": "rjust > rjust", + "text": "FailureMeasureEnum.rjust(width, fillchar=' ', /)\n\nReturn a right-justified string of length width.\n\nPadding is done using the specified fill character (default is a space).\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos", - "title": "Puck_Constants_p_21_pos > Puck_Constants_p_21_pos > Puck_Constants_p_21_pos", - "section": "Puck_Constants_p_21_pos > Puck_Constants_p_21_pos", - "text": "MaterialProperty.Puck_Constants_p_21_pos: str = 'tensile_inclination_xz_puck_constants'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_json.html#to_json", + "title": "to_json", + "section": "to_json", + "text": "Return the combined failure criterion as a JSON dictionary.\nstr\nString representation (json.dumps file) that can be used for the result definition\nof the DPF Composites Failure evaluator operator.\nto_json\nstr\njson.dumps" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.html#elementinfoprovider", - "title": "ElementInfoProvider", - "section": "ElementInfoProvider", - "text": "Provider for ElementInfo.\nUse get_element_info_provider() to create ElementInfoProvider\nobjects.\nInitialize the class before a loop and\ncall get_element_info() for each element.\nNote that the ElementInfoProvider class is not fully supported for\ndistributed RST files. The get_element_info() method will raise an\nexception if the DPF server version does not support reading the required\ninformation.\nmesh (MeshedRegion)\nlayer_indices (PropertyField)\nelement_types_apdl (PropertyField)\nelement_types_dpf (PropertyField)\nkeyopt_8_values (PropertyField)\nkeyopt_3_values (PropertyField)\nmaterial_ids (PropertyField)\nno_bounds_checks (bool, default: False) – Disable bounds checks.\nResults in better performance but potentially cryptic\nerror messages\nElementInfoProvider.get_element_info(element_id)\nGet ElementInfo for a given element id.\nElementInfoProvider\nElementInfo\nget_element_info_provider()\nElementInfoProvider\nget_element_info()\nElementInfoProvider\nget_element_info()\nMeshedRegion\nPropertyField\nPropertyField\nPropertyField\nPropertyField\nPropertyField\nPropertyField\nbool\nFalse\nElementInfoProvider.get_element_info\nElementInfo" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_json.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_json", + "title": "to_json > to_json > to_json", + "section": "to_json > to_json", + "text": "CombinedFailureCriterion.to_json()\n\nReturn the combined failure criterion as a JSON dictionary.\n\nReturn type\n\nstr\n\nReturns\n\nString representation (json.dumps file) that can be used for the result definition\nof the DPF Composites Failure evaluator operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.html#ansys.dpf.composites.layup_info.ElementInfoProvider", - "title": "ElementInfoProvider > ElementInfoProvider > ElementInfoProvider", - "section": "ElementInfoProvider > ElementInfoProvider", - "text": "class ansys.dpf.composites.layup_info.ElementInfoProvider(mesh, layer_indices, element_types_apdl, element_types_dpf, keyopt_8_values, keyopt_3_values, material_ids, solver_material_ids=None, no_bounds_checks=False)\n\nProvider for ElementInfo.\n\nUse get_element_info_provider() to create ElementInfoProvider\nobjects.\n\nInitialize the class before a loop and\ncall get_element_info() for each element.\n\nNote that the ElementInfoProvider class is not fully supported for\ndistributed RST files. The get_element_info() method will raise an\nexception if the DPF server version does not support reading the required\ninformation.\n\nParameters\n\nmesh (MeshedRegion)\n\nlayer_indices (PropertyField)\n\nelement_types_apdl (PropertyField)\n\nelement_types_dpf (PropertyField)\n\nkeyopt_8_values (PropertyField)\n\nkeyopt_3_values (PropertyField)\n\nmaterial_ids (PropertyField)\n\nno_bounds_checks (bool, default: False) – Disable bounds checks.\nResults in better performance but potentially cryptic\nerror messages\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nElementInfoProvider.get_element_info(element_id)\n\nGet ElementInfo for a given element id.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.index", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.index.html#index", + "title": "index", + "section": "index", + "text": "Return the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\nOptional arguments start and end are interpreted as in slice notation.\nRaises ValueError when the substring is not found.\nindex" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12.html#polar_properties_g12", - "title": "polar_properties_G12", - "section": "polar_properties_G12", - "text": "Polar property G12 of the laminate.\nndarray[Any, dtype[float64]]\npolar_properties_G12\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.index", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.index.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.index", + "title": "index > index > index", + "section": "index > index", + "text": "FailureMeasureEnum.index(sub, [start, [end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nOptional arguments start and end are interpreted as in slice notation.\nRaises ValueError when the substring is not found.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12.html#ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12", - "title": "polar_properties_G12 > polar_properties_G12 > polar_properties_G12", - "section": "polar_properties_G12 > polar_properties_G12", - "text": "property SamplingPoint.polar_properties_G12: ndarray[Any, dtype[float64]]\n\nPolar property G12 of the laminate.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hd", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hd.html#hd", + "title": "hd", + "section": "hd", + "text": "hd" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.old_composite_sources", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.old_composite_sources.html#old_composite_sources", - "title": "old_composite_sources", - "section": "old_composite_sources", - "text": "old_composite_sources" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hd", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hd.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.hd", + "title": "hd > hd > hd", + "section": "hd > hd", + "text": "FailureModeEnum.hd = 603\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.old_composite_sources", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.old_composite_sources.html#ansys.dpf.composites.data_sources.CompositeDataSources.old_composite_sources", - "title": "old_composite_sources > old_composite_sources > old_composite_sources", - "section": "old_composite_sources > old_composite_sources", - "text": "CompositeDataSources.old_composite_sources: dict[str, DataSources]\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot", + "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.html#spot", + "title": "Spot", + "section": "Spot", + "text": "Implements an interface to access the spots of the results of layered elements.\nSpot.BOTTOM\n\nSpot.MIDDLE\n\nSpot.TOP\n\nSpot\nSpot.BOTTOM\nSpot.MIDDLE\nSpot.TOP" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_spots", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_spots.html#n_spots", - "title": "n_spots", - "section": "n_spots", - "text": "n_spots" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot", + "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.html#ansys.dpf.composites.constants.Spot", + "title": "Spot > Spot > Spot", + "section": "Spot > Spot", + "text": "class ansys.dpf.composites.constants.Spot(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nImplements an interface to access the spots of the results of layered elements.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nSpot.BOTTOM\n\n\n\nSpot.MIDDLE\n\n\n\nSpot.TOP\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_spots", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_spots.html#ansys.dpf.composites.layup_info.ElementInfo.n_spots", - "title": "n_spots > n_spots > n_spots", - "section": "n_spots > n_spots", - "text": "ElementInfo.n_spots: int\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.dsdat", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.dsdat.html#dsdat", + "title": "dsdat", + "section": "dsdat", + "text": "dsdat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_definition_labels", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_definition_labels.html#composite_definition_labels", - "title": "composite_definition_labels", - "section": "composite_definition_labels", - "text": "All composite definition labels in the model.\nThis property is only relevant for assemblies.\nSequence[str]\ncomposite_definition_labels\nSequence\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.dsdat", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.dsdat.html#ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.dsdat", + "title": "dsdat > dsdat > dsdat", + "section": "dsdat > dsdat", + "text": "ShortFiberCompositesFiles.dsdat: str | PathLike[str]\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_definition_labels", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_definition_labels.html#ansys.dpf.composites.composite_model.CompositeModel.composite_definition_labels", - "title": "composite_definition_labels > composite_definition_labels > composite_definition_labels", - "section": "composite_definition_labels > composite_definition_labels", - "text": "property CompositeModel.composite_definition_labels: Sequence[str]\n\nAll composite definition labels in the model.\n\nThis property is only relevant for assemblies.\n\nReturn type\n\nSequence[str]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.dim.html#dim", + "title": "dim", + "section": "dim", + "text": "Specifies which formulation of the failure criterion is used.\nint\ndim\nint" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.dim.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.dim", + "title": "dim > dim > dim", + "section": "dim > dim", + "text": "property TsaiHillCriterion.dim: int\n\nSpecifies which formulation of the failure criterion is used.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" }, { "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e3", @@ -5796,1019 +5551,1005 @@ "text": "property SamplingPoint.e3: ndarray[Any, dtype[float64]]\n\nStrains in the material 3 direction of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.name.html#ansys.dpf.composites.failure_criteria.HashinCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property HashinCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_json.html#to_json", - "title": "to_json", - "section": "to_json", - "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_json.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_json", - "title": "to_json > to_json > to_json", - "section": "to_json > to_json", - "text": "VonMisesCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers.html#get_property_for_all_layers", - "title": "get_property_for_all_layers", - "section": "get_property_for_all_layers", - "text": "Get a layer property for an element ID.\nReturns a numpy array with the values of the property for all the layers.\nValues are ordered from bottom to top.\nThis method returns None if the element is not layered.\nlayup_property (LayerProperty) – Lay-up property.\nelement_id (int) – Element ID or label.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nOptional[ndarray[Any, dtype[float64]]]\nget_property_for_all_layers\nNone\nLayerProperty\nint\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nOptional\nndarray\nAny\ndtype\nfloat64" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers.html#ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers", - "title": "get_property_for_all_layers > get_property_for_all_layers > get_property_for_all_layers", - "section": "get_property_for_all_layers > get_property_for_all_layers", - "text": "CompositeModel.get_property_for_all_layers(layup_property, element_id, composite_definition_label=None)\n\nGet a layer property for an element ID.\n\nReturns a numpy array with the values of the property for all the layers.\nValues are ordered from bottom to top.\n\nThis method returns None if the element is not layered.\n\nParameters\n\nlayup_property (LayerProperty) – Lay-up property.\n\nelement_id (int) – Element ID or label.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nOptional[ndarray[Any, dtype[float64]]]\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_layered", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_layered.html#is_layered", - "title": "is_layered", - "section": "is_layered", - "text": "is_layered" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_layered", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_layered.html#ansys.dpf.composites.layup_info.ElementInfo.is_layered", - "title": "is_layered > is_layered > is_layered", - "section": "is_layered > is_layered", - "text": "ElementInfo.is_layered: bool\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3c.html#s3c", + "title": "s3c", + "section": "s3c", + "text": "s3c" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_factor", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_factor.html#safety_factor", - "title": "safety_factor", - "section": "safety_factor", - "text": "safety_factor" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s3c", + "title": "s3c > s3c > s3c", + "section": "s3c > s3c", + "text": "FailureModeEnum.s3c = 232\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_factor", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_factor.html#ansys.dpf.composites.sampling_point.FailureResult.safety_factor", - "title": "safety_factor > safety_factor > safety_factor", - "section": "safety_factor > safety_factor", - "text": "FailureResult.safety_factor: float\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the combined failure criterion.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1c.html#e1c", - "title": "e1c", - "section": "e1c", - "text": "e1c" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.name.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property CombinedFailureCriterion.name: str\n\nName of the combined failure criterion.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e1c", - "title": "e1c > e1c > e1c", - "section": "e1c > e1c", - "text": "FailureModeEnum.e1c = 112\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.name", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the object.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1c.html#s1c", - "title": "s1c", - "section": "s1c", - "text": "s1c" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.name", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.name.html#ansys.dpf.composites.sampling_point.SamplingPoint.name", + "title": "name > name > name", + "section": "name > name", + "text": "property SamplingPoint.name: str\n\nName of the object.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s1c", - "title": "s1c > s1c > s1c", - "section": "s1c > s1c", - "text": "FailureModeEnum.s1c = 212\n\n" + "objectID": "intro", + "href": "intro.html#getting-started", + "title": "Getting started", + "section": "Getting started", + "text": "Getting started" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E.html#engineering_constants_e", - "title": "Engineering_Constants_E", - "section": "Engineering_Constants_E", - "text": "Engineering_Constants_E" + "objectID": "intro", + "href": "intro.html#installation", + "title": "Getting started > Installation", + "section": "Installation", + "text": "PyDPF Composites supports Ansys version 2023 R1 and later. Make sure you have a licensed copy of Ansys installed. See\nCompatibility to understand which ansys-dpf-composites version corresponds to which Ansys version.\nInstall the ansys-dpf-composites package with pip:\nTo install the optional dependencies used in the examples, add the [examples] suffix when installing the package:\nSpecific versions can be installed by specifying the version in the pip command. For example, Ansys 2023 R1 requires ansys-dpf-composites version 0.1.0:\nYou should use a virtual environment,\nbecause it keeps Python packages isolated from your system Python.\nInstallation\nansys-dpf-composites\nansys-dpf-composites\npip\n[examples]" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E", - "title": "Engineering_Constants_E > Engineering_Constants_E > Engineering_Constants_E", - "section": "Engineering_Constants_E > Engineering_Constants_E", - "text": "MaterialProperty.Engineering_Constants_E: str = 'young_modulus'\n\n" + "objectID": "intro", + "href": "intro.html#examples", + "title": "Getting started > Examples", + "section": "Examples", + "text": "The examples/index section provides these basic examples for getting started:\nsphx_glr_examples_gallery_examples_001_failure_operator_example.py\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py\nAt the end of each example, there is a button for downloading the example’s Python source code.\nInput files, such as the results file and composite definition, are downloaded from a Git\nrepository when running the example.\nFor larger models, initializing the CompositeModel class can be slow because it\nautomatically creates many different providers that are not needed in all workflows.\nConsider using the Lay-up information classes directly.\nExamples\nCompositeModel" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R11", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R11.html#hill_yield_criterion_r11", - "title": "Hill_Yield_Criterion_R11", - "section": "Hill_Yield_Criterion_R11", - "text": "Hill_Yield_Criterion_R11" + "objectID": "intro", + "href": "intro.html#start-from-a-local-ansys-workbench-project", + "title": "Getting started > Start from a local Ansys Workbench project", + "section": "Start from a local Ansys Workbench project", + "text": "To get started on a local Ansys Workbench project, first determine the result folder by\nright-clicking the solution object in Ansys Mechanical and selecting Open Solver Files Directory.\nThen call the get_composite_files_from_workbench_result_folder() function with this folder.\nThis code shows how to set up a project from Workbench, create a basic failure plot, and display\ndetailed output for a sampling point:\nStart from a local Ansys Workbench project\nget_composite_files_from_workbench_result_folder()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R11", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R11.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R11", - "title": "Hill_Yield_Criterion_R11 > Hill_Yield_Criterion_R11 > Hill_Yield_Criterion_R11", - "section": "Hill_Yield_Criterion_R11 > Hill_Yield_Criterion_R11", - "text": "MaterialProperty.Hill_Yield_Criterion_R11: str = 'yield_stress_ratio_x_hill_criterion'\n\n" + "objectID": "intro", + "href": "intro.html#compatibility", + "title": "Getting started > Compatibility", + "section": "Compatibility", + "text": "The following table shows which ansys-dpf-composites version is compatible with which server version (Ansys version). See Get DPF Docker image to get the pre-releases.\nBy default the DPF server is started from the latest Ansys installer. To choose a specific Ansys version or connect to an existing server, use the appropriate arguments for connect_to_or_start_server()\nServer version\nansys.dpf.composites Python module version\n9.0 (Ansys 2025 R1 pre0)\n0.3.0 and later\n8.1 (Ansys 2024 R2 pre1)\n0.3.0 and later\n8.0 (Ansys 2024 R2 pre0)\n0.3.0 and later\n7.0 (Ansys 2024 R1)\n0.3.0 and later\n7.0 (Ansys 2024 R1 pre0)\n0.3.0 and later\n6.2 (Ansys 2023 R2)\n0.2.0 and 0.3\n6.1 (Ansys 2023 R2 pre1)\n0.2.0 and 0.3\n6.0 (Ansys 2023 R2 pre0)\nNot available. The composites plugin is not part of the Ansys 2023 R2 pre0 release.\n5.0 (Ansys 2023 R1)\n0.1.0\nCompatibility\nansys-dpf-composites\nconnect_to_or_start_server()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1.html#engineering_constants_e1", - "title": "Engineering_Constants_E1", - "section": "Engineering_Constants_E1", - "text": "Engineering_Constants_E1" + "objectID": "intro", + "href": "intro.html#getting-the-dpf-server-docker-image", + "title": "Getting started > Getting the DPF server Docker image", + "section": "Getting the DPF server Docker image", + "text": "Follow the steps described in the DPF documentation in the section Run DPF Server in A Docker Container.\nMake sure you also download the composites plugin (e.g ansys_dpf_composites_lin_v2024.1.pre0.zip).\nAfter following the preceding steps, you should have a running DPF Docker container that listens to port 50052.\nGetting the DPF server Docker image\nansys_dpf_composites_lin_v2024.1.pre0.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1", - "title": "Engineering_Constants_E1 > Engineering_Constants_E1 > Engineering_Constants_E1", - "section": "Engineering_Constants_E1 > Engineering_Constants_E1", - "text": "MaterialProperty.Engineering_Constants_E1: str = 'young_modulus_x_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR21", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR21.html#tensor21", + "title": "TENSOR21", + "section": "TENSOR21", + "text": "TENSOR21" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.translate", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.translate.html#translate", - "title": "translate", - "section": "translate", - "text": "Replace each character in the string using the given translation table.\nTranslation table, which must be a mapping of Unicode ordinals to\nUnicode ordinals, strings, or None.\nThe table must implement lookup/indexing via __getitem__, for instance a\ndictionary or list. If this operation raises LookupError, the character is\nleft untouched. Characters mapped to None are deleted.\ntranslate" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR21", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR21.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR21", + "title": "TENSOR21 > TENSOR21 > TENSOR21", + "section": "TENSOR21 > TENSOR21", + "text": "Sym3x3TensorComponent.TENSOR21 = 3\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.translate", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.translate.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.translate", - "title": "translate > translate > translate", - "section": "translate > translate", - "text": "FailureMeasureEnum.translate(table, /)\n\nReplace each character in the string using the given translation table.\n\ntable\n\nTranslation table, which must be a mapping of Unicode ordinals to\nUnicode ordinals, strings, or None.\n\nThe table must implement lookup/indexing via __getitem__, for instance a\ndictionary or list. If this operation raises LookupError, the character is\nleft untouched. Characters mapped to None are deleted.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_json.html#to_json", + "title": "to_json", + "section": "to_json", + "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.ply_element_ids", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.ply_element_ids.html#ply_element_ids", - "title": "ply_element_ids", - "section": "ply_element_ids", - "text": "Return list of element labels of the analysis ply.\nSequence[int64]\nply_element_ids\nSequence\nint64" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_json.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_json", + "title": "to_json > to_json > to_json", + "section": "to_json > to_json", + "text": "HoffmanCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.ply_element_ids", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.ply_element_ids.html#ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.ply_element_ids", - "title": "ply_element_ids > ply_element_ids > ply_element_ids", - "section": "ply_element_ids > ply_element_ids", - "text": "AnalysisPlyInfoProvider.ply_element_ids()\n\nReturn list of element labels of the analysis ply.\n\nReturn type\n\nSequence[int64]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_result_plots", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_result_plots.html#get_result_plots", + "title": "get_result_plots", + "section": "get_result_plots", + "text": "Generate a figure with a grid of axes (plot) for each selected result entity.\nstrain_components (Sequence[str], default: ('e1', 'e2', 'e3', 'e12', 'e13', 'e23')) – Strain entities of interest. Supported values are \"e1\", \"e2\",\n\"e3\", \"e12\", \"e13\", and \"e23\". The plot is skipped\nif the list is empty.\nstress_components (Sequence[str], default: ('s1', 's2', 's3', 's12', 's13', 's23')) – Stress entities of interest. Supported values are \"s1\", \"s2\",\n\"s3\", \"s12\", \"s13\", and \"s23\". The plot is skipped\nif the list is empty.\nfailure_components (Sequence[FailureMeasureEnum], default: (, , )) – Failure values of interest. Values supported are \"irf\", \"rf\",\nand \"mos\". The plot is skipped if the list is empty.\nshow_failure_modes (bool, default: False) – WHether to add the critical failure mode to the failure plot.\ncreate_laminate_plot (bool, default: True) – Whether to plot the stacking sequence of the laminate, including text information\nsuch as material, thickness, and angle.\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\nspots (Collection[Spot], default: (, , )) – Spots (interfaces) to show results at.\nSamplingPointFigure\nget_result_plots\nSequence\nstr\n('e1', 'e2', 'e3', 'e12', 'e13', 'e23')\n\"e1\"\n\"e2\"\n\"e3\"\n\"e12\"\n\"e13\"\n\"e23\"\nSequence\nstr\n('s1', 's2', 's3', 's12', 's13', 's23')\n\"s1\"\n\"s2\"\n\"s3\"\n\"s12\"\n\"s13\"\n\"s23\"\nSequence\nFailureMeasureEnum\n(, , )\n\"irf\"\n\"rf\"\n\"mos\"\nbool\nFalse\nbool\nTrue\nfloat\n1.0\nCollection\nSpot\n(, , )\nSamplingPointFigure" }, { - "objectID": "examples/index", - "href": "examples/index.html#examples", - "title": "Examples", - "section": "Examples", - "text": "These examples demonstrate the behavior and usage of PyDPF Composites.\nsphx_glr_examples_gallery_examples_001_failure_operator_example.py\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py\nsphx_glr_examples_gallery_examples_003_short_fiber_example.py\nsphx_glr_examples_gallery_examples_004_get_material_properties_example.py\nsphx_glr_examples_gallery_examples_005_get_layup_properties_example.py\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py\nsphx_glr_examples_gallery_examples_008_assembly_example.py\nsphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py\nsphx_glr_examples_gallery_examples_010_harmonic_example.py\nsphx_glr_examples_gallery_examples_011_rst_workflow.py\nsphx_glr_examples_gallery_examples_012_fatigue_example.py\nsphx_glr_examples_gallery_examples_013_thermal_example.py\nsphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py\nsphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py\nGallery generated by Sphinx-Gallery\nExamples" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_result_plots", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_result_plots.html#ansys.dpf.composites.sampling_point.SamplingPoint.get_result_plots", + "title": "get_result_plots > get_result_plots > get_result_plots", + "section": "get_result_plots > get_result_plots", + "text": "SamplingPoint.get_result_plots(strain_components=('e1', 'e2', 'e3', 'e12', 'e13', 'e23'), stress_components=('s1', 's2', 's3', 's12', 's13', 's23'), failure_components=(FailureMeasureEnum.INVERSE_RESERVE_FACTOR, FailureMeasureEnum.RESERVE_FACTOR, FailureMeasureEnum.MARGIN_OF_SAFETY), show_failure_modes=False, create_laminate_plot=True, core_scale_factor=1.0, spots=(Spot.BOTTOM, Spot.MIDDLE, Spot.TOP))\n\nGenerate a figure with a grid of axes (plot) for each selected result entity.\n\nParameters\n\nstrain_components (Sequence[str], default: ('e1', 'e2', 'e3', 'e12', 'e13', 'e23')) – Strain entities of interest. Supported values are \"e1\", \"e2\",\n\"e3\", \"e12\", \"e13\", and \"e23\". The plot is skipped\nif the list is empty.\n\nstress_components (Sequence[str], default: ('s1', 's2', 's3', 's12', 's13', 's23')) – Stress entities of interest. Supported values are \"s1\", \"s2\",\n\"s3\", \"s12\", \"s13\", and \"s23\". The plot is skipped\nif the list is empty.\n\nfailure_components (Sequence[FailureMeasureEnum], default: (, , )) – Failure values of interest. Values supported are \"irf\", \"rf\",\nand \"mos\". The plot is skipped if the list is empty.\n\nshow_failure_modes (bool, default: False) – WHether to add the critical failure mode to the failure plot.\n\ncreate_laminate_plot (bool, default: True) – Whether to plot the stacking sequence of the laminate, including text information\nsuch as material, thickness, and angle.\n\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\n\nspots (Collection[Spot], default: (, , )) – Spots (interfaces) to show results at.\n\nExamples\n\n>>> figure, axes = sampling_point.get_result_plots()\n\nReturn type\n\nSamplingPointFigure\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property_dict", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property_dict.html#get_constant_property_dict", - "title": "get_constant_property_dict", - "section": "get_constant_property_dict", - "text": "Get a dictionary with constant properties.\nReturns a dictionary with the DPF material ID as a key and\na dictionary with the requested properties as the value. Only constant properties\nare supported. Variable properties are evaluated at their\ndefault values.\nBecause this method can be slow to evaluate, it should not\nbe called in a loop.\nmaterial_properties (Collection[MaterialProperty]) – Material properties to request.\nmaterials_provider (Operator) – DPF Materials provider operator. This value is Available from the\nCompositeModel.material_operators attribute.\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source or stream provider that contains the RST file.\nmesh (MeshedRegion) – DPF meshed region enriched with lay-up information.\ndict[int64, dict[MaterialProperty, float]]\nget_constant_property_dict\nCollection\nMaterialProperty\nOperator\nCompositeModel.material_operators\nDataSources\nOperator\nMeshedRegion\ndict\nint64\ndict\nMaterialProperty\nfloat" + "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", + "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#plot-of-the-orientation-tensor-for-short-fiber-composites", + "title": "Plot of the orientation tensor for short fiber composites", + "section": "Plot of the orientation tensor for short fiber composites", + "text": "This example shows how to reconstruct and plot the components\nof the fiber orientation tensor in the global coordinate system.\nFor more details about the fiber orientation tensor,\nrefer to the Short Fiber Composites help.\nTo run this example you first need to install the SciPy package.\nPlot of the orientation tensor for short fiber composites" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property_dict", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property_dict.html#ansys.dpf.composites.layup_info.material_properties.get_constant_property_dict", - "title": "get_constant_property_dict > get_constant_property_dict > get_constant_property_dict", - "section": "get_constant_property_dict > get_constant_property_dict", - "text": "ansys.dpf.composites.layup_info.material_properties.get_constant_property_dict(material_properties, materials_provider, data_source_or_streams_provider, mesh)\n\nGet a dictionary with constant properties.\n\nReturns a dictionary with the DPF material ID as a key and\na dictionary with the requested properties as the value. Only constant properties\nare supported. Variable properties are evaluated at their\ndefault values.\nBecause this method can be slow to evaluate, it should not\nbe called in a loop.\n\nParameters\n\nmaterial_properties (Collection[MaterialProperty]) – Material properties to request.\n\nmaterials_provider (Operator) – DPF Materials provider operator. This value is Available from the\nCompositeModel.material_operators attribute.\n\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source or stream provider that contains the RST file.\n\nmesh (MeshedRegion) – DPF meshed region enriched with lay-up information.\n\nReturn type\n\ndict[int64, dict[MaterialProperty, float]]\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", + "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#set-up-analysis", + "title": "Plot of the orientation tensor for short fiber composites > Set up analysis", + "section": "Set up analysis", + "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nThese files are needed:\nMechanical APDL result (RST) file containing the simulation results\nMechanical APDL input file (DS.DAT) containing the fiber orientation tensor data\nSet up analysis" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cft", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cft.html#cft", - "title": "cft", - "section": "cft", - "text": "cft" + "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", + "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#set-up-data-sources", + "title": "Plot of the orientation tensor for short fiber composites > Set up data sources", + "section": "Set up data sources", + "text": "Set up the data sources.\nSet up data sources" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cft", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cft.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cft", - "title": "cft > cft > cft", - "section": "cft > cft", - "text": "FailureModeEnum.cft = 1001\n\n" + "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", + "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#initialize-dpf-model", + "title": "Plot of the orientation tensor for short fiber composites > Initialize DPF model", + "section": "Initialize DPF model", + "text": "Initialize the DPF model.\nShould your mesh contain both solid and shell elements, for visualization purposes\nit can be useful to scope the mesh to the solid ones.\nInitialize DPF model" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zc.html#stress_limits_zc", - "title": "Stress_Limits_Zc", - "section": "Stress_Limits_Zc", - "text": "Stress_Limits_Zc" + "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", + "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#plot-input-data", + "title": "Plot of the orientation tensor for short fiber composites > Plot input data", + "section": "Plot input data", + "text": "Plot the two largest eigenvalues (a11 and a22) of the fiber orientation tensor.\nNote that the plots reveal the presence of a weld line in the middle of the specimen.\nPlot input data" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zc", - "title": "Stress_Limits_Zc > Stress_Limits_Zc > Stress_Limits_Zc", - "section": "Stress_Limits_Zc > Stress_Limits_Zc", - "text": "MaterialProperty.Stress_Limits_Zc: str = 'stress_compressive_z_direction'\n\n" + "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", + "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#compute-results", + "title": "Plot of the orientation tensor for short fiber composites > Compute results", + "section": "Compute results", + "text": "Reconstruct the fiber orientation tensor in the global coordinate system.\nCompute results" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.THICKNESS", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.THICKNESS.html#thickness", - "title": "THICKNESS", - "section": "THICKNESS", - "text": "THICKNESS" + "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", + "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#plot-results", + "title": "Plot of the orientation tensor for short fiber composites > Plot results", + "section": "Plot results", + "text": "Plot some components of the fiber orientation tensor.\nTotal running time of the script: (0 minutes 6.005 seconds)\nDownload Jupyter notebook: 009_short_fiber_orientation_tensor.ipynb\nDownload Python source code: 009_short_fiber_orientation_tensor.py\nDownload zipped: 009_short_fiber_orientation_tensor.zip\nGallery generated by Sphinx-Gallery\nPlot results\nDownload Jupyter notebook: 009_short_fiber_orientation_tensor.ipynb\nDownload Python source code: 009_short_fiber_orientation_tensor.py\nDownload zipped: 009_short_fiber_orientation_tensor.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.THICKNESS", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.THICKNESS.html#ansys.dpf.composites.layup_info.LayupProperty.THICKNESS", - "title": "THICKNESS > THICKNESS > THICKNESS", - "section": "THICKNESS > THICKNESS", - "text": "LayupProperty.THICKNESS = 2\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSyz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSyz.html#strain_limits_esyz", + "title": "Strain_Limits_eSyz", + "section": "Strain_Limits_eSyz", + "text": "Strain_Limits_eSyz" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pd.html#pd", - "title": "pd", - "section": "pd", - "text": "pd" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSyz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSyz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSyz", + "title": "Strain_Limits_eSyz > Strain_Limits_eSyz > Strain_Limits_eSyz", + "section": "Strain_Limits_eSyz > Strain_Limits_eSyz", + "text": "MaterialProperty.Strain_Limits_eSyz: str = 'strain_shear_yz'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pd.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.pd", - "title": "pd > pd > pd", - "section": "pd > pd", - "text": "FailureModeEnum.pd = 805\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_laminate_offset", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_laminate_offset.html#get_element_laminate_offset", + "title": "get_element_laminate_offset", + "section": "get_element_laminate_offset", + "text": "Get the laminate offset of an element.\nTHis method returns None if the element is not layered.\nelement_id (int) – Element ID or label.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nOptional[float64]\nget_element_laminate_offset\nNone\nint\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nOptional\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e3.html#wf_e3", - "title": "wf_e3", - "section": "wf_e3", - "text": "Weighting factor of the failure mode e3.\nfloat\nwf_e3\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_laminate_offset", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_laminate_offset.html#ansys.dpf.composites.composite_model.CompositeModel.get_element_laminate_offset", + "title": "get_element_laminate_offset > get_element_laminate_offset > get_element_laminate_offset", + "section": "get_element_laminate_offset > get_element_laminate_offset", + "text": "CompositeModel.get_element_laminate_offset(element_id, composite_definition_label=None)\n\nGet the laminate offset of an element.\n\nTHis method returns None if the element is not layered.\n\nParameters\n\nelement_id (int) – Element ID or label.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nOptional[float64]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e3.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e3", - "title": "wf_e3 > wf_e3 > wf_e3", - "section": "wf_e3 > wf_e3", - "text": "property MaxStrainCriterion.wf_e3: float\n\nWeighting factor of the failure mode e3.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2.html#s2", + "title": "s2", + "section": "s2", + "text": "Whether to activate the failure evaluation regarding the stress in the material 2 direction.\nbool\ns2\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot.TOP", - "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.TOP.html#top", - "title": "TOP", - "section": "TOP", - "text": "TOP" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2", + "title": "s2 > s2 > s2", + "section": "s2 > s2", + "text": "property MaxStressCriterion.s2: bool\n\nWhether to activate the failure evaluation regarding the stress in the material 2 direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.active.html#active", + "title": "active", + "section": "active", + "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot.TOP", - "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.TOP.html#ansys.dpf.composites.constants.Spot.TOP", - "title": "TOP > TOP > TOP", - "section": "TOP > TOP", - "text": "Spot.TOP = 3\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.active.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property FaceSheetWrinklingCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.ACP", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.ACP.html#acp", - "title": "ACP", - "section": "ACP", - "text": "ACP" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_rst_streams_provider", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_rst_streams_provider.html#get_rst_streams_provider", + "title": "get_rst_streams_provider", + "section": "get_rst_streams_provider", + "text": "Get the streams provider of the loaded result file.\nOperator\nget_rst_streams_provider\nOperator" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.ACP", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.ACP.html#ansys.dpf.composites.layup_info.LayupModelContextType.ACP", - "title": "ACP > ACP > ACP", - "section": "ACP > ACP", - "text": "LayupModelContextType.ACP = 1\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_rst_streams_provider", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_rst_streams_provider.html#ansys.dpf.composites.composite_model.CompositeModel.get_rst_streams_provider", + "title": "get_rst_streams_provider > get_rst_streams_provider > get_rst_streams_provider", + "section": "get_rst_streams_provider > get_rst_streams_provider", + "text": "CompositeModel.get_rst_streams_provider()\n\nGet the streams provider of the loaded result file.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_json.html#to_json", - "title": "to_json", - "section": "to_json", - "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s23.html#wf_s23", + "title": "wf_s23", + "section": "wf_s23", + "text": "Weighting factor of the failure mode s23.\nfloat\nwf_s23\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_json.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_json", - "title": "to_json > to_json > to_json", - "section": "to_json > to_json", - "text": "TsaiHillCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s23.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s23", + "title": "wf_s23 > wf_s23 > wf_s23", + "section": "wf_s23 > wf_s23", + "text": "property MaxStressCriterion.wf_s23: float\n\nWeighting factor of the failure mode s23.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e13.html#e13", - "title": "e13", - "section": "e13", - "text": "Whether to activate the failure evaluation regarding the interlaminar shear strain e13.\nbool\ne13\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.ply_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.ply_scope.html#ply_scope", + "title": "ply_scope", + "section": "ply_scope", + "text": "ply_scope" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e13.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e13", - "title": "e13 > e13 > e13", - "section": "e13 > e13", - "text": "property MaxStrainCriterion.e13: bool\n\nWhether to activate the failure evaluation regarding the interlaminar shear strain e13.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.ply_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.ply_scope.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.ply_scope", + "title": "ply_scope > ply_scope > ply_scope", + "section": "ply_scope > ply_scope", + "text": "ResultDefinitionScope.ply_scope: Sequence[str]\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.element_id", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.element_id.html#element_id", + "title": "element_id", + "section": "element_id", + "text": "Element label for sampling the laminate.\nThis attribute returns -1 if the element ID is not set.\nOptional[int]\nelement_id\n-1\nOptional\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "MaxStressCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.element_id", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.element_id.html#ansys.dpf.composites.sampling_point.SamplingPoint.element_id", + "title": "element_id > element_id > element_id", + "section": "element_id > element_id", + "text": "property SamplingPoint.element_id: int | None\n\nElement label for sampling the laminate.\n\nThis attribute returns -1 if the element ID is not set.\n\nReturn type\n\nOptional[int]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xz", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xz.html#tsai_wu_constant_xz", - "title": "Tsai_Wu_Constant_xz", - "section": "Tsai_Wu_Constant_xz", - "text": "Tsai_Wu_Constant_xz" + "objectID": "examples/gallery_examples/004_get_material_properties_example", + "href": "examples/gallery_examples/004_get_material_properties_example.html#material-properties-and-custom-failure-criterion", + "title": "Material properties and custom failure criterion", + "section": "Material properties and custom failure criterion", + "text": "This example shows how to access constant material properties and how to\nimplement a custom failure criterion. The failure criterion is computed for\nall layers and integration points. Finally, the elemental maximum is computed and shown.\nOnly constant material properties are currently supported.\nWhen using a Workbench project,\nuse the get_composite_files_from_workbench_result_folder()\nmethod to obtain the input files.\nMaterial properties and custom failure criterion\nget_composite_files_from_workbench_result_folder()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xz", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xz", - "title": "Tsai_Wu_Constant_xz > Tsai_Wu_Constant_xz > Tsai_Wu_Constant_xz", - "section": "Tsai_Wu_Constant_xz > Tsai_Wu_Constant_xz", - "text": "MaterialProperty.Tsai_Wu_Constant_xz: str = 'coupling_coef_xz_tsai_wu'\n\n" + "objectID": "examples/gallery_examples/004_get_material_properties_example", + "href": "examples/gallery_examples/004_get_material_properties_example.html#script", + "title": "Material properties and custom failure criterion > Script", + "section": "Script", + "text": "Import dependencies\nStart a server and get the examples files.\nThis will copy the example files into the current working directory.\nSet up the composite model\nGet dictionary that maps dpf_material_id to properties\nThe creation of the dictionary is currently quite slow and\nshould be done before using the properties in a loop.\nCurrently only constant properties are supported.\nFor variable material properties, the default value is returned.\nGet strain field\nImplement a custom failure criterion: basic max strain\nTotal running time of the script: (0 minutes 3.103 seconds)\nDownload Jupyter notebook: 004_get_material_properties_example.ipynb\nDownload Python source code: 004_get_material_properties_example.py\nDownload zipped: 004_get_material_properties_example.zip\nGallery generated by Sphinx-Gallery\nScript\nDownload Jupyter notebook: 004_get_material_properties_example.ipynb\nDownload Python source code: 004_get_material_properties_example.py\nDownload zipped: 004_get_material_properties_example.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu.html#engineering_constants_nu", - "title": "Engineering_Constants_nu", - "section": "Engineering_Constants_nu", - "text": "Engineering_Constants_nu" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s23.html#s23", + "title": "s23", + "section": "s23", + "text": "s23" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu", - "title": "Engineering_Constants_nu > Engineering_Constants_nu > Engineering_Constants_nu", - "section": "Engineering_Constants_nu > Engineering_Constants_nu", - "text": "MaterialProperty.Engineering_Constants_nu: str = 'poisson_ratio'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s23.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s23", + "title": "s23 > s23 > s23", + "section": "s23 > s23", + "text": "FailureModeEnum.s23 = 260\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies.html#get_result_times_or_frequencies", - "title": "get_result_times_or_frequencies", - "section": "get_result_times_or_frequencies", - "text": "Get the times or frequencies in the result file.\nndarray[Any, dtype[float64]]\nget_result_times_or_frequencies\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz.html#strain_limits_esxz", + "title": "Strain_Limits_eSxz", + "section": "Strain_Limits_eSxz", + "text": "Strain_Limits_eSxz" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies.html#ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies", - "title": "get_result_times_or_frequencies > get_result_times_or_frequencies > get_result_times_or_frequencies", - "section": "get_result_times_or_frequencies > get_result_times_or_frequencies", - "text": "CompositeModel.get_result_times_or_frequencies()\n\nGet the times or frequencies in the result file.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz", + "title": "Strain_Limits_eSxz > Strain_Limits_eSxz > Strain_Limits_eSxz", + "section": "Strain_Limits_eSxz > Strain_Limits_eSxz", + "text": "MaterialProperty.Strain_Limits_eSxz: str = 'strain_shear_xz'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_pos", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_pos.html#puck_constants_p_22_pos", - "title": "Puck_Constants_p_22_pos", - "section": "Puck_Constants_p_22_pos", - "text": "Puck_Constants_p_22_pos" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_json.html#to_json", + "title": "to_json", + "section": "to_json", + "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_pos", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_pos.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_pos", - "title": "Puck_Constants_p_22_pos > Puck_Constants_p_22_pos > Puck_Constants_p_22_pos", - "section": "Puck_Constants_p_22_pos > Puck_Constants_p_22_pos", - "text": "MaterialProperty.Puck_Constants_p_22_pos: str = 'tensile_inclination_yz_puck_constants'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_json.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_json", + "title": "to_json > to_json > to_json", + "section": "to_json > to_json", + "text": "ShearCrimpingCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.smax", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.smax.html#smax", - "title": "smax", - "section": "smax", - "text": "smax" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.insert", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.insert.html#insert", + "title": "insert", + "section": "insert", + "text": "Add a failure criterion to a list of selected criteria.\nfc (FailureCriterionBase) – Failure criterion to add. If a failure criterion of the same type\nalready exists, it is overwritten.\nNone\ninsert\nFailureCriterionBase\nNone" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.smax", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.smax.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.smax", - "title": "smax > smax > smax", - "section": "smax > smax", - "text": "FailureModeEnum.smax = 201\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.insert", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.insert.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.insert", + "title": "insert > insert > insert", + "section": "insert > insert", + "text": "CombinedFailureCriterion.insert(fc)\n\nAdd a failure criterion to a list of selected criteria.\n\nParameters\n\nfc (FailureCriterionBase) – Failure criterion to add. If a failure criterion of the same type\nalready exists, it is overwritten.\n\nExamples\n\n>>> combined_failure = CombinedFailureCriterion(\"max_stress 3D\")\n>>> max_stress = MaxStressCriterion(s1=True, s2=True, s3=True,\n s12=True, s13=True, s23=True)\n>>> combined_failure.insert(max_stress)\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg.html#puck_constants_p_22_neg", - "title": "Puck_Constants_p_22_neg", - "section": "Puck_Constants_p_22_neg", - "text": "Puck_Constants_p_22_neg" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pd", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pd.html#pd", + "title": "pd", + "section": "pd", + "text": "Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\nbool\npd\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg", - "title": "Puck_Constants_p_22_neg > Puck_Constants_p_22_neg > Puck_Constants_p_22_neg", - "section": "Puck_Constants_p_22_neg > Puck_Constants_p_22_neg", - "text": "MaterialProperty.Puck_Constants_p_22_neg: str = 'compressive_inclination_yz_puck_constants'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pd", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pd.html#ansys.dpf.composites.failure_criteria.PuckCriterion.pd", + "title": "pd > pd > pd", + "section": "pd > pd", + "text": "property PuckCriterion.pd: bool\n\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3c.html#e3c", - "title": "e3c", - "section": "e3c", - "text": "e3c" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMe", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMe.html#vme", + "title": "vMe", + "section": "vMe", + "text": "vMe" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e3c", - "title": "e3c > e3c > e3c", - "section": "e3c > e3c", - "text": "FailureModeEnum.e3c = 132\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMe", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMe.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.vMe", + "title": "vMe > vMe > vMe", + "section": "vMe > vMe", + "text": "FailureModeEnum.vMe = 1101\n\n" }, { - "objectID": "api/result_definition", - "href": "api/result_definition.html#result-definition", - "title": "Result definition", - "section": "Result definition", - "text": "ResultDefinition(name, ...[, measure, ...])\nRepresents the result definition of DPF Composites.\nResultDefinitionScope(composite_definition)\nProvides the result definition scope.\nFailureMeasureEnum(value[, names, module, ...])\nProvides available failure measures.\nResult definition\nResultDefinition\nResultDefinitionScope\nFailureMeasureEnum" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles.html#get_layer_angles", + "title": "get_layer_angles", + "section": "get_layer_angles", + "text": "Get angles for all layers. Returns None if element is not layered.\nelement_id (int) – Element Id/Label\nOptional[ndarray[Any, dtype[float64]]]\nget_layer_angles\nint\nOptional\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.AVG", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.AVG.html#avg", - "title": "AVG", - "section": "AVG", - "text": "AVG" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles", + "title": "get_layer_angles > get_layer_angles > get_layer_angles", + "section": "get_layer_angles > get_layer_angles", + "text": "LayupPropertiesProvider.get_layer_angles(element_id)\n\nGet angles for all layers. Returns None if element is not layered.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[ndarray[Any, dtype[float64]]]\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.center", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.center.html#center", + "title": "center", + "section": "center", + "text": "Return a centered string of length width.\nPadding is done using the specified fill character (default is a space).\ncenter" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.AVG", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.AVG.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.AVG", - "title": "AVG > AVG > AVG", - "section": "AVG > AVG", - "text": "SpotReductionStrategy.AVG = 'AVG'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.center", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.center.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.center", + "title": "center > center > center", + "section": "center > center", + "text": "FailureMeasureEnum.center(width, fillchar=' ', /)\n\nReturn a centered string of length width.\n\nPadding is done using the specified fill character (default is a space).\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_sampling_point", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_sampling_point.html#get_sampling_point", - "title": "get_sampling_point", - "section": "get_sampling_point", - "text": "Get a sampling point for an element ID and failure criteria.\ncombined_criterion (CombinedFailureCriterion) – Combined failure criterion to evaluate.\nelement_id (int) – Element ID or label of the sampling point.\ntime (Optional[float], default: None) – Time or frequency at which to evaluate the sampling point. If None,\nthe last time or frequency in the result file is used.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nSamplingPoint\nget_sampling_point\nCombinedFailureCriterion\nint\nOptional\nfloat\nNone\nNone\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nSamplingPoint" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmB", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmB.html#cmb", + "title": "cmB", + "section": "cmB", + "text": "cmB" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_sampling_point", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_sampling_point.html#ansys.dpf.composites.composite_model.CompositeModel.get_sampling_point", - "title": "get_sampling_point > get_sampling_point > get_sampling_point", - "section": "get_sampling_point > get_sampling_point", - "text": "CompositeModel.get_sampling_point(combined_criterion, element_id, time=None, composite_definition_label=None)\n\nGet a sampling point for an element ID and failure criteria.\n\nParameters\n\ncombined_criterion (CombinedFailureCriterion) – Combined failure criterion to evaluate.\n\nelement_id (int) – Element ID or label of the sampling point.\n\ntime (Optional[float], default: None) – Time or frequency at which to evaluate the sampling point. If None,\nthe last time or frequency in the result file is used.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nSamplingPoint\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmB", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmB.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cmB", + "title": "cmB > cmB > cmB", + "section": "cmB > cmB", + "text": "FailureModeEnum.cmB = 1004\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.engineering_data", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.engineering_data.html#engineering_data", - "title": "engineering_data", - "section": "engineering_data", - "text": "engineering_data" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode.html#stress_strain_eval_mode", + "title": "stress_strain_eval_mode", + "section": "stress_strain_eval_mode", + "text": "Results loaded from a result (RST) file by default.\nYou can set this property to \"mapdl_live\" to activate on-the-fly\nstrain and stress evaluation. This property can be used if the result\nfile contains only the primary results (deformations).\nstr\nstress_strain_eval_mode\n\"mapdl_live\"\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.engineering_data", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.engineering_data.html#ansys.dpf.composites.data_sources.CompositeDataSources.engineering_data", - "title": "engineering_data > engineering_data > engineering_data", - "section": "engineering_data > engineering_data", - "text": "CompositeDataSources.engineering_data: DataSources\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode.html#ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode", + "title": "stress_strain_eval_mode > stress_strain_eval_mode > stress_strain_eval_mode", + "section": "stress_strain_eval_mode > stress_strain_eval_mode", + "text": "property ResultDefinition.stress_strain_eval_mode: str\n\nResults loaded from a result (RST) file by default.\n\nYou can set this property to \"mapdl_live\" to activate on-the-fly\nstrain and stress evaluation. This property can be used if the result\nfile contains only the primary results (deformations).\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.rst", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.rst.html#rst", - "title": "rst", - "section": "rst", - "text": "rst" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.html#materialproperty", + "title": "MaterialProperty", + "section": "MaterialProperty", + "text": "Provides the material properties that are available.\nMaterialProperty.Engineering_Constants_E1\n\nMaterialProperty.Engineering_Constants_E2\n\nMaterialProperty.Engineering_Constants_E3\n\nMaterialProperty.Engineering_Constants_E\n\nMaterialProperty.Engineering_Constants_G12\n\nMaterialProperty.Engineering_Constants_G23\n\nMaterialProperty.Engineering_Constants_G13\n\nMaterialProperty.Engineering_Constants_nu12\n\nMaterialProperty.Engineering_Constants_nu23\n\nMaterialProperty.Engineering_Constants_nu13\n\nMaterialProperty.Engineering_Constants_nu\n\nMaterialProperty.Strain_Limits_effective_strain\n\nMaterialProperty.Tensile_Yield_Strength_effective_stress\n\nMaterialProperty.Strain_Limits_eXt\n\nMaterialProperty.Strain_Limits_eYt\n\nMaterialProperty.Strain_Limits_eZt\n\nMaterialProperty.Strain_Limits_eXc\n\nMaterialProperty.Strain_Limits_eYc\n\nMaterialProperty.Strain_Limits_eZc\n\nMaterialProperty.Strain_Limits_eSxy\n\nMaterialProperty.Strain_Limits_eSyz\n\nMaterialProperty.Strain_Limits_eSxz\n\nMaterialProperty.Stress_Limits_Xt\n\nMaterialProperty.Stress_Limits_Yt\n\nMaterialProperty.Stress_Limits_Zt\n\nMaterialProperty.Stress_Limits_Xc\n\nMaterialProperty.Stress_Limits_Yc\n\nMaterialProperty.Stress_Limits_Zc\n\nMaterialProperty.Stress_Limits_Sxy\n\nMaterialProperty.Stress_Limits_Syz\n\nMaterialProperty.Stress_Limits_Sxz\n\nMaterialProperty.Thermal_Conductivity_K\n\nMaterialProperty.Thermal_Conductivity_K1\n\nMaterialProperty.Thermal_Conductivity_K2\n\nMaterialProperty.Thermal_Conductivity_K3\n\nMaterialProperty.Specific_Heat_cp\n\nMaterialProperty.Thermal_Expansion_Coefficients_a\n\nMaterialProperty.Thermal_Expansion_Coefficients_aX\n\nMaterialProperty.Thermal_Expansion_Coefficients_aY\n\nMaterialProperty.Thermal_Expansion_Coefficients_aZ\n\nMaterialProperty.Fabric_Fiber_Angle_phi\n\nMaterialProperty.Hill_Yield_Criterion_R11\n\nMaterialProperty.Hill_Yield_Criterion_R22\n\nMaterialProperty.Hill_Yield_Criterion_R33\n\nMaterialProperty.Hill_Yield_Criterion_R12\n\nMaterialProperty.Hill_Yield_Criterion_R23\n\nMaterialProperty.Hill_Yield_Criterion_R13\n\nMaterialProperty.Tsai_Wu_Constant_xy\n\nMaterialProperty.Tsai_Wu_Constant_yz\n\nMaterialProperty.Tsai_Wu_Constant_xz\n\nMaterialProperty.Puck_Constants_p_21_pos\n\nMaterialProperty.Puck_Constants_p_21_neg\n\nMaterialProperty.Puck_Constants_p_22_pos\n\nMaterialProperty.Puck_Constants_p_22_neg\n\nMaterialProperty.Puck_Constants_s\n\nMaterialProperty.Puck_Constants_m\n\nMaterialProperty.Puck_Constants_interface_weakening_factor\n\nMaterialProperty.Larc_Constants_fracture_angle_under_compression\n\nMaterialProperty.Larc_Constants_fracture_toughness_ratio\n\nMaterialProperty.Larc_Constants_fracture_toughness_mode_1\n\nMaterialProperty.Larc_Constants_fracture_toughness_mode_2\n\nMaterialProperty\nMaterialProperty.Engineering_Constants_E1\nMaterialProperty.Engineering_Constants_E2\nMaterialProperty.Engineering_Constants_E3\nMaterialProperty.Engineering_Constants_E\nMaterialProperty.Engineering_Constants_G12\nMaterialProperty.Engineering_Constants_G23\nMaterialProperty.Engineering_Constants_G13\nMaterialProperty.Engineering_Constants_nu12\nMaterialProperty.Engineering_Constants_nu23\nMaterialProperty.Engineering_Constants_nu13\nMaterialProperty.Engineering_Constants_nu\nMaterialProperty.Strain_Limits_effective_strain\nMaterialProperty.Tensile_Yield_Strength_effective_stress\nMaterialProperty.Strain_Limits_eXt\nMaterialProperty.Strain_Limits_eYt\nMaterialProperty.Strain_Limits_eZt\nMaterialProperty.Strain_Limits_eXc\nMaterialProperty.Strain_Limits_eYc\nMaterialProperty.Strain_Limits_eZc\nMaterialProperty.Strain_Limits_eSxy\nMaterialProperty.Strain_Limits_eSyz\nMaterialProperty.Strain_Limits_eSxz\nMaterialProperty.Stress_Limits_Xt\nMaterialProperty.Stress_Limits_Yt\nMaterialProperty.Stress_Limits_Zt\nMaterialProperty.Stress_Limits_Xc\nMaterialProperty.Stress_Limits_Yc\nMaterialProperty.Stress_Limits_Zc\nMaterialProperty.Stress_Limits_Sxy\nMaterialProperty.Stress_Limits_Syz\nMaterialProperty.Stress_Limits_Sxz\nMaterialProperty.Thermal_Conductivity_K\nMaterialProperty.Thermal_Conductivity_K1\nMaterialProperty.Thermal_Conductivity_K2\nMaterialProperty.Thermal_Conductivity_K3\nMaterialProperty.Specific_Heat_cp\nMaterialProperty.Thermal_Expansion_Coefficients_a\nMaterialProperty.Thermal_Expansion_Coefficients_aX\nMaterialProperty.Thermal_Expansion_Coefficients_aY\nMaterialProperty.Thermal_Expansion_Coefficients_aZ\nMaterialProperty.Fabric_Fiber_Angle_phi\nMaterialProperty.Hill_Yield_Criterion_R11\nMaterialProperty.Hill_Yield_Criterion_R22\nMaterialProperty.Hill_Yield_Criterion_R33\nMaterialProperty.Hill_Yield_Criterion_R12\nMaterialProperty.Hill_Yield_Criterion_R23\nMaterialProperty.Hill_Yield_Criterion_R13\nMaterialProperty.Tsai_Wu_Constant_xy\nMaterialProperty.Tsai_Wu_Constant_yz\nMaterialProperty.Tsai_Wu_Constant_xz\nMaterialProperty.Puck_Constants_p_21_pos\nMaterialProperty.Puck_Constants_p_21_neg\nMaterialProperty.Puck_Constants_p_22_pos\nMaterialProperty.Puck_Constants_p_22_neg\nMaterialProperty.Puck_Constants_s\nMaterialProperty.Puck_Constants_m\nMaterialProperty.Puck_Constants_interface_weakening_factor\nMaterialProperty.Larc_Constants_fracture_angle_under_compression\nMaterialProperty.Larc_Constants_fracture_toughness_ratio\nMaterialProperty.Larc_Constants_fracture_toughness_mode_1\nMaterialProperty.Larc_Constants_fracture_toughness_mode_2" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.rst", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.rst.html#ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.rst", - "title": "rst > rst > rst", - "section": "rst > rst", - "text": "ContinuousFiberCompositesFiles.rst: list[str | PathLike[str]]\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty", + "title": "MaterialProperty > MaterialProperty > MaterialProperty", + "section": "MaterialProperty > MaterialProperty", + "text": "class ansys.dpf.composites.layup_info.material_properties.MaterialProperty(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides the material properties that are available.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nMaterialProperty.Engineering_Constants_E1\n\n\n\nMaterialProperty.Engineering_Constants_E2\n\n\n\nMaterialProperty.Engineering_Constants_E3\n\n\n\nMaterialProperty.Engineering_Constants_E\n\n\n\nMaterialProperty.Engineering_Constants_G12\n\n\n\nMaterialProperty.Engineering_Constants_G23\n\n\n\nMaterialProperty.Engineering_Constants_G13\n\n\n\nMaterialProperty.Engineering_Constants_nu12\n\n\n\nMaterialProperty.Engineering_Constants_nu23\n\n\n\nMaterialProperty.Engineering_Constants_nu13\n\n\n\nMaterialProperty.Engineering_Constants_nu\n\n\n\nMaterialProperty.Strain_Limits_effective_strain\n\n\n\nMaterialProperty.Tensile_Yield_Strength_effective_stress\n\n\n\nMaterialProperty.Strain_Limits_eXt\n\n\n\nMaterialProperty.Strain_Limits_eYt\n\n\n\nMaterialProperty.Strain_Limits_eZt\n\n\n\nMaterialProperty.Strain_Limits_eXc\n\n\n\nMaterialProperty.Strain_Limits_eYc\n\n\n\nMaterialProperty.Strain_Limits_eZc\n\n\n\nMaterialProperty.Strain_Limits_eSxy\n\n\n\nMaterialProperty.Strain_Limits_eSyz\n\n\n\nMaterialProperty.Strain_Limits_eSxz\n\n\n\nMaterialProperty.Stress_Limits_Xt\n\n\n\nMaterialProperty.Stress_Limits_Yt\n\n\n\nMaterialProperty.Stress_Limits_Zt\n\n\n\nMaterialProperty.Stress_Limits_Xc\n\n\n\nMaterialProperty.Stress_Limits_Yc\n\n\n\nMaterialProperty.Stress_Limits_Zc\n\n\n\nMaterialProperty.Stress_Limits_Sxy\n\n\n\nMaterialProperty.Stress_Limits_Syz\n\n\n\nMaterialProperty.Stress_Limits_Sxz\n\n\n\nMaterialProperty.Thermal_Conductivity_K\n\n\n\nMaterialProperty.Thermal_Conductivity_K1\n\n\n\nMaterialProperty.Thermal_Conductivity_K2\n\n\n\nMaterialProperty.Thermal_Conductivity_K3\n\n\n\nMaterialProperty.Specific_Heat_cp\n\n\n\nMaterialProperty.Thermal_Expansion_Coefficients_a\n\n\n\nMaterialProperty.Thermal_Expansion_Coefficients_aX\n\n\n\nMaterialProperty.Thermal_Expansion_Coefficients_aY\n\n\n\nMaterialProperty.Thermal_Expansion_Coefficients_aZ\n\n\n\nMaterialProperty.Fabric_Fiber_Angle_phi\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R11\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R22\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R33\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R12\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R23\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R13\n\n\n\nMaterialProperty.Tsai_Wu_Constant_xy\n\n\n\nMaterialProperty.Tsai_Wu_Constant_yz\n\n\n\nMaterialProperty.Tsai_Wu_Constant_xz\n\n\n\nMaterialProperty.Puck_Constants_p_21_pos\n\n\n\nMaterialProperty.Puck_Constants_p_21_neg\n\n\n\nMaterialProperty.Puck_Constants_p_22_pos\n\n\n\nMaterialProperty.Puck_Constants_p_22_neg\n\n\n\nMaterialProperty.Puck_Constants_s\n\n\n\nMaterialProperty.Puck_Constants_m\n\n\n\nMaterialProperty.Puck_Constants_interface_weakening_factor\n\n\n\nMaterialProperty.Larc_Constants_fracture_angle_under_compression\n\n\n\nMaterialProperty.Larc_Constants_fracture_toughness_ratio\n\n\n\nMaterialProperty.Larc_Constants_fracture_toughness_mode_1\n\n\n\nMaterialProperty.Larc_Constants_fracture_toughness_mode_2\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3.html#e3", - "title": "e3", - "section": "e3", - "text": "e3" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.as", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.as.html#as", + "title": "as", + "section": "as", + "text": "as" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e3", - "title": "e3 > e3 > e3", - "section": "e3 > e3", - "text": "FailureModeEnum.e3 = 130\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.as", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.as.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.as", + "title": "as > as > as", + "section": "as > as", + "text": "FailureModeEnum.as = 1201\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle.html#fracture_plane_angle", - "title": "fracture_plane_angle", - "section": "fracture_plane_angle", - "text": "Fracture plane angle in degrees. The default is 53. The value must be greater than 45. The value depends on the out-of-plane shear friction coefficient.\nfloat\nfracture_plane_angle\n53\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.expandtabs", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.expandtabs.html#expandtabs", + "title": "expandtabs", + "section": "expandtabs", + "text": "Return a copy where all tab characters are expanded using spaces.\nIf tabsize is not given, a tab size of 8 characters is assumed.\nexpandtabs" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle", - "title": "fracture_plane_angle > fracture_plane_angle > fracture_plane_angle", - "section": "fracture_plane_angle > fracture_plane_angle", - "text": "property CuntzeCriterion.fracture_plane_angle: float\n\nFracture plane angle in degrees. The default is 53. The value must be greater than 45. The value depends on the out-of-plane shear friction coefficient.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.expandtabs", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.expandtabs.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.expandtabs", + "title": "expandtabs > expandtabs > expandtabs", + "section": "expandtabs > expandtabs", + "text": "FailureMeasureEnum.expandtabs(/, tabsize=8)\n\nReturn a copy where all tab characters are expanded using spaces.\n\nIf tabsize is not given, a tab size of 8 characters is assumed.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s1.html#wf_s1", - "title": "wf_s1", - "section": "wf_s1", - "text": "Weighting factor of the failure mode s1.\nfloat\nwf_s1\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aX", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aX.html#thermal_expansion_coefficients_ax", + "title": "Thermal_Expansion_Coefficients_aX", + "section": "Thermal_Expansion_Coefficients_aX", + "text": "Thermal_Expansion_Coefficients_aX" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s1.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s1", - "title": "wf_s1 > wf_s1 > wf_s1", - "section": "wf_s1 > wf_s1", - "text": "property MaxStressCriterion.wf_s1: float\n\nWeighting factor of the failure mode s1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aX", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aX.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aX", + "title": "Thermal_Expansion_Coefficients_aX > Thermal_Expansion_Coefficients_aX > Thermal_Expansion_Coefficients_aX", + "section": "Thermal_Expansion_Coefficients_aX > Thermal_Expansion_Coefficients_aX", + "text": "MaterialProperty.Thermal_Expansion_Coefficients_aX: str = 'coefficient_thermal_expansion_x'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R22", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R22.html#hill_yield_criterion_r22", - "title": "Hill_Yield_Criterion_R22", - "section": "Hill_Yield_Criterion_R22", - "text": "Hill_Yield_Criterion_R22" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmt", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmt.html#lmt", + "title": "lmt", + "section": "lmt", + "text": "Whether to activate the failure evaluation of the matrix due to tension.\nbool\nlmt\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R22", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R22.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R22", - "title": "Hill_Yield_Criterion_R22 > Hill_Yield_Criterion_R22 > Hill_Yield_Criterion_R22", - "section": "Hill_Yield_Criterion_R22 > Hill_Yield_Criterion_R22", - "text": "MaterialProperty.Hill_Yield_Criterion_R22: str = 'yield_stress_ratio_y_hill_criterion'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmt", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmt.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.lmt", + "title": "lmt > lmt > lmt", + "section": "lmt > lmt", + "text": "property LaRCCriterion.lmt: bool\n\nWhether to activate the failure evaluation of the matrix due to tension.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/004_get_material_properties_example", - "href": "examples/gallery_examples/004_get_material_properties_example.html#material-properties-and-custom-failure-criterion", - "title": "Material properties and custom failure criterion", - "section": "Material properties and custom failure criterion", - "text": "This example shows how to access constant material properties and how to\nimplement a custom failure criterion. The failure criterion is computed for\nall layers and integration points. Finally, the elemental maximum is computed and shown.\nOnly constant material properties are currently supported.\nWhen using a Workbench project,\nuse the get_composite_files_from_workbench_result_folder()\nmethod to obtain the input files.\nMaterial properties and custom failure criterion\nget_composite_files_from_workbench_result_folder()" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s13.html#s13", + "title": "s13", + "section": "s13", + "text": "Whether to activate the failure evaluation regarding the interlaminar shear stress s13.\nbool\ns13\nbool" }, { - "objectID": "examples/gallery_examples/004_get_material_properties_example", - "href": "examples/gallery_examples/004_get_material_properties_example.html#script", - "title": "Material properties and custom failure criterion > Script", - "section": "Script", - "text": "Import dependencies\nStart a server and get the examples files.\nThis will copy the example files into the current working directory.\nSet up the composite model\nGet dictionary that maps dpf_material_id to properties\nThe creation of the dictionary is currently quite slow and\nshould be done before using the properties in a loop.\nCurrently only constant properties are supported.\nFor variable material properties, the default value is returned.\nGet strain field\nImplement a custom failure criterion: basic max strain\nTotal running time of the script: (0 minutes 4.845 seconds)\nDownload Jupyter notebook: 004_get_material_properties_example.ipynb\nDownload Python source code: 004_get_material_properties_example.py\nDownload zipped: 004_get_material_properties_example.zip\nGallery generated by Sphinx-Gallery\nScript\nDownload Jupyter notebook: 004_get_material_properties_example.ipynb\nDownload Python source code: 004_get_material_properties_example.py\nDownload zipped: 004_get_material_properties_example.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s13.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s13", + "title": "s13 > s13 > s13", + "section": "s13 > s13", + "text": "property MaxStressCriterion.s13: bool\n\nWhether to activate the failure evaluation regarding the interlaminar shear stress s13.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.evaluate_failure_criteria", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.evaluate_failure_criteria.html#evaluate_failure_criteria", - "title": "evaluate_failure_criteria", - "section": "evaluate_failure_criteria", - "text": "Get a fields container with the evaluated failure criteria.\nThe fields container contains the maximum per element if the measure\nis FailureMeasureEnum.INVERSE_RESERVE_FACTOR and the minimum per element\nif the measure is FailureMeasureEnum.MARGIN_OF_SAFETY or\nFailureMeasureEnum.RESERVE_FACTOR.\ncombined_criterion (CombinedFailureCriterion) – Combined failure criterion to evaluate.\ncomposite_scope (Optional[CompositeScope], default: None) – Composite scope on which to evaluate the failure criteria. If empty, the criteria\nis evaluated on the full model. If the time is not set, the last time or\nfrequency in the result file is used.\nmeasure (FailureMeasureEnum, default: ) – Failure measure to evaluate.\nwrite_data_for_full_element_scope (bool, default: True) – Whether each element in the element scope is to get a\n(potentially zero) failure value, even elements that are not\npart of composite_scope.plies. If no element scope is\nspecified (composite_scope.elements), a (potentially zero)\nfailure value is written for all elements.\nmax_chunk_size (int, default: 50000) – A higher value results in more memory consumption, but faster evaluation.For some special element types such as beams,\nwrite_data_for_full_element_scope=True is not supported.\nA higher value results in more memory consumption, but faster evaluation.\nFor some special element types such as beams,\nwrite_data_for_full_element_scope=True is not supported.\nFieldsContainer\nevaluate_failure_criteria\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\nFailureMeasureEnum.MARGIN_OF_SAFETY\nFailureMeasureEnum.RESERVE_FACTOR\nCombinedFailureCriterion\nOptional\nCompositeScope\nNone\nFailureMeasureEnum\n\nbool\nTrue\ncomposite_scope.plies\ncomposite_scope.elements\nint\n50000\nwrite_data_for_full_element_scope=True\nFieldsContainer" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local.html#files_are_local", + "title": "files_are_local", + "section": "files_are_local", + "text": "files_are_local" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.evaluate_failure_criteria", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.evaluate_failure_criteria.html#ansys.dpf.composites.composite_model.CompositeModel.evaluate_failure_criteria", - "title": "evaluate_failure_criteria > evaluate_failure_criteria > evaluate_failure_criteria", - "section": "evaluate_failure_criteria > evaluate_failure_criteria", - "text": "CompositeModel.evaluate_failure_criteria(combined_criterion, composite_scope=None, measure=FailureMeasureEnum.INVERSE_RESERVE_FACTOR, write_data_for_full_element_scope=True, max_chunk_size=50000)\n\nGet a fields container with the evaluated failure criteria.\n\nThe fields container contains the maximum per element if the measure\nis FailureMeasureEnum.INVERSE_RESERVE_FACTOR and the minimum per element\nif the measure is FailureMeasureEnum.MARGIN_OF_SAFETY or\nFailureMeasureEnum.RESERVE_FACTOR.\n\nParameters\n\ncombined_criterion (CombinedFailureCriterion) – Combined failure criterion to evaluate.\n\ncomposite_scope (Optional[CompositeScope], default: None) – Composite scope on which to evaluate the failure criteria. If empty, the criteria\nis evaluated on the full model. If the time is not set, the last time or\nfrequency in the result file is used.\n\nmeasure (FailureMeasureEnum, default: ) – Failure measure to evaluate.\n\nwrite_data_for_full_element_scope (bool, default: True) – Whether each element in the element scope is to get a\n(potentially zero) failure value, even elements that are not\npart of composite_scope.plies. If no element scope is\nspecified (composite_scope.elements), a (potentially zero)\nfailure value is written for all elements.\n\nmax_chunk_size (int, default: 50000) – A higher value results in more memory consumption, but faster evaluation.For some special element types such as beams,\nwrite_data_for_full_element_scope=True is not supported.\n\nReturn type\n\nFieldsContainer\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local.html#ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local", + "title": "files_are_local > files_are_local > files_are_local", + "section": "files_are_local > files_are_local", + "text": "ShortFiberCompositesFiles.files_are_local: bool = True\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.rst_files", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.rst_files.html#rst_files", - "title": "rst_files", - "section": "rst_files", - "text": "Path of the result (RST) files.\nlist[Union[str, PathLike[str]]]\nrst_files\nlist\nUnion\nstr\nPathLike\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.time", + "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.time.html#time", + "title": "time", + "section": "time", + "text": "time" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.rst_files", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.rst_files.html#ansys.dpf.composites.result_definition.ResultDefinition.rst_files", - "title": "rst_files > rst_files > rst_files", - "section": "rst_files > rst_files", - "text": "property ResultDefinition.rst_files: list[str | PathLike[str]]\n\nPath of the result (RST) files.\n\nReturn type\n\nlist[Union[str, PathLike[str]]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.time", + "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.time.html#ansys.dpf.composites.composite_scope.CompositeScope.time", + "title": "time > time > time", + "section": "time > time", + "text": "CompositeScope.time: float | None = None\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3.html#e3", - "title": "e3", - "section": "e3", - "text": "Activates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\nbool\ne3\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.name", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.name.html#name", + "title": "name", + "section": "name", + "text": "Custom name.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3", - "title": "e3 > e3 > e3", - "section": "e3 > e3", - "text": "property MaxStrainCriterion.e3: bool\n\nActivates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.name", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.name.html#ansys.dpf.composites.result_definition.ResultDefinition.name", + "title": "name > name > name", + "section": "name > name", + "text": "property ResultDefinition.name: str\n\nCustom name.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.active.html#active", + "title": "active", + "section": "active", + "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.PuckCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "PuckCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.active.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property MaxStressCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.core_model", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.core_model.html#core_model", + "title": "core_model", + "section": "core_model", + "text": "Underlying DPF core model.\nModel\ncore_model\nModel" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.force_global_strain_limits", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.force_global_strain_limits.html#force_global_strain_limits", - "title": "force_global_strain_limits", - "section": "force_global_strain_limits", - "text": "Whether to use one set of global strain limits instead of the strain limits of the materials.\nbool\nforce_global_strain_limits\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.core_model", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.core_model.html#ansys.dpf.composites.composite_model.CompositeModel.core_model", + "title": "core_model > core_model > core_model", + "section": "core_model > core_model", + "text": "property CompositeModel.core_model: Model\n\nUnderlying DPF core model.\n\nReturn type\n\nModel\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.force_global_strain_limits", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.force_global_strain_limits.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.force_global_strain_limits", - "title": "force_global_strain_limits > force_global_strain_limits > force_global_strain_limits", - "section": "force_global_strain_limits > force_global_strain_limits", - "text": "property MaxStrainCriterion.force_global_strain_limits: bool\n\nWhether to use one set of global strain limits instead of the strain limits of the materials.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.id", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.id.html#id", + "title": "id", + "section": "id", + "text": "id" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vme", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vme.html#wf_vme", - "title": "wf_vme", - "section": "wf_vme", - "text": "Weighting factor of the strain criterion (vme).\nfloat\nwf_vme\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.id", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.id.html#ansys.dpf.composites.layup_info.ElementInfo.id", + "title": "id > id > id", + "section": "id > id", + "text": "ElementInfo.id: int\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vme", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vme.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vme", - "title": "wf_vme > wf_vme > wf_vme", - "section": "wf_vme > wf_vme", - "text": "property VonMisesCriterion.wf_vme: float\n\nWeighting factor of the strain criterion (vme).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s3.html#s3", + "title": "s3", + "section": "s3", + "text": "Whether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\nbool\ns3\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.title", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.title.html#title", - "title": "title", - "section": "title", - "text": "Return a version of the string where each word is titlecased.\nMore specifically, words start with uppercased characters and all remaining\ncased characters have lower case.\ntitle" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s3.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s3", + "title": "s3 > s3 > s3", + "section": "s3 > s3", + "text": "property MaxStressCriterion.s3: bool\n\nWhether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.title", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.title.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.title", - "title": "title > title > title", - "section": "title > title", - "text": "FailureMeasureEnum.title(/)\n\nReturn a version of the string where each word is titlecased.\n\nMore specifically, words start with uppercased characters and all remaining\ncased characters have lower case.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.html#vonmisescriterion", + "title": "VonMisesCriterion", + "section": "VonMisesCriterion", + "text": "Defines the von Mises criterion for isotropic materials.\nvme (bool, default: True) – Whether to activate the von Mises strain criterion.\nvms (bool, default: True) – Whether to activate the von Mises stress criterion.\nwf_vme (float, default: 1.0) – Weighting factor of the strain criterion (vme).\nwf_vms (float, default: 1.0) – Weighting factor of the stress criterion (vms).\neval_ins (bool, default: False) – Whether to consider interlaminar normal stresses (s3) and compute them for layered shells.\nVonMisesCriterion.to_dict()\n\nVonMisesCriterion.to_json()\n\nVonMisesCriterion.active\nThe failure criterion is suppressed if active is False.\nVonMisesCriterion.eval_ins\nWhether to consider interlaminar normal stresses (s3) and compute them for layered shells.\nVonMisesCriterion.name\nName of the failure criterion.\nVonMisesCriterion.vme\nWhether to activate the von Mises strain criterion.\nVonMisesCriterion.vms\nWhether to activate the von Mises stress criterion.\nVonMisesCriterion.wf_vme\nWeighting factor of the strain criterion (vme).\nVonMisesCriterion.wf_vms\nWeighting factor of the stress criterion (vms).\nVonMisesCriterion\nbool\nTrue\nbool\nTrue\nfloat\n1.0\nfloat\n1.0\nbool\nFalse\nVonMisesCriterion.to_dict\nVonMisesCriterion.to_json\nVonMisesCriterion.active\nVonMisesCriterion.eval_ins\nVonMisesCriterion.name\nVonMisesCriterion.vme\nVonMisesCriterion.vms\nVonMisesCriterion.wf_vme\nVonMisesCriterion.wf_vms" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.tw", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.tw.html#tw", - "title": "tw", - "section": "tw", - "text": "tw" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion", + "title": "VonMisesCriterion > VonMisesCriterion > VonMisesCriterion", + "section": "VonMisesCriterion > VonMisesCriterion", + "text": "class ansys.dpf.composites.failure_criteria.VonMisesCriterion(*, vme=True, vms=True, wf_vme=1.0, wf_vms=1.0, eval_ins=False)\n\nDefines the von Mises criterion for isotropic materials.\n\nParameters\n\nvme (bool, default: True) – Whether to activate the von Mises strain criterion.\n\nvms (bool, default: True) – Whether to activate the von Mises stress criterion.\n\nwf_vme (float, default: 1.0) – Weighting factor of the strain criterion (vme).\n\nwf_vms (float, default: 1.0) – Weighting factor of the stress criterion (vms).\n\neval_ins (bool, default: False) – Whether to consider interlaminar normal stresses (s3) and compute them for layered shells.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nVonMisesCriterion.to_dict()\n\n\n\nVonMisesCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nVonMisesCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nVonMisesCriterion.eval_ins\n\nWhether to consider interlaminar normal stresses (s3) and compute them for layered shells.\n\nVonMisesCriterion.name\n\nName of the failure criterion.\n\nVonMisesCriterion.vme\n\nWhether to activate the von Mises strain criterion.\n\nVonMisesCriterion.vms\n\nWhether to activate the von Mises stress criterion.\n\nVonMisesCriterion.wf_vme\n\nWeighting factor of the strain criterion (vme).\n\nVonMisesCriterion.wf_vms\n\nWeighting factor of the stress criterion (vms).\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.tw", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.tw.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.tw", - "title": "tw > tw > tw", - "section": "tw > tw", - "text": "FailureModeEnum.tw = 400\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s1", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s1.html#s1", - "title": "s1", - "section": "s1", - "text": "Stresses in the material 1 direction of each ply.\nndarray[Any, dtype[float64]]\ns1\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.name.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property HoffmanCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s1", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s1.html#ansys.dpf.composites.sampling_point.SamplingPoint.s1", - "title": "s1 > s1 > s1", - "section": "s1 > s1", - "text": "property SamplingPoint.s1: ndarray[Any, dtype[float64]]\n\nStresses in the material 1 direction of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos.html#p21_pos", + "title": "p21_pos", + "section": "p21_pos", + "text": "Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.\nfloat\np21_pos\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.composite", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.composite.html#composite", - "title": "composite", - "section": "composite", - "text": "composite" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos.html#ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos", + "title": "p21_pos > p21_pos > p21_pos", + "section": "p21_pos > p21_pos", + "text": "property PuckCriterion.p21_pos: float\n\nGlobal inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.composite", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.composite.html#ansys.dpf.composites.data_sources.CompositeDataSources.composite", - "title": "composite > composite > composite", - "section": "composite > composite", - "text": "CompositeDataSources.composite: DataSources | None\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Fabric_Fiber_Angle_phi", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Fabric_Fiber_Angle_phi.html#fabric_fiber_angle_phi", + "title": "Fabric_Fiber_Angle_phi", + "section": "Fabric_Fiber_Angle_phi", + "text": "Fabric_Fiber_Angle_phi" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_angle_under_compression", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_angle_under_compression.html#larc_constants_fracture_angle_under_compression", - "title": "Larc_Constants_fracture_angle_under_compression", - "section": "Larc_Constants_fracture_angle_under_compression", - "text": "Larc_Constants_fracture_angle_under_compression" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Fabric_Fiber_Angle_phi", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Fabric_Fiber_Angle_phi.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Fabric_Fiber_Angle_phi", + "title": "Fabric_Fiber_Angle_phi > Fabric_Fiber_Angle_phi > Fabric_Fiber_Angle_phi", + "section": "Fabric_Fiber_Angle_phi > Fabric_Fiber_Angle_phi", + "text": "MaterialProperty.Fabric_Fiber_Angle_phi: str = 'fabric_fiber_angle'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_angle_under_compression", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_angle_under_compression.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_angle_under_compression", - "title": "Larc_Constants_fracture_angle_under_compression > Larc_Constants_fracture_angle_under_compression > Larc_Constants_fracture_angle_under_compression", - "section": "Larc_Constants_fracture_angle_under_compression > Larc_Constants_fracture_angle_under_compression", - "text": "MaterialProperty.Larc_Constants_fracture_angle_under_compression: str = 'fracture_angle_under_compression_larc_constants'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e23.html#e23", + "title": "e23", + "section": "e23", + "text": "e23" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_ply_wise_critical_failures", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_ply_wise_critical_failures.html#get_ply_wise_critical_failures", - "title": "get_ply_wise_critical_failures", - "section": "get_ply_wise_critical_failures", - "text": "Get the critical failure value and modes per ply.\nlist[FailureResult]\nget_ply_wise_critical_failures\nlist\nFailureResult" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e23.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e23", + "title": "e23 > e23 > e23", + "section": "e23 > e23", + "text": "FailureModeEnum.e23 = 160\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_ply_wise_critical_failures", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_ply_wise_critical_failures.html#ansys.dpf.composites.sampling_point.SamplingPoint.get_ply_wise_critical_failures", - "title": "get_ply_wise_critical_failures > get_ply_wise_critical_failures > get_ply_wise_critical_failures", - "section": "get_ply_wise_critical_failures > get_ply_wise_critical_failures", - "text": "SamplingPoint.get_ply_wise_critical_failures()\n\nGet the critical failure value and modes per ply.\n\nReturn type\n\nlist[FailureResult]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.LAMINATE_OFFSET", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.LAMINATE_OFFSET.html#laminate_offset", + "title": "LAMINATE_OFFSET", + "section": "LAMINATE_OFFSET", + "text": "LAMINATE_OFFSET" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yc.html#stress_limits_yc", - "title": "Stress_Limits_Yc", - "section": "Stress_Limits_Yc", - "text": "Stress_Limits_Yc" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.LAMINATE_OFFSET", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.LAMINATE_OFFSET.html#ansys.dpf.composites.layup_info.LayupProperty.LAMINATE_OFFSET", + "title": "LAMINATE_OFFSET > LAMINATE_OFFSET > LAMINATE_OFFSET", + "section": "LAMINATE_OFFSET > LAMINATE_OFFSET", + "text": "LayupProperty.LAMINATE_OFFSET = 3\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yc", - "title": "Stress_Limits_Yc > Stress_Limits_Yc > Stress_Limits_Yc", - "section": "Stress_Limits_Yc > Stress_Limits_Yc", - "text": "MaterialProperty.Stress_Limits_Yc: str = 'stress_compressive_y_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LAYER_INDEX", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LAYER_INDEX.html#max_layer_index", + "title": "MAX_LAYER_INDEX", + "section": "MAX_LAYER_INDEX", + "text": "MAX_LAYER_INDEX" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR31", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR31.html#tensor31", - "title": "TENSOR31", - "section": "TENSOR31", - "text": "TENSOR31" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LAYER_INDEX", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LAYER_INDEX.html#ansys.dpf.composites.constants.FailureOutput.MAX_LAYER_INDEX", + "title": "MAX_LAYER_INDEX > MAX_LAYER_INDEX > MAX_LAYER_INDEX", + "section": "MAX_LAYER_INDEX > MAX_LAYER_INDEX", + "text": "FailureOutput.MAX_LAYER_INDEX = 2\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR31", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR31.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR31", - "title": "TENSOR31 > TENSOR31 > TENSOR31", - "section": "TENSOR31 > TENSOR31", - "text": "Sym3x3TensorComponent.TENSOR31 = 5\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.html#shortfibercompositesfiles", - "title": "ShortFiberCompositesFiles", - "section": "ShortFiberCompositesFiles", - "text": "Provides the container for short fiber composite file paths.\nShortFiberCompositesFiles.files_are_local\n\nShortFiberCompositesFiles.rst\n\nShortFiberCompositesFiles.dsdat\n\nShortFiberCompositesFiles.engineering_data\n\nShortFiberCompositesFiles\nShortFiberCompositesFiles.files_are_local\nShortFiberCompositesFiles.rst\nShortFiberCompositesFiles.dsdat\nShortFiberCompositesFiles.engineering_data" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "TsaiWuCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.html#ansys.dpf.composites.data_sources.ShortFiberCompositesFiles", - "title": "ShortFiberCompositesFiles > ShortFiberCompositesFiles > ShortFiberCompositesFiles", - "section": "ShortFiberCompositesFiles > ShortFiberCompositesFiles", - "text": "class ansys.dpf.composites.data_sources.ShortFiberCompositesFiles(rst, dsdat, engineering_data, files_are_local=True)\n\nProvides the container for short fiber composite file paths.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nShortFiberCompositesFiles.files_are_local\n\n\n\nShortFiberCompositesFiles.rst\n\n\n\nShortFiberCompositesFiles.dsdat\n\n\n\nShortFiberCompositesFiles.engineering_data\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR.html#inverse_reserve_factor", + "title": "INVERSE_RESERVE_FACTOR", + "section": "INVERSE_RESERVE_FACTOR", + "text": "INVERSE_RESERVE_FACTOR" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K.html#thermal_conductivity_k", - "title": "Thermal_Conductivity_K", - "section": "Thermal_Conductivity_K", - "text": "Thermal_Conductivity_K" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR", + "title": "INVERSE_RESERVE_FACTOR > INVERSE_RESERVE_FACTOR > INVERSE_RESERVE_FACTOR", + "section": "INVERSE_RESERVE_FACTOR > INVERSE_RESERVE_FACTOR", + "text": "FailureMeasureEnum.INVERSE_RESERVE_FACTOR: str = 'inverse_reserve_factor'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K", - "title": "Thermal_Conductivity_K > Thermal_Conductivity_K > Thermal_Conductivity_K", - "section": "Thermal_Conductivity_K > Thermal_Conductivity_K", - "text": "MaterialProperty.Thermal_Conductivity_K: str = 'thermal_conductivity_isotropic'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg.html#p22_neg", - "title": "p22_neg", - "section": "p22_neg", - "text": "Global inclination factor of the fracture plane \\perp \\perp for compression.\nfloat\np22_neg\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property FaceSheetWrinklingCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg.html#ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg", - "title": "p22_neg > p22_neg > p22_neg", - "section": "p22_neg > p22_neg", - "text": "property PuckCriterion.p22_neg: float\n\nGlobal inclination factor of the fracture plane \\perp \\perp for compression.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.name.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property MaxStrainCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.MIXED", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.MIXED.html#mixed", - "title": "MIXED", - "section": "MIXED", - "text": "MIXED" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xy", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xy.html#tsai_wu_constant_xy", + "title": "Tsai_Wu_Constant_xy", + "section": "Tsai_Wu_Constant_xy", + "text": "Tsai_Wu_Constant_xy" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.MIXED", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.MIXED.html#ansys.dpf.composites.layup_info.LayupModelContextType.MIXED", - "title": "MIXED > MIXED > MIXED", - "section": "MIXED > MIXED", - "text": "LayupModelContextType.MIXED = 3\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xy", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xy.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xy", + "title": "Tsai_Wu_Constant_xy > Tsai_Wu_Constant_xy > Tsai_Wu_Constant_xy", + "section": "Tsai_Wu_Constant_xy > Tsai_Wu_Constant_xy", + "text": "MaterialProperty.Tsai_Wu_Constant_xy: str = 'coupling_coef_xy_tsai_wu'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s13", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s13.html#s13", - "title": "s13", - "section": "s13", - "text": "Out-of-plane shear stresses s13 of each ply.\nndarray[Any, dtype[float64]]\ns13\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.svm", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.svm.html#svm", + "title": "svm", + "section": "svm", + "text": "svm" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s13", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s13.html#ansys.dpf.composites.sampling_point.SamplingPoint.s13", - "title": "s13 > s13 > s13", - "section": "s13 > s13", - "text": "property SamplingPoint.s13: ndarray[Any, dtype[float64]]\n\nOut-of-plane shear stresses s13 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.svm", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.svm.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.svm", + "title": "svm > svm > svm", + "section": "svm > svm", + "text": "FailureModeEnum.svm = 202\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hd.html#wf_hd", - "title": "wf_hd", - "section": "wf_hd", - "text": "Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\nfloat\nwf_hd\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3c.html#e3c", + "title": "e3c", + "section": "e3c", + "text": "e3c" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hd.html#ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hd", - "title": "wf_hd > wf_hd > wf_hd", - "section": "wf_hd > wf_hd", - "text": "property HashinCriterion.wf_hd: float\n\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e3c", + "title": "e3c > e3c > e3c", + "section": "e3c > e3c", + "text": "FailureModeEnum.e3c = 132\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.honeycomb_core_coeff", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.honeycomb_core_coeff.html#honeycomb_core_coeff", - "title": "honeycomb_core_coeff", - "section": "honeycomb_core_coeff", - "text": "Wrinkling coefficient (reduction factor) for honeycombs. The default is 0.33.\nfloat\nhoneycomb_core_coeff\n0.33\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.dim.html#dim", + "title": "dim", + "section": "dim", + "text": "Specifies which formulation of the failure criterion is used.\nint\ndim\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.honeycomb_core_coeff", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.honeycomb_core_coeff.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.honeycomb_core_coeff", - "title": "honeycomb_core_coeff > honeycomb_core_coeff > honeycomb_core_coeff", - "section": "honeycomb_core_coeff > honeycomb_core_coeff", - "text": "property FaceSheetWrinklingCriterion.honeycomb_core_coeff: float\n\nWrinkling coefficient (reduction factor) for honeycombs. The default is 0.33.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.dim.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.dim", + "title": "dim > dim > dim", + "section": "dim > dim", + "text": "property TsaiWuCriterion.dim: int\n\nSpecifies which formulation of the failure criterion is used.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cfc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cfc.html#wf_cfc", - "title": "wf_cfc", - "section": "wf_cfc", - "text": "Weighting factor of fiber failure due to compression (cfc).\nfloat\nwf_cfc\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pf.html#wf_pf", + "title": "wf_pf", + "section": "wf_pf", + "text": "Weighting factor of the fiber failure (pf) mode.\nfloat\nwf_pf\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cfc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cfc.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cfc", - "title": "wf_cfc > wf_cfc > wf_cfc", - "section": "wf_cfc > wf_cfc", - "text": "property CuntzeCriterion.wf_cfc: float\n\nWeighting factor of fiber failure due to compression (cfc).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pf.html#ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pf", + "title": "wf_pf > wf_pf > wf_pf", + "section": "wf_pf > wf_pf", + "text": "property PuckCriterion.wf_pf: float\n\nWeighting factor of the fiber failure (pf) mode.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.layup_model_type", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.layup_model_type.html#layup_model_type", - "title": "layup_model_type", - "section": "layup_model_type", - "text": "Get the context type of the lay-up model.\nThe type specifies whether the lay-up data was loaded from an ACP model, RST, or both.\nType can be one of the following values: NOT_AVAILABLE, ACP, RST, MIXED.\nLayupModelContextType\nlayup_model_type\nNOT_AVAILABLE\nACP\nRST\nMIXED\nLayupModelContextType" + "objectID": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply", + "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply.html#get_selected_indices_by_analysis_ply", + "title": "get_selected_indices_by_analysis_ply", + "section": "get_selected_indices_by_analysis_ply", + "text": "Get selected indices by analysis ply.\nSelects all indices that are in a layer with the given analysis ply\nanalysis_ply_info_provider (AnalysisPlyInfoProvider) – Provider for the analysis ply information.\nelement_info (ElementInfo) – Lay-up information for the element.\nSelected elementary indices.\nNDArray[int64]\nget_selected_indices_by_analysis_ply" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.layup_model_type", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.layup_model_type.html#ansys.dpf.composites.composite_model.CompositeModel.layup_model_type", - "title": "layup_model_type > layup_model_type > layup_model_type", - "section": "layup_model_type > layup_model_type", - "text": "property CompositeModel.layup_model_type: LayupModelContextType\n\nGet the context type of the lay-up model.\n\nThe type specifies whether the lay-up data was loaded from an ACP model, RST, or both.\nType can be one of the following values: NOT_AVAILABLE, ACP, RST, MIXED.\n\nReturn type\n\nLayupModelContextType\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply", + "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply.html#ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply", + "title": "get_selected_indices_by_analysis_ply > get_selected_indices_by_analysis_ply > get_selected_indices_by_analysis_ply", + "section": "get_selected_indices_by_analysis_ply > get_selected_indices_by_analysis_ply", + "text": "ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply(analysis_ply_info_provider, element_info)\n\nGet selected indices by analysis ply.\n\nSelects all indices that are in a layer with the given analysis ply\n\nParameters\n\nanalysis_ply_info_provider (AnalysisPlyInfoProvider) – Provider for the analysis ply information.\n\nelement_info (ElementInfo) – Lay-up information for the element.\n\nReturns\n\nSelected elementary indices.\n\nReturn type\n\nNDArray[int64]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.w", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.w.html#w", - "title": "w", - "section": "w", - "text": "w" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13.html#wf_e13", + "title": "wf_e13", + "section": "wf_e13", + "text": "Weighting factor of the failure mode e13.\nfloat\nwf_e13\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.w", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.w.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.w", - "title": "w > w > w", - "section": "w > w", - "text": "FailureModeEnum.w = 320\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13", + "title": "wf_e13 > wf_e13 > wf_e13", + "section": "wf_e13 > wf_e13", + "text": "property MaxStrainCriterion.wf_e13: float\n\nWeighting factor of the failure mode e13.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.M", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.M.html#m", + "title": "M", + "section": "M", + "text": "Specifies the effect of fiber parallel stresses regarding inter-fiber failure. M = [0, 1). The default is 0.5.\nfloat\nM\n0.5\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.name.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property TsaiWuCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.M", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.M.html#ansys.dpf.composites.failure_criteria.PuckCriterion.M", + "title": "M > M > M", + "section": "M > M", + "text": "property PuckCriterion.M: float\n\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure. M = [0, 1). The default is 0.5.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", - "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#plot-of-the-orientation-tensor-for-short-fiber-composites", - "title": "Plot of the orientation tensor for short fiber composites", - "section": "Plot of the orientation tensor for short fiber composites", - "text": "This example shows how to reconstruct and plot the components\nof the fiber orientation tensor in the global coordinate system.\nFor more details about the fiber orientation tensor,\nrefer to the Short Fiber Composites help.\nTo run this example you first need to install the SciPy package.\nPlot of the orientation tensor for short fiber composites" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.get_ply_wise_data", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.get_ply_wise_data.html#get_ply_wise_data", + "title": "get_ply_wise_data", + "section": "get_ply_wise_data", + "text": "Get ply-wise data from a field.\nfield (Field) – Field to extract data from.\nply_name (str) – Name of the ply to extract data from.\nmesh (MeshedRegion) – Meshed region that needs to be enriched with composite information.\nUse the CompositeModel.get_mesh() method to get the meshed region.\nspot_reduction_strategy (SpotReductionStrategy, default: ) – Reduction strategy for getting from spot values (BOT, MID, TOP) to a single value\nper corner node and layer. The default is AVG.\nrequested_location (str, default: 'ElementalNodal') – Location of the output field. Important: The function always averages nodal values\nfor \"elemental\" or \"nodal\" locations,\nirrespective of \"spot_reduction_strategy\".\nOptions are \"elemental\", \"elemental_nodal\", and \"nodal\".\nThe default is \"elemental_nodal\".\ncomponent (IntEnum | int, default: 0) – Component to extract data from. The default is 0.\nField\nget_ply_wise_data\nField\nstr\nMeshedRegion\nCompositeModel.get_mesh()\nSpotReductionStrategy\n\nAVG\nstr\n'ElementalNodal'\n\"elemental\"\n\"nodal\"\n\"spot_reduction_strategy\"\n\"elemental\"\n\"elemental_nodal\"\n\"nodal\"\n\"elemental_nodal\"\nIntEnum\nint\n0\n0\nField" }, { - "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", - "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#set-up-analysis", - "title": "Plot of the orientation tensor for short fiber composites > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nThese files are needed:\nMechanical APDL result (RST) file containing the simulation results\nMechanical APDL input file (DS.DAT) containing the fiber orientation tensor data\nSet up analysis" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.get_ply_wise_data", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.get_ply_wise_data.html#ansys.dpf.composites.ply_wise_data.get_ply_wise_data", + "title": "get_ply_wise_data > get_ply_wise_data > get_ply_wise_data", + "section": "get_ply_wise_data > get_ply_wise_data", + "text": "ansys.dpf.composites.ply_wise_data.get_ply_wise_data(field, ply_name, mesh, spot_reduction_strategy=SpotReductionStrategy.AVG, requested_location='ElementalNodal', component=0)\n\nGet ply-wise data from a field.\n\nParameters\n\nfield (Field) – Field to extract data from.\n\nply_name (str) – Name of the ply to extract data from.\n\nmesh (MeshedRegion) – Meshed region that needs to be enriched with composite information.\nUse the CompositeModel.get_mesh() method to get the meshed region.\n\nspot_reduction_strategy (SpotReductionStrategy, default: ) – Reduction strategy for getting from spot values (BOT, MID, TOP) to a single value\nper corner node and layer. The default is AVG.\n\nrequested_location (str, default: 'ElementalNodal') – Location of the output field. Important: The function always averages nodal values\nfor \"elemental\" or \"nodal\" locations,\nirrespective of \"spot_reduction_strategy\".\nOptions are \"elemental\", \"elemental_nodal\", and \"nodal\".\nThe default is \"elemental_nodal\".\n\ncomponent (IntEnum | int, default: 0) – Component to extract data from. The default is 0.\n\nReturn type\n\nField\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", - "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#set-up-data-sources", - "title": "Plot of the orientation tensor for short fiber composites > Set up data sources", - "section": "Set up data sources", - "text": "Set up the data sources.\nSet up data sources" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.axes", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.axes.html#axes", + "title": "axes", + "section": "axes", + "text": "axes" }, { - "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", - "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#initialize-dpf-model", - "title": "Plot of the orientation tensor for short fiber composites > Initialize DPF model", - "section": "Initialize DPF model", - "text": "Initialize the DPF model.\nShould your mesh contain both solid and shell elements, for visualization purposes\nit can be useful to scope the mesh to the solid ones.\nInitialize DPF model" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.axes", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.axes.html#ansys.dpf.composites.sampling_point.SamplingPointFigure.axes", + "title": "axes > axes > axes", + "section": "axes > axes", + "text": "SamplingPointFigure.axes: Any\n\n" }, { - "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", - "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#plot-input-data", - "title": "Plot of the orientation tensor for short fiber composites > Plot input data", - "section": "Plot input data", - "text": "Plot the two largest eigenvalues (a11 and a22) of the fiber orientation tensor.\nNote that the plots reveal the presence of a weld line in the middle of the specimen.\nPlot input data" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_a", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_a.html#thermal_expansion_coefficients_a", + "title": "Thermal_Expansion_Coefficients_a", + "section": "Thermal_Expansion_Coefficients_a", + "text": "Thermal_Expansion_Coefficients_a" }, { - "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", - "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#compute-results", - "title": "Plot of the orientation tensor for short fiber composites > Compute results", - "section": "Compute results", - "text": "Reconstruct the fiber orientation tensor in the global coordinate system.\nCompute results" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_a", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_a.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_a", + "title": "Thermal_Expansion_Coefficients_a > Thermal_Expansion_Coefficients_a > Thermal_Expansion_Coefficients_a", + "section": "Thermal_Expansion_Coefficients_a > Thermal_Expansion_Coefficients_a", + "text": "MaterialProperty.Thermal_Expansion_Coefficients_a: str = 'coefficient_thermal_expansion'\n\n" }, { - "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", - "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#plot-results", - "title": "Plot of the orientation tensor for short fiber composites > Plot results", - "section": "Plot results", - "text": "Plot some components of the fiber orientation tensor.\nTotal running time of the script: (0 minutes 6.511 seconds)\nDownload Jupyter notebook: 009_short_fiber_orientation_tensor.ipynb\nDownload Python source code: 009_short_fiber_orientation_tensor.py\nDownload zipped: 009_short_fiber_orientation_tensor.zip\nGallery generated by Sphinx-Gallery\nPlot results\nDownload Jupyter notebook: 009_short_fiber_orientation_tensor.ipynb\nDownload Python source code: 009_short_fiber_orientation_tensor.py\nDownload zipped: 009_short_fiber_orientation_tensor.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xz.html#tsai_wu_constant_xz", + "title": "Tsai_Wu_Constant_xz", + "section": "Tsai_Wu_Constant_xz", + "text": "Tsai_Wu_Constant_xz" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.html#larccriterion", - "title": "LaRCCriterion", - "section": "LaRCCriterion", - "text": "Defines the LaRC failure criterion for UD reinforced materials.\nlft (bool, default: True) – Whether to activate the failure evaluation regarding tension in fiber direction.\nlfc (bool, default: True) – Whether to activate the failure evaluation regarding compression in fiber direction.\nlmt (bool, default: True) – Whether to activate the failure evaluation of the matrix due to tension.\nlmc (bool, default: True) – Whether to activate the failure evaluation of the matrix due to compression.\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used. 2D is equivalent to LaRC03, and 3D is equivalent to LaRC04.\nwf_lft (float, default: 1.0) – Weighting factor of fiber failure due to tension (lft).\nwf_lfc (float, default: 1.0) – Weighting factor of fiber failure due to compression (lfc).\nwf_lmt (float, default: 1.0) – Weighting factor of matrix failure due to tension (lmt).\nwf_lmc (float, default: 1.0) – Weighting factor of matrix failure due to compression (lmc).\nLaRCCriterion.to_dict()\n\nLaRCCriterion.to_json()\n\nLaRCCriterion.active\nThe failure criterion is suppressed if active is False.\nLaRCCriterion.dim\nWhether the 2D or 3D formulation of the criterion is used.\nLaRCCriterion.lfc\nWhether to activate the failure evaluation regarding compression in fiber direction.\nLaRCCriterion.lft\nWhether to activate the failure evaluation regarding tension in fiber direction.\nLaRCCriterion.lmc\nWhether to activate the failure evaluation of the matrix due to compression.\nLaRCCriterion.lmt\nWhether to activate the failure evaluation of the matrix due to tension.\nLaRCCriterion.name\nName of the failure criterion.\nLaRCCriterion.wf_lfc\nWeighting factor of fiber failure due to compression (lfc).\nLaRCCriterion.wf_lft\nWeighting factor of fiber failure due to tension (lft).\nLaRCCriterion.wf_lmc\nWeighting factor of matrix failure due to compression (lmc).\nLaRCCriterion.wf_lmt\nWeighting factor of matrix failure due to tension (lmt).\nLaRCCriterion\nbool\nTrue\nbool\nTrue\nbool\nTrue\nbool\nTrue\nint\n2\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nLaRCCriterion.to_dict\nLaRCCriterion.to_json\nLaRCCriterion.active\nLaRCCriterion.dim\nLaRCCriterion.lfc\nLaRCCriterion.lft\nLaRCCriterion.lmc\nLaRCCriterion.lmt\nLaRCCriterion.name\nLaRCCriterion.wf_lfc\nLaRCCriterion.wf_lft\nLaRCCriterion.wf_lmc\nLaRCCriterion.wf_lmt" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xz", + "title": "Tsai_Wu_Constant_xz > Tsai_Wu_Constant_xz > Tsai_Wu_Constant_xz", + "section": "Tsai_Wu_Constant_xz > Tsai_Wu_Constant_xz", + "text": "MaterialProperty.Tsai_Wu_Constant_xz: str = 'coupling_coef_xz_tsai_wu'\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MIN", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MIN.html#min", + "title": "MIN", + "section": "MIN", + "text": "MIN" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.html#ansys.dpf.composites.failure_criteria.LaRCCriterion", - "title": "LaRCCriterion > LaRCCriterion > LaRCCriterion", - "section": "LaRCCriterion > LaRCCriterion", - "text": "class ansys.dpf.composites.failure_criteria.LaRCCriterion(*, lft=True, lfc=True, lmt=True, lmc=True, dim=2, wf_lft=1.0, wf_lfc=1.0, wf_lmt=1.0, wf_lmc=1.0)\n\nDefines the LaRC failure criterion for UD reinforced materials.\n\nParameters\n\nlft (bool, default: True) – Whether to activate the failure evaluation regarding tension in fiber direction.\n\nlfc (bool, default: True) – Whether to activate the failure evaluation regarding compression in fiber direction.\n\nlmt (bool, default: True) – Whether to activate the failure evaluation of the matrix due to tension.\n\nlmc (bool, default: True) – Whether to activate the failure evaluation of the matrix due to compression.\n\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used. 2D is equivalent to LaRC03, and 3D is equivalent to LaRC04.\n\nwf_lft (float, default: 1.0) – Weighting factor of fiber failure due to tension (lft).\n\nwf_lfc (float, default: 1.0) – Weighting factor of fiber failure due to compression (lfc).\n\nwf_lmt (float, default: 1.0) – Weighting factor of matrix failure due to tension (lmt).\n\nwf_lmc (float, default: 1.0) – Weighting factor of matrix failure due to compression (lmc).\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nLaRCCriterion.to_dict()\n\n\n\nLaRCCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nLaRCCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nLaRCCriterion.dim\n\nWhether the 2D or 3D formulation of the criterion is used.\n\nLaRCCriterion.lfc\n\nWhether to activate the failure evaluation regarding compression in fiber direction.\n\nLaRCCriterion.lft\n\nWhether to activate the failure evaluation regarding tension in fiber direction.\n\nLaRCCriterion.lmc\n\nWhether to activate the failure evaluation of the matrix due to compression.\n\nLaRCCriterion.lmt\n\nWhether to activate the failure evaluation of the matrix due to tension.\n\nLaRCCriterion.name\n\nName of the failure criterion.\n\nLaRCCriterion.wf_lfc\n\nWeighting factor of fiber failure due to compression (lfc).\n\nLaRCCriterion.wf_lft\n\nWeighting factor of fiber failure due to tension (lft).\n\nLaRCCriterion.wf_lmc\n\nWeighting factor of matrix failure due to compression (lmc).\n\nLaRCCriterion.wf_lmt\n\nWeighting factor of matrix failure due to tension (lmt).\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MIN", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MIN.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MIN", + "title": "MIN > MIN > MIN", + "section": "MIN > MIN", + "text": "SpotReductionStrategy.MIN = 'MIN'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.html#analysisplyinfoprovider", - "title": "AnalysisPlyInfoProvider", - "section": "AnalysisPlyInfoProvider", - "text": "AnalysisPlyInfoProvider. Can be used to compute the layer indices of a given analysis ply.\nmesh (MeshedRegion) – DPF MeshedRegion with lay-up information.\nname (str) – Analysis Ply Name\nAnalysisPlyInfoProvider.get_layer_index_by_element_id(...)\nGet the layer index for the analysis ply in a given element.\nAnalysisPlyInfoProvider.ply_element_ids()\nReturn list of element labels of the analysis ply.\nAnalysisPlyInfoProvider\nMeshedRegion\nstr\nAnalysisPlyInfoProvider.get_layer_index_by_element_id\nAnalysisPlyInfoProvider.ply_element_ids" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R33", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R33.html#hill_yield_criterion_r33", + "title": "Hill_Yield_Criterion_R33", + "section": "Hill_Yield_Criterion_R33", + "text": "Hill_Yield_Criterion_R33" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.html#ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider", - "title": "AnalysisPlyInfoProvider > AnalysisPlyInfoProvider > AnalysisPlyInfoProvider", - "section": "AnalysisPlyInfoProvider > AnalysisPlyInfoProvider", - "text": "class ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider(mesh, name)\n\nAnalysisPlyInfoProvider. Can be used to compute the layer indices of a given analysis ply.\n\nParameters\n\nmesh (MeshedRegion) – DPF MeshedRegion with lay-up information.\n\nname (str) – Analysis Ply Name\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nAnalysisPlyInfoProvider.get_layer_index_by_element_id(...)\n\nGet the layer index for the analysis ply in a given element.\n\nAnalysisPlyInfoProvider.ply_element_ids()\n\nReturn list of element labels of the analysis ply.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R33", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R33.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R33", + "title": "Hill_Yield_Criterion_R33 > Hill_Yield_Criterion_R33 > Hill_Yield_Criterion_R33", + "section": "Hill_Yield_Criterion_R33 > Hill_Yield_Criterion_R33", + "text": "MaterialProperty.Hill_Yield_Criterion_R33: str = 'yield_stress_ratio_z_hill_criterion'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R23", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R23.html#hill_yield_criterion_r23", + "title": "Hill_Yield_Criterion_R23", + "section": "Hill_Yield_Criterion_R23", + "text": "Hill_Yield_Criterion_R23" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.active.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property VonMisesCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R23", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R23.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R23", + "title": "Hill_Yield_Criterion_R23 > Hill_Yield_Criterion_R23 > Hill_Yield_Criterion_R23", + "section": "Hill_Yield_Criterion_R23 > Hill_Yield_Criterion_R23", + "text": "MaterialProperty.Hill_Yield_Criterion_R23: str = 'yield_stress_ratio_yz_hill_criterion'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.html#vonmisescriterion", - "title": "VonMisesCriterion", - "section": "VonMisesCriterion", - "text": "Defines the von Mises criterion for isotropic materials.\nvme (bool, default: True) – Whether to activate the von Mises strain criterion.\nvms (bool, default: True) – Whether to activate the von Mises stress criterion.\nwf_vme (float, default: 1.0) – Weighting factor of the strain criterion (vme).\nwf_vms (float, default: 1.0) – Weighting factor of the stress criterion (vms).\neval_ins (bool, default: False) – Whether to consider interlaminar normal stresses (s3) and compute them for layered shells.\nVonMisesCriterion.to_dict()\n\nVonMisesCriterion.to_json()\n\nVonMisesCriterion.active\nThe failure criterion is suppressed if active is False.\nVonMisesCriterion.eval_ins\nWhether to consider interlaminar normal stresses (s3) and compute them for layered shells.\nVonMisesCriterion.name\nName of the failure criterion.\nVonMisesCriterion.vme\nWhether to activate the von Mises strain criterion.\nVonMisesCriterion.vms\nWhether to activate the von Mises stress criterion.\nVonMisesCriterion.wf_vme\nWeighting factor of the strain criterion (vme).\nVonMisesCriterion.wf_vms\nWeighting factor of the stress criterion (vms).\nVonMisesCriterion\nbool\nTrue\nbool\nTrue\nfloat\n1.0\nfloat\n1.0\nbool\nFalse\nVonMisesCriterion.to_dict\nVonMisesCriterion.to_json\nVonMisesCriterion.active\nVonMisesCriterion.eval_ins\nVonMisesCriterion.name\nVonMisesCriterion.vme\nVonMisesCriterion.vms\nVonMisesCriterion.wf_vme\nVonMisesCriterion.wf_vms" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e2.html#wf_e2", + "title": "wf_e2", + "section": "wf_e2", + "text": "Weighting factor of the failure mode e2.\nfloat\nwf_e2\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion", - "title": "VonMisesCriterion > VonMisesCriterion > VonMisesCriterion", - "section": "VonMisesCriterion > VonMisesCriterion", - "text": "class ansys.dpf.composites.failure_criteria.VonMisesCriterion(*, vme=True, vms=True, wf_vme=1.0, wf_vms=1.0, eval_ins=False)\n\nDefines the von Mises criterion for isotropic materials.\n\nParameters\n\nvme (bool, default: True) – Whether to activate the von Mises strain criterion.\n\nvms (bool, default: True) – Whether to activate the von Mises stress criterion.\n\nwf_vme (float, default: 1.0) – Weighting factor of the strain criterion (vme).\n\nwf_vms (float, default: 1.0) – Weighting factor of the stress criterion (vms).\n\neval_ins (bool, default: False) – Whether to consider interlaminar normal stresses (s3) and compute them for layered shells.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nVonMisesCriterion.to_dict()\n\n\n\nVonMisesCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nVonMisesCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nVonMisesCriterion.eval_ins\n\nWhether to consider interlaminar normal stresses (s3) and compute them for layered shells.\n\nVonMisesCriterion.name\n\nName of the failure criterion.\n\nVonMisesCriterion.vme\n\nWhether to activate the von Mises strain criterion.\n\nVonMisesCriterion.vms\n\nWhether to activate the von Mises stress criterion.\n\nVonMisesCriterion.wf_vme\n\nWeighting factor of the strain criterion (vme).\n\nVonMisesCriterion.wf_vms\n\nWeighting factor of the stress criterion (vms).\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e2.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e2", + "title": "wf_e2 > wf_e2 > wf_e2", + "section": "wf_e2 > wf_e2", + "text": "property MaxStrainCriterion.wf_e2: float\n\nWeighting factor of the failure mode e2.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { "objectID": "examples/gallery_examples/006_filter_composite_data_example", @@ -6864,1330 +6605,1512 @@ "href": "examples/gallery_examples/006_filter_composite_data_example.html#filter-by-analysis-ply-on-the-client-side", "title": "Filter result data by different criteria > Filter by analysis ply on the client side", "section": "Filter by analysis ply on the client side", - "text": "Loop over all elements that contain a given ply and plot the maximum stress value\nin the material direction in this ply.\nTotal running time of the script: (0 minutes 4.640 seconds)\nDownload Jupyter notebook: 006_filter_composite_data_example.ipynb\nDownload Python source code: 006_filter_composite_data_example.py\nDownload zipped: 006_filter_composite_data_example.zip\nGallery generated by Sphinx-Gallery\nFilter by analysis ply on the client side\nDownload Jupyter notebook: 006_filter_composite_data_example.ipynb\nDownload Python source code: 006_filter_composite_data_example.py\nDownload zipped: 006_filter_composite_data_example.zip" + "text": "Loop over all elements that contain a given ply and plot the maximum stress value\nin the material direction in this ply.\nTotal running time of the script: (0 minutes 4.628 seconds)\nDownload Jupyter notebook: 006_filter_composite_data_example.ipynb\nDownload Python source code: 006_filter_composite_data_example.py\nDownload zipped: 006_filter_composite_data_example.zip\nGallery generated by Sphinx-Gallery\nFilter by analysis ply on the client side\nDownload Jupyter notebook: 006_filter_composite_data_example.ipynb\nDownload Python source code: 006_filter_composite_data_example.py\nDownload zipped: 006_filter_composite_data_example.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.ANGLES", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.ANGLES.html#angles", - "title": "ANGLES", - "section": "ANGLES", - "text": "ANGLES" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.splitlines", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.splitlines.html#splitlines", + "title": "splitlines", + "section": "splitlines", + "text": "Return a list of the lines in the string, breaking at line boundaries.\nLine breaks are not included in the resulting list unless keepends is given and\ntrue.\nsplitlines" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.ANGLES", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.ANGLES.html#ansys.dpf.composites.layup_info.LayerProperty.ANGLES", - "title": "ANGLES > ANGLES > ANGLES", - "section": "ANGLES > ANGLES", - "text": "LayerProperty.ANGLES = 1\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.splitlines", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.splitlines.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.splitlines", + "title": "splitlines > splitlines > splitlines", + "section": "splitlines > splitlines", + "text": "FailureMeasureEnum.splitlines(/, keepends=False)\n\nReturn a list of the lines in the string, breaking at line boundaries.\n\nLine breaks are not included in the resulting list unless keepends is given and\ntrue.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e12.html#wf_e12", - "title": "wf_e12", - "section": "wf_e12", - "text": "Weighting factor of the failure mode e12.\nfloat\nwf_e12\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxz.html#stress_limits_sxz", + "title": "Stress_Limits_Sxz", + "section": "Stress_Limits_Sxz", + "text": "Stress_Limits_Sxz" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxz", + "title": "Stress_Limits_Sxz > Stress_Limits_Sxz > Stress_Limits_Sxz", + "section": "Stress_Limits_Sxz > Stress_Limits_Sxz", + "text": "MaterialProperty.Stress_Limits_Sxz: str = 'stress_shear_xz'\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2.html#s2", + "title": "s2", + "section": "s2", + "text": "s2" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s2", + "title": "s2 > s2 > s2", + "section": "s2 > s2", + "text": "FailureModeEnum.s2 = 220\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.mapping_file", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.mapping_file.html#mapping_file", + "title": "mapping_file", + "section": "mapping_file", + "text": "Path to the mapping file for all element labels in the element scope.\nmapping_file" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.mapping_file", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.mapping_file.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.mapping_file", + "title": "mapping_file > mapping_file > mapping_file", + "section": "mapping_file > mapping_file", + "text": "ResultDefinitionScope.mapping_file: str | PathLike[str] | None = None\n\nPath to the mapping file for all element labels in the element scope.\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.s", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.s.html#s", + "title": "s", + "section": "s", + "text": "Specifies the effect of fiber parallel stresses regarding inter-fiber failure. s = [0, 1) and the default is 0.5.\nfloat\ns\n0.5\nfloat" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.s", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.s.html#ansys.dpf.composites.failure_criteria.PuckCriterion.s", + "title": "s > s > s", + "section": "s > s", + "text": "property PuckCriterion.s: float\n\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure. s = [0, 1) and the default is 0.5.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXt", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXt.html#ext", + "title": "eXt", + "section": "eXt", + "text": "Global tensile strain limit in material direction 1.\nfloat\neXt\nfloat" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXt", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXt.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXt", + "title": "eXt > eXt > eXt", + "section": "eXt > eXt", + "text": "property MaxStrainCriterion.eXt: float\n\nGlobal tensile strain limit in material direction 1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ns", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ns.html#ns", + "title": "ns", + "section": "ns", + "text": "ns" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ns", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ns.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.ns", + "title": "ns > ns > ns", + "section": "ns > ns", + "text": "FailureModeEnum.ns = 9998\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1.html#larc_constants_fracture_toughness_mode_1", + "title": "Larc_Constants_fracture_toughness_mode_1", + "section": "Larc_Constants_fracture_toughness_mode_1", + "text": "Larc_Constants_fracture_toughness_mode_1" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1", + "title": "Larc_Constants_fracture_toughness_mode_1 > Larc_Constants_fracture_toughness_mode_1 > Larc_Constants_fracture_toughness_mode_1", + "section": "Larc_Constants_fracture_toughness_mode_1 > Larc_Constants_fracture_toughness_mode_1", + "text": "MaterialProperty.Larc_Constants_fracture_toughness_mode_1: str = 'longitudinal_friction_coefficient_larc_constants'\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s12", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s12.html#wf_s12", + "title": "wf_s12", + "section": "wf_s12", + "text": "Weighting factor of the failure mode s12.\nfloat\nwf_s12\nfloat" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s12", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s12.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s12", + "title": "wf_s12 > wf_s12 > wf_s12", + "section": "wf_s12 > wf_s12", + "text": "property MaxStressCriterion.wf_s12: float\n\nWeighting factor of the failure mode s12.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.mapping", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.mapping.html#mapping", + "title": "mapping", + "section": "mapping", + "text": "mapping" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.mapping", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.mapping.html#ansys.dpf.composites.data_sources.CompositeDefinitionFiles.mapping", + "title": "mapping > mapping > mapping", + "section": "mapping > mapping", + "text": "CompositeDefinitionFiles.mapping: str | PathLike[str] | None = None\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalnum", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalnum.html#isalnum", + "title": "isalnum", + "section": "isalnum", + "text": "Return True if the string is an alpha-numeric string, False otherwise.\nA string is alpha-numeric if all characters in the string are alpha-numeric and\nthere is at least one character in the string.\nisalnum" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalnum", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalnum.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isalnum", + "title": "isalnum > isalnum > isalnum", + "section": "isalnum > isalnum", + "text": "FailureMeasureEnum.isalnum(/)\n\nReturn True if the string is an alpha-numeric string, False otherwise.\n\nA string is alpha-numeric if all characters in the string are alpha-numeric and\nthere is at least one character in the string.\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.named_selections", + "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.named_selections.html#named_selections", + "title": "named_selections", + "section": "named_selections", + "text": "named_selections" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.named_selections", + "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.named_selections.html#ansys.dpf.composites.composite_scope.CompositeScope.named_selections", + "title": "named_selections > named_selections > named_selections", + "section": "named_selections > named_selections", + "text": "CompositeScope.named_selections: Sequence[str] | None = None\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2c.html#e2c", + "title": "e2c", + "section": "e2c", + "text": "e2c" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e2c", + "title": "e2c > e2c > e2c", + "section": "e2c > e2c", + "text": "FailureModeEnum.e2c = 122\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e12.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e12", - "title": "wf_e12 > wf_e12 > wf_e12", - "section": "wf_e12 > wf_e12", - "text": "property MaxStrainCriterion.wf_e12: float\n\nWeighting factor of the failure mode e12.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ap", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ap.html#ap", + "title": "ap", + "section": "ap", + "text": "ap" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hd.html#hd", - "title": "hd", - "section": "hd", - "text": "Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\nbool\nhd\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ap", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ap.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.ap", + "title": "ap > ap > ap", + "section": "ap > ap", + "text": "FailureModeEnum.ap = 1202\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hd.html#ansys.dpf.composites.failure_criteria.HashinCriterion.hd", - "title": "hd > hd > hd", - "section": "hd > hd", - "text": "property HashinCriterion.hd: bool\n\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.html#maxstresscriterion", + "title": "MaxStressCriterion", + "section": "MaxStressCriterion", + "text": "Defines the maximum stress failure criterion for orthotropic reinforced materials.\ns1 (bool, default: True) – Whether to activate the failure evaluation regarding the stress in the material 1 direction.\ns2 (bool, default: True) – Whether to activate the failure evaluation regarding the stress in the material 2 direction.\ns3 (bool, default: False) – Whether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\ns12 (bool, default: True) – Whether to activate the failure evaluation regarding the in-plane shear stress s12.\ns13 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear stress s13.\ns23 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear stress s23.\nwf_s1 (float, default: 1.0) – Weighting factor of the failure mode s1.\nwf_s2 (float, default: 1.0) – Weighting factor of the failure mode s2.\nwf_s3 (float, default: 1.0) – Weighting factor of the failure mode s3.\nwf_s12 (float, default: 1.0) – Weighting factor of the failure mode s12.\nwf_s13 (float, default: 1.0) – Weighting factor of the failure mode s13.\nwf_s23 (float, default: 1.0) – Weighting factor of the failure mode s23.\nMaxStressCriterion.to_dict()\n\nMaxStressCriterion.to_json()\n\nMaxStressCriterion.active\nThe failure criterion is suppressed if active is False.\nMaxStressCriterion.name\nName of the failure criterion.\nMaxStressCriterion.s1\nWhether to activate the failure evaluation regarding the stress in the material 1 direction.\nMaxStressCriterion.s12\nWhether to activate the failure evaluation regarding the in-plane shear stress s12.\nMaxStressCriterion.s13\nWhether to activate the failure evaluation regarding the interlaminar shear stress s13.\nMaxStressCriterion.s2\nWhether to activate the failure evaluation regarding the stress in the material 2 direction.\nMaxStressCriterion.s23\nWhether to activate the failure evaluation regarding the interlaminar shear stress s23.\nMaxStressCriterion.s3\nWhether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\nMaxStressCriterion.wf_s1\nWeighting factor of the failure mode s1.\nMaxStressCriterion.wf_s12\nWeighting factor of the failure mode s12.\nMaxStressCriterion.wf_s13\nWeighting factor of the failure mode s13.\nMaxStressCriterion.wf_s2\nWeighting factor of the failure mode s2.\nMaxStressCriterion.wf_s23\nWeighting factor of the failure mode s23.\nMaxStressCriterion.wf_s3\nWeighting factor of the failure mode s3.\nMaxStressCriterion\nbool\nTrue\nbool\nTrue\nbool\nFalse\nbool\nTrue\nbool\nFalse\nbool\nFalse\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nMaxStressCriterion.to_dict\nMaxStressCriterion.to_json\nMaxStressCriterion.active\nMaxStressCriterion.name\nMaxStressCriterion.s1\nMaxStressCriterion.s12\nMaxStressCriterion.s13\nMaxStressCriterion.s2\nMaxStressCriterion.s23\nMaxStressCriterion.s3\nMaxStressCriterion.wf_s1\nMaxStressCriterion.wf_s12\nMaxStressCriterion.wf_s13\nMaxStressCriterion.wf_s2\nMaxStressCriterion.wf_s23\nMaxStressCriterion.wf_s3" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion", + "title": "MaxStressCriterion > MaxStressCriterion > MaxStressCriterion", + "section": "MaxStressCriterion > MaxStressCriterion", + "text": "class ansys.dpf.composites.failure_criteria.MaxStressCriterion(*, s1=True, s2=True, s3=False, s12=True, s13=False, s23=False, wf_s1=1.0, wf_s2=1.0, wf_s3=1.0, wf_s12=1.0, wf_s13=1.0, wf_s23=1.0)\n\nDefines the maximum stress failure criterion for orthotropic reinforced materials.\n\nParameters\n\ns1 (bool, default: True) – Whether to activate the failure evaluation regarding the stress in the material 1 direction.\n\ns2 (bool, default: True) – Whether to activate the failure evaluation regarding the stress in the material 2 direction.\n\ns3 (bool, default: False) – Whether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\n\ns12 (bool, default: True) – Whether to activate the failure evaluation regarding the in-plane shear stress s12.\n\ns13 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear stress s13.\n\ns23 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear stress s23.\n\nwf_s1 (float, default: 1.0) – Weighting factor of the failure mode s1.\n\nwf_s2 (float, default: 1.0) – Weighting factor of the failure mode s2.\n\nwf_s3 (float, default: 1.0) – Weighting factor of the failure mode s3.\n\nwf_s12 (float, default: 1.0) – Weighting factor of the failure mode s12.\n\nwf_s13 (float, default: 1.0) – Weighting factor of the failure mode s13.\n\nwf_s23 (float, default: 1.0) – Weighting factor of the failure mode s23.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nMaxStressCriterion.to_dict()\n\n\n\nMaxStressCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nMaxStressCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nMaxStressCriterion.name\n\nName of the failure criterion.\n\nMaxStressCriterion.s1\n\nWhether to activate the failure evaluation regarding the stress in the material 1 direction.\n\nMaxStressCriterion.s12\n\nWhether to activate the failure evaluation regarding the in-plane shear stress s12.\n\nMaxStressCriterion.s13\n\nWhether to activate the failure evaluation regarding the interlaminar shear stress s13.\n\nMaxStressCriterion.s2\n\nWhether to activate the failure evaluation regarding the stress in the material 2 direction.\n\nMaxStressCriterion.s23\n\nWhether to activate the failure evaluation regarding the interlaminar shear stress s23.\n\nMaxStressCriterion.s3\n\nWhether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\n\nMaxStressCriterion.wf_s1\n\nWeighting factor of the failure mode s1.\n\nMaxStressCriterion.wf_s12\n\nWeighting factor of the failure mode s12.\n\nMaxStressCriterion.wf_s13\n\nWeighting factor of the failure mode s13.\n\nMaxStressCriterion.wf_s2\n\nWeighting factor of the failure mode s2.\n\nMaxStressCriterion.wf_s23\n\nWeighting factor of the failure mode s23.\n\nMaxStressCriterion.wf_s3\n\nWeighting factor of the failure mode s3.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.name.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property MaxStressCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hd", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hd.html#wf_hd", + "title": "wf_hd", + "section": "wf_hd", + "text": "Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\nfloat\nwf_hd\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hd", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hd.html#ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hd", + "title": "wf_hd > wf_hd > wf_hd", + "section": "wf_hd > wf_hd", + "text": "property HashinCriterion.wf_hd: float\n\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.name.html#ansys.dpf.composites.failure_criteria.PuckCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property PuckCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/composite_model", + "href": "api/composite_model.html#composite-model", + "title": "Composite model", + "section": "Composite model", + "text": "CompositeModel(composite_files, server[, ...])\nProvides access to the basic composite postprocessing functionality.\nComposite model\nCompositeModel" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.html#compositedefinitionfiles", - "title": "CompositeDefinitionFiles", - "section": "CompositeDefinitionFiles", - "text": "Provides the container for composite definition file paths.\nCompositeDefinitionFiles.mapping\n\nCompositeDefinitionFiles.definition\n\nCompositeDefinitionFiles\nCompositeDefinitionFiles.mapping\nCompositeDefinitionFiles.definition" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider.html#result_info_provider", + "title": "result_info_provider", + "section": "result_info_provider", + "text": "Get result_info_provider.\nOperator\nresult_info_provider\nOperator" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.html#ansys.dpf.composites.data_sources.CompositeDefinitionFiles", - "title": "CompositeDefinitionFiles > CompositeDefinitionFiles > CompositeDefinitionFiles", - "section": "CompositeDefinitionFiles > CompositeDefinitionFiles", - "text": "class ansys.dpf.composites.data_sources.CompositeDefinitionFiles(definition, mapping=None)\n\nProvides the container for composite definition file paths.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nCompositeDefinitionFiles.mapping\n\n\n\nCompositeDefinitionFiles.definition\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider.html#ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider", + "title": "result_info_provider > result_info_provider > result_info_provider", + "section": "result_info_provider > result_info_provider", + "text": "property MaterialOperators.result_info_provider: Operator\n\nGet result_info_provider.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.html#layupmodelcontexttype", - "title": "LayupModelContextType", - "section": "LayupModelContextType", - "text": "Type of the lay-up information.\nLayupModelContextType.NOT_AVAILABLE\n\nLayupModelContextType.ACP\n\nLayupModelContextType.RST\n\nLayupModelContextType.MIXED\n\nLayupModelContextType\nLayupModelContextType.NOT_AVAILABLE\nLayupModelContextType.ACP\nLayupModelContextType.RST\nLayupModelContextType.MIXED" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e23.html#e23", + "title": "e23", + "section": "e23", + "text": "Whether to activate the failure evaluation regarding the interlaminar shear strain e23.\nbool\ne23\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.html#ansys.dpf.composites.layup_info.LayupModelContextType", - "title": "LayupModelContextType > LayupModelContextType > LayupModelContextType", - "section": "LayupModelContextType > LayupModelContextType", - "text": "class ansys.dpf.composites.layup_info.LayupModelContextType(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nType of the lay-up information.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nLayupModelContextType.NOT_AVAILABLE\n\n\n\nLayupModelContextType.ACP\n\n\n\nLayupModelContextType.RST\n\n\n\nLayupModelContextType.MIXED\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e23.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e23", + "title": "e23 > e23 > e23", + "section": "e23 > e23", + "text": "property MaxStrainCriterion.e23: bool\n\nWhether to activate the failure evaluation regarding the interlaminar shear strain e23.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e2", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e2.html#e2", - "title": "e2", - "section": "e2", - "text": "Strains in the material 2 direction of each ply.\nndarray[Any, dtype[float64]]\ne2\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.figure", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.figure.html#figure", + "title": "figure", + "section": "figure", + "text": "figure" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e2", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e2.html#ansys.dpf.composites.sampling_point.SamplingPoint.e2", - "title": "e2 > e2 > e2", - "section": "e2 > e2", - "text": "property SamplingPoint.e2: ndarray[Any, dtype[float64]]\n\nStrains in the material 2 direction of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.figure", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.figure.html#ansys.dpf.composites.sampling_point.SamplingPointFigure.figure", + "title": "figure > figure > figure", + "section": "figure > figure", + "text": "SamplingPointFigure.figure: Any\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2.html#s2", - "title": "s2", - "section": "s2", - "text": "Stresses in the material 2 direction of each ply.\nndarray[Any, dtype[float64]]\ns2\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.replace", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.replace.html#replace", + "title": "replace", + "section": "replace", + "text": "Return a copy with all occurrences of substring old replaced by new.\nMaximum number of occurrences to replace.\n-1 (the default value) means replace all occurrences.\nIf the optional argument count is given, only the first count occurrences are\nreplaced.\nreplace" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2.html#ansys.dpf.composites.sampling_point.SamplingPoint.s2", - "title": "s2 > s2 > s2", - "section": "s2 > s2", - "text": "property SamplingPoint.s2: ndarray[Any, dtype[float64]]\n\nStresses in the material 2 direction of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.replace", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.replace.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.replace", + "title": "replace > replace > replace", + "section": "replace > replace", + "text": "FailureMeasureEnum.replace(old, new, /, count=-1)\n\nReturn a copy with all occurrences of substring old replaced by new.\n\ncount\n\nMaximum number of occurrences to replace.\n-1 (the default value) means replace all occurrences.\n\nIf the optional argument count is given, only the first count occurrences are\nreplaced.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pd.html#pd", - "title": "pd", - "section": "pd", - "text": "Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\nbool\npd\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.l", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.l.html#l", + "title": "l", + "section": "l", + "text": "l" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pd.html#ansys.dpf.composites.failure_criteria.PuckCriterion.pd", - "title": "pd > pd > pd", - "section": "pd > pd", - "text": "property PuckCriterion.pd: bool\n\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.l", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.l.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.l", + "title": "l > l > l", + "section": "l > l", + "text": "FailureModeEnum.l = 900\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_corner_nodes", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_corner_nodes.html#n_corner_nodes", - "title": "n_corner_nodes", - "section": "n_corner_nodes", - "text": "n_corner_nodes" + "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.connect_to_or_start_server", + "href": "api/_autosummary/ansys.dpf.composites.server_helpers.connect_to_or_start_server.html#connect_to_or_start_server", + "title": "connect_to_or_start_server", + "section": "connect_to_or_start_server", + "text": "Connect to or start a DPF server with the DPF Composites plugin loaded.\nIf a port or IP address is set, this method tries to connect to the server specified\nand the ansys_path parameter is ignored. If no parameters are set, a local server\nfrom the latest available Ansys installation is started.\nport (Optional[int], default: None) – Port that the DPF server is listening on.\nip (Optional[str], default: None) – IP address for the DPF server.\nansys_path (Optional[str], default: None) – Root path for the Ansys installation. For example, C:\\\\Program Files\\\\ANSYS Inc\\\\v232.\nThis parameter is ignored if either the port or IP address is set.\nAny\nDPF server.\nconnect_to_or_start_server\nansys_path\nOptional\nint\nNone\nOptional\nstr\nNone\nOptional\nstr\nNone\nC:\\\\Program Files\\\\ANSYS Inc\\\\v232\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_corner_nodes", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_corner_nodes.html#ansys.dpf.composites.layup_info.ElementInfo.n_corner_nodes", - "title": "n_corner_nodes > n_corner_nodes > n_corner_nodes", - "section": "n_corner_nodes > n_corner_nodes", - "text": "ElementInfo.n_corner_nodes: int\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.connect_to_or_start_server", + "href": "api/_autosummary/ansys.dpf.composites.server_helpers.connect_to_or_start_server.html#ansys.dpf.composites.server_helpers.connect_to_or_start_server", + "title": "connect_to_or_start_server > connect_to_or_start_server > connect_to_or_start_server", + "section": "connect_to_or_start_server > connect_to_or_start_server", + "text": "ansys.dpf.composites.server_helpers.connect_to_or_start_server(port=None, ip=None, ansys_path=None)\n\nConnect to or start a DPF server with the DPF Composites plugin loaded.\n\nIf a port or IP address is set, this method tries to connect to the server specified\nand the ansys_path parameter is ignored. If no parameters are set, a local server\nfrom the latest available Ansys installation is started.\n\nParameters\n\nport (Optional[int], default: None) – Port that the DPF server is listening on.\n\nip (Optional[str], default: None) – IP address for the DPF server.\n\nansys_path (Optional[str], default: None) – Root path for the Ansys installation. For example, C:\\\\Program Files\\\\ANSYS Inc\\\\v232.\nThis parameter is ignored if either the port or IP address is set.\n\nReturn type\n\nAny\n\nReturns\n\nDPF server.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSyz", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSyz.html#strain_limits_esyz", - "title": "Strain_Limits_eSyz", - "section": "Strain_Limits_eSyz", - "text": "Strain_Limits_eSyz" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2c.html#s2c", + "title": "s2c", + "section": "s2c", + "text": "s2c" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSyz", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSyz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSyz", - "title": "Strain_Limits_eSyz > Strain_Limits_eSyz > Strain_Limits_eSyz", - "section": "Strain_Limits_eSyz > Strain_Limits_eSyz", - "text": "MaterialProperty.Strain_Limits_eSyz: str = 'strain_shear_yz'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s2c", + "title": "s2c > s2c > s2c", + "section": "s2c > s2c", + "text": "FailureModeEnum.s2c = 222\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K3", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K3.html#thermal_conductivity_k3", - "title": "Thermal_Conductivity_K3", - "section": "Thermal_Conductivity_K3", - "text": "Thermal_Conductivity_K3" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES.html#shear_angles", + "title": "SHEAR_ANGLES", + "section": "SHEAR_ANGLES", + "text": "SHEAR_ANGLES" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K3", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K3.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K3", - "title": "Thermal_Conductivity_K3 > Thermal_Conductivity_K3 > Thermal_Conductivity_K3", - "section": "Thermal_Conductivity_K3 > Thermal_Conductivity_K3", - "text": "MaterialProperty.Thermal_Conductivity_K3: str = 'thermal_conductivity_z_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES.html#ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES", + "title": "SHEAR_ANGLES > SHEAR_ANGLES > SHEAR_ANGLES", + "section": "SHEAR_ANGLES > SHEAR_ANGLES", + "text": "LayerProperty.SHEAR_ANGLES = 2\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.inverse_reserve_factor", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.inverse_reserve_factor.html#inverse_reserve_factor", - "title": "inverse_reserve_factor", - "section": "inverse_reserve_factor", - "text": "inverse_reserve_factor" + "objectID": "examples/index", + "href": "examples/index.html#examples", + "title": "Examples", + "section": "Examples", + "text": "These examples demonstrate the behavior and usage of PyDPF Composites.\nsphx_glr_examples_gallery_examples_001_failure_operator_example.py\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py\nsphx_glr_examples_gallery_examples_003_short_fiber_example.py\nsphx_glr_examples_gallery_examples_004_get_material_properties_example.py\nsphx_glr_examples_gallery_examples_005_get_layup_properties_example.py\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py\nsphx_glr_examples_gallery_examples_008_assembly_example.py\nsphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py\nsphx_glr_examples_gallery_examples_010_harmonic_example.py\nsphx_glr_examples_gallery_examples_011_rst_workflow.py\nsphx_glr_examples_gallery_examples_012_fatigue_example.py\nsphx_glr_examples_gallery_examples_013_thermal_example.py\nsphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py\nsphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py\nGallery generated by Sphinx-Gallery\nExamples" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.inverse_reserve_factor", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.inverse_reserve_factor.html#ansys.dpf.composites.sampling_point.FailureResult.inverse_reserve_factor", - "title": "inverse_reserve_factor > inverse_reserve_factor > inverse_reserve_factor", - "section": "inverse_reserve_factor > inverse_reserve_factor", - "text": "FailureResult.inverse_reserve_factor: float\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isascii", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isascii.html#isascii", + "title": "isascii", + "section": "isascii", + "text": "Return True if all characters in the string are ASCII, False otherwise.\nASCII characters have code points in the range U+0000-U+007F.\nEmpty string is ASCII too.\nisascii" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isascii", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isascii.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isascii", + "title": "isascii > isascii > isascii", + "section": "isascii > isascii", + "text": "FailureMeasureEnum.isascii(/)\n\nReturn True if all characters in the string are ASCII, False otherwise.\n\nASCII characters have code points in the range U+0000-U+007F.\nEmpty string is ASCII too.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "FaceSheetWrinklingCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.definition", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.definition.html#definition", + "title": "definition", + "section": "definition", + "text": "definition" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxz", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxz.html#stress_limits_sxz", - "title": "Stress_Limits_Sxz", - "section": "Stress_Limits_Sxz", - "text": "Stress_Limits_Sxz" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.definition", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.definition.html#ansys.dpf.composites.data_sources.CompositeDefinitionFiles.definition", + "title": "definition > definition > definition", + "section": "definition > definition", + "text": "CompositeDefinitionFiles.definition: str | PathLike[str]\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxz", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Sxz", - "title": "Stress_Limits_Sxz > Stress_Limits_Sxz > Stress_Limits_Sxz", - "section": "Stress_Limits_Sxz > Stress_Limits_Sxz", - "text": "MaterialProperty.Stress_Limits_Sxz: str = 'stress_shear_xz'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_neg", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_neg.html#puck_constants_p_21_neg", + "title": "Puck_Constants_p_21_neg", + "section": "Puck_Constants_p_21_neg", + "text": "Puck_Constants_p_21_neg" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot.BOTTOM", - "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.BOTTOM.html#bottom", - "title": "BOTTOM", - "section": "BOTTOM", - "text": "BOTTOM" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_neg", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_neg.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_neg", + "title": "Puck_Constants_p_21_neg > Puck_Constants_p_21_neg > Puck_Constants_p_21_neg", + "section": "Puck_Constants_p_21_neg > Puck_Constants_p_21_neg", + "text": "MaterialProperty.Puck_Constants_p_21_neg: str = 'compressive_inclination_xz_puck_constants'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Spot.BOTTOM", - "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.BOTTOM.html#ansys.dpf.composites.constants.Spot.BOTTOM", - "title": "BOTTOM > BOTTOM > BOTTOM", - "section": "BOTTOM > BOTTOM", - "text": "Spot.BOTTOM = 1\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder.html#get_composite_files_from_workbench_result_folder", + "title": "get_composite_files_from_workbench_result_folder", + "section": "get_composite_files_from_workbench_result_folder", + "text": "Get a ContinuousFiberCompositesFiles object from a result folder.\nThis function assumes a typical Workbench folder structure for a composite\nsimulation. If this method is not able to build the ContinuousFiberCompositesFiles\nobject, you can follow these steps:\nIn the main Workbench window, activate the files panel by selecting\nView > Files. This shows the location of all files used in the\nworkbench project. You can determine the different attributes of the\nContinuousFiberCompositesFiles object:\nrst: A list of files containing either the single file.rst\nfile that belongs to the cell ID of the solution, or the distributed\nfile0.rst to fileN.rst files.\nengineering_data: The MatML.xml file in the same folder as the RST file.\ncomposite: There can be multiple composite definitions,\none definition for each ACP system if shell data is transferred\nand one definition for each solid model if solid data is transferred.\nAll the ACPCompositeDefinitions.h5 and ACPSolidModel*.h5\nfiles that are used in the solution must be added to the\nContinuousFiberCompositesFiles.composite dictionary.\nThe key can be chosen freely. Next to the ACPCompositeDefinitions.h5\nand ACPSolidModel\\*.h5 files, corresponding ACPCompositeDefinitions.mapping\nand ACPSolidModel*.mapping files can be found (optional).\nIf they exist, they must be added as well.\nThe following example shows how a\nContinuousFiberCompositesFiles object can be built.\nThe project in this example has two ACP Pre systems, one that exports\nshell information and one that exports solid information.\nThe files are located in these locations:\nResult file:\nproject_root_folder/dp0/SYS/MECH/file.rst\nEngineering data file:\nproject_root_folder/dp0/SYS/MECH/MatML.xml\nComposite definition and mapping files for the solid model:\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\nComposite definition and mapping files for the shell model:\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\nThe code creates the corresponding ContinuousFiberCompositesFiles object:\nresult_folder (Union[str, PathLike[str]]) – Result folder of the solution. Right-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\nensure_composite_definitions_found (bool, default: True) – Whether to check if at least one composite definition (shell or solid) has been found.\nContinuousFiberCompositesFiles\nget_composite_files_from_workbench_result_folder\nContinuousFiberCompositesFiles\nContinuousFiberCompositesFiles\nContinuousFiberCompositesFiles\nrst\nfile.rst\nfile0.rst\nfileN.rst\nengineering_data\nMatML.xml\ncomposite\nACPCompositeDefinitions.h5\nACPSolidModel*.h5\nContinuousFiberCompositesFiles.composite\nACPCompositeDefinitions.h5\nACPSolidModel\\*.h5\nACPCompositeDefinitions.mapping\nACPSolidModel*.mapping\nContinuousFiberCompositesFiles\nproject_root_folder/dp0/SYS/MECH/file.rst\nproject_root_folder/dp0/SYS/MECH/MatML.xml\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\nContinuousFiberCompositesFiles\nUnion\nstr\nPathLike\nstr\nbool\nTrue\nContinuousFiberCompositesFiles" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.index", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.index.html#index", - "title": "index", - "section": "index", - "text": "Return the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\nOptional arguments start and end are interpreted as in slice notation.\nRaises ValueError when the substring is not found.\nindex" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder.html#ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder", + "title": "get_composite_files_from_workbench_result_folder > get_composite_files_from_workbench_result_folder > get_composite_files_from_workbench_result_folder", + "section": "get_composite_files_from_workbench_result_folder > get_composite_files_from_workbench_result_folder", + "text": "ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder(result_folder, ensure_composite_definitions_found=True)\n\nGet a ContinuousFiberCompositesFiles object from a result folder.\n\nThis function assumes a typical Workbench folder structure for a composite\nsimulation. If this method is not able to build the ContinuousFiberCompositesFiles\nobject, you can follow these steps:\n\nIn the main Workbench window, activate the files panel by selecting\nView > Files. This shows the location of all files used in the\nworkbench project. You can determine the different attributes of the\nContinuousFiberCompositesFiles object:\n\nrst: A list of files containing either the single file.rst\nfile that belongs to the cell ID of the solution, or the distributed\nfile0.rst to fileN.rst files.\n\nengineering_data: The MatML.xml file in the same folder as the RST file.\n\ncomposite: There can be multiple composite definitions,\none definition for each ACP system if shell data is transferred\nand one definition for each solid model if solid data is transferred.\nAll the ACPCompositeDefinitions.h5 and ACPSolidModel*.h5\nfiles that are used in the solution must be added to the\nContinuousFiberCompositesFiles.composite dictionary.\nThe key can be chosen freely. Next to the ACPCompositeDefinitions.h5\nand ACPSolidModel\\*.h5 files, corresponding ACPCompositeDefinitions.mapping\nand ACPSolidModel*.mapping files can be found (optional).\nIf they exist, they must be added as well.\n\nThe following example shows how a\nContinuousFiberCompositesFiles object can be built.\nThe project in this example has two ACP Pre systems, one that exports\nshell information and one that exports solid information.\n\nThe files are located in these locations:\n\nResult file:\n\nproject_root_folder/dp0/SYS/MECH/file.rst\n\nEngineering data file:\n\nproject_root_folder/dp0/SYS/MECH/MatML.xml\n\nComposite definition and mapping files for the solid model:\n\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\n\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\n\nComposite definition and mapping files for the shell model:\n\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\n\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\n\nThe code creates the corresponding ContinuousFiberCompositesFiles object:\n\nContinuousFiberCompositesFiles(\n rst=[\"project_root_folder/dp0/SYS/MECH/file.rst\"],\n composite={\n \"solid\": CompositeDefinitionFiles(\n definition=\"project_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\",\n mapping=\"project_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\"\n ),\n \"shell\": CompositeDefinitionFiles(\n definition=\"project_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\",\n mapping=\"project_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\"\n )\n },\n engineering_data=\"project_root_folder/dp0/SYS/MECH/MatML.xml\"\n)\n\nParameters\n\nresult_folder (Union[str, PathLike[str]]) – Result folder of the solution. Right-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\n\nensure_composite_definitions_found (bool, default: True) – Whether to check if at least one composite definition (shell or solid) has been found.\n\nReturn type\n\nContinuousFiberCompositesFiles\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.index", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.index.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.index", - "title": "index > index > index", - "section": "index > index", - "text": "FailureMeasureEnum.index(sub, [start, [end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nOptional arguments start and end are interpreted as in slice notation.\nRaises ValueError when the substring is not found.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmC", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmC.html#pmc", + "title": "pmC", + "section": "pmC", + "text": "pmC" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.wf.html#wf", - "title": "wf", - "section": "wf", - "text": "Weighting factor of the failure mode (wb or wt).\nfloat\nwf\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmC", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmC.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.pmC", + "title": "pmC > pmC > pmC", + "section": "pmC > pmC", + "text": "FailureModeEnum.pmC = 804\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.wf.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.wf", - "title": "wf > wf > wf", - "section": "wf > wf", - "text": "property ShearCrimpingCriterion.wf: float\n\nWeighting factor of the failure mode (wb or wt).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_neg", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_neg.html#p21_neg", + "title": "p21_neg", + "section": "p21_neg", + "text": "Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for compression.\nfloat\np21_neg\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2c.html#s2c", - "title": "s2c", - "section": "s2c", - "text": "s2c" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_neg", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_neg.html#ansys.dpf.composites.failure_criteria.PuckCriterion.p21_neg", + "title": "p21_neg > p21_neg > p21_neg", + "section": "p21_neg > p21_neg", + "text": "property PuckCriterion.p21_neg: float\n\nGlobal inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for compression.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s2c", - "title": "s2c > s2c > s2c", - "section": "s2c > s2c", - "text": "FailureModeEnum.s2c = 222\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.interface_weakening_factor", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.interface_weakening_factor.html#interface_weakening_factor", + "title": "interface_weakening_factor", + "section": "interface_weakening_factor", + "text": "Multiplicator for the interlaminar strength if failure mode pd is active. The default is 0.8.\nfloat\ninterface_weakening_factor\npd\n0.8\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.plies", - "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.plies.html#plies", - "title": "plies", - "section": "plies", - "text": "plies" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.interface_weakening_factor", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.interface_weakening_factor.html#ansys.dpf.composites.failure_criteria.PuckCriterion.interface_weakening_factor", + "title": "interface_weakening_factor > interface_weakening_factor > interface_weakening_factor", + "section": "interface_weakening_factor > interface_weakening_factor", + "text": "property PuckCriterion.interface_weakening_factor: float\n\nMultiplicator for the interlaminar strength if failure mode pd is active. The default is 0.8.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.plies", - "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.plies.html#ansys.dpf.composites.composite_scope.CompositeScope.plies", - "title": "plies > plies > plies", - "section": "plies > plies", - "text": "CompositeScope.plies: Sequence[str] | None = None\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor.html#reserve_factor", + "title": "reserve_factor", + "section": "reserve_factor", + "text": "Lowest reserve factor of each ply.\nThis attribute is equivalent to the safety factor.\nndarray[Any, dtype[float64]]\nreserve_factor\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rfind", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rfind.html#rfind", - "title": "rfind", - "section": "rfind", - "text": "Return the highest index in S where substring sub is found, such that sub is contained within S[start:end].\nOptional arguments start and end are interpreted as in slice notation.\nReturn -1 on failure.\nrfind" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor.html#ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor", + "title": "reserve_factor > reserve_factor > reserve_factor", + "section": "reserve_factor > reserve_factor", + "text": "property SamplingPoint.reserve_factor: ndarray[Any, dtype[float64]]\n\nLowest reserve factor of each ply.\n\nThis attribute is equivalent to the safety factor.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rfind", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rfind.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rfind", - "title": "rfind > rfind > rfind", - "section": "rfind > rfind", - "text": "FailureMeasureEnum.rfind(sub, [start, [end]], /)\n\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nOptional arguments start and end are interpreted as in slice notation.\nReturn -1 on failure.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.html#hoffmancriterion", + "title": "HoffmanCriterion", + "section": "HoffmanCriterion", + "text": "Defines the Hoffman failure criterion for orthotropic reinforced materials.\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\nHoffmanCriterion.to_dict()\n\nHoffmanCriterion.to_json()\n\nHoffmanCriterion.active\nThe failure criterion is suppressed if active is False.\nHoffmanCriterion.dim\nSpecifies which formulation of the failure criterion is used.\nHoffmanCriterion.name\nName of the failure criterion.\nHoffmanCriterion.wf\nWeighting factor of this failure criterion.\nHoffmanCriterion\nfloat\n1.0\nint\n2\nHoffmanCriterion.to_dict\nHoffmanCriterion.to_json\nHoffmanCriterion.active\nHoffmanCriterion.dim\nHoffmanCriterion.name\nHoffmanCriterion.wf" }, { - "objectID": "examples/gallery_examples/002_sampling_point_example", - "href": "examples/gallery_examples/002_sampling_point_example.html#sampling-point", - "title": "Sampling point", - "section": "Sampling point", - "text": "This example extracts ply-wise laminate properties and results.\nThe Sampling Point class is used to extract\nthrough-the-thickness data of the laminate, such as ply-wise properties,\nstrains and stresses. It then implements basic visualization to plot\nthe laminate.\nThis example uses the Composite Model to scope a\nSampling Point to a certain element and to visualize the laminate.\nWhen using a Workbench project,\nuse the get_composite_files_from_workbench_result_folder()\nmethod to obtain the input files.\nSampling point\nSampling Point\nComposite Model\nget_composite_files_from_workbench_result_folder()" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion", + "title": "HoffmanCriterion > HoffmanCriterion > HoffmanCriterion", + "section": "HoffmanCriterion > HoffmanCriterion", + "text": "class ansys.dpf.composites.failure_criteria.HoffmanCriterion(*, active=True, wf=1.0, dim=2)\n\nDefines the Hoffman failure criterion for orthotropic reinforced materials.\n\nParameters\n\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\n\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nHoffmanCriterion.to_dict()\n\n\n\nHoffmanCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nHoffmanCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nHoffmanCriterion.dim\n\nSpecifies which formulation of the failure criterion is used.\n\nHoffmanCriterion.name\n\nName of the failure criterion.\n\nHoffmanCriterion.wf\n\nWeighting factor of this failure criterion.\n\n" }, { - "objectID": "examples/gallery_examples/002_sampling_point_example", - "href": "examples/gallery_examples/002_sampling_point_example.html#set-up-analysis", - "title": "Sampling point > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nConfigure the combined failure criterion\nSet up analysis" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.files_are_local", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.files_are_local.html#files_are_local", + "title": "files_are_local", + "section": "files_are_local", + "text": "files_are_local" }, { - "objectID": "examples/gallery_examples/002_sampling_point_example", - "href": "examples/gallery_examples/002_sampling_point_example.html#set-up-model-and-create-sampling-point", - "title": "Sampling point > Set up model and create sampling point", - "section": "Set up model and create sampling point", - "text": "Set up the composite model.\nCreate a sampling point\nSet up model and create sampling point" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.files_are_local", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.files_are_local.html#ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.files_are_local", + "title": "files_are_local > files_are_local > files_are_local", + "section": "files_are_local > files_are_local", + "text": "ContinuousFiberCompositesFiles.files_are_local: bool = True\n\n" }, { - "objectID": "examples/gallery_examples/002_sampling_point_example", - "href": "examples/gallery_examples/002_sampling_point_example.html#plot-results", - "title": "Sampling point > Plot results", - "section": "Plot results", - "text": "Plot results uing preconfigured plots. For more information, see the\nSamplingPoint.get_result_plots() method.\nPlot polar properties.\nGenerate custom plots. You can customize existing plots or build\nthem from scratch using a package like Matplot or Plotly. This code\nuses Matplotlib to generate a custom plot of results s13 and s23.\nThis code uses Matplotlib to generate a custom plot of results e12 and e2.\nThis code plots the lay-up only.\nPlot results\nSamplingPoint.get_result_plots()\ns13\ns23\ne12\ne2" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vms", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vms.html#wf_vms", + "title": "wf_vms", + "section": "wf_vms", + "text": "Weighting factor of the stress criterion (vms).\nfloat\nwf_vms\nfloat" }, { - "objectID": "examples/gallery_examples/002_sampling_point_example", - "href": "examples/gallery_examples/002_sampling_point_example.html#sample-another-element", - "title": "Sampling point > Sample another element", - "section": "Sample another element", - "text": "You can change the element ID of the sampling point to generate another plot.\nTotal running time of the script: (0 minutes 7.682 seconds)\nDownload Jupyter notebook: 002_sampling_point_example.ipynb\nDownload Python source code: 002_sampling_point_example.py\nDownload zipped: 002_sampling_point_example.zip\nGallery generated by Sphinx-Gallery\nSample another element\nDownload Jupyter notebook: 002_sampling_point_example.ipynb\nDownload Python source code: 002_sampling_point_example.py\nDownload zipped: 002_sampling_point_example.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vms", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vms.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vms", + "title": "wf_vms > wf_vms > wf_vms", + "section": "wf_vms > wf_vms", + "text": "property VonMisesCriterion.wf_vms: float\n\nWeighting factor of the stress criterion (vms).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/select_indices", - "href": "api/select_indices.html#select-elementary-indices", - "title": "Select elementary indices", - "section": "Select elementary indices", - "text": "This module provides functions to filter elementary data.\nA layered element has the following number of elementary data points:\nIn the preceding definition, number_of_spots indicates the number of through-the-thickness\nintegration points per layer. number_of_spots is controlled by keyoption 8, which\nindicates how much output is written. For example, you might write output for only 'bottom'\nand 'top' or for 'bottom', 'top', and 'mid'.\nEach elementary data point can have multiple components. For example, it might have one component\nfor scalar data or six components for symmetrical 3x3 tensors. The elementary data of an element\nis available as a 2D vector with shape (num_elementary_data, number_of_components).\nHere are some examples:\nGet the stress output for a layered shell element (181, four nodes) with five layers and\nkeyoption 8 = 2. Write the output for 'bot', 'top', and 'mid'.\nnumber_of_layers = 5\nnumber_of_spots = 3 (bottom, top, and middle)\nnumber_of_nodes_per_spot_plane = 4 (equal to number of nodes)\nnumber_of_components = 6\nThus, num_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\n= 60.\nGet the stress output for a layered solid element (185, eight nodes) with seven layers and\nkeyoption 8 = 1. Write the output for 'bot' and 'top'.\nnumber_of_layers = 7\nnumber_of_spots = 2 (bottom and top)\nnumber_of_nodes_per_spot_plane = 4\nnumber_of_components = 6\nThus, num_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\n= 56.\nThe functions in this module compute an array of elementary indices for a given selection of\nlayers, nodes, spots, DPF material IDs, or analysis plies. These elementary indices can be used\nto index the first axis of the elementary data array. For usage information, see\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py.\nget_selected_indices(element_info[, layers, ...])\nGet elementary indices based on element information, layers, nodes, and spots.\nget_selected_indices_by_analysis_ply(...)\nGet selected indices by analysis ply.\nget_selected_indices_by_dpf_material_ids(...)\nGet selected indices by DPF material IDs.\nSelect elementary indices\nnumber_of_spots\nnumber_of_spots\nkeyoption 8\n'bottom'\n'top'\n'bottom'\n'top'\n'mid'\n(num_elementary_data, number_of_components)\nkeyoption 8 = 2\n'bot'\n'top'\n'mid'\nnumber_of_layers\nnumber_of_spots\nnumber_of_nodes_per_spot_plane\nnumber_of_components\nnum_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\nkeyoption 8 = 1\n'bot'\n'top'\nnumber_of_layers\nnumber_of_spots\nnumber_of_nodes_per_spot_plane\nnumber_of_components\nnum_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\nget_selected_indices\nget_selected_indices_by_analysis_ply\nget_selected_indices_by_dpf_material_ids" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s13.html#wf_s13", + "title": "wf_s13", + "section": "wf_s13", + "text": "Weighting factor of the failure mode s13.\nfloat\nwf_s13\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmb", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmb.html#cmb", - "title": "cmb", - "section": "cmb", - "text": "Activates the failure evaluation of the matrix due to compression.\nbool\ncmb\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s13.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s13", + "title": "wf_s13 > wf_s13 > wf_s13", + "section": "wf_s13 > wf_s13", + "text": "property MaxStressCriterion.wf_s13: float\n\nWeighting factor of the failure mode s13.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmb", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmb.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmb", - "title": "cmb > cmb > cmb", - "section": "cmb > cmb", - "text": "property CuntzeCriterion.cmb: bool\n\nActivates the failure evaluation of the matrix due to compression.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.AVG", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.AVG.html#avg", + "title": "AVG", + "section": "AVG", + "text": "AVG" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmc.html#lmc", - "title": "lmc", - "section": "lmc", - "text": "Whether to activate the failure evaluation of the matrix due to compression.\nbool\nlmc\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.AVG", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.AVG.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.AVG", + "title": "AVG > AVG > AVG", + "section": "AVG > AVG", + "text": "SpotReductionStrategy.AVG = 'AVG'\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hm", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hm.html#wf_hm", + "title": "wf_hm", + "section": "wf_hm", + "text": "Whether to activate the failure evaluation regarding matrix failure.\nfloat\nwf_hm\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmc.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.lmc", - "title": "lmc > lmc > lmc", - "section": "lmc > lmc", - "text": "property LaRCCriterion.lmc: bool\n\nWhether to activate the failure evaluation of the matrix due to compression.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hm", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hm.html#ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hm", + "title": "wf_hm > wf_hm > wf_hm", + "section": "wf_hm > wf_hm", + "text": "property HashinCriterion.wf_hm: float\n\nWhether to activate the failure evaluation regarding matrix failure.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.encode", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.encode.html#encode", - "title": "encode", - "section": "encode", - "text": "Encode the string using the codec registered for encoding.\nThe encoding in which to encode the string.\nThe error handling scheme to use for encoding errors.\nThe default is ‘strict’ meaning that encoding errors raise a\nUnicodeEncodeError. Other possible values are ‘ignore’, ‘replace’ and\n‘xmlcharrefreplace’ as well as any other name registered with\ncodecs.register_error that can handle UnicodeEncodeErrors.\nencode" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.encode", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.encode.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.encode", - "title": "encode > encode > encode", - "section": "encode > encode", - "text": "FailureMeasureEnum.encode(/, encoding='utf-8', errors='strict')\n\nEncode the string using the codec registered for encoding.\n\nencoding\n\nThe encoding in which to encode the string.\n\nerrors\n\nThe error handling scheme to use for encoding errors.\nThe default is ‘strict’ meaning that encoding errors raise a\nUnicodeEncodeError. Other possible values are ‘ignore’, ‘replace’ and\n‘xmlcharrefreplace’ as well as any other name registered with\ncodecs.register_error that can handle UnicodeEncodeErrors.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property CoreFailureCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxy", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxy.html#strain_limits_esxy", - "title": "Strain_Limits_eSxy", - "section": "Strain_Limits_eSxy", - "text": "Strain_Limits_eSxy" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxy", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxy.html#esxy", + "title": "eSxy", + "section": "eSxy", + "text": "Global strain limit in material direction 12.\nfloat\neSxy\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxy", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxy.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxy", - "title": "Strain_Limits_eSxy > Strain_Limits_eSxy > Strain_Limits_eSxy", - "section": "Strain_Limits_eSxy > Strain_Limits_eSxy", - "text": "MaterialProperty.Strain_Limits_eSxy: str = 'strain_shear_xy'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxy", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxy.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxy", + "title": "eSxy > eSxy > eSxy", + "section": "eSxy > eSxy", + "text": "property MaxStrainCriterion.eSxy: float\n\nGlobal strain limit in material direction 12.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hd.html#hd", - "title": "hd", - "section": "hd", - "text": "hd" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cfc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cfc.html#wf_cfc", + "title": "wf_cfc", + "section": "wf_cfc", + "text": "Weighting factor of fiber failure due to compression (cfc).\nfloat\nwf_cfc\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hd.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.hd", - "title": "hd > hd > hd", - "section": "hd > hd", - "text": "FailureModeEnum.hd = 603\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cfc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cfc.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cfc", + "title": "wf_cfc > wf_cfc > wf_cfc", + "section": "wf_cfc > wf_cfc", + "text": "property CuntzeCriterion.wf_cfc: float\n\nWeighting factor of fiber failure due to compression (cfc).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc.html#eyc", - "title": "eYc", - "section": "eYc", - "text": "Global compressive strain limit in material direction 1.\nfloat\neYc\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s12", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s12.html#s12", + "title": "s12", + "section": "s12", + "text": "Whether to activate the failure evaluation regarding the in-plane shear stress s12.\nbool\ns12\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc", - "title": "eYc > eYc > eYc", - "section": "eYc > eYc", - "text": "property MaxStrainCriterion.eYc: float\n\nGlobal compressive strain limit in material direction 1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s12", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s12.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s12", + "title": "s12 > s12 > s12", + "section": "s12 > s12", + "text": "property MaxStressCriterion.s12: bool\n\nWhether to activate the failure evaluation regarding the in-plane shear stress s12.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Fabric_Fiber_Angle_phi", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Fabric_Fiber_Angle_phi.html#fabric_fiber_angle_phi", - "title": "Fabric_Fiber_Angle_phi", - "section": "Fabric_Fiber_Angle_phi", - "text": "Fabric_Fiber_Angle_phi" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf.html#wf", + "title": "wf", + "section": "wf", + "text": "Weighting factor of the failure mode (cs).\nfloat\nwf\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Fabric_Fiber_Angle_phi", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Fabric_Fiber_Angle_phi.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Fabric_Fiber_Angle_phi", - "title": "Fabric_Fiber_Angle_phi > Fabric_Fiber_Angle_phi > Fabric_Fiber_Angle_phi", - "section": "Fabric_Fiber_Angle_phi > Fabric_Fiber_Angle_phi", - "text": "MaterialProperty.Fabric_Fiber_Angle_phi: str = 'fabric_fiber_angle'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf", + "title": "wf > wf > wf", + "section": "wf > wf", + "text": "property CoreFailureCriterion.wf: float\n\nWeighting factor of the failure mode (cs).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.load_composites_plugin", - "href": "api/_autosummary/ansys.dpf.composites.server_helpers.load_composites_plugin.html#load_composites_plugin", - "title": "load_composites_plugin", - "section": "load_composites_plugin", - "text": "Load composites plugins and its dependencies.\nserver (BaseServer)\nansys_path (Optional[str], default: None) – Ansys root path, for example C:\\Program Files\\ANSYS Inc\\v232.\nIf None, it is assumed that all the plugins and their dependencies\nare found in the PATH/LD_LIBRARY_PATH. If ansys_path\nis set, the composite_operators and\nAns.Dpf.EngineeringData plugins are loaded from their location\nin the installer.\nNone\nload_composites_plugin\nBaseServer\nOptional\nstr\nNone\nNone" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmb", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmb.html#wf_pmb", + "title": "wf_pmb", + "section": "wf_pmb", + "text": "Weighting factor of the matrix failure (pmb) mode.\nfloat\nwf_pmb\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.load_composites_plugin", - "href": "api/_autosummary/ansys.dpf.composites.server_helpers.load_composites_plugin.html#ansys.dpf.composites.server_helpers.load_composites_plugin", - "title": "load_composites_plugin > load_composites_plugin > load_composites_plugin", - "section": "load_composites_plugin > load_composites_plugin", - "text": "ansys.dpf.composites.server_helpers.load_composites_plugin(server, ansys_path=None)\n\nLoad composites plugins and its dependencies.\n\nParameters\n\nserver (BaseServer)\n\nansys_path (Optional[str], default: None) – Ansys root path, for example C:\\Program Files\\ANSYS Inc\\v232.\nIf None, it is assumed that all the plugins and their dependencies\nare found in the PATH/LD_LIBRARY_PATH. If ansys_path\nis set, the composite_operators and\nAns.Dpf.EngineeringData plugins are loaded from their location\nin the installer.\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmb", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmb.html#ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmb", + "title": "wf_pmb > wf_pmb > wf_pmb", + "section": "wf_pmb > wf_pmb", + "text": "property PuckCriterion.wf_pmb: float\n\nWeighting factor of the matrix failure (pmb) mode.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXc.html#exc", + "title": "eXc", + "section": "eXc", + "text": "Global compressive strain limit in material direction 1.\nfloat\neXc\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.active.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property MaxStrainCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXc.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eXc", + "title": "eXc > eXc > eXc", + "section": "eXc > eXc", + "text": "property MaxStrainCriterion.eXc: float\n\nGlobal compressive strain limit in material direction 1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.get_element_info_provider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.get_element_info_provider.html#get_element_info_provider", - "title": "get_element_info_provider", - "section": "get_element_info_provider", - "text": "Get ElementInfoProvider Object.\nmesh (MeshedRegion)\nstream_provider_or_data_source (Operator | DataSources) – dpf stream provider or dpf data source\nmaterial_provider (Optional[Operator], default: None) – DPF operator that provides material information.\nno_bounds_checks (bool, default: False) – Disable bounds checks. Improves\nperformance but can result in cryptic error messages\nElementInfoProvider\nEither a data_source or a stream_provider is required\nget_element_info_provider\nElementInfoProvider\nMeshedRegion\nOperator\nDataSources\nOptional\nOperator\nNone\nbool\nFalse" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s1.html#wf_s1", + "title": "wf_s1", + "section": "wf_s1", + "text": "Weighting factor of the failure mode s1.\nfloat\nwf_s1\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.get_element_info_provider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.get_element_info_provider.html#ansys.dpf.composites.layup_info.get_element_info_provider", - "title": "get_element_info_provider > get_element_info_provider > get_element_info_provider", - "section": "get_element_info_provider > get_element_info_provider", - "text": "ansys.dpf.composites.layup_info.get_element_info_provider(mesh, stream_provider_or_data_source, material_provider=None, no_bounds_checks=False)\n\nGet ElementInfoProvider Object.\n\nParameters\n\nmesh (MeshedRegion)\n\nstream_provider_or_data_source (Operator | DataSources) – dpf stream provider or dpf data source\n\nmaterial_provider (Optional[Operator], default: None) – DPF operator that provides material information.\n\nno_bounds_checks (bool, default: False) – Disable bounds checks. Improves\nperformance but can result in cryptic error messages\n\nReturn type\n\nElementInfoProvider\n\nNotes\n\nEither a data_source or a stream_provider is required\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s1.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s1", + "title": "wf_s1 > wf_s1 > wf_s1", + "section": "wf_s1 > wf_s1", + "text": "property MaxStressCriterion.wf_s1: float\n\nWeighting factor of the failure mode s1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_short_fiber_composite_files_to_server", - "href": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_short_fiber_composite_files_to_server.html#upload_short_fiber_composite_files_to_server", - "title": "upload_short_fiber_composite_files_to_server", - "section": "upload_short_fiber_composite_files_to_server", - "text": "Upload short fiber composites files to server.\ndata_files (ShortFiberCompositesFiles)\nserver (BaseServer)\nShortFiberCompositesFiles\nupload_short_fiber_composite_files_to_server\nShortFiberCompositesFiles\nBaseServer\nShortFiberCompositesFiles" + "objectID": "api/ply_wise_data", + "href": "api/ply_wise_data.html#ply-wise-data", + "title": "Ply wise data", + "section": "Ply wise data", + "text": "SpotReductionStrategy(value[, names, ...])\nProvides the strategy for getting from spot values (BOT, MID, TOP) to a single value.\nget_ply_wise_data(field, ply_name, mesh[, ...])\nGet ply-wise data from a field.\nPly wise data\nSpotReductionStrategy\nget_ply_wise_data" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_short_fiber_composite_files_to_server", - "href": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_short_fiber_composite_files_to_server.html#ansys.dpf.composites.server_helpers.upload_short_fiber_composite_files_to_server", - "title": "upload_short_fiber_composite_files_to_server > upload_short_fiber_composite_files_to_server > upload_short_fiber_composite_files_to_server", - "section": "upload_short_fiber_composite_files_to_server > upload_short_fiber_composite_files_to_server", - "text": "ansys.dpf.composites.server_helpers.upload_short_fiber_composite_files_to_server(data_files, server)\n\nUpload short fiber composites files to server.\n\nParameters\n\ndata_files (ShortFiberCompositesFiles)\n\nserver (BaseServer)\n\nReturn type\n\nShortFiberCompositesFiles\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.evaluate_failure_criteria", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.evaluate_failure_criteria.html#evaluate_failure_criteria", + "title": "evaluate_failure_criteria", + "section": "evaluate_failure_criteria", + "text": "Get a fields container with the evaluated failure criteria.\nThe fields container contains the maximum per element if the measure\nis FailureMeasureEnum.INVERSE_RESERVE_FACTOR and the minimum per element\nif the measure is FailureMeasureEnum.MARGIN_OF_SAFETY or\nFailureMeasureEnum.RESERVE_FACTOR.\ncombined_criterion (CombinedFailureCriterion) – Combined failure criterion to evaluate.\ncomposite_scope (Optional[CompositeScope], default: None) – Composite scope on which to evaluate the failure criteria. If empty, the criteria\nis evaluated on the full model. If the time is not set, the last time or\nfrequency in the result file is used.\nmeasure (FailureMeasureEnum, default: ) – Failure measure to evaluate.\nwrite_data_for_full_element_scope (bool, default: True) – Whether each element in the element scope is to get a\n(potentially zero) failure value, even elements that are not\npart of composite_scope.plies. If no element scope is\nspecified (composite_scope.elements), a (potentially zero)\nfailure value is written for all elements.\nmax_chunk_size (int, default: 50000) – A higher value results in more memory consumption, but faster evaluation.For some special element types such as beams,\nwrite_data_for_full_element_scope=True is not supported.\nA higher value results in more memory consumption, but faster evaluation.\nFor some special element types such as beams,\nwrite_data_for_full_element_scope=True is not supported.\nFieldsContainer\nevaluate_failure_criteria\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\nFailureMeasureEnum.MARGIN_OF_SAFETY\nFailureMeasureEnum.RESERVE_FACTOR\nCombinedFailureCriterion\nOptional\nCompositeScope\nNone\nFailureMeasureEnum\n\nbool\nTrue\ncomposite_scope.plies\ncomposite_scope.elements\nint\n50000\nwrite_data_for_full_element_scope=True\nFieldsContainer" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hm.html#hm", - "title": "hm", - "section": "hm", - "text": "Whether to activate the failure evaluation regarding matrix failure.\nbool\nhm\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.evaluate_failure_criteria", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.evaluate_failure_criteria.html#ansys.dpf.composites.composite_model.CompositeModel.evaluate_failure_criteria", + "title": "evaluate_failure_criteria > evaluate_failure_criteria > evaluate_failure_criteria", + "section": "evaluate_failure_criteria > evaluate_failure_criteria", + "text": "CompositeModel.evaluate_failure_criteria(combined_criterion, composite_scope=None, measure=FailureMeasureEnum.INVERSE_RESERVE_FACTOR, write_data_for_full_element_scope=True, max_chunk_size=50000)\n\nGet a fields container with the evaluated failure criteria.\n\nThe fields container contains the maximum per element if the measure\nis FailureMeasureEnum.INVERSE_RESERVE_FACTOR and the minimum per element\nif the measure is FailureMeasureEnum.MARGIN_OF_SAFETY or\nFailureMeasureEnum.RESERVE_FACTOR.\n\nParameters\n\ncombined_criterion (CombinedFailureCriterion) – Combined failure criterion to evaluate.\n\ncomposite_scope (Optional[CompositeScope], default: None) – Composite scope on which to evaluate the failure criteria. If empty, the criteria\nis evaluated on the full model. If the time is not set, the last time or\nfrequency in the result file is used.\n\nmeasure (FailureMeasureEnum, default: ) – Failure measure to evaluate.\n\nwrite_data_for_full_element_scope (bool, default: True) – Whether each element in the element scope is to get a\n(potentially zero) failure value, even elements that are not\npart of composite_scope.plies. If no element scope is\nspecified (composite_scope.elements), a (potentially zero)\nfailure value is written for all elements.\n\nmax_chunk_size (int, default: 50000) – A higher value results in more memory consumption, but faster evaluation.For some special element types such as beams,\nwrite_data_for_full_element_scope=True is not supported.\n\nReturn type\n\nFieldsContainer\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hm.html#ansys.dpf.composites.failure_criteria.HashinCriterion.hm", - "title": "hm > hm > hm", - "section": "hm > hm", - "text": "property HashinCriterion.hm: bool\n\nWhether to activate the failure evaluation regarding matrix failure.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.html#tsaihillcriterion", + "title": "TsaiHillCriterion", + "section": "TsaiHillCriterion", + "text": "Defines the Tsai-Hill failure criterion for orthotropic reinforced materials.\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\nTsaiHillCriterion.to_dict()\n\nTsaiHillCriterion.to_json()\n\nTsaiHillCriterion.active\nThe failure criterion is suppressed if active is False.\nTsaiHillCriterion.dim\nSpecifies which formulation of the failure criterion is used.\nTsaiHillCriterion.name\nName of the failure criterion.\nTsaiHillCriterion.wf\nWeighting factor of this failure criterion.\nTsaiHillCriterion\nfloat\n1.0\nint\n2\nTsaiHillCriterion.to_dict\nTsaiHillCriterion.to_json\nTsaiHillCriterion.active\nTsaiHillCriterion.dim\nTsaiHillCriterion.name\nTsaiHillCriterion.wf" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R23", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R23.html#hill_yield_criterion_r23", - "title": "Hill_Yield_Criterion_R23", - "section": "Hill_Yield_Criterion_R23", - "text": "Hill_Yield_Criterion_R23" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion", + "title": "TsaiHillCriterion > TsaiHillCriterion > TsaiHillCriterion", + "section": "TsaiHillCriterion > TsaiHillCriterion", + "text": "class ansys.dpf.composites.failure_criteria.TsaiHillCriterion(*, active=True, wf=1.0, dim=2)\n\nDefines the Tsai-Hill failure criterion for orthotropic reinforced materials.\n\nParameters\n\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\n\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nTsaiHillCriterion.to_dict()\n\n\n\nTsaiHillCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nTsaiHillCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nTsaiHillCriterion.dim\n\nSpecifies which formulation of the failure criterion is used.\n\nTsaiHillCriterion.name\n\nName of the failure criterion.\n\nTsaiHillCriterion.wf\n\nWeighting factor of this failure criterion.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R23", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R23.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R23", - "title": "Hill_Yield_Criterion_R23 > Hill_Yield_Criterion_R23 > Hill_Yield_Criterion_R23", - "section": "Hill_Yield_Criterion_R23 > Hill_Yield_Criterion_R23", - "text": "MaterialProperty.Hill_Yield_Criterion_R23: str = 'yield_stress_ratio_yz_hill_criterion'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.composite", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.composite.html#composite", + "title": "composite", + "section": "composite", + "text": "composite" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.html#failuremeasureenum", - "title": "FailureMeasureEnum", - "section": "FailureMeasureEnum", - "text": "Provides available failure measures.\nFailureMeasureEnum.encode(/[, encoding, errors])\nEncode the string using the codec registered for encoding.\nFailureMeasureEnum.replace(old, new, /[, count])\nReturn a copy with all occurrences of substring old replaced by new.\nFailureMeasureEnum.split(/[, sep, maxsplit])\nReturn a list of the substrings in the string, using sep as the separator string.\nFailureMeasureEnum.rsplit(/[, sep, maxsplit])\nReturn a list of the substrings in the string, using sep as the separator string.\nFailureMeasureEnum.join(iterable, /)\nConcatenate any number of strings.\nFailureMeasureEnum.capitalize(/)\nReturn a capitalized version of the string.\nFailureMeasureEnum.casefold(/)\nReturn a version of the string suitable for caseless comparisons.\nFailureMeasureEnum.title(/)\nReturn a version of the string where each word is titlecased.\nFailureMeasureEnum.center(width[, fillchar])\nReturn a centered string of length width.\nFailureMeasureEnum.count(sub[, start[, end]], /)\nReturn the number of non-overlapping occurrences of substring sub in string S[start:end].\nFailureMeasureEnum.expandtabs(/[, tabsize])\nReturn a copy where all tab characters are expanded using spaces.\nFailureMeasureEnum.find(sub[, start[, end]], /)\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.partition(sep, /)\nPartition the string into three parts using the given separator.\nFailureMeasureEnum.index(sub[, start[, end]], /)\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.ljust(width[, fillchar])\nReturn a left-justified string of length width.\nFailureMeasureEnum.lower(/)\nReturn a copy of the string converted to lowercase.\nFailureMeasureEnum.lstrip([chars])\nReturn a copy of the string with leading whitespace removed.\nFailureMeasureEnum.rfind(sub[, start[, end]], /)\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.rindex(sub[, start[, end]], /)\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.rjust(width[, fillchar])\nReturn a right-justified string of length width.\nFailureMeasureEnum.rstrip([chars])\nReturn a copy of the string with trailing whitespace removed.\nFailureMeasureEnum.rpartition(sep, /)\nPartition the string into three parts using the given separator.\nFailureMeasureEnum.splitlines(/[, keepends])\nReturn a list of the lines in the string, breaking at line boundaries.\nFailureMeasureEnum.strip([chars])\nReturn a copy of the string with leading and trailing whitespace removed.\nFailureMeasureEnum.swapcase(/)\nConvert uppercase characters to lowercase and lowercase characters to uppercase.\nFailureMeasureEnum.translate(table, /)\nReplace each character in the string using the given translation table.\nFailureMeasureEnum.upper(/)\nReturn a copy of the string converted to uppercase.\nFailureMeasureEnum.startswith(prefix[, ...)\nReturn True if the string starts with the specified prefix, False otherwise.\nFailureMeasureEnum.endswith(suffix[, start[, ...)\nReturn True if the string ends with the specified suffix, False otherwise.\nFailureMeasureEnum.removeprefix(prefix, /)\nReturn a str with the given prefix string removed if present.\nFailureMeasureEnum.removesuffix(suffix, /)\nReturn a str with the given suffix string removed if present.\nFailureMeasureEnum.isascii(/)\nReturn True if all characters in the string are ASCII, False otherwise.\nFailureMeasureEnum.islower(/)\nReturn True if the string is a lowercase string, False otherwise.\nFailureMeasureEnum.isupper(/)\nReturn True if the string is an uppercase string, False otherwise.\nFailureMeasureEnum.istitle(/)\nReturn True if the string is a title-cased string, False otherwise.\nFailureMeasureEnum.isspace(/)\nReturn True if the string is a whitespace string, False otherwise.\nFailureMeasureEnum.isdecimal(/)\nReturn True if the string is a decimal string, False otherwise.\nFailureMeasureEnum.isdigit(/)\nReturn True if the string is a digit string, False otherwise.\nFailureMeasureEnum.isnumeric(/)\nReturn True if the string is a numeric string, False otherwise.\nFailureMeasureEnum.isalpha(/)\nReturn True if the string is an alphabetic string, False otherwise.\nFailureMeasureEnum.isalnum(/)\nReturn True if the string is an alpha-numeric string, False otherwise.\nFailureMeasureEnum.isidentifier(/)\nReturn True if the string is a valid Python identifier, False otherwise.\nFailureMeasureEnum.isprintable(/)\nReturn True if the string is printable, False otherwise.\nFailureMeasureEnum.zfill(width, /)\nPad a numeric string with zeros on the left, to fill a field of the given width.\nFailureMeasureEnum.format(*args, **kwargs)\nReturn a formatted version of the string, using substitutions from args and kwargs.\nFailureMeasureEnum.format_map(mapping, /)\nReturn a formatted version of the string, using substitutions from mapping.\nFailureMeasureEnum.maketrans(x[, y, z])\nReturn a translation table usable for str.translate().\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\n\nFailureMeasureEnum.MARGIN_OF_SAFETY\n\nFailureMeasureEnum.RESERVE_FACTOR\n\nFailureMeasureEnum\nFailureMeasureEnum.encode\nFailureMeasureEnum.replace\nFailureMeasureEnum.split\nFailureMeasureEnum.rsplit\nFailureMeasureEnum.join\nFailureMeasureEnum.capitalize\nFailureMeasureEnum.casefold\nFailureMeasureEnum.title\nFailureMeasureEnum.center\nFailureMeasureEnum.count\nFailureMeasureEnum.expandtabs\nFailureMeasureEnum.find\nFailureMeasureEnum.partition\nFailureMeasureEnum.index\nFailureMeasureEnum.ljust\nFailureMeasureEnum.lower\nFailureMeasureEnum.lstrip\nFailureMeasureEnum.rfind\nFailureMeasureEnum.rindex\nFailureMeasureEnum.rjust\nFailureMeasureEnum.rstrip\nFailureMeasureEnum.rpartition\nFailureMeasureEnum.splitlines\nFailureMeasureEnum.strip\nFailureMeasureEnum.swapcase\nFailureMeasureEnum.translate\nFailureMeasureEnum.upper\nFailureMeasureEnum.startswith\nFailureMeasureEnum.endswith\nFailureMeasureEnum.removeprefix\nFailureMeasureEnum.removesuffix\nFailureMeasureEnum.isascii\nFailureMeasureEnum.islower\nFailureMeasureEnum.isupper\nFailureMeasureEnum.istitle\nFailureMeasureEnum.isspace\nFailureMeasureEnum.isdecimal\nFailureMeasureEnum.isdigit\nFailureMeasureEnum.isnumeric\nFailureMeasureEnum.isalpha\nFailureMeasureEnum.isalnum\nFailureMeasureEnum.isidentifier\nFailureMeasureEnum.isprintable\nFailureMeasureEnum.zfill\nFailureMeasureEnum.format\nFailureMeasureEnum.format_map\nFailureMeasureEnum.maketrans\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\nFailureMeasureEnum.MARGIN_OF_SAFETY\nFailureMeasureEnum.RESERVE_FACTOR" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.composite", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.composite.html#ansys.dpf.composites.data_sources.CompositeDataSources.composite", + "title": "composite > composite > composite", + "section": "composite > composite", + "text": "CompositeDataSources.composite: DataSources | None\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.html#ansys.dpf.composites.result_definition.FailureMeasureEnum", - "title": "FailureMeasureEnum > FailureMeasureEnum > FailureMeasureEnum", - "section": "FailureMeasureEnum > FailureMeasureEnum", - "text": "class ansys.dpf.composites.result_definition.FailureMeasureEnum(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides available failure measures.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nFailureMeasureEnum.encode(/[, encoding, errors])\n\nEncode the string using the codec registered for encoding.\n\nFailureMeasureEnum.replace(old, new, /[, count])\n\nReturn a copy with all occurrences of substring old replaced by new.\n\nFailureMeasureEnum.split(/[, sep, maxsplit])\n\nReturn a list of the substrings in the string, using sep as the separator string.\n\nFailureMeasureEnum.rsplit(/[, sep, maxsplit])\n\nReturn a list of the substrings in the string, using sep as the separator string.\n\nFailureMeasureEnum.join(iterable, /)\n\nConcatenate any number of strings.\n\nFailureMeasureEnum.capitalize(/)\n\nReturn a capitalized version of the string.\n\nFailureMeasureEnum.casefold(/)\n\nReturn a version of the string suitable for caseless comparisons.\n\nFailureMeasureEnum.title(/)\n\nReturn a version of the string where each word is titlecased.\n\nFailureMeasureEnum.center(width[, fillchar])\n\nReturn a centered string of length width.\n\nFailureMeasureEnum.count(sub[, start[, end]], /)\n\nReturn the number of non-overlapping occurrences of substring sub in string S[start:end].\n\nFailureMeasureEnum.expandtabs(/[, tabsize])\n\nReturn a copy where all tab characters are expanded using spaces.\n\nFailureMeasureEnum.find(sub[, start[, end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.partition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nFailureMeasureEnum.index(sub[, start[, end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.ljust(width[, fillchar])\n\nReturn a left-justified string of length width.\n\nFailureMeasureEnum.lower(/)\n\nReturn a copy of the string converted to lowercase.\n\nFailureMeasureEnum.lstrip([chars])\n\nReturn a copy of the string with leading whitespace removed.\n\nFailureMeasureEnum.rfind(sub[, start[, end]], /)\n\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.rindex(sub[, start[, end]], /)\n\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.rjust(width[, fillchar])\n\nReturn a right-justified string of length width.\n\nFailureMeasureEnum.rstrip([chars])\n\nReturn a copy of the string with trailing whitespace removed.\n\nFailureMeasureEnum.rpartition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nFailureMeasureEnum.splitlines(/[, keepends])\n\nReturn a list of the lines in the string, breaking at line boundaries.\n\nFailureMeasureEnum.strip([chars])\n\nReturn a copy of the string with leading and trailing whitespace removed.\n\nFailureMeasureEnum.swapcase(/)\n\nConvert uppercase characters to lowercase and lowercase characters to uppercase.\n\nFailureMeasureEnum.translate(table, /)\n\nReplace each character in the string using the given translation table.\n\nFailureMeasureEnum.upper(/)\n\nReturn a copy of the string converted to uppercase.\n\nFailureMeasureEnum.startswith(prefix[, ...)\n\nReturn True if the string starts with the specified prefix, False otherwise.\n\nFailureMeasureEnum.endswith(suffix[, start[, ...)\n\nReturn True if the string ends with the specified suffix, False otherwise.\n\nFailureMeasureEnum.removeprefix(prefix, /)\n\nReturn a str with the given prefix string removed if present.\n\nFailureMeasureEnum.removesuffix(suffix, /)\n\nReturn a str with the given suffix string removed if present.\n\nFailureMeasureEnum.isascii(/)\n\nReturn True if all characters in the string are ASCII, False otherwise.\n\nFailureMeasureEnum.islower(/)\n\nReturn True if the string is a lowercase string, False otherwise.\n\nFailureMeasureEnum.isupper(/)\n\nReturn True if the string is an uppercase string, False otherwise.\n\nFailureMeasureEnum.istitle(/)\n\nReturn True if the string is a title-cased string, False otherwise.\n\nFailureMeasureEnum.isspace(/)\n\nReturn True if the string is a whitespace string, False otherwise.\n\nFailureMeasureEnum.isdecimal(/)\n\nReturn True if the string is a decimal string, False otherwise.\n\nFailureMeasureEnum.isdigit(/)\n\nReturn True if the string is a digit string, False otherwise.\n\nFailureMeasureEnum.isnumeric(/)\n\nReturn True if the string is a numeric string, False otherwise.\n\nFailureMeasureEnum.isalpha(/)\n\nReturn True if the string is an alphabetic string, False otherwise.\n\nFailureMeasureEnum.isalnum(/)\n\nReturn True if the string is an alpha-numeric string, False otherwise.\n\nFailureMeasureEnum.isidentifier(/)\n\nReturn True if the string is a valid Python identifier, False otherwise.\n\nFailureMeasureEnum.isprintable(/)\n\nReturn True if the string is printable, False otherwise.\n\nFailureMeasureEnum.zfill(width, /)\n\nPad a numeric string with zeros on the left, to fill a field of the given width.\n\nFailureMeasureEnum.format(*args, **kwargs)\n\nReturn a formatted version of the string, using substitutions from args and kwargs.\n\nFailureMeasureEnum.format_map(mapping, /)\n\nReturn a formatted version of the string, using substitutions from mapping.\n\nFailureMeasureEnum.maketrans(x[, y, z])\n\nReturn a translation table usable for str.translate().\n\n\n\nAttributes\n\n\n\n\n\n\n\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\n\n\n\nFailureMeasureEnum.MARGIN_OF_SAFETY\n\n\n\nFailureMeasureEnum.RESERVE_FACTOR\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.ljust", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.ljust.html#ljust", + "title": "ljust", + "section": "ljust", + "text": "Return a left-justified string of length width.\nPadding is done using the specified fill character (default is a space).\nljust" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.ljust", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.ljust.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.ljust", + "title": "ljust > ljust > ljust", + "section": "ljust > ljust", + "text": "FailureMeasureEnum.ljust(width, fillchar=' ', /)\n\nReturn a left-justified string of length width.\n\nPadding is done using the specified fill character (default is a space).\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.join", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.join.html#join", - "title": "join", - "section": "join", - "text": "Concatenate any number of strings.\nThe string whose method is called is inserted in between each given string.\nThe result is returned as a new string.\nExample: ‘.’.join([‘ab’, ‘pq’, ‘rs’]) -> ‘ab.pq.rs’\njoin" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.wf.html#wf", + "title": "wf", + "section": "wf", + "text": "Weighting factor of the failure mode (wb or wt).\nfloat\nwf\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.join", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.join.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.join", - "title": "join > join > join", - "section": "join > join", - "text": "FailureMeasureEnum.join(iterable, /)\n\nConcatenate any number of strings.\n\nThe string whose method is called is inserted in between each given string.\nThe result is returned as a new string.\n\nExample: ‘.’.join([‘ab’, ‘pq’, ‘rs’]) -> ‘ab.pq.rs’\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.wf.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.wf", + "title": "wf > wf > wf", + "section": "wf > wf", + "text": "property ShearCrimpingCriterion.wf: float\n\nWeighting factor of the failure mode (wb or wt).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor.html#inverse_reserve_factor", - "title": "inverse_reserve_factor", - "section": "inverse_reserve_factor", - "text": "Critical inverse reserve factor of each ply.\nndarray[Any, dtype[float64]]\ninverse_reserve_factor\nndarray\nAny\ndtype\nfloat64" + "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", + "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#dpf-composite-failure-workflow", + "title": "DPF composite failure workflow", + "section": "DPF composite failure workflow", + "text": "This example shows how to use the native DPF Python interface to configure\nand run the composite failure evaluator. It connects the different DPF\noperators that are needed to evaluate composite failure criteria.\nFor simple use cases, using the composite failure operator or\ncomposite sampling point operator is preferable. For examples,\nsee sphx_glr_examples_gallery_examples_001_failure_operator_example.py\nand sphx_glr_examples_gallery_examples_002_sampling_point_example.py.\nAdditionally, sphx_glr_examples_gallery_examples_006_filter_composite_data_example.py\nshows how helper functions can be used to obtain composite result data.\nDPF composite failure workflow" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor.html#ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor", - "title": "inverse_reserve_factor > inverse_reserve_factor > inverse_reserve_factor", - "section": "inverse_reserve_factor > inverse_reserve_factor", - "text": "property SamplingPoint.inverse_reserve_factor: ndarray[Any, dtype[float64]]\n\nCritical inverse reserve factor of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", + "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#set-up-analysis", + "title": "DPF composite failure workflow > Set up analysis", + "section": "Set up analysis", + "text": "Setting up the analysis consists of loading Ansys libraries, configuring\nthe combined failure criterion, connecting to the DPF server, and\npreparing files.\nLoad Ansys libraries.\nConfigure the combined failure criterion.\nStart a DPF server and prepare files\nSet up analysis" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.measure", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.measure.html#measure", - "title": "measure", - "section": "measure", - "text": "Return type of the failure values.\nSupported types are \"inverse_reserve_factor\", \"safety_factor\",\nand \"safety_margin\".\nstr\nmeasure\n\"inverse_reserve_factor\"\n\"safety_factor\"\n\"safety_margin\"\nstr" + "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", + "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#initialize-dpf-model-and-data-sources", + "title": "DPF composite failure workflow > Initialize DPF model and data sources", + "section": "Initialize DPF model and data sources", + "text": "Initialize the DPF model and the data sources.\nInitialize DPF model and data sources" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.measure", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.measure.html#ansys.dpf.composites.result_definition.ResultDefinition.measure", - "title": "measure > measure > measure", - "section": "measure > measure", - "text": "property ResultDefinition.measure: str\n\nReturn type of the failure values.\n\nSupported types are \"inverse_reserve_factor\", \"safety_factor\",\nand \"safety_margin\".\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", + "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#set-up-providers", + "title": "DPF composite failure workflow > Set up providers", + "section": "Set up providers", + "text": "Set up the mesh provider.\nSet up the material support provider.\nThe material support provider takes care of mapping the materials in the RST file to\nthe materials in the composite definitions.\nThe material support contains all materials from the RST file.\nSet up the result information provider, which gets\nthe unit system from the RST file.\nSet up the material provider\nThe material provider combines the material support in the engineering data\nXML file and the unit system. Its output can be used to evaluate material\nproperties.\nSet up the lay-up provider, which reads the composite definition file\nand enriches the mesh with the composite lay-up information.\nSet up providers" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.definition", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.definition.html#definition", - "title": "definition", - "section": "definition", - "text": "definition" + "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", + "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#set-up-result-operators", + "title": "DPF composite failure workflow > Set up result operators", + "section": "Set up result operators", + "text": "Set up result operators for strains and stresses.\nrotate_to_global is False because the postprocessing engine expects the\nresults to be in the element coordinate system (material coordinate system).\nSet up result operators\nrotate_to_global\nFalse" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.definition", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.definition.html#ansys.dpf.composites.data_sources.CompositeDefinitionFiles.definition", - "title": "definition > definition > definition", - "section": "definition > definition", - "text": "CompositeDefinitionFiles.definition: str | PathLike[str]\n\n" + "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", + "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#set-up-failure-evaluator", + "title": "DPF composite failure workflow > Set up failure evaluator", + "section": "Set up failure evaluator", + "text": "Set up the failure evaluator, which combines the results and\nevaluates all failure criteria. The output contains the\nmaximum failure criteria for each integration point.\nSet up failure evaluator" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT.html#max_local_layer_in_element", - "title": "MAX_LOCAL_LAYER_IN_ELEMENT", - "section": "MAX_LOCAL_LAYER_IN_ELEMENT", - "text": "MAX_LOCAL_LAYER_IN_ELEMENT" + "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", + "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#compute-and-plot-failure-criteria", + "title": "DPF composite failure workflow > Compute and plot failure criteria", + "section": "Compute and plot failure criteria", + "text": "Use the output of the multiple failure criteria operator to\ncompute the minimum and maximum failure criteria for each element.\nPlot the maximum and minimum values.\nTotal running time of the script: (0 minutes 4.888 seconds)\nDownload Jupyter notebook: 099_dpf_composite_failure_workflow.ipynb\nDownload Python source code: 099_dpf_composite_failure_workflow.py\nDownload zipped: 099_dpf_composite_failure_workflow.zip\nGallery generated by Sphinx-Gallery\nCompute and plot failure criteria\nDownload Jupyter notebook: 099_dpf_composite_failure_workflow.ipynb\nDownload Python source code: 099_dpf_composite_failure_workflow.py\nDownload zipped: 099_dpf_composite_failure_workflow.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT.html#ansys.dpf.composites.constants.FailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT", - "title": "MAX_LOCAL_LAYER_IN_ELEMENT > MAX_LOCAL_LAYER_IN_ELEMENT > MAX_LOCAL_LAYER_IN_ELEMENT", - "section": "MAX_LOCAL_LAYER_IN_ELEMENT > MAX_LOCAL_LAYER_IN_ELEMENT", - "text": "FailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT = 6\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1.html#s1", + "title": "s1", + "section": "s1", + "text": "s1" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R12", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R12.html#hill_yield_criterion_r12", - "title": "Hill_Yield_Criterion_R12", - "section": "Hill_Yield_Criterion_R12", - "text": "Hill_Yield_Criterion_R12" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s1", + "title": "s1 > s1 > s1", + "section": "s1 > s1", + "text": "FailureModeEnum.s1 = 210\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R12", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R12.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R12", - "title": "Hill_Yield_Criterion_R12 > Hill_Yield_Criterion_R12 > Hill_Yield_Criterion_R12", - "section": "Hill_Yield_Criterion_R12 > Hill_Yield_Criterion_R12", - "text": "MaterialProperty.Hill_Yield_Criterion_R12: str = 'yield_stress_ratio_xy_hill_criterion'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.active.html#active", + "title": "active", + "section": "active", + "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rindex", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rindex.html#rindex", - "title": "rindex", - "section": "rindex", - "text": "Return the highest index in S where substring sub is found, such that sub is contained within S[start:end].\nOptional arguments start and end are interpreted as in slice notation.\nRaises ValueError when the substring is not found.\nrindex" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.active.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property LaRCCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rindex", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rindex.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rindex", - "title": "rindex > rindex > rindex", - "section": "rindex > rindex", - "text": "FailureMeasureEnum.rindex(sub, [start, [end]], /)\n\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nOptional arguments start and end are interpreted as in slice notation.\nRaises ValueError when the substring is not found.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.mode_interaction_coeff", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.mode_interaction_coeff.html#mode_interaction_coeff", + "title": "mode_interaction_coeff", + "section": "mode_interaction_coeff", + "text": "Mode interaction coefficient. The default is 2.6.\nfloat\nmode_interaction_coeff\n2.6\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.html#maxstraincriterion", - "title": "MaxStrainCriterion", - "section": "MaxStrainCriterion", - "text": "Defines the maximum strain failure criterion for orthotropic reinforced materials.\ne1 (bool, default: True) – Activates the failure evaluation regarding the strain in the material 1 direction.\ne2 (bool, default: True) – Activates the failure evaluation regarding the strain in the material 2 direction.\ne3 (bool, default: False) – Activates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\ne12 (bool, default: True) – Whether to activate the failure evaluation regarding the in-plane shear strain e12.\ne13 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear strain e13.\ne23 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear strain e23.\nwf_e1 (float, default: 1.0) – Weighting factor of the failure mode e1.\nwf_e2 (float, default: 1.0) – Weighting factor of the failure mode e2.\nwf_e3 (float, default: 1.0) – Weighting factor of the failure mode e3.\nwf_e12 (float, default: 1.0) – Weighting factor of the failure mode e12.\nwf_e13 (float, default: 1.0) – Weighting factor of the failure mode e13.\nwf_e23 (float, default: 1.0) – Weighting factor of the failure mode e23.\neXt (float, default: 0.0) – Global tensile strain limit in material direction 1.\neXc (float, default: 0.0) – Global compressive strain limit in material direction 1.\neYt (float, default: 0.0) – Global tensile strain limit in material direction 2.\neYc (float, default: 0.0) – Global compressive strain limit in material direction 2.\neZt (float, default: 0.0) – Global strain limit in material direction 3.\neZc (float, default: 0.0) – Global compressive strain limit in material direction 3.\neSxy (float, default: 0.0) – Global strain limit in material direction 12.\neSxz (float, default: 0.0) – Global strain limit in material direction 13.\neSyz (float, default: 0.0) – Global strain limit in material direction 23.\nMaxStrainCriterion.to_dict()\n\nMaxStrainCriterion.to_json()\n\nMaxStrainCriterion.active\nThe failure criterion is suppressed if active is False.\nMaxStrainCriterion.e1\nActivates the failure evaluation regarding the strain in the material 1 direction.\nMaxStrainCriterion.e12\nWhether to activate the failure evaluation regarding the in-plane shear strain e12.\nMaxStrainCriterion.e13\nWhether to activate the failure evaluation regarding the interlaminar shear strain e13.\nMaxStrainCriterion.e2\nActivates the failure evaluation regarding the strain in the material 2 direction.\nMaxStrainCriterion.e23\nWhether to activate the failure evaluation regarding the interlaminar shear strain e23.\nMaxStrainCriterion.e3\nActivates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\nMaxStrainCriterion.eSxy\nGlobal strain limit in material direction 12.\nMaxStrainCriterion.eSxz\nGlobal strain limit in material direction 13.\nMaxStrainCriterion.eSyz\nGlobal strain limit in material direction 23.\nMaxStrainCriterion.eXc\nGlobal compressive strain limit in material direction 1.\nMaxStrainCriterion.eXt\nGlobal tensile strain limit in material direction 1.\nMaxStrainCriterion.eYc\nGlobal compressive strain limit in material direction 1.\nMaxStrainCriterion.eYt\nGlobal tensile strain limit in material direction 2.\nMaxStrainCriterion.eZc\nGlobal compressive strain limit in material direction 3.\nMaxStrainCriterion.eZt\nGlobal strain limit in material direction 3.\nMaxStrainCriterion.force_global_strain_limits\nWhether to use one set of global strain limits instead of the strain limits of the materials.\nMaxStrainCriterion.name\nName of the failure criterion.\nMaxStrainCriterion.wf_e1\nWeighting factor of the failure mode e1.\nMaxStrainCriterion.wf_e12\nWeighting factor of the failure mode e12.\nMaxStrainCriterion.wf_e13\nWeighting factor of the failure mode e13.\nMaxStrainCriterion.wf_e2\nWeighting factor of the failure mode e2.\nMaxStrainCriterion.wf_e23\nWeighting factor of the failure mode e23.\nMaxStrainCriterion.wf_e3\nWeighting factor of the failure mode e3.\nMaxStrainCriterion\nbool\nTrue\nbool\nTrue\nbool\nFalse\nbool\nTrue\nbool\nFalse\nbool\nFalse\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nfloat\n0.0\nMaxStrainCriterion.to_dict\nMaxStrainCriterion.to_json\nMaxStrainCriterion.active\nMaxStrainCriterion.e1\nMaxStrainCriterion.e12\nMaxStrainCriterion.e13\nMaxStrainCriterion.e2\nMaxStrainCriterion.e23\nMaxStrainCriterion.e3\nMaxStrainCriterion.eSxy\nMaxStrainCriterion.eSxz\nMaxStrainCriterion.eSyz\nMaxStrainCriterion.eXc\nMaxStrainCriterion.eXt\nMaxStrainCriterion.eYc\nMaxStrainCriterion.eYt\nMaxStrainCriterion.eZc\nMaxStrainCriterion.eZt\nMaxStrainCriterion.force_global_strain_limits\nMaxStrainCriterion.name\nMaxStrainCriterion.wf_e1\nMaxStrainCriterion.wf_e12\nMaxStrainCriterion.wf_e13\nMaxStrainCriterion.wf_e2\nMaxStrainCriterion.wf_e23\nMaxStrainCriterion.wf_e3" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.mode_interaction_coeff", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.mode_interaction_coeff.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.mode_interaction_coeff", + "title": "mode_interaction_coeff > mode_interaction_coeff > mode_interaction_coeff", + "section": "mode_interaction_coeff > mode_interaction_coeff", + "text": "property CuntzeCriterion.mode_interaction_coeff: float\n\nMode interaction coefficient. The default is 2.6.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion", - "title": "MaxStrainCriterion > MaxStrainCriterion > MaxStrainCriterion", - "section": "MaxStrainCriterion > MaxStrainCriterion", - "text": "class ansys.dpf.composites.failure_criteria.MaxStrainCriterion(*, e1=True, e2=True, e3=False, e12=True, e13=False, e23=False, wf_e1=1.0, wf_e2=1.0, wf_e3=1.0, wf_e12=1.0, wf_e13=1.0, wf_e23=1.0, force_global_strain_limits=False, eXt=0.0, eXc=0.0, eYt=0.0, eYc=0.0, eZt=0.0, eZc=0.0, eSxy=0.0, eSxz=0.0, eSyz=0.0)\n\nDefines the maximum strain failure criterion for orthotropic reinforced materials.\n\nParameters\n\ne1 (bool, default: True) – Activates the failure evaluation regarding the strain in the material 1 direction.\n\ne2 (bool, default: True) – Activates the failure evaluation regarding the strain in the material 2 direction.\n\ne3 (bool, default: False) – Activates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\n\ne12 (bool, default: True) – Whether to activate the failure evaluation regarding the in-plane shear strain e12.\n\ne13 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear strain e13.\n\ne23 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear strain e23.\n\nwf_e1 (float, default: 1.0) – Weighting factor of the failure mode e1.\n\nwf_e2 (float, default: 1.0) – Weighting factor of the failure mode e2.\n\nwf_e3 (float, default: 1.0) – Weighting factor of the failure mode e3.\n\nwf_e12 (float, default: 1.0) – Weighting factor of the failure mode e12.\n\nwf_e13 (float, default: 1.0) – Weighting factor of the failure mode e13.\n\nwf_e23 (float, default: 1.0) – Weighting factor of the failure mode e23.\n\neXt (float, default: 0.0) – Global tensile strain limit in material direction 1.\n\neXc (float, default: 0.0) – Global compressive strain limit in material direction 1.\n\neYt (float, default: 0.0) – Global tensile strain limit in material direction 2.\n\neYc (float, default: 0.0) – Global compressive strain limit in material direction 2.\n\neZt (float, default: 0.0) – Global strain limit in material direction 3.\n\neZc (float, default: 0.0) – Global compressive strain limit in material direction 3.\n\neSxy (float, default: 0.0) – Global strain limit in material direction 12.\n\neSxz (float, default: 0.0) – Global strain limit in material direction 13.\n\neSyz (float, default: 0.0) – Global strain limit in material direction 23.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nMaxStrainCriterion.to_dict()\n\n\n\nMaxStrainCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nMaxStrainCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nMaxStrainCriterion.e1\n\nActivates the failure evaluation regarding the strain in the material 1 direction.\n\nMaxStrainCriterion.e12\n\nWhether to activate the failure evaluation regarding the in-plane shear strain e12.\n\nMaxStrainCriterion.e13\n\nWhether to activate the failure evaluation regarding the interlaminar shear strain e13.\n\nMaxStrainCriterion.e2\n\nActivates the failure evaluation regarding the strain in the material 2 direction.\n\nMaxStrainCriterion.e23\n\nWhether to activate the failure evaluation regarding the interlaminar shear strain e23.\n\nMaxStrainCriterion.e3\n\nActivates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\n\nMaxStrainCriterion.eSxy\n\nGlobal strain limit in material direction 12.\n\nMaxStrainCriterion.eSxz\n\nGlobal strain limit in material direction 13.\n\nMaxStrainCriterion.eSyz\n\nGlobal strain limit in material direction 23.\n\nMaxStrainCriterion.eXc\n\nGlobal compressive strain limit in material direction 1.\n\nMaxStrainCriterion.eXt\n\nGlobal tensile strain limit in material direction 1.\n\nMaxStrainCriterion.eYc\n\nGlobal compressive strain limit in material direction 1.\n\nMaxStrainCriterion.eYt\n\nGlobal tensile strain limit in material direction 2.\n\nMaxStrainCriterion.eZc\n\nGlobal compressive strain limit in material direction 3.\n\nMaxStrainCriterion.eZt\n\nGlobal strain limit in material direction 3.\n\nMaxStrainCriterion.force_global_strain_limits\n\nWhether to use one set of global strain limits instead of the strain limits of the materials.\n\nMaxStrainCriterion.name\n\nName of the failure criterion.\n\nMaxStrainCriterion.wf_e1\n\nWeighting factor of the failure mode e1.\n\nMaxStrainCriterion.wf_e12\n\nWeighting factor of the failure mode e12.\n\nMaxStrainCriterion.wf_e13\n\nWeighting factor of the failure mode e13.\n\nMaxStrainCriterion.wf_e2\n\nWeighting factor of the failure mode e2.\n\nMaxStrainCriterion.wf_e23\n\nWeighting factor of the failure mode e23.\n\nMaxStrainCriterion.wf_e3\n\nWeighting factor of the failure mode e3.\n\n" + "objectID": "index", + "href": "index.html#pydpf-composites", + "title": "PyDPF Composites", + "section": "PyDPF Composites", + "text": "PyDPF Composites enables the post-processing of composite structures based on\nAnsys DPF and the DPF Composites plugin. It implements\nclasses on top of DPF Composites operators and data accessors for short\nfiber and layered composites (layered shell and solid elements). This module\ncan be used to postprocess fiber reinforced plastics and layered composites, and\nto implement custom failure criteria and computation.\nContains installation instructions and a simple\nexample to create a failure plot from a Workbench project.\nDemonstrates the use of PyDPF Composites for various workflows.\nDescribes the public Python classes, methods, and functions.\nProvides developer installation and usage information.\nThe minimum set of inputs to run a postprocessing for composites is the result files of an\nMAPDL solution and a material file (MATML) which was generated by Engineering Data.\nLay-up files from ACP are optional and only required for some advanced operations. Refer to\nLimitations.\nPyDPF Composites" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmc.html#wf_cmc", - "title": "wf_cmc", - "section": "wf_cmc", - "text": "Weighting factor of matrix failure due to compression or shear (cmc).\nfloat\nwf_cmc\nfloat" + "objectID": "index", + "href": "index.html#key-features", + "title": "PyDPF Composites > Key features", + "section": "Key features", + "text": "Here are some key features of PyDPF Composites:\nPostprocessing of layered shell and solid elements. MAPDL models as well as models preprocessed with ACP are supported.\nFailure criteria evaluation as shown in Composite failure analysis.\nA SamplingPoint class for extracting and visualizing a result over the entire thickness of a laminate as shown in\nSampling point.\nA ResultDefinition class for configuring combined failure criteria and scopes.\nAccessors for getting layered properties such as plies and materials as shown in\nLayered properties\nand Material properties and custom failure criterion.\nInterface to implement custom failure criteria and analysis as shown in\nMaterial properties and custom failure criterion.\nPostprocessing of homogeneous elements.\nKey features\nSamplingPoint\nResultDefinition" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmc.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmc", - "title": "wf_cmc > wf_cmc > wf_cmc", - "section": "wf_cmc > wf_cmc", - "text": "property CuntzeCriterion.wf_cmc: float\n\nWeighting factor of matrix failure due to compression or shear (cmc).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "index", + "href": "index.html#limitations", + "title": "PyDPF Composites > Limitations", + "section": "Limitations", + "text": "Only the Mechanical APDL solver is supported.\nThe post-processing of expanded cyclic symmetry models is not implemented.\nThe following operators and features are only supported if the model was\npreprocessed with ACP and if the corresponding lay-up definition file is passed to the CompositeModel class.\nThe evaluation of the failure criteria for sandwich\n(FaceSheetWrinklingCriterion,\nShearCrimpingCriterion)\nfor solid elements. Layered shell elements are always supported.\nThe computation of interlaminar normal stresses (s3) for layered shell elements.\nWithout ACP layup definitions, s3 is always zero. This also affects 3D failure criteria which use s3,\nsuch as Puck 3D. This limitation does not affect (layered) solid elements.\nThe support of variable materials and material fields. Without ACP, only the\ntemperature is considered for the evaluation of variable material properties.\nGlobal plies, and scoping by plies. Layer-wise post-processing is always supported.\nPlotting results on the reference surface of a laminate.\nNote: MAPDL models that have not been preprocessed with ACP can be converted. For more\ninformation, see Import of Legacy Mechanical APDL Composite Models in the Ansys Help.\nLimitations\nCompositeModel\nFaceSheetWrinklingCriterion\nShearCrimpingCriterion" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies.html#get_result_times_or_frequencies", + "title": "get_result_times_or_frequencies", + "section": "get_result_times_or_frequencies", + "text": "Get the times or frequencies in the result file.\nndarray[Any, dtype[float64]]\nget_result_times_or_frequencies\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property CoreFailureCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies.html#ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies", + "title": "get_result_times_or_frequencies > get_result_times_or_frequencies > get_result_times_or_frequencies", + "section": "get_result_times_or_frequencies > get_result_times_or_frequencies", + "text": "CompositeModel.get_result_times_or_frequencies()\n\nGet the times or frequencies in the result file.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.dim.html#dim", - "title": "dim", - "section": "dim", - "text": "Whether the 2D or 3D formulation of the criterion is used. The latter one also supports the failure mode delamination. Use 1 for a simplified Puck criterion.\nint\ndim\n1\nint" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.get_composites_data_sources", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composites_data_sources.html#get_composites_data_sources", + "title": "get_composites_data_sources", + "section": "get_composites_data_sources", + "text": "Create DPF data sources from a ContinuousFiberCompositeFiles object.\ncontinuous_composite_files (ContinuousFiberCompositesFiles)\nCompositeDataSources\nget_composites_data_sources\nContinuousFiberCompositeFiles\nContinuousFiberCompositesFiles\nCompositeDataSources" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.dim.html#ansys.dpf.composites.failure_criteria.PuckCriterion.dim", - "title": "dim > dim > dim", - "section": "dim > dim", - "text": "property PuckCriterion.dim: int\n\nWhether the 2D or 3D formulation of the criterion is used. The latter one also supports the failure mode delamination. Use 1 for a simplified Puck criterion.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.get_composites_data_sources", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composites_data_sources.html#ansys.dpf.composites.data_sources.get_composites_data_sources", + "title": "get_composites_data_sources > get_composites_data_sources > get_composites_data_sources", + "section": "get_composites_data_sources > get_composites_data_sources", + "text": "ansys.dpf.composites.data_sources.get_composites_data_sources(continuous_composite_files)\n\nCreate DPF data sources from a ContinuousFiberCompositeFiles object.\n\nParameters\n\ncontinuous_composite_files (ContinuousFiberCompositesFiles)\n\nReturn type\n\nCompositeDataSources\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR33", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR33.html#tensor33", - "title": "TENSOR33", - "section": "TENSOR33", - "text": "TENSOR33" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.html#materialmetadata", + "title": "MaterialMetadata", + "section": "MaterialMetadata", + "text": "Material metadata such as name and ply type.\ndpf_material_id (int) – Material index in the DPF materials container.\nmaterial_name (str) – Name of the material. Is empty if the name is not available.\nply_type (str | None) – Ply type. One of regular, woven, honeycomb_core,\nisotropic_homogeneous_core, orthotropic_homogeneous_core,\nisotropic, adhesive, undefined. Regular stands for uni-directional.\nNone if the DPF server older than 2025 R1 pre 0 (9.0).\nsolver_material_id (int | None) – Material index of the solver.\nNone if DPF server older than 2024 R1 pre 0 (8.0).\nMaterialMetadata.dpf_material_id\n\nMaterialMetadata.material_name\n\nMaterialMetadata.ply_type\n\nMaterialMetadata.solver_material_id\n\nMaterialMetadata\nMaterialMetadata.dpf_material_id\nMaterialMetadata.material_name\nMaterialMetadata.ply_type\nMaterialMetadata.solver_material_id" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR33", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR33.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR33", - "title": "TENSOR33 > TENSOR33 > TENSOR33", - "section": "TENSOR33 > TENSOR33", - "text": "Sym3x3TensorComponent.TENSOR33 = 2\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.html#ansys.dpf.composites.layup_info.material_properties.MaterialMetadata", + "title": "MaterialMetadata > MaterialMetadata > MaterialMetadata", + "section": "MaterialMetadata > MaterialMetadata", + "text": "class ansys.dpf.composites.layup_info.material_properties.MaterialMetadata(dpf_material_id=0, material_name='', ply_type=None, solver_material_id=None)\n\nMaterial metadata such as name and ply type.\n\nParameters\n\ndpf_material_id (int) – Material index in the DPF materials container.\n\nmaterial_name (str) – Name of the material. Is empty if the name is not available.\n\nply_type (str | None) – Ply type. One of regular, woven, honeycomb_core,\nisotropic_homogeneous_core, orthotropic_homogeneous_core,\nisotropic, adhesive, undefined. Regular stands for uni-directional.\nNone if the DPF server older than 2025 R1 pre 0 (9.0).\n\nsolver_material_id (int | None) – Material index of the solver.\nNone if DPF server older than 2024 R1 pre 0 (8.0).\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nMaterialMetadata.dpf_material_id\n\n\n\nMaterialMetadata.material_name\n\n\n\nMaterialMetadata.ply_type\n\n\n\nMaterialMetadata.solver_material_id\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G13", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G13.html#engineering_constants_g13", - "title": "Engineering_Constants_G13", - "section": "Engineering_Constants_G13", - "text": "Engineering_Constants_G13" + "objectID": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_dpf_material_ids", + "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_dpf_material_ids.html#get_selected_indices_by_dpf_material_ids", + "title": "get_selected_indices_by_dpf_material_ids", + "section": "get_selected_indices_by_dpf_material_ids", + "text": "Get selected indices by DPF material IDs.\nThis method selects all indices that are in a layer with one of the selected materials.\nelement_info (ElementInfo) – Lay-up information for the element.\ndpf_material_ids (Collection[int64]) – Collection of DPF materials.\nSelected elementary indices\nNDArray[int64]\nget_selected_indices_by_dpf_material_ids\nCollection\nint64" }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G13", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G13.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G13", - "title": "Engineering_Constants_G13 > Engineering_Constants_G13 > Engineering_Constants_G13", - "section": "Engineering_Constants_G13 > Engineering_Constants_G13", - "text": "MaterialProperty.Engineering_Constants_G13: str = 'shear_modulus_xz'\n\n" + { + "objectID": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_dpf_material_ids", + "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_dpf_material_ids.html#ansys.dpf.composites.select_indices.get_selected_indices_by_dpf_material_ids", + "title": "get_selected_indices_by_dpf_material_ids > get_selected_indices_by_dpf_material_ids > get_selected_indices_by_dpf_material_ids", + "section": "get_selected_indices_by_dpf_material_ids > get_selected_indices_by_dpf_material_ids", + "text": "ansys.dpf.composites.select_indices.get_selected_indices_by_dpf_material_ids(element_info, dpf_material_ids)\n\nGet selected indices by DPF material IDs.\n\nThis method selects all indices that are in a layer with one of the selected materials.\n\nParameters\n\nelement_info (ElementInfo) – Lay-up information for the element.\n\ndpf_material_ids (Collection[int64]) – Collection of DPF materials.\n\nReturns\n\nSelected elementary indices\n\nReturn type\n\nNDArray[int64]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t.html#e3t", - "title": "e3t", - "section": "e3t", - "text": "e3t" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT.html#max_local_layer_in_element", + "title": "MAX_LOCAL_LAYER_IN_ELEMENT", + "section": "MAX_LOCAL_LAYER_IN_ELEMENT", + "text": "MAX_LOCAL_LAYER_IN_ELEMENT" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t", - "title": "e3t > e3t > e3t", - "section": "e3t > e3t", - "text": "FailureModeEnum.e3t = 131\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT.html#ansys.dpf.composites.constants.FailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT", + "title": "MAX_LOCAL_LAYER_IN_ELEMENT > MAX_LOCAL_LAYER_IN_ELEMENT > MAX_LOCAL_LAYER_IN_ELEMENT", + "section": "MAX_LOCAL_LAYER_IN_ELEMENT > MAX_LOCAL_LAYER_IN_ELEMENT", + "text": "FailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT = 6\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hf.html#hf", - "title": "hf", - "section": "hf", - "text": "Whether to activate the failure evaluation regarding fiber failure.\nbool\nhf\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hf.html#ansys.dpf.composites.failure_criteria.HashinCriterion.hf", - "title": "hf > hf > hf", - "section": "hf > hf", - "text": "property HashinCriterion.hf: bool\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "ShearCrimpingCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hm.html#wf_hm", - "title": "wf_hm", - "section": "wf_hm", - "text": "Whether to activate the failure evaluation regarding matrix failure.\nfloat\nwf_hm\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_files", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_files.html#composite_files", + "title": "composite_files", + "section": "composite_files", + "text": "Get the composite file paths on the server.\nContinuousFiberCompositesFiles\ncomposite_files\nContinuousFiberCompositesFiles" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hm.html#ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hm", - "title": "wf_hm > wf_hm > wf_hm", - "section": "wf_hm > wf_hm", - "text": "property HashinCriterion.wf_hm: float\n\nWhether to activate the failure evaluation regarding matrix failure.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_files", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_files.html#ansys.dpf.composites.composite_model.CompositeModel.composite_files", + "title": "composite_files > composite_files > composite_files", + "section": "composite_files > composite_files", + "text": "property CompositeModel.composite_files: ContinuousFiberCompositesFiles\n\nGet the composite file paths on the server.\n\nReturn type\n\nContinuousFiberCompositesFiles\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.engineering_data", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.engineering_data.html#engineering_data", - "title": "engineering_data", - "section": "engineering_data", - "text": "engineering_data" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_layup_operator", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_layup_operator.html#get_layup_operator", + "title": "get_layup_operator", + "section": "get_layup_operator", + "text": "Get the lay-up operator.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nOperator\nget_layup_operator\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nOperator" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.engineering_data", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.engineering_data.html#ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.engineering_data", - "title": "engineering_data > engineering_data > engineering_data", - "section": "engineering_data > engineering_data", - "text": "ContinuousFiberCompositesFiles.engineering_data: str | PathLike[str]\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_layup_operator", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_layup_operator.html#ansys.dpf.composites.composite_model.CompositeModel.get_layup_operator", + "title": "get_layup_operator > get_layup_operator > get_layup_operator", + "section": "get_layup_operator > get_layup_operator", + "text": "CompositeModel.get_layup_operator(composite_definition_label=None)\n\nGet the lay-up operator.\n\nParameters\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_2", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_2.html#larc_constants_fracture_toughness_mode_2", - "title": "Larc_Constants_fracture_toughness_mode_2", - "section": "Larc_Constants_fracture_toughness_mode_2", - "text": "Larc_Constants_fracture_toughness_mode_2" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.dim.html#dim", + "title": "dim", + "section": "dim", + "text": "Specifies which formulation of the failure criterion is used.\nint\ndim\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_2", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_2.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_2", - "title": "Larc_Constants_fracture_toughness_mode_2 > Larc_Constants_fracture_toughness_mode_2 > Larc_Constants_fracture_toughness_mode_2", - "section": "Larc_Constants_fracture_toughness_mode_2 > Larc_Constants_fracture_toughness_mode_2", - "text": "MaterialProperty.Larc_Constants_fracture_toughness_mode_2: str = 'transverse_friction_coefficient_larc_constants'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.dim.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion.dim", + "title": "dim > dim > dim", + "section": "dim > dim", + "text": "property HoffmanCriterion.dim: int\n\nSpecifies which formulation of the failure criterion is used.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_json", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_json.html#to_json", - "title": "to_json", - "section": "to_json", - "text": "Convert the dictionary representation of the result definition to a JSON dictionary.\nstr\nto_json\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmc.html#pmc", + "title": "pmc", + "section": "pmc", + "text": "Whether to activate the failure evaluation regarding matrix failure due to shear failure.\nbool\npmc\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_json", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_json.html#ansys.dpf.composites.result_definition.ResultDefinition.to_json", - "title": "to_json > to_json > to_json", - "section": "to_json > to_json", - "text": "ResultDefinition.to_json()\n\nConvert the dictionary representation of the result definition to a JSON dictionary.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmc.html#ansys.dpf.composites.failure_criteria.PuckCriterion.pmc", + "title": "pmc > pmc > pmc", + "section": "pmc > pmc", + "text": "property PuckCriterion.pmc: bool\n\nWhether to activate the failure evaluation regarding matrix failure due to shear failure.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition.html#rpartition", - "title": "rpartition", - "section": "rpartition", - "text": "Partition the string into three parts using the given separator.\nThis will search for the separator in the string, starting at the end. If\nthe separator is found, returns a 3-tuple containing the part before the\nseparator, the separator itself, and the part after it.\nIf the separator is not found, returns a 3-tuple containing two empty strings\nand the original string.\nrpartition" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.html#layupproperty", + "title": "LayupProperty", + "section": "LayupProperty", + "text": "Enum for lay-up properties.\nValues correspond to labels in the output container of the lay-up provider.\nLayupProperty.ANGLE\n\nLayupProperty.SHEAR_ANGLE\n\nLayupProperty.THICKNESS\n\nLayupProperty.LAMINATE_OFFSET\n\nLayupProperty\nLayupProperty.ANGLE\nLayupProperty.SHEAR_ANGLE\nLayupProperty.THICKNESS\nLayupProperty.LAMINATE_OFFSET" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition", - "title": "rpartition > rpartition > rpartition", - "section": "rpartition > rpartition", - "text": "FailureMeasureEnum.rpartition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nThis will search for the separator in the string, starting at the end. If\nthe separator is found, returns a 3-tuple containing the part before the\nseparator, the separator itself, and the part after it.\n\nIf the separator is not found, returns a 3-tuple containing two empty strings\nand the original string.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.html#ansys.dpf.composites.layup_info.LayupProperty", + "title": "LayupProperty > LayupProperty > LayupProperty", + "section": "LayupProperty > LayupProperty", + "text": "class ansys.dpf.composites.layup_info.LayupProperty(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nEnum for lay-up properties.\n\nValues correspond to labels in the output container of the lay-up provider.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nLayupProperty.ANGLE\n\n\n\nLayupProperty.SHEAR_ANGLE\n\n\n\nLayupProperty.THICKNESS\n\n\n\nLayupProperty.LAMINATE_OFFSET\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_continuous_fiber_composite_files_to_server", - "href": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_continuous_fiber_composite_files_to_server.html#upload_continuous_fiber_composite_files_to_server", - "title": "upload_continuous_fiber_composite_files_to_server", - "section": "upload_continuous_fiber_composite_files_to_server", - "text": "Upload continuous fiber composites files to server.\nNote: If server.local_server == True the data_files are returned unmodified.\ndata_files (ContinuousFiberCompositesFiles)\nserver (BaseServer)\nContinuousFiberCompositesFiles\nupload_continuous_fiber_composite_files_to_server\nContinuousFiberCompositesFiles\nBaseServer\nContinuousFiberCompositesFiles" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.title", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.title.html#title", + "title": "title", + "section": "title", + "text": "Return a version of the string where each word is titlecased.\nMore specifically, words start with uppercased characters and all remaining\ncased characters have lower case.\ntitle" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_continuous_fiber_composite_files_to_server", - "href": "api/_autosummary/ansys.dpf.composites.server_helpers.upload_continuous_fiber_composite_files_to_server.html#ansys.dpf.composites.server_helpers.upload_continuous_fiber_composite_files_to_server", - "title": "upload_continuous_fiber_composite_files_to_server > upload_continuous_fiber_composite_files_to_server > upload_continuous_fiber_composite_files_to_server", - "section": "upload_continuous_fiber_composite_files_to_server > upload_continuous_fiber_composite_files_to_server", - "text": "ansys.dpf.composites.server_helpers.upload_continuous_fiber_composite_files_to_server(data_files, server)\n\nUpload continuous fiber composites files to server.\n\nNote: If server.local_server == True the data_files are returned unmodified.\n\nParameters\n\ndata_files (ContinuousFiberCompositesFiles)\n\nserver (BaseServer)\n\nReturn type\n\nContinuousFiberCompositesFiles\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.title", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.title.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.title", + "title": "title > title > title", + "section": "title > title", + "text": "FailureMeasureEnum.title(/)\n\nReturn a version of the string where each word is titlecased.\n\nMore specifically, words start with uppercased characters and all remaining\ncased characters have lower case.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.wf.html#wf", - "title": "wf", - "section": "wf", - "text": "Weighting factor of this failure criterion.\nfloat\nwf\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.TOP", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.TOP.html#top", + "title": "TOP", + "section": "TOP", + "text": "TOP" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.wf.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.wf", - "title": "wf > wf > wf", - "section": "wf > wf", - "text": "property TsaiWuCriterion.wf: float\n\nWeighting factor of this failure criterion.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.TOP", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.TOP.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.TOP", + "title": "TOP > TOP > TOP", + "section": "TOP > TOP", + "text": "SpotReductionStrategy.TOP = 'TOP'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.html#materialoperators", - "title": "MaterialOperators", - "section": "MaterialOperators", - "text": "Provides the container for material-related operators.\nmaterial_support_provider (Operator) – The material support provider takes care of mapping the materials in the RST file to\nthe materials in the composite definitions.\nThe material support contains all the materials from the RST file. Currently\nthe output of this operator cannot be inspected in Python.\nmaterial_provider (Operator) – Outputs the MaterialsContainer, which can be used to\nevaluate material properties. This container cannot be\nqueried in Python, but it can be passed to other DPF operators\nthat evaluate the properties.\nresult_info_provider (Operator) – Provides the ResultInfo object.\nMaterialOperators.material_container_helper_op\nGet material container helper operator.\nMaterialOperators.material_provider\nGet material_provider.\nMaterialOperators.material_support_provider\nGet material_support_provider.\nMaterialOperators.result_info_provider\nGet result_info_provider.\nMaterialOperators\nOperator\nOperator\nMaterialsContainer\nOperator\nResultInfo\nMaterialOperators.material_container_helper_op\nMaterialOperators.material_provider\nMaterialOperators.material_support_provider\nMaterialOperators.result_info_provider" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2.html#e2", + "title": "e2", + "section": "e2", + "text": "e2" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.html#ansys.dpf.composites.layup_info.material_operators.MaterialOperators", - "title": "MaterialOperators > MaterialOperators > MaterialOperators", - "section": "MaterialOperators > MaterialOperators", - "text": "class ansys.dpf.composites.layup_info.material_operators.MaterialOperators(material_provider, material_support_provider, result_info_provider)\n\nProvides the container for material-related operators.\n\nParameters\n\nmaterial_support_provider (Operator) – The material support provider takes care of mapping the materials in the RST file to\nthe materials in the composite definitions.\nThe material support contains all the materials from the RST file. Currently\nthe output of this operator cannot be inspected in Python.\n\nmaterial_provider (Operator) – Outputs the MaterialsContainer, which can be used to\nevaluate material properties. This container cannot be\nqueried in Python, but it can be passed to other DPF operators\nthat evaluate the properties.\n\nresult_info_provider (Operator) – Provides the ResultInfo object.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nMaterialOperators.material_container_helper_op\n\nGet material container helper operator.\n\nMaterialOperators.material_provider\n\nGet material_provider.\n\nMaterialOperators.material_support_provider\n\nGet material_support_provider.\n\nMaterialOperators.result_info_provider\n\nGet result_info_provider.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e2", + "title": "e2 > e2 > e2", + "section": "e2 > e2", + "text": "FailureModeEnum.e2 = 120\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc.html#kc", - "title": "kc", - "section": "kc", - "text": "Weighting factor of the core material for evaluation of the maximum allowable load. The default is 1.\nfloat\nkc\n1\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids_for_composite_definition_label", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids_for_composite_definition_label.html#get_all_layered_element_ids_for_composite_definition_label", + "title": "get_all_layered_element_ids_for_composite_definition_label", + "section": "get_all_layered_element_ids_for_composite_definition_label", + "text": "Get all layered element IDs that belong to a composite definition label.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nSequence[int]\nget_all_layered_element_ids_for_composite_definition_label\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nSequence\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc", - "title": "kc > kc > kc", - "section": "kc > kc", - "text": "property ShearCrimpingCriterion.kc: float\n\nWeighting factor of the core material for evaluation of the maximum allowable load. The default is 1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids_for_composite_definition_label", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids_for_composite_definition_label.html#ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids_for_composite_definition_label", + "title": "get_all_layered_element_ids_for_composite_definition_label > get_all_layered_element_ids_for_composite_definition_label > get_all_layered_element_ids_for_composite_definition_label", + "section": "get_all_layered_element_ids_for_composite_definition_label > get_all_layered_element_ids_for_composite_definition_label", + "text": "CompositeModel.get_all_layered_element_ids_for_composite_definition_label(composite_definition_label=None)\n\nGet all layered element IDs that belong to a composite definition label.\n\nParameters\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nSequence[int]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.html#compositedatasources", - "title": "CompositeDataSources", - "section": "CompositeDataSources", - "text": "Provides data sources related to the composite lay-up.\nrst (ansys.dpf.core.data_sources.DataSources) – Result file. Currently only RST (MAPDL) is supported.\nmaterial_support (ansys.dpf.core.data_sources.DataSources) – NOTE: The material_support parameter is explicitly listed because it is currently not\nsupported (by the DPF Core) to use a distributed RST file as source for the\nmaterial support. Instead, we create a separate DataSources object for the\nmaterial support from the first RST file. This is a workaround until the\nsupport for distributed RST is added.\nengineering_data (ansys.dpf.core.data_sources.DataSources) – File with the material properties.\nold_composite_sources (dict[str, ansys.dpf.core.data_sources.DataSources]) – Member used to support assemblies in combination with the old\nDPF server (<7.0). It should be removed once the support of this\nserver version is dropped.\nCompositeDataSources.rst\n\nCompositeDataSources.material_support\n\nCompositeDataSources.composite\n\nCompositeDataSources.engineering_data\n\nCompositeDataSources.old_composite_sources\n\nCompositeDataSources\nmaterial_support\nCompositeDataSources.rst\nCompositeDataSources.material_support\nCompositeDataSources.composite\nCompositeDataSources.engineering_data\nCompositeDataSources.old_composite_sources" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tensile_Yield_Strength_effective_stress", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tensile_Yield_Strength_effective_stress.html#tensile_yield_strength_effective_stress", + "title": "Tensile_Yield_Strength_effective_stress", + "section": "Tensile_Yield_Strength_effective_stress", + "text": "Tensile_Yield_Strength_effective_stress" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.html#ansys.dpf.composites.data_sources.CompositeDataSources", - "title": "CompositeDataSources > CompositeDataSources > CompositeDataSources", - "section": "CompositeDataSources > CompositeDataSources", - "text": "class ansys.dpf.composites.data_sources.CompositeDataSources(rst, material_support, composite, engineering_data, old_composite_sources)\n\nProvides data sources related to the composite lay-up.\n\nParameters\n\nrst (ansys.dpf.core.data_sources.DataSources) – Result file. Currently only RST (MAPDL) is supported.\n\nmaterial_support (ansys.dpf.core.data_sources.DataSources) – NOTE: The material_support parameter is explicitly listed because it is currently not\nsupported (by the DPF Core) to use a distributed RST file as source for the\nmaterial support. Instead, we create a separate DataSources object for the\nmaterial support from the first RST file. This is a workaround until the\nsupport for distributed RST is added.\n\nengineering_data (ansys.dpf.core.data_sources.DataSources) – File with the material properties.\n\nold_composite_sources (dict[str, ansys.dpf.core.data_sources.DataSources]) – Member used to support assemblies in combination with the old\nDPF server (<7.0). It should be removed once the support of this\nserver version is dropped.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nCompositeDataSources.rst\n\n\n\nCompositeDataSources.material_support\n\n\n\nCompositeDataSources.composite\n\n\n\nCompositeDataSources.engineering_data\n\n\n\nCompositeDataSources.old_composite_sources\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tensile_Yield_Strength_effective_stress", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tensile_Yield_Strength_effective_stress.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tensile_Yield_Strength_effective_stress", + "title": "Tensile_Yield_Strength_effective_stress > Tensile_Yield_Strength_effective_stress > Tensile_Yield_Strength_effective_stress", + "section": "Tensile_Yield_Strength_effective_stress > Tensile_Yield_Strength_effective_stress", + "text": "MaterialProperty.Tensile_Yield_Strength_effective_stress: str = 'tensile_yield_strength'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_json.html#to_json", - "title": "to_json", - "section": "to_json", - "text": "Return the combined failure criterion as a JSON dictionary.\nstr\nString representation (json.dumps file) that can be used for the result definition\nof the DPF Composites Failure evaluator operator.\nto_json\nstr\njson.dumps" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.scopes", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.scopes.html#scopes", + "title": "scopes", + "section": "scopes", + "text": "Scopes of the result definition.\nSequence[ResultDefinitionScope]\nscopes\nSequence\nResultDefinitionScope" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_json.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_json", - "title": "to_json > to_json > to_json", - "section": "to_json > to_json", - "text": "CombinedFailureCriterion.to_json()\n\nReturn the combined failure criterion as a JSON dictionary.\n\nReturn type\n\nstr\n\nReturns\n\nString representation (json.dumps file) that can be used for the result definition\nof the DPF Composites Failure evaluator operator.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.scopes", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.scopes.html#ansys.dpf.composites.result_definition.ResultDefinition.scopes", + "title": "scopes > scopes > scopes", + "section": "scopes > scopes", + "text": "property ResultDefinition.scopes: Sequence[ResultDefinitionScope]\n\nScopes of the result definition.\n\nReturn type\n\nSequence[ResultDefinitionScope]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.html#failureoutput", - "title": "FailureOutput", - "section": "FailureOutput", - "text": "Provides failure output types.\nThe enum value corresponds to the index in the fields container.\nFailureOutput.FAILURE_MODE\n\nFailureOutput.FAILURE_VALUE\n\nFailureOutput.MAX_LAYER_INDEX\n\nFailureOutput.FAILURE_MODE_REF_SURFACE\n\nFailureOutput.FAILURE_VALUE_REF_SURFACE\n\nFailureOutput.MAX_GLOBAL_LAYER_IN_STACK\n\nFailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT\n\nFailureOutput.MAX_SOLID_ELEMENT_ID\n\nFailureOutput\nFailureOutput.FAILURE_MODE\nFailureOutput.FAILURE_VALUE\nFailureOutput.MAX_LAYER_INDEX\nFailureOutput.FAILURE_MODE_REF_SURFACE\nFailureOutput.FAILURE_VALUE_REF_SURFACE\nFailureOutput.MAX_GLOBAL_LAYER_IN_STACK\nFailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT\nFailureOutput.MAX_SOLID_ELEMENT_ID" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property.html#get_constant_property", + "title": "get_constant_property", + "section": "get_constant_property", + "text": "Get a constant material property.\nOnly constant properties are supported. Variable properties are evaluated at their\ndefault values.\nmaterial_property (MaterialProperty) – Material property.\ndpf_material_id (int64) – DPF material ID.\nmaterials_provider (Operator) – DPF Materials provider operator. This value is available from the\nCompositeModel.material_operators attribute.\nunit_system (Union[UnitSystem, Operator])\nfloat\nget_constant_property\nMaterialProperty\nint64\nOperator\nCompositeModel.material_operators\nUnion\nUnitSystem\nOperator\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.html#ansys.dpf.composites.constants.FailureOutput", - "title": "FailureOutput > FailureOutput > FailureOutput", - "section": "FailureOutput > FailureOutput", - "text": "class ansys.dpf.composites.constants.FailureOutput(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides failure output types.\n\nThe enum value corresponds to the index in the fields container.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nFailureOutput.FAILURE_MODE\n\n\n\nFailureOutput.FAILURE_VALUE\n\n\n\nFailureOutput.MAX_LAYER_INDEX\n\n\n\nFailureOutput.FAILURE_MODE_REF_SURFACE\n\n\n\nFailureOutput.FAILURE_VALUE_REF_SURFACE\n\n\n\nFailureOutput.MAX_GLOBAL_LAYER_IN_STACK\n\n\n\nFailureOutput.MAX_LOCAL_LAYER_IN_ELEMENT\n\n\n\nFailureOutput.MAX_SOLID_ELEMENT_ID\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_constant_property.html#ansys.dpf.composites.layup_info.material_properties.get_constant_property", + "title": "get_constant_property > get_constant_property > get_constant_property", + "section": "get_constant_property > get_constant_property", + "text": "ansys.dpf.composites.layup_info.material_properties.get_constant_property(material_property, dpf_material_id, materials_provider, unit_system)\n\nGet a constant material property.\n\nOnly constant properties are supported. Variable properties are evaluated at their\ndefault values.\n\nParameters\n\nmaterial_property (MaterialProperty) – Material property.\n\ndpf_material_id (int64) – DPF material ID.\n\nmaterials_provider (Operator) – DPF Materials provider operator. This value is available from the\nCompositeModel.material_operators attribute.\n\nunit_system (Union[UnitSystem, Operator])\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.time", - "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.time.html#time", - "title": "time", - "section": "time", - "text": "time" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_analysis_plies", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_analysis_plies.html#get_analysis_plies", + "title": "get_analysis_plies", + "section": "get_analysis_plies", + "text": "Get analysis ply names. Returns None if element is not layered.\nelement_id (int) – Element Id/Label\nOptional[Sequence[str]]\nget_analysis_plies\nint\nOptional\nSequence\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.time", - "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.time.html#ansys.dpf.composites.composite_scope.CompositeScope.time", - "title": "time > time > time", - "section": "time > time", - "text": "CompositeScope.time: float | None = None\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_analysis_plies", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_analysis_plies.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_analysis_plies", + "title": "get_analysis_plies > get_analysis_plies > get_analysis_plies", + "section": "get_analysis_plies > get_analysis_plies", + "text": "LayupPropertiesProvider.get_analysis_plies(element_id)\n\nGet analysis ply names. Returns None if element is not layered.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[Sequence[str]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_info", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_info.html#get_element_info", - "title": "get_element_info", - "section": "get_element_info", - "text": "Get element information for an element ID.\nThis method returns None if the element type is not supported.\nelement_id (int) – Element ID or label.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nOptional[ElementInfo]\nget_element_info\nNone\nint\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nOptional\nElementInfo" + "objectID": "api/select_indices", + "href": "api/select_indices.html#select-elementary-indices", + "title": "Select elementary indices", + "section": "Select elementary indices", + "text": "This module provides functions to filter elementary data.\nA layered element has the following number of elementary data points:\nIn the preceding definition, number_of_spots indicates the number of through-the-thickness\nintegration points per layer. number_of_spots is controlled by keyoption 8, which\nindicates how much output is written. For example, you might write output for only 'bottom'\nand 'top' or for 'bottom', 'top', and 'mid'.\nEach elementary data point can have multiple components. For example, it might have one component\nfor scalar data or six components for symmetrical 3x3 tensors. The elementary data of an element\nis available as a 2D vector with shape (num_elementary_data, number_of_components).\nHere are some examples:\nGet the stress output for a layered shell element (181, four nodes) with five layers and\nkeyoption 8 = 2. Write the output for 'bot', 'top', and 'mid'.\nnumber_of_layers = 5\nnumber_of_spots = 3 (bottom, top, and middle)\nnumber_of_nodes_per_spot_plane = 4 (equal to number of nodes)\nnumber_of_components = 6\nThus, num_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\n= 60.\nGet the stress output for a layered solid element (185, eight nodes) with seven layers and\nkeyoption 8 = 1. Write the output for 'bot' and 'top'.\nnumber_of_layers = 7\nnumber_of_spots = 2 (bottom and top)\nnumber_of_nodes_per_spot_plane = 4\nnumber_of_components = 6\nThus, num_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\n= 56.\nThe functions in this module compute an array of elementary indices for a given selection of\nlayers, nodes, spots, DPF material IDs, or analysis plies. These elementary indices can be used\nto index the first axis of the elementary data array. For usage information, see\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py.\nget_selected_indices(element_info[, layers, ...])\nGet elementary indices based on element information, layers, nodes, and spots.\nget_selected_indices_by_analysis_ply(...)\nGet selected indices by analysis ply.\nget_selected_indices_by_dpf_material_ids(...)\nGet selected indices by DPF material IDs.\nSelect elementary indices\nnumber_of_spots\nnumber_of_spots\nkeyoption 8\n'bottom'\n'top'\n'bottom'\n'top'\n'mid'\n(num_elementary_data, number_of_components)\nkeyoption 8 = 2\n'bot'\n'top'\n'mid'\nnumber_of_layers\nnumber_of_spots\nnumber_of_nodes_per_spot_plane\nnumber_of_components\nnum_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\nkeyoption 8 = 1\n'bot'\n'top'\nnumber_of_layers\nnumber_of_spots\nnumber_of_nodes_per_spot_plane\nnumber_of_components\nnum_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\nget_selected_indices\nget_selected_indices_by_analysis_ply\nget_selected_indices_by_dpf_material_ids" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_info", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_info.html#ansys.dpf.composites.composite_model.CompositeModel.get_element_info", - "title": "get_element_info > get_element_info > get_element_info", - "section": "get_element_info > get_element_info", - "text": "CompositeModel.get_element_info(element_id, composite_definition_label=None)\n\nGet element information for an element ID.\n\nThis method returns None if the element type is not supported.\n\nParameters\n\nelement_id (int) – Element ID or label.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nOptional[ElementInfo]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs.html#vms", + "title": "vMs", + "section": "vMs", + "text": "vMs" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmt.html#lmt", - "title": "lmt", - "section": "lmt", - "text": "Whether to activate the failure evaluation of the matrix due to tension.\nbool\nlmt\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs", + "title": "vMs > vMs > vMs", + "section": "vMs > vMs", + "text": "FailureModeEnum.vMs = 1102\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmt.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.lmt", - "title": "lmt > lmt > lmt", - "section": "lmt > lmt", - "text": "property LaRCCriterion.lmt: bool\n\nWhether to activate the failure evaluation of the matrix due to tension.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.h", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.h.html#h", + "title": "h", + "section": "h", + "text": "h" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s13.html#s13", - "title": "s13", - "section": "s13", - "text": "Whether to activate the failure evaluation regarding the interlaminar shear stress s13.\nbool\ns13\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.h", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.h.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.h", + "title": "h > h > h", + "section": "h > h", + "text": "FailureModeEnum.h = 501\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s13.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s13", - "title": "s13 > s13 > s13", - "section": "s13 > s13", - "text": "property MaxStressCriterion.s13: bool\n\nWhether to activate the failure evaluation regarding the interlaminar shear stress s13.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc.html#kc", + "title": "kc", + "section": "kc", + "text": "Weighting factor of the core material for evaluation of the maximum allowable load. The default is 1.\nfloat\nkc\n1\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3.html#lft3", - "title": "lft3", - "section": "lft3", - "text": "lft3" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc", + "title": "kc > kc > kc", + "section": "kc > kc", + "text": "property ShearCrimpingCriterion.kc: float\n\nWeighting factor of the core material for evaluation of the maximum allowable load. The default is 1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3", - "title": "lft3 > lft3 > lft3", - "section": "lft3 > lft3", - "text": "FailureModeEnum.lft3 = 901\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_2", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_2.html#larc_constants_fracture_toughness_mode_2", + "title": "Larc_Constants_fracture_toughness_mode_2", + "section": "Larc_Constants_fracture_toughness_mode_2", + "text": "Larc_Constants_fracture_toughness_mode_2" }, { - "objectID": "examples/gallery_examples/sg_execution_times", - "href": "examples/gallery_examples/sg_execution_times.html#computation-times", - "title": "Computation times", - "section": "Computation times", - "text": "01:50.653 total execution time for 15 files from examples/gallery_examples:\nExample\nTime\nMem (MB)\nsphx_glr_examples_gallery_examples_001_failure_operator_example.py (001_failure_operator_example.py)\n00:19.408\n0.0\nsphx_glr_examples_gallery_examples_010_harmonic_example.py (010_harmonic_example.py)\n00:13.998\n0.0\nsphx_glr_examples_gallery_examples_011_rst_workflow.py (011_rst_workflow.py)\n00:08.430\n0.0\nsphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py (014_cyclic_symmetry_example.py)\n00:08.047\n0.0\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py (007_interlaminar_normal_stress_example.py)\n00:07.872\n0.0\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py (002_sampling_point_example.py)\n00:07.682\n0.0\nsphx_glr_examples_gallery_examples_008_assembly_example.py (008_assembly_example.py)\n00:06.821\n0.0\nsphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py (099_dpf_composite_failure_workflow.py)\n00:06.789\n0.0\nsphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py (009_short_fiber_orientation_tensor.py)\n00:06.511\n0.0\nsphx_glr_examples_gallery_examples_013_thermal_example.py (013_thermal_example.py)\n00:05.676\n0.0\nsphx_glr_examples_gallery_examples_004_get_material_properties_example.py (004_get_material_properties_example.py)\n00:04.845\n0.0\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py (006_filter_composite_data_example.py)\n00:04.640\n0.0\nsphx_glr_examples_gallery_examples_012_fatigue_example.py (012_fatigue_example.py)\n00:04.346\n0.0\nsphx_glr_examples_gallery_examples_003_short_fiber_example.py (003_short_fiber_example.py)\n00:03.949\n0.0\nsphx_glr_examples_gallery_examples_005_get_layup_properties_example.py (005_get_layup_properties_example.py)\n00:01.638\n0.0\nComputation times\n001_failure_operator_example.py\n010_harmonic_example.py\n011_rst_workflow.py\n014_cyclic_symmetry_example.py\n007_interlaminar_normal_stress_example.py\n002_sampling_point_example.py\n008_assembly_example.py\n099_dpf_composite_failure_workflow.py\n009_short_fiber_orientation_tensor.py\n013_thermal_example.py\n004_get_material_properties_example.py\n006_filter_composite_data_example.py\n012_fatigue_example.py\n003_short_fiber_example.py\n005_get_layup_properties_example.py" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_2", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_2.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_2", + "title": "Larc_Constants_fracture_toughness_mode_2 > Larc_Constants_fracture_toughness_mode_2 > Larc_Constants_fracture_toughness_mode_2", + "section": "Larc_Constants_fracture_toughness_mode_2 > Larc_Constants_fracture_toughness_mode_2", + "text": "MaterialProperty.Larc_Constants_fracture_toughness_mode_2: str = 'transverse_friction_coefficient_larc_constants'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_neg", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_neg.html#puck_constants_p_21_neg", - "title": "Puck_Constants_p_21_neg", - "section": "Puck_Constants_p_21_neg", - "text": "Puck_Constants_p_21_neg" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip.html#rstrip", + "title": "rstrip", + "section": "rstrip", + "text": "Return a copy of the string with trailing whitespace removed.\nIf chars is given and not None, remove characters in chars instead.\nrstrip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_neg", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_neg.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_neg", - "title": "Puck_Constants_p_21_neg > Puck_Constants_p_21_neg > Puck_Constants_p_21_neg", - "section": "Puck_Constants_p_21_neg > Puck_Constants_p_21_neg", - "text": "MaterialProperty.Puck_Constants_p_21_neg: str = 'compressive_inclination_xz_puck_constants'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip", + "title": "rstrip > rstrip > rstrip", + "section": "rstrip > rstrip", + "text": "FailureMeasureEnum.rstrip(chars=None, /)\n\nReturn a copy of the string with trailing whitespace removed.\n\nIf chars is given and not None, remove characters in chars instead.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmA", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmA.html#cma", - "title": "cmA", - "section": "cmA", - "text": "cmA" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.upper", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.upper.html#upper", + "title": "upper", + "section": "upper", + "text": "Return a copy of the string converted to uppercase.\nupper" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmA", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmA.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cmA", - "title": "cmA > cmA > cmA", - "section": "cmA > cmA", - "text": "FailureModeEnum.cmA = 1003\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.upper", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.upper.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.upper", + "title": "upper > upper > upper", + "section": "upper > upper", + "text": "FailureMeasureEnum.upper(/)\n\nReturn a copy of the string converted to uppercase.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.islower", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.islower.html#islower", - "title": "islower", - "section": "islower", - "text": "Return True if the string is a lowercase string, False otherwise.\nA string is lowercase if all cased characters in the string are lowercase and\nthere is at least one cased character in the string.\nislower" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3t.html#s3t", + "title": "s3t", + "section": "s3t", + "text": "s3t" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.islower", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.islower.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.islower", - "title": "islower > islower > islower", - "section": "islower > islower", - "text": "FailureMeasureEnum.islower(/)\n\nReturn True if the string is a lowercase string, False otherwise.\n\nA string is lowercase if all cased characters in the string are lowercase and\nthere is at least one cased character in the string.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s3t", + "title": "s3t > s3t > s3t", + "section": "s3t > s3t", + "text": "FailureModeEnum.s3t = 231\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.dpf_material_id", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.dpf_material_id.html#dpf_material_id", - "title": "dpf_material_id", - "section": "dpf_material_id", - "text": "dpf_material_id" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.html#materialoperators", + "title": "MaterialOperators", + "section": "MaterialOperators", + "text": "Provides the container for material-related operators.\nmaterial_support_provider (Operator) – The material support provider takes care of mapping the materials in the RST file to\nthe materials in the composite definitions.\nThe material support contains all the materials from the RST file. Currently\nthe output of this operator cannot be inspected in Python.\nmaterial_provider (Operator) – Outputs the MaterialsContainer, which can be used to\nevaluate material properties. This container cannot be\nqueried in Python, but it can be passed to other DPF operators\nthat evaluate the properties.\nresult_info_provider (Operator) – Provides the ResultInfo object.\nMaterialOperators.material_container_helper_op\nGet material container helper operator.\nMaterialOperators.material_provider\nGet material_provider.\nMaterialOperators.material_support_provider\nGet material_support_provider.\nMaterialOperators.result_info_provider\nGet result_info_provider.\nMaterialOperators\nOperator\nOperator\nMaterialsContainer\nOperator\nResultInfo\nMaterialOperators.material_container_helper_op\nMaterialOperators.material_provider\nMaterialOperators.material_support_provider\nMaterialOperators.result_info_provider" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.dpf_material_id", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.dpf_material_id.html#ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.dpf_material_id", - "title": "dpf_material_id > dpf_material_id > dpf_material_id", - "section": "dpf_material_id > dpf_material_id", - "text": "MaterialMetadata.dpf_material_id: int = 0\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.html#ansys.dpf.composites.layup_info.material_operators.MaterialOperators", + "title": "MaterialOperators > MaterialOperators > MaterialOperators", + "section": "MaterialOperators > MaterialOperators", + "text": "class ansys.dpf.composites.layup_info.material_operators.MaterialOperators(material_provider, material_support_provider, result_info_provider)\n\nProvides the container for material-related operators.\n\nParameters\n\nmaterial_support_provider (Operator) – The material support provider takes care of mapping the materials in the RST file to\nthe materials in the composite definitions.\nThe material support contains all the materials from the RST file. Currently\nthe output of this operator cannot be inspected in Python.\n\nmaterial_provider (Operator) – Outputs the MaterialsContainer, which can be used to\nevaluate material properties. This container cannot be\nqueried in Python, but it can be passed to other DPF operators\nthat evaluate the properties.\n\nresult_info_provider (Operator) – Provides the ResultInfo object.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nMaterialOperators.material_container_helper_op\n\nGet material container helper operator.\n\nMaterialOperators.material_provider\n\nGet material_provider.\n\nMaterialOperators.material_support_provider\n\nGet material_support_provider.\n\nMaterialOperators.result_info_provider\n\nGet result_info_provider.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.eval_ins", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.eval_ins.html#eval_ins", - "title": "eval_ins", - "section": "eval_ins", - "text": "Whether to consider interlaminar normal stresses (s3) and compute them for layered shells.\nbool\neval_ins\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize.html#capitalize", + "title": "capitalize", + "section": "capitalize", + "text": "Return a capitalized version of the string.\nMore specifically, make the first character have upper case and the rest lower\ncase.\ncapitalize" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.eval_ins", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.eval_ins.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.eval_ins", - "title": "eval_ins > eval_ins > eval_ins", - "section": "eval_ins > eval_ins", - "text": "property VonMisesCriterion.eval_ins: bool\n\nWhether to consider interlaminar normal stresses (s3) and compute them for layered shells.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize", + "title": "capitalize > capitalize > capitalize", + "section": "capitalize > capitalize", + "text": "FailureMeasureEnum.capitalize(/)\n\nReturn a capitalized version of the string.\n\nMore specifically, make the first character have upper case and the rest lower\ncase.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.solver_material_id", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.solver_material_id.html#solver_material_id", - "title": "solver_material_id", - "section": "solver_material_id", - "text": "solver_material_id" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e12", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e12.html#e12", + "title": "e12", + "section": "e12", + "text": "In-plane shear strains e12 of each ply.\nndarray[Any, dtype[float64]]\ne12\nndarray\nAny\ndtype\nfloat64" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e12", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e12.html#ansys.dpf.composites.sampling_point.SamplingPoint.e12", + "title": "e12 > e12 > e12", + "section": "e12 > e12", + "text": "property SamplingPoint.e12: ndarray[Any, dtype[float64]]\n\nIn-plane shear strains e12 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.solver_material_id", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.solver_material_id.html#ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.solver_material_id", - "title": "solver_material_id > solver_material_id > solver_material_id", - "section": "solver_material_id > solver_material_id", - "text": "MaterialMetadata.solver_material_id: int | None = None\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma.html#cma", + "title": "cma", + "section": "cma", + "text": "Activates the failure evaluation of the matrix due to tension.\nbool\ncma\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e13.html#e13", - "title": "e13", - "section": "e13", - "text": "e13" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma", + "title": "cma > cma > cma", + "section": "cma > cma", + "text": "property CuntzeCriterion.cma: bool\n\nActivates the failure evaluation of the matrix due to tension.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e13.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e13", - "title": "e13 > e13 > e13", - "section": "e13 > e13", - "text": "FailureModeEnum.e13 = 150\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_json.html#to_json", + "title": "to_json", + "section": "to_json", + "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE.html#not_available", - "title": "NOT_AVAILABLE", - "section": "NOT_AVAILABLE", - "text": "NOT_AVAILABLE" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_json.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.to_json", + "title": "to_json > to_json > to_json", + "section": "to_json > to_json", + "text": "LaRCCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE.html#ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE", - "title": "NOT_AVAILABLE > NOT_AVAILABLE > NOT_AVAILABLE", - "section": "NOT_AVAILABLE > NOT_AVAILABLE", - "text": "LayupModelContextType.NOT_AVAILABLE = 0\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isspace", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isspace.html#isspace", + "title": "isspace", + "section": "isspace", + "text": "Return True if the string is a whitespace string, False otherwise.\nA string is whitespace if all characters in the string are whitespace and there\nis at least one character in the string.\nisspace" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.mode", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.mode.html#mode", - "title": "mode", - "section": "mode", - "text": "mode" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isspace", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isspace.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isspace", + "title": "isspace > isspace > isspace", + "section": "isspace > isspace", + "text": "FailureMeasureEnum.isspace(/)\n\nReturn True if the string is a whitespace string, False otherwise.\n\nA string is whitespace if all characters in the string are whitespace and there\nis at least one character in the string.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.mode", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.mode.html#ansys.dpf.composites.sampling_point.FailureResult.mode", - "title": "mode > mode > mode", - "section": "mode > mode", - "text": "FailureResult.mode: str\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wb", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wb.html#wb", + "title": "wb", + "section": "wb", + "text": "wb" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ho", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ho.html#ho", - "title": "ho", - "section": "ho", - "text": "ho" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wb", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wb.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.wb", + "title": "wb > wb > wb", + "section": "wb > wb", + "text": "FailureModeEnum.wb = 321\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ho", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ho.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.ho", - "title": "ho > ho > ho", - "section": "ho > ho", - "text": "FailureModeEnum.ho = 700\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_mesh", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_mesh.html#get_mesh", + "title": "get_mesh", + "section": "get_mesh", + "text": "Get the underlying DPF meshed region.\nThe meshed region contains the lay-up information.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nMeshedRegion\nget_mesh\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nMeshedRegion" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3t.html#s3t", - "title": "s3t", - "section": "s3t", - "text": "s3t" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_mesh", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_mesh.html#ansys.dpf.composites.composite_model.CompositeModel.get_mesh", + "title": "get_mesh > get_mesh > get_mesh", + "section": "get_mesh > get_mesh", + "text": "CompositeModel.get_mesh(composite_definition_label=None)\n\nGet the underlying DPF meshed region.\n\nThe meshed region contains the lay-up information.\n\nParameters\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nMeshedRegion\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s3t", - "title": "s3t > s3t > s3t", - "section": "s3t > s3t", - "text": "FailureModeEnum.s3t = 231\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.html#combinedfailurecriterion", + "title": "CombinedFailureCriterion", + "section": "CombinedFailureCriterion", + "text": "Defines the combined failure criterion.\nThis class can be used in combination with the failure evaluator operator in\nDPF Composites.\nCombinedFailureCriterion.insert(fc)\nAdd a failure criterion to a list of selected criteria.\nCombinedFailureCriterion.remove(key)\nRemove a failure criterion.\nCombinedFailureCriterion.to_dict()\nReturn the combined failure criterion as a dictionary.\nCombinedFailureCriterion.to_json()\nReturn the combined failure criterion as a JSON dictionary.\nCombinedFailureCriterion.JSON_DICT_KEY\n\nCombinedFailureCriterion.failure_criteria\nList of failure criteria.\nCombinedFailureCriterion.name\nName of the combined failure criterion.\nCombinedFailureCriterion\nCombinedFailureCriterion.insert\nCombinedFailureCriterion.remove\nCombinedFailureCriterion.to_dict\nCombinedFailureCriterion.to_json\nCombinedFailureCriterion.JSON_DICT_KEY\nCombinedFailureCriterion.failure_criteria\nCombinedFailureCriterion.name" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmc.html#pmc", - "title": "pmc", - "section": "pmc", - "text": "Whether to activate the failure evaluation regarding matrix failure due to shear failure.\nbool\npmc\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion", + "title": "CombinedFailureCriterion > CombinedFailureCriterion > CombinedFailureCriterion", + "section": "CombinedFailureCriterion > CombinedFailureCriterion", + "text": "class ansys.dpf.composites.failure_criteria.CombinedFailureCriterion(name='CombinedFailureCriterion', failure_criteria=())\n\nDefines the combined failure criterion.\n\nThis class can be used in combination with the failure evaluator operator in\nDPF Composites.\n\nExamples\n\n>>> combined_failure = CombinedFailureCriterion(\"max_stress 3D\")\n>>> max_stress = MaxStressCriterion(s1=True, s2=True, s3=True, s12=True, s13=True, s23=True)\n>>> combined_failure.insert(max_stress)\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nCombinedFailureCriterion.insert(fc)\n\nAdd a failure criterion to a list of selected criteria.\n\nCombinedFailureCriterion.remove(key)\n\nRemove a failure criterion.\n\nCombinedFailureCriterion.to_dict()\n\nReturn the combined failure criterion as a dictionary.\n\nCombinedFailureCriterion.to_json()\n\nReturn the combined failure criterion as a JSON dictionary.\n\n\n\nAttributes\n\n\n\n\n\n\n\nCombinedFailureCriterion.JSON_DICT_KEY\n\n\n\nCombinedFailureCriterion.failure_criteria\n\nList of failure criteria.\n\nCombinedFailureCriterion.name\n\nName of the combined failure criterion.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmc.html#ansys.dpf.composites.failure_criteria.PuckCriterion.pmc", - "title": "pmc > pmc > pmc", - "section": "pmc > pmc", - "text": "property PuckCriterion.pmc: bool\n\nWhether to activate the failure evaluation regarding matrix failure due to shear failure.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmb", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmb.html#wf_cmb", + "title": "wf_cmb", + "section": "wf_cmb", + "text": "Weighting factor of matrix failure due to compression (cmb).\nfloat\nwf_cmb\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.BOT", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.BOT.html#bot", - "title": "BOT", - "section": "BOT", - "text": "BOT" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmb", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmb.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmb", + "title": "wf_cmb > wf_cmb > wf_cmb", + "section": "wf_cmb > wf_cmb", + "text": "property CuntzeCriterion.wf_cmb: float\n\nWeighting factor of matrix failure due to compression (cmb).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.BOT", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.BOT.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.BOT", - "title": "BOT > BOT > BOT", - "section": "BOT > BOT", - "text": "SpotReductionStrategy.BOT = 'BOT'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_sampling_point", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_sampling_point.html#get_sampling_point", + "title": "get_sampling_point", + "section": "get_sampling_point", + "text": "Get a sampling point for an element ID and failure criteria.\ncombined_criterion (CombinedFailureCriterion) – Combined failure criterion to evaluate.\nelement_id (int) – Element ID or label of the sampling point.\ntime (Optional[float], default: None) – Time or frequency at which to evaluate the sampling point. If None,\nthe last time or frequency in the result file is used.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nSamplingPoint\nget_sampling_point\nCombinedFailureCriterion\nint\nOptional\nfloat\nNone\nNone\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nSamplingPoint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu12", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu12.html#engineering_constants_nu12", - "title": "Engineering_Constants_nu12", - "section": "Engineering_Constants_nu12", - "text": "Engineering_Constants_nu12" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_sampling_point", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_sampling_point.html#ansys.dpf.composites.composite_model.CompositeModel.get_sampling_point", + "title": "get_sampling_point > get_sampling_point > get_sampling_point", + "section": "get_sampling_point > get_sampling_point", + "text": "CompositeModel.get_sampling_point(combined_criterion, element_id, time=None, composite_definition_label=None)\n\nGet a sampling point for an element ID and failure criteria.\n\nParameters\n\ncombined_criterion (CombinedFailureCriterion) – Combined failure criterion to evaluate.\n\nelement_id (int) – Element ID or label of the sampling point.\n\ntime (Optional[float], default: None) – Time or frequency at which to evaluate the sampling point. If None,\nthe last time or frequency in the result file is used.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nSamplingPoint\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu12", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu12.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu12", - "title": "Engineering_Constants_nu12 > Engineering_Constants_nu12 > Engineering_Constants_nu12", - "section": "Engineering_Constants_nu12 > Engineering_Constants_nu12", - "text": "MaterialProperty.Engineering_Constants_nu12: str = 'poisson_ratio_xy'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e23.html#wf_e23", + "title": "wf_e23", + "section": "wf_e23", + "text": "Weighting factor of the failure mode e23.\nfloat\nwf_e23\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.THICKNESSES", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.THICKNESSES.html#thicknesses", - "title": "THICKNESSES", - "section": "THICKNESSES", - "text": "THICKNESSES" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e23.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e23", + "title": "wf_e23 > wf_e23 > wf_e23", + "section": "wf_e23 > wf_e23", + "text": "property MaxStrainCriterion.wf_e23: float\n\nWeighting factor of the failure mode e23.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.THICKNESSES", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.THICKNESSES.html#ansys.dpf.composites.layup_info.LayerProperty.THICKNESSES", - "title": "THICKNESSES > THICKNESSES > THICKNESSES", - "section": "THICKNESSES > THICKNESSES", - "text": "LayerProperty.THICKNESSES = 0\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.html#sym3x3tensorcomponent", + "title": "Sym3x3TensorComponent", + "section": "Sym3x3TensorComponent", + "text": "Provides tensor indices for symmetrical 3x3 tensors.\nSym3x3TensorComponent.TENSOR11\n\nSym3x3TensorComponent.TENSOR22\n\nSym3x3TensorComponent.TENSOR33\n\nSym3x3TensorComponent.TENSOR21\n\nSym3x3TensorComponent.TENSOR31\n\nSym3x3TensorComponent.TENSOR32\n\nSym3x3TensorComponent\nSym3x3TensorComponent.TENSOR11\nSym3x3TensorComponent.TENSOR22\nSym3x3TensorComponent.TENSOR33\nSym3x3TensorComponent.TENSOR21\nSym3x3TensorComponent.TENSOR31\nSym3x3TensorComponent.TENSOR32" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_json.html#to_json", - "title": "to_json", - "section": "to_json", - "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.html#ansys.dpf.composites.constants.Sym3x3TensorComponent", + "title": "Sym3x3TensorComponent > Sym3x3TensorComponent > Sym3x3TensorComponent", + "section": "Sym3x3TensorComponent > Sym3x3TensorComponent", + "text": "class ansys.dpf.composites.constants.Sym3x3TensorComponent(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides tensor indices for symmetrical 3x3 tensors.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nSym3x3TensorComponent.TENSOR11\n\n\n\nSym3x3TensorComponent.TENSOR22\n\n\n\nSym3x3TensorComponent.TENSOR33\n\n\n\nSym3x3TensorComponent.TENSOR21\n\n\n\nSym3x3TensorComponent.TENSOR31\n\n\n\nSym3x3TensorComponent.TENSOR32\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_json.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_json", - "title": "to_json > to_json > to_json", - "section": "to_json > to_json", - "text": "CuntzeCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.wf.html#wf", + "title": "wf", + "section": "wf", + "text": "Weighting factor of this failure criterion.\nfloat\nwf\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR.html#inverse_reserve_factor", - "title": "INVERSE_RESERVE_FACTOR", - "section": "INVERSE_RESERVE_FACTOR", - "text": "INVERSE_RESERVE_FACTOR" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.wf.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.wf", + "title": "wf > wf > wf", + "section": "wf > wf", + "text": "property TsaiHillCriterion.wf: float\n\nWeighting factor of this failure criterion.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR", - "title": "INVERSE_RESERVE_FACTOR > INVERSE_RESERVE_FACTOR > INVERSE_RESERVE_FACTOR", - "section": "INVERSE_RESERVE_FACTOR > INVERSE_RESERVE_FACTOR", - "text": "FailureMeasureEnum.INVERSE_RESERVE_FACTOR: str = 'inverse_reserve_factor'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.is_uptodate", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.is_uptodate.html#is_uptodate", + "title": "is_uptodate", + "section": "is_uptodate", + "text": "True if the Sampling Point is up-to-date.\nbool\nis_uptodate\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.html#hashincriterion", - "title": "HashinCriterion", - "section": "HashinCriterion", - "text": "Defines the Hashin failure criterion for UD reinforced materials.\nhf (bool, default: True) – Whether to activate the failure evaluation regarding fiber failure.\nhm (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure.\nhd (bool, default: False) – Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used. The latter one also supports the failure mode delamination.\nwf_hf (float, default: 1.0) – Weighting factor of the fiber failure (hf) mode.\nwf_hm (float, default: 1.0) – Weighting factor of the matrix failure (hm) mode.\nwf_hd (float, default: 1.0) – Weighting factor of the delamination (hd) mode.\nHashinCriterion.to_dict()\n\nHashinCriterion.to_json()\n\nHashinCriterion.active\nThe failure criterion is suppressed if active is False.\nHashinCriterion.dim\nWhether the 2D or 3D formulation of the criterion is used.\nHashinCriterion.hd\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\nHashinCriterion.hf\nWhether to activate the failure evaluation regarding fiber failure.\nHashinCriterion.hm\nWhether to activate the failure evaluation regarding matrix failure.\nHashinCriterion.name\nName of the failure criterion.\nHashinCriterion.wf_hd\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\nHashinCriterion.wf_hf\nWhether to activate the failure evaluation regarding fiber failure.\nHashinCriterion.wf_hm\nWhether to activate the failure evaluation regarding matrix failure.\nHashinCriterion\nbool\nTrue\nbool\nTrue\nbool\nFalse\nint\n2\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nHashinCriterion.to_dict\nHashinCriterion.to_json\nHashinCriterion.active\nHashinCriterion.dim\nHashinCriterion.hd\nHashinCriterion.hf\nHashinCriterion.hm\nHashinCriterion.name\nHashinCriterion.wf_hd\nHashinCriterion.wf_hf\nHashinCriterion.wf_hm" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.is_uptodate", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.is_uptodate.html#ansys.dpf.composites.sampling_point.SamplingPoint.is_uptodate", + "title": "is_uptodate > is_uptodate > is_uptodate", + "section": "is_uptodate > is_uptodate", + "text": "property SamplingPoint.is_uptodate: bool\n\nTrue if the Sampling Point is up-to-date.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.html#ansys.dpf.composites.failure_criteria.HashinCriterion", - "title": "HashinCriterion > HashinCriterion > HashinCriterion", - "section": "HashinCriterion > HashinCriterion", - "text": "class ansys.dpf.composites.failure_criteria.HashinCriterion(*, hf=True, hm=True, hd=False, dim=2, wf_hf=1.0, wf_hm=1.0, wf_hd=1.0)\n\nDefines the Hashin failure criterion for UD reinforced materials.\n\nParameters\n\nhf (bool, default: True) – Whether to activate the failure evaluation regarding fiber failure.\n\nhm (bool, default: True) – Whether to activate the failure evaluation regarding matrix failure.\n\nhd (bool, default: False) – Whether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\ndim (int, default: 2) – Whether the 2D or 3D formulation of the criterion is used. The latter one also supports the failure mode delamination.\n\nwf_hf (float, default: 1.0) – Weighting factor of the fiber failure (hf) mode.\n\nwf_hm (float, default: 1.0) – Weighting factor of the matrix failure (hm) mode.\n\nwf_hd (float, default: 1.0) – Weighting factor of the delamination (hd) mode.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nHashinCriterion.to_dict()\n\n\n\nHashinCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nHashinCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nHashinCriterion.dim\n\nWhether the 2D or 3D formulation of the criterion is used.\n\nHashinCriterion.hd\n\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\nHashinCriterion.hf\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nHashinCriterion.hm\n\nWhether to activate the failure evaluation regarding matrix failure.\n\nHashinCriterion.name\n\nName of the failure criterion.\n\nHashinCriterion.wf_hd\n\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\nHashinCriterion.wf_hf\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nHashinCriterion.wf_hm\n\nWhether to activate the failure evaluation regarding matrix failure.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s23", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s23.html#s23", + "title": "s23", + "section": "s23", + "text": "Out-of-plane shear stresses s23 of each ply.\nndarray[Any, dtype[float64]]\ns23\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.get_dpf_material_id_by_analyis_ply_map", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.get_dpf_material_id_by_analyis_ply_map.html#get_dpf_material_id_by_analyis_ply_map", - "title": "get_dpf_material_id_by_analyis_ply_map", - "section": "get_dpf_material_id_by_analyis_ply_map", - "text": "Get Dict that maps analysis ply names to dpf_material_ids.\nmesh (MeshedRegion) – DPF Meshed region enriched with lay-up information\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source with rst file or streams_provider. The streams provider is\navailable from CompositeModel.core_model (under metadata.streams_provider).\nCache the output because the computation can be performance-critical.\ndict[str, int64]\nget_dpf_material_id_by_analyis_ply_map\nMeshedRegion\nDataSources\nOperator\nCompositeModel.core_model\ndict\nstr\nint64" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s23", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s23.html#ansys.dpf.composites.sampling_point.SamplingPoint.s23", + "title": "s23 > s23 > s23", + "section": "s23 > s23", + "text": "property SamplingPoint.s23: ndarray[Any, dtype[float64]]\n\nOut-of-plane shear stresses s23 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.get_dpf_material_id_by_analyis_ply_map", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.get_dpf_material_id_by_analyis_ply_map.html#ansys.dpf.composites.layup_info.get_dpf_material_id_by_analyis_ply_map", - "title": "get_dpf_material_id_by_analyis_ply_map > get_dpf_material_id_by_analyis_ply_map > get_dpf_material_id_by_analyis_ply_map", - "section": "get_dpf_material_id_by_analyis_ply_map > get_dpf_material_id_by_analyis_ply_map", - "text": "ansys.dpf.composites.layup_info.get_dpf_material_id_by_analyis_ply_map(mesh, data_source_or_streams_provider)\n\nGet Dict that maps analysis ply names to dpf_material_ids.\n\nParameters\n\nmesh (MeshedRegion) – DPF Meshed region enriched with lay-up information\n\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source with rst file or streams_provider. The streams provider is\navailable from CompositeModel.core_model (under metadata.streams_provider).\n\nNotes\n\nCache the output because the computation can be performance-critical.\n\nReturn type\n\ndict[str, int64]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K1", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K1.html#thermal_conductivity_k1", - "title": "Thermal_Conductivity_K1", - "section": "Thermal_Conductivity_K1", - "text": "Thermal_Conductivity_K1" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "CoreFailureCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K1", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K1.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K1", - "title": "Thermal_Conductivity_K1 > Thermal_Conductivity_K1 > Thermal_Conductivity_K1", - "section": "Thermal_Conductivity_K1 > Thermal_Conductivity_K1", - "text": "MaterialProperty.Thermal_Conductivity_K1: str = 'thermal_conductivity_x_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYt.html#strain_limits_eyt", + "title": "Strain_Limits_eYt", + "section": "Strain_Limits_eYt", + "text": "Strain_Limits_eYt" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.partition", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.partition.html#partition", - "title": "partition", - "section": "partition", - "text": "Partition the string into three parts using the given separator.\nThis will search for the separator in the string. If the separator is found,\nreturns a 3-tuple containing the part before the separator, the separator\nitself, and the part after it.\nIf the separator is not found, returns a 3-tuple containing the original string\nand two empty strings.\npartition" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eYt", + "title": "Strain_Limits_eYt > Strain_Limits_eYt > Strain_Limits_eYt", + "section": "Strain_Limits_eYt > Strain_Limits_eYt", + "text": "MaterialProperty.Strain_Limits_eYt: str = 'strain_tensile_y_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.partition", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.partition.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.partition", - "title": "partition > partition > partition", - "section": "partition > partition", - "text": "FailureMeasureEnum.partition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nThis will search for the separator in the string. If the separator is found,\nreturns a 3-tuple containing the part before the separator, the separator\nitself, and the part after it.\n\nIf the separator is not found, returns a 3-tuple containing the original string\nand two empty strings.\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/005_get_layup_properties_example", + "href": "examples/gallery_examples/005_get_layup_properties_example.html#lay-up-properties", + "title": "Lay-up properties", + "section": "Lay-up properties", + "text": "This example shows how to efficiently extract elemental lay-up properties such as\nthickness, angles, and analysis ply names. These are typically used for layer-wise\npostprocessing and data filtering.\nTo get the full layer information of an element, including results,\nconsider using the SamplingPoint class.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nLay-up properties\nSamplingPoint\ncomposite_files_from_workbench_harmonic_analysis()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.RST", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.RST.html#rst", - "title": "RST", - "section": "RST", - "text": "RST" + "objectID": "examples/gallery_examples/005_get_layup_properties_example", + "href": "examples/gallery_examples/005_get_layup_properties_example.html#set-up-analysis", + "title": "Lay-up properties > Set up analysis", + "section": "Set up analysis", + "text": "Setting up the analysis consists of importing dependencies, connecting to the\nDPF server, and retrieving the example files.\nImport dependencies.\nStart a DPF server and copy the example files into the current working directory.\nSet up analysis" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.RST", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.RST.html#ansys.dpf.composites.layup_info.LayupModelContextType.RST", - "title": "RST > RST > RST", - "section": "RST > RST", - "text": "LayupModelContextType.RST = 2\n\n" + "objectID": "examples/gallery_examples/005_get_layup_properties_example", + "href": "examples/gallery_examples/005_get_layup_properties_example.html#set-up-model", + "title": "Lay-up properties > Set up model", + "section": "Set up model", + "text": "Set up the composite model.\nSet up model" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.sc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.sc.html#sc", - "title": "sc", - "section": "sc", - "text": "sc" + "objectID": "examples/gallery_examples/005_get_layup_properties_example", + "href": "examples/gallery_examples/005_get_layup_properties_example.html#get-lay-up-properties", + "title": "Lay-up properties > Get lay-up properties", + "section": "Get lay-up properties", + "text": "Get lay-up properties for all elements and show the first one as an example.\nGet lay-up properties" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.sc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.sc.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.sc", - "title": "sc > sc > sc", - "section": "sc > sc", - "text": "FailureModeEnum.sc = 330\n\n" + "objectID": "examples/gallery_examples/005_get_layup_properties_example", + "href": "examples/gallery_examples/005_get_layup_properties_example.html#plot-lay-up-properties", + "title": "Lay-up properties > Plot lay-up properties", + "section": "Plot lay-up properties", + "text": "Plot basic layer properties (layer thicknesses, angles, and analysis ply names).\nTotal running time of the script: (0 minutes 1.329 seconds)\nDownload Jupyter notebook: 005_get_layup_properties_example.ipynb\nDownload Python source code: 005_get_layup_properties_example.py\nDownload zipped: 005_get_layup_properties_example.zip\nGallery generated by Sphinx-Gallery\nPlot lay-up properties\nDownload Jupyter notebook: 005_get_layup_properties_example.ipynb\nDownload Python source code: 005_get_layup_properties_example.py\nDownload zipped: 005_get_layup_properties_example.zip" }, { "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.dim", @@ -8204,430 +8127,507 @@ "text": "property LaRCCriterion.dim: int\n\nWhether the 2D or 3D formulation of the criterion is used. 2D is equivalent to LaRC03, and 3D is equivalent to LaRC04.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lfc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lfc.html#wf_lfc", - "title": "wf_lfc", - "section": "wf_lfc", - "text": "Weighting factor of fiber failure due to compression (lfc).\nfloat\nwf_lfc\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.honeycomb_core_coeff", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.honeycomb_core_coeff.html#honeycomb_core_coeff", + "title": "honeycomb_core_coeff", + "section": "honeycomb_core_coeff", + "text": "Wrinkling coefficient (reduction factor) for honeycombs. The default is 0.33.\nfloat\nhoneycomb_core_coeff\n0.33\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lfc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lfc.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lfc", - "title": "wf_lfc > wf_lfc > wf_lfc", - "section": "wf_lfc > wf_lfc", - "text": "property LaRCCriterion.wf_lfc: float\n\nWeighting factor of fiber failure due to compression (lfc).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.honeycomb_core_coeff", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.honeycomb_core_coeff.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.honeycomb_core_coeff", + "title": "honeycomb_core_coeff > honeycomb_core_coeff > honeycomb_core_coeff", + "section": "honeycomb_core_coeff > honeycomb_core_coeff", + "text": "property FaceSheetWrinklingCriterion.honeycomb_core_coeff: float\n\nWrinkling coefficient (reduction factor) for honeycombs. The default is 0.33.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_neg", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_neg.html#p21_neg", - "title": "p21_neg", - "section": "p21_neg", - "text": "Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for compression.\nfloat\np21_neg\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.expression", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.expression.html#expression", + "title": "expression", + "section": "expression", + "text": "Type of the result. The supported type is \"composite_failure\".\nstr\nexpression\n\"composite_failure\"\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_neg", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_neg.html#ansys.dpf.composites.failure_criteria.PuckCriterion.p21_neg", - "title": "p21_neg > p21_neg > p21_neg", - "section": "p21_neg > p21_neg", - "text": "property PuckCriterion.p21_neg: float\n\nGlobal inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for compression.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.expression", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.expression.html#ansys.dpf.composites.result_definition.ResultDefinition.expression", + "title": "expression > expression > expression", + "section": "expression > expression", + "text": "property ResultDefinition.expression: str\n\nType of the result. The supported type is \"composite_failure\".\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pma", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pma.html#pma", - "title": "pma", - "section": "pma", - "text": "Whether to activate the failure evaluation regarding matrix failure due to tension.\nbool\npma\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_json.html#to_json", + "title": "to_json", + "section": "to_json", + "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pma", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pma.html#ansys.dpf.composites.failure_criteria.PuckCriterion.pma", - "title": "pma > pma > pma", - "section": "pma > pma", - "text": "property PuckCriterion.pma: bool\n\nWhether to activate the failure evaluation regarding matrix failure due to tension.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_json.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_json", + "title": "to_json > to_json > to_json", + "section": "to_json > to_json", + "text": "CuntzeCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1c.html#s1c", + "title": "s1c", + "section": "s1c", + "text": "s1c" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "CoreFailureCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s1c", + "title": "s1c > s1c > s1c", + "section": "s1c > s1c", + "text": "FailureModeEnum.s1c = 212\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s12", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s12.html#s12", - "title": "s12", - "section": "s12", - "text": "In-plane shear stresses s12 of each ply.\nndarray[Any, dtype[float64]]\ns12\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e1.html#wf_e1", + "title": "wf_e1", + "section": "wf_e1", + "text": "Weighting factor of the failure mode e1.\nfloat\nwf_e1\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s12", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s12.html#ansys.dpf.composites.sampling_point.SamplingPoint.s12", - "title": "s12 > s12 > s12", - "section": "s12 > s12", - "text": "property SamplingPoint.s12: ndarray[Any, dtype[float64]]\n\nIn-plane shear stresses s12 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e1.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e1", + "title": "wf_e1 > wf_e1 > wf_e1", + "section": "wf_e1 > wf_e1", + "text": "property MaxStrainCriterion.wf_e1: float\n\nWeighting factor of the failure mode e1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.dim.html#dim", - "title": "dim", - "section": "dim", - "text": "Whether the 2D or 3D formulation of the criterion is used.\nint\ndim\nint" + "objectID": "examples/gallery_examples/012_fatigue_example", + "href": "examples/gallery_examples/012_fatigue_example.html#evaluate-fatigue-for-a-composite-plate", + "title": "Evaluate fatigue for a composite plate", + "section": "Evaluate fatigue for a composite plate", + "text": "This example shows how to evaluate fatigue for a flat plate.\nIt shows how you can use PyPDF Composites to select specific layers and define a custom\ncombination method. For this example, the custom combination method is stress in fibre\ndirection.\nA random load time series is created. Taking into account that the load is assumed\nproportional, rainflow counting is applied to the load time series.\nLoad ranges are then applied on the stress combination method, and damage is evaluated\nby using a dummy S-N curve.\nBe aware that the fatpack package is not developed by Ansys, so it is the responsibility\nof the user to verify that it works as expected. For more information, see the\nfatpack package,\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nEvaluate fatigue for a composite plate\ncomposite_files_from_workbench_harmonic_analysis()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.dim.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.dim", - "title": "dim > dim > dim", - "section": "dim > dim", - "text": "property CuntzeCriterion.dim: int\n\nWhether the 2D or 3D formulation of the criterion is used.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/012_fatigue_example", + "href": "examples/gallery_examples/012_fatigue_example.html#set-up-analysis", + "title": "Evaluate fatigue for a composite plate > Set up analysis", + "section": "Set up analysis", + "text": "Setting up the analysis consists of loading the required modules, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries and numpy, matplotlib and fatpack\nStart a DPF server and copy the example files into the current working directory.\nCreate a composite model\nSet up analysis" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cft", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cft.html#wf_cft", - "title": "wf_cft", - "section": "wf_cft", - "text": "Weighting factor of fiber failure due to tension (cft).\nfloat\nwf_cft\nfloat" + "objectID": "examples/gallery_examples/012_fatigue_example", + "href": "examples/gallery_examples/012_fatigue_example.html#read-stresses-and-define-a-specific-layer-and-a-component-of-stress-tensor", + "title": "Evaluate fatigue for a composite plate > Read stresses and define a specific layer and a component of stress tensor", + "section": "Read stresses and define a specific layer and a component of stress tensor", + "text": "Read stresses\nSelect layer P1L1__ModelingPly.2\nSelect Sigma11 as the combination method\nRead stresses and define a specific layer and a component of stress tensor" + }, + { + "objectID": "examples/gallery_examples/012_fatigue_example", + "href": "examples/gallery_examples/012_fatigue_example.html#load-time-series-and-apply-rainflow-counting", + "title": "Evaluate fatigue for a composite plate > Load time series and apply rainflow counting", + "section": "Load time series and apply rainflow counting", + "text": "A random time series is created. Load is assumed proportional, so rainflow counting\ncan be directly done on the load time series to get the load ranges.\nNo mean stress correction is applied.\nFatpack package is used for doing the rainflow counting\nLoad time series and apply rainflow counting" + }, + { + "objectID": "examples/gallery_examples/012_fatigue_example", + "href": "examples/gallery_examples/012_fatigue_example.html#s-n-curve", + "title": "Evaluate fatigue for a composite plate > S-N curve", + "section": "S-N curve", + "text": "A dummy S-N curve is created. Note that this curve is not based on any\nexperimental data. Sc is chosen to be twice the orthotropic stress limit in the fiber direction.\nand Nc is set to 1.\nS-N curve" + }, + { + "objectID": "examples/gallery_examples/012_fatigue_example", + "href": "examples/gallery_examples/012_fatigue_example.html#damage-evaluation", + "title": "Evaluate fatigue for a composite plate > Damage evaluation", + "section": "Damage evaluation", + "text": "Stress S11 at time 1 and layer P1L1__ModelingPly.2 are read\nfor each load range. Its damage is evaluated using the dummy S-N curve.\nPlot damage\nDamage evaluation" + }, + { + "objectID": "examples/gallery_examples/012_fatigue_example", + "href": "examples/gallery_examples/012_fatigue_example.html#identify-the-element-with-the-maximum-damage", + "title": "Evaluate fatigue for a composite plate > Identify the element with the maximum damage", + "section": "Identify the element with the maximum damage", + "text": "Total running time of the script: (0 minutes 2.991 seconds)\nDownload Jupyter notebook: 012_fatigue_example.ipynb\nDownload Python source code: 012_fatigue_example.py\nDownload zipped: 012_fatigue_example.zip\nGallery generated by Sphinx-Gallery\nIdentify the element with the maximum damage\nDownload Jupyter notebook: 012_fatigue_example.ipynb\nDownload Python source code: 012_fatigue_example.py\nDownload zipped: 012_fatigue_example.zip" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR22", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR22.html#tensor22", + "title": "TENSOR22", + "section": "TENSOR22", + "text": "TENSOR22" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cft", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cft.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cft", - "title": "wf_cft > wf_cft > wf_cft", - "section": "wf_cft > wf_cft", - "text": "property CuntzeCriterion.wf_cft: float\n\nWeighting factor of fiber failure due to tension (cft).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR22", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR22.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR22", + "title": "TENSOR22 > TENSOR22 > TENSOR22", + "section": "TENSOR22 > TENSOR22", + "text": "Sym3x3TensorComponent.TENSOR22 = 1\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE.html#failure_mode", - "title": "FAILURE_MODE", - "section": "FAILURE_MODE", - "text": "FAILURE_MODE" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal.html#isdecimal", + "title": "isdecimal", + "section": "isdecimal", + "text": "Return True if the string is a decimal string, False otherwise.\nA string is a decimal string if all characters in the string are decimal and\nthere is at least one character in the string.\nisdecimal" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE", - "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE.html#ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE", - "title": "FAILURE_MODE > FAILURE_MODE > FAILURE_MODE", - "section": "FAILURE_MODE > FAILURE_MODE", - "text": "FailureOutput.FAILURE_MODE = 0\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal", + "title": "isdecimal > isdecimal > isdecimal", + "section": "isdecimal > isdecimal", + "text": "FailureMeasureEnum.isdecimal(/)\n\nReturn True if the string is a decimal string, False otherwise.\n\nA string is a decimal string if all characters in the string are decimal and\nthere is at least one character in the string.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_yz", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_yz.html#tsai_wu_constant_yz", - "title": "Tsai_Wu_Constant_yz", - "section": "Tsai_Wu_Constant_yz", - "text": "Tsai_Wu_Constant_yz" + "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.load_composites_plugin", + "href": "api/_autosummary/ansys.dpf.composites.server_helpers.load_composites_plugin.html#load_composites_plugin", + "title": "load_composites_plugin", + "section": "load_composites_plugin", + "text": "Load composites plugins and its dependencies.\nserver (BaseServer)\nansys_path (Optional[str], default: None) – Ansys root path, for example C:\\Program Files\\ANSYS Inc\\v232.\nIf None, it is assumed that all the plugins and their dependencies\nare found in the PATH/LD_LIBRARY_PATH. If ansys_path\nis set, the composite_operators and\nAns.Dpf.EngineeringData plugins are loaded from their location\nin the installer.\nNone\nload_composites_plugin\nBaseServer\nOptional\nstr\nNone\nNone" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_yz", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_yz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_yz", - "title": "Tsai_Wu_Constant_yz > Tsai_Wu_Constant_yz > Tsai_Wu_Constant_yz", - "section": "Tsai_Wu_Constant_yz > Tsai_Wu_Constant_yz", - "text": "MaterialProperty.Tsai_Wu_Constant_yz: str = 'coupling_coef_yz_tsai_wu'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.server_helpers.load_composites_plugin", + "href": "api/_autosummary/ansys.dpf.composites.server_helpers.load_composites_plugin.html#ansys.dpf.composites.server_helpers.load_composites_plugin", + "title": "load_composites_plugin > load_composites_plugin > load_composites_plugin", + "section": "load_composites_plugin > load_composites_plugin", + "text": "ansys.dpf.composites.server_helpers.load_composites_plugin(server, ansys_path=None)\n\nLoad composites plugins and its dependencies.\n\nParameters\n\nserver (BaseServer)\n\nansys_path (Optional[str], default: None) – Ansys root path, for example C:\\Program Files\\ANSYS Inc\\v232.\nIf None, it is assumed that all the plugins and their dependencies\nare found in the PATH/LD_LIBRARY_PATH. If ansys_path\nis set, the composite_operators and\nAns.Dpf.EngineeringData plugins are loaded from their location\nin the installer.\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc.html#wf_pmc", - "title": "wf_pmc", - "section": "wf_pmc", - "text": "Weighting factor of the matrix failure (pmc) mode.\nfloat\nwf_pmc\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wt", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wt.html#wt", + "title": "wt", + "section": "wt", + "text": "wt" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc.html#ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc", - "title": "wf_pmc > wf_pmc > wf_pmc", - "section": "wf_pmc > wf_pmc", - "text": "property PuckCriterion.wf_pmc: float\n\nWeighting factor of the matrix failure (pmc) mode.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wt", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wt.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.wt", + "title": "wt > wt > wt", + "section": "wt > wt", + "text": "FailureModeEnum.wt = 322\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.html#failuremodeenum", - "title": "FailureModeEnum", - "section": "FailureModeEnum", - "text": "FailureModeEnum.emax\n\nFailureModeEnum.evm\n\nFailureModeEnum.e1\n\nFailureModeEnum.e1t\n\nFailureModeEnum.e1c\n\nFailureModeEnum.e2\n\nFailureModeEnum.e2t\n\nFailureModeEnum.e2c\n\nFailureModeEnum.e3\n\nFailureModeEnum.e3t\n\nFailureModeEnum.e3c\n\nFailureModeEnum.e12\n\nFailureModeEnum.e13\n\nFailureModeEnum.e23\n\nFailureModeEnum.smax\n\nFailureModeEnum.svm\n\nFailureModeEnum.s1\n\nFailureModeEnum.s1t\n\nFailureModeEnum.s1c\n\nFailureModeEnum.s2\n\nFailureModeEnum.s2t\n\nFailureModeEnum.s2c\n\nFailureModeEnum.s3\n\nFailureModeEnum.s3t\n\nFailureModeEnum.s3c\n\nFailureModeEnum.s12\n\nFailureModeEnum.s13\n\nFailureModeEnum.s23\n\nFailureModeEnum.cf\n\nFailureModeEnum.w\n\nFailureModeEnum.wb\n\nFailureModeEnum.wt\n\nFailureModeEnum.sc\n\nFailureModeEnum.tw\n\nFailureModeEnum.th\n\nFailureModeEnum.h\n\nFailureModeEnum.hf\n\nFailureModeEnum.hm\n\nFailureModeEnum.hd\n\nFailureModeEnum.ho\n\nFailureModeEnum.p\n\nFailureModeEnum.pf\n\nFailureModeEnum.pmA\n\nFailureModeEnum.pmB\n\nFailureModeEnum.pmC\n\nFailureModeEnum.pd\n\nFailureModeEnum.l\n\nFailureModeEnum.lft3\n\nFailureModeEnum.lfc4\n\nFailureModeEnum.lfc6\n\nFailureModeEnum.lmt1\n\nFailureModeEnum.lmc2\n\nFailureModeEnum.lmc5\n\nFailureModeEnum.c\n\nFailureModeEnum.cft\n\nFailureModeEnum.cfc\n\nFailureModeEnum.cmA\n\nFailureModeEnum.cmB\n\nFailureModeEnum.cmC\n\nFailureModeEnum.vMe\n\nFailureModeEnum.vMs\n\nFailureModeEnum.as\n\nFailureModeEnum.ap\n\nFailureModeEnum.af\n\nFailureModeEnum.ns\n\nFailureModeEnum.na\n\nFailureModeEnum\nFailureModeEnum.emax\nFailureModeEnum.evm\nFailureModeEnum.e1\nFailureModeEnum.e1t\nFailureModeEnum.e1c\nFailureModeEnum.e2\nFailureModeEnum.e2t\nFailureModeEnum.e2c\nFailureModeEnum.e3\nFailureModeEnum.e3t\nFailureModeEnum.e3c\nFailureModeEnum.e12\nFailureModeEnum.e13\nFailureModeEnum.e23\nFailureModeEnum.smax\nFailureModeEnum.svm\nFailureModeEnum.s1\nFailureModeEnum.s1t\nFailureModeEnum.s1c\nFailureModeEnum.s2\nFailureModeEnum.s2t\nFailureModeEnum.s2c\nFailureModeEnum.s3\nFailureModeEnum.s3t\nFailureModeEnum.s3c\nFailureModeEnum.s12\nFailureModeEnum.s13\nFailureModeEnum.s23\nFailureModeEnum.cf\nFailureModeEnum.w\nFailureModeEnum.wb\nFailureModeEnum.wt\nFailureModeEnum.sc\nFailureModeEnum.tw\nFailureModeEnum.th\nFailureModeEnum.h\nFailureModeEnum.hf\nFailureModeEnum.hm\nFailureModeEnum.hd\nFailureModeEnum.ho\nFailureModeEnum.p\nFailureModeEnum.pf\nFailureModeEnum.pmA\nFailureModeEnum.pmB\nFailureModeEnum.pmC\nFailureModeEnum.pd\nFailureModeEnum.l\nFailureModeEnum.lft3\nFailureModeEnum.lfc4\nFailureModeEnum.lfc6\nFailureModeEnum.lmt1\nFailureModeEnum.lmc2\nFailureModeEnum.lmc5\nFailureModeEnum.c\nFailureModeEnum.cft\nFailureModeEnum.cfc\nFailureModeEnum.cmA\nFailureModeEnum.cmB\nFailureModeEnum.cmC\nFailureModeEnum.vMe\nFailureModeEnum.vMs\nFailureModeEnum.as\nFailureModeEnum.ap\nFailureModeEnum.af\nFailureModeEnum.ns\nFailureModeEnum.na" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zc.html#stress_limits_zc", + "title": "Stress_Limits_Zc", + "section": "Stress_Limits_Zc", + "text": "Stress_Limits_Zc" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.html#ansys.dpf.composites.failure_criteria.FailureModeEnum", - "title": "FailureModeEnum > FailureModeEnum > FailureModeEnum", - "section": "FailureModeEnum > FailureModeEnum", - "text": "class ansys.dpf.composites.failure_criteria.FailureModeEnum(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nFailureModeEnum.emax\n\n\n\nFailureModeEnum.evm\n\n\n\nFailureModeEnum.e1\n\n\n\nFailureModeEnum.e1t\n\n\n\nFailureModeEnum.e1c\n\n\n\nFailureModeEnum.e2\n\n\n\nFailureModeEnum.e2t\n\n\n\nFailureModeEnum.e2c\n\n\n\nFailureModeEnum.e3\n\n\n\nFailureModeEnum.e3t\n\n\n\nFailureModeEnum.e3c\n\n\n\nFailureModeEnum.e12\n\n\n\nFailureModeEnum.e13\n\n\n\nFailureModeEnum.e23\n\n\n\nFailureModeEnum.smax\n\n\n\nFailureModeEnum.svm\n\n\n\nFailureModeEnum.s1\n\n\n\nFailureModeEnum.s1t\n\n\n\nFailureModeEnum.s1c\n\n\n\nFailureModeEnum.s2\n\n\n\nFailureModeEnum.s2t\n\n\n\nFailureModeEnum.s2c\n\n\n\nFailureModeEnum.s3\n\n\n\nFailureModeEnum.s3t\n\n\n\nFailureModeEnum.s3c\n\n\n\nFailureModeEnum.s12\n\n\n\nFailureModeEnum.s13\n\n\n\nFailureModeEnum.s23\n\n\n\nFailureModeEnum.cf\n\n\n\nFailureModeEnum.w\n\n\n\nFailureModeEnum.wb\n\n\n\nFailureModeEnum.wt\n\n\n\nFailureModeEnum.sc\n\n\n\nFailureModeEnum.tw\n\n\n\nFailureModeEnum.th\n\n\n\nFailureModeEnum.h\n\n\n\nFailureModeEnum.hf\n\n\n\nFailureModeEnum.hm\n\n\n\nFailureModeEnum.hd\n\n\n\nFailureModeEnum.ho\n\n\n\nFailureModeEnum.p\n\n\n\nFailureModeEnum.pf\n\n\n\nFailureModeEnum.pmA\n\n\n\nFailureModeEnum.pmB\n\n\n\nFailureModeEnum.pmC\n\n\n\nFailureModeEnum.pd\n\n\n\nFailureModeEnum.l\n\n\n\nFailureModeEnum.lft3\n\n\n\nFailureModeEnum.lfc4\n\n\n\nFailureModeEnum.lfc6\n\n\n\nFailureModeEnum.lmt1\n\n\n\nFailureModeEnum.lmc2\n\n\n\nFailureModeEnum.lmc5\n\n\n\nFailureModeEnum.c\n\n\n\nFailureModeEnum.cft\n\n\n\nFailureModeEnum.cfc\n\n\n\nFailureModeEnum.cmA\n\n\n\nFailureModeEnum.cmB\n\n\n\nFailureModeEnum.cmC\n\n\n\nFailureModeEnum.vMe\n\n\n\nFailureModeEnum.vMs\n\n\n\nFailureModeEnum.as\n\n\n\nFailureModeEnum.ap\n\n\n\nFailureModeEnum.af\n\n\n\nFailureModeEnum.ns\n\n\n\nFailureModeEnum.na\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Zc", + "title": "Stress_Limits_Zc > Stress_Limits_Zc > Stress_Limits_Zc", + "section": "Stress_Limits_Zc > Stress_Limits_Zc", + "text": "MaterialProperty.Stress_Limits_Zc: str = 'stress_compressive_z_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.find", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.find.html#find", - "title": "find", - "section": "find", - "text": "Return the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\nOptional arguments start and end are interpreted as in slice notation.\nReturn -1 on failure.\nfind" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE.html#not_available", + "title": "NOT_AVAILABLE", + "section": "NOT_AVAILABLE", + "text": "NOT_AVAILABLE" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.find", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.find.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.find", - "title": "find > find > find", - "section": "find > find", - "text": "FailureMeasureEnum.find(sub, [start, [end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nOptional arguments start and end are interpreted as in slice notation.\nReturn -1 on failure.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE.html#ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE", + "title": "NOT_AVAILABLE > NOT_AVAILABLE > NOT_AVAILABLE", + "section": "NOT_AVAILABLE > NOT_AVAILABLE", + "text": "LayupModelContextType.NOT_AVAILABLE = 0\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax.html#emax", + "title": "emax", + "section": "emax", + "text": "emax" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "ShearCrimpingCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.emax", + "title": "emax > emax > emax", + "section": "emax > emax", + "text": "FailureModeEnum.emax = 101\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32.html#b32", + "title": "b32", + "section": "b32", + "text": "Out-of-plane shear friction coefficient. The default is 1.3805. The value depends on the fracture plane angle.\nfloat\nb32\n1.3805\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "TsaiWuCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32", + "title": "b32 > b32 > b32", + "section": "b32 > b32", + "text": "property CuntzeCriterion.b32: float\n\nOut-of-plane shear friction coefficient. The default is 1.3805. The value depends on the fracture plane angle.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13.html#wf_e13", - "title": "wf_e13", - "section": "wf_e13", - "text": "Weighting factor of the failure mode e13.\nfloat\nwf_e13\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.html#layuppropertiesprovider", + "title": "LayupPropertiesProvider", + "section": "LayupPropertiesProvider", + "text": "Provider for lay-up properties.\nSome properties such as layered dpf_material_ids and\ninformation about the element type are available\nthrough the ElementInfoProvider.\nlayup_provider (Operator) – Use add_layup_info_to_mesh() to obtain a lay-up provider.\nmesh (MeshedRegion)\nLayupPropertiesProvider.get_analysis_plies(...)\nGet analysis ply names.\nLayupPropertiesProvider.get_element_laminate_offset(...)\nGet laminate offset of element.\nLayupPropertiesProvider.get_layer_angles(...)\nGet angles for all layers.\nLayupPropertiesProvider.get_layer_shear_angles(...)\nGet shear angle for all layers.\nLayupPropertiesProvider.get_layer_thicknesses(...)\nGet thicknesses for all layers.\nLayupPropertiesProvider\nElementInfoProvider\nOperator\nadd_layup_info_to_mesh()\nMeshedRegion\nLayupPropertiesProvider.get_analysis_plies\nLayupPropertiesProvider.get_element_laminate_offset\nLayupPropertiesProvider.get_layer_angles\nLayupPropertiesProvider.get_layer_shear_angles\nLayupPropertiesProvider.get_layer_thicknesses" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13", - "title": "wf_e13 > wf_e13 > wf_e13", - "section": "wf_e13 > wf_e13", - "text": "property MaxStrainCriterion.wf_e13: float\n\nWeighting factor of the failure mode e13.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider", + "title": "LayupPropertiesProvider > LayupPropertiesProvider > LayupPropertiesProvider", + "section": "LayupPropertiesProvider > LayupPropertiesProvider", + "text": "class ansys.dpf.composites.layup_info.LayupPropertiesProvider(layup_provider, mesh)\n\nProvider for lay-up properties.\n\nSome properties such as layered dpf_material_ids and\ninformation about the element type are available\nthrough the ElementInfoProvider.\n\nParameters\n\nlayup_provider (Operator) – Use add_layup_info_to_mesh() to obtain a lay-up provider.\n\nmesh (MeshedRegion)\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nLayupPropertiesProvider.get_analysis_plies(...)\n\nGet analysis ply names.\n\nLayupPropertiesProvider.get_element_laminate_offset(...)\n\nGet laminate offset of element.\n\nLayupPropertiesProvider.get_layer_angles(...)\n\nGet angles for all layers.\n\nLayupPropertiesProvider.get_layer_shear_angles(...)\n\nGet shear angle for all layers.\n\nLayupPropertiesProvider.get_layer_thicknesses(...)\n\nGet thicknesses for all layers.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3.html#s3", - "title": "s3", - "section": "s3", - "text": "s3" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmb", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmb.html#pmb", + "title": "pmb", + "section": "pmb", + "text": "Whether to activate the failure evaluation regarding matrix failure due to compression.\nbool\npmb\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s3", - "title": "s3 > s3 > s3", - "section": "s3 > s3", - "text": "FailureModeEnum.s3 = 230\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmb", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmb.html#ansys.dpf.composites.failure_criteria.PuckCriterion.pmb", + "title": "pmb > pmb > pmb", + "section": "pmb > pmb", + "text": "property PuckCriterion.pmb: bool\n\nWhether to activate the failure evaluation regarding matrix failure due to compression.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.html#tsaihillcriterion", - "title": "TsaiHillCriterion", - "section": "TsaiHillCriterion", - "text": "Defines the Tsai-Hill failure criterion for orthotropic reinforced materials.\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\nTsaiHillCriterion.to_dict()\n\nTsaiHillCriterion.to_json()\n\nTsaiHillCriterion.active\nThe failure criterion is suppressed if active is False.\nTsaiHillCriterion.dim\nSpecifies which formulation of the failure criterion is used.\nTsaiHillCriterion.name\nName of the failure criterion.\nTsaiHillCriterion.wf\nWeighting factor of this failure criterion.\nTsaiHillCriterion\nfloat\n1.0\nint\n2\nTsaiHillCriterion.to_dict\nTsaiHillCriterion.to_json\nTsaiHillCriterion.active\nTsaiHillCriterion.dim\nTsaiHillCriterion.name\nTsaiHillCriterion.wf" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hf.html#wf_hf", + "title": "wf_hf", + "section": "wf_hf", + "text": "Whether to activate the failure evaluation regarding fiber failure.\nfloat\nwf_hf\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion", - "title": "TsaiHillCriterion > TsaiHillCriterion > TsaiHillCriterion", - "section": "TsaiHillCriterion > TsaiHillCriterion", - "text": "class ansys.dpf.composites.failure_criteria.TsaiHillCriterion(*, active=True, wf=1.0, dim=2)\n\nDefines the Tsai-Hill failure criterion for orthotropic reinforced materials.\n\nParameters\n\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\n\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nTsaiHillCriterion.to_dict()\n\n\n\nTsaiHillCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nTsaiHillCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nTsaiHillCriterion.dim\n\nSpecifies which formulation of the failure criterion is used.\n\nTsaiHillCriterion.name\n\nName of the failure criterion.\n\nTsaiHillCriterion.wf\n\nWeighting factor of this failure criterion.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hf.html#ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hf", + "title": "wf_hf > wf_hf > wf_hf", + "section": "wf_hf > wf_hf", + "text": "property HashinCriterion.wf_hf: float\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_json.html#to_json", + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_json.html#to_json", "title": "to_json", "section": "to_json", "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_json.html#ansys.dpf.composites.failure_criteria.HashinCriterion.to_json", + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_json.html#ansys.dpf.composites.failure_criteria.PuckCriterion.to_json", "title": "to_json > to_json > to_json", "section": "to_json > to_json", - "text": "HashinCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + "text": "PuckCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.THICKNESSES", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.THICKNESSES.html#thicknesses", + "title": "THICKNESSES", + "section": "THICKNESSES", + "text": "THICKNESSES" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.THICKNESSES", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.THICKNESSES.html#ansys.dpf.composites.layup_info.LayerProperty.THICKNESSES", + "title": "THICKNESSES > THICKNESSES > THICKNESSES", + "section": "THICKNESSES > THICKNESSES", + "text": "LayerProperty.THICKNESSES = 0\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e13.html#e13", + "title": "e13", + "section": "e13", + "text": "e13" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e13.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e13", + "title": "e13 > e13 > e13", + "section": "e13 > e13", + "text": "FailureModeEnum.e13 = 150\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_effective_strain", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_effective_strain.html#strain_limits_effective_strain", + "title": "Strain_Limits_effective_strain", + "section": "Strain_Limits_effective_strain", + "text": "Strain_Limits_effective_strain" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_json.html#to_json", - "title": "to_json", - "section": "to_json", - "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_effective_strain", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_effective_strain.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_effective_strain", + "title": "Strain_Limits_effective_strain > Strain_Limits_effective_strain > Strain_Limits_effective_strain", + "section": "Strain_Limits_effective_strain > Strain_Limits_effective_strain", + "text": "MaterialProperty.Strain_Limits_effective_strain: str = 'von_mises'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.to_json.html#ansys.dpf.composites.failure_criteria.PuckCriterion.to_json", - "title": "to_json > to_json > to_json", - "section": "to_json > to_json", - "text": "PuckCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.add_interlaminar_normal_stresses", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.add_interlaminar_normal_stresses.html#add_interlaminar_normal_stresses", + "title": "add_interlaminar_normal_stresses", + "section": "add_interlaminar_normal_stresses", + "text": "Add interlaminar normal stresses to the stresses fields container.\nInterlaminar normal stresses (s3) are not available for layered shells.\nThis function performs a post-processing step which computes s3 and adds\nit to the stress field. s3 is automatically computed if a formulation\nof a failure criterion depends on this stress component, for instance\nPuck 3D .\nFor a usage example, see\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py.\nstresses (FieldsContainer) – Stresses fields container to add interlaminar normal stresses to.\nstrains (FieldsContainer)\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nInterlaminar normal stresses are only added to the layered elements defined\nin the specified composite definition.\nNone\nadd_interlaminar_normal_stresses\nPuck 3D\nFieldsContainer\nFieldsContainer\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nNone" }, { - "objectID": "api/ply_wise_data", - "href": "api/ply_wise_data.html#ply-wise-data", - "title": "Ply wise data", - "section": "Ply wise data", - "text": "SpotReductionStrategy(value[, names, ...])\nProvides the strategy for getting from spot values (BOT, MID, TOP) to a single value.\nget_ply_wise_data(field, ply_name, mesh[, ...])\nGet ply-wise data from a field.\nPly wise data\nSpotReductionStrategy\nget_ply_wise_data" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.add_interlaminar_normal_stresses", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.add_interlaminar_normal_stresses.html#ansys.dpf.composites.composite_model.CompositeModel.add_interlaminar_normal_stresses", + "title": "add_interlaminar_normal_stresses > add_interlaminar_normal_stresses > add_interlaminar_normal_stresses", + "section": "add_interlaminar_normal_stresses > add_interlaminar_normal_stresses", + "text": "CompositeModel.add_interlaminar_normal_stresses(stresses, strains, composite_definition_label=None)\n\nAdd interlaminar normal stresses to the stresses fields container.\n\nInterlaminar normal stresses (s3) are not available for layered shells.\nThis function performs a post-processing step which computes s3 and adds\nit to the stress field. s3 is automatically computed if a formulation\nof a failure criterion depends on this stress component, for instance\nPuck 3D .\n\nFor a usage example, see\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py.\n\nParameters\n\nstresses (FieldsContainer) – Stresses fields container to add interlaminar normal stresses to.\n\nstrains (FieldsContainer)\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nInterlaminar normal stresses are only added to the layered elements defined\nin the specified composite definition.\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR22", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR22.html#tensor22", - "title": "TENSOR22", - "section": "TENSOR22", - "text": "TENSOR22" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_angle_under_compression", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_angle_under_compression.html#larc_constants_fracture_angle_under_compression", + "title": "Larc_Constants_fracture_angle_under_compression", + "section": "Larc_Constants_fracture_angle_under_compression", + "text": "Larc_Constants_fracture_angle_under_compression" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR22", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR22.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR22", - "title": "TENSOR22 > TENSOR22 > TENSOR22", - "section": "TENSOR22 > TENSOR22", - "text": "Sym3x3TensorComponent.TENSOR22 = 1\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_angle_under_compression", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_angle_under_compression.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_angle_under_compression", + "title": "Larc_Constants_fracture_angle_under_compression > Larc_Constants_fracture_angle_under_compression > Larc_Constants_fracture_angle_under_compression", + "section": "Larc_Constants_fracture_angle_under_compression > Larc_Constants_fracture_angle_under_compression", + "text": "MaterialProperty.Larc_Constants_fracture_angle_under_compression: str = 'fracture_angle_under_compression_larc_constants'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.active.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property CoreFailureCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "TsaiHillCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isspace", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isspace.html#isspace", - "title": "isspace", - "section": "isspace", - "text": "Return True if the string is a whitespace string, False otherwise.\nA string is whitespace if all characters in the string are whitespace and there\nis at least one character in the string.\nisspace" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.istitle", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.istitle.html#istitle", + "title": "istitle", + "section": "istitle", + "text": "Return True if the string is a title-cased string, False otherwise.\nIn a title-cased string, upper- and title-case characters may only\nfollow uncased characters and lowercase characters only cased ones.\nistitle" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isspace", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isspace.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isspace", - "title": "isspace > isspace > isspace", - "section": "isspace > isspace", - "text": "FailureMeasureEnum.isspace(/)\n\nReturn True if the string is a whitespace string, False otherwise.\n\nA string is whitespace if all characters in the string are whitespace and there\nis at least one character in the string.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.istitle", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.istitle.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.istitle", + "title": "istitle > istitle > istitle", + "section": "istitle > istitle", + "text": "FailureMeasureEnum.istitle(/)\n\nReturn True if the string is a title-cased string, False otherwise.\n\nIn a title-cased string, upper- and title-case characters may only\nfollow uncased characters and lowercase characters only cased ones.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.core_model", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.core_model.html#core_model", - "title": "core_model", - "section": "core_model", - "text": "Underlying DPF core model.\nModel\ncore_model\nModel" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rsplit", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rsplit.html#rsplit", + "title": "rsplit", + "section": "rsplit", + "text": "Return a list of the substrings in the string, using sep as the separator string.\nThe separator used to split the string.\nWhen set to None (the default value), will split on any whitespace\ncharacter (including n r t f and spaces) and will discard\nempty strings from the result.\nMaximum number of splits.\n-1 (the default value) means no limit.\nSplitting starts at the end of the string and works to the front.\nrsplit" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.core_model", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.core_model.html#ansys.dpf.composites.composite_model.CompositeModel.core_model", - "title": "core_model > core_model > core_model", - "section": "core_model > core_model", - "text": "property CompositeModel.core_model: Model\n\nUnderlying DPF core model.\n\nReturn type\n\nModel\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rsplit", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rsplit.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rsplit", + "title": "rsplit > rsplit > rsplit", + "section": "rsplit > rsplit", + "text": "FailureMeasureEnum.rsplit(/, sep=None, maxsplit=-1)\n\nReturn a list of the substrings in the string, using sep as the separator string.\n\nsep\n\nThe separator used to split the string.\n\nWhen set to None (the default value), will split on any whitespace\ncharacter (including n r t f and spaces) and will discard\nempty strings from the result.\n\nmaxsplit\n\nMaximum number of splits.\n-1 (the default value) means no limit.\n\nSplitting starts at the end of the string and works to the front.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.html#spotreductionstrategy", - "title": "SpotReductionStrategy", - "section": "SpotReductionStrategy", - "text": "Provides the strategy for getting from spot values (BOT, MID, TOP) to a single value.\nSpotReductionStrategy.MIN\n\nSpotReductionStrategy.MAX\n\nSpotReductionStrategy.AVG\n\nSpotReductionStrategy.BOT\n\nSpotReductionStrategy.MID\n\nSpotReductionStrategy.TOP\n\nSpotReductionStrategy\nSpotReductionStrategy.MIN\nSpotReductionStrategy.MAX\nSpotReductionStrategy.AVG\nSpotReductionStrategy.BOT\nSpotReductionStrategy.MID\nSpotReductionStrategy.TOP" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_json.html#to_json", + "title": "to_json", + "section": "to_json", + "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy", - "title": "SpotReductionStrategy > SpotReductionStrategy > SpotReductionStrategy", - "section": "SpotReductionStrategy > SpotReductionStrategy", - "text": "class ansys.dpf.composites.ply_wise_data.SpotReductionStrategy(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides the strategy for getting from spot values (BOT, MID, TOP) to a single value.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nSpotReductionStrategy.MIN\n\n\n\nSpotReductionStrategy.MAX\n\n\n\nSpotReductionStrategy.AVG\n\n\n\nSpotReductionStrategy.BOT\n\n\n\nSpotReductionStrategy.MID\n\n\n\nSpotReductionStrategy.TOP\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_json.html#ansys.dpf.composites.failure_criteria.HashinCriterion.to_json", + "title": "to_json > to_json > to_json", + "section": "to_json > to_json", + "text": "HashinCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.splitlines", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.splitlines.html#splitlines", - "title": "splitlines", - "section": "splitlines", - "text": "Return a list of the lines in the string, breaking at line boundaries.\nLine breaks are not included in the resulting list unless keepends is given and\ntrue.\nsplitlines" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.split", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.split.html#split", + "title": "split", + "section": "split", + "text": "Return a list of the substrings in the string, using sep as the separator string.\nThe separator used to split the string.\nWhen set to None (the default value), will split on any whitespace\ncharacter (including n r t f and spaces) and will discard\nempty strings from the result.\nMaximum number of splits.\n-1 (the default value) means no limit.\nSplitting starts at the front of the string and works to the end.\nNote, str.split() is mainly useful for data that has been intentionally\ndelimited. With natural text that includes punctuation, consider using\nthe regular expression module.\nsplit" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.splitlines", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.splitlines.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.splitlines", - "title": "splitlines > splitlines > splitlines", - "section": "splitlines > splitlines", - "text": "FailureMeasureEnum.splitlines(/, keepends=False)\n\nReturn a list of the lines in the string, breaking at line boundaries.\n\nLine breaks are not included in the resulting list unless keepends is given and\ntrue.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.split", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.split.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.split", + "title": "split > split > split", + "section": "split > split", + "text": "FailureMeasureEnum.split(/, sep=None, maxsplit=-1)\n\nReturn a list of the substrings in the string, using sep as the separator string.\n\nsep\n\nThe separator used to split the string.\n\nWhen set to None (the default value), will split on any whitespace\ncharacter (including n r t f and spaces) and will discard\nempty strings from the result.\n\nmaxsplit\n\nMaximum number of splits.\n-1 (the default value) means no limit.\n\nSplitting starts at the front of the string and works to the end.\n\nNote, str.split() is mainly useful for data that has been intentionally\ndelimited. With natural text that includes punctuation, consider using\nthe regular expression module.\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/011_rst_workflow", - "href": "examples/gallery_examples/011_rst_workflow.html#failure-analysis-of-an-mapdl-rst-model", - "title": "Failure analysis of an MAPDL (RST) model", - "section": "Failure analysis of an MAPDL (RST) model", - "text": "This example shows the postprocessing of an MAPDL (RST) model with layered elements that was not\npreprocessed by ACP. The difference between the RST-only and ACP-based workflow is that\nthe section data are loaded from the RST file instead of the ACP layup file.\nThis happens automatically if the parameter composite of the\nContinuousFiberCompositesFiles class is not set.\nThe engineering data file (XML or ENGD) with the material properties is needed anyway.\nOtherwise, the material properties cannot be mapped.\nAt the end of this example, two workflows are shown on how to create\nthe engineering data file based on a MAPDL model and how to set the\nmaterial UUIDs in MAPDL.\nThe material UUIDs in the engineering data file must be identical\nto the UUIDs in Mechanical APDL (RST file).\nThe postprocessing of MAPDL models is supported in 2024 R2 (DPF Server version 8.0)\nand later. A few advanced features are not supported with the RST only workflow.\nFor more information, see limitations.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nFailure analysis of an MAPDL (RST) model\nContinuousFiberCompositesFiles\ncomposite_files_from_workbench_harmonic_analysis()" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR32", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR32.html#tensor32", + "title": "TENSOR32", + "section": "TENSOR32", + "text": "TENSOR32" }, { - "objectID": "examples/gallery_examples/011_rst_workflow", - "href": "examples/gallery_examples/011_rst_workflow.html#set-up-analysis", - "title": "Failure analysis of an MAPDL (RST) model > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nGet input files (RST and material.engd but skip the ACP layup file).\nSet up analysis" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR32", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR32.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR32", + "title": "TENSOR32 > TENSOR32 > TENSOR32", + "section": "TENSOR32 > TENSOR32", + "text": "Sym3x3TensorComponent.TENSOR32 = 4\n\n" }, { - "objectID": "examples/gallery_examples/011_rst_workflow", - "href": "examples/gallery_examples/011_rst_workflow.html#configure-combined-failure-criterion", - "title": "Failure analysis of an MAPDL (RST) model > Configure combined failure criterion", - "section": "Configure combined failure criterion", - "text": "Configure the combined failure criterion.\nConfigure combined failure criterion" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.maketrans", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.maketrans.html#maketrans", + "title": "maketrans", + "section": "maketrans", + "text": "Return a translation table usable for str.translate().\nIf there is only one argument, it must be a dictionary mapping Unicode\nordinals (integers) or characters to Unicode ordinals, strings or None.\nCharacter keys will be then converted to ordinals.\nIf there are two arguments, they must be strings of equal length, and\nin the resulting dictionary, each character in x will be mapped to the\ncharacter at the same position in y. If there is a third argument, it\nmust be a string, whose characters will be mapped to None in the result.\nmaketrans" }, { - "objectID": "examples/gallery_examples/011_rst_workflow", - "href": "examples/gallery_examples/011_rst_workflow.html#set-up-model-and-evaluate-failures", - "title": "Failure analysis of an MAPDL (RST) model > Set up model and evaluate failures", - "section": "Set up model and evaluate failures", - "text": "Set up the composite model.\nEvaluate failures for the entire model\nSet up model and evaluate failures" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.maketrans", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.maketrans.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.maketrans", + "title": "maketrans > maketrans > maketrans", + "section": "maketrans > maketrans", + "text": "static FailureMeasureEnum.maketrans(x, y=, z=, /)\n\nReturn a translation table usable for str.translate().\n\nIf there is only one argument, it must be a dictionary mapping Unicode\nordinals (integers) or characters to Unicode ordinals, strings or None.\nCharacter keys will be then converted to ordinals.\nIf there are two arguments, they must be strings of equal length, and\nin the resulting dictionary, each character in x will be mapped to the\ncharacter at the same position in y. If there is a third argument, it\nmust be a string, whose characters will be mapped to None in the result.\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/011_rst_workflow", - "href": "examples/gallery_examples/011_rst_workflow.html#create-and-plot-a-sampling-point", - "title": "Failure analysis of an MAPDL (RST) model > Create and plot a sampling point", - "section": "Create and plot a sampling point", - "text": "Create and plot a sampling point" + "objectID": "api/constants", + "href": "api/constants.html#constants", + "title": "Constants", + "section": "Constants", + "text": "FailureOutput(value[, names, module, ...])\nProvides failure output types.\nSpot(value[, names, module, qualname, type, ...])\nImplements an interface to access the spots of the results of layered elements.\nSym3x3TensorComponent(value[, names, ...])\nProvides tensor indices for symmetrical 3x3 tensors.\nConstants\nFailureOutput\nSpot\nSym3x3TensorComponent" }, { - "objectID": "examples/gallery_examples/011_rst_workflow", - "href": "examples/gallery_examples/011_rst_workflow.html#create-engineering-data-file-and-set-material-uuids-in-mapdl", - "title": "Failure analysis of an MAPDL (RST) model > Create Engineering Data file and set material UUIDs in MAPDL", - "section": "Create Engineering Data file and set material UUIDs in MAPDL", - "text": "Here are two workflows for setting up the engineering data file\nand the material UUIDs in MAPDL. The material UUIDs must be set\nin MAPDL before the model is solved.\nCreate an External Model system in WB and load the solver input file\nLink the External Model with an Engineering Data system and update it\nSave the project and copy the generated engineering data file (EngineeringData.xml)\nFor each material, look for the DataTransferID, go to MAPDL and set the material\nUUIDs with the MP,UVID,, command\nStart ACP, go to File - Import Model and load the solver input file (CDB)\nGo to the Materials folder and export the engineering data file (Ansys Workbench XML)\nFor each material, look for the DataTransferID, go to MAPDL and set the material\nUUID with the MP,UVID,, command.\nTotal running time of the script: (0 minutes 8.430 seconds)\nDownload Jupyter notebook: 011_rst_workflow.ipynb\nDownload Python source code: 011_rst_workflow.py\nDownload zipped: 011_rst_workflow.zip\nGallery generated by Sphinx-Gallery\nCreate Engineering Data file and set material UUIDs in MAPDL\nDataTransferID\nMP,UVID,,\nDataTransferID\nMP,UVID,,\nDownload Jupyter notebook: 011_rst_workflow.ipynb\nDownload Python source code: 011_rst_workflow.py\nDownload zipped: 011_rst_workflow.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc.html#eyc", + "title": "eYc", + "section": "eYc", + "text": "Global compressive strain limit in material direction 1.\nfloat\neYc\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.spots_per_ply", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.spots_per_ply.html#spots_per_ply", - "title": "spots_per_ply", - "section": "spots_per_ply", - "text": "Number of through-the-thickness integration points per ply.\nint\nspots_per_ply\nint" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc", + "title": "eYc > eYc > eYc", + "section": "eYc > eYc", + "text": "property MaxStrainCriterion.eYc: float\n\nGlobal compressive strain limit in material direction 1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.spots_per_ply", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.spots_per_ply.html#ansys.dpf.composites.sampling_point.SamplingPoint.spots_per_ply", - "title": "spots_per_ply > spots_per_ply > spots_per_ply", - "section": "spots_per_ply > spots_per_ply", - "text": "property SamplingPoint.spots_per_ply: int\n\nNumber of through-the-thickness integration points per ply.\n\nReturn type\n\nint\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_indices", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_indices.html#get_indices", + "title": "get_indices", + "section": "get_indices", + "text": "Get the indices of the selected spots (interfaces) for each ply.\nThe indices are sorted from bottom to top.\nFor instance, this method can be used to access the stresses at the bottom of each ply.\nspots (Collection[Spot], default: (, , )) – Collection of spots. Only the indices of the bottom interfaces of plies\nare returned if [Spot.BOTTOM] is set.\nSequence[int]\nget_indices\nCollection\nSpot\n(, , )\n[Spot.BOTTOM]\nSequence\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.th", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.th.html#th", - "title": "th", - "section": "th", - "text": "th" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_indices", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_indices.html#ansys.dpf.composites.sampling_point.SamplingPoint.get_indices", + "title": "get_indices > get_indices > get_indices", + "section": "get_indices > get_indices", + "text": "SamplingPoint.get_indices(spots=(Spot.BOTTOM, Spot.MIDDLE, Spot.TOP))\n\nGet the indices of the selected spots (interfaces) for each ply.\n\nThe indices are sorted from bottom to top.\nFor instance, this method can be used to access the stresses at the bottom of each ply.\n\nParameters\n\nspots (Collection[Spot], default: (, , )) – Collection of spots. Only the indices of the bottom interfaces of plies\nare returned if [Spot.BOTTOM] is set.\n\nExamples\n\n>>> ply_top_indices = sampling_point.get_indices([Spot.TOP])\n\nReturn type\n\nSequence[int]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.th", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.th.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.th", - "title": "th > th > th", - "section": "th > th", - "text": "FailureModeEnum.th = 500\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vme", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vme.html#vme", + "title": "vme", + "section": "vme", + "text": "Whether to activate the von Mises strain criterion.\nbool\nvme\nbool" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vme", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.vme.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.vme", + "title": "vme > vme > vme", + "section": "vme > vme", + "text": "property VonMisesCriterion.vme: bool\n\nWhether to activate the von Mises strain criterion.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" } ] \ No newline at end of file diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers.html b/version/dev/api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers.html index 4c2bfe434..d20f60918 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers.html @@ -559,7 +559,7 @@

    get_property_for_all_layersReturn type: -

    Optional[ndarray[Any, dtype[float64]]]

    +

    Optional[ndarray[Any, dtype[float64]]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies.html b/version/dev/api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies.html index d393ebaac..94789cf6c 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_result_times_or_frequencies.html @@ -546,7 +546,7 @@

    get_result_times_or_frequencies
    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids.html b/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids.html index 07e0c6b5a..419e0a4a0 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids.html @@ -545,7 +545,7 @@

    dpf_material_ids#

    -ElementInfo.dpf_material_ids: ndarray[Any, dtype[int64]]#
    +ElementInfo.dpf_material_ids: ndarray[Any, dtype[int64]]#
    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.html b/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.html index 152421498..8c279dd96 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.html @@ -553,7 +553,7 @@

    ElementInfoint) – Number of corner nodes (without midside nodes).

  1. n_spots (int) – Number of spots (through-the-thickness integration points) per layer.

  2. element_type (int) – APDL element type. For example, 181 for layered shells.

  3. -
  4. dpf_material_ids (numpy.ndarray[Any, numpy.dtype[numpy.int64]]) – List of DPF material IDs for all layers.

  5. +
  6. dpf_material_ids (numpy.ndarray[Any, numpy.dtype[numpy.int64]]) – List of DPF material IDs for all layers.

  7. is_shell (bool) – Whether the element is a shell element.

  8. number_of_nodes_per_spot_plane (int) – Number of nodes per output plane. The value is equal to n_corner_nodes for shell elements and n_corner_nodes diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles.html b/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles.html index 79a072772..e5c782e2b 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_angles.html @@ -548,7 +548,7 @@

    get_layer_angles

    element_id (int) – Element Id/Label

    Return type:
    -

    Optional[ndarray[Any, dtype[float64]]]

    +

    Optional[ndarray[Any, dtype[float64]]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles.html b/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles.html index 09d662e58..fbbe529b8 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles.html @@ -548,7 +548,7 @@

    get_layer_shear_angles

    element_id (int) – Element Id/Label

    Return type:
    -

    Optional[ndarray[Any, dtype[float64]]]

    +

    Optional[ndarray[Any, dtype[float64]]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses.html b/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses.html index 0da3dad62..969ab15e3 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_thicknesses.html @@ -548,7 +548,7 @@

    get_layer_thicknesses

    element_id (int) – Element Id/Label

    Return type:
    -

    Optional[ndarray[Any, dtype[float64]]]

    +

    Optional[ndarray[Any, dtype[float64]]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e1.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e1.html index 49cb4736b..996dea0f2 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e1.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e1.html @@ -556,11 +556,11 @@

    e1#

    -property SamplingPoint.e1: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.e1: ndarray[Any, dtype[float64]]#

    Strains in the material 1 direction of each ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e12.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e12.html index da5b3cd5a..a5cd1c65d 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e12.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e12.html @@ -556,11 +556,11 @@

    e12#

    -property SamplingPoint.e12: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.e12: ndarray[Any, dtype[float64]]#

    In-plane shear strains e12 of each ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e13.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e13.html index 6a6f788b7..574942ec0 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e13.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e13.html @@ -556,11 +556,11 @@

    e13#

    -property SamplingPoint.e13: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.e13: ndarray[Any, dtype[float64]]#

    Out-of-plane shear strains e13 of each ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e2.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e2.html index 4b632c2e5..1480e59b2 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e2.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e2.html @@ -556,11 +556,11 @@

    e2#

    -property SamplingPoint.e2: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.e2: ndarray[Any, dtype[float64]]#

    Strains in the material 2 direction of each ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e23.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e23.html index 571ba7105..433722fdd 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e23.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e23.html @@ -556,11 +556,11 @@

    e23#

    -property SamplingPoint.e23: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.e23: ndarray[Any, dtype[float64]]#

    Out-of-plane shear strains e23 of each ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e3.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e3.html index 3f62f5b41..43cb6638e 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e3.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e3.html @@ -556,11 +556,11 @@

    e3#

    -property SamplingPoint.e3: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.e3: ndarray[Any, dtype[float64]]#

    Strains in the material 3 direction of each ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots.html index a0932c665..9f4e016a4 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.get_offsets_by_spots.html @@ -566,7 +566,7 @@

    get_offsets_by_spots
    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor.html index bb1a9db35..1c2f02374 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor.html @@ -556,11 +556,11 @@

    inverse_reserve_factor#

    -property SamplingPoint.inverse_reserve_factor: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.inverse_reserve_factor: ndarray[Any, dtype[float64]]#

    Critical inverse reserve factor of each ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety.html index 71319b8db..b4b4fc084 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.margin_of_safety.html @@ -556,12 +556,12 @@

    margin_of_safety#

    -property SamplingPoint.margin_of_safety: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.margin_of_safety: ndarray[Any, dtype[float64]]#

    Lowest margin of safety of each ply.

    This attribute is equivalent to the safety margin.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets.html index 6db685575..17fa9896c 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets.html @@ -556,11 +556,11 @@

    offsets#

    -property SamplingPoint.offsets: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.offsets: ndarray[Any, dtype[float64]]#

    Z coordinates for each interface and ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1.html index 015f4d1fe..432f35311 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1.html @@ -556,11 +556,11 @@

    polar_properties_E1#

    -property SamplingPoint.polar_properties_E1: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.polar_properties_E1: ndarray[Any, dtype[float64]]#

    Polar property E1 of the laminate.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2.html index 0b7ae40f2..ec1344a84 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2.html @@ -556,11 +556,11 @@

    polar_properties_E2#

    -property SamplingPoint.polar_properties_E2: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.polar_properties_E2: ndarray[Any, dtype[float64]]#

    Polar property E2 of the laminate.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12.html index 25c678daf..0b82a1a4d 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12.html @@ -556,11 +556,11 @@

    polar_properties_G12#

    -property SamplingPoint.polar_properties_G12: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.polar_properties_G12: ndarray[Any, dtype[float64]]#

    Polar property G12 of the laminate.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor.html index 968d672d9..efafed7bc 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.reserve_factor.html @@ -556,12 +556,12 @@

    reserve_factor#

    -property SamplingPoint.reserve_factor: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.reserve_factor: ndarray[Any, dtype[float64]]#

    Lowest reserve factor of each ply.

    This attribute is equivalent to the safety factor.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s1.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s1.html index 15a945240..11531c3e7 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s1.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s1.html @@ -556,11 +556,11 @@

    s1#

    -property SamplingPoint.s1: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.s1: ndarray[Any, dtype[float64]]#

    Stresses in the material 1 direction of each ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s12.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s12.html index 01303b492..39598cb77 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s12.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s12.html @@ -556,11 +556,11 @@

    s12#

    -property SamplingPoint.s12: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.s12: ndarray[Any, dtype[float64]]#

    In-plane shear stresses s12 of each ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s13.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s13.html index b4709a70f..844e479ef 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s13.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s13.html @@ -556,11 +556,11 @@

    s13#

    -property SamplingPoint.s13: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.s13: ndarray[Any, dtype[float64]]#

    Out-of-plane shear stresses s13 of each ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2.html index 4f9523b0b..f44cdb235 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2.html @@ -556,11 +556,11 @@

    s2#

    -property SamplingPoint.s2: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.s2: ndarray[Any, dtype[float64]]#

    Stresses in the material 2 direction of each ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s23.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s23.html index 7f1cdc6c4..06bb9c490 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s23.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s23.html @@ -556,11 +556,11 @@

    s23#

    -property SamplingPoint.s23: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.s23: ndarray[Any, dtype[float64]]#

    Out-of-plane shear stresses s23 of each ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s3.html b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s3.html index d60a9c975..d439ed0c1 100644 --- a/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s3.html +++ b/version/dev/api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s3.html @@ -556,11 +556,11 @@

    s3#

    -property SamplingPoint.s3: ndarray[Any, dtype[float64]]#
    +property SamplingPoint.s3: ndarray[Any, dtype[float64]]#

    Stresses in the material 3 direction of each ply.

    Return type:
    -

    ndarray[Any, dtype[float64]]

    +

    ndarray[Any, dtype[float64]]

    diff --git a/version/dev/examples/gallery_examples/001_failure_operator_example.html b/version/dev/examples/gallery_examples/001_failure_operator_example.html index f6b79e8a4..4f37eefe3 100644 --- a/version/dev/examples/gallery_examples/001_failure_operator_example.html +++ b/version/dev/examples/gallery_examples/001_failure_operator_example.html @@ -637,7 +637,7 @@

    Set up model and evaluate failuresTotal running time of the script: (0 minutes 19.408 seconds)

    +

    Total running time of the script: (0 minutes 15.187 seconds)

    -Stresses, Failures

    Total running time of the script: (0 minutes 7.682 seconds)

    +Stresses, Failures

    Total running time of the script: (0 minutes 5.257 seconds)