From 39c6396fd4783ad1b54b0837a4e5ceee6d4a97e0 Mon Sep 17 00:00:00 2001 From: janvonrickenbach Date: Sat, 14 Dec 2024 00:40:30 +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 3750 -> 3743 bytes ...glr_001_failure_operator_example_002.vtksz | Bin 3741 -> 3748 bytes ...glr_001_failure_operator_example_003.vtksz | Bin 3736 -> 3734 bytes ...sphx_glr_003_short_fiber_example_001.vtksz | Bin 23528 -> 23534 bytes ...sphx_glr_003_short_fiber_example_002.vtksz | Bin 23360 -> 23368 bytes ...sphx_glr_003_short_fiber_example_003.vtksz | Bin 23630 -> 23630 bytes ..._get_material_properties_example_001.vtksz | Bin 3737 -> 3747 bytes ...06_filter_composite_data_example_001.vtksz | Bin 3715 -> 3712 bytes ...06_filter_composite_data_example_002.vtksz | Bin 3751 -> 3763 bytes ...06_filter_composite_data_example_003.vtksz | Bin 3731 -> 3726 bytes ...06_filter_composite_data_example_004.vtksz | Bin 3737 -> 3739 bytes ...06_filter_composite_data_example_005.vtksz | Bin 3720 -> 3720 bytes ...terlaminar_normal_stress_example_001.vtksz | Bin 67530 -> 67534 bytes ...terlaminar_normal_stress_example_002.vtksz | Bin 67663 -> 67674 bytes .../sphx_glr_008_assembly_example_001.vtksz | Bin 4199 -> 4213 bytes .../sphx_glr_008_assembly_example_002.vtksz | Bin 3808 -> 3804 bytes ...9_short_fiber_orientation_tensor_001.vtksz | Bin 23377 -> 23379 bytes ...9_short_fiber_orientation_tensor_002.vtksz | Bin 23532 -> 23540 bytes ...9_short_fiber_orientation_tensor_003.vtksz | Bin 23458 -> 23464 bytes ...9_short_fiber_orientation_tensor_004.vtksz | Bin 23609 -> 23607 bytes ...9_short_fiber_orientation_tensor_005.vtksz | Bin 23696 -> 23696 bytes .../sphx_glr_010_harmonic_example_001.vtksz | Bin 4019 -> 4025 bytes .../sphx_glr_011_rst_workflow_001.vtksz | Bin 3763 -> 3759 bytes .../sphx_glr_012_fatigue_example_003.vtksz | Bin 5271 -> 5269 bytes .../sphx_glr_013_thermal_example_001.vtksz | Bin 40558 -> 40543 bytes .../sphx_glr_013_thermal_example_002.vtksz | Bin 38648 -> 38653 bytes ..._glr_014_cyclic_symmetry_example_001.vtksz | Bin 17961 -> 17965 bytes ..._glr_014_cyclic_symmetry_example_002.vtksz | Bin 15622 -> 15633 bytes ..._glr_014_cyclic_symmetry_example_003.vtksz | Bin 17943 -> 17946 bytes ..._glr_014_cyclic_symmetry_example_004.vtksz | Bin 78942 -> 78952 bytes ...9_dpf_composite_failure_workflow_001.vtksz | Bin 3758 -> 3763 bytes .../sphx_glr_012_fatigue_example_001.png | Bin 35491 -> 33087 bytes .../sphx_glr_012_fatigue_example_003.png | Bin 98439 -> 98199 bytes .../sphx_glr_012_fatigue_example_thumb.png | Bin 23892 -> 22359 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 | 48 +- .../dev/_sources/sg_execution_times.rst.txt | 48 +- version/dev/_static/search.json | 12302 ++++++++-------- .../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 | 50 +- version/dev/searchindex.js | 2 +- version/dev/sg_execution_times.html | 50 +- 85 files changed, 6288 insertions(+), 6288 deletions(-) diff --git a/version/dev/_downloads/06082043848dd97eedadd25f3f52c2a3/011_rst_workflow.zip b/version/dev/_downloads/06082043848dd97eedadd25f3f52c2a3/011_rst_workflow.zip index 0bd2c573643c8447d10723a56f9592419dccef6a..0229f2ceafce444d06c17dc368ba169ab5439329 100644 GIT binary patch delta 47 xcmdm)xigbDz?+#xgaHJcnff;JP8MT!XX@L$Sgc)^87MGW*TfDaFgee}8vrEZ42}Q* delta 47 xcmdm)xigbDz?+#xgaHK7nR++!P8MU%X6oI%Sgc)^87MGW*TfDaFgee}8vrkr4H^Id diff --git a/version/dev/_downloads/11ba9ded9a0acf54c4f861149963385c/014_cyclic_symmetry_example.zip b/version/dev/_downloads/11ba9ded9a0acf54c4f861149963385c/014_cyclic_symmetry_example.zip index a1c475ce14de09160ffa2fef8384f7484020667e..7a873d27d324eccddc3177a1084a966a3084ca76 100644 GIT binary patch delta 47 xcmexg^S_2Sz?+#xgaHJ6nff;JrbsgfGWBgPkxo-$1`15RYwHOTn5=0R1^`8+4U7N) delta 47 xcmexg^S_2Sz?+#xgaHH!n0hzzrbsgvGxcsRkxo-$1`15RYwHOTn5=0R1^`d$4iW$W diff --git a/version/dev/_downloads/22db00a3f064a1cfaa82c24a763eda42/005_get_layup_properties_example.zip b/version/dev/_downloads/22db00a3f064a1cfaa82c24a763eda42/005_get_layup_properties_example.zip index e497f7e1f52d228ee359ed1c30c893a4ea225f01..9b2c603b5baecee7afdf9ae22e0d535caf36d59a 100644 GIT binary patch delta 46 wcmaFm^2&ubz?+#xgaHJ!nEE#Ie&A!)X6oC-zgvhI$e+AV(GSF*%&!y;03GfOJOBUy delta 46 wcmaFm^2&ubz?+#xgaHJCn0hzze&AycX6oIz>% delta 49 zcmZ2?jB(vDM&1B#W)=|!5J+O`-N<`JlR2HKck><1-4@J1fyuLyoInDT?Thj|9FnNY%H~=M}40-?n delta 47 xcmaDK{63gBz?+#xgaHJcnR++!_6sumF!gSpFSt^i87MH>Thj|9FnNY%H~=#N4JZHr 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 81aaec3ba4d31125796cc52f54260ff9a29ea482..20c80e179248329f3fa173546a9ea1da1723595c 100644 GIT binary patch delta 49 zcmbQWiE-8@M&1B#W)=|!5YT4o+sGTG#;nKGw>eAgzacYFU~*1`KS*HmzK9qAI9Cm| delta 49 zcmbQWiE-8@M&1B#W)=|!5C~@K-N+lI#vI1fyE#kkzacYFU~*1`KS*HmzK9qAL_rQw diff --git a/version/dev/_downloads/675f27bf7817e74cb3738ead0ca88ae1/012_fatigue_example.zip b/version/dev/_downloads/675f27bf7817e74cb3738ead0ca88ae1/012_fatigue_example.zip index 6f906b7bfa8933a3c0daf098cc5f437f75d7ea92..fa829a2972847b8f364914de84621f0f264fe779 100644 GIT binary patch delta 49 zcmaFa$oR66kvG7bnMH&F1l*bWHuBm?F?%ufZT6AkP-6xPOb&N&1PM%@?cfIhFR%=U delta 49 zcmaFa$oR66kvG7bnMH&F1hScWH}cv@G3PS%ZuXJlP-6xPOb&N&1PM%@?cfIhIztT+ 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 d112f0f0d8c0a5cf27fa1d029a8e7bb57c8c7750..309b97e57ef71e9814ba48a5cda3b0ffe111da33 100644 GIT binary patch delta 47 xcmdl~zNwryz?+#xgaHKfnEE#I9+zY`V(Qy`T~a}j87MIMmsJQzU~-^!A^SbR>v3z?+#xgaHK9nff;JUKV85V(Q!cSa6LPGf-giB#l6jz~pBdaR4g`4TAsx delta 47 xcmX>SbR>v3z?+#xgaHHsnR++!UKV5yV(Q)eSa6LPGf-giB#l6jz~pBdaR4__4kG{n diff --git a/version/dev/_downloads/a3424d721d24538e13ccae45271a6812/013_thermal_example.zip b/version/dev/_downloads/a3424d721d24538e13ccae45271a6812/013_thermal_example.zip index 6925b7f766b4d4f2f97b48abbcfa590b784c37e3..f000ae5fd2d6fd4069554af481df91f7a60007ea 100644 GIT binary patch delta 47 xcmewv{xh66z?+#xgaHJ+nEE#I?iFVCW$N2}R(QHNGf-f1y0#-oVDf5hKLA2v4aWcg delta 47 xcmewv{xh66z?+#xgaHI{nR++!?iFS(VCvm`R(QHNGf-f1y0#-oVDf5hKLAX|4o?68 diff --git a/version/dev/_downloads/a803e039e20f8505fa54025987d70490/008_assembly_example.zip b/version/dev/_downloads/a803e039e20f8505fa54025987d70490/008_assembly_example.zip index 7b1c780eb751153a576295796a4620de03600b47..bebc0b38d32e415fbce22859f1f7c295fd869b13 100644 GIT binary patch delta 47 xcmew!{5_aAz?+#xgaHJMnEE#It`uZ8W9r+yQ*gOBGf-f1vZfPAVDbu0e*iV;4LAS* delta 47 xcmew!{5_aAz?+#xgaHJin0hzzt`uaBVd~wyQ*gOBGf-f1vZfPAVDbu0e*i(04bT7p 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 08cda9a9bf7ce521789cd2f400163776b2278d84..7e14bb24b079650c1a39a4bf9312ffb6437bb66b 100644 GIT binary patch delta 47 xcmX?>e=MIjz?+#xgaHK1nEE#I{uX1lWa`_@EzY693>26wW*z_%n4D=I3jiI`3*i6& delta 47 xcmX?>e=MIjz?+#xgaHI%n0hzz{uX0SV(Q(@EzY693>26wW*z_%n4D=I3jis740`|o diff --git a/version/dev/_downloads/debbf6c5561a3af44e8fb8a1969f44c3/003_short_fiber_example.zip b/version/dev/_downloads/debbf6c5561a3af44e8fb8a1969f44c3/003_short_fiber_example.zip index f1d4722a84ffeaf47402e346ed2db1b51316d112..d476609239ff7151ea8aaffd569d93234e0a65e1 100644 GIT binary patch delta 47 xcmewy{W+R9z?+#xgaHIpnff;J#tAd4GxcrG6MiAd3>26gsp|?7n7mLo2mmT547LCO delta 47 xcmewy{W+R9z?+#xgaHKnnR++!#tAbAGWBlG6MiAd3>26gsp|?7n7mLo2mm&&4O##I diff --git a/version/dev/_downloads/fad9fc3907e684aecc38368b0126ab34/002_sampling_point_example.zip b/version/dev/_downloads/fad9fc3907e684aecc38368b0126ab34/002_sampling_point_example.zip index 3573b00fc6f36bd5abd72059e832118c12000eea..b952f9ea07d23cbc246d755beb0725e1e05f191c 100644 GIT binary patch delta 47 xcmX?~e?Ff#z?+#xgaHH;nff;J8j3NiGWBhC6nm|}3>28GZ|(sSm|SHZ3IH043<&@L delta 47 xcmX?~e?Ff#z?+#xgaHJ6n0hzz8j3OdGxctE6nm|}3>28GZ|(sSm|SHZ3IHcR46gtH 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 8017db663ffa5f0407a50aba2396f0f01657a7c7..f034eb94bd5dafbbd0ddc54c61c3d210ddfee701 100644 GIT binary patch delta 3635 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 delta 3641 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 vRL9|z!?WAW0p_=|5uRcX&RRW5hqn6KV2P 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 delta 3692 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 literal 23528 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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 8a6732c13fb505a9d15d0d80aa63d140f416f63b..f8ea6055be266a8b6f9eb08f57299b57bb7cfc97 100644 GIT binary patch delta 3435 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_004_get_material_properties_example_001.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_004_get_material_properties_example_001.vtksz index 78d55cdcd2af1d5302ae6b6e3f9727ba65708ffe..f01665fa21f8423982d31e177c95ec644f5c9f23 100644 GIT binary patch delta 3553 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 YBT5j2>i_k{3`2%nSL7J}DUlTa0qw97WB>pF delta 3670 zcmZ9PcQhLg*T)sLX9Y20#;V$lQE7?2OKWQcsiM?Ql_F-%*8B;nQEC)L)oiFriLFJA z*lkFySXI=1`kd!o=RN1%b3gaq@Av+Hqd>7BE=yAyS^yOl6$6zu^>c@^=;_<68C+mA zY^O%$5O0h%_08{Ynzu`=c7HTV^V=elBhf{d1O%l8zAd8JLG;)9Z@L{)E(Ap+Xdx#L+bkebo4QVm;? z1idqiyLnrpAcXZJ?;rC+=gw2K6bfyHs_A@>TeqKJJncKw=y02Qs|o)kiO{k?7ybol z({w6|+*ig$W>B2Z!*q|>ipUR-Qckz$7SChJb!yp8Mbm~#2&JABK^UMybnp&;T=;>K zjz-cd)L_{z^@X9qtVyTx%;B8!r2`^GL)Mhl>A}+nVZ@72iH?QDIzRHZ6MA>Q;7^!W z)xe^H*;x@`O7=CF3sE=hSGkP{WHK_a>?A>>u4`W!-cuKc0kYI}N5znPi2mH>+405X zCIwH!2o;gGJu)vz6lZooMG;NmRVSB=TDZ551#}Uw#Fy_&t z?say*KNTUewr3}QvTc|r(Wmy-DaW?faL9f#1YSHD)a3ldVNYJG{O~O&2amZN(InBv z0kP>e4!(%vG*%H*F}w4vL*_?AW8d+WYTd_Z`=zzP{0G~0*f2QbBVPYRwn7#JroCCF zr$i7$ik0fZNPm(cZdUo?Iye}^ON!fSz9wIG66Cd;f?L6Nv7JBAcTU3{Fzyj2`SK3B z^!J7sF9iB)-{(NoD53Dl;RaNpri22qs!ix0>r~aRgKkYE^MdR~w-r=>lU-ge=Yj^9 zzu!9kt|PqOZ`-!0oin5I=2;atb~xP2_h4pBJmM8l{s&(jmqiIG5a1?cvOAJ2pf4igHVcQPdp<5p8f% ziK2NNtu`Q?BOV3_pwD}@R%TzM`NcL$2Vi(UePaMO)1r;`O>WNRbswFVeO8-HxmkcQ zJG*!N_rP&~tIcHdv&Jwa%{PHe?_yWvl`#i zmXc33@iF;1asnek9l)8ug8c?nz^<>FpXU@H1P5C_3bV$S&9QmOVDJROTlaYZoTG6_ zFn&sJHVI8W8rIVC)PxBwOX~`IU@#?2yy|Pu123W&IH>O|2hO^?kGkprCZZXwg6k>- ze=NL_k1x9VB({BGtKB)E2!*PH>WiOkht}VpF}19}33BK2o>kkAsZ9R7+&Joe$>>S~ ztj{hZ-(+LT-LGK@7x~G#fcd=Ox!&{l!sVyKrE2Jpn3E-^t8Krnm#P$A5xAr1w+X%a zniKXXsR1TRN^%4BZ8?$fn#lrUnwC4Ig4sEV+1{YVpv8*cFyKl>+w}bV+Qlthgyex% z<=|6DwhWDJME+^6$UQwDiAPRSq}s5hAr>(lszdacFD7|qKhVbR?Y6lH#r{-Y4#+IV z6o!72n#-49w??%y$h?RM5gf6-JK z**Q(y8Peba<`>Sr~uG-{g?_fSe(E#i4EnhY|)jAYeL()5( z5~QlXr7ZSO##3NYUO5^2XsxNP2CF5jzczL`jCdI=dMOReLZc6zNCbiX7j0LT^ zktESlCKT$cL>O;)EE`!v*!pAh?0Qkvcx5Yvq{EVOX!A$=7P}kT$|wp1#){Djg7d{h z135?{Yk(wbdgF2<%5TNT1{vz8D;|JKmE_lU6J|;LvRD zd?EJ^$xIuK)5x*)e5#gz$;TryO6p4#pc5CjpbIb>_63Ns^6#d5jwB{H zLX}9^nS+H&w5sPNthqdYDr-GwTGJDsZls)$!0z8;V$$YrYrtK-6sKsN5`wsRq37;M zI!u91lgBDZh0WoPobN72dQM9&gOTjJR?mEKqR+VLWuF@{lP-IljdUsLulN{w#Gh}_ zreyYn#t@80N@-KFUpX-H$ilu|x#k%2Q^LOedM)=gv|G%Ba(%Orp~gf;Y#xsiOy!$c zc>wM|AnEzQv72_-EG73Q**L4-S|FwC|HU5vkId;6e@ktUyLC%r?;!*vW zx_?TxebyKWJel7ZQ5uk$)B5ieEtT;7#jb)+RpzoEPK6hX+z3_F_u?6IQ zpd5l?dUEGvNlKC-FFOhT>v%EtXK*vK=-7B6mU}Fr#|h9g-9G&C*0zi91^6~-Xj2&M zd$D{uFP4-2=Ne-9Z@e&fhTh1nKo@)XbQe6$4HUQLTn6m<(?I8_*ws3_Sa<#l(f@~` z<2#C7x-9Gp(8is2pLLnorJ&h6il22E*oC3NJMZwibnLuP>zz=>w5**YhF(^4ho~@K zFPL7Y3(IcNl5dh?=v?(Hzd;>;iiibh0wlm#&R_zHQ)j@61ipSLqNtzQ2P?lRIQQbY zI;vz%nr_8S^hYonpsboF@vhgZ+MgqRR)K{`mC4QJ2d$~791^3g@M$4G@y3t zVNQi;d-Qwq9T`mpTxJ0v2w^l@P&qdkDe>v~2^?=z^)MQm7q$E;6>_WO@2lXt~;>cuJNB z&->ejn{j`E{$x3iepc%1L4QMR#4jJJ!~TZ9r3ktKGmR{QG9UJ&l_1A zjG=e%(pXO1`aNuEdArz}@&=a~qDiwK?A)8snA4Jt=4h#Ky2+#2B(bO6byuYh2wz=$ zNM7nPG%#HxiVHaqtP&N^+$NLY8?U;oE6$Ej=II5lL?CB(K@u@wW29bYcInuzP>)p{ z!v$?P!UUP8oEk$Fz>B9r=O~gPc<yQCfB29|ZlE5#{ z<;!0SEWF+Ue!GM>25xLWq2JD>^U4lP*>MM!ON&0d(b`1)xo!!~kuK8d3Xs@c#4CcG zEw5j20e`Mtd~la95ZucMcaM)O>Mo~k2aG)b-TD1VEQy4CqemMTw?q`(LYl1Y&6e zO44XHNAQ{X_bst)6?1|`e?-4YeE6M%y0enO{z-OH%xbh6-lwp{rK67+ocv2z4t8%X2rn%syL_+6q{}CxX6xct=4+(2M9pHTy7e3CsxJnqE|}AR79B2!ra)Db;ES#mG;u>dlENRoPXHSt!=YR%#{G0Qj5)q8fnacPi&_;CB1*iG()hKRvh^fwOw zDL%s3oq{=2Ee4^&_ow@Db&`>*Q+sWvjY1!t2Z9h10;-;e?)Tk9zf40u${Ytp3cszc z=8zE8xk-L$mgdtX(OI&2YBMzR`ZL1Y?& eSK#85*V6P7HGt;-y^L9gY$|jRw!eQQ)xQAc-3w*_ 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 3e9b58af2861e5bb5a52001f48e15bcf334e185c..c1255be345ae6dff57c7cd60c1962b4591c06a8b 100644 GIT binary patch delta 3719 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 delta 3707 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 RJpukXa(`6)PxJ%;{sp}h2%!J~ diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_006_filter_composite_data_example_004.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_006_filter_composite_data_example_004.vtksz index a4aefba8b2386fe39e81ff9ec894973cf8408b50..aa354b3130d63f43ec52ea04c1679db8d5b88999 100644 GIT binary patch literal 3739 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 R3I3l{{DX#n3@9Gn{{b(gDHs3% diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_006_filter_composite_data_example_005.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_006_filter_composite_data_example_005.vtksz index fd79c642299d5b4d40c16a172c29dc2b5a0f6c78..29b128d30cc2e6ab19924616ebcd6742aef6316c 100644 GIT binary patch literal 3720 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_007_interlaminar_normal_stress_example_001.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_007_interlaminar_normal_stress_example_001.vtksz index df7432a5924ef730c0f8be786258842f674015b5..fc40eeea8a656d9ec6a154cd45eb0d4e4152025d 100644 GIT binary patch delta 15824 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 delta 15817 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 J=>I0S{}&pJh06c{ diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_007_interlaminar_normal_stress_example_002.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_007_interlaminar_normal_stress_example_002.vtksz index 5505dba145868ec71eacb55069e5732c05d76d58..e662ac83aaef03cbe9acb28d7a0c349c13ac0039 100644 GIT binary patch delta 15865 zcmZ9zWl)_>ur(Uo-GT)7;O-lDmq2g=1cJM>pWyE95Q4iCY~$|k?(Qz%drsZ+=T>#i z^sLoAKf0=GW@@@8VquqKVR2LyU|?}Sefos>i32+NyGnf7^KK2!>=4i#nn5kUIurqZ zaFqTjE%{UO&gH?@m`xN8*~t7cFOAi0bv5$*_S4-|V%DpyJOw7J^LVLyPmt3B?R7sW z&rrng7%`i+yh#L)t|Xoqmz(^7{x7mLh@6EjTL{H8x2mb!;yf#o^%B+Z&Lip7&H{ohaz8`^jH4h6M@2IE>XHr zS{k;e9+vK^WHgG-Gb6j7685t7nC&&i_ZuWv^pe{H(uHu>4x4}kB%3|CKxmUPSovUY zc@J~bPgzcv@Vv}7u(G^S<&?u~n6-+0ieAIBoGugtEP28BB*up!P!TcD!LjlA(pjP=|bX?yk20V z%2EHFagI4p{vrUPis{g|k}5dOK~W4`Wao{H-UdIQd_kP=h3+omR>CaypCt72+#be4 za7nS&r&GANvvjKdGAk&eWNT^{v;HG0Lfwn_jiYR^gI8zBAjLAtU_r<*+gAgJ0Ew5p zoaT%v2#UN7DiY$66ChOJSWwYnTCNuS4|0;pVK zgcVT}3xwu0T6RLQj}R{5ui>{A=mLVeY^^cLM^9RuLR$ju#x^d(dWO;Eldtesrjo>D zM{R-2Fa7issbzk)2jvdG?=H_G_;zI9eU^xxdQoUxvY915OLNfuwi~!s7O0mSY^`XA z)#mXQ6?_05X7O7`kgA8HJo91jwltMRkLWuQB<;4nAT`060ij-fU8Fztv^<|53%;~H zLm4O+$}07S!-n!}UDVNaoBt6}XI4Sxu6O$SBQqjow+_t`h7x}=cGKOBvNqf@uQsYp zN7erav|SV3Rl=-JX`mAA2RXVeim)Sv2Zkmht6d0SySWyprw-qQ`A4a&anh#yNtr}? zw=rFZgXnIG>Z!+B!_RhtT&UY^w+4n2$>mqs({`~=9;#29y+BFVN z7vdDbOmQoAsG6YENHSL0Y$n3*D@9wVa}tGshG#G3n;=d`E`^O+x+=)cqGs?Ij&fWk zk}1OvhL)RP-_)%R>B($&+(e=T)@5oGn0wLK44_7m=)qJ#Sb8Y0n>n+?nbcI?Zd0@f zG@a<*Xc-z)E4Yevct0}4QXPqIqZejHY^usjWqMgxOA4Tdt97=(G|Y~AGE9!ZSUm$| zr!w~`^etQ?c0Y-U^L{1rn@BXqK z0^YxZt`XU4Rnzi_nor$ynoXBlJ=)qO=_8O+rH%QzGTNfFQJpKzd4*D@nXf;7rg8c7 zOL`=W*hBAoJdqD3_+G<8&s-+tU;fml)Q3Gl1OMnZWsgOUGaIGoZG1H7@vXFt1!q$9 z?67k`I$rBy*OMF~8(dj8o#6u$lj0<8l!h-SjE8dk!b&U==W96Z{{2V|wW}~7z zH_Pg(Sq*y6FY^3{xp^1g@lJG zyZlk%TeKimKu z!|iYJ<}Ht zpfp%bK>zqh5!K7unr)}!7}C{DF@HzZvJ8(gc8 z9&P_(PgmEaYN_#*(^tDotK;>!!%n%()YKHh1`NhlwSsnFMgSx%LRp2A4hW^5!YGyR z;0!ydZ~h2bMzG`-`dr(wEjBxNfO^$aUAzfKTX+w!_%>y^T>t~uX3Dg>AJ`377LKuM zkQWCucc6QidLX6eG;Yd{gog~TLev>^iLo$$v2XKRkyT}uzn#|~AFK-OXi>@Bpj7*p zh(}dTzA6E)7QQA^uVr6;xa*DLkEuv+2$}Oye)RlKINy9K*>MnqcWxZ>UGA0v?=}wf za1;IfPQap;D=2&nQP`=$(r8P~a`{2G8iN(j%eY+)J098O6^Nbn<|qAbp23>z8m0R3 z$$snE4KfZ=Y7Sg6pU~YN33xhj3g;{y>JY902VMgcW2W}|5_KJJKU#Z6C|rL8R$`1X z#?&~$lqRs`*bnqo{*6pH?3`CY(UeUgo26h-1Fs2@9w~|O8N(t2d88_sOkOmmV|aV^ zyN=fhQPH;wTN*c2E%PF|JLYNL1UKT)?#GF&zTw`1ns#$~!q?E~ykX7ueU-&Ln_^aK zwZ?$nXL)Wxy{Y@S5miS4Z^~{>Za=Fge`jBZYG^aWGXhX9yPL*A`b{SBpVuSA3x3kt zSXJ@NyqdIIyu%Vh57kERIjE6;4--z=qT-Cu6PAs{>VEwvVgoqbSm?2FJ^ZW0U$$De zYR0_Bwex;dpP3JUw8%80_)CL*ZzW=dUMzv(zh*E|`FP-erng2E+%=w&6#j{lPVopB_uIaj~ z{qh$^F;V$nCD$-2taEcqH|^#vAA+chCHcrbT+Y}}`vw!+3no>f)~vR$6?{}Ln+f-` zC>CEfhO({$@@SEVAyrmVj*Q1f4x~6hqSZM$g$98>sm(&lR{zjRAL)0qkD)~N;LoT! zLzM}i=&G?mLW$p}Ew1Is!TgHEWKJZd;Zc;7`s*dF?r* zCS>X(=TGpqEGg42!`E0xS->rUCC~t`{BXcbF6L^PGo^`Ui1>`?cKj0`^IWllrY4aC zs$)^Q@tx1J)Xe_pFfwc7r#&8k!gru51t~M4umMTfT}w1qYnsy_$Ot@7pj4>?>VHIx|awwOA-$HxC^BOR1t* zy(}1rMa`!SSBew94D$m(9FB?_U9o$JaE#uHISkurF%SOCA_bpnEaw>1lXe#JF8R2_ zF4@C)gFO$%*f&3kx|cUYK8lYFeK(V(HGCvop05i>KJ{8pPRnie3;CpZj`@n#FY*dV z^&Q$o#yylDX!lk?HtF|>*9h!Yt$TgN&GFRWSo`zjQk`tK%N8YIPW(&a-99#%8=^|- zS@3U!K!xSPs?66}asCX3vqEJjgy!6pWRyxfr0SAX%F}2`7}wf{FVW5CEq4ilJ$V1> znJM7Xq~r$+xF>H)N6v^q`>=ndilQt|t*~>m4Xa!P$UiXpN%hgM;I=}#Pp+)h(*jq+ zsU_HPeMG5>ri~SWECc9Ng}lt7SjlUuaBY@k?X^6{9e8kQ%^IN&mrA2cetMEnv_^)$ ztw+ebr?;S@he2l7Qnka}Byyd4Dhw_Rd=n#vKChrQlnKq+qe{nyy z7wb^7(v-6FdxOBL@3zfn*wi&UquSQbLm)!D%^H5Hk6E9+Esmf^Gr3T-=W@A0F!u@s#}p4agD_ba*{U_o|VKN zrOx@4uzUb#w}}VKr-VT5V$fCJM%-UkXp?icMrFOMSYFe}qbs*Iab^a?N84yDFo_K= zd>u|Voyrd&yhz4VdcI7ks#8w`c4m|izk=CrfsXTfRX2BrOjL4mPGcP_$G_UnqOO?aZ$m-HL`m&ja}gtKYQI!3l63dWWR;{R83ygp+!tt@^z>S{G>U|L*T6(XG5qPQfGp)z$J0R z=|ZpVQ=1!~YO@|1gA(8%mu^hNg@~aAIF8$gBQtuonpUl@2h+bx`ZbHqa&mPUuCIyx z&X9cnaH73Eai7viPwt@!h`Up0(*_jH%Yw z(>Ku7_A2v)M1$j)RwGZSU0rNIGn-e(gk( zxLK2r$1+?>oXL{#y-oGujXzSjux;aHwsK4j{H|)Yy1PK7%4n}?$XOQgC{V7a3x}0l zi`*ahjFdm_vNyGt7EKK2PVw#(Nt=r6rxhr`LEW!?o59P1lYv%$7TiqnLYtSyPrMoY z2Q+qCN$w-En$(E&j2Y7gPhOecakiwl)nT;&J+h#GC@ zOWDpBTYBRmBnV6Z^iX#^ja_fIp_d!tKxbi1*q5M7)WDHR+3N2OK=l~AebJf)20|Bu zDOn`kl^PZ=bnrKRE|ag)WyzBHLWV~s--ls=ZriU0m1zO)gB{-R1xFZ>_m;U?g($6i zrX>DWgNi!tD9KSip2pVSNu+=GRk$=?|P|K+=0FJ>!)Yv%5vLd z(%m606rb)F<0-p)zJfL;<5NnQyO;{234Qy?*F}B0^@{0r;(|kmLB!Lb(-SKsjgwPO z%+1O$DB8pX@{P|x_^AfHU!hTzrB4&l2kuKzXg}GL2KTfKToiysqsRh79pm}S#-=t5 zwc6{UyH988fs}6Vs&D-|D~h%!;eong*`um3D))f6w+d^5 zx2epl%~SuLt2W<9@-?A}klceq>eUQ(LmB1B@g}f*|Job)Tkv1n48&o2B3y0UXDp%&M0ydd8KZ6g}z*t30&p#_BcRN z#z|;5!(0-0Hc5frou0-6WsEkN_Y?Cu4*NUU_r+6V>Of(#Q2(qG7)NA!j5=jIELi?) z`x>5}HZ#xN4^3Ix0(TO66%Xm?zt{8%UHmxITAd=_K4fj-n7%p=Q*pHW7G#Gw3?cEh ziWT*KiWw?e{$UvSYH!$}VrkHh39O?R^2tG8Pdr>ZA`Jn>6hb7!__;IS-+Y>fGCil? zJ~q(ZTSkt>ZefwCP?LrcpdXT?Tj@)JUm*?yjpTV#&tlos+`FAZ#^`dk!6~E_<_sI`d@Lcml>OEfbyTW%tFq>UY2rrXH}#i{ zh5JEo#VH`l**qpcY#X8)E=^hygN(DTn!5bwZc5cn5j*Rf(AS9X>S~l)P`g@=qXe4u z9rAVZ5yHdDopov|{AbvfzDZfb_eA(ZWe?zEcm1H<04v)qXum?T{g+_^hD|IY!xQM&-#m>P}dwRe5nbCYJUv(~Q~I*{q)>7Y6ObE*Se*7)g~>@f_*%pT}x~)fXrH zuf)q~5;=w0{y3OX#h=O4L$(!Y<*O}9v3Oj_VoX^%zl5t?oG~!|5e!$^vsF7L!O4I8 z)_+poZ%-8-L-yTn@o2N+>Pngq*N5p*)g%;<^`4z2B2(~wT?A3$8ad03P;}*QYS688RX^Wp_(0z^#NV+Z3p96(jPJZR>;74ba4Ns8LO;u3Ag!7nn2WAKPvJ z9gbUn+QaDYqpoX&_omN+PMrJej{C7-^0krmA#xiq@;x(X6?+QtGB7M3t4ECKS+NB) zY@U?p@myrRR|=)BH7Pd#J`ZDMw}(<^8p(nTHnPR8M4y6M1+h)H3cf~9u?l+TzDiqZ z^5gv);FGA{LMYnwJc37W^~ql(9gY#zF8D)V`IInx8Z!Kead^V#rpEZeW2{PYXe!I2 zgw>&rtyG|fVz}z~*azT1AD+NHJzN2xWg-bI2g^Sj9f*2S>hf~At7EauAvw1n;7nJ& zB(hTP!0&||ea8q6@uSV&4RYxuO~&6VlJPF0{U;cftNNU;tcWs97BS<}(}OT7K|H+T#|>D!X|Y#mQ6-t?UbRy8j=-*hZR3wb9R6W&ch(3VZNTZPTiL6fw4fH#so-R#E2h`r9p!#aJ zuy`5!{)~&btv1j@QdlL9H1!f88B04$KjR~=UnL6l4jOw_C+6 zh?;}=uY?vC{=oRku3t=)1z#q3oWF!PSdkB>i)*9R6OP$eo3F@)GHG4+ldxx~>sj6e zCv(Nj*g;o$R$1SHYc(C3*Qn~Iu~=9qA+xRG*`1H-9>N!B3R-;AsrNI_@53Et1A2d} zE~=7~I~uTEYqd(keLR8rC7VFKWctcsNAX8P_3i2J^ADzPBj$vF&V+lGiqi24Uw2IM zobXCbox~A1z)uvn7q%&-LS7@Q-9{A1FjO*Qbt{&Qtq-X&##~2bO_(otf=MU8JXAcg zH8Z;A-w+#SnrwN%fcz^dz*tr;^=4Y(XWXRz3PGh16CIcfr~@itL*rx;viVL(`AT=A z2OXpKpTY5|Q724Q7pyx)6vKDb9S}wLRPER+S1+SLbH zNRJH_0bEb*Ed+n`i?1&QZ2%6w3p(qDr@2%iwOuHSU?kH_zIgny8A;AY?s>1ZDx3z zDo5#h5t{rgUG>bz|yn!zOg)&ip2^3cegS%=$Fbg$CE? zw6XV+j}0+IudV<4vJ>2}*wEtkTqTLBl3{CW&d)#;4WO)HSS>fMp00J6 zqGtcibh&j29y|W9T4ONA8&1IUM6SnGop*CNA7C44(3}PD`6ym_c$N-+e8(~#a{Z7t zwxFrF&#sc!jbJ`gmU1lqUP=V^?$5)}(f5Q+bm0NbXW%3V0sR^pWQtwH$S7F7}Rx)@vW}im?c93U_{_i?xtGX4ygQsJ?iHbKGL- zE@#?m)5A|}99g>I^ki!N&Rap-EdYHIaBLgd?D{d;W=3StK+;_&ID;W}DY*mEjH@nU z>xLaTUv(Jx9g@VgTO`3t=1jQkA)v?6cy8phlDsVEj&Lfp(_c7V|JgaP zEav;zlTDV}770%;G5L+2RcfDmnKIX_Gcj}sPwtWLvP!wzeVVyk_Tbrz#dQhr8>){X zEE$0L`ViDPXi+oJ73>3V_C*5_;t?3H5qwnOV&hOczPn$oc-e^b^|ZBF?%qNvyZhy= z824%&gH_&~Z6B*jiZAza_u9*jGon2t-&s`EyS+Fura=<99i2mnc znf=rF>&a7Cg39Pq57?}SdW6n;y*(?(A)NV-yX+0LkCQfG`2n4dl*kRc&V&l$ij4E} z2;#uNsNlLCP7a!+$yo#-Yc!$KrYXE^IDdol$oEyPF|` zkDUUJ$)H9(>}4k(OP>+5@02C^9D;vLXfOEanAI$KpO!-AD$l8a0Iph$PIL|sn;Lg) zu42ncrL6no{C*Bk&c$cLVhtMPS~LSxMcM`U@|;kk9chZ!rW@{5N5g1`t8|-G&g;LP zzop(TzRa{YKBFxi1PakWP!TPXG*ZF~cC0*F_Sz#ogy*ja0utCOpG*9|+r`1XpMkr~38_C0?e3Ad6setO4 z!YnT_6DB_5FY;eZ>K1v7kdKxJ!Bjwo-g8YN49k$eWG`Ub(wA2TiTu2K^2D9Ln)1>p z_L?%3cT|Qz1ku@X6Z8G=80=~xsCg~fg`w4M)!Zm=&f{S|2@&$Rhr`J)BUL1M^j6-W!9Qeovnf+t$D^@I|6;A(oeV6NxB4_ zJP;@4qye&{skQ|qK@?<&M~ob5eB}r3TrXJe2#&%Ky0Ot6T&hf_meaW?Xd<%QvSV{v zyh5xxiS3Kw&qp~N3Qmc(TP=L1MoVtVS#w}YF8fK*`yHAc{njHd@MPnI04K@9jW0Q} z`PtbkdAJC|>hSzcKt+AR(a#~(4-+!&@I}u-Fwm)f!PlBi7Pws8bK}~l@+BO)|L&EX zd59Ug;y?3tn`*Ae?mHj7B^d-OVUX;n_ffmrIq-*3PU-9a{!l;NOyqoQycY)@eQ~M? z?PU*pO#fA0H-KlBdY?Ku(ELoFvUWp@94;!W=n?JUdlj0(yAVj|Mb`#DrS$8$y%`bU z98VMsin5Gh(E;K1;z5WAoX|7wUdU~U^=FS|V@UPRt&fAMo} zB#-LFE=KD^BJ|Ham1vTtZz6KkF|Cf;pj@0$fmWRPi1lSUw5rEJne@%u0}n;aS(89`s^t{oEROw}2w{Pw<( zkYk&%Ul;1in=mF8OJqnX9fyD5ej}v#7W@W|n6zEqV$IGUZdn}H0I(71x7c6e>x*x@ zvJCZApM<;DvQ}~u?q1k$Tnp&j^dV#@d`xFTSHTYRj)+>b;?P!(XEx|dzkn+!qsFk| ztdYC7!5b0iom_1CLRPCv<%Nrd&t4QQ#Ljg{Qs(wj-pfHKi6c1KTXm7wIEhgP&1LOi zvIkWKp!mfhn3gpw)VmH0vN#`ur3*mZW7RnA8ai4gw1Y3N>NICiiv3BAQPS1$H7Nai zHUe|}LfGnLlFu7h#l2{A9~h(@j@gb^kExUzodoOLxy1gLY02Fwzs}ZdwC2lavU40v z$Evcu@0$%EWSNcoog|eAdT=WVBLoNMT;eO3Wj^buh$$Kp|47+Uw-SGqtp^dyB<2J> zKgus$5QJur?83YEawZmD-v$m=_k1JA~9;OS+Eti%1n z1>L~mxwTHQ&LQ9q%zig^pM;$$C^NO&n@I2`{aH{me`Cv?MkU2OyN5QHF#h~Ti)za- z6w#>;^_`aMA83Uc_OJ7SB6B=ltjoZ?k5c-b4z|^aU5Uf=Cf~! z5FJZ0f+^bF{9c9{i^vfF^sExrWpXLN7j#T&SI)2|vjkO@uSPcu z^Eq%fYsQOGSsKZ_QE;v5>iO+_J&ZVS?`wdnGKrysB(j1fL!2#h7y8!enAcHOvy_Lo zy*%^gGWODg=F$E+x8SF@6}K8bv1hFm?^p@tMAhxx#i&N+MH}cj3C~5TttjNl#0B;Y zX#KptVm5U9U}|U@4MX3z<)dPt&&jT|&M{~`DIxa?4+yHfxL=|E6DNeqkz|tvyM>mx zT}`cqF&p-;29*hGoJ48j3Zqf^xA*1tqC~XAKN2wlhzr>h!ri+2x%8waO^1+wbp8Mi ztgC=#Z?FO6BU{KMhud8#iR}*lP_$H8mA|+3$i^CsUR*THGPPK>kwUO!K=^YXHS4Xo z(3JlL2_TP7>p*DvM}e!KZ-|2s$vF#+QzsWB+Ygtm_xsz(1Es_FPQus8^y2@m%vQ*019id+vFBmRYZFgR%OoB;AI5K zQBGA&QD=cuZhR8%QW}e7-R1NR#Q`av*0ODI){93!&uZwlXa;x0rEUbvO%{ZKVv&uW z-TEd04eebyXZMCSL-ZHdz<+PpMENPn5DxfKw>**ojp8Mk(@%Gcf^$1G!+}1AcH;YF z(f~nvl-owaPgtEvfke75@OJG$Uh!Xw?h`bZeO0f*GxJrLA_sc{7W==L6<}Y!+CdxD zgPh1PNa+>oA`-@UW4BzXkHGTxIj;uf0(??hq*690Z5txl>3bSzR159As*^V?X>XjW z1J8EQpKq)WeV77as=ptNdy&=fmb7Kra{zt}XhRcimbM6YA1tvt{)>RkvnnAZ_|sf8 zYE|=ZkvSJ|hREn;*LnUca`N&$EVo@@Ws~+o)kvRC#f>lJPS_t4;HuN zDYd?HeyS{?<2%tOQrO`+8$r$y!6b_lG!LZMuzB5q@DG_o2zxanb5~@`TVCB={Q&+f zKGQa(K)$h%OkaL`*mXGrrXFkWQJf={3hBa&gxMRL!S3&?!nT~e8;*8VU`^`skDwN6 zAj9Ff1UCHNCawW*-(9x)P?Phc`hU|xg`0H==gwCh)$3+IQ=)%TR&^tByL-`kUen-@ z+y+2MN!xi@>h5*#6+;TG+;&>0D4I0MKIo+1-sLqV$3_23_^MtNNi#*UF8nR1kPRb;3KMU&*C zI=XXVVjM@DI>$<4Lw5mhHk5UVI}i1eyz9?+Ob6`E#+U?Lq)WwFY1kwBr@-wrLD{7T zk&#M*x^HL^@g7aeND!LCCdh`;@S@7Z=(DfW`gxTj>r3mjc(MUo5(HyJQ-qWh2Q(vh zl_=7~UtxEL-jYdK_-OXmlPi#vM?TC0-wSIyF1hwqWF!<0WJ_A#vBKcTyZ?F`Pr;n+ zuj7-s=} zuUdC;!)KyjH8+k3enyBJ?y!YhI8;zFQSsCXJ*I*to$fu_l}T84ESyU{Sgdpves9lB zp2BMg>n7WKdl1jRI&b9Q{cJm(;b(#zVe5RiHOpp^Ny!kKLkVF@gzHQq5$pFNn5ICnfoEG4^hOXdAETMlK zNMJbFl}lpa^b3}j^-ZRiY|TV{Iir<&p}A9wm*4ys{X%^JTg`=b{W_UNnPVK#r{=onB}?jrbF>?CQU$OcTu? zPK$I1X234`kUvNM9k}`Xm0n@90E|&AiGhex;Dg>kq?>RPIoS5W;E*dS;L$tgY3Z1W znzabu8^DsFhF)>nHXR8=q+>q8XGQBiJ3AZv0?glpkaxe4gZ^!c4$Y|xpD6Wgg+8D@ z34IBc{-4?SLOw+1*N$PuNG6XpR>OSK-wCZ#tPhVU!bt9pU8+>YS!`O(siVg-TMG4JsC8-jd>&9yR&aG*L&GKDMouIsks1-y^_*O zJ)!!)j=88=qbegz8eg|3`$4L9uIma95jCy#vuoLa=iqwKwyUJ-PH02?;{nY3UR=TP zZJW^YA8?y+CuOt!i~(4z(HdZsg0tuL{N?pB71U54y`u*~eom<@28w0+9)JL_5Ri5}3={*Ve zBm9;fTEZE3q`K@W+f~m61b<+U+x3wojiHJv#tt2E9RWO%Z6w7(e`p6A!|Cqwh132r ze3VMMd8N5?(w?r zye%^U!nh!)mij3V$x4=`I=VxxS8d;vfU`Oq`Bu+cZA$aq{tML{|S3 zjy)_Ccp2IF=n(OTZ6lLT`-nsQ;>b0IY)=V%#Eh4zxI8)=zFBsXNqXAf<&cP-7k5-d zmx|*3(QVBIQx+uwV;}>moBiJb+u0qhVIy8*Y@s{#wr2uzfJk%t>vY=$jG0Ds0a7}? zr+>a|c7EK6c`@Vh~{<`<>0knOh|{pbz-lUFyr8fQ=I zbx23bhYi6K%X{7L=e=Q7GS;<;VO<8PTlocw=c7G{?wSW6^kUck<>_PW@*_PrB({?d z+UIx;v@6PV`OE1^#c{K)0CLb-)%e;4SJg2FYQ3f-&MvdI1zHW$^M*o|9#I^(q{8#_ z1F0(6z0H3;du_?yUxWD5O%iezWJj75RywqA3at&6z^MnUWHi=2{(uAVUDaoa%8QBT zxOYp8c3q%W=bK+cM^frnDKPr@+nCH-*<(j!-Uj#``(xTaob>JNe%})iQBk+lqWS!@ zU|*$VBm7{HW%}KmOd=Bww1W8YwkXQ|_?r4X` z?S3q#=fOr)AT931Ul$@HNdaZpZ1bhZVFN+|@d&_1vid^<7qR=fU)IU1)i?4LL$Ctx z%_JX_FuL&F7blL4R@eGvUNQ$EN?c+0f!6C}w?Wo^NM-BeRqFt7xoPqq1E#JPNFG%Z zt~68@kRfzC?(Y{C6OiUEdju0S2DRoJ=Ym&-NT$28KBaU#+l4k$%jgdmbKt27_^khG z3IJClFRxp4;0L`AdOQyl#|?F;WIcp;r<0kFZpK(3-Ydc!=*3E@{FoYZzjS81Y8F~A z{a}zRpWjqN4dv3X-n{#-$UKSTFMT0Uc9<~FO3~EK`GG^?9ob=>8-a9fD;FEbZ)Lzi{>zBoQ?w3Q+YMseTrWQZ{E)A zt(#Q!O8zV1UC4dX9eF-J}wT=My&H|-`wK2D2(f|1e%5en1T>O8l zh^C=Sh+el316D_3?Cb*NxdPUm7XO`=;GLH6+yBaq(h8*1qNCK}zY$V;(D8rrpAIP{ z==e_vpR11h{#WF-%fRuEx=?aHrfV0YFHycj_Na?V)YtyOUEXiB5P+TY zDJttfP6=%K>zY{OKQ8^Xe{q+0o)*H+`xMpwAEgX7b-X4{_>anb?%$u~%`FQkby=9E0VJvCgWQ>8HAiOoatWOjQ9V1g@-Mfr$KV6?C zo#ir|vnG2;^M*;PI-*3N^$n+&35b510dGkDb{U=%#L>58vFtSMfK`{=AxFOqq zZRPt<1wsMLt)fELW1mozi|rg}xGjUs7fgcnz9kHfHkIIsnn7Tq=1JHLYoiZz6-&Lo z2V#$-UdQv<-VSl52Gw2pmd55B$#z&jj>=pc^w5dNUqn)a*sptB<8$brwuFXMGO0J@ znj^MJ?tf|R*)4mb=?C1KlVakJ|yLjvl4Uo ztbFV;&XaInY(mX7~){;kIfxAf)_EFV~s6ALXlyx3%c;_5~!-%{{2m3iLn)$ z%=F20%_MYVWPKj_{h_vLF8EznI&34+aU)U9Xk?z^QC+bgtRW3%rt0`bcBS-!xUI0X za{N(nYW=eA@%%rN?ACuOb}g&gY;w(*6GXeR2KvRR>u$GStlHT`|T9xC(Z8nrHH1* z-I#dRcH@p)|EFn`X9d>(GVyf{ANXi$O4_c8Hj{Emkn*_e=;X_*MLU; zvIPp!LzBYI#$Oht_o);f7$|OFK_PSa?QCW$)>;G9Qq^Zq901w?)!E;XvkBwMr9c*Z zUR;#-H?~e7&iznVNiiS0Cox%QN7Jv`(fpVnd8X(o9c33OEJ`AHN>bJae{LHae^hXl z(p@xBVVp!H15$;+N{8s-#FQA~5aeq20yGCJ<*v~FL*D-UuElQPeUTULHK12N; zrbl<-Iba-k0);l^K-#hZk2cU|#W9lYMp99?K*cA10fs+FNi!M`(TV{Wzs7K6`LL9>ic*hdo z!4fYE`yYqpZ2bShzr<4p{-@CHwToH4#Y(2DmFq3Jpo`aec70iC*)!PUDRzV#C|3wk z%7xV*6MmdqJ`pk)K4uTAJ;J~sI6MBLrf+^&eskny-X!!Z3APzvzi4Q98BVD-GMHz@ z{iBbMef^J{z%zYrqrCpt@XQm& z)lpWf>rxhS&3t>IRY&X{6^nA5p8gZ!uWoi5c%|FS!+fQIYGbz1!8M^zdynD}MO=w= zE$$CDI)$ueD^jA0?yqx_YU$eEQer=)6%L9TFz8nq5Eu>Ju6<`kD3diV!C!Xh z4W(F+Wv|*(6;Jys)yg9~d%v zi=Xpfk(6Ph!%JMBg)Yv0^ERhR1XaYu;$_PCHs@9nuYnKz8zE5z)@5S}16~&&NbM>u z+Mk|F&0pT^RlrUNlhVYIBXZwjVA6||iya&?HHr9jyc3J2I$nvbPcmTO$Esp)Ha*|W zLs(>OdY$J9j*`3QQ}XZ_S9s4OT;7ZKei1hYfXSuxefT7!^?1spx{mb{$>#TrHlO$J zI(wecq0jl|H3H5xiK-Qa_;pHG*6?uJjqB;5;i*6S8eM90C%eS-BVwMs%uUbA<3G*R zuhxe+?HaRL%-K7aS(Wde7PkH=H?<3u!TsyI_7V``rX6VY8)0+1r>pO6*z0xo&yje9 zB9J+#aYfpRIkCF|dy~}6(1Slcz|UaF9ev5yR{Htek?&kEV$DNwhM%of_$>>8WcA{S z#g6gW7?MM*JsFBk0auf`tfTjgc;k@F3gS|joqG>RI8Yf`Qpyk4x_BS%CO&q%;=~;E z1ZS<|vwXT_U!7+=Q3+g~{b(=VsJ38;1tn#i(|QvsirFtPKD;~`sK|6bAE+WRe*xVh57%rbf@4WLUF>QB0~Mw>HYrzgoLD{ delta 15927 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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 7c5e1be058204d0d57949f955866a3234358d944..ac64b56219b8f1f87d4276117d1c612bd5f18001 100644 GIT binary patch delta 3665 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

*q2>hrzRKTu8_)|M5i;e` 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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 370ba38875e49c26be760b7936e80e1842c49985..3bf22c23204007f7d4a019c2ef34441b0bacfc8e 100644 GIT binary patch delta 3045 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 delta 3073 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 McyBoWS@@6q7h)|p4*&oF diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_009_short_fiber_orientation_tensor_004.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_009_short_fiber_orientation_tensor_004.vtksz index 8d9c04adf527b86f841265a7b25386c39a202ac5..2e97cd4cfb53312f5bdfd31aa0e9cdc799785212 100644 GIT binary patch delta 22032 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 delta 22047 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 PG#5o?g3Dh!*i-)k@9i@Y 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 34d225a4eebe9d43c8c271ecc319f360dc04dd32..e46849723c7b3b26654ac7d0b0613ea78c4f4ed0 100644 GIT binary patch delta 22278 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 delta 22273 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 Y31Ja34*&oF02Bl{i~s-t 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 90185541befc9dd82c7503e7ade0fde6324fe6c0..acb39e2f37575a00bf5a51cb487db829b26765b9 100644 GIT binary patch delta 3730 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 AmH+?% 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 2db3d4e61999e93db3039361bcac3e7075cef57f..be563ff27c0fb6aae4d376014145093ca224be46 100644 GIT binary patch literal 5269 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 literal 5271 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

`_m_0rMlDS{?(Gl!6o#`ikQz7ihA4_ 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 Y?ZIvTXD~C_IM;B;-*dO7HUI6u0KLt6`~Uy| delta 22955 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 W^X>o1!kmAg^ti@Pr5mZ4|Mp){iItK7 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_013_thermal_example_002.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_013_thermal_example_002.vtksz index 58f2e146be34523eafe7be5285689909edbf8cc4..9ba421c97d7e009e349d81891ee7a7389375bd5e 100644 GIT binary patch delta 21346 zcmYIweO!zC|Nl8B#BsAjNU9AX2|Ef&Yu6z}VF)2LgrwtiR8Fh5U5BLTW>N`dLpmL& zG6^YblWtZitI$%}YFn+W+Wq~mYrm_{_mAIS?a}*szpwYr^Ywl`U$575GnD@XmH%Y7 zKhS2%{2zY!Vfqhyf66-cNaR13T46WK53J?19%V>F+c(q@yT@3~>C2bL4IMue(s%!t zZTqKhUwY+X_wZXl#fYeJ-Sy?uH_x}PlkU8BxVcMj@W1vpH8s`$j7KDURLK88cr`>F zH|uNPmh_*#tT~b77fp2|;~nA{9FXaZdD)vP(;5rpsQC-U>E=($Mmf)bajvs~K5>e$3IrJxTi5N47abkMD(KMGO0Z=}8~z z1%7c@9WrClJJFv<-vxK=Mqlc66zXaFvfB-7*q{`M1jl*J{J$)#J}@4=x@fB}gN>4mruY z71ukyg-r_^UUYfUA~eb@%k})%2Mz7`*X7j3m$jhmrBl=OCqV2@cPg;XbP-E^@>dg`vE$*( zE#H6#hi2!Xbn{MgN}i#{Y$)o`)y3}U%+sg{aAz=X%>Thp@Oaxef{B$u<2f|1=P-4e zyjz(8G+1X-SQi}$L3`GZ`3TBe%#{kSP-@YumWXrXk=8}L2;-|1%Qw!5K?zDf17574 z)}H(=E2`}8eysCZUn4rjG;pvPym6GV>Y=dDFdsD!^m?%)DG0;d^Wc{L-=>~|K2TWk z!4}-~7w$VPGWud%V^IcB``q}DUz9K;D@E~ zA0m~{3l-k9xW+P2ayH|%Fn`%_vPvx1>|8?1upFdLxDbi7`y-CvrAS@228GkmI6m>L z8+rN)FMUbP$bR}&sjkezK2HEcF~kfIW6W}<8CxvXDx;0S!P3kh4_5xtp4YK)`kPI- zu@INadtXbQ9rvu0`qCufCqGAr7<&~iKb-40dnnr+JXBJ)HJM3R9G8Y$W|3xorHO)8 zHmCK2uO5j(PF9!cioPVXv)?gP`JBW2X~&br)$G0%?!tgCSu(TxS@1jKIAz<`#)1#D zk47Kr$eY{MU!xly$_F?balOIh6H;gGH%t)6<(~zii;xkjl8mqXtjs;Y;_Z*3&t14f z++{mrZt5e3+~b6&uY5^SY+QBvU%h}W#ypJHM=Z`oP>&q&kU!o~V$1g`6P{c1F5QM~cGulT@wW)2xD!NaFV#VOXgTf}R(gq=LQ zc(ew3#}vB-CJd2giFUVsEAG6^Qi#Dzw?p++t1*`r9QZbJ)Bh81U@Q0+ZY-IUvo+3_ z9!?Hj-@bW6jpzUaaPN-_NqY2!c8|7s^qD!jm;Yd%Iu^WW`m%(ymZSTai9Sx5eVSNS zJB2_!zn{N8A<}wYUr2ro}mTmI$M9-qCK(GPcc?c~N6oF+04;d433 zQrS$)NJz3l{s$)435R*!2Xk99&{&vzI;E3(VyTvQyqz3&8hwncaYoMpT%P`k)f0~Q%LT{QBIe_o# zc&_bdz4oas{uw)?_6>N7J*$KNUcw}SWwa?XY{ou`_fBl(8Y)|TlBk!VLBi^1#P7k9 zV0Jy)Og$o<2^Y7L|4gdeJ?j=WNd86p!6KGFw@YZGGdlOKae4X(OQflfWLSG?5 zD_YOd6+8VHJ3-Re-3VK?WbjWWc%f83p2bw%J%C5_jPY3Pkt^=;m5j2~*2G@gO)1i0DrXyL;^OLw>!Ce;WT|u?wUFq(G z$hgLk&44P&16NL{o(Xj;axvx*KRxWb2y7#phDjRv;nv!C@fW2h-6^gL_^zJ<;E`+Y zfc0(eS75tqmaD~C5(MJ@1*!T$LAFW))ZL4}LUdo&o z7s(t{U;Gse_;Bj{c(IYy4!F2^-DM_ad3jp=u0+0pMoCYg=g5po7gPP3>?eE#U9JA_ zF>k>G)J|d=u;nEj3DO>7GwG5K+o*lHv{B)E#m<3rD1}l~VnjP&Rc;QxE#PKON5MMa zd(a$IInWCX<;Mg`>}oiVfmZOvJ~KlSv=iKfwtRXz8qD>tzF|3@Woum@XOikNSh-dw z<5zM}0;3bGpgq4xsu4y|fFib@2Kf&C0>+FR@6A*U$r~y-ytOofl!fu&a0Pf+JrlIx;n>!m z`k$%M7%OF;xrf))C;w_#Hw6@qrz&6HvZi;qo}(S3j&Y$=QK!ZU4~wEj1d|`=rzhM~ zt$^aKactv#ZQps8Hv%3slFiaOC9;1kEX`f?dm!{VA&W&%A-Tfb&7lIn^PYDt5x^G3209 zTfQ$)ACowy>@0!O;I^aIM!_-~zxSeh74CAOM7Y=kASl<#{O8pX629D+5@W*tNNb`HJf7@4}Upv!Gs2*u~ryc8- zZs&^|QBRafBKg%b_)`3>YfV9g5tMMeST4WFT73LgG`thU;Xi%G8UL831V@x#%kxk@ z7=va1k?s0jRto#uQov$sDtL=mFybX(MScVZYfQ*RE?1scJ<~|ip#rPyzhlqhzGc5E zQD^Fo34`AYwT5ILwGpU7hU}7mP znCn7(Z>s*sR|s&L0pGC%VK+9@|0sd@gyU-|VKRI*pE?bzZ;{rLlKs8UP}x1CS8)1E zp`F#yOik9kBKs!2rLN}m#J8Dr-;EC`a)yD|!>8XJ@$$!Hb5AN$TByHZ3@}y7jZv)>QK;xq_6HQ~WCmMq zch=be%R%qC-E28?pv37#n6nv9SOYvuDMv8)Qu+ERkFWAbq8cz#E>M9B{&DItl*K@{{Ua7{tmn zEtR>MrR=`gx#Y1xS`7=d1H}2*uoAATlI-9D{80OgPRJA;~K@d-;6iB{-Z~;!S(Rwh`4c#xcJ1vyN_s9 zFZUTY5)c1nwR~x{8ACkKqD1n4N_%DD;LumvyG;m@`W8iYB}v{|sP!jLTV^-Ol%Bye z254Wc5fcFVF59-Jz--=nQn&x|7E$%>!4cyUR*>>#rGmSYue@;n+0d$8AN^kqzE-9d<ttz zBHs#o1bW#Z#*p|-%S*u+^<=2S6jg_WRzvxQf+gOZ%oEg5Eph9u6UWC*2|s~a7s(}e z5*_u)$V+TbIPmW-4pREoowpT{h#7D zEZAZETX~`yAM=s3X$xsA`s(p1&1=2_Pa)q6xTWLiu#22A!JLy~otC7tgwP=`6RZ$0xWfGlesm0Dt6qjwn6s|RQIy=Gs2LMfJ!l$_^l-&Mkm4N*OQ*VqdM zfF=K*R`5ASZ`(>R9x$NDFtunF@bqf&pc^o>PIYu~SiZ8J0E;>yj3w7aQtN?JId>j} zB7KTWfhEKnQN&O5%;215{J$_kqg%qdQ|&E3>U|*gP8*82Gb}}*R%W$f8hwjOIse_` ze7D_ci=`LCF=AR!jY#_>1IXlMJ|i{Dz#ph3QRGJQGVq{BjcAZItxLGb$S{ybQE=1` zg7U$QQwUH}L0gKi%ASdx^KOrJwPr%s61%&Mn|PCclFsMOU6OnAyB7^Ak3lVP8M22F)!- z<(}OBeIL_rL)72Ms}b_Kv?@XpyL_nWy%;k_7+cW*XFX4~%fTr3`HgvwC9r-%k7Ha= zW5wg7m%>zhC20x^4_bG5J9!9kV8?p++{rkFNP`CopS!B zZzF^3dz!O{{O7Xq*|FEFO3Yu6IG!?=3j4^5W2IBVcPqtF* zQh1>9C10s^f~Vrq#?lG_)=jXyeVu5bs4t})duHs%EfbQ+EGIhQ1lI|ACZ>_ zTJI=-iw9BQwOYYeFKDIZCC{Qo#`qh~8l{jA@rItZl+>E2%9UbOV3H4GQC}wtzCI*>rhS zl??uj);!kByG12#kkW9>X#bs;GNDR(X^3PPk0>W!LYeAoN6hRptg=k`HdJDHiB-*! z2>_9s#;XWG6YGR?K67?c@-Y_Q!RU0Bi;&?C$VT@V`oP)sL2#_r{xJ8G{zw37nL zh3~tqAttdYg_F!aYGvQ2<}pZ*ld1mKODqjJRfY&Y*3#fQS0*e+_<}d7A&`q)97|OX zK4EyARe&j+Qt;L?ASE+DB-ApaTL~;pTY{xQ(IhE47Tsgbf^b7y#a@x}BT!%sx{j%w zaE4-`)qv?_ElX_-sWMc9mEGEQlPw?{s#V0F;4F>~CzeI%pAm;_QBYVS?iyGJt{I`p z>|q0rviJcjmM_6@ zD(5Kf(h^nH1PfGP4_UXxL+=UXc@=a@tkDe^PiGZ@wsK*w=z+gUY)0NmgGRg<82g2Q z^GO2RdYIb%)?bqEi8B;5r)tMKhit6}d*!z|i8{Cfa|*vUg(Fj@tBN@Cj!>$?j`5c= zo=u$Wlc$LHrFN1QZjpU$orD6hKCh`9|cxWd((Bki**dXQ*(!6!trDkJOgY?top}_Mo>Nsd8*V= zLgutB@bwJr8Spgxx0zTNQFfVXiw7M&fE0%I&vEezVokU5+SV9wD?dzci8bM)GSMr9TDF^$g5$1b*}G(@?0^Sq##Fy%7UX#3+h>toVE z;2cEWSR)FJp{^Uct5viO@&AI0JHNn%Rv)+ps*|-D%scro<#h}S95t5(j!)zAwK_RC7 zAbd-$@Z?EHD1Uwo?97+j7PJAaXS-(#tua7Nqj81o?25O*;udOvqS-4#m+U|lfiy-n zuNmHQj&tBLNT5DYEh$kZ5B04;(~hA^%fKuy#JpmtCzZ?mw+N<#@1SQ(brZ6Xd~;wT zIsid$AOtQo8J@|~2QRUYx)Mo`VefH^rTG76yxOhU@ z(}BgD=-1t{YtKk+JlA$kBhvGawe*QJa_$^@lN2=MPbIAbhNYEsugO7=V$wj=c65A#Rwo-N+pYc9FGsCkqcPJ3*+!dkaJee-R{)20g=Zwa z2iI8qs_Ziv&AjIVrvf1DYxJ*-#m)76mtMYh;+n3Xu?%DkmJi!>$Ivg3%A}06h_kgb zD87qdVBT>Gr-PsPMTCK+#O?w+Zn%}>&$cz15;vRy-cg}LW6V)mCtA5g*&ZqBpj8pL{G9}z zZ83-!yCDQ#!8I$GL5WvWS&MjWBRBag@wegEi;>K=Wxeh)K5%ptvO&Ud_To@w%_ghp zcIRQtn7jh1?eL``ZH6=O^;l$dh9OOdkZLHL>}TL3RjP1`z2(nSagC01dA|xmijwU; z*e-6g2shta%u-UD-XBRMROEsMUBd3(k(;Sj-#k_0s$y5Y%kMCf!z_gcY4=~!EZex@ z3cW{KrePiF?=^=o!|F0zTX;;sdZ;C3yc!EG*$juLysOLJm-#1zNf)6 zqvV`MV>u{tXv#rqgoA{MC*+NRqb!!cp5JBpay(<(hDfWWj;_ia9OJQpunyPJBS;$Gh2N|CaiOkUpj>%D>TP;S0$N(Uy$6q zF&STl9T|75l(_-UcwX9o<93t9x`s4{V^IH z!GDYEJi@P_E`vU7w*o}K9Ck9U(S?4}_c-lf;%&ki)??;oBo?heXP#x%(h)S1u4;!? zAahTcFV2IT_9FTHmN?kCa8an#QEih%t^-V#Hz!$-g(Ts~O|HrF5p=I}BO{Gk!Q~$a zAgF_1u+ynx8wC6^-ZkYq#7@eXJ!1V5WL5h_4q($KFXUbDiQCbuCZ`BiaOFrkW|%OQ zrp!QARR#o&MkA!D(FJZq$5!SdwuEeL?C;3dLezHTBGA5> z3a%Tlt{fI3hAjqfF0?K;hIYGJepFuWH1jvW)E2}7hv^Z42|VO`|);yUZ0?uFPD#@`2t$8j6tj1}mQku+rj ztIxY4=JGk^JjA4(#}KPk`b2Hyovu&nt!_oM|JpH)^=REg>E!yxY?FFy zc;d{|V_O&^U*zmVL*&=IbO;sO-eUv)c51`~HJSd#X@A-Tp8OFvHs}ZqCBN!;1tM=3 z96;Q-k8+mo+aYRwJsLeKPpBWg$|ZM0voVFf@wjeqECd9WRU;+t@Ea82ri^uYH6zK| z6{4waA@w0I*q-n+#cE$~VjgLl@zT>G8EM2O=|(oMS8=4lu1EhHDLfxzRxVJLZbW>| zdPW5n?}4}<)Dr4@>YR-;q7j2&G-LnV3U?^)@_K^(Bt;qtdFcaCnKKD#(>?X01Gjww z!T(vseGhc8%!n1AWf#tf{>1%|sM&)*+cgRK9eaNMbM2#nRmHM|sWKm#)PC^dS5kO) z(MECThJ!V9+X3cL;_;05K~kB#jKMn7^FrAqnMrIekt{~Y%)Z~@aqmzh%yb|{V#x16>H@YVB?TAz#leP4xfZY3;f#$1{q7AQ=G{O4?^G~ZRu zEGOAUb9VImq?5XNNc#rPArya7|3_5?hAOIx2T?cd*;Z*LEyLiefvDP#* zC8P%1hSC$N?=_aAw4Wt52AkDU+%9JQPsGk?J=$K#C@ zo~T$u%~E(;Rok#NPzC#21%8RJP)|^=S0xd9hAlqDud5-X%@vVCr13-SPMTC=~#KI#9OAJA6M!U@)ThFPLQN6t=i*Hz=($3SNO zd}Q!}-B#Om91r7~d!VT^^(KQiU^SfI>8B}C-WJUjs%+dLzgi_0*53AfoSU;lhdYhLn#D5v>I z*+clUf#{;4i?f9f$$Q8HO40-P#w08Ip59 z0z19!XKB&Oy~C+eSsJKuX)e+5#1RN7!&C?g!5ZMC?`izT>{O=zOD0F=|KJ;A83sOi zusJdI47|i>6L=ccp3<4{54P+SDgwC~3!@_`gABy=lOla{l^bFwoq|o00f+E|g!%9_ zAQx&6VL5bBJLy}($94c7;J6Z#pZHUg zr&nSOdIuS4dw?iK6x{z&C|}xbZH{tH2EEXKE@nM_l0%7T6-?!t;u7hBt6UN~6KVNs zi7IpqHT#E-(P&N^DeTd})HY#W=K^^y!p8!USa>~~H_7c1(JM%%d7MsUDk295Ikg^f z7KSEJWj-@`@2si|XM>Y-SaBA=tjQmhhfGiyXoO;Nk;Z@H;FOY`eB*VXw}c|$U&1w| z`i4D2=pr{UgF5*NWp>J@ap7WTRvN;|J{=1nd@M?f=!pI@a#Np2x~@cM8z}>o#9Ca8 z7|>1RA7sRBe7nL$JTn-K6NQXr2R<}USPiT8FNZR>AsotP(l>uYT=OI;`?}?S%Pqlp zdra;T&IP(Sx&I1Rg37E#oU`;mGr{CIj%*vfxXr)cFjCZ2m;Thej3dmLWO@yW?W8%# zelrik*T4y+=-_GG(p}&vnybh9Hqk&|@HIkKXt!Tbx4T9tZ|i9J!(UP8^*z|rC5O0+J&>jA2p%J4*joK?8=4EFukifW97W0ZQcrzqb+$x)P>x`ABrJpkJbQsI zKWh(R?H=kes>r(vfLwkVv)XrjvnuCKgNmja(!=E#SzmH4N@33yy23Ylu*w4u{?QY} zuGtX{pauMua;=AVqgj6PRGi{pCU|DRQA?rzVjaP3JX!0lg(EFf=*`&UTLjhZCEUva z1m1@(?LOBOJu*3OLL52&QK5249`08}oMb$<9igK{<9)KAhQf7XT{AJzexyzaou*YIwCrQiBCN^RqXtCU_MBxw2+x~r zBF`_Cn}%FYm@}lGC&^sw4)$O_vMZb>v>Lg51}f;D^w^>(_O%+%rr4-BMQ#B|c~qno{6BC8+cWwi@YIM|0?EZdu5t-fR&WCR-2_l@z5;T8kqMI(TmqihA7 zX{Z^4WRBLq4R!pg*TdltiwGEba65PU1MT;2We-Pr+xWNktNN>RJNGwNszNEafZsXN zP+x@)lLU2I0$mW_K{KGNV9*NcpH`0uT#qLlF`?VWei)EcCS1pvgD@|}+=48#eORLN zX`X@MQ)RE3x=}}Hs1N6c;|z?&%6xOaj~nVnep>1rU(OZazvNWd7ykti`Q6J8xQ+)% zqfxt(4wo|O%u~?1LFH4GCr7^>?I#zO+*2YSooG5Oc6bwbf2+zrWj@L{Xuawn)J6V7 zsyp6_C~=0cW7j*TV$*7Iot#>)0KL@L-CZ!|j2_BTInujR*}o)?AVrkCm|4~vgON~( zn?40yKAT{Sr$2Xde(l4Lt#L*cO_DoHd!4^ z&5CK@ODr@yo7m%-Tqr3`MYC7&916Z9DQ+cD@qXjNceAMzRiY0jEH4FG z0&lWE0?(qG^Ff}cmcp((GuBnSg?*k<1j_AI{7O zOSs|$HC!vN*ZAp69>h$o-oA(%1KdC;4+IDA7=9NZs43S zkcba3NiB|aRS^4$uO6HKkp|u~k<>>75oB;Gx4?m8awmd=B~BvXp9v;Xrvdf(JEb2# z;Kk*E$JD!Td-jh-?|ea=3l|O&J2Cfwxk~a%tHg3qQZ0q@OzVv|7n@OfesC9O-$zl^ zeYtg%w`b&{MBk!3T(9-9 zZe5(7rhfH`2C%A(<77Ye`qkz9{=JZ5u@WLTwk0oLsg%bZS zWn)YHY4Ccg)imvaavdT}AqP>WLlS3tZc#`nqQ8ulVxLkLp~uC9d=I(}P0F6y4bRj% z6O6^2PzmQR)_o=O36+nGr$Je(;#k4b2=YX99%uQG>nO2bwNv8Do)EGp0^9MY-wEkS~G1lUjwh zRq2`%snVKw(PAjDue2WmrxGj&#^Cb!KP=48dKi&)d!2(hTf(@;#<0^up>{h*xvSM1 znZA&J-Jg6X7H8SJZv@Kz!W$UGs;=_&MrEjk9|2HSYUC?9i@;k*VJXdQ^PSreF;#(s z4^k!d@UxSqOuz>Kp?L72WsG^#gU&YRzi%_#VBQpP0@cAbN^Au;7AjNgSuwi$9nWJv@6?V!u5_S}Pgx9Z_R=6?s# z4|#e2`+p~$>Hj5L>1mD1DzS_K4v1WHcD5@BKUyb7*wB734VPB(9UmroOXz5X#f9Qi zSOb#%tOoW|I|*&%Z?UY~d8utEA@(591df$|GL6DVTbqLf506k*hketg<5`qtn$3HJa#ZiZKLWk4T3OnK^6jm*9X9n~)CGzg zHboH2vUBGSd5|7hZSzgJY3b zMS|{$a_CRZ5lkwGewEx5ju1~LET+KCi)Pj^cS|>QQM&=St>gA|>SO>voeZaLaHGG9f{_lzu3di~N z+Q=J~KRNPlAs4Ob(=UmOj$4t8%&dp$xcBcAi%$bfVey~2-2|2ILC#X0!-QWIoMOm1 zaFR40Ps*k3jD)73sM-E$pu;^VWvv0x^dsM77>|EKo+ao~WI529J)MqG8XY&&n_Y2n zxa9&nSZSfETpUb!UY2 zBPA=%93HV!o~AZ?I)FjLA*4UX-2rJt#K5=X=Fic~2$s2eU<2kih`04-{zUZ7+k^|n z(z7!GS}`2q!24TGgj`N^5e@ZE5uFJPj?GHw&UmJpXXMfrGc)F~HZby3+`x1o4s3%b zPAGiXcwrsA-Z68l^>8b33iHczWir!Z;Kf#z_!zRW#!kl&Mo3S5 zo^c07Uqw78jf69y9(x}4idPd*UXE8y!Jasu)I=a}T*~`fQi* zPHwo))gCWY@Dt(21XEXEzHtG5x6#*{G9WVs594=zRNP=3$1@O})`<{GqYb!BER0}R zTQBC7vA78jrH(5lZxvW?MH_wt=#{OUFvI)Rv64OoFJFLHqK7EM!gxn;8u(o|i?Uk$ zH3H5npBOFnxMY-jKCE}z@ME^lo#w1?FSQIaPn(x`*}TfrZ&h%o&91s z-on1*n3T$ZJ}k*0+EKqTPDD{ZDvn}SRej~5aG2$$gK&syHyz|0GJYcFm9#KN&PqbH z%G2_Zh?U}t`V-W!iA2i`v}!5%8-9sJLK-Rg9aM%%WMAX%+}TJRG}@MPUO-7l<8j&G zq1O<^<}uwz2{a@0MEyZzY*x*@Pou^d=W-awS-ofn!A6zSQ?kuhPBH9tA%UGkdM^cc zkw5WC-+k%1JJ{=G{w?aatF4z8M_)%XN64qFSMfT+EbMFbp>}?lIdRj=m;zFZ8l1Y+ z_$aG4>Nt?8f70Jg9^IpQdfgv#H1QIJZ4%DntucV&x+QKUu@PF|?Wc3+v(eAP2zNOn zoM`byX1Qg7vD#`1V7)i~Y`l4chf=WT0e`Xwr9l_RQb>|JMzQ%3vzxlhk|M+JaqJ$jU1mGORKR!z1f!$?i<00k;>|8%cbifHADncNl(u!qqyP&3Lis~h!!Ll zrYOChP&cf{brWl8mw*7iOhXPpl3t~E2)pF6G~W)qZqUp@l*QhtKS=D~j1DMeN3G0H zpS(<-W=s?-i$}bcg>{*yW>x*dve6WqQ?(&1zjWy<_5}aAm+Bj8>v5ni2X;EiYp*hA zrh(AtkK@=lN+o=XmrFZ03NNe6(V>pgnj%e&>Cz&fe2nT82mXyh1fFA6fpcN~ zN9ae3a1lxuFBcc%P4G^3FP~ToRBTA1{)uafwZH4@OtPk-HUoGUa73rV1**RddWp7j zT^JjVSi_AM+KJLN0F+7kqPJ-Pb8K^O1YiFLHRK9Vmgq2)SjtIZL%Of%0FkzVkqIMO zmFn7e)@EwHRv_Nmm}-c!$b3OR^qL%LZ#IK}kXjjh()RC&iX{S^ zU%?{;Gn}yzmZ(0atI|_BR|e>`BKT)&tFH#RdPH9rS#|G8WGHP4$Dg$m zcKHkU(PeY=*m~tO(0S_jDm~LXe2B?^rgIW0rn83&p1-vH&b;Qu6;=0ab5spd*fJJb$DtUl;tFi zcP;lK*@)Z)@}t?z*ratiz&p+*Mz7HSCg(r=&KC2|3bT8Y{UzdkedaVae5V7ezu1gD zE3qFjZ440ltH?88UlIJ53V(ahw}QSV4+NT@Mc1J5ALJ(dZ8=zxnr1F%MSqTm7Ivak z5=+ncj&Xk>Q3Op#0uvQ3(H}zK3p9wi$nSACf}FuW9<7uN2fu~@{?>e z{&UrTaGDD$TqL`3&zufZKR ziKSN*+_L<@;UeUld>~OpyB}Tl20y?#&Cb9zcNg4TFgvq?0MtPR}rle zc~TqED)_;2U&z<*=D1;K zOD1iDpw4R4?@0?5WjBFE*XZBv%~5kP)4uAh8}Q!0fn|C+cmVd#^zx4uxL#wZ54Wct z?xzoOnuH!81Z@w+9Is(#30S-xtN@&&ntGv=lmGc8DOl+BHV&sba5!mkZG!N3aJ6n8 zLBrmAtK%@{Vl8&Lh0Lsj@&sU~zW6AB6LgqYHw5?d*Cbif2p{^r2BF5dt#gO5{xj)jEi&%hys+NqPhG^(Lw=Dk-bV173;`tvoKJ3LML!yU%88x{ z=(QRsgD$=T%-aG_^oVDFbj7RLKj`m~0pGTJmX9s=Z+zvW#y@immveO(T%MN^Gl9tN zclqfYD>U)%$O;SP0eSY2Yc1`p$_1!1Z#b||9)8T4X1f_B%OnxP|8_0KR;!~dhTQwgmKW-VLne2vUFFcOFeJa6ZwcI@SB zb!$^PJ;Y?FT89l{n_|;(Q zgla#MhYA^3OJ;ex6W`$8$?8#Pv7@)3JeOC@LLnOISLY(V5ly)-`0E`0?tA8rUNq@Z zGazFBq%VKv+h_w+@u(5G{n1BoO~PDVV!ypcUA|vZa(2Qt^$#q#HrrlLL-ckOjQn29 zTP|e>jnG*oh+v3;fb0C}2aVecr2;d>ear@)Ba?LuAqD?SoWDLM(9P~+kHAu6X0{V_ z)SA^s)v(9x<%}MhDwenzcL^s+wSF|s-GAcOBI`n0T$6&?fW!K+ zlW&RU0VteZLA?YdY)(us(bK%G!dTXhW9!v>L5GEa$&KC$j!pB1Uv0v@jte z_ZPRMl4Fw|wNa1CV{5EF`zbH4O4!o6UIqFKX9ij(Oa4I9{seD|qcK557aVX8B1@#o zhTzaqjsVmc0^}j{Fn?9J>OqBnkB?0JPI;#bGsI=n%fR*G6>Og&_JxniYn&G9Rfxdn znw?Zoqk2iTTx$GX@rpc!Zst5|W^TnlusG^nlC5SCG?|H3RZ#66#=d7Nt?A{VRrXkH zOylU#u+`rFm^h~5;4>-gOLUj615H&N3zxtb4{3+Ou`@33T&Zdc&jyM;@VLV$iqjGXS^O6f4=c& z0iSlYzVBoy%y=wsu*QyCD(Hn1q{I!5IN*LCUnohR$9cO$hF1VvIfHNY3Y(j*n zEKyMr5J8l%N<>5yLDm6*kl%O}kWCz7h!7wu6A(f`cEXa3Fn}S1Xdog&hzJQLKw`oY z5|aFG=1sl#ZoPW-s=80t`M&Q|SM{l`{-f)hJ%}HRJrrY7y##TSDtei88J=v4GM{0o zRn2Ohk|`odqIc#{4@up3YGGO-6C{R#U?R(T9Y^Bw5`TLodND+m{>EJv?FP=QHb`iz z^3g|82oKzwc144FMFE{Vw7xW%*ln&{iHKp{%K-56Ky6}MnW{DEQ_=`(>$CzJuu}GB zY0w-h5c$ zW%C&%wfRe2zh>9>k3JFk%SteAmI-U8D0Ntg%VPXh0NgkWR;t0{a#iKhD%Fz;fUf}1 zM8W`^Kut!T1Mgs84HmT(e<$cU=j4GK`j|eV3fvI0ECLlj~ zd_7g`q;Z8x&P#UI5TImN$3L5{u$DKWL}nbWI1#P%v+M{uBqv>JNUB|$@&ho_E!J`x z>(sH!$wzUrS(nvP13Or2q0y29Z1>u*g)y1@O*A~EZSD{va2zat=bS6ldIwqDWG&zVtXIiz zwxN9OYo0zs&xp6eXM5f=c#HKZkoF+XIMcRR&X^+a#AVBob&q=!hx%d^fj8>q4$eLm zbivfZQU3v*yvZRpd-uUo$Lbocr>J78?-pv|+w0rm#|*e0c{&T56{<6UVZ9*m;=V$| zO&L?Gqm2^j5ej0$OcZP!_11$fc)xV7tUYv1Thd9lZb5vF)02v9+6}egF6}-dF0Cs{ zpPP%gD=HN!GV=+KKR-PaDkHihjEJ}}fx9~Kjzig4i+}BOzi$7HmJd6~cW0I1R(qKl z*}DF6!pRm8UV!hxX9F)AGJ2#p3ESld5yoI()dxBo*$Fo-FvT!VO3CAo!&S$l7EgmBDy4uPFlQrdk z(1&YIxK{5!SG0!-rQ@=3a)!{RZXg3kn_s!^=$?hmn*#jGTdjWcEYG|W!M;Z+F89cTqOTnX zie3$SvC7BtIwe90zh~dT{EDPvJvA#es`sCAP)gSvWfc^4?~l!@`ofKL%mq5I3aY!8 zj&`>Ge0Vwz00kq6w9w1JuUwN!dle$<@T?6+4^E zi0}7Cd8hrNlRZ|E5n@FtgD(9jSnQNsjDAsz{H_sJ4g(s{m$Hp_b1k43a9VqF!_LXN zKluOxt!Op&)W+YbbpU*s)m1)>T?lw`8uF=`$SKfCSo*lJs1B#e2O&b6!I$|Y5 z8TAgRQ6Au*9wifDGjVd|xnI*_O%PQh3G5zn#GG`Aq^w8-=q@i3Y)HHctPVMu--LWI!F&8QDYH@+l zgO0YsK}&Q$prrpHPM7l`e^e3(d{xH08N};$^vroS_Mj6d_O_j~dGKeWGcE;Wypb;Z z_p8WaVDN4M(YY*=f9Fd9O0k-E;DG^C^(VRmw-A;3F0U)G%d1OPpEH$Y4-~2Obx4nRy*8rTr+LzJ>>E3BMQDqR)TJ~#EslL#id<3HA{|?D@ytl*>(R-(urb1fo`NCv zj7DXoFW6lv<^nIKlv@tYB;Gnsbz;c%k_W|}@u-Y)4OhZ_F{|7Xs-f(tP8_+OLPOm{ zW%O#OQtpd|t}P`x312&2JI$o&ov@rM8cK^~UiK`RnQ%ngx{5Zh)i1$z)a)-?$N|gt z1+ixNq@eevGXz_I%jC#k-lsLHeitB5_v?Gq7G`BG`9=I2Y{N6O1-C+Ap51$v&_>Z$a7rU76!s1tfS5qGWUc|RBPb=j>1sK zkbrLu~zy;06@u6Y~p&B0~t9vtKjyAr>DPbx)FR z^?qi?N9&eX0|osnvH?h?=?_>!jU8cpEUbDLyM^f+nKj1LTGC?zhwVytHRChaHuG=ud z_s=a4J_c*s4FqS{%pFPBYku9mGa)Hc@8WfA-p5!cF=>B=h4sR#hub<*8%-$l1rKRa zDc-}))*f1H(xCu*m&AIHEHQps81UEqi4~W=e%G0j4}ibJN0X(LjLI>ZbFK@wy+EgeTBR)pGG`PXdmi{6(1GZ0y(DTR!9l^JjQ6uHYzZgc-Q#g9?Zjl&9% z(Z3uFs|1&^*UvIL(@v!N>5+nFlFNkQlYHe6NRx0q#^J5d8oWp+FL8?OaFJP*9~*~E zgaGWg=Y2R+^&mg|z_xP>&ARgKoUKA?wJw4CwfEePS@nuzD-}^)zih%(83WU|9D>|y zAYnh9UJiNMGEI#tX*lGJ=*ylq7S@9O3$ZQl@*oX)5Xe;``jA1`&BDJ7@RinAIEsJ` z4kXyG9)tWfX8Q{L6yK%>=KgbBFt{lMiVHCs#oVMu+E-Wz`&*c@`t@&-3Jpev-J}8% z(XC0LP`FO~SlTRlY%hvUE!!(V#;Rkf!`+XjHZ{ zpPs9JZ0P*0`x%9L1eEzT{uy z%YD@7McnDT9jMXas$1e}Xsd4sUY%FWFm&GOrobwA&)WW&AVQ$!(>p+#>kBy3`$pW) zjDql{@VjN5UM2{Vw<);sO2&bX0oCjktmUq7T|7ozt-eb&K1}iv>gGn22a`*QnC&qU zjoxOF3DIO^rLS4UkHI7b^`sSnC=KNah1C1k)yrV(O%&&Z|CSZkwA9nrXUMUNrOd_o zc?pjvV8oki>cEu1mzJPOxs&&z;fc!!_16p013$@Vy36sS+n>Z-vX9A1n{| zD76b-bLD!^xXSY`k{N%3FC+3xo78BH$(2xN>1ruJ_#jE4uDPsC+L0JxA8&y$#Tsrk zf4jUigS0}ta{IG>10;@MKoP1!wqeTAE|o}m(3v;%csWe4t35&%AbE8Xu? zmXDDp*IjJ0xCTqzy)8Od5Qti}pr%e*58bqCYb#X!4mIL!w6wdv(>M;)>VID{!EC*hfqp^|gg0#_qKe^tWIMl zDU_e`wM;(nE}VSC*2t5XJ< z$F}=OR(k8Bv zA15alt5kz~lhGFo^u6;gM8NcCs&Gm7J7E_id|{73ODyrK*=QzocUUB98B3MVeO#KY zE!-Y!%T57U`(M$OSH_?dkU2nw{VOujZL(Y60XwY6~ ztLY@^Zj)}-jaoNUM5|V9-EPNvXOic_(1d={oE3ld64RAyahxwZPGfTb`L-gf!@hew`4<7k+xI1I+j^AeN zTz>Uo?NAxPBys(2^JL`taQg9R{kn^;3z8>5?u-Z=4#%xK)y8TU3DWrI8{w}8Wpo6s zq-I1>qQBV#9Wb&sE64yE=t(|XgzFsDxJe0X*45e?a%J&K`e^XW6bl28lGFa?h?a#> zMw;ON^xCM)QU7_kmnY)7OPYQsJ5-cVUjLG=pOEjst!~`qTD(*$ECJ@~@5ffeDgwtW zjiX;i4i>^sk?-~G#h;V-AZxf|7k-9UY&Mts?n1H79D((lpp<9>b9COk~Z@BtL`M{Z5;7XyzjX; zOSwIt&_N}Dv=iGu3_kg-ETco+-WY$Z;?SDCFKc$3KK5#1{@Txt5YXY){eFUog1I6% z)GIKM!7+VVYp?n|TJ`(+tZ&~0w{P@zJIYgTtnOP0FaD>r!I>!dIZ-OWYkWD zubh!D{?gd1&K?#eWmWUzJkki3Ir9&@t9@tZhRuomU!?YaKGd~eemwVmytBLqJc$1- z(4MD{eX-R(wf}*A>fbN=M9r^QKc>iPIu^ps^>twAP41l!HdXP|L*#5y;R~-SoM}U2 zob2-}_|Tu)n?NFQCnu<3gDAf*woVx@yZ4H{u%Qi9NOy25o{YgkYb?E=XZeDPwdN4b z>j9?9ksFd7yt9Z1bD2xr@q_l9Al4<|#e#-er81dAfcp-9Y|kE}Xa_y>&H{le*E&l-{s{R*K=!=B0`wn zic7?4#IOX9S+lsY@RbI;PYzsU#i!)g+rIXQt{j;Y=jE%g$sf|RkFd0peU zNTB9%!=2}0il?z8tKO!BeC7elsS$i)n|=Y;JUf}*RiuCK_tgrQ?Xj`^W`f(PJL2qA zUhf|G=D&x2d99yHAf!BAu5r`u={kGZH1GgQrE3>%CL}eXHa(xP7U4d*Dygqy16!h;Qy?=3N%5#0a*#0m;iHR6x z))M;Bo8+FiiMh^C7wa9A9RqNHF>`~c_3MCZq5ch!ATNZz?m#B!;gC@jHo~{>aXvlf z_uy`~^{?{Y2aAt`ul*sZZLM4%3mt7yUS!?2iWAv?d0g?F>;H6LUG(okV@>0LvTHDg zV(*F9iQg1&EA8K3%Ma{g{Z{T+$!P7dIo)Zc8Jrr`G$3HU;fkscWNfYSOwSpd3%Ff2 zIRr!!*t3swRPCF63Y32HG}}#JM3m!Pk`Kq3Vn`MUsC%`EqIX*?yUkX3vsn7Tv!}Yj z(v@jBcszU!tuie75QqLI7s%%lYeig^I7tkhLXMfBDau)#fl>WS=B*)L#gZS7+2i$j z$zMK>9rVvj@73_A>P;I*it|_(jq`qRRcwAy2ftJw?08t&=``D8Cw?BHsU4$&&NioZ zPKds?fFe5e9Q@wWUVC;TF`wBb^}o8}K;kj!_}zPqobzHGd~Y+LqveqwJ?w89q{<-& zO8Bw*Z)0vJTOw4_CHQd{a=s?XJi&b~o!5SQ1120@-4)Q+N2vc(!tBQ_ZmwG!iBG0! z*|Kp#-bZP{E}O4p-pKzzM9G5kBH zw-ZdwDGw$61g;#MXj6Cu8bQ%7_4$^g_qgwFKf4rOlRX@)dPwoa>$jKJFDu1MHVO0p zJ+pMlaqyXhzi^@`ucBo{{E?a!-U+*nkM4^zl>pn|^K;AZ)1&1+xIE!c1;mcPYfh9c z&qn_(e*IBbQU9xE%{WRAy;&mHPkw`|l^vMM?i+ZmiH7>%i5ud@6r}@_SF6EuaNX zst=l$F}6*=+zH-a&Hu3GA~BgD+YSVo8M4pd{)vN9gJ=3)zsso&{$MHro(C-W7HF=O z3MxKRah59SiF&VMigsG?$F{o>q<+iYSy%pHeMdgwlW{xn@8JD>WtKP$(=eT>Og3%A zV*WIZ;7_j&{3hB+|49*YLhVliI;hvKPtgy9s|^o>pn$;#UZPS&<+QMqsB=-fNKbIt zl$V<6=z-JZcNM)Wf2vD+ZWuA2M!<-!xbl+{iDLErcJ-Bw7Ejwbr-nWA2?#RHck%A`-nAw_-8ltHpK;C3$L!Mod1megt84%Y6# zO%rR>%frRi7og<;Y-eT;d#KO-Cc4PnYjPqbtJ7ODxAim~`g5hp*eK0Bl$K zhOj}}x1V>IU6al6)7lSRCtoSIaZ$EYI<2627dl(0Hw`r^$6D90^7JBUpnb(7-(uwZ z&lNJJjSKY+`Wfsccv~?B;2_AxnRuPk%M5a%b~RSWfW5!=V21Y?r}y)d@-3zP>$3c?A%DNrB1U+jwiRq$ZE=ta2 zj|C5p8!oVHuZfiUD(2BTbeF=WP`r+!mm#lt(5CHGg;U8D>sO$GGB z^h(+EuaZc+$e}AqTG;!CQ5&D*_ zHz#}pexsa3q>H_pa_77Z!6`PQ6r(MicXM0-f(F+u3fUFu-ROG5uQzUQkWKYWa-<*P}%yZzLWz4g%T zeR*Crj>2?rTT7yFaiIKLLqr=#42zF7K;Jhsr8RXjz=`)MV2E%pxRX#y*?tRf;O4$z zCkKD*NQQ6s&lBA})ee2j(b2lafV7<=6`i%z$$S;o1m%r;xI4;fu^#{e)-{F5_jvfM z<-!q4B=VExn-e}2VRYEHQ|q<4;D53c6swO`kjB55F=9iZY9+GneSezU;UYfmk!0~U zNS7x|9N_;quG}j8odgV7j}}e{Tun#D_M2@}mb`dJel2iDlHokL+ZTSUBJD}-d$@jl z2K&bL`GRQZ-+`BZh|Uu`DEh|gY@DK9<2PpeKK?MS8$)zfW10@d%)s5zj$f*`wi&&^ zi0zyCe-L)>kU2LO3ODgVgJE0X?DchSKsE)>KX;zTa*JUCTH{zpgVh+0#aZL>IQj`n zmQLIuAk*Nc;{>C`Q!VOhEaav^Bwx(9$}{^qStLtrPPer#Z8LA8?rXcr$MQ<)(x;4q zw!<6L>oH?c$6a?L&vQSJmQ)0AbTfs1q5KHC>#H&jO=OFHIkZw{m@w zVxelz$tEik=N9B4uVjx^b%r%Z7qM2sUkuRJK{B`jY^fWx0+L|hRK242D&ejuYetCF z;IBG3CqR(IMoISxogX^H0R1bo`%^G!cJ50~9JkeW)DWR0n3pyR*7qx2i_`9cw%2|S zyzT!34)qmwDm`neol@Pu-X^lj$Ee}JlEd&Up3;p*LVw^)iTqQ*>G6T@=u+V@>3GQu zvOb4;yhjuVfQ3Mk7v~YXf?u=$IM(t5+3byXx+L*Vp-IPQlE#iUuKJTzUXl#bJ=st6 zYr(4zoPKnvlAZOnWVRbWj0t}E56oJ8+!D)DcZo>tevwNEa|Iu^rI@GDxpf8`q5_^G zWt`>EP3I)K)-$4bihc8e(*Dc%hfuZs9}+hyuo%d4E!A_u0~@SAwup}&$%QfmYs&!S z{NNNl=7DB;kv|*bnawKo81+wk3`k9E721&0$2p=C8#f_8$#ll_mp`h+W2mcvfcsTC zZLA4~mu-xG=HXC&HuZi`QS22TLM=ViV|?$cV}AgrnYm{qo4}gqqiL+4^^_+RB0#42 z9?IVoXt4T}yVQmd#n}V)5t0(}WnP=$WWK%8e6*JSA0Xy`a!@umR7IE_{-Kp0Y)3LV z!;(A3bQpbZp_mVfg=c)MXka~!^;js8n%AvoD7Lrp`YVB-DCUN0Z>`{|X8rEOspVGP zKy|few2<RE^Y$ za4fG*v-|@WiWYLt!bOvzmD&&5dnZfkgTO^8SWNR{`@p^}B^6N$fBbTrpI> z=5QC&S5%=}{n zcRAhOfuwiazJBVd`(yl12!1Q?j(!)KY@iwZV?O{fUeU;U31SZuti6=TZR5#bSqb~` zC2$|DkKqeMvkkeg1k3fIFZ36f12!3Ta*{8cI}&5Myc(jvw&mhfX&I6VSM(WkzdfsKsDb~H!mKQdbA1Ku9O?;U5k1H(3AaJ$CmG)TPq2O-@(&B7uPav zFc(?_S&;$J{+s;YE8A45{7~D-b+ZMH#y%$iR3JD`!#s7M9p035_BrzALEC4-9YJ-G z;GCrP<(}k_GVb$m2jXazHS&+;0f(M_RS2FH>`SOjG|@hrRSj2u;;7;$V%xr zcy5=|o;z8}QxlTkI#{ZhAz2fBKe-p#0>1ww>8uNOxJ_EJnO^n6B!UMZ=4#(dPV!y# z9Lh5CLJWM~>2_7S-wh4w195sM{rr;vwW}(wp3BT#uD8>Z0;h2G++-_#+ux+GN^gDu zX=)%J0G=$Jlg{8#6pI1ZjULR)p*)hGx~xEM!|ikiKAPHN1k~uau@|UgJ@AjL&HxS44sgczp;&bxQoK|2NFZ+jfJWxSGEpq$ zL!k0uCdY>JH5f5tWBd;gYsK($b+**%9{-CqbWvfgEAF5e1Nh<(Qnl$P3P`Ps^8DLW z32e70Mq4dnqXNB=Z+kNrGFpNa6ZBr??npu;DH81s_TnuQW%O0jNH+fo_Z{Oj5XY76 zsI8KqE=^Of0uTvYq0XjsbjCF*17)_4+5?+asiGfvDrFfO!#6sgf=k0qm6YkYs8&lv z2-u#AFrinFwNAbx!sK-XdLv=IWMY$42(R(t1U~0j3pm#%)CW0VZ6jl^C<)*Kb7m`n zE9hldjYyve8*vCvRlKVwSt+^4*M+Z!#(|rC&S;6*x}Nwil#03{T+ISHH)>$?mMA}m zBhg$5X|`91_C6A@DX#zNve%mvSzi8}j?NIX+XAyo8{Nfk6XQo&6tQ9g>pI=qB>`?!Q-BKkVsFLNWQ z5j_;6?F-;h8K=*Q9CuhEEP+z_`dvM(K#YNL5o~sZK^U7;%+Y2_xYqIfIj^0h=vvC? zcSm)j9Uj^{P!*+DsAB-<@rZi5S2Wti-N?WHL8>$EGPO!06dNeUI9i#}Q!1G3<7+I# zi_Vg)ALuR&PKrV>$HMtT76gfHU~sYnJ>5LnL0tCHN($g6d)UAR<8)31zcNZcppHS) z^`P_*EUu0i!CjvK<1z8<9}iC9t5fV0n+W7c^g88C#nEHH6psCRnsF7fy%^TV-_Dkauh+M~GiIO(xo0s#n%D z#Qab8GMuCJtEDf=(XI^aCbeVl4=IDhu5zW_aoN@h!10?Rs%3Xi=e}m{8E2p_(wHs} z(~^IY=O`KtF?)vygPTWhD1j2f_kQTE?!UX=35lmDtC$0su9nJK6i_6Vd<#AWI21~s zm5Q81`y%hO8!Of0^SR#4@Dwf6$5Y4xOU|<2t36(>XWVpv!B7S9#%9VbYs} z0CU-_PF;=a7y7FdB56OGrKc%Fl9kV6x{BGH!(qJuPUaoc} z-8RS4boRU7aBl%{8mWocCnl^k)K6zPgb9O?AEHmO zGLHbbMU{${t{UC@CZXMUNVXMf&F<}tlR)K}%q=I8yz5B6{84qG%>-?w{N6bXGR&H=WP=aX9L zW2Uz<|&AJRx}^HcLP`k6O2)TZJIrmFMqDUa($dRPuTsBT9lr1Zqe%9W}TDBkJ^zM z_&*B9z?C2^9f=ps0@!T(*Fsl-x`KOCQalT|E(#^-4GYzb$K2O_%mLgQ!p}YL4VFKe zU8)H;U(x>%2MGxcO#8xL64MrNO_dP&F))Fie}#?}<9<}uL03B{^G#d+CE&R>=yk6? z$|B@ZcYG~vAowsNsfkcM=Jqdb_CVk0yz$Yfh#k=rv}8b{I;5Er;!fL2>d?@t3;*l6 zF2v9Ng6pO4yDl0YZFN%JA&xf1$qG=Zqcn!a_FD2E;ZG4~t-e#MJIiI>F%A`~_!&T4 z9FA!ya5n!|$`hR+JW7@LU@&*;fP`7=(+OMYZ8q|9S{D*QaY%hcu6BTgGr98ovUBAz z2LL{piUD||jBV_6_Nw#_ObEu%Zio$G4{&rgmbpe2TRiwVS}k%F3&ZJH5#x9!aJgRb z0;e~0VYQu6&H6K}%|KO2>p}sIwbLT^=|naOmqVDg_ZA4PIqx=>_9xy7UaZV(t+ck2 zCZ~!EQ+YkyxuhXWHkL>@+yLwyW`tY}uc<h+H6R*@tjU<_y;zU8OUUUUu=9Wu3wkq5*QCYmMSrOW8H6Or$p-he@i148)~jx z6ElCtTAZ0}QaG-4A=kJlI_oEAFL%*O-U-s_Y?mHjD>zRUu=u#7Smo3u3!j{)->&wc zYg81+8Js1np9~6|A`S>Mao^$|t zb{f3f?{(D*t?pk{V*~pbUuG^#Ol#9@@3W2E=@6gR#!6DP_k8HjSxH%tBAsXUz#3U8 zDn~xA#_t?*e!b6fZB~un9`d>~qE*^}CBz)l);`(E&=7KS-9FU zWygPUyJa~)a*cZi>^7mwy@ciZu$5}hv-Zcq7Axd*!9E#~GXVLka8J1 zanR$VVwW$hsKb+z8h$@NV%})e2hFNF`A!uM1KE9BK}J_qaeyzaIrzOz^ey~kWv$8? zrvKldqph+vIW9eucNe+2w7-BrIZfI+DaVPr({@j^1FU%61F(FtmzN~PxZB))5x{!A zCe(_KUFw*a;s=yDVeuifb+qyP{k9aAgF1+`YqC^&Wdl6koRDwY2yNAC zw)hU;j%YSFGuLA8>SgkT;B(rQXt0Js_8X4l#5ujDbYwC%P{zis$K}|#)$y;W5={OF zY~q~$r9}JCG;#9*$qWt=Q<8bK*Z4fDvsb;-=D=3}rI^?q=GJcR36v;qQ%RL(^?YpY zq}!k`AbZ-{4xREq=j=kMtDsSoZfx`Z9AJ65SJK#nCd7Gn#&1q9I5SXp`~XgU|n!v1)Tx~ON{ zV5g-?fuol19^ON~ugd^gn@WdbZ>0q%1fK|R;{Qh(%@8T0At2%xzs^kK2Tbm(D7GrV zMx(?O8>H-t2kt@}Ms1LPjHL=VWC13an7d$C}mg4!NKo!>A zkq{$V+q5pwx4HN_AsRW4y}q1(cZj}jQtv1bE%Fq2;4ZL;GiGX@e4GB;(~7uB`JWW~ zd++-(IXq@8kXyxLcAd5ThJMi^;yK~JU@x#XBtGpf>#d5o9>1g%I*gOQ5gSQ8<5`DG zJPMgJF_oU9zfF1WjvwuFuy~HO8;%AbmFKS9A<@FDEy($q=R~}J(rC_rw*W`o< zA25HiTv{vYJAvbB4ds2|l|kfD z(lPgAHJ5UN5}R?|4O0l(fbF|wfP(okc{F-9h3%crZ- z25ef%G?o7=;`-XMzepVs9kjsB7rtPj-woox!O%nu%s6dB^;!AIZRSt#z8l3urqvyM z+uC^K>13^+-OBAR;m`p)qPb#G&s%PqPJR!vGMD{L>Imvcdz;`C3JW&}Leq%T-?GbJ zQKa=i)|LZNp}ZB$S44*bAZIl4XROwj9NjnG1>Fh&LI=3-u3u&_+07w`>2s>_sdEC8 zbQy4+Tc6j)=s2uBgFd+*mXGQ%!>EXB)3JOcAwM!!0p-Wj2&4P)rhAj8_!>|H#|QjF zN&VCM|JV?DAH055AtPhQ&MPbNnG!loD1S3K@a{Bz}-gU@kJ$#;T)R#fR zVDLZ`g=$O(A|Kg)M-EFT4ioM$nk~7e#ik14xPi@fIZyWC5UG7(FtV#7c_E3+q+d2A z6BoA%-A!+XfylINIAt&$(TiT(f# zGRJbyX9(s+Nx(YBZ{*cv6|;OF`hTeGir5ixzYnVS%epjImQV@;AGA;m0RI-h&VT7l zWt?T&h-QDvYE6~qN;SniZ{VO=4i;jdjC+`|5BN@ajo-x2sH^I9{MsqiWjAA>31W^r zGaqZRRJ*FnIH~3a@HICH;*foZ>mwJagGp|fK^=3ti@c4(9-vM7$Aol1Z{+%UO_8PB zd%1I0kg>LA%%2%${|BLX)OvG0bCD0NIr|oOv1AfMf#R-C=KZ#I&6>&}5_huY0XN&WT`gCdq~-!xE|#3Yd@(Av%FM3sw+d zVsFOmPGoBDCaGw04R<#a=E<^SeX#{9b0ChpFV^_G2m0Y)_9&~0Fy2m9kN$#}RpE(~ za52csM>IKwv2I7Eo{=~wuo}Z;!|QUK-_4 zGV*rv{EaD2CO8Un&YCp?PH>_gJ2uIIA;(KB?f&83nosOxDPt0tQBGEzAz5J<(BB#O zKrvuNhjf<1Xwz))mL&}@69YWTQ4Fk5_XJQLrxY^xSj2vsF)Qw3!DunX*OYw~!$nwm z3CX~Ioy>_Ue^%-mJtk-sNf6%QNcj`yX=Bc}b4Rg<$I=Hl;4KhWga=X^3%gn zxxmW4%u!oY)=W+s0$jmxlKyqp|7ifJAXZVsaLtRcHR8pglB;;Pe;s8#wo#ca}w+I7e=$n1RGx4LIvgeq% zba8%B{g_|vinvg@GQX_0w!E}LM*&uXq3x>!*y04 zabuvTrd2Lp1tuum@L0C$Fu)wX!R4&M>V%vE@wYXT3X)(8 z?avXgdR{)eHVjjqAh=|O^e>E7RYectnlR&|IxMl1l(cT8@Az&fE7|J7yg1~fKm0Ft zwivEGqH&pAJt6QzD`j(NAM+!vBdvdODr&V=LNGR56(X>sHDTcqbV}4reQCy{muCWH zP0V~ub*dZP2JF9L{q@1(A*B@_b&#~_R@b86-a#tKDk!oED(m0GfoNa)`Pe<`=A%BW z<9bAw2>cJ~9X)zfv#F&umuq-A6m-2g>dGi{Ov8|)OJJdBIdO7{K9Ip;W8a)<6UdCH{#jrK8VopIY zBze$nZMwF^;?&<)Alrn8XonVq$Zx?SwPSg*@^v@LC$2|i= zm>*-8BdYx)1S2!;z(gBmtnZ7Z_-!aa8(Vd0abVhJ7`>!(WqLV_>tvr*sTAU%@D0H* zOW@{;tOyrp!yCc}_Un<)uSow)Xd*UlM$X@I*;4-BJy}+ZOOL2X6XWkn8cYkVV`03c z9YdqLjrN;)uTL-&Z{EXE8K6%f@*`Wnh#Tq+HJ(Aw!`W=8HCdb6C;O}ic1bhgY^``~ z*C@faWVxR3cR8Sv5t4E!v-u3Fqbyj6&xGc4DnooNC!}CUEwF=45UAr3Y@|5Z>_m~X z8ONO^h&(xXu#dsR2&hnEELXz;*SqlTmKyR3L+r&?DzLNs72$a> zQj_GQPSQ)k;v8tNrm6!eQW5UpFyj-X?lh-%TfY=Adu0Ss0YMMdCHBs~#rQ&D)sS~m z=7FF5RUJ)kP=+Y#Exfl>y2rE?)unz>ZaK(Ohh5}~&T>PyyfF`Rs10p_)B%EnnHhSB zbBZLSmoKy^mQnhFq7sa^T@u3~+Xqs$gg%H`G{5Y^b z+P2gpHhujnCiHYe9msFw8Lzx*UfQ8kO{JpWIA$*87!$peMIYOmVb8l~JflWsL1ENuEJaa61)T8I6#+7U+ZlK>)r)Wi^qm}1RVcch@PAl-UE3->r z$((3wkhF0+WqnRAE9_Tl=F zRaoUM=SRFc4BdS8XvsR*&dBsTlmrs)wH_rkOsh3uBug>n_p=h+(Wk$nyob@K%Kr~% zT#LM6^8Zg~C7szLb;fjbtN0*C&riVUnm6lg0Q9#s5JN-HC_C}h2d@x_;CCm*N%V3v z_}Ui2vY+1w7~j$9jBvs|u)e{2C{}6voFJp~aPIz_zBRNzt$YtDCzp{AklS4B{jb)V>tnhaky6+NN!?Py4A!APrfLJrZvXO!en zdyKhxCI z182&)S}f=`bZ~x&dWjpy4TdyPN;sX*ku5w?^AL9++PO_S!@~T#yePHvz{GZmU7&xh zeY;fI@}0Mk_BDQ3`m(R4i?+Rit>_U6d&LUT)bF}vH_|xWpe*g)a*B$YgVE<$7)f+N94mI=uPok>`Ml{=K=Chm>&}-PzUUiUJ3hW zFQpCG;5~SCt^nz-x*oI8l_9q&KZ8W4r_$Gc0cPnFbOOz|C?hoYjL51R`qGPX&CfEC z44dpiKu)Gs!v(G>5!EI*JwfEGSx+j~-{WfvT~(Lz*duPqPRK0_Ap`dikuR(9Gq^d{ zI~BEQ{=2~!A3zHeg5R42$h-~1M5ynRDwO~Lf8Qj9`1nW0K{9Hhzt7CT42iEvmQ#a~ zBhLU48;lNgzH$qFmC;xj%@te$_8>FhkFVH+=-NTzwa)Wh#!7z?yS`815Dm7gcgO$a@AywvMiAjL%9-t zlY9>xb47hS=!3)^KrWjPq$O}oxu#z`b7e|b;CxanIe?yj#@XwO)bIPWiQuuB>>=c; zX?K9elOuhXSWzWGPT#2)%oI(~^0!igv64}0_n6#@hnvrKM%SBGN<{P*(6FGPeZXJ4 zS)FfY7DQ-WQ^2>;8z{sGFXTs@=?-NXVJ;_>q&@f+U=r233m$%r83Gj)(?S1&c)jxE z)lt@VBOIx`^PV!)AS}Pr3AVqrL7OV$epEJ5}EY7@amZK0BT=ElI|h( zX(%g&!yzOcp4PBJ`mZi~z;yf`>XGQ?&Gio#z6Q1vEKWCVyCYu=g$USQ_D4$gmJgVK zYj>dEsN-An__fgoE`d) zKGL<)V(@L}A>=kjAz-fx>|@2ed0?I^-Ay zDtyBRMXkYHxBD5=2YWb!P*Y?UPg1}uq?c%PeLWqTe-RTR0KCh8e`73?foqHokQXR^ zZcu(O+8>}~EXI!tdc^OreAAUE@+#&l!5@uIPYhS8@n;DZ6->vN#aUKvB>F=rA(pA= z(LJ(kPmZWℜ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 DmWu`x delta 6366 zcmZ9Rc{J32^#7xfC3})>qLF1REy_NF>}#?WMaXWlmEF86S+XT3)Y$0NOqmpCt6xN!M`7j^7Y zEc4C!xj36`hdhhU_jfleU~0nNOdaXo7OLCZDS8Sa{nqEpOpK2;#7!^8^)|xCosC=wbT5t zQfmS?Kk!ZOdD9HOiVW@dQnxd-(!xI+PNko zLs9BI>@3(9Gs|fTFW%KHoOkP$QhuPm91q?cqyGi%w~ug|>HJ(G^^0h&F9LUp+{xPY z_-$rO4gsDqUmRtaR+fRC2G2qw%r9cfz)$}^-bf9q2lFdC`DiU4{$%$`EFg&e{5QT( zIT!smD3SyEhtK3QaJ%Uw)Jw}mf3ws{*Je{FfY6Ukn@a3-IZBB;{dprlf%tFsqtlQM zhy|CP+6@QE5_<@zsL z*D*OOclk?-Q#5?C94JaVH9z(St-TT0QgQ}l$a!4K+h(B;BxB6* zX3kbL;OnpN+2~^8bWk;6hvI7UkLN@A2gWxp*;lCOIKlIsh-P_1Tit{(lmY*$@ z|4|$t4cA(0?Q9&w+x_AA;>s-)K03q?AE4yNI z31)EI`>D}hvy&4g)h(l(tADE&dA1xvEA(us#O-g0#Jf`oL!s5?n(y;QCu;m5GIbB78VeH-KUwvTR z#|8!>;cx>sN-qF)=(r7{nxI>prbP@W&O>9koJnP^%aQ`muk^vL#^XZgu1{YJfBHMi z!Q0f&m1AvUZnr-us-fRkY$3++RTu&tXkSmZ2)U&#U?l^X!HNzP>ujppd=1DGcsfi^14i~-;b1DmBO}}OGBpF#S5x_h99l8kZPgq~i0;yXfi+7m0 z5l9l0N(IFJHFd>{!0q2oX}$AF6|zJ41=Ybu{$9c))CEFEq{sAC6+bBcfLU99AKK$Z zv4Tvf4jJ!W5;b$jKnjs0qc_kzu&(WXs zv<_!i=3ANTUbZBk_j8P_&%<&G7uN%?r2E_p{F(lIb5$}CG`MlSVl<8uGHf16TH9_4 z0R|Lqi9(ro?sdR8Y8UvwG~+4uGH9$5Dq=|!|&*?78xj1BR`OP zR!#AT!-Zwp&alg;NW!wGnjTHJRoy?_w)C(1uWx>JZV28VZnsn5E>Nb9%NxdZHaW?1 z!dw$rj?%4`i7~kSW&XB3%{PSi(+X=BtwCWmIee)QzPygUf)p8{dZ_Cus40A5b-+Ia zKh*znSR+$`*iJU{ve5T+0_vexdkJA7>hu;ifF=sqsPvV$q}=#zeExr|_Z{1B@1J_t z5o=6EcRNkO(*}MiwS~RI4OC{8x9dG9^x~f>%FNBu4T>7K2uhUcAaVzqVEnH*jgtD- zQ?p#XkBd1@y4q~cMn!*aJY6|AZPJY=q_>o-312N(&l^K{fM#Mq9i0>9|R7eQ6DUGHq!Y zK>4NQ%NgtYU>{T6T6@AjIb|gN@J#|KekK^9zrt8c*&K%$Ww!?KTSTjKrTo4CXKHEb z#64e5$apRKc%rlefGM>LrN(E^Hm zKYmuWf2kWd*yS9ab>}2Tg2Z2W`uOm-K>6idfCtSItgv}~vD6@X%u>0mWC=(Aes(XJ z7Q^Y}6Kt!X4UDZus0Fehdh=dv&C0RXgk;2dJB|#-X`OUOhvfg3JyKHDL^H zznhtF%Aim^c?U3n071kghZ(bX*%#P*BA|V?z%CP_vaT;aUakeFvhF)$6f_{};(Kab z8#980*XsNHJ@Ge;A0yO;kYNVMEnBvnpfba~$dTrcJ@%4?H@Wn>Yv*jN`_*9u;FA2_ zA7v^xXj#=0Qy~t6!~@qy^SSH9u2c=y-RZTX%olLL7O+Q>ZXpB&oy)XQI5$C}p6`=4(s?foyZQ)ttAkXnjW1kplUKhUN7B;>DpS{UAc~#)v z3)kd)N%xnZy#lAI$|ia3GzW(M(dZN`y7$g4vt3!u=l$fI-me|RZl{^x#Uua@_FbnN zRH)q@xG~u1Ld~y!$)?V^nmz$rTl^T9xNtMTm^01fTZIdEzlFpf7OA;<)A&r5u8^Q+ zfmS0C`|IUe-=y@UzNhZhcG$Z8$-@N>H=*05Dp#Dl5V%w1v|nD;`0Ypx#XVY!Sa-@R z67^nUKN}2*5-mlMKXM?JFIjUEY$#yzE&BK07|YAQGl*RNQ#>FuXRX^$?yh-?s;MnK z5W4v>>f4>94=+EU6U5Ef{Zo+snri#qdZ;_=BSx$m8CRc7;I1kcE?aFA$@3bwnIGSX zj49D(fZSt>;49Kb(MuGls-jFaR{o&(3rKX=O{t$Iryyz3wZ zC6J2Kc<3XhRS0*H*A%>{Mv)&CzyL714_Fr%YJcLo&@e;NR$#hrn3N8P(r)IG`7YWt z21nCK$AU(`2FHin6DVwyHL~m~K3Zq##?S&eZ$)P#*G8N1fjd6*VrdmTB2ggDg*^qg z_XjygogLNR^X}ur6`c_(?}@yp$Fj*wSF?S*0(wG#WloJmdFzBr%q04KVBa))afN3f zAxe*?JcimdbwxMZ31Px*wpfIcJaI}EGnI)eQ3o7dLt$DLz^m7$KTYv$>Ke)5r&lBS z|9V8lOvg!-u|F0C#xJ!nOp?|o0oYlHI=cPj;Oadix+U9AdF-6UMDP*6Ua*J{NZDdX zd+(Vbi1H%Pc?N1-d~yh&OAk>m-}~326gA#)Q2O~S=0vTb4itSA zl>H`zdi3D#tkClO&}c)*ypqQHE-h`TOUN8OrW>X0G3GXqMtVNUmhyV1!UK-_f{Mk{ z(C&L(Jb6;B@``O?hWSTA=%#fecSDIF$yEb1Kd$Nb`W{_nuy3nUQ!7AV%$=%gj{Br| z*|^u?bmsj-;J_;Ss6*og+OiibDRej`)ZS2nwgQtYGzbeqsHdW+VYPs*!uDackgTxN z5H7yM|E06@{6C${tL+Y7`}HDJ@ejI9^kf-! zbJFiv;;=H$VS(;N2Fn6zWr2n40Fz56E!yHjqi0y4jxf0l(xL+{G;4+haSoZJMHgIX z*$hkPIb@L*;keMY85Z(6WRn)XaG^uzGiy+M_SvG(E)Y7}@*h>W>?$967L8_1KTrx+ zsTDM5fnJN0m|}uft-@GCC3IfS=*Ee3OQh0P9jdqLkNus-kLJ%*xp=;m0vpN;8B#Z- zZV_~|g_nYbN0NwSnT*>pykWZ8f=l4{*M+2lKh}wV)f6(h&+cVh!t=5D$w!EKJHt-k zPB0hX{8u|F`)JkO{MM4UuoQ<^3wzqfX8m5B8%p;vMGt#ZblV$^ABlT?jD(~#YroI8 zWIFEnj?9{tjJEtZy_Db}POt>m>KA?DiU!Nq9y^z(GFY)_HI6@u|1U6VH%4hUawUS_ z)HWo52ay$hU@ID7D@NVMDBVV`6!)vC?trAkjJVW{<+G%TA5+xG3ZXi#boZ+n4c}gt zeJ`iEWu@ULd0S_^;(xLk@w;yC2F(+nGU_)*{j_|MAiGc!EAMv1A3Q4$NND-ti{Qv;7TbM6ap&x5o`TRx9F8DSc{JMwoek$k^v??0d%#GBb9r>WunE~ev%w_dVS&_^NI>PG80ve;Hh0*xoE#;3 zLSqP|tW}v|%^#^msK~`5uA98UyY7wiS?8*LA|mS@N3h(&fuH-i)S6g`)5OhxrsER4h=+f0G^A87=hSX&dm89gJ%*j*U8 z!+QFeUa*{r>hR12?HTm(rbkfx(t>MPd?DqEbsa&i@XWz8pm+7mtt`3sSekO}A`JEI z45Tx;1*CzMLGPPg5dw^m(Jf8SKmG9s!RzhMyVfM6BYD!N%C47RaC~uO;~2gt`%^_~ zuuZiGKOj zXuM+>2;@&DpFihf8!|x+3Jky`+F$;X30t)Jcb_ot_S3`ljlvTs9p#vA?OjzKhh~bV z-Bpd0>#D{ySJ@9dYQcA?aa5%irA#8x?4$QY-+YRVDJjU^ZnFUJ?^YD_6S4?o0{!O(dWePHBdu>IIfZH5iL zbJf^^6Qe_Sz!hIBI#5kL>Qev~JD||V8T%s|f)%YOly7$cvd3-)8a*Xe#sVP@IQ}u~qA~t28IR$rKiZ#;DadvX9M}33lHIp~2G5bGQ!)-26_NvKi|k z9y{4AmJo1R(=_ImKVW}Ch$|LH#9?eC1~36zJO1hf4Am7`4f{{pJ>Y+f8>`mwGgXV2 zvDk~P_K&#D*=X9?`aEJjwbAFUnzq}k&gpC7dC^^m52L`2*L9+?oGvG#XXp)H|IQGb zk!fW+0vg@&;ovR0Fwp#mK_<*#;0GeZj$tvU_&T}l8!(I+7BP)6pF5Ub4NAo`2A4Yc z&IkZ!ctz(*n@RP+2ed;w_aW2oyW5GL4)KP`pwZn+T@6`X~F;-J$H(eIm5n64ol-btI!p({_FPOLHeUB2qD>ivQc_wm#X1 z@sJ`imz>v@NEVS58=b(%Z_DL=T`Gp)egkI?ePqX5?3F3=AXB0@-7{V+Haa;Ue@sSW z9wP>jA9hFfjTsLnXk0gdMY(M)$eGn$@L7bn@`-uKf%!7*@Ru;LbODRzjj-4dn!VHn zClo9K6FZk35Piv87(Vmg`u$bggx%7IgDAe2N1f_J5Q$@q(a1*bTK ngf9Rov)aar<>~`)UkR`uIdo-x9GA>-|IwS>DyHYlQkEG-Pa%CT)ph# zao4$SeLRQ3UUBkOuNh|T9r4A53ZH-wH$bo}wOf3e zEPg`qJB; z=<6X>^sefpkFma4`3<5k(WW({?pHx=$#Tk%(ag3ZC4+|^EGy9C-JAM3j_M{?-{iSn zKEzz6E!ISGt=ag@M?Wff1a^g6EcZ0k@6%sNP`PGk$JgN?Yme(c2Tpaf%T8+}CRM&-9niZVBzyFA%x=XXO<FCo>iTBq$KWfa9bov)=Nv`Q+_?evASK zc!}Wkm9LiG@;|}neM?8Ly7ZHy&i(KJOhk}p^{pfiV`y&$h7&sRqfZYEOeCR1tKpyPSm)fsM3`ZRQN-+|eAGcEc9zlyI127=qXNuRci4?d|dC z1@X*J=}68tC!i!gJng3sNwfWtb{EbL`U^&vC-}O*0jWX#qn7RLk%5z(F9EoVW?wD& z(>-rF?a&uqnJyp}A(TS707kR(4MAOXx!>duDH@%05{+{=3pp~G$ZwkS;2 ze(Bg7h69#pU|HI}skno0aiUM?-j`-E4n$q+6WrT}!YVy3wXyEY-^MV!DYKi2N7Zeu zJfJu4nwJ2=^6$Dl_vp`HOwpaj-T1|7C#d_u6aPa=5TT8&X@4Wax3g+K(zued-fYF9K<|!$tTPYq z`>Z^jxT3Fz0jF;GV9bLSwqquigGozSGfzrbmC#qQ)qbLTYJ*Un?#j$!eYIsc9F>7F z>q~Vs#JN8~pA~RHLQJl z!aL+HT;`=89_#B!H}U4jsqF5>NJ3u3Hbm2EUh3)O`#?v3^){t?uGWmc_66Hga2-e6xr&Di^(g|e@uB*64`{HdIr2n4&mfx1mn z0(L5Gx7LvhRh?;7u-?SGiWC2kIO}5XW+HsHq+f4TmeqeHBipx;w0&HVnKDb{Tr-O+ z{@TG94M_zn2W;4tQuUg=IkU3#qyg=K!1c!Ce)el`>w7i1qy31rJ;&vaEO~&C}h3WfMxpXmPCtmdQ@Q?o*gwv$kZ0O#Sd))+nrN{R>%;r(9c4Qce(296ZFHTmY zfMGsYUUPXYeslNB3{&Wti%XNK_=cl)=`GfdhYGZ`r=Y(%ce$V5I-bp|9G1y-U^Cv6 z_jY)fMpp$d5b9fQaA`epJFKuVVif18591gh8=b@x(3Bc?y;EPT_IUF5o7R)#>VWJj zZE+rM^Z``A(h384tv|SH&TitX?a-4ji+8PgqRbv9xS6#DNt%{M!$Xb*7sPZ00+?Yw z5=+#5LZ|Q$pj7LAcGKZ6oKF$(o$ceb0sLi;<2@vAq-(y<=K zeE|6mi>Vj5G^5;@E=t>MtqSS}FU0quTEjdL0r7UhZ%;dqolKoGywR@OB_R6P?QfUF+jms@&42IE;n&HSmz$2cRMLkhEA2d)wL}z_#1_S=qzE zUgL8o_ol~bOR%+irMuHzLGf~#GIzsOyF?rW`y4 zI!zs4|6OK)UV zWGT9A@zlGhUjsf^!BxB~Kk#a)zKNr`G}5y2v8P2D%xEjj{^(=?X8)UG;o?qjpZY7h z&@K^D)QjWpCEmz-r?^rPZY%6;Z%O4qG`p;eAagt!+vx;$u}`-NNZoybuK3`)g?JP4 zwLyz%6Eb96XrcSu3X@UZGhF5AG@o5rmie?RGsGQgh2nfrdY>G8fu#T{6vyD~k2GA!AlZZ9ZZPwPtA$~VTSp_0@yK&nfCHTKpE`IqskrdG zp*6xiYWnO#rxTrk$x0D%tyg)1T~tR4o=~g3^^7EcQ+Zt-68D{M^=V0 zcGh~k@LrZItcD`HmzSQk6-p_%EOwD1&$H2ue_8}^@iB1H|B`%jrC_mBUGnCe^CiKPd%f^a&`S;{(^OQeCS#qu6 z+T@STuBw7sNJI7SO?V7%R~#oaz>0+67nCj)8!zTcg>X=PZdyt2vrZ6fIHPuMj+dk| z^Z5Ai{^{tu^R9KPo>8A?x}27FlEbGp72<|vUMH!fxUGTmYUhwNVOf2uv{h*mWofp0 zhUN6>$FNedt3`4{#vk48H5;eUg2%5**)G4WAOC{Bx~Gv~W5Kaq_*>>K@{tsHzjpXg z_-3rzvke}3Q%s9FNA&2E0J#T*-cN9If+bl<`jTb+5Ld6Xw^R9LhchwyflW<+!_6v0 zzg4Upt<_mptEfdv((Q_<#wIr4msvdUhm#Y+-g@b6!O9_f%Qk7aba>9d`EBUazQRdM z6aV4k3YH(xFvLBQ?C=!NH-oiMn9qkT*{&I5UFm9GZeup-z%6iDpGjr&xPbvv=lTc$=c%Z8W4}GTsDVH1RFW93iiPlWtUWu!PUGF_O9t$Fr(S+2;jm6kWW! z&tdXT1-HI71-Fslb%s0sY7O3NX=&;GoovM5 z%E0gkb~z&IylBBNnk$pecTDAP>P>Y`YVOf^zo57>StosHwts);O&*(C$@L#2{l zZN#gK%BVGjJV+Xxp2gR95{mViboVqXfr>G0S)zwfdgeu2vXw2L2 zxS+~#{)wITOm($zX-TVc#1`dZQhn&*eSPNQi8e7EKP`oO1pI=lSVE68QFni1qozP$ zuh@)9TEL_Pjzwg8F{qm(@25LX(?bqhwqc2~424Z?M!GDv+?K3+>;J`0>aB%Z=}vfH z*7Ve#GZElp6or=GJf|?9-X-FNsXOF>5B@T0Kjij zkkP*1A-G&!P68BuW(pT11NVj!|og$wbs;xD_Q9}K*YFMjM3RfP( zULCH?FtkR%O7xjH;_5KnrtZf#?A5n=D($}A-i0S+>D}KCgxF=p7QOtbTjFXO9liVT zKRS)Im5${=(+yHneP^seZC;+<``aJ#zOtx#%DfVpY1MN!YA!#SGOG$YlxrH*DNGf| zlp)p@>^)_>@qqUoyZ-F6go}yFYjBN`0q*T&WOT!f>uza67+LV_S9)Egt}~+^9(mRF z;XoEw>QIt@u2S8{IfUHCXNm9_*jK;b!h*C{_Q!S)g|$GwO5a+{4?kFKkU( zqcEB$Jv;RxZ5Xp{cvzH!k3q6e zQjtlPBi?8S4dceCD#s5_A~adK!*_BeA}tbSUHdlH<($ll?=)_>O5HIa*HnU#nd`A; z>*G`)U;triyz2uAnLn^xfy&C4Pi`2sYTx#(iXZbCE79kQ?sdB6TM2#F@GF zwYfFcwxv!YAW89$8)!Yh*8JCnd1c8#k12$zNJ(aS+C5fhN1tCqR)|nEB&g9KRB#2LP=y!{d;Xx49j&nq_54Wy6R9ahP7yb4T1pcAv!>0@6 zp`X2!er3yg-Ck>H_*QGl-Ir_lmvcH^)#F_k*b@6mXO;u7ga_&7Rq#kqJOf(8g4Fbl zJ**4wcagA7tp{$tQoS59{!M6#eIdd$3*M+$GNnKRwo63h9#pug{~C?M-s`zI>;SCm zCiT&Y&EH!pd(^Fv6+#1QMSecoMb8L8?q5+h@>n`o^dw+Y!uq^2s>R#T$8@G~k1B>> zAmFXAYNye&kGc-S+uV43Qyyu>scib{MnBi#;m2B^fA}ElaFf!*E%tNs@?dXQ?#iG6 zUCwTqu1|z3VfpuEm9YFvUG@5u;>cr%z}(6g8k+ZVP+AQVHGs3)=uIzKv+^&BXhf~a z4y(xlV$SJO3KCL8M2KG3X?ph&Wo<;K@sP_(_rt1W=pLx(gx)cKTLyC zUxu&+VOQp*dtbu}tU&Yg&|0`0&@yk>5a6b6KKJrxAZ>lBchi0u3TMl4sDA1H?3DjX zvWvZ_C3FVp^7QSQyL|6HT`fZLwU-P9U~RjJ(+5Y}n}y%N?qq@r-!aN4PL@ZeChgyb z1DWmLX>w&HIuIV4oVHiF`4XH?U*#5lfx2iMJ>u#w`}@}xiFo`t5wsSEepWHZ#pjk@ zN30llgN-GWDnl0(YsPSeAg%|3Li^Xbf%7oC1GVZO9`r_!4vj@O8i=(4iFbTWWTns_ z3hgsZ8V!4~{!&ZB+$}*XEl|SSGzY?zeZpTCBL!HJU3p#aJ-^9vUB;BYQ~q?0W3!EG zgK0@)FH-~(L5E0=osp)syX6R~g)_r{w1*)_kP(8bS~A0(3eStsCD|S9Ac1btx~Aj) z@Hl<8(6UKFZrDs8;f&3Dh)Ubp458WGSj!xA;)Hnq^6BlHO8U^K+v>5=!K z&%sn2@qD70EJZnZ0NPn=L>^ygO28d~*s#7Gu_1}Rjm6@3 zx56)wZKuJ;S~}yzvz4TfE~;Zt)|KiI;zOz_1vUhog;J7T8vbW(MBm45LjyW=n>iS3HEEXrNaDo!x0=G~Kv%(w)9=%DookDCy;2UHGqNAFwZP=% z>e=Dphqm^bg2^42kFY#y=ybeS9z<)1*nSull0*m=HkwGR)WFqlSNO;Ti%vi~b-7)| zM$3aFr<$g*nz6XQgSf^;N&OF_cPi|i!$!-c&460_%>p`I&ToB|4EMhd1<65jFbSIp z1HXDr@AsORjX55D2uYeTag#x*&Az>Bhyc-pQ16(tCU8kcBj&Si4=lJMt5TkJ_&P$F zyuC=t%lmaX*%^UV;Mp;PrXv9rKnRi6rJ0rW(RZz42Tj}OCQ83L-d@NQn{7(N7Ho-Z z;oP2CRC6ESb}i9H+`nr`QfsrSmg#fUgBSW2q{QVT#-~0IQin&ghnAc!ru4cN2ktW5 zwkpwe(Rf>deV~33Z7K!5ekf+OS-;TE{^ydvQ$E*xk*1Isp&)NC7x;?qRyS#td0AI@ z0#X8=R2EEATa@S&T*Q5SGJ40V1VsGR`d4$gI3_jtWg~Fn)>=N+GNqVBIYsC8$dl!o zIGYwJaOsM8D`i-IVX}IQi+yPufBcRv3SaouJ-4Y$Q^mJFX-|s+_lVA2QH1JIUvNA1ADn@M9E`J8>X($9a2Bo_ujw$%?eI#wa&pYZj zMQoF5U5z8V3cjO}Oy%3t!$!nd1PeOVlI=?bGJ2=cZ*Jy})c`58Q9QQ6&)dMV;$=#P ziKf*iwDtJ#!0xNNzLQe)(T_X3OPFwx__?1A|!TOuTwy1PUGWyU2(? zBLjh=3jQw&t;3nq$F>cku!J5egy}mlf`EGc2Bx+`n4CG#1C7C8c?xSNwhd6&MtO z4LM)tomK_S8fh#0v`UYj&(~z1Q6H+Uur@_KW%83A{nKT+l%W57;MB+_;mkAJ>7l>^ z#kU>1BEtbJ!oi~Vdv?*+920Y$AZH;O&=#qJ#pAN4;LSrSpxR;7&i$5nl9gM5Rg+R@ zEr*DSE>9wv#4gfUuJ!ww)@tFa3dx<)&UdpFf ziTa%EfXujUq$B@Ta=%+68h5fI>+jvb?uR*JTQR#EBKi|47SQh@)s9^(pE~oS*s<4K zaXHeqci~-92)||S=@FE)*?gusCVwUecJ6mjI9|m=l_39~DuG)>swq38B9MPwaEBo? z_IxnAuY(4yUrr6u{wxMQSi_5EWHo4J{@rF+>ur_y87YZ4ImH_0!<>ucz!x^+{W^5% zS)&AwSlzC#<7qtZM5n>bit+($)aG&6-pgX=hcK^<6?=Zs7AzjRl?0I+(ZMGxi~Cc?%l8nk!pj(;J78 zXFl?#E3cHNtWNFcZXalRhMoBcR5Y}1I)JcegGd-*5VZ92cES_E!N***;SWRJbPuTt zrK*)ZD5>s&^;?{6*;<16^l*B!_g3r`F4rV2)oYexw`w*m03k+T6}+g}Tm#XulWL=~Np%aXPQKDIa%D_ZoG;jT|_w+}jvUK02rrOgkdd zWS8!HD-X|T9{$ObMmri{sM7B7KMWhoMQ!|lk^hjGb4G)S?bOk*+Tu3(Mj6>>Jm)L~ z)Ao+GpS#ZE#K#=)G3vY;YlT&ld|cvYQ#Icy>mgvO(@`UAK`@r6786sfB+in4?qM=0 zfP1=WCi^`w8-VjU@nvnB@hZ{1M`%{!00do$D-jLCUd;?=;XVdim}@-%;KGUbkQ7j+ zlIU|#P!k{Nl!eJW_RyYHBX(1>TnSuAAT_l*JF1Dq8DHpT-z z`fC{y8@rJ?FeZ{I1!=($*iG>xf@)BZI2N{Lqd%5?Ubh<3y^sG z>gryQ^sT?Vs}VRl%)zY^c<>lCDtKb05VdldES&p0enR`;J;=oTrhQVSe1uj}p{KNQ6O3r&3mmHc1{VIX(AxbC};2+t4 zdG?_HZd}I?*(iL|cyVzZtcT!T4Ze^2ltmRuedeit#)0{69r&#;lq~O;mFiE<|1=Qi zDWkq0)t7NffhuAo%Xe?(BPyQXA<^$P{X$oU02c)sbT)zVrmMjfZtc-geUhtBb5PfU z!nFb2s(CnZaL>Mq$nUTj`_;Z)Q-^DGccQ3Is=uJ_@!Xu&kX4j8(cP&0lZ9v3L)wb|TW@+Jl z?q%|pMBm3BBbK3i}Q4M3F2-BwHGNyYRnG)XXjULs;7;s_J9pl z1)L%9gu;OS!Ty-S>r%H7`ik&IQ;#*(p9$o*%XUyf82441GFO|bI#-JtI4zB^g zPw#6=yEr<0gE&ueTOrvpzy36e^H_rDg4%0%=Tt8@+M^?kIP{LuQatUWcY1?;AAN88 z0uO9@(bU0w_V>vlCw@}{?VKJ|1_h>sPPGN=VjA!Kr?~YqrghEZ=$k>mlvrg& z$s7Rh2W}PlXpqC8|0GMB{rEX~)OS}`fn=*shM?ManWCsa{==Ah8{iM#5Dv+blquJ| zV8OQs8h(R?wn?H8w5Yr*M1dNn@llp^f2v zh(d;xc;ustLx7P-^`lMl}21|V6-N-M%23NmsgbFeQGaB2g0t`$?tlB?6 zAqTyrH97E$$w{~erbGYdHPLTic0WOsDCTpX;~Lgx;wtwGuqfJne`lPGbT751vIf)w zq&!zabCdiyGnqANyrcfr&7gZk&vi&PD32h4w0m~3wV6t-v>Ryq$IF9hbi#K?lT@d6 zLY8hpHz)`RReC6_Mw0HJgW7&rM$;mG!Cm5rCpf1xa)S7b1JQ$bqx!z00kjp9m;)Nb z(_woLP24Drl^(qTSGXaU;Uqy%U)Y8u@>!vrx<~uTrpT1-_Z8ip%_e%7Rk2cNgFrCh zBZ6ww{NM9i#XDH=Ta8`L=?cJjH?RzsDZoBi?Ohphu( zghFtSYU=gnXjRf3Vl@TUM-b;E^A{d_wb4i5UyA-0R)i34g?xJs^Zk=Mc|nicw|1lK z&Be0)BnpIl&^Zhy((MB9iReqF2_P$X8jgYp>c(E|4CV2 zC}|8inT4C^Ny^hj2J2%AzF8HL|I&j0MQKXj%6eH=pnVDJ*~dLOn(1u# zcVB3VmkD#{w^9?*r3>RS7DjNK#4{;dbu3#$*NWPxg&M${$j^Her27a_h0KaOuxy0u zesqpr1xSflxC=n-$N2uMC}Be~rtpi{3nt!1-v2Y{`!B3fuBjdKX;%aned0xbIZOQv zcn;bdzTwUoode_U4Z}ngL-i2taX7|xUGfym6sSny7dxs3qud4!jec4PyGr|s)PtYL z4g4&}5;za1(5XwY$x;FmoYiXo4poD#_FZe^Edgu~GD8-%zOWJB z_)+vO-X<3W!u~G+#>xOnW(CQ%BG+$veDvoH`%YZWE12pV_;vI_k*)2c%x= z3mc9+u>it6qED&OzP|u?+wV%h3twkhw@NrFC>&&c-_b&iwWwez0u->69Yd|pk zzoA{xvjf+2KM~@=zY8gG?ckKXE_AYZLP8lAIk z>g2TNL3Rf2QuWIJ*Dd(MbPjA;i2JSB<4?a2SKAoxAey!jrAl9r#XS}0`H|$R51r%T zZt_af#e1w!Y}hJ|2{0|{Vnhy5%0RTP+ikLiu)nsygVD|yAl+V;ezMy6XGP21=#Bhl zL*N|Uz8fT99RL+q+Exv_DABn1tf)9fO{^uWLwzuNDoB*m?I2F`>`!`vU+q!^_&31l z*S8Fy*6=VmHF?oO#%|2s3;MlsUQ9L#0N0LCnx;m#2T`Lz(wx!PiG?!vuh=qhbm&{Z zz}?Qz&RNi%{^Apvn6p4Ch$`N?mE#rJ#<$Nu!wkqyDvlxOMD^Oz5W9jXPSpyDUldiz z0h_b0Zv!fW+x{#>J;bTve+5PN`{#k4lb&MO44^j~Gp(^tm)%}Ez)pOgUG!`={n&}t znI%`n*YLs{uuR|@?2~R7xsaTUKAeF?om?lEdE8z1pSs_aPT;?1bLDo;8DUaiSAW47 zu$23yjeK&uY3s1P+i->+WhCo)R}gJoDtD9BIW5uI}#%L{Vhgmt#;4){T0u$Ft)8B#AIE<%b7_PWK5Z^ z*PrOfJ*MZR+k28xpmSMNpz5WGuL5KAo7T@n`n0LboJ^fR{!HscdNY7E^b7H+>P)ao zmdc(p#a>6o3`Nv=mMS!J40mfbSvP|^eH)T-?)FF%Dts=g*&69iqAI7>gG3M+i|s?( zWQqawMbr<5?bFU7|3b4-p+xC#VK>QZ&>zngo&F8{>u<{R=i&iuWVR1a8Nia`_Ute? z&~n{XW^*TVB$~E=mjB3Y(*HJQG*H@F@%5`KhI5<;OouE-slr+zZEr9O>o7%QwX3Ds z)@fiJyaG{aV}N_KwjjUokLVxcJU8Sxpqpg@0-5F+CGPIt@rCgDPrNy?9nqKe@u4W+WlGe ziN3LLh97X{eU?q9B>)rlj!GGBGXEf7KeB=e5@gh$uCrYh@*EcM8?f#ihZjBn zjOW2nwe1q#Wh0bN=d<_6c{14?`M|cZpin$d^s!3YBk~Nm>GSfW?@Rz6O^0Q;cwB(~ z9QdWrM*>N;?8b~+!w#md0-)AFg)FBytllmK_C{}*@B1R9=%K>@W@PH$ZYrlx?L!JI zMI_)Na)rc-ljkE@ngJNBftySR0NE*}pWt@PPay3yHLiIqYc;fux7$Z$yYK4)^{EEw z3HVkMSoHkzZy?1Lk;#g8E0}{#$mW+gohHk)sW{zMXs3|!z2O_K5+u-PCMy#B4p;!C zN}8mR{PQIm#10M;j@r4LNb7t6!_S)J~G!0n#EPIbSW3Njhh4f&gv4GLfvJ5!6k_a-}TkKPTc{Z{Mgn>|!RGz#K&wWm9#F*{hnC2YG zSR=&V%GdkukJp-{|@?v8ym0stiT`%eX)G~aE^eV{b# z`*ZO;pmk;ILeGEouy_3q7`h?KgI(Jy?RtxWVt>fk9sEN|hK-bz3oIWGHec3>GM{S9 zO7UQ~y!>}mteSNJap0fz{&$_(8dhA>bg>nvpT}i8utx})tW)3_0$NVWCX^G2j->g3 z1$e0X&J#r90`Sy+dnpbPGm;vOwQU^5)WR3Rk&umTg^f!O;*;J@z*%W!`tadDS;@H? zM0R5X-yr~0ln%XCs*vgsjlF)C4g2K&S#BP(F)Q;d*Jx3S=i+z+f7~#Nb=0BaDo%#1 z#10{XO(KA2laPH^3B*C*X*vW*5ShRH-?({)2g9)PL6Pxa$CbYHJques_YLo|;J{l5 z_C`m`<)8n%8|%`0s9FP;Z5|Ke$xufHWo|Ycuf^ZZF<=D~vkI=xTv;;~BJA8FbQ->Q z*$(GYur7wF)g#&>zXv^&pa~7-`=0)S{@1rZG%bH55iOjCb%IZ!zu&Qjq-_a3Ij*cj zR3Vcgq*MHb{GPTA!^V*8(JVp%W`k$cz}|oIj`Ghc8pK(p@VDp8VI?xD^wA1PUzb(d z4fRfR-ZgHC#(P}Ix6W2)40$V=Gk^RqBS*i?lfOGX>+}-2s&)R#Xnps`b*QyZU-#Yz zL#K4>o?j_-N8a0DS9p%u9ivAN{%PX*0_7A8*uD1vldj%s^yy8KQhW{-doh#RVkhNN zYRDQolCoKuRWQ_ls)eosb=2al_$Bh)Z=UO6@3ZckcRp&fcAf+N@E59s>nE{inslFd zP61om`T}D@I#`LLb-vxmDYx{8H>AoLED3`9io3IEggoH6!J+kK-Fz7t_VRAk6$Xi}R*RS8Yb!|Hz` z7Bc50hu~qBt==kcOhWGH zEhn4Az*MOuxhQ*-%!q4rnPT^vK(b42-xi+vkyg?}=tqUn-|pT|HRODBP>)v-{v*tp zN&Qd?1LnrvjhAYiF_Rq;n{MyM)jr(JMcNG7lWyJoT^jI?!$ z^kCx~6Z-PuDwF1>OZVVE-|)m-gYtL=`1ez(Rjr)crHE~s61{%b*$Q_0Z|cLi{_E3~ zTZj6JI(l(eD6t0#yzTZ>X6)*Yd;Dj+<9EUo&nb11Lro7!+FtHs5y zQR>(|`MicfM(j$*z4cT&_Ygo^#p~5}!Bg(4l(%-E)I_dr1o0jMN?$)9I;>{a()+Q$ zjqZ4*sM613^M&UfNpTxZbRRkK=m+1ta`T*`rH$`|oE`;CFm{E1W+xQidf12cq*8Ff z#?ofI4G3sBm1bk;A*tcBuCn4c;QaGcjyN=o56QNM4Xv~8!Xckz`nx`jeCzWZt#1Q} z=H)=%FLF>wPn1*R**y5ALg+0)>U}nG@9Bx)I=YH7U{>4qRc4es7u@Vq75#F#bI5wr zBl}arxYIqY$9Hy8+-~OHY&q}yfXIHDo#XM09~UJ=Ph__wRF03oD(H;9C!E9AU-Iwa zYMam>G4;fEMk+VAbW?x5$~FS~MLePyw-OC29Dzjy`_{mAbK1YdRyQ8}s5=Wg$Wl5ZtZxopKlbEQ+976T zhVX;OeSypIeA{V5k{DQWSI&0|$sGx3H%@I`Mz0EJmgn04d%262Y8y7 z5JZ;d3lXblW5dA@*QIgeot|!@6SJ(Jq0V;@b>D`}BTi;=f?Q%S^{iXY5qP_7{C4Q+ zjE3Kt3iM2cut(V!c=5%y&A&qe(z-eaw{kx)0m&VehAx>uYN&th?pC?F@}{G;=Sx5Y zC_t{bEPQSYC zd89hj_#ZIrc+`68t~Qi1E2HrB-_rZW0139DM>Dr1K-1vc!NQvFOds?a*syA;PWcI2 z#ycE6A=)~i|59l{v;7A2JyMJE%|@9#62s4)rRQG|Y#zU3m%aHcJ$qd$m_t}hp~p0# zLj8d%XK};BpX$P5j2@xkaZ_UOjA%+u*$Firf2y>E;)a*q?}WveJW|334bufWRhcrM z8d}_6&yV_|(#}1H&3zvs5y$HwetwPEs`$9O{rw-J^34RyR{6A+4RL-IJ1*%ed z(n@bJa3K%ivJ}8ouv)H-AM0(amjE8vD$VtYySeXjfoq%ObVxTQ`@^ zusQ%*6L=7}0u4^#QXMco%t+UyRC$NanlWL#HO3Va?0m_NDCp|sf< zW{5H5S7QFIE4^NR3p)Hy!NZt*f$OoWwX~LPsiF1#aAQ=@>wH%7ZkgZynRww+C(OlW zs-AVNJQO?e58ZMSE802YL2GSb?TM-PfT$ZZ4{oIpp;fGg-=jRxZmVhWyZ=AG4ul_y zl@2Y!z^5qlZXl zWxHo;YrZiCp*f$R1_%XL0>Mul3ooVhmJAFcx;++Fe75Gtl}^;&%fVh|@+Q3$EW8g0 z>Ssb0O5}A_XUA=xtlSb_9?QJ@<-~*W*6jK7OO*FeSA4yyEk1GV0S)g)i)bsbT8{tf zpp}C`6*!s|LBSQ+Bon?fA0A0YJvyhx;xyd6p0$(&4$rPzr~-6ILlN9VfY!M?>D6!9 z-j26SeTu-JpdRmv7ZF}us~@(ftR~&%rjeS z&F1FTGd?C{)xIMl*-eKzccK#c#KBIePq~l(%<+)NPh`&d3L2YG&0If85o5*kcCF;& zgD*Dz$)`6-ghT$&KF8N!zjPe}?l@rnS9&2hn!L2kB`Bz0`9-4hw=DN`>+xjZVn<>j ztS+n1;XgcqjCzkJ-_F<%cO=ZlU&oUCA_a&F>bz0^+kO21P+Fz^A6^Tmq(zB^%V>Vq zKO#oBz(^|KPvVK5?C{1qO6p23cD}F&d*h5=DV8NDa20z6C$&ZYB`zv~?!M0|d~S03 z^Bmil2hBT7I$@571#&)Ct;k%{Kf4WX*ZCg3)di9h@()@nxI^iwVtW&~HdB=N<~MAc zxAT7PLnPLL0KOxQRdgDXO}KlDb+iLU7|~zdFAN@k!CM)gvo44&`K6*v6wqSiU1k4u z@giYOPk-HyDuJOU=8n-+95i~*2mBR}khkk8oFWnQH@Y}@huh9Nj$nQjYpX>!g9R8w zUW9jde8FmOL10QF&+ysrmG#D%@2JJZjlYcb_}ncBi!J())2W%B^O&*CtE1~?_!sc; zj{?TbS3rSHl4mv(WIRKvsYj9fsS;AQI1Jm%*kVDOP>~l^}u5fr6 zvu`F7zh(>xOmho3WKZ{39wLiEawa2*!04f4x56>bKo=UUPW16zWi|-)DLy_>JPWY# zun)A0??~cnmj}aiZZMQV7Y=9&puR$;Ng_#a zGD9C}tovAH;MPFfep+*|qX@qNMPff_`*Zypr637i4lDu};g^gc?e25s&jmrD!E{Dw zd3{m`XdBz*_H_**#0bj8j(l^V?(D~8UY18)O`(T=014~dJj-&wch(6S#FZs_iD{sPPOrnv+3@GM9M6#i@=WLyRN zr9uy0r6yk&+sqV`UF3t$*RK6vm4cmm literal 15622 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 F005$kao+#{ delta 17765 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 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 41c31b4333475b7f2e49c8168c207b8fc55fa272..d58d86f5c7774fa1e45e2b5d82fc330a4b24e6d3 100644 GIT binary patch delta 17724 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 literal 35491 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

  • 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 qfEU@1O}iM$xdycBeU diff --git a/version/dev/_images/sphx_glr_012_fatigue_example_thumb.png b/version/dev/_images/sphx_glr_012_fatigue_example_thumb.png index 429c35abf41ade291025810d4b8f2b5f34bd1108..00fe17143194164584792919fe8c188c4acc8699 100644 GIT binary patch literal 22359 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 L!Nm$KyQu#Gdz;Y? diff --git a/version/dev/_sources/examples/gallery_examples/001_failure_operator_example.rst.txt b/version/dev/_sources/examples/gallery_examples/001_failure_operator_example.rst.txt index f6d12ccdc..3df91f795 100644 --- a/version/dev/_sources/examples/gallery_examples/001_failure_operator_example.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/001_failure_operator_example.rst.txt @@ -290,7 +290,7 @@ Scope failure evaluation by plies. .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 16.804 seconds) + **Total running time of the script:** (0 minutes 19.408 seconds) .. _sphx_glr_download_examples_gallery_examples_001_failure_operator_example.py: diff --git a/version/dev/_sources/examples/gallery_examples/002_sampling_point_example.rst.txt b/version/dev/_sources/examples/gallery_examples/002_sampling_point_example.rst.txt index 4b5a4cda3..212689089 100644 --- a/version/dev/_sources/examples/gallery_examples/002_sampling_point_example.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/002_sampling_point_example.rst.txt @@ -349,7 +349,7 @@ You can change the element ID of the sampling point to generate another plot. .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 5.173 seconds) + **Total running time of the script:** (0 minutes 7.682 seconds) .. _sphx_glr_download_examples_gallery_examples_002_sampling_point_example.py: diff --git a/version/dev/_sources/examples/gallery_examples/003_short_fiber_example.rst.txt b/version/dev/_sources/examples/gallery_examples/003_short_fiber_example.rst.txt index 2ceacdd1e..5219ddacb 100644 --- a/version/dev/_sources/examples/gallery_examples/003_short_fiber_example.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/003_short_fiber_example.rst.txt @@ -306,7 +306,7 @@ Compute and plot the maximum failure value per element. .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 3.447 seconds) + **Total running time of the script:** (0 minutes 3.949 seconds) .. _sphx_glr_download_examples_gallery_examples_003_short_fiber_example.py: diff --git a/version/dev/_sources/examples/gallery_examples/004_get_material_properties_example.rst.txt b/version/dev/_sources/examples/gallery_examples/004_get_material_properties_example.rst.txt index 72256aed6..df7213c76 100644 --- a/version/dev/_sources/examples/gallery_examples/004_get_material_properties_example.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/004_get_material_properties_example.rst.txt @@ -212,7 +212,7 @@ Implement a custom failure criterion: basic max strain .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 3.095 seconds) + **Total running time of the script:** (0 minutes 4.845 seconds) .. _sphx_glr_download_examples_gallery_examples_004_get_material_properties_example.py: diff --git a/version/dev/_sources/examples/gallery_examples/005_get_layup_properties_example.rst.txt b/version/dev/_sources/examples/gallery_examples/005_get_layup_properties_example.rst.txt index 17046d0ad..f9cf96e3d 100644 --- a/version/dev/_sources/examples/gallery_examples/005_get_layup_properties_example.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/005_get_layup_properties_example.rst.txt @@ -168,7 +168,7 @@ Plot basic layer properties (layer thicknesses, angles, and analysis ply names). .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 1.335 seconds) + **Total running time of the script:** (0 minutes 1.638 seconds) .. _sphx_glr_download_examples_gallery_examples_005_get_layup_properties_example.py: diff --git a/version/dev/_sources/examples/gallery_examples/006_filter_composite_data_example.rst.txt b/version/dev/_sources/examples/gallery_examples/006_filter_composite_data_example.rst.txt index 418bd63ba..2a763ca78 100644 --- a/version/dev/_sources/examples/gallery_examples/006_filter_composite_data_example.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/006_filter_composite_data_example.rst.txt @@ -523,7 +523,7 @@ in the material direction in this ply. .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 4.630 seconds) + **Total running time of the script:** (0 minutes 4.640 seconds) .. _sphx_glr_download_examples_gallery_examples_006_filter_composite_data_example.py: diff --git a/version/dev/_sources/examples/gallery_examples/007_interlaminar_normal_stress_example.rst.txt b/version/dev/_sources/examples/gallery_examples/007_interlaminar_normal_stress_example.rst.txt index d3c8ed368..9a07b2a6c 100644 --- a/version/dev/_sources/examples/gallery_examples/007_interlaminar_normal_stress_example.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/007_interlaminar_normal_stress_example.rst.txt @@ -313,7 +313,7 @@ Plot s3 at the mid-plane of a certain ply. .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 7.224 seconds) + **Total running time of the script:** (0 minutes 7.872 seconds) .. _sphx_glr_download_examples_gallery_examples_007_interlaminar_normal_stress_example.py: diff --git a/version/dev/_sources/examples/gallery_examples/008_assembly_example.rst.txt b/version/dev/_sources/examples/gallery_examples/008_assembly_example.rst.txt index 2c7800588..ae3a078af 100644 --- a/version/dev/_sources/examples/gallery_examples/008_assembly_example.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/008_assembly_example.rst.txt @@ -262,7 +262,7 @@ For DPF Server versions 7.0 and later, element information can be retrieved dire .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 4.120 seconds) + **Total running time of the script:** (0 minutes 6.821 seconds) .. _sphx_glr_download_examples_gallery_examples_008_assembly_example.py: diff --git a/version/dev/_sources/examples/gallery_examples/009_short_fiber_orientation_tensor.rst.txt b/version/dev/_sources/examples/gallery_examples/009_short_fiber_orientation_tensor.rst.txt index c44e7ee79..49f70831f 100644 --- a/version/dev/_sources/examples/gallery_examples/009_short_fiber_orientation_tensor.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/009_short_fiber_orientation_tensor.rst.txt @@ -432,7 +432,7 @@ Plot some components of the fiber orientation tensor. .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 6.570 seconds) + **Total running time of the script:** (0 minutes 6.511 seconds) .. _sphx_glr_download_examples_gallery_examples_009_short_fiber_orientation_tensor.py: diff --git a/version/dev/_sources/examples/gallery_examples/010_harmonic_example.rst.txt b/version/dev/_sources/examples/gallery_examples/010_harmonic_example.rst.txt index 9a8d8f4e8..4b14392f7 100644 --- a/version/dev/_sources/examples/gallery_examples/010_harmonic_example.rst.txt +++ b/version/dev/_sources/examples/gallery_examples/010_harmonic_example.rst.txt @@ -434,7 +434,7 @@ at each frequency, because we look only at the element that has the highest IRF .. code-block:: none - [] + [] @@ -509,7 +509,7 @@ Compute critical layer and critical failure mode. .. rst-class:: sphx-glr-timing - **Total running time of the script:** (0 minutes 9.956 seconds) + **Total running time of the script:** (0 minutes 13.998 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 63ea4085c..fd9a09b99 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/dataProcessingTemp140168405186304/0f70eae7-a2a8-4b83-8cb6-ecccb8e2885d/shell.rst'], composite={}, engineering_data='/tmp/dataProcessingTemp140168405186304/17c09b9d-8708-44e5-9b8b-e5f85eaaf7cd/material.engd', files_are_local=False) + 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) @@ -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 6.371 seconds) + **Total running time of the script:** (0 minutes 8.430 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 da869595b..eed3830f6 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.8583491533255888e-08. + The highest damage value is 1.2211892196295381e-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 3.649 seconds) + **Total running time of the script:** (0 minutes 4.346 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 ac54088f9..e805f4396 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 4.245 seconds) + **Total running time of the script:** (0 minutes 5.676 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 6c73669c7..7a9d016bc 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 7.090 seconds) + **Total running time of the script:** (0 minutes 8.047 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 2ff48c317..19087dae0 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 4.863 seconds) + **Total running time of the script:** (0 minutes 6.789 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 c83c51321..48c9fd4d0 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:28.572** total execution time for 15 files **from examples/gallery_examples**: +**01:50.653** 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:16.804 + - 00:19.408 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_010_harmonic_example.py` (``010_harmonic_example.py``) - - 00:09.956 + - 00:13.998 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py` (``007_interlaminar_normal_stress_example.py``) - - 00:07.224 + * - :ref:`sphx_glr_examples_gallery_examples_011_rst_workflow.py` (``011_rst_workflow.py``) + - 00:08.430 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py` (``014_cyclic_symmetry_example.py``) - - 00:07.090 - - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py` (``009_short_fiber_orientation_tensor.py``) - - 00:06.570 + - 00:08.047 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_011_rst_workflow.py` (``011_rst_workflow.py``) - - 00:06.371 + * - :ref:`sphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py` (``007_interlaminar_normal_stress_example.py``) + - 00:07.872 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_002_sampling_point_example.py` (``002_sampling_point_example.py``) - - 00:05.173 + - 00:07.682 + - 0.0 + * - :ref:`sphx_glr_examples_gallery_examples_008_assembly_example.py` (``008_assembly_example.py``) + - 00:06.821 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py` (``099_dpf_composite_failure_workflow.py``) - - 00:04.863 + - 00:06.789 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_006_filter_composite_data_example.py` (``006_filter_composite_data_example.py``) - - 00:04.630 + * - :ref:`sphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py` (``009_short_fiber_orientation_tensor.py``) + - 00:06.511 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_013_thermal_example.py` (``013_thermal_example.py``) - - 00:04.245 + - 00:05.676 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_008_assembly_example.py` (``008_assembly_example.py``) - - 00:04.120 + * - :ref:`sphx_glr_examples_gallery_examples_004_get_material_properties_example.py` (``004_get_material_properties_example.py``) + - 00:04.845 + - 0.0 + * - :ref:`sphx_glr_examples_gallery_examples_006_filter_composite_data_example.py` (``006_filter_composite_data_example.py``) + - 00:04.640 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_012_fatigue_example.py` (``012_fatigue_example.py``) - - 00:03.649 + - 00:04.346 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_003_short_fiber_example.py` (``003_short_fiber_example.py``) - - 00:03.447 - - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_004_get_material_properties_example.py` (``004_get_material_properties_example.py``) - - 00:03.095 + - 00:03.949 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_005_get_layup_properties_example.py` (``005_get_layup_properties_example.py``) - - 00:01.335 + - 00:01.638 - 0.0 diff --git a/version/dev/_sources/sg_execution_times.rst.txt b/version/dev/_sources/sg_execution_times.rst.txt index c3637f1df..54e45aa6c 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:28.572** total execution time for 15 files **from all galleries**: +**01:50.653** 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:16.804 + - 00:19.408 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_010_harmonic_example.py` (``../../examples/010_harmonic_example.py``) - - 00:09.956 + - 00:13.998 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py` (``../../examples/007_interlaminar_normal_stress_example.py``) - - 00:07.224 + * - :ref:`sphx_glr_examples_gallery_examples_011_rst_workflow.py` (``../../examples/011_rst_workflow.py``) + - 00:08.430 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py` (``../../examples/014_cyclic_symmetry_example.py``) - - 00:07.090 - - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py` (``../../examples/009_short_fiber_orientation_tensor.py``) - - 00:06.570 + - 00:08.047 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_011_rst_workflow.py` (``../../examples/011_rst_workflow.py``) - - 00:06.371 + * - :ref:`sphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py` (``../../examples/007_interlaminar_normal_stress_example.py``) + - 00:07.872 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_002_sampling_point_example.py` (``../../examples/002_sampling_point_example.py``) - - 00:05.173 + - 00:07.682 + - 0.0 + * - :ref:`sphx_glr_examples_gallery_examples_008_assembly_example.py` (``../../examples/008_assembly_example.py``) + - 00:06.821 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py` (``../../examples/099_dpf_composite_failure_workflow.py``) - - 00:04.863 + - 00:06.789 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_006_filter_composite_data_example.py` (``../../examples/006_filter_composite_data_example.py``) - - 00:04.630 + * - :ref:`sphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py` (``../../examples/009_short_fiber_orientation_tensor.py``) + - 00:06.511 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_013_thermal_example.py` (``../../examples/013_thermal_example.py``) - - 00:04.245 + - 00:05.676 - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_008_assembly_example.py` (``../../examples/008_assembly_example.py``) - - 00:04.120 + * - :ref:`sphx_glr_examples_gallery_examples_004_get_material_properties_example.py` (``../../examples/004_get_material_properties_example.py``) + - 00:04.845 + - 0.0 + * - :ref:`sphx_glr_examples_gallery_examples_006_filter_composite_data_example.py` (``../../examples/006_filter_composite_data_example.py``) + - 00:04.640 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_012_fatigue_example.py` (``../../examples/012_fatigue_example.py``) - - 00:03.649 + - 00:04.346 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_003_short_fiber_example.py` (``../../examples/003_short_fiber_example.py``) - - 00:03.447 - - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_004_get_material_properties_example.py` (``../../examples/004_get_material_properties_example.py``) - - 00:03.095 + - 00:03.949 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_005_get_layup_properties_example.py` (``../../examples/005_get_layup_properties_example.py``) - - 00:01.335 + - 00:01.638 - 0.0 diff --git a/version/dev/_static/search.json b/version/dev/_static/search.json index c77e06dfe..b073cbf8e 100644 --- a/version/dev/_static/search.json +++ b/version/dev/_static/search.json @@ -1,626 +1,507 @@ [ { - "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.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.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.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.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.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.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.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_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.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.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.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.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": "examples/gallery_examples/sg_execution_times", - "href": "examples/gallery_examples/sg_execution_times.html#computation-times", - "title": "Computation times", - "section": "Computation times", - "text": "01:28.572 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:16.804\n0.0\nsphx_glr_examples_gallery_examples_010_harmonic_example.py (010_harmonic_example.py)\n00:09.956\n0.0\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py (007_interlaminar_normal_stress_example.py)\n00:07.224\n0.0\nsphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py (014_cyclic_symmetry_example.py)\n00:07.090\n0.0\nsphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py (009_short_fiber_orientation_tensor.py)\n00:06.570\n0.0\nsphx_glr_examples_gallery_examples_011_rst_workflow.py (011_rst_workflow.py)\n00:06.371\n0.0\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py (002_sampling_point_example.py)\n00:05.173\n0.0\nsphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py (099_dpf_composite_failure_workflow.py)\n00:04.863\n0.0\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py (006_filter_composite_data_example.py)\n00:04.630\n0.0\nsphx_glr_examples_gallery_examples_013_thermal_example.py (013_thermal_example.py)\n00:04.245\n0.0\nsphx_glr_examples_gallery_examples_008_assembly_example.py (008_assembly_example.py)\n00:04.120\n0.0\nsphx_glr_examples_gallery_examples_012_fatigue_example.py (012_fatigue_example.py)\n00:03.649\n0.0\nsphx_glr_examples_gallery_examples_003_short_fiber_example.py (003_short_fiber_example.py)\n00:03.447\n0.0\nsphx_glr_examples_gallery_examples_004_get_material_properties_example.py (004_get_material_properties_example.py)\n00:03.095\n0.0\nsphx_glr_examples_gallery_examples_005_get_layup_properties_example.py (005_get_layup_properties_example.py)\n00:01.335\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\n099_dpf_composite_failure_workflow.py\n006_filter_composite_data_example.py\n013_thermal_example.py\n008_assembly_example.py\n012_fatigue_example.py\n003_short_fiber_example.py\n004_get_material_properties_example.py\n005_get_layup_properties_example.py" - }, - { - "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.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.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.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.MaxStrainCriterion.eYt", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYt.html#eyt", + "title": "eYt", + "section": "eYt", + "text": "Global tensile strain limit in material direction 2.\nfloat\neYt\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hf.html#hf", - "title": "hf", - "section": "hf", - "text": "hf" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYt", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYt.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYt", + "title": "eYt > eYt > eYt", + "section": "eYt > eYt", + "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.FailureModeEnum.hf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hf.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.hf", - "title": "hf > hf > hf", - "section": "hf > hf", - "text": "FailureModeEnum.hf = 601\n\n" + "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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/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.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.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.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.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.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.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.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.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.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.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.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.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.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", + "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.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", + "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.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.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.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.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": "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.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": "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.095 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_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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.emax", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax.html#emax", + "title": "emax", + "section": "emax", + "text": "emax" }, { - "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.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": "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.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": "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.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": "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": "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": "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 4.245 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": "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.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": "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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", @@ -637,1474 +518,1425 @@ "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.failure_criteria.CoreFailureCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.active.html#active", + "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.failure_criteria.CoreFailureCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.active.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.active", + "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 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.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.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" + "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.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": "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.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": "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.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": "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.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/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.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": "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.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": "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.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": "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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_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.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_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.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.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.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.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.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/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.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.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.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.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.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.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.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.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.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": "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.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": "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.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": "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.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": "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.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": "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.335 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.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.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": "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.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": "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.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": "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.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": "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.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": "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.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": "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.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": "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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_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/_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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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#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.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": "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.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": "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.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": "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.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": "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.failure_criteria.FailureModeEnum.s23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s23.html#s23", + "title": "s23", + "section": "s23", + "text": "s23" }, { - "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.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": "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.447 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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.constants.Spot.MIDDLE", + "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.MIDDLE.html#middle", + "title": "MIDDLE", + "section": "MIDDLE", + "text": "MIDDLE" }, { - "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.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": "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.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/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.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": "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/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": "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.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": "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.863 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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.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": "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.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": "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.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": "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.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": "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.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": "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.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": "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.570 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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.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": "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.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": "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.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": "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.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-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#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": "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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/_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.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.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.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.FaceSheetWrinklingCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name.html#name", + "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 failure criterion. Read only.\nstr\nname\nstr" + "text": "Name of the combined failure criterion.\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", + "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 FaceSheetWrinklingCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "text": "property CombinedFailureCriterion.name: str\n\nName of the combined failure criterion.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "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": "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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/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": "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.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.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.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.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.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.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.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.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.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.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.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/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.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": "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.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": "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.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": "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 16.804 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.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.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.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.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.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.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.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.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.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.failure_criteria.LaRCCriterion.wf_lmc", @@ -2121,473 +1953,508 @@ "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.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": "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.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": "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.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": "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/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": "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.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.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.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.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.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.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.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.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.HashinCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.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.\nint\ndim\nint" }, { - "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.failure_criteria.HashinCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.dim.html#ansys.dpf.composites.failure_criteria.HashinCriterion.dim", + "title": "dim > dim > dim", + "section": "dim > dim", + "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": "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.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": "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.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": "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.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": "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.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": "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.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": "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.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": "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 3.649 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.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.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.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.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_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.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.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.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/failure_criteria", + "href": "api/failure_criteria.html#failure-criteria", + "title": "Failure criteria", + "section": "Failure criteria", + "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": "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.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": "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.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": "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.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": "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 9.956 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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.FailureModeEnum.s13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s13.html#s13", - "title": "s13", - "section": "s13", - "text": "s13" + "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.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.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.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.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.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.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.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.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.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.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.TsaiHillCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.name.html#name", + "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.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.TsaiHillCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.name.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.name", + "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 TsaiHillCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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/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.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.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.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.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.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.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.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.FailureModeEnum.pmA", @@ -2604,438 +2471,445 @@ "text": "FailureModeEnum.pmA = 802\n\n" }, { - "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.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.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.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.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": "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.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/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.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": "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.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": "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.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": "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.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": "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.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": "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.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.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": "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.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": "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.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": "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.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.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.sampling_point.SamplingPoint.e3", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e3.html#e3", - "title": "e3", - "section": "e3", - "text": "Strains in the material 3 direction of each ply.\nndarray[Any, dtype[float64]]\ne3\nndarray\nAny\ndtype\nfloat64" + "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.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.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.sampling_point.SamplingPoint.e3", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e3.html#ansys.dpf.composites.sampling_point.SamplingPoint.e3", - "title": "e3 > e3 > e3", - "section": "e3 > e3", - "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.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": "examples/gallery_examples/006_filter_composite_data_example", - "href": "examples/gallery_examples/006_filter_composite_data_example.html#filter-result-data-by-different-criteria", - "title": "Filter result data by different criteria", - "section": "Filter result data by different criteria", - "text": "This example shows how data filtering can be used for custom postprocessing of\nlayered composites. You can filter strains and stresses by material, layer, or\nanalysis ply. Filtering by analysis ply is implemented on the server side and\nexposed with the get_ply_wise_data() function. In this case, the data is\nfiltered (and reduced) on the server side and only the resulting field is returned\nto the client. This is the recommended way to filter data if possible.\nFor more complex filtering, the data is transferred to the client side and filtered\nusing numpy functionality.\nThe examples show filtering data by layer, spot, and node, as well as material\nor analysis ply ID. To learn more about how layered result data is organized,\nsee select_indices.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nFilter result data by different criteria\nget_ply_wise_data()\ncomposite_files_from_workbench_harmonic_analysis()" + "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": "examples/gallery_examples/006_filter_composite_data_example", - "href": "examples/gallery_examples/006_filter_composite_data_example.html#set-up-analysis", - "title": "Filter result data by different criteria > 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_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": "examples/gallery_examples/006_filter_composite_data_example", - "href": "examples/gallery_examples/006_filter_composite_data_example.html#set-up-model", - "title": "Filter result data by different criteria > 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_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": "examples/gallery_examples/006_filter_composite_data_example", - "href": "examples/gallery_examples/006_filter_composite_data_example.html#get-result-data", - "title": "Filter result data by different criteria > Get result data", - "section": "Get result data", - "text": "Get the stress field. By default, the stress operator returns the stresses in global coordinates.\nTo get the stresses in the material coordinate system, the bool_rotate_to_global\ninput is set to False.\nGet result data\nbool_rotate_to_global\nFalse" + "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": "examples/gallery_examples/006_filter_composite_data_example", - "href": "examples/gallery_examples/006_filter_composite_data_example.html#filter-data-by-analysis-ply", - "title": "Filter result data by different criteria > Filter data by analysis ply", - "section": "Filter data by analysis ply", - "text": "List all available analysis plies.\nThe easiest way to filter data by analysis ply is to use the get_ply_wise_data() function.\nThis function supports different reduction strategies such as computing the average,\nmaximum, or minimum over the spot locations.\nIt also supports selecting a specific spot (TOP, MID, BOT) directly.\nThis example selects the maximum value over all spots for each node and then requests\nthe elemental location, which implies averaging over all nodes in an element.\nUsing the get_ply_wise_data() function has the advantage that all the averaging\nand filtering is done on the server side.\nThe results can also be requested in global coordinates. This example gets the stress values in\nthe global coordinate system, selects the top spot of a selected ply, and averages the values\nover neighbouring nodes to get nodal results.\nFilter data by analysis ply\nget_ply_wise_data()\nget_ply_wise_data()" + "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": "examples/gallery_examples/006_filter_composite_data_example", - "href": "examples/gallery_examples/006_filter_composite_data_example.html#generic-client-side-filtering", - "title": "Filter result data by different criteria > Generic client-side filtering", - "section": "Generic client-side filtering", - "text": "This example shows how to filter data by layer, spot, and node using the generic filtering on\nthe client side.\nThis code plots stress values in the material direction for the first node and top spot.\nGet element information for all elements and show the first one as an example.\nGet filtered data\nGeneric client-side filtering" + "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": "examples/gallery_examples/006_filter_composite_data_example", - "href": "examples/gallery_examples/006_filter_composite_data_example.html#filter-by-material", - "title": "Filter result data by different criteria > Filter by material", - "section": "Filter by material", - "text": "Loop over all elements and get the maximum stress in the material direction\nfor all plies that have a specific UD material.\nFilter by material" + "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": "examples/gallery_examples/006_filter_composite_data_example", - "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.630 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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.result_definition.FailureMeasureEnum.endswith", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.endswith.html#endswith", + "title": "endswith", + "section": "endswith", + "text": "Return True if the string ends with the specified suffix, 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.\nendswith" }, { - "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.result_definition.FailureMeasureEnum.endswith", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.endswith.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.endswith", + "title": "endswith > endswith > endswith", + "section": "endswith > endswith", + "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.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.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.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.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.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.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.failure_criteria.CuntzeCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_json.html#to_json", + "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.CuntzeCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_json.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_json", + "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": "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.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.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 !!" + "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.data_sources.ShortFiberCompositesFiles.files_are_local", @@ -3052,515 +2926,480 @@ "text": "ShortFiberCompositesFiles.files_are_local: bool = True\n\n" }, { - "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.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.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.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.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.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.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.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.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.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": "examples/gallery_examples/014_cyclic_symmetry_example", + "href": "examples/gallery_examples/014_cyclic_symmetry_example.html#cyclic-symmetry", + "title": "Cyclic symmetry", + "section": "Cyclic symmetry", + "text": "This example shows how to postprocess a cyclic symmetry analysis.\nThe initial (original) sector can be postprocessed with the same tools\nas a standard analysis. The postprocessing workflow is demonstrated by\nrunning a failure analysis, extracting ply-wise stresses, and implementing\na custom failure criterion.\nThe postprocessing of expanded sectors is not yet supported.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nCyclic symmetry\ncomposite_files_from_workbench_harmonic_analysis()" }, { - "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": "examples/gallery_examples/014_cyclic_symmetry_example", + "href": "examples/gallery_examples/014_cyclic_symmetry_example.html#set-up-analysis", + "title": "Cyclic symmetry > 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 helper functions.\nStart a DPF server and copy the example files into the current working directory.\nCreate a composite model.\nEvaluate a combined failure criterion.\nPlot the failure results.\nSet up analysis" }, { - "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": "examples/gallery_examples/014_cyclic_symmetry_example", + "href": "examples/gallery_examples/014_cyclic_symmetry_example.html#plot-ply-wise-stresses", + "title": "Cyclic symmetry > Plot ply-wise stresses", + "section": "Plot ply-wise stresses", + "text": "All functions in PyDPF Composites can be used to\npostprocess the initial (original) sector.\nPlot ply-wise stresses" }, { - "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": "examples/gallery_examples/014_cyclic_symmetry_example", + "href": "examples/gallery_examples/014_cyclic_symmetry_example.html#custom-failure-criterion", + "title": "Cyclic symmetry > Custom failure criterion", + "section": "Custom failure criterion", + "text": "The following code block shows how to implement a custom failure criterion.\nIt computes the inverse reserve factor for each element with respect to\nfiber failure. The criterion distinguishes between tension and compression.\nCustom failure criterion" }, { - "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": "examples/gallery_examples/014_cyclic_symmetry_example", + "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" }, - { - "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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_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.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.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.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.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.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.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.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.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.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.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.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.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.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/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.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": "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.failure_criteria.FailureModeEnum.e23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e23.html#e23", - "title": "e23", - "section": "e23", - "text": "e23" + "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.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": "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.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": "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.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.failure_criteria.FailureModeEnum.lmc5", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc5.html#lmc5", + "title": "lmc5", + "section": "lmc5", + "text": "lmc5" }, { - "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.lmc5", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc5.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc5", + "title": "lmc5 > lmc5 > lmc5", + "section": "lmc5 > lmc5", + "text": "FailureModeEnum.lmc5 = 906\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/_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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.e1t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e1t.html#e1t", + "title": "e1t", + "section": "e1t", + "text": "e1t" }, { - "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.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": "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.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": "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.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": "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.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": "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.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": "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 6.371 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.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.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.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.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.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": "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.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": "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.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": "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.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": "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.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": "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.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": "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.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": "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 4.120 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.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.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.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.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.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.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.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.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.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.s", @@ -3577,74 +3416,18 @@ "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.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.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.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.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.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.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.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.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.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.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.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.result_definition.FailureMeasureEnum.isdecimal", @@ -3661,480 +3444,480 @@ "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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_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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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/_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.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.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.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.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.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.ShearCrimpingCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_json.html#to_json", + "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.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", + "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": "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 !!" + "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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_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.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_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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.composite_model.CompositeModel.get_all_layered_element_ids", @@ -4151,375 +3934,445 @@ "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.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.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.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.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.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.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.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.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.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": "contribute", + "href": "contribute.html#contribute", + "title": "Contribute", + "section": "Contribute", + "text": "Contribute" }, { - "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": "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.FailureModeEnum.pmC", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmC.html#pmc", - "title": "pmC", - "section": "pmC", - "text": "pmC" + "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.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": "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.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": "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.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.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.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", + "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.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.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": "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.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.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.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.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/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.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/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.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": "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.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": "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.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": "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.173 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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.HashinCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.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.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.HashinCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.HashinCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.MaxStrainCriterion.e1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e1.html#e1", + "title": "e1", + "section": "e1", + "text": "Activates the failure evaluation regarding the strain in the material 1 direction.\nbool\ne1\nbool" }, { - "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.MaxStrainCriterion.e1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e1.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e1", + "title": "e1 > e1 > e1", + "section": "e1 > e1", + "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/_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/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.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/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.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/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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id", @@ -4536,1446 +4389,1537 @@ "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.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.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.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.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.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.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.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.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.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": "intro", + "href": "intro.html#getting-started", + "title": "Getting started", + "section": "Getting started", + "text": "Getting started" + }, + { + "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": "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.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": "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.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": "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.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": "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.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": "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.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": "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.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": "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.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": "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.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": "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.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": "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.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.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.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.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": "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.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": "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.failure_criteria.FailureModeEnum.hm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hm.html#hm", - "title": "hm", - "section": "hm", - "text": "hm" + "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.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": "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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", + "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.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.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.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.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.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.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.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.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.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.FailureModeEnum.hf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hf.html#hf", + "title": "hf", + "section": "hf", + "text": "hf" }, { - "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.FailureModeEnum.hf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hf.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.hf", + "title": "hf > hf > hf", + "section": "hf > hf", + "text": "FailureModeEnum.hf = 601\n\n" }, { - "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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_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.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_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.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.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.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.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.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/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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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/_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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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/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.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.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/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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.result_definition.FailureMeasureEnum.endswith", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.endswith.html#endswith", - "title": "endswith", - "section": "endswith", - "text": "Return True if the string ends with the specified suffix, 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.\nendswith" + "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.result_definition.FailureMeasureEnum.endswith", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.endswith.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.endswith", - "title": "endswith > endswith > endswith", - "section": "endswith > endswith", - "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.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.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.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.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.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/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.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/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.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/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.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.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.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.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.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.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.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.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/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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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/_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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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/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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.sampling_point.SamplingPoint.e3", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e3.html#e3", + "title": "e3", + "section": "e3", + "text": "Strains in the material 3 direction of each ply.\nndarray[Any, dtype[float64]]\ne3\nndarray\nAny\ndtype\nfloat64" }, { - "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.sampling_point.SamplingPoint.e3", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e3.html#ansys.dpf.composites.sampling_point.SamplingPoint.e3", + "title": "e3 > e3 > e3", + "section": "e3 > e3", + "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.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.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.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.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.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.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.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.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.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_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.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_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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1", @@ -5992,396 +5936,368 @@ "text": "MaterialProperty.Engineering_Constants_E1: str = 'young_modulus_x_direction'\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#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.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.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.failure_criteria.LaRCCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.dim.html#dim", - "title": "dim", - "section": "dim", - "text": "Whether the 2D or 3D formulation of the criterion is used. 2D is equivalent to LaRC03, and 3D is equivalent to LaRC04.\nint\ndim\nint" + "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.LaRCCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.dim.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.dim", - "title": "dim > dim > dim", - "section": "dim > dim", - "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.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.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.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.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": "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.MaxStrainCriterion.e1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e1.html#e1", - "title": "e1", - "section": "e1", - "text": "Activates the failure evaluation regarding the strain in the material 1 direction.\nbool\ne1\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.MaxStrainCriterion.e1", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e1.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e1", - "title": "e1 > e1 > e1", - "section": "e1 > e1", - "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/_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.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.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.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.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.result_definition.ResultDefinition.to_json", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_json.html#to_json", + "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": "Convert the dictionary representation of the result definition to a JSON dictionary.\nstr\nto_json\nstr" + "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.ResultDefinition.to_json", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.to_json.html#ansys.dpf.composites.result_definition.ResultDefinition.to_json", + "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": "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.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.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.failure_criteria.FailureModeEnum.hd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hd.html#hd", - "title": "hd", - "section": "hd", - "text": "hd" + "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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_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.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.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.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.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.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.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.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_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.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.FailureModeEnum.smax", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.smax.html#smax", + "title": "smax", + "section": "smax", + "text": "smax" }, { - "objectID": "intro", - "href": "intro.html#getting-started", - "title": "Getting started", - "section": "Getting started", - "text": "Getting started" + "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#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.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": "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.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": "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.FailureModeEnum.e3c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3c.html#e3c", + "title": "e3c", + "section": "e3c", + "text": "e3c" }, { - "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.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": "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/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.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.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.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.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.layup_info.LayupModelContextType.RST", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.RST.html#rst", - "title": "RST", - "section": "RST", - "text": "RST" + "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.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": "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.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.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.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.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.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.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.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/_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.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.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.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.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.CuntzeCriterion.fracture_plane_angle", @@ -6398,2236 +6314,2320 @@ "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.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.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.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.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.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.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.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.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.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": "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.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": "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.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.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.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.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.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#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#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.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/failure_criteria", - "href": "api/failure_criteria.html#failure-criteria", - "title": "Failure criteria", - "section": "Failure criteria", - "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.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.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.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.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.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": "contribute", - "href": "contribute.html#contribute", - "title": "Contribute", - "section": "Contribute", - "text": "Contribute" + "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": "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.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": "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.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": "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.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": "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.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.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.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": "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.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": "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.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": "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.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": "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.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": "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.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": "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.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/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#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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "examples/gallery_examples/006_filter_composite_data_example", + "href": "examples/gallery_examples/006_filter_composite_data_example.html#filter-result-data-by-different-criteria", + "title": "Filter result data by different criteria", + "section": "Filter result data by different criteria", + "text": "This example shows how data filtering can be used for custom postprocessing of\nlayered composites. You can filter strains and stresses by material, layer, or\nanalysis ply. Filtering by analysis ply is implemented on the server side and\nexposed with the get_ply_wise_data() function. In this case, the data is\nfiltered (and reduced) on the server side and only the resulting field is returned\nto the client. This is the recommended way to filter data if possible.\nFor more complex filtering, the data is transferred to the client side and filtered\nusing numpy functionality.\nThe examples show filtering data by layer, spot, and node, as well as material\nor analysis ply ID. To learn more about how layered result data is organized,\nsee select_indices.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nFilter result data by different criteria\nget_ply_wise_data()\ncomposite_files_from_workbench_harmonic_analysis()" }, { - "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": "examples/gallery_examples/006_filter_composite_data_example", + "href": "examples/gallery_examples/006_filter_composite_data_example.html#set-up-analysis", + "title": "Filter result data by different criteria > 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.failure_criteria.FailureModeEnum.lmc5", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc5.html#lmc5", - "title": "lmc5", - "section": "lmc5", - "text": "lmc5" + "objectID": "examples/gallery_examples/006_filter_composite_data_example", + "href": "examples/gallery_examples/006_filter_composite_data_example.html#set-up-model", + "title": "Filter result data by different criteria > 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.lmc5", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc5.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lmc5", - "title": "lmc5 > lmc5 > lmc5", - "section": "lmc5 > lmc5", - "text": "FailureModeEnum.lmc5 = 906\n\n" + "objectID": "examples/gallery_examples/006_filter_composite_data_example", + "href": "examples/gallery_examples/006_filter_composite_data_example.html#get-result-data", + "title": "Filter result data by different criteria > Get result data", + "section": "Get result data", + "text": "Get the stress field. By default, the stress operator returns the stresses in global coordinates.\nTo get the stresses in the material coordinate system, the bool_rotate_to_global\ninput is set to False.\nGet result data\nbool_rotate_to_global\nFalse" }, { - "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": "examples/gallery_examples/006_filter_composite_data_example", + "href": "examples/gallery_examples/006_filter_composite_data_example.html#filter-data-by-analysis-ply", + "title": "Filter result data by different criteria > Filter data by analysis ply", + "section": "Filter data by analysis ply", + "text": "List all available analysis plies.\nThe easiest way to filter data by analysis ply is to use the get_ply_wise_data() function.\nThis function supports different reduction strategies such as computing the average,\nmaximum, or minimum over the spot locations.\nIt also supports selecting a specific spot (TOP, MID, BOT) directly.\nThis example selects the maximum value over all spots for each node and then requests\nthe elemental location, which implies averaging over all nodes in an element.\nUsing the get_ply_wise_data() function has the advantage that all the averaging\nand filtering is done on the server side.\nThe results can also be requested in global coordinates. This example gets the stress values in\nthe global coordinate system, selects the top spot of a selected ply, and averages the values\nover neighbouring nodes to get nodal results.\nFilter data by analysis ply\nget_ply_wise_data()\nget_ply_wise_data()" }, { - "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": "examples/gallery_examples/006_filter_composite_data_example", + "href": "examples/gallery_examples/006_filter_composite_data_example.html#generic-client-side-filtering", + "title": "Filter result data by different criteria > Generic client-side filtering", + "section": "Generic client-side filtering", + "text": "This example shows how to filter data by layer, spot, and node using the generic filtering on\nthe client side.\nThis code plots stress values in the material direction for the first node and top spot.\nGet element information for all elements and show the first one as an example.\nGet filtered data\nGeneric client-side filtering" }, { - "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": "examples/gallery_examples/006_filter_composite_data_example", + "href": "examples/gallery_examples/006_filter_composite_data_example.html#filter-by-material", + "title": "Filter result data by different criteria > Filter by material", + "section": "Filter by material", + "text": "Loop over all elements and get the maximum stress in the material direction\nfor all plies that have a specific UD material.\nFilter by material" }, { - "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": "examples/gallery_examples/006_filter_composite_data_example", + "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" }, { - "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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_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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.failure_criteria.HashinCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.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.\nint\ndim\nint" + "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.failure_criteria.HashinCriterion.dim", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.dim.html#ansys.dpf.composites.failure_criteria.HashinCriterion.dim", - "title": "dim > dim > dim", - "section": "dim > dim", - "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.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": "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.failure_criteria.FailureModeEnum.s2c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2c.html#s2c", - "title": "s2c", - "section": "s2c", - "text": "s2c" + "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.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": "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.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": "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.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/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.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.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.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.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.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#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.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.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/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.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", - "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.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", - "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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/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.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.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.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.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.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.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.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.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.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": "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.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": "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.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": "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "examples/gallery_examples/014_cyclic_symmetry_example", - "href": "examples/gallery_examples/014_cyclic_symmetry_example.html#cyclic-symmetry", - "title": "Cyclic symmetry", - "section": "Cyclic symmetry", - "text": "This example shows how to postprocess a cyclic symmetry analysis.\nThe initial (original) sector can be postprocessed with the same tools\nas a standard analysis. The postprocessing workflow is demonstrated by\nrunning a failure analysis, extracting ply-wise stresses, and implementing\na custom failure criterion.\nThe postprocessing of expanded sectors is not yet supported.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nCyclic symmetry\ncomposite_files_from_workbench_harmonic_analysis()" + "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": "examples/gallery_examples/014_cyclic_symmetry_example", - "href": "examples/gallery_examples/014_cyclic_symmetry_example.html#set-up-analysis", - "title": "Cyclic symmetry > 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 helper functions.\nStart a DPF server and copy the example files into the current working directory.\nCreate a composite model.\nEvaluate a combined failure criterion.\nPlot the failure results.\nSet up analysis" + "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": "examples/gallery_examples/014_cyclic_symmetry_example", - "href": "examples/gallery_examples/014_cyclic_symmetry_example.html#plot-ply-wise-stresses", - "title": "Cyclic symmetry > Plot ply-wise stresses", - "section": "Plot ply-wise stresses", - "text": "All functions in PyDPF Composites can be used to\npostprocess the initial (original) sector.\nPlot ply-wise stresses" + "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": "examples/gallery_examples/014_cyclic_symmetry_example", - "href": "examples/gallery_examples/014_cyclic_symmetry_example.html#custom-failure-criterion", - "title": "Cyclic symmetry > Custom failure criterion", - "section": "Custom failure criterion", - "text": "The following code block shows how to implement a custom failure criterion.\nIt computes the inverse reserve factor for each element with respect to\nfiber failure. The criterion distinguishes between tension and compression.\nCustom failure criterion" + "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/014_cyclic_symmetry_example", - "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 7.090 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.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/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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "sg_execution_times", - "href": "sg_execution_times.html#computation-times", + "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:28.572 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:16.804\n0.0\nsphx_glr_examples_gallery_examples_010_harmonic_example.py (../../examples/010_harmonic_example.py)\n00:09.956\n0.0\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py (../../examples/007_interlaminar_normal_stress_example.py)\n00:07.224\n0.0\nsphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py (../../examples/014_cyclic_symmetry_example.py)\n00:07.090\n0.0\nsphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py (../../examples/009_short_fiber_orientation_tensor.py)\n00:06.570\n0.0\nsphx_glr_examples_gallery_examples_011_rst_workflow.py (../../examples/011_rst_workflow.py)\n00:06.371\n0.0\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py (../../examples/002_sampling_point_example.py)\n00:05.173\n0.0\nsphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py (../../examples/099_dpf_composite_failure_workflow.py)\n00:04.863\n0.0\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py (../../examples/006_filter_composite_data_example.py)\n00:04.630\n0.0\nsphx_glr_examples_gallery_examples_013_thermal_example.py (../../examples/013_thermal_example.py)\n00:04.245\n0.0\nsphx_glr_examples_gallery_examples_008_assembly_example.py (../../examples/008_assembly_example.py)\n00:04.120\n0.0\nsphx_glr_examples_gallery_examples_012_fatigue_example.py (../../examples/012_fatigue_example.py)\n00:03.649\n0.0\nsphx_glr_examples_gallery_examples_003_short_fiber_example.py (../../examples/003_short_fiber_example.py)\n00:03.447\n0.0\nsphx_glr_examples_gallery_examples_004_get_material_properties_example.py (../../examples/004_get_material_properties_example.py)\n00:03.095\n0.0\nsphx_glr_examples_gallery_examples_005_get_layup_properties_example.py (../../examples/005_get_layup_properties_example.py)\n00:01.335\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/099_dpf_composite_failure_workflow.py\n../../examples/006_filter_composite_data_example.py\n../../examples/013_thermal_example.py\n../../examples/008_assembly_example.py\n../../examples/012_fatigue_example.py\n../../examples/003_short_fiber_example.py\n../../examples/004_get_material_properties_example.py\n../../examples/005_get_layup_properties_example.py" + "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.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.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.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.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.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.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.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.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.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.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.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/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.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.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.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.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.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.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.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.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.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.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.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.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.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/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.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": "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.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": "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.sampling_point.FailureResult.mode", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.mode.html#mode", + "title": "mode", + "section": "mode", + "text": "mode" }, { - "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.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": "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.ho", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ho.html#ho", + "title": "ho", + "section": "ho", + "text": "ho" }, { - "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.224 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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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#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#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.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.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.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.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.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.LayupModelContextType.RST", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.RST.html#rst", + "title": "RST", + "section": "RST", + "text": "RST" }, { - "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.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": "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.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.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.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.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.failure_criteria.LaRCCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.dim.html#dim", + "title": "dim", + "section": "dim", + "text": "Whether the 2D or 3D formulation of the criterion is used. 2D is equivalent to LaRC03, and 3D is equivalent to LaRC04.\nint\ndim\nint" }, { - "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.LaRCCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.dim.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.dim", + "title": "dim > dim > dim", + "section": "dim > dim", + "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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/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.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.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.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.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.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.failure_criteria.HashinCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.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.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.HashinCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.HashinCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.failure_criteria.MaxStrainCriterion.eYt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYt.html#eyt", - "title": "eYt", - "section": "eYt", - "text": "Global tensile strain limit in material direction 2.\nfloat\neYt\nfloat" + "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.MaxStrainCriterion.eYt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYt.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYt", - "title": "eYt > eYt > eYt", - "section": "eYt > eYt", - "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.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.failure_criteria.FailureModeEnum.s3t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3t.html#s3t", - "title": "s3t", - "section": "s3t", - "text": "s3t" + "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.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.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.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": "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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.failure_criteria.FailureModeEnum.cmB", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmB.html#cmb", - "title": "cmB", - "section": "cmB", - "text": "cmB" + "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.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": "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.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": "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.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": "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.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": "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.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.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.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.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.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.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.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" } ] \ No newline at end of file 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 b6617cb3e..f6b79e8a4 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 16.804 seconds)

    +

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

    -Stresses, Failures

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

    +Stresses, Failures

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