From 1172427b65b08eab13cb9a2aa983953dba977f17 Mon Sep 17 00:00:00 2001 From: janvonrickenbach Date: Wed, 22 Jan 2025 00:57:53 +0000 Subject: [PATCH] DOC: update development documentation b66fc14de4fa6cf3c649672056cf08c1aeeedbaa --- .../011_rst_workflow.zip | Bin 13268 -> 13268 bytes .../014_cyclic_symmetry_example.zip | Bin 15882 -> 15882 bytes .../005_get_layup_properties_example.zip | Bin 8717 -> 8717 bytes .../010_harmonic_example.zip | Bin 25218 -> 25218 bytes .../099_dpf_composite_failure_workflow.zip | Bin 19517 -> 19517 bytes .../001_failure_operator_example.zip | Bin 10618 -> 10618 bytes .../006_filter_composite_data_example.zip | Bin 22607 -> 22607 bytes .../012_fatigue_example.zip | Bin 16370 -> 16370 bytes ...007_interlaminar_normal_stress_example.zip | Bin 15144 -> 15144 bytes .../004_get_material_properties_example.zip | Bin 10494 -> 10494 bytes .../013_thermal_example.zip | Bin 11139 -> 11139 bytes .../008_assembly_example.zip | Bin 10587 -> 10587 bytes .../009_short_fiber_orientation_tensor.zip | Bin 14119 -> 14119 bytes .../003_short_fiber_example.zip | Bin 11602 -> 11602 bytes .../002_sampling_point_example.zip | Bin 14180 -> 14180 bytes ...glr_001_failure_operator_example_001.vtksz | Bin 3746 -> 3745 bytes ...glr_001_failure_operator_example_002.vtksz | Bin 3742 -> 3737 bytes ...glr_001_failure_operator_example_003.vtksz | Bin 3737 -> 3734 bytes ...sphx_glr_003_short_fiber_example_001.vtksz | Bin 23533 -> 23530 bytes ...sphx_glr_003_short_fiber_example_002.vtksz | Bin 23368 -> 23370 bytes ...sphx_glr_003_short_fiber_example_003.vtksz | Bin 23630 -> 23629 bytes ..._get_material_properties_example_001.vtksz | Bin 3742 -> 3746 bytes ...06_filter_composite_data_example_001.vtksz | Bin 3716 -> 3721 bytes ...06_filter_composite_data_example_002.vtksz | Bin 3762 -> 3755 bytes ...06_filter_composite_data_example_003.vtksz | Bin 3726 -> 3733 bytes ...06_filter_composite_data_example_004.vtksz | Bin 3739 -> 3731 bytes ...06_filter_composite_data_example_005.vtksz | Bin 3723 -> 3727 bytes ...terlaminar_normal_stress_example_001.vtksz | Bin 67535 -> 67533 bytes ...terlaminar_normal_stress_example_002.vtksz | Bin 67677 -> 67667 bytes .../sphx_glr_008_assembly_example_001.vtksz | Bin 4208 -> 4217 bytes .../sphx_glr_008_assembly_example_002.vtksz | Bin 3806 -> 3805 bytes ...9_short_fiber_orientation_tensor_001.vtksz | Bin 23374 -> 23380 bytes ...9_short_fiber_orientation_tensor_002.vtksz | Bin 23541 -> 23543 bytes ...9_short_fiber_orientation_tensor_003.vtksz | Bin 23465 -> 23468 bytes ...9_short_fiber_orientation_tensor_004.vtksz | Bin 23619 -> 23612 bytes ...9_short_fiber_orientation_tensor_005.vtksz | Bin 23693 -> 23691 bytes .../sphx_glr_010_harmonic_example_001.vtksz | Bin 4031 -> 4024 bytes .../sphx_glr_011_rst_workflow_001.vtksz | Bin 3766 -> 3761 bytes .../sphx_glr_012_fatigue_example_003.vtksz | Bin 5275 -> 5261 bytes .../sphx_glr_013_thermal_example_001.vtksz | Bin 40555 -> 40554 bytes .../sphx_glr_013_thermal_example_002.vtksz | Bin 38656 -> 38649 bytes ..._glr_014_cyclic_symmetry_example_001.vtksz | Bin 17960 -> 17970 bytes ..._glr_014_cyclic_symmetry_example_002.vtksz | Bin 15628 -> 15622 bytes ..._glr_014_cyclic_symmetry_example_003.vtksz | Bin 17951 -> 17944 bytes ..._glr_014_cyclic_symmetry_example_004.vtksz | Bin 78950 -> 78952 bytes ...9_dpf_composite_failure_workflow_001.vtksz | Bin 3761 -> 3757 bytes .../sphx_glr_012_fatigue_example_001.png | Bin 33108 -> 34443 bytes .../sphx_glr_012_fatigue_example_003.png | Bin 98515 -> 98185 bytes .../sphx_glr_012_fatigue_example_thumb.png | Bin 22145 -> 22937 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 | 40 +- .../dev/_sources/sg_execution_times.rst.txt | 40 +- version/dev/_static/search.json | 12322 ++++++++-------- .../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 | 44 +- version/dev/searchindex.js | 2 +- version/dev/sg_execution_times.html | 44 +- 85 files changed, 6284 insertions(+), 6284 deletions(-) diff --git a/version/dev/_downloads/06082043848dd97eedadd25f3f52c2a3/011_rst_workflow.zip b/version/dev/_downloads/06082043848dd97eedadd25f3f52c2a3/011_rst_workflow.zip index 309fdbff0cd5b0962456f055565384e7e617cfb4..949d85e356c995f6e46112b5238b31944071ac7f 100644 GIT binary patch delta 47 xcmcbTekGkZz?+#xgaHHunanowP8MSpVKUpiSZt9DGf-f%hp`<8jxk@MdNaVE_S1CbNyaY0}KHOlF(Qq~9wt0|h2$*m{BlCU3C~0|5Fd3ljhU delta 47 xcmeCG>8jxk@MdNaVE_SDCew|)Y0}IZOs1R5q~9wt0|h2$*m{BlCU3C~0|5PO3q1e; 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 e24fde3d7c618672235e0d0c7acb2fb343a99474..4b639b71a4c9a7b21705381efebb41ba09671a21 100644 GIT binary patch delta 46 wcmeBm>2=`^@MdNaVE}=@jAk2oKkzX#Fqv)Qj}u}B@+T)M`hob9Hz`H~0R7(!SO5S3 delta 46 vcmeBm>2=`^@MdNaVE_RRCew|)ANZI#nM^nF#|be5`I8eB{XqQ5n-rq~($5Kg diff --git a/version/dev/_downloads/2481d85388158be8d2f0db2cc842ad6d/010_harmonic_example.zip b/version/dev/_downloads/2481d85388158be8d2f0db2cc842ad6d/010_harmonic_example.zip index 82e2ddb25c49affec07d74bf74c78fb00b8eb285..5e29c1aa4baf694743063ac80b0615b5d161d8f0 100644 GIT binary patch delta 49 zcmZoV%Gh+2kvG7bnMH&F1bCRtHu9d)WENyH+k8ip-+~z^F!^1g6G&jPagsj(9sdi& delta 49 zcmZoV%Gh+2kvG7bnMH&F1jLw3H}am*WR_+!-F!!r-+~z^F!^1g6G&jPagsj(AjJ#l diff --git a/version/dev/_downloads/2e65b9281fef6fa6d0079a988272ffd7/099_dpf_composite_failure_workflow.zip b/version/dev/_downloads/2e65b9281fef6fa6d0079a988272ffd7/099_dpf_composite_failure_workflow.zip index e8a0e92125d9aa2a8a041d9e07fb3bea29d5287b..415c9b46ae5ad40d7efd127fc410ab9903b7990a 100644 GIT binary patch delta 49 zcmdlxgK_T+M&1B#W)=|!5Rhdu+sM01o>`H}Z1XAk1KP|$fyuqz0U&|N54>XmEPV{g delta 49 zcmdlxgK_T+M&1B#W)=|!5YS*U-N?I3o>_~@bn_|s1KP|$fyuqz0U&|N54>XmFH;Qd diff --git a/version/dev/_downloads/580520531ccb915b110be66a1df4aa7a/001_failure_operator_example.zip b/version/dev/_downloads/580520531ccb915b110be66a1df4aa7a/001_failure_operator_example.zip index 2dd202ca55d4d4d85f673eab3d090a2ff2d1fb45..b86e4426acef5839a8cee3e1b99db59d0f6c29bc 100644 GIT binary patch delta 47 xcmewr^ec!rz?+#xgaHITFq&=T?H6SJ#%Q*AzMzRXGf-giH4QJ2z+`33Z~#v>4k`cu delta 47 xcmewr^ec!rz?+#xgaHJ8F`91V?H6QbVlv%4U(iIH87MIMnuZrhV6w7iH~=$O3{(IB 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 83d1bfa42c9855282edab35a693a993340ccf47b..5fa7f745b30bbb568242f6ba845120dc80bd203d 100644 GIT binary patch delta 49 zcmX@Vf${tXM&1B#W)=|!Fkmv<$Qz}`%*152IZMsNkePwWZ1Tcze~`fB&*3ou8j}mE delta 49 zcmX@Vf${tXM&1B#W)=|!5a47o-N+lI#>~THx;abD#E=;%FnM9PKS*Hm=kOQ+9V!dV diff --git a/version/dev/_downloads/675f27bf7817e74cb3738ead0ca88ae1/012_fatigue_example.zip b/version/dev/_downloads/675f27bf7817e74cb3738ead0ca88ae1/012_fatigue_example.zip index cb070828902233757bda687924c3f824005681a3..da8971fb3a9f3eecd525f65e3bf96150dcac3151 100644 GIT binary patch delta 47 xcmexV|EZogz?+#xgaHIZn9Mfv+DI{rF_~@lkrGs81`140uy+IrOkQH|2LJ}=3Vi?o delta 47 xcmexV|EZogz?+#xgaHH;m`peF+DI`gF_~`mkrGs81`140uy+IrOkQH|2LK953aJ19 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 0607e962856c9fe5bfb59404d95bf2276fc6633d..4c8a95f25ff2f2a1afd2552f3aa3083f6c49fbc1 100644 GIT binary patch delta 47 xcmZ2cwxWzTz?+#xgaHJYn9Mfv9+zZhV=~)(U2>WNGf-f1fmH}dVDfRRL;wfh3w8hi delta 47 xcmZ2cwxWzTz?+#xgaHJ2m`peF9+zYmU^3l&U2>WNGf-f1fmH}dVDfRRL;wn<3z`4` diff --git a/version/dev/_downloads/8e5fa0d6f9171a181f50dce691b4a506/004_get_material_properties_example.zip b/version/dev/_downloads/8e5fa0d6f9171a181f50dce691b4a506/004_get_material_properties_example.zip index d08fd2417a8c63c452f856a475d8f38ead78642d..c24c76a923e18b57846aff96a3930bfaeb9faf4c 100644 GIT binary patch delta 47 xcmewt_%Dz*z?+#xgaHJ8Gn#GWy)4N5m(gtVW5F~rW}v`iAB{kez~luQaR6TC4-EhS delta 47 xcmewt_%Dz*z?+#xgaHKDm`peFUKV8LU^3nOSTIeD87MH>M2y1`166sO1O}m~5);2LS9j3P=C| delta 47 xcmZn;Zw}`T@MdNaVE_RoCew|)dxe=*m`pdH6;>2y1`166sO1O}m~5);2LSJU3UUAd diff --git a/version/dev/_downloads/a803e039e20f8505fa54025987d70490/008_assembly_example.zip b/version/dev/_downloads/a803e039e20f8505fa54025987d70490/008_assembly_example.zip index 03c409bde822966fb7db44c23177c03315dd3384..35b7525b58a90f5e38091c9ecbfdb13b64c3c165 100644 GIT binary patch delta 47 xcmcZ|bUTPQz?+#xgaHKDn9Mfvt`ubEWHQ^lQ;=Jn87MIMxP}u*U^0)UKLGts3KswX delta 47 xcmcZ|bUTPQz?+#xgaHHum`peFt`uYzVlv&lQ;=Jn87MIMxP}u*U^0)UKL7v(3ON7( 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 78a4cb0273f22ce70ed60abd16b491e181d0fb9f..ab9effe20ca3fee6f138a95e74f229d1eb5c92c2 100644 GIT binary patch delta 47 xcmZ3Uw>*zGz?+#xgaHINnanow{uX2AVKUpyEuJaQ3>27LZWaI%n0(4C76ABy3atPD delta 47 xcmZ3Uw>*zGz?+#xgaHJEm`peF{uW~vV=~>$EuJaQ3>27LZWaI%n0(4C76AJh3eNxl diff --git a/version/dev/_downloads/debbf6c5561a3af44e8fb8a1969f44c3/003_short_fiber_example.zip b/version/dev/_downloads/debbf6c5561a3af44e8fb8a1969f44c3/003_short_fiber_example.zip index 4618824f249b586c8b4d7953d12ff0f8c6ce9936..482b53654c9344015c1b56a9b8009799bc0e86fe 100644 GIT binary patch delta 46 wcmcZqV3KYS05Av*c>n+a delta 46 wcmcZrvLx| diff --git a/version/dev/_downloads/fad9fc3907e684aecc38368b0126ab34/002_sampling_point_example.zip b/version/dev/_downloads/fad9fc3907e684aecc38368b0126ab34/002_sampling_point_example.zip index be8895c6215cd348f28e33aa35a5160ca6090a03..6625243378eb1bdbd5aaaa4ef30b84bae6a811ea 100644 GIT binary patch delta 47 xcmaEo_au)uz?+#xgaHJ;F`8}UH56n1$!NCOQLI6M87MIMh?xgSU^2gXC;&&l4c!0$ delta 47 xcmaEo_au)uz?+#xgaHJYm`peF8j3NqGMR366l+jm1`13*V&(x7n9Oe;3IP3F3Jm}N 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 71564c915fb55d96bfee8137a929e8fa80185b1b..3e4b995f3811dcb8ca3ca6372c9a353ba8e18c97 100644 GIT binary patch delta 3456 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

@6aWAK2mk;AHCmn7hJM-Dr}s-%{qyLA zRSSRC{8&_r`c_n3HuaJGo zpharhHzi3FWHCjvafj^wu*TDuIn6#?Hub6!+RkAg?L8abE_iKIj72%x$9vC)H&K35 zu-j$bbgB>ue4?Sdtxt;uTO1XaS6xwE_LF~Bimz|#vaD}k(QDSw0T*+^KO@;y*0Sb? zy{gN)dAZ7Sr{pzTc2}d4iqYm(SuB^lspFDX?5r-i_9_!I!aIjVBUxYJgjSdAoAr`b zZBbXULdc6(EjzuU+;(lRlmoJ*W5!A~1cBCBR<4BL3GIqnsps%DT^HA@>vz48g^X0t zLxjmV6C0X!#f|6ixXBHqYyfmeRBLW&<4dmJ?q>VYX%67M+?D zQ6r4RABxj}1St*zS(5~z3x>%E)GYaa>2Ty?YKp#-5Ca;25bN`yvz3GqMgG}3$hz9M zKyHe*m=|Ty-SrGz7TE_nFIoR}(a=llE2qj!v0Q|3*Q}V}NmE=F)p+zsjeauAnTULH>ykFrwZO6Z?!wCm)vJv-u0fMk^c9rxMtc*P_aE7 zWEpGQxAlVc6@|%Zqt^oLM>t4Hj8U3kAUNU66z^kyl8^}FBn@MTBe}r1`Ht%P!)kdZ zsCYWkV)XtnrE(@6>z&*x-%;7S=Nj+31zNlZ@ZiY!5NX#p*1lw%T};eS@8eygA6Cm% zC${D<+5P!~SK2tl+A5=MbSnU*rz*!&g$T$da;uDrmhBNYRJoDQI)svYYh0y)vi)JPhKMBFT z^A6U$qc6^T;-5%4y1ZcJqL+MN$UGU|C_Wy4xHZuE!OXHoNW25|xv_q{jyLm;Uc`kw zX6g64S;nn1^tNG_McXyHj4##RBh5bF6C!M0_R5J&miyTKY>MY)oGRn_FcOna%N2XL zFTb*cWIU>Z0otw9C@qa9BB*F3TknMsq!Ee}!h@(7hcdX^4jaOL#^Z9?kfqhx*Tpt} zHm`5kxZ)^U(G~d)b>P&sqK}tOi$ftTmsj%Ffm|9lOvGuYif(eVQphWdG^U=lhw&d{ zY|Vd$NK5vWx;}6_KNrK|eHEUO&x6=?dL+OO5={{T4iZk05IG2OkaUVffrBJdBzAfj zJEKUPI*Bui)EPxO9R+us4l*4D=l2wUf$1nPOh>_^HwT%H0z0H}9j@$}tQPh9n(t3GtqN3QzFRUf(PV^@9b zs!v??iD&9v^{J~qb=3oM^#gJn0OYZ*&%7S{g2%w%u`qZ{3?3VU$H?HZGI-2?3?4g! z$I#%hG_N{5`dLFE7 zj>ed1gBWip)JvNaBP%pZn_K=*ib*eNWI@XXMi_*&w0dBqm5ath`+d_e3q;JpGG2{fpeO$sdmn=ILMP85?ou z9;Vy~`v`K1dAI={Zh(gy;Nb>%xB(t+fQK94;Rb(rxB(t+fQK6%YIvC8A%=$+9$I)< z;UR^G6CO%<7~vs=hYub)c-Y_}gNF+qD)_vF$4U5ngyV*$EI`UdS`d*W7(@K)xLYDj z9``CxZCMD89mJ{AcgIG8DS}c5Ar68jh}`HV2uzVAa*$~c2e)G*PMv5viov;9NH`sZ zj7@(gh%*Y}jDk3$2%J$kwt%rMEm|+l+@}0)l9c`7j=n2S8dMx|$!W%3 ztxD^7N8Z#`=fX0**I$1QWjnl({a7rzE8TKwoprg7ubU4l#B;t{rhHY2jhD1}%vlAr z)ma6)>gsFSv4sV#i}r}lSt)vPc=G1i-`>*o-$m>5dVM@Pz#y);Jm(ycc?@3KPZNJH zfmjmeqStp;bR|13)~tM==OVlM^|K&Sd2vz7*4=4$SE_?od2M(-`wNnZg7*_zN6JaRn?tM zRDqkE$muQZvMVboB8p8uWnBE($-IB}8L_jv&rt0>Wd_|)b(c!prP6k(v|TD~invk_ zMs}&Ry_nH$3JrJGe9P!U zPgg7NHa;*~RAZ01!!;m0WO*{{#IAMFeyWpz>U#IyhP2<*PAW6~~kt8LlbiDg< z6d}T20pFL>SSApoAVAzj@PL!R3krWNo2eVBe+R3PJWpBlJFO{UoHRjv6+jpz5tbX{ zej1El-W4bADJCQ(0SUtp$03Ph;Rr>FFA7r}COE=LilRiWInIhCi4nIRArL2V^k*<# z802ZV;js&kF`Z0j#ri#dfOkxTG)lQe_%aMrl#qTpxV5-bKo|iD0vtwB690cG3UKG4-!$?X-i}n z(57C==w|!+YQNpOe(&kGuHU>7`J zhKxJ`<9&vVUGj&1h79_=^*MhHV_V1SX&!BeKDK{`jNeI#!eF0!=@{|2F60pij>T_V z2g5Fg$-s_npB)qI^SFb1Xaq?}cpxgG8rX*ba4G^89%Z5+y63L&%~O=b7_;dV9jsaV zM|y0`DcG5|RttszZRSLG0sa^es zNmnCR&iY_owEDOW9+C;M9PZtyP+kxTQjr-Dg&#+S=127-$Ti1dj-M)086tpfB9q^? zF#kuwl5FuJM0iL5g%0TkqJt_0^6&=_VJpw%rZwsR-C=@5>^Jio-F#>rOqG z2qKgQ(omh;NP|Nv!eo~JfM&-Gzk`4Q_`{**U4(IHO-W2M@-zR&` zWDMs>F}}(4z&88>ShStLidlM8xNGfc&!3z1;rn=DElI_c)4L@q6M9%BocF?7fcA6U m`0GDVO928D0~7!N00;m80ySEl*@%2BlV}bz22>6J0000xfY9y$ diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_001_failure_operator_example_002.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_001_failure_operator_example_002.vtksz index 82859c541d4282c02f11ae336105f1211a3c3f9f..a03e3d9a56fe410a5c2eb2cfb4400794866b810e 100644 GIT binary patch delta 3639 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 delta 3626 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_001_failure_operator_example_003.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_001_failure_operator_example_003.vtksz index bd92da4dbbb581fae41c9e8b7b371029eebc43f5..4d03a0756d1992c9654bde8ddcadf856c5e7e003 100644 GIT binary patch delta 3648 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 KR{Ja9;r$C6)bnuw delta 3628 zcmV+{4%6|L9hn^yP)h>@6aWAK2mk>BHCi`HhY}-^6DEHo_|lpC;5f}SH%{Z)Zu;W! zbRY_}IiW}$N!fBU`R@mSAOI4OD?7QH_A14rNDr{U0{dXG;)47zyP@q3YiD0Q`!K^a zjpvZYF-_+r%@-(3fRQ;xfDoG}=`T25$cjRSf7ngn;MuIZUolbtRaw(63XhtG-V6M; zdoN)A-)VncR9!2utgbp%bpk)~y-u##4eQRC7 zz%ttR+%f_7*zA~{iUh@lX&~aG?Iz8 z*XFxy?;mms<_O2YsR#&Y5acA!!#K_JBuWTd%;WTza7^1>>hHwbm$ak48G!GO-Yg4p zoV@(<-Ol9!YknxIMSUl#u9|wqnyygmxmqvhta+QC(0kSh2#c;3Y$e31tgm)C>XN?* ziQ_CqC_{ni-;~f0CrN^4V})#eSmV)UPP6ydO}(x}YnO0{4xSBfSHgt47>jarh!36( zZ=(FRV0Wv!>H0z>@JS2ZU433G*y5zPzUhC8>YCRC4wvHVtGX=fyJNa!4IOYXC;T&# zs*mEe&z+K&Y}MV2N-9R1z1A0P;R?cHOc|m(*as9 z%E&@Sv=a)GaV9o2>xx^U4eV@n%eE7%XOyy-_^qzy)wOwEXS9@_U6~CqQI->5h%no# zZi}v;6j6gj;t$1X5C$m@0$DQ*hzpWr1ZtLizj8QoH8q8*5e6uQ00I;yQAE;2NB~4Z zNDv94h&#xXq*r2nK619^!8{I-f3|;)vaa?mklUgy=0#a__llvbB70BgB~xD)4ZXI$ za;m%#%S8xx&6)|GG{tpMjYp6A(NAW1T-b6eG4HD6E%HIrk>qn*G_RYCy@^aR)?hRe7q&q;mSGz7Niw+Z_Cd!7xyF@Npv4t{2S3I~NITV8`+{+DF)=~P#k)3tU9Hxg*qMLJ z?9Ugx5*M({Z;fuNbV^gANV78oEIa!dFz7O2!f9RJtD#JPxv=UZ=BI??B6cfj+d8p# z)f;DK5TVw^mN;k#FOKWws;*eCjR;iQ;#XdDNHB4{=FqMOOYPa<&dyn{9G z=r`v*@lT|G99>?pa-k$288J_WHwupjZVhyPG_$M`hTZ{syqFrUuf!d^hzfbcqISDk z#*H&5+pz1R?HXOiSE_PIvya;Ygzc+d`H;zKAA6r|(Y%aOWi(GBG3T^gvqyXK8%st8 zqkSYmyLCTEyFnceRJ4+vDS7O@*SBn3 zaTKcPihO@Ma_U;4#|x*&p^%oV8`?8P%qbH=+IdelxmESZvBeov&)UKGFEO^^zd@uS zRi#cvZI_o~SX@`(7x_GhJx3t{c93X_gy0}#iV)-=p@XDTBnliPnIf^HVeE_|aq1+_ zC{kyC6zOyn+-*9@bQBm(M}c8F3JlXxU_8|jJGQ`%EwEz??AQW3w!n@puwx6k7(NvV z9VBrOz%CRy5Oy2KZtK`>K5&~4+~z}%?r!s;+dOfbCvNkR+kE6UAGyuPZu7C*eBw5r zc&6TMK6RT<-R1$g?E`W<0OYZ*&%7S{g2%vr;IS}xObi|ygU86=u`+nf3?4g!$I#%h zG_N{5`dLG={9E~y2 zM`*mEXkOYpG_s;)X>-f}NipdqjVx%nzzBnomR1jpbnl|^(7);$hGAec7Q<6)#0^n@ zEngpKaWLY676;?smC9y@1sG~^WW)`Fkr59EaY)T>M34rJI0-dq#EBM9jJT$@y?3e& zT7YJgiw0vuY{X+N9vkski^oPhHsXc|swJ^>jCi8Otw15s;*k+gv^X(j(2K#2MbzAk zLzYyFTRa4$hdj@SY<84T7B zj#sk%vk;d4-NJ;dC@^!`?>iwHV{)&E$C%u00vE%n2a7xyb}=yp4n{l}xES*2hdlZr zc!Lfrlb(A_b5=;@4I!NdsXoAR%Zi2uR zNg@ZCYB;zZ8*%DH(@_l0#X`t*6f!oMAkHX4XB44-Gm5|&g<}gC+v4h@ycGV(WS&Y5 zdb7S(UeQhJ$x{X<&nhxsiz3h0t$krM(pON!6!ja*VG_oOBnb`(PQ%`T9j24Ztye>$ z?bDl~%elx0e1lO0MGCkZM}xa2fr$LrEM+mSbQ)w!@t?y2j~ME1iA*$>5{yU{(D)P;g9>!r)l1s3g#~Sj_Jqz^DYSTf_UhT+-q6k8Mep-^ zb2>V`Ag;JP=NynHK6t5`CSC%uB+Qj+@1p2`N_JXoSot>3MQ-)0XF=2_#YHLGbm!fD z*`K<~Ys2f=UyyvwSOMCrR9(? z+USd+pzh46*im&YuXYCNM!t>@X)P})zY`a#TRj##&n1&W!)-O+FuKsw)yg}Ke~(Nn zeP>U&yEO~bBuPJ;bz;{#=rGke!2Wvo!IrGw*mitJiGb@CqcBOsR65?nIEqlnUjg5j z(pcsXqaZ-sMeu-yq`W404L6?H|CP=9o2maBR-^N5+a27WyrzV4(gg8U03=ExEH}o( zG#J0UD^A=`9ENEagoF?rlQ52jebVcB+iOk*C22d#YK^JDx@N)!f%NfgA0$9059AUGDkZ5<4| z7!C(^?E2i8;E=~1+(RQse~35+BBB~NgaB|V0u~-+q9A(Up)p&hC<_ysIGf4QhP8jB zN5)JZ@G|@s?Eik_tK1&MX(_c+-qd$WbMAd;XZ>kP z@x&Ru%(`NACLWry9(I#Rfpk%<+kP!1X!OE;jT2T~%hPt!NruK zbTxA2Y>qZXtB>2@A(;@%;ogr538aG-@g45XXDOecc~!9RC(WlV9f*h_@H|2RO2+OBGRi+3Iw{a z#RCZt6%q{qP+ZIOyEjMfi4w{i^NN5Yn(;l|=d}`PIlPpdN$|_|i0Q4yQ%)0!5dRG% z9zZP37k&tMO-u`>xkV4OY@A|{mR8A5il|(FW(6AhKHs|3EwX?JZ|CSHfg6L3eeP5_ zO^Q`xD(aXni%}i?q@+-6maSNnas29!+OUyl)qcv1nZe&Jl_}?5@G3T~2ly^R!se^L zsO&bYS;-eXS{vO?ZlP3j;8x65^pizB7|-s+iMLb&Wd>JHf|A1#dkfBlb_E4X!O zUj2U%wY==iV6P=z@mAcsCsdXs^BcC^v}{USoH()!2s|S54_f%2mDNHAGuG%p zu}C{kHAL7iWUAFrRM&&tOJ6x^HAv!W8FDM1cd3o|?ma@s2zCD%p=-75 z^LnwR5$G`^BVo%! zwdc%gK>h!(`n^K3O zrX=-wJA(PO8rlgQ>M0uA(5s2!i=x<>wq|X zbgS(5qj17)x#+mG)IK>BpW(kv{uo0qnc(>W5xD9(V(p^_v3*R~WAK$=g$(BaG;xhr z=9_TIlE}w{=pQaTs2p{eDqCKAHkiMAX_>SDSY7|rpo`7BS~@Ngq5lpkU;e6f68PUb)uB?gv$HHRKr)R|6gd{WxY9dIh`448n(5Gm_-bt(`s-T|`Nyj2S#Ea6HFYU}(>h$j$b-ogQdD=0=9 zTDb$fr(8=xVoraQUEUzKWGHq~p_9_eN#w10@eN6JoF_AnY;ea%jbdnt7myu1%@^OQ ze{;Qm<_o!LCMZTLy`5IV!@uClaOqnj(e5~$A;x_t zg9h7Kx5QKAtFg?>ksJ2o&!HRNB{ zX$>J>j&um{s}u8SYNfvTJvEu^@pW2G4A7MT*po~iO^HuDGoy!XaV)QnlsB}qrjTet zIM^Yu+?M#oYoAcs9&okFr^vYt8D;u%n10kS`_wJ1T-KV33^%+&>H3fR0zsHev+CXMZ6ZI z%`cN)J_A`DrI^W1zJpx3TUyA4!l;hK$*@CsJAyQgVq*vW0S_`TT+@|=OFzQa2Uddh ztz-fn*pQfpkmW;X@O`2dju@RoIxc04HZN=uE(yi6^1%V?ML0u>(zw?pE}4nBU5W!S zG*ldo&eJ{aXaTWBnsV}j>Mxq607Jk8iJ>8CAL+@+OlCckEy~)dl?4f;2sr|2`>#p) z3jBEY8pBL zZjoIPsZXKC7>~g%&}(1;UYbJrktv}q8=LstbVeeOgx6^^Fi|Yivy^o*4s8htq8LA~ z_63mpNW0OcsGpb!(?8mH!sbzJ>Kcf{R3ZeSOrKNuB9rHo-Eb*|1PCW(YCr=Fz=8{K zNOlrr%GVlKtIe?upHD<0BIXmvpFvAJ6-p)QU_3%`Vg;;d^#;=wz)8>#up0w_pK8)f z214F;yin#H1ZmY~N+1fKUdYMXKZF>CWHLCVlB8{qxwB-p!~yIumpM>5kQN0nFvJG+ zECd(PC(1Y^C)|O{vY1p_#8@HE(h^EcB}XhI%BvlTshs5xSmYRE7~{6T5=D!xMjVX+ zfM5zKZk}KyU!xZ$KPB6vpD*bvQz|Li^4S(0kl9`Z4{61trhyZp45{ma=~UAMu_Lj8 zGy$~>;~OD5cuEUco!E$I;K(^7mGg#WHc4ztY=rzkV>@UMmC_F!VpCj%OH%Ho5#Umt zJkG{F$!!Q+32_!sTOaAH08smfDsnY+D&v<*@Q zyhR^{bYTV!GtlO1zmvNr^Pa((SQSEae^f}Z@gnk-vqgy6LyLa1f}n% z)FQVyUO|;ZYWkR+Lvp*~WO65q2ZB(4mPBT3v)#~rjJxdR=oYYpSF}vZZNz4DjH2ix z(}BVx;^gF*2mp^miD@YF-)m%K4nq!$a=U<>67{YF^t6Nk9?0T0NenXpiFP5cqFn~p zQ0)Umi-c?AiA!N7LNglNRM_NQ1FY+TPFy`kD}fI!&`%rHYbM7dq+ z3xJIAlP}DekRhe^kw{9Zljj&T$O8-?T@V2+jN?)wBqCE}aSpCb_J{ntk+o5C<%;Gu z%raN+)Rr$iGfk2t;55l5xd7_rqbd(9Ad)u)FoR9vrIb%S(}5E}jFkQ z$7x|sjbrrsM7K8Yt5d|Be{RnM9%h59v7dHg6sku9Z5$!!RjEqK5hPU&jM#rH z%ERdMrlICYm{mzmI|xX#-IEo48FYac0` zhcBZ{ACMNDoj8*bCjHCu&2Feo34AvyuVw#4*u}N1!?x*4y=%Qqyq*O<#Sj*DyYa69 zc5ahCyZJW{K1b#2wX)1ZDLdpvI`|WjYZr48`xPPeZt*rD>g=^9+?b%B2TVtN!Q!oQ z1A1X#>8LPFb;-8rkGzNdD}g*exn>Pvo~kJq!{cp~9sy;~hM!?bpK*SpH1*@ES6iQ@ zHIdn|=m|;r;W{g9+y0C&Zt3?Cj@z8}RY`ju9z z7{?Te+9jG3xr$Vjm<`r@rRqI=c@QpkUzgGzLiq>bSb-9nI=7h`ILR&8OCZmy|4w8D z>?Jv^X`iRQs8_g37zCJSG89BwBc#dY(h~5hfwi)Zi*7+rtpf(`DkMifk6ew|!R+s1d{uOGgkv zdtt>ThVr?lPx3rnED!WZ9<+yf7=L{BY9|^fb}AxlU%LX(K4WMW<#l~<2Y-6ZJ~Pm` zP4RbNTjzh=aT;;5ppA~VY^{|%OKT;YStC0~_*ZUAW5-;L$TYHfz3vFVIejM#t71Wn zrV2I)Uvwr%a8+xW&xT)MY&CZAeoWc?79MzH8JAsv2tUb%5j*+hu(d$W?I%|zoyw*|JWD^wz46ZRGVs!VC zXj3}1LiJjQXTzzOfmlw>l;1Vl`4L~_o&wbG1&&*M%GjXlQOxa1bJ;Hwb{%W4;M3IC z(|Z_OMDL$CjAC|06xCA^al888n*stiik_hYuc71Co{3d)oXA6=^CW{>t9_)xE_2a< zHR`(->#5DtO+FWpD-732^x806?mUO~0%u-RHUdW?1C4PXpC}lBcE~5y*_3zxxU2_^ zDg!i}pBbKgrkd%s5AeHKSt!hunsp(}Rk#OcB84+!g2VNI(iTJ))V#H74)6=Y6$EDR z&3wUw3r;o@tA1O-&PW5)q(snVA7=5Q!4v0=(rl?*=EQ=5463vS+Q+h#B-Mw>o=CKL zZmh6=+JhQKC^$l1)fQqnoRStD7)sf643W?oLb+WTj_cpC@Dmf}dvlk#XSLxp`K}!O z@X~)HzzFAVG6t51YdVxELhv{;t-q_0am z!GrP#Z*IXR+)U+7&aT}AM!Z)5{GJ+PJ`jFjn!YM5cqOulBKGPtlV0{Isytg^=W1}j zbj>na&%ACv>JM2d!gj=K-|$b&O!*zE1Wo zsd<;0&?B^;b^*!pksSw8SA+ql))=xBKx7E`990A=NkUa?o$^sCY*$Cy&xQ~30_>0% zp(wC3G~Qy@Za|N}SDJartM*_~xcE3+q-wrXTyl7ZyN%xl`#^DM6WNAR4m~hDPgQe< z?;A$ScI{z|ooNDI!h1a$xHKND-c;c7X*q7FvWPiW%RUI>R&OB8lP+#;3H#4m!valE zR)&vKCangEf%e|gcyt_Q3vrFS=}R~t0oXh}i9O3f_sFAZJlc{m%F&QZOoz3t{bGu6 z5jf!ox=IB7g6tgSiH9P$Z}S3HTK*z%yXY_O?eyUX(WF4(4Ez^jDo~MIwuSqBoNJf- zIHmmvS2(m5B@b>33JKI4@04~2p43wRkvvR-=Lmh?(jruh)I{K}BexsS3?$^PPif}` zfdc`+JPkBl&=v-qX=Swpf?uZO5%#nJ3ULMua(*gRkn!cuql56D>GE=8knGIr^~u-@pfGyZYnw`*WZj@6~&N`9@U#+PDT$QQrcYv%3^PM*LzBV zZak3Yl|=csng!A7(A6>n*k3@eR|8KoBcLvDK8sh-vmAhfO$<;l7HVUCq`>GS<6JfG zP}N%go|oA0!1J=wAJzMy;%f{e7N^=7hegD-6# z>^p(IS5AJ5l47wAjbtn%~9jPH#8p6b;^g+FNb!oG{;!Bd)AQ{xBh>`wl5~tE>K~%v2)Ao9U&~;4c5ewP zLm^lm7#CwDN*Q6Im?vHYDQ_Hji;&*>DNF5J1t!0!R8d7Wt9A{aUUWMp44X&&woPuO z`v+B?z_Qd&)hh;vOP>XPk0YHl08#v7Y5i0a!eS@|_y=|87<9BmJs!T0_v9DmISLb6 zt!qF!F56gYc=kX{h;wo))db%pr&dT+5^6@y8^1D&Z~1OFp0V^p^<+8fOvch2D9pf* z$@i`?u)jyIb-{3^WY#g)ps|nmQ}-rax-ZT6Zp2V^Dj+Pz45sKs(mRSKJgA zj-%DN80MWrrcnvQ1GKc!P5hcMjUqW_8oynk1bW$$k|ofR`vt zhlabIOzvM^J|jp6E3EkxXem^b-{r1;?{!O7%Uo)ps`Q6;BNy-!q17*5JBN-%e3hqa zuTf%n595jIP`jw!QJzyk4gEyuRc)kb-2wpx3)sTjE`kYy z$CwuxrERS`y%%lO7Gkgp>r^LQ^*`Z9oh%+)9Ae-)A7Ze_h}dZSW@|DU)wh|=FzCru zj6iFo!NDc=ivNDKzv7$w{UtdON7HI z@~th%4P(Tz(^Wg<5=D?`S~T-|7i+4A7C5olp?4L1CRk}Nlgb*!{l)6je4|ZZ6-bU( zdrI92e1giNnUCxQ79ORrDR@t4WgBHJ@B@3j7Y<%Cmb#W2?y6eFvJ`pt(v{@MshRXt ztrB=LV&W-&_&jDFHG}Z|Oz_MBJQ{gEdn6lK)ZK%e^*|j#d&cG?KjwDTyDa)9mJzfD ziSnmdkSpFNPV&#z&;pf2LtDgVw+u3EpBZj5A`W}~d}DZpY(36T8F7>hFZ#Jeex%mO*O~e~qDI z5pP^|d8|^GXl^dPRf3;+3WB`K+q?pJCxUPI#NaR;o?$vpdr%~@tZbTe6+b5=J0hAf zZJb}o1NXH(nq{>&%49F6<&I-^C-VMbC@Zv}f1Ar3mm(KKPY@@>t?f@0Xm2M_3 zgjEu7EEj_W>NY{ihM+J$wkw+E^@Qt7*wLdOCp$QguoS!Y0{^hO^AO;f=e9e*pF$Ud z>B&p=il7VD=@a)}%xXiH+l#>Sz@f!oI|0@z!K2?ilHT3LPhx72m2I2DJXdL6Nw$3) z%?km_e&e1)PodQUlNsi5>F*Hq;Reo<;$OBAsy5Jaio_Qk)TT~+z#AO{PW)O>=yiUE_& zz(Y`DDgxibGf%~e;LQH7pD9tOx{47%eJq-rwRqf8`|eNG5zbH5UYe4mAPO~|tti^@ zOm)Txa4}VMxY4R z!*L>a#T;C2#G0!7^H6|XGI^1_)awP8+#11L1WoYCiox$u|C;K-`DcM`d|xDCJz*^g zF;0{|#a3^Y>m8`dzeTZ_DLDy#W|}op4)-7w`NpqN9@pReRP{QpDz+6#cLH6!?UT0K zWy(U^Z2ZwYjv8&%4`2uhJ0j{7s&Te%KI>BsF*TN zJGs-a4k1`2z#ahPOnSe#*RzdjnvzDNdi_B2wMQ@+iv`y(J%moo5Yd!u@ta(UGO3K31OPCRq%>y3VdCIvLwoFg3X{Kn1)f%n+|fj@Y@B7r7>Y8 zaO#VWC2A)SWm?6EkWaooYtrEe_#QdGIbTo8DE@PWj9zL@=3h zr}25W;1!Ae_)}F#I2JRP8EUxpwgDeC!E=#XqIDX{nmvdSh6(V5={aVwdz@^9IED0V zM|^8XJV8}626hOdxzxZe4|6%@$u&{51 zLc+^H)gM9^+z#ml*=aH7E6JHg?dr~mXe+TD@ zgq!$?pz6QC&lJ5zvYMPM0oPFTQtOm}J5rz51O=M@;xkqG({V}rp8xm?P{DH+a$|UM zW3Fk)Teyh!tkR3#Z7$7(k-wX!_V3$#w(YuaahE6tgmTO<`T z1~CsqE}i2Y$qM5s9%y7d$JYjtHi1*^+`!?E%}lj_i0gwl{^Rvyw*4=lEd(z)4L0Z+_`<0lh=m98}=1_nKUy==DBz^@Xs(#*qz z*!Zh%9IyPQULiIs2KSWXK@Y|6rLB;l9+elpMI=yvzBe3DmfM2f$kF|=)TweFh;<9Y zUI2i%A1G8@^eVoQ$aI*pBB=RE2St9E4Usjrk$xl@j*vC6Lo<(4YE|~oT4|%Wf32E1 zPr25l(^AfXiIxTSj!Cab;l10{fsB>ah~W)me0zR*xHwQA=x;HejCr0#$m2@)Bwbma z*kslQ3a#GImhYAnmLdb$^V}KfofiPpN`5PPhIsk9W+EI64y_JFUU5V&5;j{?UmC7N zrcF6)=Y<&J9>PuoZ5}QLEeI0t-EGQh2ID#SK$(2w5MMzS7MnPZka?C$&rXt!%p9Hv!i#-qBj^Lg` zB%LN9>WVxnIUhB~GF0ZdECuW!sV~s6XesyQ(u&tFZW|Fuwc^cs>`6T9iHL#6?fTt z8u-K_za_-N*1kmpw)Kkm+&qG`p2|um?RtVJ&azYD|AU$?SOb1g)vF@{Nlr+>1SYGA z9h=-rLS>jv>R6J(l1U<<_2j<>e^4VlH+~ypV|L}F*0NOKx@k)AS#lC0@wWI%W0wNn zd^Wv^ZE1BIm)v)*ztT_yRIiKAAXp$+$H5BTBO~P`4cwm9Bk@xFr?63w$OnME^|sMf=OOI>NqU#xV*Z4Nd4^6$a*SR?{9&J#7m_#+rr*e7|mf-*+E5IpZ? z{3~roH6MZ^J||jTA@0d}(&P3Mvv}KJjQxX26=ndB0(z{eLDE~pbI@fn{A(DC zJmO`eO#Blm(as1X08aydOQKE>l4fbVH4z!k5dwmu#3PWjF&Iey%sd>ddQP+#S<73a zBC-0+G3)Vqg!P;W+h_+=ic-Sv@K!+wGBKe9hU4&I0lW_Li%`PCET=z|!foPJ(02Zc z;7@A|fv%F>Y(_SC5o#8yA-0`E_u9IMXu?Wzee-hqLD)$6sTw6uSw%hv<&lW}VReoFJ_g^-Ks~%na zdW}+p-~<;Qe&!rWWIQE(M#x3PQ1EusY>kl9D{epk8Itdfb_RQg?|(q_|5Ob`Z2$fa z{>(XnXezb;fcgvAL3zn}_t|s=V??MWU@zv`#*rMOOp#leuzCDSML_mz6WgqS^pd00 z^%=U!^18AQ8V&l9_Jw-LkZbT4L;Y(TYNkLHPFppPf2N#D3I#tMt)@I-t_bEsfduv8 zfDozsZJFOOp){%TCiyy0jKzUh0T!_7CeR~)29D5Jh)pXc}#N327 ziKOy(4+^qXKrlfo&GxGlMsWGhhiF@Pn0Zl=;IMR;0K6k@hL{HHs$M`XLV0^WO1+se zE_bHSko{*`)`%M@_n@6H$!*BlfZ-;8$Ku#bYBx4Wht325e;}XXXUO3jhvn8QDR#2N6ivtw(w(P`z>d=Be(Bl;BT%hg0i| zmR6-*tV~B%w^6R`xp^DPjKPH(I#yD?YKezV_PF)JY7T~|Ph6DMet21hv7Dit`WI6P zDKJkS1ID2-isj8aijmS274_R3hx~>Hv36~b`}~}>o8e_a&QO45XJUamba50_p|(Ie z^uHg<9e^UA%?>;DK_9LyZt`0y+r?PY_@a~K5MO@m6cA}r*Ul~(4=z75TrbPTQCtlD zSJPY<4xo!~yo>K`8h3N439m>eYxI6nk2scx4#{8N5k9pg7)p8!b1~&ILs}{HN&l4LUYy z9wpJEuHBuV{3hNz-skukAd;H<_1eKIS!T(VthrTAONTioK}l%+Y>8wzdE5C9BqMRJ z1*N}9;y_V-F_e`!?A}^oJ-f-aD+P}<|@C^Zi6#q^Vbhc(_wd54K_ zJFyLjJU6w$w7Zr!Vz9QBUWg1De0T?ZT5waNs5Z2oWb-Yr@L^9lLH{AMt<>wt9YW@! ze|nS#-h6#RC5633G-&RFEbrUX(r_m+wXtwwtLTK}o8?t=`_-iC*M<10IEfW6gJW>k z?lC|Cc3ty%CH$;g?C?kV<}UTht2YETCofI_ovk(%v80x8@ML6U^|7qqV79Z<5K+Nr z3{hJR_xCqR6?#3?DZLtVu$Uu0=9fF}?~^`ga=_Hd^XvoxkG$$vY?1aGb6EfW297S} zdZ^ z#yE&iM>*^N23?8BqEHf+{7+vWX7-B7a@cGv`AAHAx;M;iKp zUBZ_=zE?SXk#>p{?>24c|2JC||JZAbNIZFid&=^q^a`q^{s9%HIs1I*Pd4B>ga}RV zP^|y)mEA5ptg={rg5|bn^1%$Ly!!yR=*b|d=JGRl6^L?SCg4vg|^j=h)x&3^=11EBXWFKAM%A!@EjpYE1%G>3shX4E|E+HN3}WW+Z>WPu z==5`2b06VVbSX*yC*@vQ_f_tR{fkpeSBlz;9QSgqTKx^RhYoUOgrKHiEa7dyb}FUk zXm>wqW=v?O&3tTf#b@Eh5XV}ZT9y@<>G;sS_$59EZC=D*x1c{n+V16BO?p3M zrKtZV3|+q8$-Dj$=??s9-qWoN8>8erPEtX~ivxO3&iZ^elcKE5B>IrE+M;&laCEw! z@@CvS;Su6Bc6P0|Sojo$%yH~8Sjov+1cy7`I9_{EcoWXUNy*VqhRA2nU zp`OluwIAiy-BjASsQ(;T+BtEfKSD^Xo;m7KbVYDszP4?h(U3P*?_UfJ#23@!$G~Y@`T0-%G}%;;H}FEXz<_}r-MscTt?%^IsIQZ-qh>fyt!T7 z;js?0IIW7*Wb~%qmViuN13ieBpdDOoJvW_dX=q8VQgFXtFP$cPOOWWes9eWix2t&0 z?P3ax9hP%aZJ{FbmF=ZscW{OURQOMKSKPNKuiE*=t!ZlmT7n!ESer{xoX@b{)wV;C5unm?<6K(Y0mP|vBVhQsi8s4wC8qs@QIZsPQ(@(14Oe?!$%(7V`r_j)q812=H`x}@zP zM$_ebZ`e$YBw#;MlJ4!8*6}gf`ln0q$FogWj)H^PZjL9|@Fd3V?vkI?m#5A4S6h6a zRJC;KCB%Kz0CLpEhT4q57K29rfgGPNa1*ctxKNJI}`I zBdU4#x9)q+nipmh?JGYKAA6n`lb6a9(kYZrLU;BC-KH5*GPzcAxbYQg&$(D9s7)!oXznp6+}w9Q7v`qVy5 z(fbW|zv#u0cUJGn7@ zUt{rsdl&nFE`)3Dw2~y#t#-ikdj{wfkTY5sC#aVx;GJx}^j{$o0;UZG3QDPb-B$jk z>jfs__?by>tcvJ7%@W)C!LBdqBj99>CS(R64Hm^ZwhIw&u8d*U-%VlbT) zgAYFKHEo!iP9^~65_)zS{_1Xf5(jS1_FOA@M6SI1@Qc3_a=_wvX5PW>q2fo^{+8k0 z&N$kxhm0g=8lLZYMPj&mbk9^dUx0Xb1LC}_PyM8Tr(Y0d$$Wa~d&hqN1o#wfE&L4| z1FXtC!}2nFYGZjBa_G&y<#$d@V*8?4v>}6b+R*Tx!}#Rim^Mw#*G7w%#kxQ?Y+=eM zCLb0(B^7FImarnza$jq$9VMyub6W3Q>_L|ww|~(`f5$JG?$sK&6?9&j#bxQF%nj{Z zw2Z769n>nlZw=L6KR!QXe_-c@St}$KNFKV_*a>mcwpHCIBCr_-~^OKV8dxhW$7IUP zDSE0%G3+<}!Sv)k*u@!Mp3PAF6$xBt`ynswlj@-CT|$lyElcLjMh?I2Z*MsxdOSYV z6m+nr2j>&#X?$qL4 z%GnL!gsjlw&fb8S{ivgLi&&f4)Ju>T!@j?8=PL;swvk}20w3AG1#)(387jZ zIW%W3)&GFm3tXUxJF8MkA}!gQ1;m=30I^YY7v1)Ld}9|H_JPqkpj=25+p_TBN<6xks4!^kzS*%B12#}`8bLScEl{us*eb-Nz zdXRr4G}zs_*Y5;=F(ttD+hTH&N&%zO;q;P(8pkIGWK|6f`F$XjxW=4h zFTLc4r8=D4pp$!1%<~D#$s~nZv}#m(@p??$DQ6 zp257iSA4HHS=qxy!=TgoUR$B)p$x3f{fcK9FTV8k>)&<94M=LfXQYMWer0x(4(W|y zMn3_Td3*TC229CRYm5G@YBn&c`M~en-Wr~|#Ql%G{s&TBrsMrT1Fs=$^6YEn$=7pt zTIvcYnta8a>z@Y`^XVDv$gv!UZtKK}uzGO3B5T7pJSMm@;Z}K;4l~0fE)RWj>3r2G zHG!916+J5y>4ecblIl`+Y_H7f?qbgBBy+&$)}gz89rMmhnhj_H)m^n(;S_37+YNQ? zx-a0}{`I<1Lr`zFKocKm{rKJ3#C@H-1777P^i!fbxjAuC?(nV%QenMRO_EE$FDhFc z$fWDrBp3UWZ!bCdUC+w&8z5QvVEQyIt#;&mxsx(p`XKF{lX~*7;a~%+ZQ*tIJtj~L zzrS}7p74fqqqw$+y-hXWYS$DBFq9~f3(+YmeCU;`=Z z(Xpc?i}EdyA*f0`o%SXFLsG)@;0Yj6+d(5KsmyuPODMkLfoa*>3&6uFEN0;B6odak z{PmlpQ%i4}_gHz-zhy@@L<4)SII+NVW`guV`+hNThGsiI3W4o7vJHEkK4GTM)~3I02hFpV3p_x zxOu?G>LrAHlkJ(|nX(>=#OIK{C>D4%7APh(3?2|&=J7{wIVx`vVVosz({lF%7Z)LF z(riuvi4=dq*la~me5|oG@Th>$Ci9@#*XZ)ICGHC=Rh@bEb(-jSWgJ z`b>Hpi+azoC~_*khi(kmnITTuBXYBcJKil`mYzu6qxv+pKL9AKaCJE^W~6lNLlTr@ zg)e7N%p<`?Z_4A!5g#QV?G&{q2pRTigFoxi@*pjNIH*hG#RbqM-^X#|lsK58z4)!n z@9zhhd4tnyWOr3!-t@sboTBGY8&7B11J&%UQ2oT=1Wzo3cIH-Tt9eY#b+X1(r3Ab9 z=WsZ!$cbe?1f1e>UfUk50p7E%3Lq!k2F|4WwCvj+{I;VN{_f|cx;xF;u3p@OJTI>u zoS1-5TuC|X@#430Y+B3BuJYO4;gsQzwy32yA+M}8#o+J3@R6 z_4+D)%Fr6B%f2}qE9CWydZyk@Q`Xk{L)RL1GcEvRpe%LnO}Uv9afZS!|IV0u7jnMa z(yVI8BiH54X;*mVnkT-)Y$JMZ>b1Je=D6-rX25=EHeY@_R(<+1IDM*6Eh8xZ z^zQ9`rK-aQlivoXl{&K|YIJ*Jvg-BdD65$Yy~5t6c5I>d zB8nXEqNQpxSP$*yvi%gzMy#O9aB*eDJw_d~`!@FEZgF>K=a0^pke~9V;~1jQD+gzQ ze(fFoyX23rX31^c%YamMsMCgCu{z{6`N861-3OX!er?oua{mPaR~nM1E#vJS0uJwN z4XzsYdt7uXj;4``rkT8$)6R>qItlLy2bhIS-WQwU4shz*(JV8WVEjv>Nm7W8pY2D2 zn_^;iymP$JQ?RtE#6ClUAdB;+TCfw~zimf1Di7Hi*{Zfo&wO3@n^tmSej%%S;NYTp zszNlg_F&{`mJvS+uNXZu$v)%1f}^{?h%*%lxbz z;s~d*PN}z}LuP{=Cti}wyz;L$?;{Y-hiBz0zlfZjaX(_~=Hj&WWFfKzSUh?6W`7%K z;U$n2_U{uNarNuy>2rStUQNXYkiB!1ptIA-3s(zH?yqKuah5YNDqiXs<>5C*yrDb| zYU5*9`F~c9G43{;n6-^nms!PnS2eg^6nY&|Lt&CMJ_5exKDq}zf=@u9uCTjP)3fib z6}4NOzLkLIyvdmlx+xQYv3hZk+MJhWrsyrHgkFYbp{X{;4L$W@4HwiA8pyTad&N}I zbE?(BY~9&~pd<$Av4yZXfZ-W7hoa0a)tS?*FUiV2eM(5SQey*E$tSQwc+wmcQ_l18 zOy0NPme;TE3A;?NaR@aNe`{!C#`m-|r+I#W>Ul?M-M2A;x#k6UBg^UDw1&i}htf3p zv80!Lk1*Ww=^>T2t-SFBreUN17kvRE<2cpd?cp^v&Er_NZsro6>G2fk|fX=!?%^3qUp zFho%=%JkawKSm(G5kh+*{~?L->{-s?up!nEF!M1VbSPLm8#cyJ$x*V78Gcm0aeY47 z%+K@jTP28O^M%W+QeSN8cB6&**d{x<5*{qp#bDkq9vPrs|70=SdBhM#R4j&C+TVn_ zhA+auG(Y(EKxazyWVB3_pM>s*tk*I{!c5Wk^Y5Pb^Z)ptXU@76m!k}01x943-#r01 zfkzs0{-A4};wPwlV>2(fKyS+HU`V)?JwlaebpO?!Lro9AEci$CUH>z5L~BZnmo#z; z*&D)%H^#SFtL~VhbiJ7+GO~>0^I$f)Z7tY?b|~99bk^JaxyKd}*7UlA#u7$ZK9jMp6L|}OyPGiqpBHX3jf|(V9 z8mI4S+785mC8Y@1>#?hJhelB$8Xb^)vVqfd)%`v>%5>!3Qbdrxj)SI+o%v$xU7fr* zVR6;}BgOpEMHhFC0?xIv4dY> zeho?r6fI_x5w!skst;0<1^z#CQHPVO_O*~)^%;VavL_QI%$xdtOSjVawtWHLvESYu za4p2yY$)8OwusKA+aI1;<1YG4*b(1rb_{sMjs=mfljX^Fy)$=G&d>38Qo3}xWFxAo z+uDy;HbvMl?VJB-C-m~#2k#2nbXP?Rso2bx>144EdVzV&)^4WL7lLNYsc=uD1=>G; ze9fxYA82sc{|RjklJed8#csG()#e@~h%CRPR+*>GPjMx0_3q zN@Rb2qvG1{;ul@09NDU3d!tzVbg_IkMcgH&tt zuwR9d_9p$keJ_}gC$V3*VZ7Z@J5A#IS#4dql=iT5ZIp9If1tne z`lvg&^-2Ai9Xj39v02zCr?uHs<{^FletUn7%+9^>P|5n(Ybh&|qK3+$nOP}odI+Z& z?vzu`>y!1ls*=S^xq2n>b2s%%&2Q2E(;E&q;We{TotKiWG=ePMpI1vG`*m#(NqoP( zqgFoFQ&}fmUfprN>=XZfZC$Hc?*=5ly(`ngxs|sGZ;U}`a*y2 zRY;rIqvv;i)_=tR-mmd-TQNsO|B5r&-&K$Jua=(VYwhElN?nF0p@axHI2G1yn!${DS^}|M(wzjLu)I&MO>~ySTT{ zDK_<`(sOM)dVDS$IS==|A10m4>Rf5|R_EpFHr}0=UO>ZC@V7aH&&Hed1)d~4s#Z*`R>h@e&-qE|6kM;U5h`qYp zw=v|ra&OjgcexN&&e1)u2Ht;>P(LrIM#$t;%4G2w&~wk5Rq1tc&;HIkV?d6;4}aC) zy2N(=hbZ|2I614;k%>V6>Ma(>2feZ9-gh1&PyT#zU%S)e)czQm-s68fWp}=lxh(Fx zC!J0DKel?rwtu#|tFHB5tp3sKUv0kj7VgpUcHr{Qw90ITpV~ii)M$Sf&)?mdO8%MA zvj5O>S}|MD3%Z&q5<#>~{7)I3{7uXMqY(SskADm=fANlg{n-d~gqF+wLn{>3j8@ER znRJFQ%H{I^C}wp{&*qCoLQ?-1jmrO}j*71C7FD^9jK$rPg~fB{@8-MX?jC;p^0HeT z-1%|!xm@1dP2`d|h)I8ggx-9=Jyz5^ZoAFy9G6^Wl1H`s7tklRSxIA&P$WXTu{-}B zy>;!~7OT$1y*?;`wR`keKYtyN5b%$W1=HFOM5cXfx%b=d#TlxSAOF9Af8i9edxZ1< z^PhkCt9#46T#$tRNg~0&)1dr6|KER$+?JouSFZX$fBfrTbO?XB!C^)Tf4yZsch$lQ zxBTlr4W@`Y{K-*16Zn&(@LB)aM@SCxjx;;%2t&g4KJYFiQ*FXeez+m)4tA#%&kZg; z6m2XPE8lN<%hhKfHMx7^aX^OVwR|B*b(tl;z|NeiOLz>_I`GfY8tB5@A{lm;RSHzW8R2`o*{#Ogv&KI&cbnkAGk^jCV zgUAgLV@IU>^==a6Zf^a*vv`3GxQm4`N!Pf2^VWQ3?PHl4vB5E2d>ju8#z%kfC4*7l_d;WlyNgI& z-E3dCN8hDbh^PE*y>*WYLISEnlv0lJ+iIcFzxwvtCp^0e=bm zXDjUdJHo82ElBUu&pS%=F*jF~eay`^8O3D9U}H!QAXm zFxo!HQ-aa7#p!8i%dM-VqOWP$K55<$w5pbwcp`^~apa=%rXe-=VyNf1&eGzTNu5D^tY z6hXuQaTDDDfgz#`f(%>OxgCsYdHc8TN{-w5|};r1?UW37wrZhup6BJ7`Q>FNIdp}tvfKKR7Y ze!X&+pta^bxjy!r0m?PQmOffD)F+x@>~s4|y}jIScP(bE#Z!Xh)otA_u2F`>7N_J& zzxX3by@y=b>s`oAJ$=j+dgASrM4OUmQxa`TqCFIul4wt-e(Zf>RQ0N}?rfN}^3kv_3Q?(WWHY5c%4YXyZwVxvZ8d=aXpe z&@Qutd$?Wu#b^i#neD-6C&bK#nkoH7);b^UWa;^bSnExfB|61rPzc9uw$0`Cty|~J z!U?_Bbmr(5f0KW;3(|+!3!L0?nV{~Z%#TgIj4$fo4h~-?E&gHmIJVl@<74Hc*`=g* z5wj{L{`^Y!(~(qP|HP`9OA64sDuvROs+`N6l|> zHQVUX*e`7}e>VCHSZ!X;^SS;)qsbblvO~bU(n1%~lQCH*e~(pKm%><2DKNvX_!>-C z3sbawJkx=aIxpjY%d`EWHK{-RXog{439Z8GcxKPenJ+j2D$8VE6uSI643jk~`xhAI z+5g-!S0t-^=`O2?H%W}7l>H?X-C6E>x%_qA+}aH|qatBX&s{`95*mqg9U8eCz{fRb z*AMgU`TD)5e?Pl^a4&bL?^y2=^tNij7xp?B zT=Jj34n}-DcRL2M?ZD~_T`hCvEq2aH*r{pNQdJ&C%KWVUzHzR`jhxfvX?=(r zZDf~5e<)pdKlBRSQb<%hC`{r319o(;1Xh3?Ny!x}0002PhFKc` delta 20444 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_003_short_fiber_example_002.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_003_short_fiber_example_002.vtksz index b06cf52ccdb7effb41c7b66c4a3626eb1c8bfea7..fcfac7fcc3ee64097d3fbabff333be779c9ebcae 100644 GIT binary patch delta 22453 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 E0KPPkvH$=8 delta 22431 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

tVdSEtqdQN>#Gq`w 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 literal 3742 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 U$;kidko>vwf3n#h7YYFU51-{K$p8QV diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_006_filter_composite_data_example_001.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_006_filter_composite_data_example_001.vtksz index 198cf7666d83b1ac9600b119d4018960d574d56b..9fbd0007eeab542dab91355c526fe65ab67d5061 100644 GIT binary patch delta 3641 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 D*b)2m delta 3636 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 K23-yS0002iXcoEv delta 3699 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 M^H{2pa1{> delta 3684 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 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 9e6e99a8ba7eb0a2fa7c9aa8ee15341ca55f2e2d..53b28dbbf310209119eee3a46935681177e29050 100644 GIT binary patch delta 3667 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 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 4873d8aba7c799fb61db95db22d60cb2ac068a51..71abe6067dbe78a633ea1cbb7d753f96788f9950 100644 GIT binary patch literal 3727 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 L^*@%AhUUKj4Pg;= 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 61114a87d0c428813accdc9f13fe13f6d816356e..6377416f3e0c6b398617be0bd4043212c8af3ffc 100644 GIT binary patch delta 15703 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 PM}Xpl2N0nC^-=#1N#uT; delta 15718 zcmZ9zWl)_>ur-Q%aCvce4Nf3zG`I$L0t5)|&V#!cZcBa?hqU{x?ux1=R5cQ z_-@szu34*ldVbB+)J*qeJi>H50-mY@JOVxp3=9ek795`*gSr1N-8#IJQJ`s5jb4rv z%4%l$NV*yRVmJ99>6k1QfPx@fR(-*T5K$>6L4{pA32albvhq}NtEhOW#9vG)n+~6* zY&gY7gLZe74dj<2#0pvsP-CLYs8{+DzjS2@ybZ=_Ek?s z<|xbb@Z08Mp5kqUQy279c1b9ZoEgSTVM9jZD2Ng7k3IbXD8BgNPN@z?uW{#GuU(Yn%d{vCH~On>XR^F33s`1gd*bBp=L3G z$rdynLHLueR^r*21sB`=o1W6>0M&s6jq+GyIQxbUKc~y3+Eid6UsfZBJyKn-v6_d$ zx|m}nQvY~1dH=9417LZ}VXqOoatB+KTaBc*Szt$vtqKu1r|=-1-%5)eG}t zjTH<(47$K&NNoN+*ro0kbFhtMFu_`mw`uNk)@BGCYx$ZFw|>`mIZE&oK9b^e=urOq zo0&`y_+!WFZz4rwz3BYLj^5J({_R7E^G)7(%_GdyJs$X(4^cmy$`*7(8Bx5;NbeZEL>i#sY~2gzeuoWG*|*Algpwmy@;9>aA&J@rrV{9OR(Q zhqP)Xu42fFe&zC1Z0KhYv%OHfxofm43tcPjIr^R%@D(WBM&qZjmFORGCb&3C414}* zraC}I51U#1XX4ZE1ZYW#cKnD8RO!?f>_kc9rG2l)@`dJgZZc4%(71)yRXMx%@``zn zRPsw%`bHfp{yc*vV;KTTg;ajX)5qH%Vm$f89>UgV@YxiNH~4?pG_J3kmE0i)@SNB4 zXCrnk-ARDX3bmqZSSYK?jW)5HS^|I!TNFqw<$KRXsl4W9J`1JaXrZ#h&MV+QO0)VU z{U$VM!&Js*KxyEK&55wr^3zD&4IXEE8#R=Flm%;6%kvPjC3cW$?81&2d`~VS+%SRvzg&hGN=IJid*FW|kx&{^Q;pBGa zyP)O(2gROGLrJYeVCcbQn(^WWzvN-MVUZhi_|qL<#PqRzBdc}yz1QM224bxHylIxK z2HcE(%_X``|HI+!(xeo(iEP;_LB*6O6MVuWQ{@_^bqLmk5LsP)Br1xDQ}sqe@k+k2 zR}4UoT_hb~t~D$v9%=<`)pqe*li?LzSkzk=*_opI#g9fDGkuQ?#g4+oZT820K^k&U zEx{tb+zXK$&qsW|J=$>kdK(~HqLR|YgCw6c!j!yA7+1=n<-_~l@>6(IBSx>=d1HPn zwNO4Rjl1=FYE!Mz>!U(CTOncAjiM+5ttdeK8l%YA$z=TTy@#Ru?H=mw|G6jkT`eBt zzeLuT2A)qv24zVaF2Mou-YcsFxi|Dvzmr_~_kP%*N2<0^G%nP!rk{Og1q6Jz7XUGFKBEl1bAGylOt%^l35M@)vaut=do z^t#J0OoR)%;o+|tGZX)`_4l{4rRE$U=L&<_^02z^h;h^4mw?Q}Mv2K$xsp=FvH%j> z?GnXh*8pvbV#sBJkiy5vgkA7{TU_VlY;av*626t^X%&Y&xpap)&ih1A{(L!&N-8b} z_V(WLzx>KeWb=vQB3ngLTJ*9+A;8x5=uGmINF_Ys16YsRcGJ`qT?xz8(lO27D z$mh~VJ;fui=?S+0AFf^e-Pw(N2O&Mnd%1bP1+ZE8+(No}^5rJrRDi_DjqYy#8%RZ8 zXg}ns9j>~OJkeidFsM?u@4Ks1`BV;${xjpE)>od)U-=OeZ~3>DCnANuwo6lMNq|D6pMQvQt}sOX|pg(L{gcY_6E%3k|lyJ@*JK&x`jS^wz|A~!_y zgnx*C)(+hIO{%Q$8X)_k!&>+@?=d_^V-Nyj06F9msYyNQRCD17^Bn+lAXWuq!`pjx z(armZu$ce_!OpC8ff~#i3b?a0$wZC(mbw{sHr^zL5z%S zU{(tk@82Xz4y6xw*d!XFiOA`mm}|vvWk0rD^r;}W`a{_TpqZ!19L+smR4`{yL*%@8 zVfu6Rt-a^pve#d@)RI;Dzl@hP3pz!nM?`n2PaozH7qOD5HSr(W_w>U)kDM2YLpx1f z`um`0HB~%QK;4s|f>_Vqi@dcpe$UqjKVfT}z5?iw78YALD_vQfxBkc*PK9&f5Nx?K zO#rFOiebN@jBKy^KwCP(Ao9>s^-`Z1egUDA#&06wLo|NY@s9d{de+0E`!>pQR2ZC0Kh zOz-n4{jp2%lk?w{AVE6Vl%eKq8)-(oUPB88wh(SA{L{n-0*`4)6peCK%E7PW;y}lY zebR#uVElb5gkXjgj6$xMx6eMc%-8zgbJd@t-;aTvL>uO*$}(0*eXh6hom%jAA7s0< zJG*KTI*T$Itctp`?eSJr%~XTO&PBkk2?_r44<=5|7oU0m-e4Q?q>2Ptn+(YKjHte% zz?)4VBx5=j-)y=T{?Gt5+jrbv-#u1{4A$cv0wwtUv6?4A5!*ODZQeqYU&6a8xDrL= zni4}$D65sCzmXk?MQA0esNf|z2zZh<(Cv)}3|@sRh#fI?_X%gd*;TQ2 z9l#(WS)H!u&?WS;-hnULnhH;;PW1Dbk@3pPnyw9OZH?`GwUw#B_m{~%ax&5V%cX*&Z*DOLYSGswXubG`ApKt#Y zHV#E)tJ4~1I|=dIft(YvxO}#@Awc!vH{d`keX@XYlNzOb*1>kM6UMHhhV)wxemQoK zKeHbq`dhDJ1b4BiV2+Zd7Sk{lp=$Ot)}^{j9_@^_$Mms}u(0Y)mJw`dA>IwbeC{O0 zc{kxsSy&!sPg(lZ;EyRj1b0hgt|VMa(LbH2-cDm`*Gir@Y$C-@+b6F(Kl-&08+hlC z;`)%%8wOtOUE65z!zJ6e@m$H~PES~}z{!cy(34bfAi4Z4S|+4w4w_eS@BDiB)V}O( zFzsd~YHCnTiMVHs(RV5(w?z$=T@M5*!Z4dA@vBE-H1V*9Sn;s_j?v>AcV^NL{jjn6 zF5FzKlA0HAzJR#ikkT45(K;Em1IRgl5D>7mVairs3Fva-wc(+sI~dq;HQjGO+rSWR z$mch*2-a|PcV%mia8P>H%++dx>yzDWi(ieXjc00SGDEx3Yy$JYNlHL`PIRFMC>5|e z$olje&mpOU7b#wX?qL{*P{G!xrZS9~t)g|r4qFq%LQRpfslMU-&-~V8z**#QP&cdl z*8be5R9?!j3UmU*NY&OpthGxKPg!Tyn3gKeEMlK)zMfX2V*F&3yrOsf;=AdMv@0Ep z({m9j10;OGh`lP(M;sod?R%APoqnzo>R#ag!#__f5%P?O{!+(=Ly2h2ApokbMq}w= z^KcgAcFZbx&(h^P-jV-^1zZez>1(Q=wQIIzjfpY03;6E07-8-$wHjnaN`Wh@#fop% zEO!`!@xs1;9u%-0h?QKRBFKKK=PPee9%vG+w)liUX72R-cxq3=Uts>>XUedTv}A)v zk`ATS5Yi6+#M$t^IgWg#Q=pGXD33-BT$IXTcOxtsJ;gAXO+O@s0Wf*x`sNo#+FLIm z*+C=vwo|>Z&w;*Oykj9c$g=@v{4MN|w2B1g8k)mieFsf|gLLPShV2Jce4r$TTlY;d#Ta`q zWd&<}o?iy`hC82XBJJ9+d-zkI7l+p4;wzfn(n0QUR`io36L5s#wvh0a6RkhAMV<&< z{ndwGdq|S8^0AZ?ty`^Ff$5h^1UkFM_yxwwWQilJ3p3^vvB3vTt$F07rkA>)qb6@D zHxG$hkAe+t+xA85p7G>)u8&OJT>N&f4w>gCa4)v0K9F)YXh&H_zeOTvC6n`!wEram zxsrphq-Ka62v{#K(RPdtnrSW|*LVvd+qrZa#?UOx4YdWMC5m4}c#Lv5y5l-N1nFL_ zsA;E;2HYdbykXbSqHhx`F)Qq}w@dbXNvvh@`ZinR!8Vd_jXEUzgJ2JID2pE|F74~J zuITukYOlfGmkbkiFAuNuvlK}|CDl1*0qa*?q}bpJA7CaHd%ON}DREzg)p%;nj&$_( z6{W?Ni}++Kxu(~^hsgGOH39f)B6SNzkxZOxRyA|ew>`*!CD8biW{|Q!v(qll4q@4h zZ*RVCtd^?Ps5gzwy;6S5I@1G15?ef2_)_B`llnD^V))24M~h&Eq3=m`nPrYsS6i;S za08L?4EPc|aZ^z~=BJJoi>EExNR8%;Iq=n4e5uX*?9b05`2PKy|KPDF^Kv_nw9eN) z1k5$ij|NNKrrvxXhRsEX)oAd&YA)eG+}V0z-MW{gyQ1`@tt(**h)Vi4i^}p9CQ6C? zoPALod=dA#*|bzxl_M5j-sMUaA*0I;0zX^90td*gm)R$Zm&s37YpgpaC3N=Q*c(<< z6taq~3^c(MEZ%&#AGaI?Rz49NXVg^S9#=Nohs*lAjh(brI1k1<;A}sq^UZ-UpDvWo z2hZT;X^8Lv4n zgk*fRO;sju>m{Jr>nUs|67Xw@fL~e?1_u6iiQ(<E z?_2Z%k2G#;LWSy|&P02(3FR3iId}h%kzr0>=Mor!NwTr+Z&zWByX-Zq^h2`#4ZiR0 zIe1>I%AEu7`~JRFme9CITygmnxH?^Psg%OZVrIc|f~Gr#6Mhh?U_%lPC`ISl-^8*q$ z5f`^KS?uU)po-SFpcSTymKp-buz>SMbph>@SBN=w3> zofw679>iK2@yYKKF3Haja(q1ku-)G}jBSTX{{{JM$yYPU{8g-Ox7@!TrhqrbUQ6X> zApZ%;DEwZHa_0;JCVS=QeYNDj`(ksI7Yi>3Y%tE3zExV7n9Q14PKL|wVU{Lk<;Y`< z1Z*90XZWP?66&YgOf?#fcYYyqhYx?Snt_%WL4>xssw56mLUe~W5*es7GuIC(MsBW~XT zj@-VU!uyr<)a!j47yexp)Gp=C_R_)eSW(4~LW%1!pJ&zFzJI~rwYHn7cM!X|*vnab zYNGy&^_VS+nxzL1)lO6;Dgh_lWvZd!6s4C^xu5r1*2rvsZSz)Ev=UekzerVqJzQ2% zJMoAU+UpfDkoc$(ri<{lK}NBk=J8)Bnq8OoH34R7Uv4TKr3mc7q|nJ}pgU7}&JDQz z*vz-lyGCwhC+-;(_1ehz$Wsr@x@28W#Fo8NestFGEZw21v-i(*mqA8;v^LN+h<}#Z zy$0_PX+*}R_X;wq@Bq%T`5oHUY&gbTZ3oRI%_-sWI@?Fb;l!UB2R%=E%r4(0D^&ZWWGOTFAy8KT}( zeRa3PwoR&$-WO=JFA8?x@hvR}Bf0knZNJg|C0A&{tWj+9&;$6a!_L+RzwO0Hfin{? znCnFvr!uYtn2Okc|F_FnSvxrlTIYmShaKbq+G-GEO=|Q=94of0AK2hc3 z^Y(n0W&s29f4q=tc2IR^e`~Hz1qIU>KzId6_q~qi=!2 zY&XG;n?N@$Pb|ZhXSggM4+Np$K^)Vz#YWh-jC*k#Z=O8n6lYMPa znhLy<)YbDjR*T+b{V!@@hy)KmZ!AL`Ku^#|$JsErB}apqW_m+}zs0b_r16*j)E_2P z_~cHXnt{GRatI_&o|x`F%tna=Y!8yxqHJ@UhTw^epJhO%FGaEylVh zv?pB7-tkO$h+H4KU0;Qw=5P9^)Ai^a%nZA(0l^^UXL=XZoARS=v_rZ`iw~WD4gn|c zG}118T&0DK;i{~f#^LmsP~>W?$>y@s*OMXojshW@q1tNMaQC;rE**p^4?%qiQ>a-* zP}y&7qR!erg+V|0PqGv8+%ExVl>+ZYccz}C{E1)Sf+p3sP$&MaZ0A9&?_c&?6#S8v z!qIs3(GHE%2qQnBr$KG-bmT_3`NpQB_IFpC5y!Thrw3!~KfO%^R`8dXdN6@fHvibI zGXSHMrKywz3U6g$zdf2c#yIKS?;E+N9%~(KE?^j=7za7&0^>7xx^DoBu+4xd!xrto z5mYPWfA9}mUJHI?E-+yO2P{zs%;Yzm?s+;X&??wzqiY=;#laqNPnPqP|MKA~5^Ag{ z=v~Z|C%mhRpnBaA9YW~f{|+BpqTBeI#0X&>X~GH8pax%**}v>|#y$BAEcEIS(6s6$ z66O1n-Q;OZQZV5iKCT0dA5oA`gTODXo*td~4YUCfEac%^%LcWEZCA}*g<>Y)@ z(GQVWwb}jnIgS)aYA;U9E8 zIb`2{+P`6Z$Q6aOfAr=TyfaTbiZaJh=NuRAIH@AGKS6g|*L?H>Rw-SSk2+n_uSmU} ztd^}v0;a5cC?F3f^u6gJO6h4~N-$9$3(ts`)h^rm?t~dRw;jOT8)IJu?KKa7Q}%W~ zz`*yx!_#CAT3~VvE- z?A5#YnnC5iW|L?H$PR-2SV)hx97{Lya0^%mgP+s;}l`y!z|M6yuWOht^c4 zochD^M2Z*oz40Lgm9D5K7?)V*0m*p8SQv_oGV9( zYxTSOb2@w4ReGnBMrye3YJlIQylk#^8z3R%lP%73bJ*+ z8KvX{H3ekMfLnmCNov3>Te7z{1x{Y;nWTBtJ&AqQ>Xo{$;gnIAJS=~38@Jo0M4RU&`=3D++}3oX^jn@Q2=@|?O;rRPdWBCh)z_5@ zJQMum#xtv>M;wip`8&a74yi<2TZ2c|IT&`!YNmRSkC{Ie&Eg-q_8e4( z{kCef0MYuZvWGJP;m5wGJ@t5#MG6!ifHZ$!efB zWgmScC=o_={rrQ27q$O!?luxbY?N#~C7B|ywk&IX5oGj%w+9pXB!>H%WU_~oF_nP! z`cOXOJJseH3=7__(hI(ojN_?;Odh(pDznrGFJP8o<5O0}8ROnr*@u(AJ8~5_;5Mt0 zWjo_M{)}=XTP}41M>?dCt*&8xh3D-0cW|!q7JF@e^vmtB(Kswaudbb;bNru2X)nQ{ zPbg~drNKH|YoCxaO~~mjzn*I{tCv;@Z^l!nw8wo$x(j*IG`*>ip7qfTYjSH(^u?9n z`V4R$+iE5Hx38|N~Pp*!R8;XgCQs(JavzUN(XjsV@~liYfEmKA3pEp z>6|%NqIq8_oV3?NB!kvUZ3ny8M$8j}!2rGtbQM4dG52JW`Dl3pGbuwobCEWm@alYo z8|O*-gqvv5V)Nq=c400@T4AH!UpAs}%%Dc(^xbIlqD5^Ud4`u{c92S;-9$%8eKk!f zpXD{!#3P*gI-i~Bm)oL_d7ftLH;w03@u#!GpN*(VJOx$$TA+W9fb?`ik?Dn$aZ z-8irY9@js3R>z<1D&o|fjF%iBKRn|5ZY8Tdp};MKX;E%QP|?D*CuUp*gp?X`Oc*Q zyt?ZtoyXjnnJm!Ox~shwoNTF!7(Fn?`13CDO%*+iZxxYUTf7f45vOP1!mt1$%vEaa zFO0I*89Fb`=Xt-)OU@!RM}TR;h|NvK*-bMcP|4bp^(tuAp1mT)WBe`ZWA}#(IWEen zDk+ULwDC7ola7-(y$8z(;xA-bUaO$KfUIM~5{q}KbFrvNPr@b#k<*b3;f41M{H=4j z%LISJdaX+RZO#|t=F*%{*1P(5IhA;{@)9^BTXPA@?@63>b)p)J=KvX!G!gG!X`@YxGy`HER@q<;sy9=PL03WO5eHyK{L~_zH$(Q>yuw7CunF*Gd-ZJ|H*AL@+qlkdZN9L0|1SS}-n2<8TYSY2O6D z4Oo4NP+`Fhmtb)=xds$b3l`0>?U!WgK*#)J+xHcgTg!bY&s+h($vw~D;s~KSK#(_^O3qA2xuBztbF{BOgu^Z z?V|qNxIe{A3S(3qu;PDm|Dhsl-LW zuI`TM9~ggYh$5nPI!b@#Q(0%z=043!O>ytt_8EUGs_(LW{y{;eMPp-0RBJS5+;Ct7 zGyYa>?blY&X62ZhDM>D{(odQ4;y<)J{>IQXf7fS{)0c^l!&tXo2s9qi{1~?Yh+P!0 z_N`ASKdp~ZYy#}}W=jbZ_!fE(M4PBJ#s23quC%cbd5w*2vAhTS3Z;)U=NqY_MC9{|{egGa#i*joxK15=n80)%Z_tgW} zHBk@_TcZao@8e^3y$39A-118GmUGHZSzXBl!9BCxM8j02xM$0WV86t}aB2VbQ=_hP z75sW%yOu|bcPh-wF#jL_(!V=gRY3p0@9ejDZd}(W?hTjNy-LgNn4gzo8{8X{eiVAP z0AZAMdoCs;x!8^cu~MFWFHGD*n5TOIOab;}=pY=AMt(6F84s`h3``O)pWf)_K$g(E z&HhRKQQG%f4EOs&V}X(O%CNBekjIKLn(B+7;Aebs|1J*|rAI}HLL^0|Ge1Fb<_uri zws8nO>vZvpk@1wkXh%*EB>|Ttfdvi^(5&#C$a8AtLwatrrjRRt2Jtcms-~@|R_VU8 zKg%o^bDMC;g+d096LAD9XEnU=oybYq3!&L%K98wH=H_MU+&NEZn9MVu-%{*<{k`2PM2o3RV%~m-}y8SyToErYX(7qEt>Flp0SF>2GwzHH@ zt8HkANBUd!lNpnggu^mb`C(&wb^5JSr2$&itCRWemp(S2BK_6{(!5>E%(3yDw0QBG zu%0-HsD51;-aL)|Hru}$-ef{yIGb9r`>Mpq%@@~=7bNG(wT>+9}HK~!I! z`da)a6i00<lajGf@et&gf8&czj39+Ynl44P z_@dUMYDYZ#1^v`jFb^k+piJF&`wwmneCWPB&!8}j=i0jJ5ezx77ITh6&K>ok1Fbr} zU)x0dneI~xeyY#Tn+&!Nu1&jb0#l?HEmZX)eCT9d*4jFk>A{C6_zcNSqu?!47O6!tNL zd&|Tra{22`JIb*R6=M|y6d3e+9%W|1r|7pzxnf@D(umvqB`hw@h>keRq-82Qx^Nak zJ?EBbKXEEr)x=4d0mcFLNJ0|n4|`osthm@GE@>Y(CaD6tzIX8#R}r#=tbjjLh`Mm` z4A&JKO=t$|EQ*sKmARTvp`tYHtvaXN{#ZQ?31FrjGk? zih@=)brD9;CM7|<+%y)k#ITg=dz+WOh-8La=A@F1OCrh$`>%NJ?{{BAIjmUxMI0h^ zE3(*1KcDX$sDL?@77nX|jd2neW2Y{xQ`uwOUgQC9fyf_uj8$2fZ z5wqoN(MS`4OJ`s*#YQ5mUOjXglOkWzX~J;zK^?Ar9FsnYwg^Z4^uVk|yB>Z)kEfjs z-e)Xuv1)?F>Liurqxwb-C+dde;R+5KOt(Ez2S$I z7G$2Ob%Xm5jhMG|N^mLJDoaekDRo^cpl#4OJUn78kGhEjPGT_qNelWNg!rvLg0OA4k#DeuKCawRBe7U3sfjoP1!zqy z7X50?uSyR=qL94_~bhrEjMuXCyKF02%3DTR9 zYuSq+ysT|U=>SVZrk@Iog8LlI#q2A&JlO`xv$2@EihU1lE>Xo(IBIVo@0PLleS|4v z0p)08xla6yDbS|VbAZqjlBHhB4JAxoBcQVlYT8T!{+3&XRR7?Gw6zNIjWV1J+a)ZD9x_%I8q#U@^9EMmi*}xm8c+- zAx#i2-hy+zYC18O|A|vrvNL7%H1}6h848B2;PS!Ih8K(4G`C%g=8Y?>=wnXFM<9x- zO7q|U4pt^ldnomtSEAmNo0U}h8p#CPcRkBZkMY;fDb7o-3mRE{h6AK=7;cuIG1hbH z^hYO~1`cAzd}bqto>awTl&vhK2wT@vksMNknVIzwj15)iI0<(Fl)b z-Z!<9{A{w@9T^791GzGRyV;>m}pI+FuvmHRuyObH`m-vW^5leZv9TpBzJ&Z`9k%Z z*#7)@Fr&0($_J7qXc6_bVyTb{;k_rJSdV@lElnP|#1C)9{I#Xw0{rm08#d1aebaULJonCDr5H)c4d3v8CMhj_)=kL#v7# zrciO9#yr1ly}B@I1I1|Ai_~7QTBcxEsML8y-{52j_sxc%#aOCPfZCyNL3hRlL}brQ zQm+ku=SNEh2b=J6FZ-%OaH?{@DVhyKJFX=|lgfb z7_o=@&p?$>3PRVE1~)Kh+02wHNPX@tIMGj1dUE(CddQ$qDk=_L5+Xt}zaGVt!Tj>v zKFAlYZEvnWEQxVr3(sHa*T?br(pEnZ9aF@13~H!u8e>PFo|yXK!tIyFbmTDPRCGhS z;7^TKYsAv%X~h`Wn)LK9u|pGgN5#5ehA*9a%ds-)DpA^m_R&@=OsRzAh`A@u9NqqCGpq^o57HBhO3eTpysslI$eF$WgN?*Fx5IT zLJ+c(b0IkD3!`pMU4@0&pMI#P? zzL+59zR&mgNz)>}d4!oD>KzD1F<2WtVG_JQqcQ=ns}!8{iRV`s1_RC07D^Y17$MZ3(RIRjubm=F**GyNn zhh4`0sK%Id>DH?-S6F#%bLm^N@kj^u_m!@^3=i{?yK&P<-oh_3AlWxa(ciXq8vc<Qm~V!oq8UqXV#ciqC2t&x9qALosZ?z7`;P*x&LeX-Dsu$yY2U`Hq2LNaxh?i0%H72 zPj}t7N2&K1KKD`XtHd)F$?ImLG3l$1p+9%`{L=Jt$v3F&+u5GN6=;KTa^@gX=_w+@ zGjZ?l*M6MijL!|cesO|Hv2R2&JhotOheiXL#~1yNob74l=UHC=yIPc#DFbWM1)P{OO2;?c`rj zb^!N85XUpkVxPz3``={QJY|HJ9;ra83CUvt5q&+7~{+e(co z55&~T+=L$d=kNOOm^$x4sN?Jt z?P%P`S(JQ!e1bs3muIlw2uY+~ud59mCgN|z@%T6oyU=hHfLo?2$$-){oztsgziBvi z{E{C0JMptpUH{AlMz-*`>CMnV933e^S;(}!}zV97kx2R56-|nGPvg}A@U<$=u2jQ zLLSrkG=AEXl&PrNU>-BsYa|U+aTm0h@Ve7WLFdfPdq{%CvW^ zrFt-3oj;PNFRlh!PIxv)KTT!_%2b;3MOTCVm;EE2#2D|oXt$9xzJ&=3mbj0RQhr*> zeoM-JS}MT*VA@yhar!iK`gHaGpl$l}e*u|3{fE$h;B0?u@V@y!NP4QuqZ1_(!!_1< zWWDt_H3p-@CmZWzK>G&|i1-g}~@?CNtTcBX*So*|UHZ?Hq~)-W4?+mbfTleRm$;ok+laCs|1zIr|OJ! zx!UW`5`4i7Yv}{7KN5OfWKl{I-Y7xgG3EA@-r#Zn**;{pZebZPEy;Em8U!cqAS*21 zlWv>W7lsZJCJTnA**0W^z$RTyB|`(`z#mc$kX4f$%IHA(Nxs4K5ZJT>QjSrqR$q_m z17wpVhY=`@BKSilWq@2a^({QtsDQaY%u&bu>pvCv|H%xHunDYQ-^V}ySMdL;blV9K z*o-Ut=l?gw|ETep;13y;j&fbQV0gCe*GFWHZsBXJ{9jvQ5ZL4eQU=iThzBD?9J(pz zj}0InAm4b1_&e5JIsOvG-tN6tegT#Q@8)FQJ5hR`9Kzq^8ID?F9@4{iROg0E691|an( zgP!z|bG%qc(1Y}AE9dF3pZ&T5_$l%qTj5;$<9q1?wzU0Si*qpD$oX3w)<0bu7M2R| zg^lG*xIyIV?j0if{RBr~9I%J3=nEUkiG71e)!jQll!8l+Soy`|Ew6=4QNO_Ny z@@DkIYYg08Ry0)Xn~~TxE$S<@PER2NYF7Q%!NMS0uQn<(+FNIj^6e}otM z6ba^@eU+jHN>DZ!$ENw9m+t=xJi35^*Nv#FsYCeC*ERyqx>1!Bm1+~wrXa`y+VfY| zfBO?UO9;F^rcZCZ|2^GmY3k=p4+OFC`Wqekta@B`U$<~*h^Dk&wX7V?D^o6{32SD1F_nTPq(qz*=a~?A( z9~Qj*UfHGmaV9j#*-Btdqm{6gh)ZN*CW$3rB6@-WTbsUL$(C>nLkQzdi z4ZYWl)xL8(#s8}3Fnw&%cfbB=+r$3TeaD+Fu>P+Y*rGa}FaK)TV#zwC^M3X9u(?s zgkNWK(BETDWW#WE-Y!($uG|x&<)oFR2*n2y2v7qdmxmGC)=2a&2%|H+L(bW~?DtNlvY5BjcI}|10-_) z+R`qYulo_w7Tue&^)75kd^?ZGxsBKF@cxPnGA;?XNMATp%xu}WStPRPAy4D*T%E<| z0J741$c-QP3P%4LnD_Xti?nSB-ttd8@11g_mtbsL;$5cxM?d8F&QFN27ason5SGcm zI)2nn#8{`Obo|y(;Q$<9jdf3+#@`JscE)6*D!xy1NAKF$$C&V-9hqEd70L$5NXM{? z&%;xVvf#@}P5+D;v`9=cx3-rrPD86g6jK}zsgDto{mDG&_G{Gkmss={bv?3~!l1t- zq$Dp1B&3s>Vw19q92~DZgj`8}A&tFBG`4QW_NWJ{G-mK-@H4;+Ay+6zXJk9^7$mYSy=k#4ouqU)d(-FsS5u zn20YW$qWNi_Hb?G6K+jt$~MA?+Gg7$VuE6cqf-Q^1ce^8X+tB8+9j+A!5 g!osL3z{26fBKlwS68~^|S 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 43f7e9007903fc16902c30576e1e7b14b28ae079..6dad43f0f1bfd64d40ce006fe8c470cb51d81920 100644 GIT binary patch delta 14587 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.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 S-?AWE6)Zu>3I1Cafc^s=4gXO9 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_008_assembly_example_002.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_008_assembly_example_002.vtksz index e983179116e86d534941ff9bb5d5d3ad05e2e56a..1dc6d2d7ca44846544387623e8bf0857e3c6512e 100644 GIT binary patch literal 3805 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 f(tl1Q!{6Z!|#Iq?rFaz76AAU#$rTu literal 3806 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_009_short_fiber_orientation_tensor_001.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_009_short_fiber_orientation_tensor_001.vtksz index 337893f12fde612ba9489803dfc7937b6f51719a..9a3b0ed952cdaea5dd6cecc0463fcf91ce212144 100644 GIT binary patch literal 23380 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 delta 3395 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 Z2mliTHCjXTt8IUizFRW}r&|C3003{S!ZH8= 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 8117e6e50675ec9dae3246b97e9c87d934111bd7..f7c0c1504444c660ac5ab0dd6863ecc573003d1d 100644 GIT binary patch delta 3490 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 Nb6Yb8TU!7C000d(0fqno 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 ef0cc663e3fce1e3f143dfd1adfc07fff08032cf..12c279ae22b711bbb6df19dee265eea53c094d54 100644 GIT binary patch delta 3373 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 afj}r@8W7XpD)c{-#t#z&ll}@I(0>5*wyt~t delta 3373 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_009_short_fiber_orientation_tensor_005.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_009_short_fiber_orientation_tensor_005.vtksz index 5641f4ca690939bdefb24e8e1719436b49437b71..c62d2f22cf3f9033ed9f8eadd1c39b415edb2828 100644 GIT binary patch literal 23691 zcmbSydpuO#7dJ^NX(~yQneIY0NiJdLkV-`%Nhm{#N<~o^V~$IaTa-!{3<;IoLgY3i zx0G=wWH1HVoiwno}~ zt9M^p-vLC+>F6(hkfUg^j*?U#8U#T?}sd+of# z?w{TRJaPK?#-W)o?-SJ0-2m%3Y!eJ?lUrD_Y`q1IOItJY!H6`!A)yymlb9N7BL@N#xsK|JS=vgDu9 zRB-@_U&0eB{v-OWVDN#mf-Cf2+lihef%68#pQ31@0q=_xrL`p2vnS=uXq~cT^q;9p z%FqDm=ew`Gci_K+#m;^1es$+l^na5vqdxc>jZtlC{$CweNfrF0(TM4k8d$aPD(c=- zR@W{#5&x%KN2;!KZ`T+zTH>>CO}eFEK35Qnm819Shj~ooIiZDxDt}+%1ajdlA^baO z@7vU8KW^&_lt^3+$dW4tq^eA;AX#|cl#6&$Ran6fQxb}Nw(BN9*J`#TH=7yG04KY zGk|HQ3jn-Y%7P@pvzjBE?O{I5z!mgS4+(|WJleCSr72D&DS>*(KpnW|eU>=<3!Q)> z5D6@?z7lDGH}u24F%BJcVBiD~dcUpeeJJnr>JcrC$9Zt&+5cZ<H?|+pN$qOZ%qo~`F{m!bjx!;Usx+4uASRBK+2h?j}}%vM^Ptyyt9U& zH9<8u{tAuA6{k7&j@YFJT@;qTU5*b+HRzxAU6fB>S3i4Ec$y>mk8kC7u$SM_p)c4v zpiv5Blf>yB6eBNgwB#-Z1v8E`<1gnfRov;OT01LQVE3JdWMc(WWf^ zR^lYO=ol%k!)_IwGa;``Ts`68?PI)^l%jZ_S0^#xWx%G%?V0ChR()B4oA6n%kWNVh zJahJ3gdk<{zg24NW!dH)@gWeN5_~8UlNl%Fx={eHR3Lf1?@rJ(f?|(n2(PW zubCN2?ySB#$tC^$Q0aWL>G{ZjC`GW5pJzKHIU52R%0gosc@efQxU6dI*$|=*@4j7+ zACs;|ymFwW4Iy0MB-9)cG!1PPU-f=MJY--Fs3fJ6*0i))tsu`WmJ#M0?K4ShQp&52 zlLo{Z?54k{=Ak5xF3O50Ix;OIYH|Wu3=8Q48H@q(aqOJ(&}%+@E{=JZ3~NgHOC6&T zVHHW`!0!g}5@Ps)$#Ftie`Z!tl`(3FwpB=UAf;Q)u@siNstCSOJb0zJV2=qp7B}*5 zS0N#0sfQjQB9v0N|KpNIm$(@uF5$%zH=H=fa$OSPAPAt8@RvkP(lI3Zzaj#wf|nY- zBo6Xd{x=TY=pRWmt$D&~6jy#>pSXghOBg`IEAB&)yXH-lJSzv{BFB=!pCbd17MCwA z7)>FK&|IZcCc%3o+)YP_Wh-h5#D2UhOux2;5>)m1t}tOuijZ)bwkX#O(79uTkop{o ziZPe)s6HodsXR4Ri=n=|J8iLvVnj{9%L-g7-`{0TUAjguYL81h1TQ$uSzTmN078& zaGx`1(esi4@uLtRu&Py^@ECsF*zy;3a(I9fw3?nvu{H1uO8)+Bnzpg!G8NJ$lXI+= zNUvd1?Gh=&drq(~hf1P|8emnyld4P5NhUAwKE*Sfb zZgdc~iQNR_ebpJupbdGFu@rEKHXyc}<4cK}j7YT&wabjPaD)6ESS0M+B+W*sx+PLJ zse*NRsaK%@ZdDJHDjLa2%Ot+5MGYGHWLp;?%LG1`P|`BKT9pXLlzTyn)8Uhc&O_*F zP*b7|!4K?@BHV;6KiXT6Wl5w9JPakQk)6r70LJS~N;BeyphEPDMBeQz87C&pTfsx2 zWlL>?J*E-!qMKEajsaJ6y$UL12hjCd9Nc+8$A6B$j_vACBm@aZQ_!ZQ0hW;pv_+YM zkvyy6v*6+(tghD~0}^qLzn|TNktEdc;bTBbvzp_luW8951rpZ=-J`(H0xKS1ffEUV zSgkPDBs~Q@2Ftp(rAP98nM7V*q`og7yy!yCH<7r8K&4`jshvuV=>O-3GE1=~S&D~$ zlD>aqW_jm|G?KJHd=Mo8c;qu?HGGNB8f)%G4XWdyH7yuYA{yT76vVGYAk2q?&g4e; zGvIz4jY>&vw%2i?>OF(V%MZr3myTw9PY!<^2UOk5x@1sPV$0>0STz(i&R?vf~SWE#MJM?*93S)iqUi* zTc~CX_b_XMMW>86{6$&v_5DEYSxJSswo_CpOw=%z@V#re{l#}{Si_<7R8L$LHHGPQ zKvE=O@v_*>W4QN{=OBxpB}!-}4HKX>^f@34o+NI4$``LWu3|BoinE-IFd}ahi|9h! z;C%c$%3qRIQ$vINoE3xqkCmd{^H_K50SV!IBG>0V&xhpoA3;LeGB$2qu6_1j&DdsRD|=qz|>Qs#eiX-VYTX7E`l^O<}f#zx5i3&0JMUyM+KprjE> zgNj7NI*uDezZ|CoVpGN`b+#gS_ksdI$2Y({Kj;mhY{j5pP@FNbw+1x8lGT6+Nel`A z!UVq?Pz4Kd1G;2f2XF~JiCkd@&xhjiKb3nExytu?z>h5Tr9LHCi)1g2A3i-+k`*mZ zRGUkh_41<@lV}OSzeea<6w0Ms#|;7b`8DDc~~n57*AF7W`Xu zqfXTbc4}M%cgar2y>}76*!Y?JERsAhPFw>XNFhs}4^tX^xTHg(Z~jpLS18RFdZ|EsDpkUS zN<`w?HSq411Fwf+g}Dt!Ag-UWANZOEg0;4yZ&cJN2Ax(RzDty})O{05a01Uku5A=- zmK0D@m&j#hOv}#`=OA$+M~Mp!h*?*RK@hVOMI!zL{poS-F#aSOaEyGgTCuDa^9(V` zuS)Yb$q%b_27X%lgWVTPuOy$<@&{AugMf>hD1l_sg$1H1d~U-XYlKS0pXve*cRoOe1?}BM8Ha;1b`K z{f$X)p$>DX4#qvu+B`|i5TCzu-w>!#??YGKG;~hexf;Mh`BI6i7c9~sCc{!Zlp;AJ zL?}~YNx$GlBL+3K(rMoqFN#qxiTs&x$ygs-$fA#YW4uiUVAA{y-0BXoS%914TCEUB0?^>Inf1sZog{?L%r*;;*fQ@@ z8vZ@STyZiyPGBY%=TGY#FAq8TwRH91KQXzqz5rNPqVsS_{EHV{FjmQUgHG|$=DX+=%n`T49U z_jXrM@z*@BW=Rvt8?VAS40_Z}?ds*Oh&4({s9U^n`gBER3a zoK)!be+1cha1&0|P&6}oTxjavzb9fRir12#XkaR>8uYc_qg5(jIisaK1g{Di+kQl~ zIkiu33TG>1^jx9!oWJpKFv@v)8>xAs?v`<@?Ox0wWNygyw~=L8G=4lt7&92@th$Z*x?N|h9&$qMpVn!J*@Iv}K4T%fVM1-28EAqo9>v_PB|SmmZ+_YIGubDzaRg%nmM@-r+Wa_Fzkp3edPGo<@PByA`fFrB_3t( z*@=*krnluXGK&Iug=KR zI6G0}6%V}8t~*r`LeO_H6x4xC=^yF~RGXyMz;nBGm7=CCPc6hI@2&$!lt*OVIs@mD zTEqOqdAGEaenhaceQ&EsMjj&fs*M~cTf-b)nE%Zq8`as>#D(dokuA}32j3C13>d)3 ze6_^n?g;2YJ^*#8iAMlv4I@Ns1H!||z#eEnX+#5jv@3r_;K2Y_R5;Ibr9l@7TSpG* zDBc*Qh!2)2N;62)cY_3(25EAf4WfeEa7Q<&45pe#?c+rsyL%KdwVUVG4-@40(#QUs z6Gb3dJ*#1bUup7oYJ5>TfnX~@rRfG~CBgpE;!ap`Q}OQP7gl#u%@1wo(Nabp4nE^& zpI(xK=DC$GJZKue+CnuU3|%>u8&hcv*rgyqoqB}vz_g` z8AEyk)QVm~js8Oj&XDD->zYab_Em)htNL1wEW2Uc&y}{lDmP~Em9t;9v*PKv!!}oq zGkaXcyHpSYDf{w6;{Cn;pTXK|Y(2Ihd~Et4SXIEN9&MTU#x9d#77(aUd;KjDhfht^ z_?PNcQ|CKzk0DeiWH>#)e+Y4WRGNJeD8ol|V$QN-vY(Uy9$h&Uk~w4lE7dwg3MWBpJn z@VYIqm9f6nO^k|Bk6yNUi#A?UjoPrdOUr)qvHDt6M+(B9{3WDu@8!#GZ z%?uus*#QiYGfL}6(Ze`7yMGu(=U(uX)!C0lsc|y!YBu)RiF&s4RGYJES5)Q>rqh_|bhGtBcV?&eREPVK}|Ej}o5)T-8HD z9}eQTSAI2>tk3Y!@AVgTxQpdg5ZuI}H%(dvjElgYX7H-|+?oiej#46 z1!jTB1DNo?_`ZK1?kQs%I)B5fAUi$eIW>_34EwG-kJYk;J*(n~UX3>!;a*`ItX9yM)NIE|=Jm{uI1h{hW0!@x`b zI1i(X*xGk&!&@Q+?-TP!^AzIee@@(<;2mfUJP2d*qLc^3yh5u1mYtY4%?sQ{vYO=d z@>bG35D2w1r0rPlh;}@sdsZu=$cn1p)@y#@oRNpVVIv z-EZ`}{SvV)r9L=Jf_x2*UuCzg02j7>b%X#J7Ap*V|tAe%mvxBnKP#uUGrisMah@cxA>*^FtWsNnLd zsTVQJz}v3E$#{zTdGH6$J~#|y!%PHExSHJ{dd()~<9OAj795Z7c$HkIUgVz7ey6aH zAQgd?G8+yD0`|%XL2PR}^BH8becDc}tj_{Vg3UB49=-oVv3%S8Q<@Ab4`km#swsO~uDcd++c z42C{b!cItzX*{MmY=^VXXK;52@>qtj{WjXVH_&2#f(?R~ZlF8;2jid(_K{6>&e! zpmir-hS?lB0tjjG)O>6#5(ZF(-(H*GIgrN5tO;ewA9939UK9b(;lg2wBkaj5WqwnX zqa?<8!6G?FWChel58lHn^5gm zL@y|JdzpY&NBs3tQGqtXE!Jq`cx842Ge|$P2fL@kjb9h$xzK~C1ddZ0dN4yULwQ_o z`l*z+I}Qz1>S;blrP;gFY9trID8#-dZ)TT8kLjGr1dMTtf(-rQo;b+F zISFAoF;BG|jDIp81{C1`gmJcZQjZC{VCDi4bdh8VqT2cE#k))p!o->>8w91{pis`aV>F;ENS94R5nVy{smn|aD`zp8p6m2nC=3Z04xt5-1O=*ab3VR(kX8s z8?}uhH6th7xoSGX1i1=_Fd=^?1{;q*ueVKX3vBn-SGx(q(U!ya+7)X#>PHddMlzy> zX%Ya*v1GuD)}Z>Llw^NMh1?e42eNl?&kW^x4e&~0N>ErJoJp+LN|O^GQyG;FED$YY z+&W6kZRJVQoFOSuuD^a^~@m(VEBoRN|PT_MpG0k)NJf~}vixLI%STJ{Qm z?4HgNP1yV9>oX#BV9Q+3NgRGWa+SD_Y)!qH4#zaY7^1kX0*+CqZ9%oY@cBW`m@<#F zy79klk~qK32X+Vq z8e7y5d^6X@Z8Ys5)$v+U-CPG_*#L!!Q9(d*Q1&7GH9h1=^jP2_WOwb3#s;=}%!GfV z`Hl|K(P>a_ChZVjTg_?;6OCwxjfCBChenVRuqIEys%h2y2xovj*!)^>(nbSmR> zn6donxKX*s+)ckoP1z;{6UdRq*sqC>w0{h!jXK!kccpB{_8$cII6z-w4qr2!-9oq8BAlu{V!xM(a5nul2~ycx*Mno8B|zQt^p|i zqGXPlHQ7b%8eDnyIr1~Qk+=3`RxR`6BhIy8@!aN;2~ne1Z3qE9NN2}j)u?ssH4!a& zGB7Y1my+7Tgykj(w)hHL&zFFh&=x)jLGo;ub9M0EAfiKOc)_l5g6~T}O`Lk}9QOlt z_cr18M2$FT0rWp?arU(|rjDnEIP&A_Vz4K(GV&pFCwqt>)v6=hg%h>!+7EAcU z!ZZ1}$f?BE!0-OmHO}^X&=ce}kks@kcie)U{7Bx>*;5mjgOM+(%Z1p@n9|&l>EXwH z(Z3L*(n7+ks%nXg#N{!^^NLv2;tk0tpDHDOrN9MV0kuSQuSFd@_g1B2LyumojJVmC zI7*bo#RWURXjiQ#)9yFU>vfQ%Xz)$8*X$~LL2TH2FJ@AA-)YJduwgo$V*Wg3E$7M_ zcD`h4Plgjc$8JurGwo+j?VIb;_o{L}Bcn3sm26&M?4lh4HW)bteEJRsU`j-z{2A17HTFJQBCz$l z=OJ*r$kn*BStUW4M`7GoY)Hqtu}uK2$LbS^Kg7+$2thF3Af0bTQVetx*9O1<*Wb#J zA8HV2eMiydg5+7Qkeo=_+N+m{Op_C(5f7MPVO#N!AgneI+Vl(QX;>vIpyuE=az_l!hhkiSxY>pc zkhRt2c(2-t5X^$t==HSbnY$h|QwfaV5Vp!W406E8LHlo^WZ>5e!n$fuK@cpO)yBuq zhX7kMZWR!$c(uIEa~_LQkSgKt3b9-aax_uD3R_Dw>PN^xw;QR})b3x%R#bd?k}3ht zlB`xE%M!OFqlOWDnJIoaJby1nv8?d^EpqZg1iq?H)PGA{5JFtZQa|(ag2#uP#xWkZH(rc4cn^q(OtIL3d8lLIlGa{oog}8icRZ z;-1ZzMx3?8iXE^b&75Z@4#roy!9i8EV0+Fm9X3^~22?O=8W&7{H0x#(^hYO9N+Q!M zvnc5$ZeGw&9YmR6U(R#$ks;>Mo+4WH%=UK1rfzc0)b3$~xMn@C0Do*rrufuiMZ^Md zMX>3KRTxKg)2R9o;!HLivJN9?X@e*Su`HzCD%VTOu?P7wgN?>bNe%cT|5vFf@E@)|5vwMdg#57mZed7rjzUu@``|E(im}O1gy7 zi3CJ$jo=UJq$pVOc+}&u`Dp~tFO^sgAp=v)dAPOK)RWlse^*7R)0Gppv?^ruFXYa1 zdD?3Q9%A`nU?7Le4ZD5Ky3xQ&mSmU~G2$HR;Umb)8(z&c4%~ssaN~y(amQE@}{Uf@- z-qKPsJtNFkTL3Cu_ui*Ee}=_TUd$GVN&efaIF)uu-AA3tN36aS~BQ?hX;i zb5x&OPMAs_G%QXd_d7n16P)jNaNs9uD?F21CBB=J&Mr3+B)#wvdbNm1kwy1kGzj1obw5ZNeX)m)8e z5PXYbYhgQW4f4LHpw>gJXx>3^9F6SM7iF)-?O%9JJ_f`7l({7xwz(k0K{7HMRZXVH z3ye;aO16n)EXi_=YNjbdpfE(!Bf%HQCG^H-rko3{@x?TPgTjFbgYB4GpP~y>cyQ)fC3Q6UnsD_#x=aP zCcAwF5h5zDERN$f^&GjN|Moq~^JHoL|ZV)Ii#a3H)yDz0c8LJlDU;}Gd z)J`Lk|3DfGR@F%FlmrZ7nmk`*1xo-ok7@<7&8x}i zrx5-*7JZxtnxG7@XTAc1;AXODSoksME3|D1Z08Y$atnzI94R*7!afN4SPCTY!YD7G zTms?XYr%DK^D{`TU#2SWAe=@ptXeMW6~N|BM_ZG3!x)EK7Ff+USroyzAh`5hB=;G4 z$_2qA9^Cp@OFPi=kAExKY-y7)``w5#Um+<-W&$x3plXCL=Ovmh&8Hi+CKZr^7Q})gUaHD9g1aEmMPWiq5BQvGIhqMX6!=)8)B`ERW zYnCWtpyjka~k*)L9{5s9ThLk6$P{@{|91L_)w~Xsw z<;d_5X~b%l?SsLm3wf>rGylQ6?(9^e6v!j8ltPJtdd}9BSqd171 zD)~MmEwUrr4uhymR+Cnhr~SG!!09`RssCAdqdQ_kzmZEF7J6Mfk!RH)|G$}ZdcA-Z zkat1!lHBPbA=rS)Cnj{3&=`pet4t+k-y%K)CS=&SYb+VantB|z8B{ejTwvM)6pD|P z?xCd-3+LsEhWOad!1asSy{w=^NT$rbj$`BKgDJ*(H(xCfp0=Pfnb+l*W4$>1)rxE1 zsowiy1Z1{Lg~^25Ks9`MrKx%=(1g#CG3xU>x8$` z_Apkc-e{g4QgW3qJGzsFc||sOjSKtfb}*??)mE@STrwKA-dT6Zllo9}l&0K5ujZdp z91XC>k5Nq~?soYHAcmJ@yu*Qz>J)`{f{or?>HDM^TI>M z;4SretXzP*FY#E){;E5*VvEypjbXD9r}baPO(I5b&^%>E9S-5QQKWHBsd@4la?H)W zL_@ZR?PA6H(Sm~j%++0Qt-VA|W zd%RvabG5;QI&;Lh{Jc}}d<1u7UnP9eF%2Tv1io^iZl=i?qZ0n41MhmS{fujclc+;h zc7||bIXA)^h%VW#X4PVK;W~CVZFozI+q?4?W3rN1F z7?)dI_=sr~g$zp7(?kp(=Y-kBYOcO1xaW!ePFI19SbZBB&eZ#*GT}50OG`(564t<5 z^ppjErqOkkAFz_W4V3q<_&w1zsT)8&d6T$W4frnbI=mON8PPK;-i3`1g^qjB?qb`| z7y|HXu;Cze%qCR&t0xge7fbQ$mQ#4Jc&I>g++YmA$LfTF6;~jy+HO)C3VnCZhkih0{BhgCPPSosn%u)@@)nS+F*B zN`jH!!nsX{9f%>qw?jB5c;k19q~*k3y&@N5wvojvR5MyW_DO_*?853#AU1qA4HXv4 zq-V7?(7ZP=n5paHDT>!B5><&R>8+>k+k|`8XFp{UtHnV`;6FHQ)rd#nA z2zxBZ^%1}1V&$bP_)%-w>p^v*v0wFOgv%46mEZ*F(yzR_soe`+mrsI(lcf1wJy%6x zY>6*X`2;%CzyamTcZ#PFq7wL~5*gO*Q%iP_Gf7z<-F;>85i8w$@B-qa7|w9ew@hes zk{)A%i4XJiT@c;45OVQd<0-ExGQ8|U)yL-kq_z-2A)iH%rdgx^;K>M~=K@xh2_3ya z+08VTVukUpQj{%wNuh$O-QpD)`oZFZ5$uKt5-a{Hu^Nn?EHNdcG`&=X^24}r@ttn+ zl3x(K*x!L#poU^Xe@ZNwq(xTMj>?v$ggj=!ZE>4u zd)0Pu?iD6jf*g@qRQ`G%d;+My@Odf-f9o4R=`TM+5hxFNnTU;Ch_}bV zYU<5+4&n*o0dhGHbudW2A?v^)e16pmNU0a+GQIOVs#~!Y*!lspQnHgRxhM%gJ1Gsy zz}YMPT^epJ zPoV@unN3yjm!vW+t&&=n(PEWqBgybH`M{QB;Hh$Vb}uegI~iz0u>s|aprbEz3>>1g z0++5Bf~kJt3>Pq>h141b(N|C7mY!sUCK8hrQXySwmqdnqBpHD1lcF?EPGhN0+bwu} z;Ofu%L1en=f-a95^>5D=EU=ZYi0=gzK2S<{eh@(4>0;cgyg2`d6?6{l4lab5>#SPA z0rRDk>J^e#fQ?m42416PN(Nk^)$kAz;+|mQXqvc1LN{LNkoPtp68|%Bw@f!`L1b_r zyS_UxKPu$7Z3L&>4}PDQa4-NEO0HAwY|v+;FUqax2PaLcLNS;8LD!`g7fCh5mA4KV zzpAhXU2TpH<~1(j%3N^%5=0UunC~f3g;Zrf7Uj)kmlqcuc%eUqM{AAUEdHW(do1Yq z-^6K2#>*G5x!CZyb0@{>tA9_|Dook6NZz@Wg)|Fs8=v1hCqL$}wP~bt?q=bc{GJ`x z=H>5U*cj8Iq^Ez$D@_M%#dg-Xfi3TlP5mumcH04r=>Ww(D|+W3EyaKK_M3ahO}O$p zbi-L+D^ILl|8aa;SJA$y?7-P#ZqwWQ4|{EWr`1l%plx;x z|7{z1J*gGWo9OIrxcYEHE2G(?*zkAR&0VBB;xbIpy1~-F-Rajn!pD0Y>XZN8bZ&e1 zW$ylpbk>0WkJp?4*_>}1n!Z;GwodJrT!{U_xh=VeJUYKS_mWLq;P;04RV71*lCsP3 zT2YD7^&fO@<_Ja_5AdhWDksm_^}NP;C7$}wH}7G7JCfc}rs*h5_`Cn3&0)JmPQA_D zQ0t->ztdEa)4!eVo`*UcZ!yLfXsn%2n7vTdA}e$wU`sgdiAn{xiY`Q-tyB%#xclRU z`i`(|y)SNj{+)GpukhVfUpw`g>unAj@96v8_=@|q-!hLiZCT2Dv)L#vi>Udn&7mzR z8&KBz;+{QqtM}7w>;z<=y7JWQ<>)hP{dDnl2gN#K&ldH{uZ%Wv;e$NKluL#Thk!Gg zS*(3~<-fW_?GES*+(u}x+P}X)@Homf2Q0gnrKo9hyTZ48Y-mvb#{2 zn{rO+$A^*Qq`m<6J8SN8i2*t{)<61!#~kk?+`ZBD?%cBvKTnsk4{JZ43omLD^=@>m z{B+pwZKO+cLQ1RGP0e<4{4Gs|oQG4PWfQYpVJ+(k`RWmb(bzH5#qzILfYPA)HuL+2 zB&#C>oWoAo9&ydwp=tdeDMx(G`logXIZjc1w~u-J-n3|*F$>LS2ZNYBEh$ZYPSwrRJQ2-0{MG#T#J*d5qJ=)^ajAU2aP?6`^-*yC0Z5ajXnu*D zZ4mZ)oxNIq9y-Rjb!EE{Jwv(frcmBU_H@ebxP<9`lk9tY*p-tnDjv5J9nO6O$(K#!An} z`GdfVxy=2mpIvdxMt&jbuRlT4J>80O%_sI8^9vs_%RS(E#bc1W@oxU*Pu$z@@V3Ja zcf9uHpt@(C*{jU|=5^Sz7th71y3jVlTbHEFw6<}_ApGCMmJB*wpAD&ZvB23A3E7)073u&GlDJ-?M z==L1kL=Ywz7tdbU>VLm2Fn3Sw7q>LtXI%Q1fc@%6&%Ytf)VBxjkX*71pYFblPZL!b zrPQM&n{PbjeHMl|Q*z^-;GjzXDGi6lr&;@o zXD>gvnPaglCA80GDp34#@26pxqBlwFAm0m7o&g_-ClwqHWpK8RNv3D~?|fsfZNn|% zGDh()IUg?Jrbr0^HJk=ZNA8L;+@>jpi_40P0NvA{6L!MI_=6Yony;j{_pN=~tPzE4h&%jE zfPDGxN4al$&ArG`FLV#(4tXY>UtCtnxY=zckW8G@+4|Di({!LpFY&U0(GFqhC&kXW zCy&|Siys|D71eyZ$g{KMHYYgzd-G3{k{#^R-)IA}3Fa|8u6hIQqUX1#5tb^)+E1aQ zpI*s%IQ#(3`FW+ik{4#59yz9p9}MWazEiB0=XW2a*CrCBY~j|n$o>ImglQU4`r6Oj zJT$gaJDe}itjdlmF|tZeIh2oUaX)lJM-be%7NN{$5oYVpLL2e62PuWyx}Q1tUx-V%d%rI~ zHtKS~t-1caYkQ)u-=H&_6L)Nt>@`T#AKTT3GVSR@mBcW)r{%x@E{I|kDlSHRSJ8dD z*nmYjes_tU^STv5cm4C`xNQxo@%vX>P4dG?4-xg8F{5@ zi*wG#I8JvS{y{t3!cCuaIOUS3ZuIePu8ve$Fa9KRzc)J$QR@?LncjvMKc znD^cLQqZrlvJcy3E#g*80gtNj1{oIDvW|Tk=;P1}xBT?FGgi@`l(_a8r z1Z4Ai)fZ;u*^^L1YY}bg7firL3S-YvKQ7Yk#52!41U^=1@$BIaieV~b zR^*&eD%$+J&R1kK?L5CNN_T+NIai*F-RwS6ZrlIc=`BawF}gNa@o}P~*5h-Ga^C~x z_5CqnarX}1;&NU;b~MCVR2HgWMvR_;`?`corUB&#j#lclrJ-hR9o^0Pqu-0noGjY3 zJLSjJ9p9r+F=7y*HIWYOg9v!asRlFu(;z1w$H2KIp$1Yu5wTY1aj&7ScI2b5OUHRa zM!?JTk53Couhwu1&vU~+kgesWj`TS&cV7eTBC~Wkwr3yM%yt6U4Pznf1SV>%AaUCE z?hf;Iw_DWAS&epp1*8R5K4J~4bT#z(mz6cyxFs**I;RFHzo%P{bIc9ZvRIQB&K~o# z$tkvK(ES8vW`0$VSmj9FWs!5>SNNu9pz1(v+ko*q_`CH_%^X^*(hRR?CCZKVx98Z# zdmOj)9uua8nBwlOnl9ow^LO*D8P>$IuNbj5Vtj8^ax&GhY`3o@OXael(jj=t96S&+ z;&LDj@}c&428orTo?g_Y|4b`6&bY5!nX$WT)5)sJbz56Hrq9N{-+qruzgM=l?)UYB zIbJku6t(_jRh9eO?w>??Q*gsgQ~mY2=b0x2yN^wi3m3mMXDfUH=d=E9+0HfR7#VW3 zX6uPDJ&51-4sVm!JKML^95(rV+@a{iixf~<<~;dFTBjk rng~i`SPu1V^#(Uq! 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

FU(sR=9f>X-66*VTp z_y4tcZw#lsPjqCd2Wd>mgr<~nm%qAx>3FH;3;cKGxE7IIrgA&yRf?y!>3xlf{)FD2 zqq`fycTTGK)Sb)=*o$wwE}NtacP@t=tlaB0P$8+!1lW#N8*VWLJ5})`I13mHz4JY1bMPLqtCmmcCH$W$|{!$;1vOe zk?S8OV=XAGb(U4oG30`;T$q0y@6`s~pmOJrOkYev0m4Dq-BHJ247Z4_6n%sc-X+a8>Ynx4_@<3M`c*8@K zBL^|?#Z35wTIjJ^PF;)l&k$8TuVcIHeS3k8-;}~U1}0AsBb(jYBH&aj05McX+3zeG z!AK&kAy-{{wUwuj*t1v)Gz6n!k1Nvf`2$nPv*Z2W6H~m!AVluKl;%vrDY;m>nWA%V z1{VxMH`geg>fF0O2elQBHBmm$$@ATg>wZQJKC`tK=I`MO)u9Sd>XC4Ml-I{I%h>g7 zqmR?Drdh*6qdmxW$NbO9Q()#mqaAmG9l)fhBPii${A#|{SzOg`7|hk^4LthW%7?rs zJ7g}>8;N}O-r;*86KA$Nf!jM9VS|5{AIURWB_POhy)G+aU+!NOM;5O%4T0Y%2)o`nv5?Yr;2n&D@@RNx+bFq-^Xd(h?e;rimnI6 z%LeyppH{o|R9dRDJF~hH3~hboU#=|`VZ{~BKBaCC&+$gFhZR} zeJNd!`DN(WcgXIz%W?!v$k_PlKwDP_7V?LY?v<-7RR2GG_$7k)zvK0lf7t(ki5ux& Ur~XHC<#H-sa+OQS@jw3fF9(=-p#T5? literal 23693 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 Io8pcC0VHPyJ^%m! delta 3669 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_011_rst_workflow_001.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_011_rst_workflow_001.vtksz index a9e4c852f48c56e084df205c8e6fd9df5c827f3a..0c3fec1e313fc6204fc20afad4754162c9a5f91b 100644 GIT binary patch delta 3712 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 Xd-rK^|Ic%o6-h2l;Bfb1;^6!bFQP4V literal 3766 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 literal 5275 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 KW%Cp1Z~g}ghS=Bu delta 23113 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 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 372a93eccdba350b1e69c9efecd311e22b58fbe3..44b707021dad05076c6aeb34a7589f829a63cc97 100644 GIT binary patch delta 21498 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 z z4mOM+FR5IMz>XOFaZ=uQi+DuvRYL3DDndaW9M@@>=yoi^rm_Wa>p|HZr2&U#l}nB{ z<{jm7jMMFT$3;0t;HgpVTlyR+{Lpy*GH3rex!iagMN(=!!_Im7=ngc)PN8B*RSYe* zzkd3@ifrl z=MBr`8#=8mI}z-(+K6_q#wpXWFD&G`z%m)B)7ogiGWKN^xh}Izwk2l~nMlaXk*P@N zSUFo)*0=0>3!R=OwsJ4xJmGGtADN54eu`$_C)G{rUv`Z_r$1APiaEfO`Azi@mCTA} zKOxnXsbmT0^e&aGg!4q)re3Ta_qpYz{amWXPrZ!ab?etec+Hg|2IugE|il>JoM8K9G{S)WxT&iLW}6 z`?r`ke(pa(Y&cIak-j)JyYt}9oJ9L~z`kJiF>~T8hxlS?rel-1H!Q*&b-s|fFNFO< z#qMb-46zNuCDt>NyUZpUX2EHN5JvC5Q1&r!P(fmSZ)U)3pE)>JgGOM1bTrr+SpYplx0$HHFhVUd|vkr`vmZL7LW6RVOv zjl>7vHI`uGtr;jNWAQU0@`5soLJ9+3D14cX8|lT7He*YO*2W2_Ww0;P$*M#J3Avy& z84C&$zgdmApzN{g@*KsbD5%JM%y%Mry>4SJCqPH~|2MDNPsUyCQg8nhpl#I~nC`J~ zJVV#=Rl7ml)eiN0p8_bn3;>8-`~}e z^7?4&BJMsNb;sjFqd9CFi)7?$?HFGN%UCAP2z>uOKT*piFW*z|FyF#VARVAd2tYVrINll_|P z-XEvezS4tyzv=9e-C~BSsVTvYbX@N=e_o#CqMc8?Ssq>kuilfvv!j-&FU+YDHq6)Z zzaN8YfLog%)pLN$6*!F{`cU%bI_NIJUtye6#BVB2G7vRnqDFrVa?szQeRC=HUF_G1 ztqJ>Jd516cpe+l5akfKKU99XV`D#rU=EllN<~Zj~5`4V2Q9rs0KSNwy2(&LMnSj^S zka&r+<_y%QdDOVWn_fSy@a0919P>6Imq^KfwBd)}-36=eoJg>s_F5-VyyLpHhbSv{ z`>9u3c5vXXkIphUmQ`~-%(TZ2VfJ*dR~Uq50hho^22Qsm7WS)oc}3x5DB!5)%DC_I zAv|k95L*MOs@WUa50wL_6dMo5wn@5Hhvd`3NNaL8-}{PNWcG68Y;BVINoWq z%x7ReA@`?q@>N8_b^m4s48+eFN^*`z=BtLf>a(03e?LK3%?;o+^#>wsxI2)nbA4kbt=LR z8pAIIKw+_4u-H)56_#EBUecrcoFjNiCz-M%}b?q9iQfg{} zkAAG`BwZ0Hw`WMlluQfp{O~~3UtT5)n!BM%(vn(O848sH0;yg~ZcH!b#ndL!@@hXe_h#3)Qpd?jxj@+;thWI`Q6&;T=EITbKqh}-S^<=a($XW z9<(c~d+4@8ME&C~o-d*e8C_$iygV}Ttw5+^ zH9z!5TgbD%z?fL@h9k{y;F)30{op;z6#t(OM)XN5;N^qyO!zmEup8QfPD)Dxy zy3xUlL#%KeC;hO$fEW*;WIDXy6zDCZZ_sR1YcS}(Nqb6)y}=&07mUK+exT6~%Hm`> zI$ji?=As$$(pfp(;YijNG%Q%eywt0_(3a03=PIJlI0^PEf9=R^%HZgpF&O>0XTuKy z!Gak}In&06CY|pnpF4$T@UgAUSak4nx1+2h#D;+n84W7{v_oB^!fP?!S1(6D##W<7 zUH){srmV-nub2$AHLU*dZc0l>U#03e`$UFzcPB_wrs)l;Er#t JR&};)`8S8NNzniR delta 21489 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 delta 16787 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_014_cyclic_symmetry_example_002.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_014_cyclic_symmetry_example_002.vtksz index 6cfb6202c6f5d49b5eaa942a87b4f4448b1b734b..ae05b25ece584151f2115d786f4b9de8913ff7ba 100644 GIT binary patch delta 14996 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 g|E5y3$^rZr)SRmAJfxC`Tzg` delta 14963 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_014_cyclic_symmetry_example_003.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_014_cyclic_symmetry_example_003.vtksz index 16b943cefc20af30e89a88411b82a0d243548ff4..30dde1a117b4fcdfc7958f9d2fb2e4970f977647 100644 GIT binary patch delta 17702 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 OEi?f$1{yR00001n{OZpD delta 17832 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 diff --git a/version/dev/_images/examples/gallery_examples/images/sphx_glr_099_dpf_composite_failure_workflow_001.vtksz b/version/dev/_images/examples/gallery_examples/images/sphx_glr_099_dpf_composite_failure_workflow_001.vtksz index 4bc91ee40e78a515c5c8e828de8becb9149c5578..f8440fc0969a39f553c192dd599cd188287ecb4f 100644 GIT binary patch literal 3757 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 literal 3761 zcmZ`+cQhQ__Ekm@!YG-jBck^jJw=6D@;LMvD?NjPfCf6214{drU|~k4|(+ z)acQl?|bXF-fyk9-o5wSv(G+fpZ~Xx1|fhJ4-bz7kC))F$qps~Crg2c_fa1Y@9r%N zceS5ywbd?4UCL5ph4h5Hj8uoCJGtZh3K7fE)ox}DlERrVp^YHgK#Ts%X8p-=n+`qv|s zmjwLj`T&w@-}vjuRWn0c(aVos1jO3*3s>LSa# zYFajpCrB^*Ph~o+r^;ku?VQ7bwU@F7QRTyig%<6R6&9SW$(`SIIzDdM`yOI1y?5Pi zBnK?qxEsxDwXHj>qYjBexV03L^2JHcwr#>d>^X;YaTX#nV0srm`~k;Bj{(56P3?m+ z{>RQKJI%kWZuZsN+Ns_*@R%C1eI+gYKvhT+xKpLbAc zr$GLawhkI(vSz!jrcn_QtlV{@%(qdh;Ixbi2y$6>=IJddtMn3imC)HE93vK)!=zF` z*uoxbMP(Cdze+K4Wffg0y0v#Bt;Aw=FzH@)x;Mrq5Ln)tyOiJWq^-*ul*`4tC6JCK$n;0~;vt?yF0$Pb` z;lk}<2tE|yoXJAN&h+L>QSA-dOGBf>%~^k4hq`wau#|hRi}<-Z!g`zsS_E1G^%SFp zse`z+2&wa=NNhE!!vyI#*>q~xF7iLd4HWYj+@sE-B_IK+<#0o2Sn+{G?21-ErFn${ zD-;jtXH4y56|y>bG?N`{$Mj*NlId4$&ClKY3du?*8ABQc9UJ%BYdYLZ{8{_0#FjpQnWLBzNO*Wp)dUEoSQ8p50T5a}n!j$C=Mw$qJ15 z54F!1&aCGb^$=;Ha_8NsKmWi80r-^!8<7PdW==(2=J!CQQ`8r#-RModKgA)E{iZuZ zTO6k^jZVMli;vx8JdlL=k@B7t=JMOPToeqYlyF0|7~4Th!aefp)=^^s!fsNFfkgtCo>{pCh7!5$VPBw;TuHZv_2>gNT$)6H>c=)i_X}gN}10#WV$pcb! zmh%MnCUgpHjZZ`l6$sp^+7s(sKKyLmj208a{G2=sS9Qb)nSYZUXt54(Be3dQ39Yl_ zm*V-E&ACxfw7pY$!+!!80_2C-OqB5F4<8#Y7Q0uO?$EyNddc#8M2h6~3Qdw$xY$9U z+~J(^L_!J+ZsgU0l2}4SX7AE>Ut*{4qYgiw>}%&SE#z3*Rj_+UrEq;@BSN3@(qy8$gEyerjk>HvLc6QI6zHw+|E*y5>W$LGBhe4uBYQQYrBWLrIP?{9} z)9Q;E+Tj5y=%+&~cFqq;d=0Haoeg2OagX*teiw=7%8hN8!cBDv91V( z-RnkXiLk4vzV#Ybjndjmtc$bxVhsYPTbILkz`WUC?4-mp`~if1VIo+$UP;(2?wW!b zA40W!9xPEYH_j6|E_)JnLucc3Ev9Iq2i-JS@tv z;(*d5h`&4|6@x?B_1V2pbh5ds=`s;wk>BW*WSEJ((r8(ali9#xAe;6wd$-rpN7W3cBY{$O`C*9Pxg-%pxS1~*`-fCCsZoV z`=Kn&n>I!P+a_pwxD9*}($}?AE$jm!2Q!BD^)FS6 z`g|n^%ZB!iELDs9K<5O4)zT;B z@NE=$evT4mU zgpG(CPI(?Uac~?AB4z_SB80DD$eFKIco85K<#}N`dW0xO;gwe|5I%xID~2k|eOrm3 zn)=pos#PyfHsb6)YUzxL_9?^Juz{WSr!jrEyX4{28hscplli-})B<4oeMKxfoE#-G zU5!aiL-fbLLSWHv>e_IM&rO1HN~=uW_POS~mg7`)chX|B9vg=N234!*;AULL@5F~_ z__abfIgIlFgX&erq^U`kqtxO;-7EQsa!V>2aWMhw5c>ip$jH|^3~6c#NF;i^{@*}e zZ2S?YqrFKlU=V_R|B2D`-ykam{{LjF1^>}A=W!O`G|GJ8qho*Eu!*07P4jwF-+{QQ zH}ZDaq7&+R|BidC0*H?)12_g5YqD>)!p6^}%s-zDzc4=cCZnmz>H2Edxd#;gv}R5f zE7Cj%5DeF+1o;YYTU*~{;y&-*N1y|5t(scWl z8P`g;Z+ChvR)zTRNa!dky2*o5-!+UkB;6Y9`UcIow0y^>3ID%gIGO=$?}J%hev1Zy z4SiIXm&4H1U}YbY<>gQ`1z5tTe`z@cefO!*GJ^Uk%W_jT51G#1BLR#mbrkD0a$bOn zGuH3^k;_Yx80OyM+!h9-}`dTlLY?z4_Q(wLYMk0VVc;XIW*_pw)J!ByW(d*ygNY ztKV=6`ABiFvSUToQ`v~_O~Sbr_+qKTbmchSp0|;wGmSl8W!d*P?`GdzE2g3o@tI{rDcSC#^q+xJH z%XzpLe`6MM6g)1?rzB*a*?~Gpmh`+b8a;0_&y1oF#_$PhOB36ILz7G3D;z+L9y8v6 zA4*0w3D$#Oys>ZlD*~_BG3RYf+;&^LWvxON2}ao2->4HVb_+4z)a4#ail=pv z9F<;oHtjoNDB&DJJU0(33>s1VUO5`}Z^LDsI_$)!#wWhCM#n}abyP3xy&inY^bqtc z6=^*s^HX?2t?L?f+8tiEIPK-H67f)Nj4qCyqu8?zji6=ivA|zU9y8_y=01Eruk`y3 z2gFzNH-oEO^$kzjv82JXj)|J6cwhBvO(%6aE=`~X5l~qzZ2gnZ`#Y=2-naR9#W=4b~q5nvC6tckQ2_n!%rR^oIIWgY<0Qn z9(OCZXihHQ;+q^GzYc#~dqyuhBe&ryd(-34FBKLrEoQsTKULE9f(Nx)KNJYr0}QX;OyeKjSVNIFMS}{Nl@k) zZzD0nOnv9w)bWSS79EKTHAt}B>{0EXBYFSx{2-tSOdzuKWl*}F98y`Rw!%0glDM!e ze1To>;UE?|SNRqYZQfLg_*%l}JFg`}TK!l+#t2Gj`sEyUm853GW;Ar}2&+49x(ALY zt!CQ2D$+3rlIq3L1K+YJzuizdChULA#r|l>s*_lmR{>C^X?tKtb{NDCnb}1j5r)#P zGk8Zxy(^tY^%+j?d2g#pHdoc}oUcOx&h@9#alw%vMLN?ef`q9kwW=+jH5zc8j>U$c z3!V2-H5TvxWLpgHfeMd*!VNOEcxS5QTZaW{$Phynzg$LH&Mu@{(y0Kfn>>rQC|kxr zf;E>PrPh^CcrWX{>K|wi66^=G)lJ%JC)Qr@(x8kv+Pq!MpI>ylULFhSXy6mj68>+K idFwO(IdAa)PXDo-IvPZG{$}uRuhea}xizMEc>e<5bs)9? diff --git a/version/dev/_images/sphx_glr_012_fatigue_example_001.png b/version/dev/_images/sphx_glr_012_fatigue_example_001.png index d3f3bfab105f9165b7d28e04ff62cb82c0a0d272..ff1fba2e6b8f8bd2048c360fad7f1eebe345bce3 100644 GIT binary patch literal 34443 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

-umn5egwBS4E& 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 Lb|&fcwY&cZHwK)mB9JG$-21+-yIq_6m(7h1 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

1ix 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 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 be7d9e6fd1a87d49c4c939ec1942a18f01fb7e5e..a0a68d86c3e6bc07599ad299c545318c5eacee86 100644 GIT binary patch literal 22937 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 st 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 JEHU?r`xh!)fiVC8 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 2a0069d034..d8ffc93c3a 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 11.642 seconds) + **Total running time of the script:** (0 minutes 12.061 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 8ca73ab67c..011cce077c 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 4.837 seconds) + **Total running time of the script:** (0 minutes 4.888 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 011b00edf4..07637e3896 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.262 seconds) + **Total running time of the script:** (0 minutes 3.287 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 417f7ddecc..714270e6e2 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.523 seconds) + **Total running time of the script:** (0 minutes 3.610 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 b306546615..e65854f6a5 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.399 seconds) + **Total running time of the script:** (0 minutes 1.484 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 7ff34ea031..76183b04d7 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.682 seconds) + **Total running time of the script:** (0 minutes 4.636 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 f7747e383a..2b8b6af23f 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.347 seconds) + **Total running time of the script:** (0 minutes 7.360 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 8090093e8d..700ec171c3 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.157 seconds) + **Total running time of the script:** (0 minutes 4.148 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 562eafdaaa..2ead1a9c8c 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 5.877 seconds) + **Total running time of the script:** (0 minutes 5.827 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 7a71145508..a29cbad54e 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 10.117 seconds) + **Total running time of the script:** (0 minutes 9.928 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 511db0ad1f..e2400ddd42 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/dataProcessingTemp139708755609344/a4733703-6376-414f-b879-81871fe66518/shell.rst'], composite={}, engineering_data='/tmp/dataProcessingTemp139708755609344/3847b466-7cf5-4884-897f-f92474fde801/material.engd', files_are_local=False) + ContinuousFiberCompositesFiles(rst=['/tmp/dataProcessingTemp140506698876672/95327c57-c6c7-47d6-a27c-fd5bbb15ff04/shell.rst'], composite={}, engineering_data='/tmp/dataProcessingTemp140506698876672/3263d946-7a3b-42f8-a6f7-357cc93adb26/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 5.110 seconds) + **Total running time of the script:** (0 minutes 5.043 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 be1950ac83..99f5840db7 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.3175724629612316e-06. + The highest damage value is 6.384855047637062e-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.564 seconds) + **Total running time of the script:** (0 minutes 3.799 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 19bb90ed54..fcc7031921 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.427 seconds) + **Total running time of the script:** (0 minutes 4.181 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 2f5389bd5a..39ddc9b6ac 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 5.728 seconds) + **Total running time of the script:** (0 minutes 7.394 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 de51d4e7af..96acf0314e 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.414 seconds) + **Total running time of the script:** (0 minutes 4.671 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 3e28c26c44..060c05fd3f 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:20.085** total execution time for 15 files **from examples/gallery_examples**: +**01:22.317** 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:11.642 + - 00:12.061 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_010_harmonic_example.py` (``010_harmonic_example.py``) - - 00:10.117 + - 00:09.928 + - 0.0 + * - :ref:`sphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py` (``014_cyclic_symmetry_example.py``) + - 00:07.394 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py` (``007_interlaminar_normal_stress_example.py``) - - 00:07.347 + - 00:07.360 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py` (``009_short_fiber_orientation_tensor.py``) - - 00:05.877 - - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py` (``014_cyclic_symmetry_example.py``) - - 00:05.728 + - 00:05.827 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_011_rst_workflow.py` (``011_rst_workflow.py``) - - 00:05.110 + - 00:05.043 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_002_sampling_point_example.py` (``002_sampling_point_example.py``) - - 00:04.837 + - 00:04.888 + - 0.0 + * - :ref:`sphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py` (``099_dpf_composite_failure_workflow.py``) + - 00:04.671 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_006_filter_composite_data_example.py` (``006_filter_composite_data_example.py``) - - 00:04.682 + - 00:04.636 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_013_thermal_example.py` (``013_thermal_example.py``) - - 00:04.427 - - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py` (``099_dpf_composite_failure_workflow.py``) - - 00:04.414 + - 00:04.181 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_008_assembly_example.py` (``008_assembly_example.py``) - - 00:04.157 + - 00:04.148 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_012_fatigue_example.py` (``012_fatigue_example.py``) - - 00:03.564 + - 00:03.799 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_004_get_material_properties_example.py` (``004_get_material_properties_example.py``) - - 00:03.523 + - 00:03.610 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_003_short_fiber_example.py` (``003_short_fiber_example.py``) - - 00:03.262 + - 00:03.287 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_005_get_layup_properties_example.py` (``005_get_layup_properties_example.py``) - - 00:01.399 + - 00:01.484 - 0.0 diff --git a/version/dev/_sources/sg_execution_times.rst.txt b/version/dev/_sources/sg_execution_times.rst.txt index 30a2cfa9c8..606f7a8a67 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:20.085** total execution time for 15 files **from all galleries**: +**01:22.317** 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:11.642 + - 00:12.061 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_010_harmonic_example.py` (``../../examples/010_harmonic_example.py``) - - 00:10.117 + - 00:09.928 + - 0.0 + * - :ref:`sphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py` (``../../examples/014_cyclic_symmetry_example.py``) + - 00:07.394 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py` (``../../examples/007_interlaminar_normal_stress_example.py``) - - 00:07.347 + - 00:07.360 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py` (``../../examples/009_short_fiber_orientation_tensor.py``) - - 00:05.877 - - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py` (``../../examples/014_cyclic_symmetry_example.py``) - - 00:05.728 + - 00:05.827 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_011_rst_workflow.py` (``../../examples/011_rst_workflow.py``) - - 00:05.110 + - 00:05.043 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_002_sampling_point_example.py` (``../../examples/002_sampling_point_example.py``) - - 00:04.837 + - 00:04.888 + - 0.0 + * - :ref:`sphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py` (``../../examples/099_dpf_composite_failure_workflow.py``) + - 00:04.671 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_006_filter_composite_data_example.py` (``../../examples/006_filter_composite_data_example.py``) - - 00:04.682 + - 00:04.636 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_013_thermal_example.py` (``../../examples/013_thermal_example.py``) - - 00:04.427 - - 0.0 - * - :ref:`sphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py` (``../../examples/099_dpf_composite_failure_workflow.py``) - - 00:04.414 + - 00:04.181 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_008_assembly_example.py` (``../../examples/008_assembly_example.py``) - - 00:04.157 + - 00:04.148 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_012_fatigue_example.py` (``../../examples/012_fatigue_example.py``) - - 00:03.564 + - 00:03.799 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_004_get_material_properties_example.py` (``../../examples/004_get_material_properties_example.py``) - - 00:03.523 + - 00:03.610 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_003_short_fiber_example.py` (``../../examples/003_short_fiber_example.py``) - - 00:03.262 + - 00:03.287 - 0.0 * - :ref:`sphx_glr_examples_gallery_examples_005_get_layup_properties_example.py` (``../../examples/005_get_layup_properties_example.py``) - - 00:01.399 + - 00:01.484 - 0.0 diff --git a/version/dev/_static/search.json b/version/dev/_static/search.json index 7c7a23db1a..107c10cfd1 100644 --- a/version/dev/_static/search.json +++ b/version/dev/_static/search.json @@ -1,1095 +1,857 @@ [ { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.result_definition.FailureMeasureEnum.rfind", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rfind.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rfind", - "title": "rfind > rfind > rfind", - "section": "rfind > rfind", - "text": "FailureMeasureEnum.rfind(sub, [start, [end]], /)\n\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nOptional arguments start and end are interpreted as in slice notation.\nReturn -1 on failure.\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13.html#wf_e13", - "title": "wf_e13", - "section": "wf_e13", - "text": "Weighting factor of the failure mode e13.\nfloat\nwf_e13\nfloat" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13", - "title": "wf_e13 > wf_e13 > wf_e13", - "section": "wf_e13 > wf_e13", - "text": "property MaxStrainCriterion.wf_e13: float\n\nWeighting factor of the failure mode e13.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.FailureModeEnum.vMs", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs.html#vms", - "title": "vMs", - "section": "vMs", - "text": "vMs" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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/select_indices", - "href": "api/select_indices.html#select-elementary-indices", - "title": "Select elementary indices", - "section": "Select elementary indices", - "text": "This module provides functions to filter elementary data.\nA layered element has the following number of elementary data points:\nIn the preceding definition, number_of_spots indicates the number of through-the-thickness\nintegration points per layer. number_of_spots is controlled by keyoption 8, which\nindicates how much output is written. For example, you might write output for only 'bottom'\nand 'top' or for 'bottom', 'top', and 'mid'.\nEach elementary data point can have multiple components. For example, it might have one component\nfor scalar data or six components for symmetrical 3x3 tensors. The elementary data of an element\nis available as a 2D vector with shape (num_elementary_data, number_of_components).\nHere are some examples:\nGet the stress output for a layered shell element (181, four nodes) with five layers and\nkeyoption 8 = 2. Write the output for 'bot', 'top', and 'mid'.\nnumber_of_layers = 5\nnumber_of_spots = 3 (bottom, top, and middle)\nnumber_of_nodes_per_spot_plane = 4 (equal to number of nodes)\nnumber_of_components = 6\nThus, num_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\n= 60.\nGet the stress output for a layered solid element (185, eight nodes) with seven layers and\nkeyoption 8 = 1. Write the output for 'bot' and 'top'.\nnumber_of_layers = 7\nnumber_of_spots = 2 (bottom and top)\nnumber_of_nodes_per_spot_plane = 4\nnumber_of_components = 6\nThus, num_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\n= 56.\nThe functions in this module compute an array of elementary indices for a given selection of\nlayers, nodes, spots, DPF material IDs, or analysis plies. These elementary indices can be used\nto index the first axis of the elementary data array. For usage information, see\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py.\nget_selected_indices(element_info[, layers, ...])\nGet elementary indices based on element information, layers, nodes, and spots.\nget_selected_indices_by_analysis_ply(...)\nGet selected indices by analysis ply.\nget_selected_indices_by_dpf_material_ids(...)\nGet selected indices by DPF material IDs.\nSelect elementary indices\nnumber_of_spots\nnumber_of_spots\nkeyoption 8\n'bottom'\n'top'\n'bottom'\n'top'\n'mid'\n(num_elementary_data, number_of_components)\nkeyoption 8 = 2\n'bot'\n'top'\n'mid'\nnumber_of_layers\nnumber_of_spots\nnumber_of_nodes_per_spot_plane\nnumber_of_components\nnum_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\nkeyoption 8 = 1\n'bot'\n'top'\nnumber_of_layers\nnumber_of_spots\nnumber_of_nodes_per_spot_plane\nnumber_of_components\nnum_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\nget_selected_indices\nget_selected_indices_by_analysis_ply\nget_selected_indices_by_dpf_material_ids" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hd.html#hd", - "title": "hd", - "section": "hd", - "text": "hd" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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/_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.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": "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": "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": "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": "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 11.642 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/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.TsaiWuCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.ResultDefinition.stress_strain_eval_mode", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode.html#stress_strain_eval_mode", - "title": "stress_strain_eval_mode", - "section": "stress_strain_eval_mode", - "text": "Results loaded from a result (RST) file by default.\nYou can set this property to \"mapdl_live\" to activate on-the-fly\nstrain and stress evaluation. This property can be used if the result\nfile contains only the primary results (deformations).\nstr\nstress_strain_eval_mode\n\"mapdl_live\"\nstr" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode.html#ansys.dpf.composites.result_definition.ResultDefinition.stress_strain_eval_mode", - "title": "stress_strain_eval_mode > stress_strain_eval_mode > stress_strain_eval_mode", - "section": "stress_strain_eval_mode > stress_strain_eval_mode", - "text": "property ResultDefinition.stress_strain_eval_mode: str\n\nResults loaded from a result (RST) file by default.\n\nYou can set this property to \"mapdl_live\" to activate on-the-fly\nstrain and stress evaluation. This property can be used if the result\nfile contains only the primary results (deformations).\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.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.constants.Sym3x3TensorComponent.TENSOR22", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR22.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR22", - "title": "TENSOR22 > TENSOR22 > TENSOR22", - "section": "TENSOR22 > TENSOR22", - "text": "Sym3x3TensorComponent.TENSOR22 = 1\n\n" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.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.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.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.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.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.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.result_definition.FailureMeasureEnum.format_map", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map.html#format_map", + "title": "format_map", + "section": "format_map", + "text": "Return a formatted version of the string, using substitutions from mapping.\nThe substitutions are identified by braces (‘{’ and ‘}’).\nformat_map" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "Return the combined failure criterion as a dictionary.\ndict[str, Any]\nJSON dictionary that can be used for the result definition\nof the DPF Composites Failure evaluator operator.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map", + "title": "format_map > format_map > format_map", + "section": "format_map > format_map", + "text": "FailureMeasureEnum.format_map(mapping, /)\n\nReturn a formatted version of the string, using substitutions from mapping.\nThe substitutions are identified by braces (‘{’ and ‘}’).\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.FailureModeEnum.pmA", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA.html#pma", + "title": "pmA", + "section": "pmA", + "text": "pmA" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.failure_criteria.FailureModeEnum.pmA", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA", + "title": "pmA > pmA > pmA", + "section": "pmA > pmA", + "text": "FailureModeEnum.pmA = 802\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.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.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.failure_criteria.PuckCriterion.wf_pmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc.html#ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc", + "title": "wf_pmc > wf_pmc > wf_pmc", + "section": "wf_pmc > wf_pmc", + "text": "property PuckCriterion.wf_pmc: float\n\nWeighting factor of the matrix failure (pmc) mode.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.FailureModeEnum.e2c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2c.html#e2c", + "title": "e2c", + "section": "e2c", + "text": "e2c" }, { - "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.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.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_json.html#to_json", + "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.FaceSheetWrinklingCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_json.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.to_json", + "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": "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 !!" + "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.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.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.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.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#e3t", - "title": "e3t", - "section": "e3t", - "text": "e3t" + "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.e3t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t", - "title": "e3t > e3t > e3t", - "section": "e3t > e3t", - "text": "FailureModeEnum.e3t = 131\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.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.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.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.failure_criteria.FailureModeEnum.s2t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2t.html#s2t", - "title": "s2t", - "section": "s2t", - "text": "s2t" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.s2t", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s2t", - "title": "s2t > s2t > s2t", - "section": "s2t > s2t", - "text": "FailureModeEnum.s2t = 221\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.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.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.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.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.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.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.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.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.FaceSheetWrinklingCriterion.homogeneous_core_coeff", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff.html#homogeneous_core_coeff", + "title": "homogeneous_core_coeff", + "section": "homogeneous_core_coeff", + "text": "Wrinkling coefficient (reduction factor) for homogeneous core materials.\nfloat\nhomogeneous_core_coeff\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion", - "title": "FaceSheetWrinklingCriterion > FaceSheetWrinklingCriterion > FaceSheetWrinklingCriterion", - "section": "FaceSheetWrinklingCriterion > FaceSheetWrinklingCriterion", - "text": "class ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion(*, homogeneous_core_coeff=0.5, honeycomb_core_coeff=0.33, wf=1.0)\n\nDefines the face sheet wrinkling criterion for sandwiches (laminate with cores).\n\nParameters\n\nhomogeneous_core_coeff (float, default: 0.5) – Wrinkling coefficient (reduction factor) for homogeneous core materials.\n\nhoneycomb_core_coeff (float, default: 0.33) – Wrinkling coefficient (reduction factor) for honeycombs. The default is 0.33.\n\nwf (float, default: 1.0) – Weighting factor of the failure mode (wb or wt). The default is 0.5.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nFaceSheetWrinklingCriterion.to_dict()\n\n\n\nFaceSheetWrinklingCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nFaceSheetWrinklingCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nFaceSheetWrinklingCriterion.homogeneous_core_coeff\n\nWrinkling coefficient (reduction factor) for homogeneous core materials.\n\nFaceSheetWrinklingCriterion.honeycomb_core_coeff\n\nWrinkling coefficient (reduction factor) for honeycombs.\n\nFaceSheetWrinklingCriterion.name\n\nName of the failure criterion.\n\nFaceSheetWrinklingCriterion.wf\n\nWeighting factor of the failure mode (wb or wt).\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.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.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.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.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.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.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.HashinCriterion.hf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hf.html#hf", + "title": "hf", + "section": "hf", + "text": "Whether to activate the failure evaluation regarding fiber failure.\nbool\nhf\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.HashinCriterion.hf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hf.html#ansys.dpf.composites.failure_criteria.HashinCriterion.hf", + "title": "hf > hf > hf", + "section": "hf > hf", + "text": "property HashinCriterion.hf: bool\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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": "intro", + "href": "intro.html#getting-started", + "title": "Getting started", + "section": "Getting started", + "text": "Getting started" }, { - "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": "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.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": "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.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": "intro", + "href": "intro.html#start-from-a-local-ansys-workbench-project", + "title": "Getting started > Start from a local Ansys Workbench project", + "section": "Start from a local Ansys Workbench project", + "text": "To get started on a local Ansys Workbench project, first determine the result folder by\nright-clicking the solution object in Ansys Mechanical and selecting Open Solver Files Directory.\nThen call the get_composite_files_from_workbench_result_folder() function with this folder.\nThis code shows how to set up a project from Workbench, create a basic failure plot, and display\ndetailed output for a sampling point:\nStart from a local Ansys Workbench project\nget_composite_files_from_workbench_result_folder()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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": "intro", + "href": "intro.html#compatibility", + "title": "Getting started > Compatibility", + "section": "Compatibility", + "text": "The following table shows which ansys-dpf-composites version is compatible with which server version (Ansys version). See Get DPF Docker image to get the pre-releases.\nBy default the DPF server is started from the latest Ansys installer. To choose a specific Ansys version or connect to an existing server, use the appropriate arguments for connect_to_or_start_server()\nServer version\nansys.dpf.composites Python module version\n9.0 (Ansys 2025 R1 pre0)\n0.3.0 and later\n8.1 (Ansys 2024 R2 pre1)\n0.3.0 and later\n8.0 (Ansys 2024 R2 pre0)\n0.3.0 and later\n7.0 (Ansys 2024 R1)\n0.3.0 and later\n7.0 (Ansys 2024 R1 pre0)\n0.3.0 and later\n6.2 (Ansys 2023 R2)\n0.2.0 and 0.3\n6.1 (Ansys 2023 R2 pre1)\n0.2.0 and 0.3\n6.0 (Ansys 2023 R2 pre0)\nNot available. The composites plugin is not part of the Ansys 2023 R2 pre0 release.\n5.0 (Ansys 2023 R1)\n0.1.0\nCompatibility\nansys-dpf-composites\nconnect_to_or_start_server()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_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": "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": "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.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/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.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": "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.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": "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.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": "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": "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": "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": "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.610 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": "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 5.877 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_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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.sampling_point.SamplingPoint.add_results_to_plot", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot.html#ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot", - "title": "add_results_to_plot > add_results_to_plot > add_results_to_plot", - "section": "add_results_to_plot > add_results_to_plot", - "text": "SamplingPoint.add_results_to_plot(axes, components, spots=(Spot.BOTTOM, Spot.TOP), core_scale_factor=1.0, title='', xlabel='')\n\nAdd results (strain, stress, or failure values) to an Axes object.\n\nParameters\n\naxes (Any) – Matplotlib Axes object.\n\ncomponents (Sequence[str]) – List of result components. Valid components for\nstrain are \"e1\", \"e2\", \"e3\", \"e12\", \"e13\",\nand \"e23\" Valid components for stress are \"s1\", \"s2\",\n\"s3\", \"s12\", \"s13\", and \"s23\". Valid components\nfor failure are \"inverse_reserve_factor\", \"reserve_factor\",\nand \"margin_of_safety\".\n\nspots (Collection[Spot], default: (, )) – Collection of spots (interfaces).\n\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\n\ntitle (str, default: '') – Title of the plot. This parameter is ignored if empty.\n\nxlabel (str, default: '') – Becomes the label of the x-axis. This parameter is ignored if empty.\n\nExamples\n\n>>> import matplotlib.pyplot as plt\n>>> fig, ax1 = plt.subplots()\n>>> sampling_point.add_results_to_plot(ax1,\n [\"s13\", \"s23\", \"s3\"],\n [Spot.BOTTOM, Spot.TOP],\n 0.1, \"Interlaminar Stresses\", \"[MPa]\")\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.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.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.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.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.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.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.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.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.sc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.sc.html#sc", + "title": "sc", + "section": "sc", + "text": "sc" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.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.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.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.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.sampling_point.SamplingPoint.s2", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2.html#s2", - "title": "s2", - "section": "s2", - "text": "Stresses in the material 2 direction of each ply.\nndarray[Any, dtype[float64]]\ns2\nndarray\nAny\ndtype\nfloat64" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.failure_criteria.MaxStressCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.html#maxstresscriterion", + "title": "MaxStressCriterion", + "section": "MaxStressCriterion", + "text": "Defines the maximum stress failure criterion for orthotropic reinforced materials.\ns1 (bool, default: True) – Whether to activate the failure evaluation regarding the stress in the material 1 direction.\ns2 (bool, default: True) – Whether to activate the failure evaluation regarding the stress in the material 2 direction.\ns3 (bool, default: False) – Whether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\ns12 (bool, default: True) – Whether to activate the failure evaluation regarding the in-plane shear stress s12.\ns13 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear stress s13.\ns23 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear stress s23.\nwf_s1 (float, default: 1.0) – Weighting factor of the failure mode s1.\nwf_s2 (float, default: 1.0) – Weighting factor of the failure mode s2.\nwf_s3 (float, default: 1.0) – Weighting factor of the failure mode s3.\nwf_s12 (float, default: 1.0) – Weighting factor of the failure mode s12.\nwf_s13 (float, default: 1.0) – Weighting factor of the failure mode s13.\nwf_s23 (float, default: 1.0) – Weighting factor of the failure mode s23.\nMaxStressCriterion.to_dict()\n\nMaxStressCriterion.to_json()\n\nMaxStressCriterion.active\nThe failure criterion is suppressed if active is False.\nMaxStressCriterion.name\nName of the failure criterion.\nMaxStressCriterion.s1\nWhether to activate the failure evaluation regarding the stress in the material 1 direction.\nMaxStressCriterion.s12\nWhether to activate the failure evaluation regarding the in-plane shear stress s12.\nMaxStressCriterion.s13\nWhether to activate the failure evaluation regarding the interlaminar shear stress s13.\nMaxStressCriterion.s2\nWhether to activate the failure evaluation regarding the stress in the material 2 direction.\nMaxStressCriterion.s23\nWhether to activate the failure evaluation regarding the interlaminar shear stress s23.\nMaxStressCriterion.s3\nWhether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\nMaxStressCriterion.wf_s1\nWeighting factor of the failure mode s1.\nMaxStressCriterion.wf_s12\nWeighting factor of the failure mode s12.\nMaxStressCriterion.wf_s13\nWeighting factor of the failure mode s13.\nMaxStressCriterion.wf_s2\nWeighting factor of the failure mode s2.\nMaxStressCriterion.wf_s23\nWeighting factor of the failure mode s23.\nMaxStressCriterion.wf_s3\nWeighting factor of the failure mode s3.\nMaxStressCriterion\nbool\nTrue\nbool\nTrue\nbool\nFalse\nbool\nTrue\nbool\nFalse\nbool\nFalse\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nfloat\n1.0\nMaxStressCriterion.to_dict\nMaxStressCriterion.to_json\nMaxStressCriterion.active\nMaxStressCriterion.name\nMaxStressCriterion.s1\nMaxStressCriterion.s12\nMaxStressCriterion.s13\nMaxStressCriterion.s2\nMaxStressCriterion.s23\nMaxStressCriterion.s3\nMaxStressCriterion.wf_s1\nMaxStressCriterion.wf_s12\nMaxStressCriterion.wf_s13\nMaxStressCriterion.wf_s2\nMaxStressCriterion.wf_s23\nMaxStressCriterion.wf_s3" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.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_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.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.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.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.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.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.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.FailureModeEnum.tw", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.tw.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.tw", - "title": "tw > tw > tw", - "section": "tw > tw", - "text": "FailureModeEnum.tw = 400\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.sampling_point.SamplingPoint.offsets", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets.html#ansys.dpf.composites.sampling_point.SamplingPoint.offsets", - "title": "offsets > offsets > offsets", - "section": "offsets > offsets", - "text": "property SamplingPoint.offsets: ndarray[Any, dtype[float64]]\n\nZ coordinates for each interface and ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.html#analysisplyinfoprovider", + "title": "AnalysisPlyInfoProvider", + "section": "AnalysisPlyInfoProvider", + "text": "AnalysisPlyInfoProvider. Can be used to compute the layer indices of a given analysis ply.\nmesh (MeshedRegion) – DPF MeshedRegion with lay-up information.\nname (str) – Analysis Ply Name\nAnalysisPlyInfoProvider.get_layer_index_by_element_id(...)\nGet the layer index for the analysis ply in a given element.\nAnalysisPlyInfoProvider.ply_element_ids()\nReturn list of element labels of the analysis ply.\nAnalysisPlyInfoProvider\nMeshedRegion\nstr\nAnalysisPlyInfoProvider.get_layer_index_by_element_id\nAnalysisPlyInfoProvider.ply_element_ids" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz.html#esxz", - "title": "eSxz", - "section": "eSxz", - "text": "Global strain limit in material direction 13.\nfloat\neSxz\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.html#ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider", + "title": "AnalysisPlyInfoProvider > AnalysisPlyInfoProvider > AnalysisPlyInfoProvider", + "section": "AnalysisPlyInfoProvider > AnalysisPlyInfoProvider", + "text": "class ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider(mesh, name)\n\nAnalysisPlyInfoProvider. Can be used to compute the layer indices of a given analysis ply.\n\nParameters\n\nmesh (MeshedRegion) – DPF MeshedRegion with lay-up information.\n\nname (str) – Analysis Ply Name\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nAnalysisPlyInfoProvider.get_layer_index_by_element_id(...)\n\nGet the layer index for the analysis ply in a given element.\n\nAnalysisPlyInfoProvider.ply_element_ids()\n\nReturn list of element labels of the analysis ply.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.sampling_point.SamplingPointFigure", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.html#samplingpointfigure", - "title": "SamplingPointFigure", - "section": "SamplingPointFigure", - "text": "Provides the sampling point figure and axes.\nSamplingPointFigure.figure\n\nSamplingPointFigure.axes\n\nSamplingPointFigure\nSamplingPointFigure.figure\nSamplingPointFigure.axes" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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/select_indices", + "href": "api/select_indices.html#select-elementary-indices", + "title": "Select elementary indices", + "section": "Select elementary indices", + "text": "This module provides functions to filter elementary data.\nA layered element has the following number of elementary data points:\nIn the preceding definition, number_of_spots indicates the number of through-the-thickness\nintegration points per layer. number_of_spots is controlled by keyoption 8, which\nindicates how much output is written. For example, you might write output for only 'bottom'\nand 'top' or for 'bottom', 'top', and 'mid'.\nEach elementary data point can have multiple components. For example, it might have one component\nfor scalar data or six components for symmetrical 3x3 tensors. The elementary data of an element\nis available as a 2D vector with shape (num_elementary_data, number_of_components).\nHere are some examples:\nGet the stress output for a layered shell element (181, four nodes) with five layers and\nkeyoption 8 = 2. Write the output for 'bot', 'top', and 'mid'.\nnumber_of_layers = 5\nnumber_of_spots = 3 (bottom, top, and middle)\nnumber_of_nodes_per_spot_plane = 4 (equal to number of nodes)\nnumber_of_components = 6\nThus, num_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\n= 60.\nGet the stress output for a layered solid element (185, eight nodes) with seven layers and\nkeyoption 8 = 1. Write the output for 'bot' and 'top'.\nnumber_of_layers = 7\nnumber_of_spots = 2 (bottom and top)\nnumber_of_nodes_per_spot_plane = 4\nnumber_of_components = 6\nThus, num_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\n= 56.\nThe functions in this module compute an array of elementary indices for a given selection of\nlayers, nodes, spots, DPF material IDs, or analysis plies. These elementary indices can be used\nto index the first axis of the elementary data array. For usage information, see\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py.\nget_selected_indices(element_info[, layers, ...])\nGet elementary indices based on element information, layers, nodes, and spots.\nget_selected_indices_by_analysis_ply(...)\nGet selected indices by analysis ply.\nget_selected_indices_by_dpf_material_ids(...)\nGet selected indices by DPF material IDs.\nSelect elementary indices\nnumber_of_spots\nnumber_of_spots\nkeyoption 8\n'bottom'\n'top'\n'bottom'\n'top'\n'mid'\n(num_elementary_data, number_of_components)\nkeyoption 8 = 2\n'bot'\n'top'\n'mid'\nnumber_of_layers\nnumber_of_spots\nnumber_of_nodes_per_spot_plane\nnumber_of_components\nnum_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\nkeyoption 8 = 1\n'bot'\n'top'\nnumber_of_layers\nnumber_of_spots\nnumber_of_nodes_per_spot_plane\nnumber_of_components\nnum_elementary_data = number_of_layers * number_of_spots * number_of_nodes_per_spot_plane\nget_selected_indices\nget_selected_indices_by_analysis_ply\nget_selected_indices_by_dpf_material_ids" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.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/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.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/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.constants.Sym3x3TensorComponent.TENSOR11", - "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11.html#tensor11", - "title": "TENSOR11", - "section": "TENSOR11", - "text": "TENSOR11" + "objectID": "api/layup_info", + "href": "api/layup_info.html#material-operators", + "title": "Lay-up information > Material operators", + "section": "Material operators", + "text": "MaterialOperators(material_provider, ...)\nProvides the container for material-related operators.\nget_material_operators(rst_data_source, ...)\nGet material properties related to operators.\nMaterial operators\nMaterialOperators\nget_material_operators" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.constants.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.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.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.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.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.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.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.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.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.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.LaRCCriterion.wf_lmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc.html#wf_lmc", - "title": "wf_lmc", - "section": "wf_lmc", - "text": "Weighting factor of matrix failure due to compression (lmc).\nfloat\nwf_lmc\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset", + "title": "get_element_laminate_offset > get_element_laminate_offset > get_element_laminate_offset", + "section": "get_element_laminate_offset > get_element_laminate_offset", + "text": "LayupPropertiesProvider.get_element_laminate_offset(element_id)\n\nGet laminate offset of element. Returns None if element is not layered.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[float64]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc", - "title": "wf_lmc > wf_lmc > wf_lmc", - "section": "wf_lmc > wf_lmc", - "text": "property LaRCCriterion.wf_lmc: float\n\nWeighting factor of matrix failure due to compression (lmc).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "VonMisesCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.result_definition.FailureMeasureEnum", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.html#failuremeasureenum", + "title": "FailureMeasureEnum", + "section": "FailureMeasureEnum", + "text": "Provides available failure measures.\nFailureMeasureEnum.encode(/[, encoding, errors])\nEncode the string using the codec registered for encoding.\nFailureMeasureEnum.replace(old, new, /[, count])\nReturn a copy with all occurrences of substring old replaced by new.\nFailureMeasureEnum.split(/[, sep, maxsplit])\nReturn a list of the substrings in the string, using sep as the separator string.\nFailureMeasureEnum.rsplit(/[, sep, maxsplit])\nReturn a list of the substrings in the string, using sep as the separator string.\nFailureMeasureEnum.join(iterable, /)\nConcatenate any number of strings.\nFailureMeasureEnum.capitalize(/)\nReturn a capitalized version of the string.\nFailureMeasureEnum.casefold(/)\nReturn a version of the string suitable for caseless comparisons.\nFailureMeasureEnum.title(/)\nReturn a version of the string where each word is titlecased.\nFailureMeasureEnum.center(width[, fillchar])\nReturn a centered string of length width.\nFailureMeasureEnum.count(sub[, start[, end]], /)\nReturn the number of non-overlapping occurrences of substring sub in string S[start:end].\nFailureMeasureEnum.expandtabs(/[, tabsize])\nReturn a copy where all tab characters are expanded using spaces.\nFailureMeasureEnum.find(sub[, start[, end]], /)\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.partition(sep, /)\nPartition the string into three parts using the given separator.\nFailureMeasureEnum.index(sub[, start[, end]], /)\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.ljust(width[, fillchar])\nReturn a left-justified string of length width.\nFailureMeasureEnum.lower(/)\nReturn a copy of the string converted to lowercase.\nFailureMeasureEnum.lstrip([chars])\nReturn a copy of the string with leading whitespace removed.\nFailureMeasureEnum.rfind(sub[, start[, end]], /)\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.rindex(sub[, start[, end]], /)\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.rjust(width[, fillchar])\nReturn a right-justified string of length width.\nFailureMeasureEnum.rstrip([chars])\nReturn a copy of the string with trailing whitespace removed.\nFailureMeasureEnum.rpartition(sep, /)\nPartition the string into three parts using the given separator.\nFailureMeasureEnum.splitlines(/[, keepends])\nReturn a list of the lines in the string, breaking at line boundaries.\nFailureMeasureEnum.strip([chars])\nReturn a copy of the string with leading and trailing whitespace removed.\nFailureMeasureEnum.swapcase(/)\nConvert uppercase characters to lowercase and lowercase characters to uppercase.\nFailureMeasureEnum.translate(table, /)\nReplace each character in the string using the given translation table.\nFailureMeasureEnum.upper(/)\nReturn a copy of the string converted to uppercase.\nFailureMeasureEnum.startswith(prefix[, ...)\nReturn True if the string starts with the specified prefix, False otherwise.\nFailureMeasureEnum.endswith(suffix[, start[, ...)\nReturn True if the string ends with the specified suffix, False otherwise.\nFailureMeasureEnum.removeprefix(prefix, /)\nReturn a str with the given prefix string removed if present.\nFailureMeasureEnum.removesuffix(suffix, /)\nReturn a str with the given suffix string removed if present.\nFailureMeasureEnum.isascii(/)\nReturn True if all characters in the string are ASCII, False otherwise.\nFailureMeasureEnum.islower(/)\nReturn True if the string is a lowercase string, False otherwise.\nFailureMeasureEnum.isupper(/)\nReturn True if the string is an uppercase string, False otherwise.\nFailureMeasureEnum.istitle(/)\nReturn True if the string is a title-cased string, False otherwise.\nFailureMeasureEnum.isspace(/)\nReturn True if the string is a whitespace string, False otherwise.\nFailureMeasureEnum.isdecimal(/)\nReturn True if the string is a decimal string, False otherwise.\nFailureMeasureEnum.isdigit(/)\nReturn True if the string is a digit string, False otherwise.\nFailureMeasureEnum.isnumeric(/)\nReturn True if the string is a numeric string, False otherwise.\nFailureMeasureEnum.isalpha(/)\nReturn True if the string is an alphabetic string, False otherwise.\nFailureMeasureEnum.isalnum(/)\nReturn True if the string is an alpha-numeric string, False otherwise.\nFailureMeasureEnum.isidentifier(/)\nReturn True if the string is a valid Python identifier, False otherwise.\nFailureMeasureEnum.isprintable(/)\nReturn True if the string is printable, False otherwise.\nFailureMeasureEnum.zfill(width, /)\nPad a numeric string with zeros on the left, to fill a field of the given width.\nFailureMeasureEnum.format(*args, **kwargs)\nReturn a formatted version of the string, using substitutions from args and kwargs.\nFailureMeasureEnum.format_map(mapping, /)\nReturn a formatted version of the string, using substitutions from mapping.\nFailureMeasureEnum.maketrans(x[, y, z])\nReturn a translation table usable for str.translate().\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\n\nFailureMeasureEnum.MARGIN_OF_SAFETY\n\nFailureMeasureEnum.RESERVE_FACTOR\n\nFailureMeasureEnum\nFailureMeasureEnum.encode\nFailureMeasureEnum.replace\nFailureMeasureEnum.split\nFailureMeasureEnum.rsplit\nFailureMeasureEnum.join\nFailureMeasureEnum.capitalize\nFailureMeasureEnum.casefold\nFailureMeasureEnum.title\nFailureMeasureEnum.center\nFailureMeasureEnum.count\nFailureMeasureEnum.expandtabs\nFailureMeasureEnum.find\nFailureMeasureEnum.partition\nFailureMeasureEnum.index\nFailureMeasureEnum.ljust\nFailureMeasureEnum.lower\nFailureMeasureEnum.lstrip\nFailureMeasureEnum.rfind\nFailureMeasureEnum.rindex\nFailureMeasureEnum.rjust\nFailureMeasureEnum.rstrip\nFailureMeasureEnum.rpartition\nFailureMeasureEnum.splitlines\nFailureMeasureEnum.strip\nFailureMeasureEnum.swapcase\nFailureMeasureEnum.translate\nFailureMeasureEnum.upper\nFailureMeasureEnum.startswith\nFailureMeasureEnum.endswith\nFailureMeasureEnum.removeprefix\nFailureMeasureEnum.removesuffix\nFailureMeasureEnum.isascii\nFailureMeasureEnum.islower\nFailureMeasureEnum.isupper\nFailureMeasureEnum.istitle\nFailureMeasureEnum.isspace\nFailureMeasureEnum.isdecimal\nFailureMeasureEnum.isdigit\nFailureMeasureEnum.isnumeric\nFailureMeasureEnum.isalpha\nFailureMeasureEnum.isalnum\nFailureMeasureEnum.isidentifier\nFailureMeasureEnum.isprintable\nFailureMeasureEnum.zfill\nFailureMeasureEnum.format\nFailureMeasureEnum.format_map\nFailureMeasureEnum.maketrans\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\nFailureMeasureEnum.MARGIN_OF_SAFETY\nFailureMeasureEnum.RESERVE_FACTOR" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.FailureMeasureEnum", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.html#ansys.dpf.composites.result_definition.FailureMeasureEnum", + "title": "FailureMeasureEnum > FailureMeasureEnum > FailureMeasureEnum", + "section": "FailureMeasureEnum > FailureMeasureEnum", + "text": "class ansys.dpf.composites.result_definition.FailureMeasureEnum(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides available failure measures.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nFailureMeasureEnum.encode(/[, encoding, errors])\n\nEncode the string using the codec registered for encoding.\n\nFailureMeasureEnum.replace(old, new, /[, count])\n\nReturn a copy with all occurrences of substring old replaced by new.\n\nFailureMeasureEnum.split(/[, sep, maxsplit])\n\nReturn a list of the substrings in the string, using sep as the separator string.\n\nFailureMeasureEnum.rsplit(/[, sep, maxsplit])\n\nReturn a list of the substrings in the string, using sep as the separator string.\n\nFailureMeasureEnum.join(iterable, /)\n\nConcatenate any number of strings.\n\nFailureMeasureEnum.capitalize(/)\n\nReturn a capitalized version of the string.\n\nFailureMeasureEnum.casefold(/)\n\nReturn a version of the string suitable for caseless comparisons.\n\nFailureMeasureEnum.title(/)\n\nReturn a version of the string where each word is titlecased.\n\nFailureMeasureEnum.center(width[, fillchar])\n\nReturn a centered string of length width.\n\nFailureMeasureEnum.count(sub[, start[, end]], /)\n\nReturn the number of non-overlapping occurrences of substring sub in string S[start:end].\n\nFailureMeasureEnum.expandtabs(/[, tabsize])\n\nReturn a copy where all tab characters are expanded using spaces.\n\nFailureMeasureEnum.find(sub[, start[, end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.partition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nFailureMeasureEnum.index(sub[, start[, end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.ljust(width[, fillchar])\n\nReturn a left-justified string of length width.\n\nFailureMeasureEnum.lower(/)\n\nReturn a copy of the string converted to lowercase.\n\nFailureMeasureEnum.lstrip([chars])\n\nReturn a copy of the string with leading whitespace removed.\n\nFailureMeasureEnum.rfind(sub[, start[, end]], /)\n\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.rindex(sub[, start[, end]], /)\n\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.rjust(width[, fillchar])\n\nReturn a right-justified string of length width.\n\nFailureMeasureEnum.rstrip([chars])\n\nReturn a copy of the string with trailing whitespace removed.\n\nFailureMeasureEnum.rpartition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nFailureMeasureEnum.splitlines(/[, keepends])\n\nReturn a list of the lines in the string, breaking at line boundaries.\n\nFailureMeasureEnum.strip([chars])\n\nReturn a copy of the string with leading and trailing whitespace removed.\n\nFailureMeasureEnum.swapcase(/)\n\nConvert uppercase characters to lowercase and lowercase characters to uppercase.\n\nFailureMeasureEnum.translate(table, /)\n\nReplace each character in the string using the given translation table.\n\nFailureMeasureEnum.upper(/)\n\nReturn a copy of the string converted to uppercase.\n\nFailureMeasureEnum.startswith(prefix[, ...)\n\nReturn True if the string starts with the specified prefix, False otherwise.\n\nFailureMeasureEnum.endswith(suffix[, start[, ...)\n\nReturn True if the string ends with the specified suffix, False otherwise.\n\nFailureMeasureEnum.removeprefix(prefix, /)\n\nReturn a str with the given prefix string removed if present.\n\nFailureMeasureEnum.removesuffix(suffix, /)\n\nReturn a str with the given suffix string removed if present.\n\nFailureMeasureEnum.isascii(/)\n\nReturn True if all characters in the string are ASCII, False otherwise.\n\nFailureMeasureEnum.islower(/)\n\nReturn True if the string is a lowercase string, False otherwise.\n\nFailureMeasureEnum.isupper(/)\n\nReturn True if the string is an uppercase string, False otherwise.\n\nFailureMeasureEnum.istitle(/)\n\nReturn True if the string is a title-cased string, False otherwise.\n\nFailureMeasureEnum.isspace(/)\n\nReturn True if the string is a whitespace string, False otherwise.\n\nFailureMeasureEnum.isdecimal(/)\n\nReturn True if the string is a decimal string, False otherwise.\n\nFailureMeasureEnum.isdigit(/)\n\nReturn True if the string is a digit string, False otherwise.\n\nFailureMeasureEnum.isnumeric(/)\n\nReturn True if the string is a numeric string, False otherwise.\n\nFailureMeasureEnum.isalpha(/)\n\nReturn True if the string is an alphabetic string, False otherwise.\n\nFailureMeasureEnum.isalnum(/)\n\nReturn True if the string is an alpha-numeric string, False otherwise.\n\nFailureMeasureEnum.isidentifier(/)\n\nReturn True if the string is a valid Python identifier, False otherwise.\n\nFailureMeasureEnum.isprintable(/)\n\nReturn True if the string is printable, False otherwise.\n\nFailureMeasureEnum.zfill(width, /)\n\nPad a numeric string with zeros on the left, to fill a field of the given width.\n\nFailureMeasureEnum.format(*args, **kwargs)\n\nReturn a formatted version of the string, using substitutions from args and kwargs.\n\nFailureMeasureEnum.format_map(mapping, /)\n\nReturn a formatted version of the string, using substitutions from mapping.\n\nFailureMeasureEnum.maketrans(x[, y, z])\n\nReturn a translation table usable for str.translate().\n\n\n\nAttributes\n\n\n\n\n\n\n\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\n\n\n\nFailureMeasureEnum.MARGIN_OF_SAFETY\n\n\n\nFailureMeasureEnum.RESERVE_FACTOR\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.HoffmanCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.wf.html#wf", + "title": "wf", + "section": "wf", + "text": "Weighting factor of this failure criterion.\nfloat\nwf\nfloat" }, { - "objectID": "examples/gallery_examples/002_sampling_point_example", - "href": "examples/gallery_examples/002_sampling_point_example.html#sampling-point", - "title": "Sampling point", - "section": "Sampling point", - "text": "This example extracts ply-wise laminate properties and results.\nThe Sampling Point class is used to extract\nthrough-the-thickness data of the laminate, such as ply-wise properties,\nstrains and stresses. It then implements basic visualization to plot\nthe laminate.\nThis example uses the Composite Model to scope a\nSampling Point to a certain element and to visualize the laminate.\nWhen using a Workbench project,\nuse the get_composite_files_from_workbench_result_folder()\nmethod to obtain the input files.\nSampling point\nSampling Point\nComposite Model\nget_composite_files_from_workbench_result_folder()" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.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": "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.cmC", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmC.html#cmc", + "title": "cmC", + "section": "cmC", + "text": "cmC" }, { - "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.cmC", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmC.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cmC", + "title": "cmC > cmC > cmC", + "section": "cmC > cmC", + "text": "FailureModeEnum.cmC = 1005\n\n" }, { - "objectID": "examples/gallery_examples/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.FailureModeEnum.vMs", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs.html#vms", + "title": "vMs", + "section": "vMs", + "text": "vMs" }, { - "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 4.837 seconds)\nDownload Jupyter notebook: 002_sampling_point_example.ipynb\nDownload Python source code: 002_sampling_point_example.py\nDownload zipped: 002_sampling_point_example.zip\nGallery generated by Sphinx-Gallery\nSample another element\nDownload Jupyter notebook: 002_sampling_point_example.ipynb\nDownload Python source code: 002_sampling_point_example.py\nDownload zipped: 002_sampling_point_example.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.vMs", + "title": "vMs > vMs > vMs", + "section": "vMs > vMs", + "text": "FailureModeEnum.vMs = 1102\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s23.html#wf_s23", - "title": "wf_s23", - "section": "wf_s23", - "text": "Weighting factor of the failure mode s23.\nfloat\nwf_s23\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_layers", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_layers.html#n_layers", + "title": "n_layers", + "section": "n_layers", + "text": "n_layers" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.composite_model.CompositeModel.get_sampling_point", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_sampling_point.html#ansys.dpf.composites.composite_model.CompositeModel.get_sampling_point", + "title": "get_sampling_point > get_sampling_point > get_sampling_point", + "section": "get_sampling_point > get_sampling_point", + "text": "CompositeModel.get_sampling_point(combined_criterion, element_id, time=None, composite_definition_label=None)\n\nGet a sampling point for an element ID and failure criteria.\n\nParameters\n\ncombined_criterion (CombinedFailureCriterion) – Combined failure criterion to evaluate.\n\nelement_id (int) – Element ID or label of the sampling point.\n\ntime (Optional[float], default: None) – Time or frequency at which to evaluate the sampling point. If None,\nthe last time or frequency in the result file is used.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nSamplingPoint\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.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.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": "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.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": "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.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.FailureModeEnum.s1t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s1t.html#s1t", + "title": "s1t", + "section": "s1t", + "text": "s1t" }, { - "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.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": "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.FailureModeEnum.lfc4", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc4.html#lfc4", + "title": "lfc4", + "section": "lfc4", + "text": "lfc4" }, { - "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.FailureModeEnum.lfc4", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc4.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lfc4", + "title": "lfc4 > lfc4 > lfc4", + "section": "lfc4 > lfc4", + "text": "FailureModeEnum.lfc4 = 902\n\n" }, { - "objectID": "examples/gallery_examples/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.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": "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.157 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.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.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.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.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.Strain_Limits_eSyz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSyz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSyz", + "title": "Strain_Limits_eSyz > Strain_Limits_eSyz > Strain_Limits_eSyz", + "section": "Strain_Limits_eSyz > Strain_Limits_eSyz", + "text": "MaterialProperty.Strain_Limits_eSyz: str = 'strain_shear_yz'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name.html#name", + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.name.html#name", "title": "name", "section": "name", "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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 FaceSheetWrinklingCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "text": "property MaxStressCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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": "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.ShearCrimpingCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.active.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property ShearCrimpingCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/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.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": "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.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": "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.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": "examples/gallery_examples/011_rst_workflow", + "href": "examples/gallery_examples/011_rst_workflow.html#create-and-plot-a-sampling-point", + "title": "Failure analysis of an MAPDL (RST) model > Create and plot a sampling point", + "section": "Create and plot a sampling point", + "text": "Create and plot a sampling point" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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": "examples/gallery_examples/011_rst_workflow", + "href": "examples/gallery_examples/011_rst_workflow.html#create-engineering-data-file-and-set-material-uuids-in-mapdl", + "title": "Failure analysis of an MAPDL (RST) model > Create Engineering Data file and set material UUIDs in MAPDL", + "section": "Create Engineering Data file and set material UUIDs in MAPDL", + "text": "Here are two workflows for setting up the engineering data file\nand the material UUIDs in MAPDL. The material UUIDs must be set\nin MAPDL before the model is solved.\nCreate an External Model system in WB and load the solver input file\nLink the External Model with an Engineering Data system and update it\nSave the project and copy the generated engineering data file (EngineeringData.xml)\nFor each material, look for the DataTransferID, go to MAPDL and set the material\nUUIDs with the MP,UVID,, command\nStart ACP, go to File - Import Model and load the solver input file (CDB)\nGo to the Materials folder and export the engineering data file (Ansys Workbench XML)\nFor each material, look for the DataTransferID, go to MAPDL and set the material\nUUID with the MP,UVID,, command.\nTotal running time of the script: (0 minutes 5.043 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.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.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.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.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.failure_criteria.MaxStrainCriterion.e13", @@ -1106,1999 +868,2111 @@ "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.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": "sg_execution_times", + "href": "sg_execution_times.html#computation-times", + "title": "Computation times", + "section": "Computation times", + "text": "01:22.317 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:12.061\n0.0\nsphx_glr_examples_gallery_examples_010_harmonic_example.py (../../examples/010_harmonic_example.py)\n00:09.928\n0.0\nsphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py (../../examples/014_cyclic_symmetry_example.py)\n00:07.394\n0.0\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py (../../examples/007_interlaminar_normal_stress_example.py)\n00:07.360\n0.0\nsphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py (../../examples/009_short_fiber_orientation_tensor.py)\n00:05.827\n0.0\nsphx_glr_examples_gallery_examples_011_rst_workflow.py (../../examples/011_rst_workflow.py)\n00:05.043\n0.0\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py (../../examples/002_sampling_point_example.py)\n00:04.888\n0.0\nsphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py (../../examples/099_dpf_composite_failure_workflow.py)\n00:04.671\n0.0\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py (../../examples/006_filter_composite_data_example.py)\n00:04.636\n0.0\nsphx_glr_examples_gallery_examples_013_thermal_example.py (../../examples/013_thermal_example.py)\n00:04.181\n0.0\nsphx_glr_examples_gallery_examples_008_assembly_example.py (../../examples/008_assembly_example.py)\n00:04.148\n0.0\nsphx_glr_examples_gallery_examples_012_fatigue_example.py (../../examples/012_fatigue_example.py)\n00:03.799\n0.0\nsphx_glr_examples_gallery_examples_004_get_material_properties_example.py (../../examples/004_get_material_properties_example.py)\n00:03.610\n0.0\nsphx_glr_examples_gallery_examples_003_short_fiber_example.py (../../examples/003_short_fiber_example.py)\n00:03.287\n0.0\nsphx_glr_examples_gallery_examples_005_get_layup_properties_example.py (../../examples/005_get_layup_properties_example.py)\n00:01.484\n0.0\nComputation times\n../../examples/001_failure_operator_example.py\n../../examples/010_harmonic_example.py\n../../examples/014_cyclic_symmetry_example.py\n../../examples/007_interlaminar_normal_stress_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/004_get_material_properties_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.MaxStrainCriterion.eYc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc", - "title": "eYc > eYc > eYc", - "section": "eYc > eYc", - "text": "property MaxStrainCriterion.eYc: float\n\nGlobal compressive strain limit in material direction 1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.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.e3t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t.html#e3t", + "title": "e3t", + "section": "e3t", + "text": "e3t" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e3t", + "title": "e3t > e3t > e3t", + "section": "e3t > e3t", + "text": "FailureModeEnum.e3t = 131\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.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.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.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.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_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.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.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.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.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.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.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.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.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.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.constants.Sym3x3TensorComponent.TENSOR33", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR33.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR33", + "title": "TENSOR33 > TENSOR33 > TENSOR33", + "section": "TENSOR33 > TENSOR33", + "text": "Sym3x3TensorComponent.TENSOR33 = 2\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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/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.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/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.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt", - "title": "Stress_Limits_Xt > Stress_Limits_Xt > Stress_Limits_Xt", - "section": "Stress_Limits_Xt > Stress_Limits_Xt", - "text": "MaterialProperty.Stress_Limits_Xt: str = 'stress_tensile_x_direction'\n\n" + "objectID": "examples/gallery_examples/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.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": "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.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": "examples/gallery_examples/099_dpf_composite_failure_workflow", + "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#set-up-result-operators", + "title": "DPF composite failure workflow > Set up result operators", + "section": "Set up result operators", + "text": "Set up result operators for strains and stresses.\nrotate_to_global is False because the postprocessing engine expects the\nresults to be in the element coordinate system (material coordinate system).\nSet up result operators\nrotate_to_global\nFalse" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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": "examples/gallery_examples/099_dpf_composite_failure_workflow", + "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#set-up-failure-evaluator", + "title": "DPF composite failure workflow > Set up failure evaluator", + "section": "Set up failure evaluator", + "text": "Set up the failure evaluator, which combines the results and\nevaluates all failure criteria. The output contains the\nmaximum failure criteria for each integration point.\nSet up failure evaluator" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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": "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.671 seconds)\nDownload Jupyter notebook: 099_dpf_composite_failure_workflow.ipynb\nDownload Python source code: 099_dpf_composite_failure_workflow.py\nDownload zipped: 099_dpf_composite_failure_workflow.zip\nGallery generated by Sphinx-Gallery\nCompute and plot failure criteria\nDownload Jupyter notebook: 099_dpf_composite_failure_workflow.ipynb\nDownload Python source code: 099_dpf_composite_failure_workflow.py\nDownload zipped: 099_dpf_composite_failure_workflow.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.cmb", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmb.html#cmb", + "title": "cmb", + "section": "cmb", + "text": "Activates the failure evaluation of the matrix due to compression.\nbool\ncmb\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.PuckCriterion.p21_neg", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_neg.html#p21_neg", + "title": "p21_neg", + "section": "p21_neg", + "text": "Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for compression.\nfloat\np21_neg\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.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.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.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.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Tsai_Wu_Constant_xz.html#tsai_wu_constant_xz", + "title": "Tsai_Wu_Constant_xz", + "section": "Tsai_Wu_Constant_xz", + "text": "Tsai_Wu_Constant_xz" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.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.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.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.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.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.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.MaxStressCriterion.s23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s23.html#s23", - "title": "s23", - "section": "s23", - "text": "Whether to activate the failure evaluation regarding the interlaminar shear stress s23.\nbool\ns23\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.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.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.CompositeDataSources.old_composite_sources", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.old_composite_sources.html#old_composite_sources", + "title": "old_composite_sources", + "section": "old_composite_sources", + "text": "old_composite_sources" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.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.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/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.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR.html#inverse_reserve_factor", + "title": "INVERSE_RESERVE_FACTOR", + "section": "INVERSE_RESERVE_FACTOR", + "text": "INVERSE_RESERVE_FACTOR" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.INVERSE_RESERVE_FACTOR", + "title": "INVERSE_RESERVE_FACTOR > INVERSE_RESERVE_FACTOR > INVERSE_RESERVE_FACTOR", + "section": "INVERSE_RESERVE_FACTOR > INVERSE_RESERVE_FACTOR", + "text": "FailureMeasureEnum.INVERSE_RESERVE_FACTOR: str = 'inverse_reserve_factor'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.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.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.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.HashinCriterion.hf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hf.html#hf", - "title": "hf", - "section": "hf", - "text": "Whether to activate the failure evaluation regarding fiber failure.\nbool\nhf\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.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.HashinCriterion.hf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hf.html#ansys.dpf.composites.failure_criteria.HashinCriterion.hf", - "title": "hf > hf > hf", - "section": "hf > hf", - "text": "property HashinCriterion.hf: bool\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.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.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.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.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.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.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.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.material_operators.MaterialOperators.result_info_provider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider.html#ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider", - "title": "result_info_provider > result_info_provider > result_info_provider", - "section": "result_info_provider > result_info_provider", - "text": "property MaterialOperators.result_info_provider: Operator\n\nGet result_info_provider.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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_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.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.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.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.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.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.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.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.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.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.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.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.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.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.select_indices.get_selected_indices_by_analysis_ply", - "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply.html#get_selected_indices_by_analysis_ply", - "title": "get_selected_indices_by_analysis_ply", - "section": "get_selected_indices_by_analysis_ply", - "text": "Get selected indices by analysis ply.\nSelects all indices that are in a layer with the given analysis ply\nanalysis_ply_info_provider (AnalysisPlyInfoProvider) – Provider for the analysis ply information.\nelement_info (ElementInfo) – Lay-up information for the element.\nSelected elementary indices.\nNDArray[int64]\nget_selected_indices_by_analysis_ply" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.ply_wise_data.SpotReductionStrategy.BOT", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.BOT.html#bot", - "title": "BOT", - "section": "BOT", - "text": "BOT" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.ply_wise_data.SpotReductionStrategy.BOT", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.BOT.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.BOT", - "title": "BOT > BOT > BOT", - "section": "BOT > BOT", - "text": "SpotReductionStrategy.BOT = 'BOT'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.Hill_Yield_Criterion_R13", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R13.html#hill_yield_criterion_r13", + "title": "Hill_Yield_Criterion_R13", + "section": "Hill_Yield_Criterion_R13", + "text": "Hill_Yield_Criterion_R13" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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_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.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.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.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.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.sampling_point.SamplingPoint.add_results_to_plot", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot.html#ansys.dpf.composites.sampling_point.SamplingPoint.add_results_to_plot", + "title": "add_results_to_plot > add_results_to_plot > add_results_to_plot", + "section": "add_results_to_plot > add_results_to_plot", + "text": "SamplingPoint.add_results_to_plot(axes, components, spots=(Spot.BOTTOM, Spot.TOP), core_scale_factor=1.0, title='', xlabel='')\n\nAdd results (strain, stress, or failure values) to an Axes object.\n\nParameters\n\naxes (Any) – Matplotlib Axes object.\n\ncomponents (Sequence[str]) – List of result components. Valid components for\nstrain are \"e1\", \"e2\", \"e3\", \"e12\", \"e13\",\nand \"e23\" Valid components for stress are \"s1\", \"s2\",\n\"s3\", \"s12\", \"s13\", and \"s23\". Valid components\nfor failure are \"inverse_reserve_factor\", \"reserve_factor\",\nand \"margin_of_safety\".\n\nspots (Collection[Spot], default: (, )) – Collection of spots (interfaces).\n\ncore_scale_factor (float, default: 1.0) – Factor for scaling the thickness of core plies.\n\ntitle (str, default: '') – Title of the plot. This parameter is ignored if empty.\n\nxlabel (str, default: '') – Becomes the label of the x-axis. This parameter is ignored if empty.\n\nExamples\n\n>>> import matplotlib.pyplot as plt\n>>> fig, ax1 = plt.subplots()\n>>> sampling_point.add_results_to_plot(ax1,\n [\"s13\", \"s23\", \"s3\"],\n [Spot.BOTTOM, Spot.TOP],\n 0.1, \"Interlaminar Stresses\", \"[MPa]\")\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.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/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.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/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.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": "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.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": "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.360 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#ho", - "title": "ho", - "section": "ho", - "text": "ho" + "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.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.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", - "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.FailureModeEnum.lft3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3.html#lft3", + "title": "lft3", + "section": "lft3", + "text": "lft3" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.FailureModeEnum.lft3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3", + "title": "lft3 > lft3 > lft3", + "section": "lft3 > lft3", + "text": "FailureModeEnum.lft3 = 901\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.MaxStrainCriterion.wf_e2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e2.html#wf_e2", - "title": "wf_e2", - "section": "wf_e2", - "text": "Weighting factor of the failure mode e2.\nfloat\nwf_e2\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.composite_model.CompositeModel.get_all_layered_element_ids", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids.html#get_all_layered_element_ids", - "title": "get_all_layered_element_ids", - "section": "get_all_layered_element_ids", - "text": "Get all element IDs with lay-up data.\nSequence[int]\nget_all_layered_element_ids\nSequence\nint" + "objectID": "api/_autosummary/ansys.dpf.composites.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.composite_model.CompositeModel.get_all_layered_element_ids", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids.html#ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids", - "title": "get_all_layered_element_ids > get_all_layered_element_ids > get_all_layered_element_ids", - "section": "get_all_layered_element_ids > get_all_layered_element_ids", - "text": "CompositeModel.get_all_layered_element_ids()\n\nGet all element IDs with lay-up data.\n\nReturn type\n\nSequence[int]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.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.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.as", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.as.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.as", + "title": "as > as > as", + "section": "as > as", + "text": "FailureModeEnum.as = 1201\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.result_definition.FailureMeasureEnum.MARGIN_OF_SAFETY", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.MARGIN_OF_SAFETY.html#margin_of_safety", - "title": "MARGIN_OF_SAFETY", - "section": "MARGIN_OF_SAFETY", - "text": "MARGIN_OF_SAFETY" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.ElementInfo.is_shell", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_shell.html#ansys.dpf.composites.layup_info.ElementInfo.is_shell", - "title": "is_shell > is_shell > is_shell", - "section": "is_shell > is_shell", - "text": "ElementInfo.is_shell: bool\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.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.layup_info.LayerProperty.SHEAR_ANGLES", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES.html#ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES", - "title": "SHEAR_ANGLES > SHEAR_ANGLES > SHEAR_ANGLES", - "section": "SHEAR_ANGLES > SHEAR_ANGLES", - "text": "LayerProperty.SHEAR_ANGLES = 2\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.ply_wise_data.SpotReductionStrategy", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.html#spotreductionstrategy", - "title": "SpotReductionStrategy", - "section": "SpotReductionStrategy", - "text": "Provides the strategy for getting from spot values (BOT, MID, TOP) to a single value.\nSpotReductionStrategy.MIN\n\nSpotReductionStrategy.MAX\n\nSpotReductionStrategy.AVG\n\nSpotReductionStrategy.BOT\n\nSpotReductionStrategy.MID\n\nSpotReductionStrategy.TOP\n\nSpotReductionStrategy\nSpotReductionStrategy.MIN\nSpotReductionStrategy.MAX\nSpotReductionStrategy.AVG\nSpotReductionStrategy.BOT\nSpotReductionStrategy.MID\nSpotReductionStrategy.TOP" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.layup_info.LayupProperty", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupProperty.html#ansys.dpf.composites.layup_info.LayupProperty", - "title": "LayupProperty > LayupProperty > LayupProperty", - "section": "LayupProperty > LayupProperty", - "text": "class ansys.dpf.composites.layup_info.LayupProperty(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nEnum for lay-up properties.\n\nValues correspond to labels in the output container of the lay-up provider.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nLayupProperty.ANGLE\n\n\n\nLayupProperty.SHEAR_ANGLE\n\n\n\nLayupProperty.THICKNESS\n\n\n\nLayupProperty.LAMINATE_OFFSET\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.MaxStressCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.get_all_dpf_material_ids", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids.html#ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids", + "title": "get_all_dpf_material_ids > get_all_dpf_material_ids > get_all_dpf_material_ids", + "section": "get_all_dpf_material_ids > get_all_dpf_material_ids", + "text": "ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids(mesh, data_source_or_streams_provider)\n\nGet all DPF material IDs.\n\nParameters\n\nmesh (MeshedRegion) – DPF meshed region enriched with lay-up information.\n\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source or stream provider that contains the RST file.\n\nReturn type\n\nCollection[int64]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.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/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.sampling_point.SamplingPoint.s13", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s13.html#ansys.dpf.composites.sampling_point.SamplingPoint.s13", + "title": "s13 > s13 > s13", + "section": "s13 > s13", + "text": "property SamplingPoint.s13: ndarray[Any, dtype[float64]]\n\nOut-of-plane shear stresses s13 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.data_sources.ShortFiberCompositesFiles.rst", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.rst.html#rst", - "title": "rst", - "section": "rst", - "text": "rst" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.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.emax", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax.html#emax", - "title": "emax", - "section": "emax", - "text": "emax" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.FailureModeEnum.emax", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.emax", - "title": "emax > emax > emax", - "section": "emax > emax", - "text": "FailureModeEnum.emax = 101\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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": "examples/gallery_examples/002_sampling_point_example", + "href": "examples/gallery_examples/002_sampling_point_example.html#sampling-point", + "title": "Sampling point", + "section": "Sampling point", + "text": "This example extracts ply-wise laminate properties and results.\nThe Sampling Point class is used to extract\nthrough-the-thickness data of the laminate, such as ply-wise properties,\nstrains and stresses. It then implements basic visualization to plot\nthe laminate.\nThis example uses the Composite Model to scope a\nSampling Point to a certain element and to visualize the laminate.\nWhen using a Workbench project,\nuse the get_composite_files_from_workbench_result_folder()\nmethod to obtain the input files.\nSampling point\nSampling Point\nComposite Model\nget_composite_files_from_workbench_result_folder()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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": "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.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": "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.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": "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.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": "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 4.888 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.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.AnalysisPlyInfoProvider.get_layer_index_by_element_id", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id.html#get_layer_index_by_element_id", + "title": "get_layer_index_by_element_id", + "section": "get_layer_index_by_element_id", + "text": "Get the layer index for the analysis ply in a given element.\nelement_id (int) – Element Id/Label\nOptional[int64]\nget_layer_index_by_element_id\nint\nOptional\nint64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.AnalysisPlyInfoProvider.get_layer_index_by_element_id", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id.html#ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id", + "title": "get_layer_index_by_element_id > get_layer_index_by_element_id > get_layer_index_by_element_id", + "section": "get_layer_index_by_element_id > get_layer_index_by_element_id", + "text": "AnalysisPlyInfoProvider.get_layer_index_by_element_id(element_id)\n\nGet the layer index for the analysis ply in a given element.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[int64]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.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.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.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.PuckCriterion.force_global_constants", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.force_global_constants.html#force_global_constants", - "title": "force_global_constants", - "section": "force_global_constants", - "text": "Whether to use global constants instead of the material-wise properties.\nbool\nforce_global_constants\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.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/layup_info", - "href": "api/layup_info.html#lay-up-information", - "title": "Lay-up information", - "section": "Lay-up information", - "text": "General features to access information on the composite lay-up.\nadd_layup_info_to_mesh(data_sources, ...[, ...])\nAdd lay-up information to the mesh.\nget_element_info_provider(mesh, ...[, ...])\nGet ElementInfoProvider Object.\nget_dpf_material_id_by_analyis_ply_map(mesh, ...)\nGet Dict that maps analysis ply names to dpf_material_ids.\nAnalysisPlyInfoProvider(mesh, name)\nAnalysisPlyInfoProvider.\nElementInfoProvider(mesh, layer_indices, ...)\nProvider for ElementInfo.\nElementInfo(id, n_layers, n_corner_nodes, ...)\nProvides lay-up information for an element.\nLayupPropertiesProvider(layup_provider, mesh)\nProvider for lay-up properties.\nLayerProperty(value[, names, module, ...])\nProvides the layer properties available.\nLayupProperty(value[, names, module, ...])\nEnum for lay-up properties.\nLayupModelContextType(value[, names, ...])\nType of the lay-up information.\nLay-up information\nadd_layup_info_to_mesh\nget_element_info_provider\nElementInfoProvider\nget_dpf_material_id_by_analyis_ply_map\nAnalysisPlyInfoProvider\nElementInfoProvider\nElementInfo\nElementInfo\nLayupPropertiesProvider\nLayerProperty\nLayupProperty\nLayupModelContextType" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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/layup_info", - "href": "api/layup_info.html#material-properties", - "title": "Lay-up information > Material properties", - "section": "Material properties", - "text": "A note on material ids: in the PyDPF - Composites module,\nmaterials are reference by their dpf_material_id. The dpf_material_id\nis generated based on the materials present in the result file.\nThe dpf_material_id can be different from the material id used in the solver.\nElementInfo contains the dpf_material_id for the materials\nof a given element. The dpf_material_id for a given analysis ply can be obtained\nby calling get_dpf_material_id_by_analyis_ply_map(). A lookup by\nmaterial name is currently not available.\nThe sphx_glr_examples_gallery_examples_004_get_material_properties_example.py\nexample shows how to evaluate material properties.\nget_constant_property(material_property, ...)\nGet a constant material property.\nget_all_dpf_material_ids(mesh, ...)\nGet all DPF material IDs.\nget_constant_property_dict(...)\nGet a dictionary with constant properties.\nMaterialProperty(value[, names, module, ...])\nProvides the material properties that are available.\nMaterialMetadata([dpf_material_id, ...])\nMaterial metadata such as name and ply type.\nMaterial properties\ndpf_material_id\ndpf_material_id\ndpf_material_id\nElementInfo\ndpf_material_id\ndpf_material_id\nget_dpf_material_id_by_analyis_ply_map()\nget_constant_property\nget_all_dpf_material_ids\nget_constant_property_dict\nMaterialProperty\nMaterialMetadata" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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/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.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.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.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.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.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.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.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.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.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.result_definition.ResultDefinitionScope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.html#ansys.dpf.composites.result_definition.ResultDefinitionScope", + "title": "ResultDefinitionScope > ResultDefinitionScope > ResultDefinitionScope", + "section": "ResultDefinitionScope > ResultDefinitionScope", + "text": "class ansys.dpf.composites.result_definition.ResultDefinitionScope(composite_definition, element_scope=, ply_scope=, named_selection_scope=, mapping_file=None, write_data_for_full_element_scope=True)\n\nProvides the result definition scope.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nResultDefinitionScope.mapping_file\n\nPath to the mapping file for all element labels in the element scope.\n\nResultDefinitionScope.write_data_for_full_element_scope\n\nWhether to write the data for all element labels in the element scope.\n\nResultDefinitionScope.composite_definition\n\n\n\nResultDefinitionScope.element_scope\n\n\n\nResultDefinitionScope.ply_scope\n\n\n\nResultDefinitionScope.named_selection_scope\n\nAssembly files that define the mapping of the labels.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.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.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.CombinedFailureCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.name.html#name", - "title": "name", - "section": "name", - "text": "Name of the combined failure criterion.\nstr\nname\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.CombinedFailureCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.name.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property CombinedFailureCriterion.name: str\n\nName of the combined failure criterion.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12", + "title": "e12 > e12 > e12", + "section": "e12 > e12", + "text": "property MaxStrainCriterion.e12: bool\n\nWhether to activate the failure evaluation regarding the in-plane shear strain e12.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz.html#strain_limits_esxz", - "title": "Strain_Limits_eSxz", - "section": "Strain_Limits_eSxz", - "text": "Strain_Limits_eSxz" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.TsaiHillCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict.html#to_dict", + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.to_dict.html#to_dict", "title": "to_dict", "section": "to_dict", "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.to_dict", + "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": "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.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" + "text": "TsaiWuCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.constants.Sym3x3TensorComponent", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.html#sym3x3tensorcomponent", + "title": "Sym3x3TensorComponent", + "section": "Sym3x3TensorComponent", + "text": "Provides tensor indices for symmetrical 3x3 tensors.\nSym3x3TensorComponent.TENSOR11\n\nSym3x3TensorComponent.TENSOR22\n\nSym3x3TensorComponent.TENSOR33\n\nSym3x3TensorComponent.TENSOR21\n\nSym3x3TensorComponent.TENSOR31\n\nSym3x3TensorComponent.TENSOR32\n\nSym3x3TensorComponent\nSym3x3TensorComponent.TENSOR11\nSym3x3TensorComponent.TENSOR22\nSym3x3TensorComponent.TENSOR33\nSym3x3TensorComponent.TENSOR21\nSym3x3TensorComponent.TENSOR31\nSym3x3TensorComponent.TENSOR32" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle.html#fracture_plane_angle", - "title": "fracture_plane_angle", - "section": "fracture_plane_angle", - "text": "Fracture plane angle in degrees. The default is 53. The value must be greater than 45. The value depends on the out-of-plane shear friction coefficient.\nfloat\nfracture_plane_angle\n53\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.html#ansys.dpf.composites.constants.Sym3x3TensorComponent", + "title": "Sym3x3TensorComponent > Sym3x3TensorComponent > Sym3x3TensorComponent", + "section": "Sym3x3TensorComponent > Sym3x3TensorComponent", + "text": "class ansys.dpf.composites.constants.Sym3x3TensorComponent(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides tensor indices for symmetrical 3x3 tensors.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nSym3x3TensorComponent.TENSOR11\n\n\n\nSym3x3TensorComponent.TENSOR22\n\n\n\nSym3x3TensorComponent.TENSOR33\n\n\n\nSym3x3TensorComponent.TENSOR21\n\n\n\nSym3x3TensorComponent.TENSOR31\n\n\n\nSym3x3TensorComponent.TENSOR32\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle", - "title": "fracture_plane_angle > fracture_plane_angle > fracture_plane_angle", - "section": "fracture_plane_angle > fracture_plane_angle", - "text": "property CuntzeCriterion.fracture_plane_angle: float\n\nFracture plane angle in degrees. The default is 53. The value must be greater than 45. The value depends on the out-of-plane shear friction coefficient.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.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.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.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.result_definition.FailureMeasureEnum.find", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.find.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.find", - "title": "find > find > find", - "section": "find > find", - "text": "FailureMeasureEnum.find(sub, [start, [end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nOptional arguments start and end are interpreted as in slice notation.\nReturn -1 on failure.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.CoreFailureCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property CoreFailureCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.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.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.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.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.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.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.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.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.e3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3", - "title": "e3 > e3 > e3", - "section": "e3 > e3", - "text": "property MaxStrainCriterion.e3: bool\n\nActivates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.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.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1.html#engineering_constants_e1", - "title": "Engineering_Constants_E1", - "section": "Engineering_Constants_E1", - "text": "Engineering_Constants_E1" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.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.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1", - "title": "Engineering_Constants_E1 > Engineering_Constants_E1 > Engineering_Constants_E1", - "section": "Engineering_Constants_E1 > Engineering_Constants_E1", - "text": "MaterialProperty.Engineering_Constants_E1: str = 'young_modulus_x_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.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.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.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.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.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.h", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.h.html#h", - "title": "h", - "section": "h", - "text": "h" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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": "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.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/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.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/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.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": "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.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": "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.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/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.181 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.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.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.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.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.ShearCrimpingCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "ShearCrimpingCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.result_definition.FailureMeasureEnum.isspace", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isspace.html#isspace", - "title": "isspace", - "section": "isspace", - "text": "Return True if the string is a whitespace string, False otherwise.\nA string is whitespace if all characters in the string are whitespace and there\nis at least one character in the string.\nisspace" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.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.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.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.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.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.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.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.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.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.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.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.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.sampling_point.SamplingPoint.e2", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e2.html#ansys.dpf.composites.sampling_point.SamplingPoint.e2", + "title": "e2 > e2 > e2", + "section": "e2 > e2", + "text": "property SamplingPoint.e2: ndarray[Any, dtype[float64]]\n\nStrains in the material 2 direction of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.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.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.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.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.composite_scope.CompositeScope.named_selections", - "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.named_selections.html#ansys.dpf.composites.composite_scope.CompositeScope.named_selections", - "title": "named_selections > named_selections > named_selections", - "section": "named_selections > named_selections", - "text": "CompositeScope.named_selections: Sequence[str] | None = None\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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_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.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_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.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.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.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.sampling_point.FailureResult.safety_margin", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_margin.html#ansys.dpf.composites.sampling_point.FailureResult.safety_margin", - "title": "safety_margin > safety_margin > safety_margin", - "section": "safety_margin > safety_margin", - "text": "FailureResult.safety_margin: float\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.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.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.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.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.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.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.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.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.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.result_definition.ResultDefinitionScope.ply_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.ply_scope.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.ply_scope", + "title": "ply_scope > ply_scope > ply_scope", + "section": "ply_scope > ply_scope", + "text": "ResultDefinitionScope.ply_scope: Sequence[str]\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.sampling_point.SamplingPoint.failure_modes", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.failure_modes.html#failure_modes", + "title": "failure_modes", + "section": "failure_modes", + "text": "Critical failure mode of each ply.\nSequence[str]\nfailure_modes\nSequence\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.sampling_point.SamplingPoint.failure_modes", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.failure_modes.html#ansys.dpf.composites.sampling_point.SamplingPoint.failure_modes", + "title": "failure_modes > failure_modes > failure_modes", + "section": "failure_modes > failure_modes", + "text": "property SamplingPoint.failure_modes: Sequence[str]\n\nCritical failure mode of each ply.\n\nReturn type\n\nSequence[str]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map.html#format_map", - "title": "format_map", - "section": "format_map", - "text": "Return a formatted version of the string, using substitutions from mapping.\nThe substitutions are identified by braces (‘{’ and ‘}’).\nformat_map" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.result_definition.FailureMeasureEnum.format_map", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.format_map", - "title": "format_map > format_map > format_map", - "section": "format_map > format_map", - "text": "FailureMeasureEnum.format_map(mapping, /)\n\nReturn a formatted version of the string, using substitutions from mapping.\nThe substitutions are identified by braces (‘{’ and ‘}’).\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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/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.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": "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.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": "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.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": "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.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": "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 5.728 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.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": "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.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": "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.ShortFiberCompositesFiles.files_are_local", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local.html#files_are_local", + "title": "files_are_local", + "section": "files_are_local", + "text": "files_are_local" }, { - "objectID": "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.ShortFiberCompositesFiles.files_are_local", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local.html#ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local", + "title": "files_are_local > files_are_local > files_are_local", + "section": "files_are_local > files_are_local", + "text": "ShortFiberCompositesFiles.files_are_local: bool = True\n\n" }, { - "objectID": "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.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/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.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": "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.427 seconds)\nDownload Jupyter notebook: 013_thermal_example.ipynb\nDownload Python source code: 013_thermal_example.py\nDownload zipped: 013_thermal_example.zip\nGallery generated by Sphinx-Gallery\nGet results by material\nDownload Jupyter notebook: 013_thermal_example.ipynb\nDownload Python source code: 013_thermal_example.py\nDownload zipped: 013_thermal_example.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.data_sources.ContinuousFiberCompositesFiles", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.html#ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles", - "title": "ContinuousFiberCompositesFiles > ContinuousFiberCompositesFiles > ContinuousFiberCompositesFiles", - "section": "ContinuousFiberCompositesFiles > ContinuousFiberCompositesFiles", - "text": "class ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles(rst, composite, engineering_data, files_are_local=True)\n\nProvides the container for continuous fiber composite file paths.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nContinuousFiberCompositesFiles.files_are_local\n\n\n\nContinuousFiberCompositesFiles.rst\n\n\n\nContinuousFiberCompositesFiles.composite\n\n\n\nContinuousFiberCompositesFiles.engineering_data\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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/010_harmonic_example", - "href": "examples/gallery_examples/010_harmonic_example.html#postprocess-a-harmonic-analysis", - "title": "Postprocess a harmonic analysis", - "section": "Postprocess a harmonic analysis", - "text": "This example shows how to evaluate failure criteria for a harmonic simulation.\nIt shows how to create a phase sweep to compute the maximum IRF in the frequency-phase\nspace and shows how to identify the critical failure mode and the critical layer.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nPostprocess a harmonic analysis\ncomposite_files_from_workbench_harmonic_analysis()" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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": "examples/gallery_examples/010_harmonic_example", - "href": "examples/gallery_examples/010_harmonic_example.html#set-up-analysis", - "title": "Postprocess a harmonic analysis > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of loading the required modules, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries and matplotlib\nStart a DPF server and copy the example files into the current working directory.\nCreate a composite model\nDefine a failure criterion\nSet up analysis" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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": "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.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": "examples/gallery_examples/010_harmonic_example", - "href": "examples/gallery_examples/010_harmonic_example.html#detailed-analysis-of-the-critical-element", - "title": "Postprocess a harmonic analysis > Detailed analysis of the critical element", - "section": "Detailed analysis of the critical element", - "text": "Identify the element with the maximum IRF\nScope container with all frequencies and phases to critical element so we can plot\nthe critical IRF over all the frequencies\nCompute the maximum IRF over all the phases for each frequency and plot the result for\nthe critical element. Note: this can be different from maximum overall IRF\nat each frequency, because we look only at the element that has the highest IRF overall.\nCompute the critical phase\nCompute critical layer and critical failure mode.\nTotal running time of the script: (0 minutes 10.117 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.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.LaRCCriterion.lmt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmt.html#lmt", - "title": "lmt", - "section": "lmt", - "text": "Whether to activate the failure evaluation of the matrix due to tension.\nbool\nlmt\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.LaRCCriterion.lmt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lmt.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.lmt", - "title": "lmt > lmt > lmt", - "section": "lmt > lmt", - "text": "property LaRCCriterion.lmt: bool\n\nWhether to activate the failure evaluation of the matrix due to tension.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.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.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_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.MaxStrainCriterion.eZc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eZc.html#ezc", - "title": "eZc", - "section": "eZc", - "text": "Global compressive strain limit in material direction 3.\nfloat\neZc\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.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.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.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.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R33", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R33.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R33", + "title": "Hill_Yield_Criterion_R33 > Hill_Yield_Criterion_R33 > Hill_Yield_Criterion_R33", + "section": "Hill_Yield_Criterion_R33 > Hill_Yield_Criterion_R33", + "text": "MaterialProperty.Hill_Yield_Criterion_R33: str = 'yield_stress_ratio_z_hill_criterion'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.M", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.M.html#m", - "title": "M", - "section": "M", - "text": "Specifies the effect of fiber parallel stresses regarding inter-fiber failure. M = [0, 1). The default is 0.5.\nfloat\nM\n0.5\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.html#layuppropertiesprovider", + "title": "LayupPropertiesProvider", + "section": "LayupPropertiesProvider", + "text": "Provider for lay-up properties.\nSome properties such as layered dpf_material_ids and\ninformation about the element type are available\nthrough the ElementInfoProvider.\nlayup_provider (Operator) – Use add_layup_info_to_mesh() to obtain a lay-up provider.\nmesh (MeshedRegion)\nLayupPropertiesProvider.get_analysis_plies(...)\nGet analysis ply names.\nLayupPropertiesProvider.get_element_laminate_offset(...)\nGet laminate offset of element.\nLayupPropertiesProvider.get_layer_angles(...)\nGet angles for all layers.\nLayupPropertiesProvider.get_layer_shear_angles(...)\nGet shear angle for all layers.\nLayupPropertiesProvider.get_layer_thicknesses(...)\nGet thicknesses for all layers.\nLayupPropertiesProvider\nElementInfoProvider\nOperator\nadd_layup_info_to_mesh()\nMeshedRegion\nLayupPropertiesProvider.get_analysis_plies\nLayupPropertiesProvider.get_element_laminate_offset\nLayupPropertiesProvider.get_layer_angles\nLayupPropertiesProvider.get_layer_shear_angles\nLayupPropertiesProvider.get_layer_thicknesses" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.M", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.M.html#ansys.dpf.composites.failure_criteria.PuckCriterion.M", - "title": "M > M > M", - "section": "M > M", - "text": "property PuckCriterion.M: float\n\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure. M = [0, 1). The default is 0.5.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.result_definition.ResultDefinition.time", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.time.html#ansys.dpf.composites.result_definition.ResultDefinition.time", - "title": "time > time > time", - "section": "time > time", - "text": "property ResultDefinition.time: float | None\n\nTime or solution step.\n\nDPF Composites automatically selects the last time step if time is not set.\n\nYou can use the CompositeModel.get_result_times_or_frequencies() method\nto list the available times or frequencies in the result file.\n\nReturn type\n\nOptional[float]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.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.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.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.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.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.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.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.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.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.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.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.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.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": "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": "index", + "href": "index.html#pydpf---composites", + "title": "PyDPF - Composites", + "section": "PyDPF - Composites", + "text": "PyDPF - Composites enables the post-processing of composite structures based on\nAnsys DPF and the DPF Composites plugin. It implements\nclasses on top of DPF Composites operators and data accessors for short\nfiber and layered composites (layered shell and solid elements). This module\ncan be used to postprocess fiber reinforced plastics and layered composites, and\nto implement custom failure criteria and computation.\nContains installation instructions and a simple\nexample to create a failure plot from a Workbench project.\nDemonstrates the use of PyDPF - Composites for various workflows.\nDescribes the public Python classes, methods, and functions.\nProvides developer installation and usage information.\nThe minimum set of inputs to run a postprocessing for composites is the result files of an\nMAPDL solution and a material file (MATML) which was generated by Engineering Data.\nLay-up files from ACP are optional and only required for some advanced operations. Refer to\nLimitations.\nPyDPF - Composites" + }, + { + "objectID": "index", + "href": "index.html#key-features", + "title": "PyDPF - Composites > Key features", + "section": "Key features", + "text": "Here are some key features of PyDPF - Composites:\nPostprocessing of layered shell and solid elements. MAPDL models as well as models preprocessed with ACP are supported.\nFailure criteria evaluation as shown in Composite failure analysis.\nA SamplingPoint class for extracting and visualizing a result over the entire thickness of a laminate as shown in\nSampling point.\nA ResultDefinition class for configuring combined failure criteria and scopes.\nAccessors for getting layered properties such as plies and materials as shown in\nLayered properties\nand Material properties and custom failure criterion.\nInterface to implement custom failure criteria and analysis as shown in\nMaterial properties and custom failure criterion.\nPostprocessing of homogeneous elements.\nKey features\nSamplingPoint\nResultDefinition" }, { - "objectID": "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.523 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": "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.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.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.PuckCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.active.html#ansys.dpf.composites.failure_criteria.PuckCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property PuckCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.composite_files", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.composite_files.html#composite_files", - "title": "composite_files", - "section": "composite_files", - "text": "Get the composite file paths on the server.\nContinuousFiberCompositesFiles\ncomposite_files\nContinuousFiberCompositesFiles" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.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.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.composite_model.CompositeModel.layup_model_type", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.layup_model_type.html#ansys.dpf.composites.composite_model.CompositeModel.layup_model_type", + "title": "layup_model_type > layup_model_type > layup_model_type", + "section": "layup_model_type > layup_model_type", + "text": "property CompositeModel.layup_model_type: LayupModelContextType\n\nGet the context type of the lay-up model.\n\nThe type specifies whether the lay-up data was loaded from an ACP model, RST, or both.\nType can be one of the following values: NOT_AVAILABLE, ACP, RST, MIXED.\n\nReturn type\n\nLayupModelContextType\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.ElementInfoProvider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.html#elementinfoprovider", + "title": "ElementInfoProvider", + "section": "ElementInfoProvider", + "text": "Provider for ElementInfo.\nUse get_element_info_provider() to create ElementInfoProvider\nobjects.\nInitialize the class before a loop and\ncall get_element_info() for each element.\nNote that the ElementInfoProvider class is not fully supported for\ndistributed RST files. The get_element_info() method will raise an\nexception if the DPF server version does not support reading the required\ninformation.\nmesh (MeshedRegion)\nlayer_indices (PropertyField)\nelement_types_apdl (PropertyField)\nelement_types_dpf (PropertyField)\nkeyopt_8_values (PropertyField)\nkeyopt_3_values (PropertyField)\nmaterial_ids (PropertyField)\nno_bounds_checks (bool, default: False) – Disable bounds checks.\nResults in better performance but potentially cryptic\nerror messages\nElementInfoProvider.get_element_info(element_id)\nGet ElementInfo for a given element id.\nElementInfoProvider\nElementInfo\nget_element_info_provider()\nElementInfoProvider\nget_element_info()\nElementInfoProvider\nget_element_info()\nMeshedRegion\nPropertyField\nPropertyField\nPropertyField\nPropertyField\nPropertyField\nPropertyField\nbool\nFalse\nElementInfoProvider.get_element_info\nElementInfo" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.material_properties.get_all_dpf_material_ids", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids.html#ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids", - "title": "get_all_dpf_material_ids > get_all_dpf_material_ids > get_all_dpf_material_ids", - "section": "get_all_dpf_material_ids > get_all_dpf_material_ids", - "text": "ansys.dpf.composites.layup_info.material_properties.get_all_dpf_material_ids(mesh, data_source_or_streams_provider)\n\nGet all DPF material IDs.\n\nParameters\n\nmesh (MeshedRegion) – DPF meshed region enriched with lay-up information.\n\ndata_source_or_streams_provider (DataSources | Operator) – DPF data source or stream provider that contains the RST file.\n\nReturn type\n\nCollection[int64]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.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.FailureModeEnum.wt", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.wt.html#wt", - "title": "wt", - "section": "wt", - "text": "wt" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.interface_weakening_factor", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.interface_weakening_factor.html#interface_weakening_factor", + "title": "interface_weakening_factor", + "section": "interface_weakening_factor", + "text": "Multiplicator for the interlaminar strength if failure mode pd is active. The default is 0.8.\nfloat\ninterface_weakening_factor\npd\n0.8\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.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.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.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.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.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.ply_wise_data.SpotReductionStrategy.MIN", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.MIN.html#min", + "title": "MIN", + "section": "MIN", + "text": "MIN" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.TsaiWuCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "examples/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.TsaiWuCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property TsaiWuCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.html#corefailurecriterion", + "title": "CoreFailureCriterion", + "section": "CoreFailureCriterion", + "text": "Defines the core shear failure criterion for\ncore materials like foam and honeycomb.\ninclude_ins (bool, default: False) – Whether to activate the formulation that considers interlaminar normal stresses.\nwf (float, default: 1.0) – Weighting factor of the failure mode (cs).\nCoreFailureCriterion.to_dict()\n\nCoreFailureCriterion.to_json()\n\nCoreFailureCriterion.active\nThe failure criterion is suppressed if active is False.\nCoreFailureCriterion.include_ins\nWhether to activate the formulation that considers interlaminar normal stresses.\nCoreFailureCriterion.name\nName of the failure criterion.\nCoreFailureCriterion.wf\nWeighting factor of the failure mode (cs).\nCoreFailureCriterion\nbool\nFalse\nfloat\n1.0\nCoreFailureCriterion.to_dict\nCoreFailureCriterion.to_json\nCoreFailureCriterion.active\nCoreFailureCriterion.include_ins\nCoreFailureCriterion.name\nCoreFailureCriterion.wf" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Fabric_Fiber_Angle_phi", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Fabric_Fiber_Angle_phi.html#fabric_fiber_angle_phi", - "title": "Fabric_Fiber_Angle_phi", - "section": "Fabric_Fiber_Angle_phi", - "text": "Fabric_Fiber_Angle_phi" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion", + "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.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.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.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.FaceSheetWrinklingCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property FaceSheetWrinklingCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.partition", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.partition.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.partition", - "title": "partition > partition > partition", - "section": "partition > partition", - "text": "FailureMeasureEnum.partition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nThis will search for the separator in the string. If the separator is found,\nreturns a 3-tuple containing the part before the separator, the separator\nitself, and the part after it.\n\nIf the separator is not found, returns a 3-tuple containing the original string\nand two empty strings.\n\n!! processed by numpydoc !!" + "objectID": "examples/gallery_examples/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.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": "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.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": "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.FailureModeEnum.e2c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2c.html#e2c", - "title": "e2c", - "section": "e2c", - "text": "e2c" + "objectID": "examples/gallery_examples/012_fatigue_example", + "href": "examples/gallery_examples/012_fatigue_example.html#load-time-series-and-apply-rainflow-counting", + "title": "Evaluate fatigue for a composite plate > Load time series and apply rainflow counting", + "section": "Load time series and apply rainflow counting", + "text": "A random time series is created. Load is assumed proportional, so rainflow counting\ncan be directly done on the load time series to get the load ranges.\nNo mean stress correction is applied.\nFatpack package is used for doing the rainflow counting\nLoad time series and apply rainflow counting" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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": "examples/gallery_examples/012_fatigue_example", + "href": "examples/gallery_examples/012_fatigue_example.html#s-n-curve", + "title": "Evaluate fatigue for a composite plate > S-N curve", + "section": "S-N curve", + "text": "A dummy S-N curve is created. Note that this curve is not based on any\nexperimental data. Sc is chosen to be twice the orthotropic stress limit in the fiber direction.\nand Nc is set to 1.\nS-N curve" + }, + { + "objectID": "examples/gallery_examples/012_fatigue_example", + "href": "examples/gallery_examples/012_fatigue_example.html#damage-evaluation", + "title": "Evaluate fatigue for a composite plate > Damage evaluation", + "section": "Damage evaluation", + "text": "Stress S11 at time 1 and layer P1L1__ModelingPly.2 are read\nfor each load range. Its damage is evaluated using the dummy S-N curve.\nPlot damage\nDamage evaluation" }, { - "objectID": "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": "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.799 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.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.result_definition.ResultDefinition.scopes", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.scopes.html#scopes", + "title": "scopes", + "section": "scopes", + "text": "Scopes of the result definition.\nSequence[ResultDefinitionScope]\nscopes\nSequence\nResultDefinitionScope" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.failure_criteria", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.failure_criteria.html#failure_criteria", - "title": "failure_criteria", - "section": "failure_criteria", - "text": "List of failure criteria. Use insert and remove to edit the list.\ndict[str, FailureCriterionBase]\nfailure_criteria\ndict\nstr\nFailureCriterionBase" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.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.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.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.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.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.lower", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lower.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.lower", - "title": "lower > lower > lower", - "section": "lower > lower", - "text": "FailureMeasureEnum.lower(/)\n\nReturn a copy of the string converted to lowercase.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc.html#stress_limits_xc", + "title": "Stress_Limits_Xc", + "section": "Stress_Limits_Xc", + "text": "Stress_Limits_Xc" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc", + "title": "Stress_Limits_Xc > Stress_Limits_Xc > Stress_Limits_Xc", + "section": "Stress_Limits_Xc > Stress_Limits_Xc", + "text": "MaterialProperty.Stress_Limits_Xc: str = 'stress_compressive_x_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.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.layup_info.LayerProperty.SHEAR_ANGLES", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES.html#ansys.dpf.composites.layup_info.LayerProperty.SHEAR_ANGLES", + "title": "SHEAR_ANGLES > SHEAR_ANGLES > SHEAR_ANGLES", + "section": "SHEAR_ANGLES > SHEAR_ANGLES", + "text": "LayerProperty.SHEAR_ANGLES = 2\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.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.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.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.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.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.layup_info.LayupPropertiesProvider.get_layer_shear_angles", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_layer_shear_angles.html#get_layer_shear_angles", + "title": "get_layer_shear_angles", + "section": "get_layer_shear_angles", + "text": "Get shear angle for all layers. Returns None if element is not layered.\nelement_id (int) – Element Id/Label\nOptional[ndarray[Any, dtype[float64]]]\nget_layer_shear_angles\nint\nOptional\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.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.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.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.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.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.result_definition.FailureMeasureEnum.capitalize", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize", + "title": "capitalize > capitalize > capitalize", + "section": "capitalize > capitalize", + "text": "FailureMeasureEnum.capitalize(/)\n\nReturn a capitalized version of the string.\n\nMore specifically, make the first character have upper case and the rest lower\ncase.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.LaRCCriterion.wf_lft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft.html#wf_lft", + "title": "wf_lft", + "section": "wf_lft", + "text": "Weighting factor of fiber failure due to tension (lft).\nfloat\nwf_lft\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.LaRCCriterion.wf_lft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft", + "title": "wf_lft > wf_lft > wf_lft", + "section": "wf_lft > wf_lft", + "text": "property LaRCCriterion.wf_lft: float\n\nWeighting factor of fiber failure due to tension (lft).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s2", - "title": "s2 > s2 > s2", - "section": "s2 > s2", - "text": "FailureModeEnum.s2 = 220\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_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/constants", - "href": "api/constants.html#constants", - "title": "Constants", - "section": "Constants", - "text": "FailureOutput(value[, names, module, ...])\nProvides failure output types.\nSpot(value[, names, module, qualname, type, ...])\nImplements an interface to access the spots of the results of layered elements.\nSym3x3TensorComponent(value[, names, ...])\nProvides tensor indices for symmetrical 3x3 tensors.\nConstants\nFailureOutput\nSpot\nSym3x3TensorComponent" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_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.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.composite_model.CompositeModel.get_mesh", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_mesh.html#get_mesh", + "title": "get_mesh", + "section": "get_mesh", + "text": "Get the underlying DPF meshed region.\nThe meshed region contains the lay-up information.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nMeshedRegion\nget_mesh\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nMeshedRegion" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.result_definition.ResultDefinition.scopes", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.scopes.html#scopes", - "title": "scopes", - "section": "scopes", - "text": "Scopes of the result definition.\nSequence[ResultDefinitionScope]\nscopes\nSequence\nResultDefinitionScope" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.sampling_point.SamplingPoint.element_id", @@ -3115,711 +2989,739 @@ "text": "property SamplingPoint.element_id: int | None\n\nElement label for sampling the laminate.\n\nThis attribute returns -1 if the element ID is not set.\n\nReturn type\n\nOptional[int]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pf.html#wf_pf", - "title": "wf_pf", - "section": "wf_pf", - "text": "Weighting factor of the fiber failure (pf) mode.\nfloat\nwf_pf\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.failure_criteria.ShearCrimpingCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "ShearCrimpingCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.MaxStrainCriterion.wf_e12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e12.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e12", - "title": "wf_e12 > wf_e12 > wf_e12", - "section": "wf_e12 > wf_e12", - "text": "property MaxStrainCriterion.wf_e12: float\n\nWeighting factor of the failure mode e12.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property TsaiWuCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.l", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.l.html#l", - "title": "l", - "section": "l", - "text": "l" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.failure_criteria.FailureModeEnum.smax", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.smax.html#smax", - "title": "smax", - "section": "smax", - "text": "smax" + "objectID": "api/composite_scope", + "href": "api/composite_scope.html#composite-scope", + "title": "Composite scope", + "section": "Composite scope", + "text": "CompositeScope([elements, plies, time, ...])\nProvides the composite scope.\nComposite scope\nCompositeScope" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.smax", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.smax.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.smax", - "title": "smax > smax > smax", - "section": "smax > smax", - "text": "FailureModeEnum.smax = 201\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.HoffmanCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_json.html#to_json", + "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.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.HoffmanCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.to_json.html#ansys.dpf.composites.failure_criteria.HoffmanCriterion.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": "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 !!" + "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.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.failure_criteria.HoffmanCriterion.dim", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HoffmanCriterion.dim.html#dim", + "title": "dim", + "section": "dim", + "text": "Specifies which formulation of the failure criterion is used.\nint\ndim\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.failure_criteria.FailureModeEnum.ns", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ns.html#ns", - "title": "ns", - "section": "ns", - "text": "ns" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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#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#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.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.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.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.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.ply_wise_data.SpotReductionStrategy.AVG", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.AVG.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.AVG", - "title": "AVG > AVG > AVG", - "section": "AVG > AVG", - "text": "SpotReductionStrategy.AVG = 'AVG'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.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", - "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.HashinCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.name.html#ansys.dpf.composites.failure_criteria.HashinCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property HashinCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.LayupModelContextType.NOT_AVAILABLE", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE.html#not_available", + "title": "NOT_AVAILABLE", + "section": "NOT_AVAILABLE", + "text": "NOT_AVAILABLE" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e12.html#e12", - "title": "e12", - "section": "e12", - "text": "Whether to activate the failure evaluation regarding the in-plane shear strain e12.\nbool\ne12\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE.html#ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE", + "title": "NOT_AVAILABLE > NOT_AVAILABLE > NOT_AVAILABLE", + "section": "NOT_AVAILABLE > NOT_AVAILABLE", + "text": "LayupModelContextType.NOT_AVAILABLE = 0\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.MaxStrainCriterion.wf_e13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e13.html#wf_e13", + "title": "wf_e13", + "section": "wf_e13", + "text": "Weighting factor of the failure mode e13.\nfloat\nwf_e13\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.MaterialMetadata.dpf_material_id", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.dpf_material_id.html#ansys.dpf.composites.layup_info.material_properties.MaterialMetadata.dpf_material_id", + "title": "dpf_material_id > dpf_material_id > dpf_material_id", + "section": "dpf_material_id > dpf_material_id", + "text": "MaterialMetadata.dpf_material_id: int = 0\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_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.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.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.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.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.failure_criteria.PuckCriterion.p22_pos", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_pos.html#p22_pos", + "title": "p22_pos", + "section": "p22_pos", + "text": "Global inclination factor of the fracture plane \\perp \\perp for tension.\nfloat\np22_pos\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.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.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.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.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.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.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.result_definition.ResultDefinition.check_has_single_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.check_has_single_scope.html#check_has_single_scope", + "title": "check_has_single_scope", + "section": "check_has_single_scope", + "text": "Check that the result definition has one scope.\nNone\ncheck_has_single_scope\nNone" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.ResultDefinition.check_has_single_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.check_has_single_scope.html#ansys.dpf.composites.result_definition.ResultDefinition.check_has_single_scope", + "title": "check_has_single_scope > check_has_single_scope > check_has_single_scope", + "section": "check_has_single_scope > check_has_single_scope", + "text": "ResultDefinition.check_has_single_scope(msg)\n\nCheck that the result definition has one scope.\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e2.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e2", - "title": "e2 > e2 > e2", - "section": "e2 > e2", - "text": "FailureModeEnum.e2 = 120\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma.html#cma", + "title": "cma", + "section": "cma", + "text": "Activates the failure evaluation of the matrix due to tension.\nbool\ncma\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.html#resultdefinition", - "title": "ResultDefinition", - "section": "ResultDefinition", - "text": "Represents the result definition of DPF Composites.\nThis class is used to configure the DPF operators composite::failure_evaluator\nand composite::sampling_point_evaluator.\nResultDefinition.check_has_single_scope(msg)\nCheck that the result definition has one scope.\nResultDefinition.to_dict()\nGet the result definition in a dictionary representation.\nResultDefinition.to_json()\nConvert the dictionary representation of the result definition to a JSON dictionary.\nResultDefinition.combined_failure_criterion\nConfiguration of the failure criteria such as maximum stress, puck, and wrinkling.\nResultDefinition.expression\nType of the result.\nResultDefinition.material_file\nPath of the material files that store the material properties.\nResultDefinition.max_chunk_size\nMaximum chunk size (number of elements) for the result evaluation.\nResultDefinition.measure\nReturn type of the failure values.\nResultDefinition.name\nCustom name.\nResultDefinition.rst_files\nPath of the result (RST) files.\nResultDefinition.scopes\nScopes of the result definition.\nResultDefinition.stress_strain_eval_mode\nResults loaded from a result (RST) file by default.\nResultDefinition.time\nTime or solution step.\nResultDefinition\ncomposite::failure_evaluator\ncomposite::sampling_point_evaluator\nResultDefinition.check_has_single_scope\nResultDefinition.to_dict\nResultDefinition.to_json\nResultDefinition.combined_failure_criterion\nResultDefinition.expression\nResultDefinition.material_file\nResultDefinition.max_chunk_size\nResultDefinition.measure\nResultDefinition.name\nResultDefinition.rst_files\nResultDefinition.scopes\nResultDefinition.stress_strain_eval_mode\nResultDefinition.time" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma", + "title": "cma > cma > cma", + "section": "cma > cma", + "text": "property CuntzeCriterion.cma: bool\n\nActivates the failure evaluation of the matrix due to tension.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.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.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.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.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.result_definition.FailureMeasureEnum.capitalize", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.capitalize", - "title": "capitalize > capitalize > capitalize", - "section": "capitalize > capitalize", - "text": "FailureMeasureEnum.capitalize(/)\n\nReturn a capitalized version of the string.\n\nMore specifically, make the first character have upper case and the rest lower\ncase.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.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.sampling_point.SamplingPoint.s2", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2.html#s2", + "title": "s2", + "section": "s2", + "text": "Stresses in the material 2 direction of each ply.\nndarray[Any, dtype[float64]]\ns2\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.sampling_point.SamplingPoint.s2", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.s2.html#ansys.dpf.composites.sampling_point.SamplingPoint.s2", + "title": "s2 > s2 > s2", + "section": "s2 > s2", + "text": "property SamplingPoint.s2: ndarray[Any, dtype[float64]]\n\nStresses in the material 2 direction of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R23", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R23.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Hill_Yield_Criterion_R23", - "title": "Hill_Yield_Criterion_R23 > Hill_Yield_Criterion_R23 > Hill_Yield_Criterion_R23", - "section": "Hill_Yield_Criterion_R23 > Hill_Yield_Criterion_R23", - "text": "MaterialProperty.Hill_Yield_Criterion_R23: str = 'yield_stress_ratio_yz_hill_criterion'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.VonMisesCriterion.wf_vme", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vme.html#wf_vme", - "title": "wf_vme", - "section": "wf_vme", - "text": "Weighting factor of the strain criterion (vme).\nfloat\nwf_vme\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.VonMisesCriterion.wf_vme", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vme.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.wf_vme", - "title": "wf_vme > wf_vme > wf_vme", - "section": "wf_vme > wf_vme", - "text": "property VonMisesCriterion.wf_vme: float\n\nWeighting factor of the strain criterion (vme).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.composite_model.CompositeModel.core_model", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.core_model.html#ansys.dpf.composites.composite_model.CompositeModel.core_model", - "title": "core_model > core_model > core_model", - "section": "core_model > core_model", - "text": "property CompositeModel.core_model: Model\n\nUnderlying DPF core model.\n\nReturn type\n\nModel\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.constants.Sym3x3TensorComponent.TENSOR22", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR22.html#tensor22", + "title": "TENSOR22", + "section": "TENSOR22", + "text": "TENSOR22" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.FailureModeEnum.hm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hm.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.hm", - "title": "hm > hm > hm", - "section": "hm > hm", - "text": "FailureModeEnum.hm = 602\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc.html#stress_limits_xc", - "title": "Stress_Limits_Xc", - "section": "Stress_Limits_Xc", - "text": "Stress_Limits_Xc" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xc", - "title": "Stress_Limits_Xc > Stress_Limits_Xc > Stress_Limits_Xc", - "section": "Stress_Limits_Xc > Stress_Limits_Xc", - "text": "MaterialProperty.Stress_Limits_Xc: str = 'stress_compressive_x_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.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.result_definition.FailureMeasureEnum.rstrip", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip", - "title": "rstrip > rstrip > rstrip", - "section": "rstrip > rstrip", - "text": "FailureMeasureEnum.rstrip(chars=None, /)\n\nReturn a copy of the string with trailing whitespace removed.\n\nIf chars is given and not None, remove characters in chars instead.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.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.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.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.MaxStressCriterion.wf_s13", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s13.html#wf_s13", - "title": "wf_s13", - "section": "wf_s13", - "text": "Weighting factor of the failure mode s13.\nfloat\nwf_s13\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.composite_model.CompositeModel.material_operators", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_operators.html#ansys.dpf.composites.composite_model.CompositeModel.material_operators", - "title": "material_operators > material_operators > material_operators", - "section": "material_operators > material_operators", - "text": "property CompositeModel.material_operators: MaterialOperators\n\nMaterial operators.\n\nReturn type\n\nMaterialOperators\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E2.html#polar_properties_e2", + "title": "polar_properties_E2", + "section": "polar_properties_E2", + "text": "Polar property E2 of the laminate.\nndarray[Any, dtype[float64]]\npolar_properties_E2\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.FailureModeEnum.c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.c", - "title": "c > c > c", - "section": "c > c", - "text": "FailureModeEnum.c = 1000\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_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.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.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.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.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/composite_model", - "href": "api/composite_model.html#composite-model", - "title": "Composite model", - "section": "Composite model", - "text": "CompositeModel(composite_files, server[, ...])\nProvides access to the basic composite postprocessing functionality.\nComposite model\nCompositeModel" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.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.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu.html#engineering_constants_nu", - "title": "Engineering_Constants_nu", - "section": "Engineering_Constants_nu", - "text": "Engineering_Constants_nu" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.material_properties.MaterialProperty.Engineering_Constants_nu", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_nu", - "title": "Engineering_Constants_nu > Engineering_Constants_nu > Engineering_Constants_nu", - "section": "Engineering_Constants_nu > Engineering_Constants_nu", - "text": "MaterialProperty.Engineering_Constants_nu: str = 'poisson_ratio'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.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.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.data_sources.CompositeDefinitionFiles.definition", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.definition.html#ansys.dpf.composites.data_sources.CompositeDefinitionFiles.definition", + "title": "definition > definition > definition", + "section": "definition > definition", + "text": "CompositeDefinitionFiles.definition: str | PathLike[str]\n\n" }, { "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E3", @@ -3836,389 +3738,452 @@ "text": "MaterialProperty.Engineering_Constants_E3: str = 'young_modulus_z_direction'\n\n" }, { - "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.sampling_point.SamplingPoint.is_uptodate", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.is_uptodate.html#is_uptodate", + "title": "is_uptodate", + "section": "is_uptodate", + "text": "True if the Sampling Point is up-to-date.\nbool\nis_uptodate\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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/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.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/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.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/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.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": "examples/gallery_examples/005_get_layup_properties_example", + "href": "examples/gallery_examples/005_get_layup_properties_example.html#get-lay-up-properties", + "title": "Lay-up properties > Get lay-up properties", + "section": "Get lay-up properties", + "text": "Get lay-up properties for all elements and show the first one as an example.\nGet lay-up properties" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e3.html#e3", - "title": "e3", - "section": "e3", - "text": "e3" + "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.484 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.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.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.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.failure_criteria.MaxStressCriterion.s2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2", + "title": "s2 > s2 > s2", + "section": "s2 > s2", + "text": "property MaxStressCriterion.s2: bool\n\nWhether to activate the failure evaluation regarding the stress in the material 2 direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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/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.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.sampling_point.FailureResult.safety_margin", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_margin.html#safety_margin", + "title": "safety_margin", + "section": "safety_margin", + "text": "safety_margin" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.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.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/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.CuntzeCriterion.fracture_plane_angle", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle.html#fracture_plane_angle", + "title": "fracture_plane_angle", + "section": "fracture_plane_angle", + "text": "Fracture plane angle in degrees. The default is 53. The value must be greater than 45. The value depends on the out-of-plane shear friction coefficient.\nfloat\nfracture_plane_angle\n53\nfloat" }, { - "objectID": "api/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.fracture_plane_angle", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.fracture_plane_angle", + "title": "fracture_plane_angle > fracture_plane_angle > fracture_plane_angle", + "section": "fracture_plane_angle > fracture_plane_angle", + "text": "property CuntzeCriterion.fracture_plane_angle: float\n\nFracture plane angle in degrees. The default is 53. The value must be greater than 45. The value depends on the out-of-plane shear friction coefficient.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1.html#larc_constants_fracture_toughness_mode_1", - "title": "Larc_Constants_fracture_toughness_mode_1", - "section": "Larc_Constants_fracture_toughness_mode_1", - "text": "Larc_Constants_fracture_toughness_mode_1" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.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.Larc_Constants_fracture_toughness_mode_1", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Larc_Constants_fracture_toughness_mode_1", - "title": "Larc_Constants_fracture_toughness_mode_1 > Larc_Constants_fracture_toughness_mode_1 > Larc_Constants_fracture_toughness_mode_1", - "section": "Larc_Constants_fracture_toughness_mode_1 > Larc_Constants_fracture_toughness_mode_1", - "text": "MaterialProperty.Larc_Constants_fracture_toughness_mode_1: str = 'longitudinal_friction_coefficient_larc_constants'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.html#ansys.dpf.composites.data_sources.CompositeDataSources", + "title": "CompositeDataSources > CompositeDataSources > CompositeDataSources", + "section": "CompositeDataSources > CompositeDataSources", + "text": "class ansys.dpf.composites.data_sources.CompositeDataSources(rst, material_support, composite, engineering_data, old_composite_sources)\n\nProvides data sources related to the composite lay-up.\n\nParameters\n\nrst (ansys.dpf.core.data_sources.DataSources) – Result file. Currently only RST (MAPDL) is supported.\n\nmaterial_support (ansys.dpf.core.data_sources.DataSources) – NOTE: The material_support parameter is explicitly listed because it is currently not\nsupported (by the DPF Core) to use a distributed RST file as source for the\nmaterial support. Instead, we create a separate DataSources object for the\nmaterial support from the first RST file. This is a workaround until the\nsupport for distributed RST is added.\n\nengineering_data (ansys.dpf.core.data_sources.DataSources) – File with the material properties.\n\nold_composite_sources (dict[str, ansys.dpf.core.data_sources.DataSources]) – Member used to support assemblies in combination with the old\nDPF server (<7.0). It should be removed once the support of this\nserver version is dropped.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nCompositeDataSources.rst\n\n\n\nCompositeDataSources.material_support\n\n\n\nCompositeDataSources.composite\n\n\n\nCompositeDataSources.engineering_data\n\n\n\nCompositeDataSources.old_composite_sources\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.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.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.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.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.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.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.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.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.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.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.data_sources.get_composite_files_from_workbench_result_folder", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder.html#get_composite_files_from_workbench_result_folder", - "title": "get_composite_files_from_workbench_result_folder", - "section": "get_composite_files_from_workbench_result_folder", - "text": "Get a ContinuousFiberCompositesFiles object from a result folder.\nThis function assumes a typical Workbench folder structure for a composite\nsimulation. If this method is not able to build the ContinuousFiberCompositesFiles\nobject, you can follow these steps:\nIn the main Workbench window, activate the files panel by selecting\nView > Files. This shows the location of all files used in the\nworkbench project. You can determine the different attributes of the\nContinuousFiberCompositesFiles object:\nrst: A list of files containing either the single file.rst\nfile that belongs to the cell ID of the solution, or the distributed\nfile0.rst to fileN.rst files.\nengineering_data: The MatML.xml file in the same folder as the RST file.\ncomposite: There can be multiple composite definitions,\none definition for each ACP system if shell data is transferred\nand one definition for each solid model if solid data is transferred.\nAll the ACPCompositeDefinitions.h5 and ACPSolidModel*.h5\nfiles that are used in the solution must be added to the\nContinuousFiberCompositesFiles.composite dictionary.\nThe key can be chosen freely. Next to the ACPCompositeDefinitions.h5\nand ACPSolidModel\\*.h5 files, corresponding ACPCompositeDefinitions.mapping\nand ACPSolidModel*.mapping files can be found (optional).\nIf they exist, they must be added as well.\nThe following example shows how a\nContinuousFiberCompositesFiles object can be built.\nThe project in this example has two ACP Pre systems, one that exports\nshell information and one that exports solid information.\nThe files are located in these locations:\nResult file:\nproject_root_folder/dp0/SYS/MECH/file.rst\nEngineering data file:\nproject_root_folder/dp0/SYS/MECH/MatML.xml\nComposite definition and mapping files for the solid model:\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\nComposite definition and mapping files for the shell model:\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\nThe code creates the corresponding ContinuousFiberCompositesFiles object:\nresult_folder (Union[str, PathLike[str]]) – Result folder of the solution. Right-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\nensure_composite_definitions_found (bool, default: True) – Whether to check if at least one composite definition (shell or solid) has been found.\nContinuousFiberCompositesFiles\nget_composite_files_from_workbench_result_folder\nContinuousFiberCompositesFiles\nContinuousFiberCompositesFiles\nContinuousFiberCompositesFiles\nrst\nfile.rst\nfile0.rst\nfileN.rst\nengineering_data\nMatML.xml\ncomposite\nACPCompositeDefinitions.h5\nACPSolidModel*.h5\nContinuousFiberCompositesFiles.composite\nACPCompositeDefinitions.h5\nACPSolidModel\\*.h5\nACPCompositeDefinitions.mapping\nACPSolidModel*.mapping\nContinuousFiberCompositesFiles\nproject_root_folder/dp0/SYS/MECH/file.rst\nproject_root_folder/dp0/SYS/MECH/MatML.xml\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\nContinuousFiberCompositesFiles\nUnion\nstr\nPathLike\nstr\nbool\nTrue\nContinuousFiberCompositesFiles" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.data_sources.get_composite_files_from_workbench_result_folder", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder.html#ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder", - "title": "get_composite_files_from_workbench_result_folder > get_composite_files_from_workbench_result_folder > get_composite_files_from_workbench_result_folder", - "section": "get_composite_files_from_workbench_result_folder > get_composite_files_from_workbench_result_folder", - "text": "ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder(result_folder, ensure_composite_definitions_found=True)\n\nGet a ContinuousFiberCompositesFiles object from a result folder.\n\nThis function assumes a typical Workbench folder structure for a composite\nsimulation. If this method is not able to build the ContinuousFiberCompositesFiles\nobject, you can follow these steps:\n\nIn the main Workbench window, activate the files panel by selecting\nView > Files. This shows the location of all files used in the\nworkbench project. You can determine the different attributes of the\nContinuousFiberCompositesFiles object:\n\nrst: A list of files containing either the single file.rst\nfile that belongs to the cell ID of the solution, or the distributed\nfile0.rst to fileN.rst files.\n\nengineering_data: The MatML.xml file in the same folder as the RST file.\n\ncomposite: There can be multiple composite definitions,\none definition for each ACP system if shell data is transferred\nand one definition for each solid model if solid data is transferred.\nAll the ACPCompositeDefinitions.h5 and ACPSolidModel*.h5\nfiles that are used in the solution must be added to the\nContinuousFiberCompositesFiles.composite dictionary.\nThe key can be chosen freely. Next to the ACPCompositeDefinitions.h5\nand ACPSolidModel\\*.h5 files, corresponding ACPCompositeDefinitions.mapping\nand ACPSolidModel*.mapping files can be found (optional).\nIf they exist, they must be added as well.\n\nThe following example shows how a\nContinuousFiberCompositesFiles object can be built.\nThe project in this example has two ACP Pre systems, one that exports\nshell information and one that exports solid information.\n\nThe files are located in these locations:\n\nResult file:\n\nproject_root_folder/dp0/SYS/MECH/file.rst\n\nEngineering data file:\n\nproject_root_folder/dp0/SYS/MECH/MatML.xml\n\nComposite definition and mapping files for the solid model:\n\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\n\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\n\nComposite definition and mapping files for the shell model:\n\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\n\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\n\nThe code creates the corresponding ContinuousFiberCompositesFiles object:\n\nContinuousFiberCompositesFiles(\n rst=[\"project_root_folder/dp0/SYS/MECH/file.rst\"],\n composite={\n \"solid\": CompositeDefinitionFiles(\n definition=\"project_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\",\n mapping=\"project_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\"\n ),\n \"shell\": CompositeDefinitionFiles(\n definition=\"project_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\",\n mapping=\"project_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\"\n )\n },\n engineering_data=\"project_root_folder/dp0/SYS/MECH/MatML.xml\"\n)\n\nParameters\n\nresult_folder (Union[str, PathLike[str]]) – Result folder of the solution. Right-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\n\nensure_composite_definitions_found (bool, default: True) – Whether to check if at least one composite definition (shell or solid) has been found.\n\nReturn type\n\nContinuousFiberCompositesFiles\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.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.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.layup_info.material_operators.MaterialOperators.result_info_provider", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider.html#ansys.dpf.composites.layup_info.material_operators.MaterialOperators.result_info_provider", + "title": "result_info_provider > result_info_provider > result_info_provider", + "section": "result_info_provider > result_info_provider", + "text": "property MaterialOperators.result_info_provider: Operator\n\nGet result_info_provider.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.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.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/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.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/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.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_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.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.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.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.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": "examples/gallery_examples/sg_execution_times", - "href": "examples/gallery_examples/sg_execution_times.html#computation-times", - "title": "Computation times", - "section": "Computation times", - "text": "01:20.085 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:11.642\n0.0\nsphx_glr_examples_gallery_examples_010_harmonic_example.py (010_harmonic_example.py)\n00:10.117\n0.0\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py (007_interlaminar_normal_stress_example.py)\n00:07.347\n0.0\nsphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py (009_short_fiber_orientation_tensor.py)\n00:05.877\n0.0\nsphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py (014_cyclic_symmetry_example.py)\n00:05.728\n0.0\nsphx_glr_examples_gallery_examples_011_rst_workflow.py (011_rst_workflow.py)\n00:05.110\n0.0\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py (002_sampling_point_example.py)\n00:04.837\n0.0\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py (006_filter_composite_data_example.py)\n00:04.682\n0.0\nsphx_glr_examples_gallery_examples_013_thermal_example.py (013_thermal_example.py)\n00:04.427\n0.0\nsphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py (099_dpf_composite_failure_workflow.py)\n00:04.414\n0.0\nsphx_glr_examples_gallery_examples_008_assembly_example.py (008_assembly_example.py)\n00:04.157\n0.0\nsphx_glr_examples_gallery_examples_012_fatigue_example.py (012_fatigue_example.py)\n00:03.564\n0.0\nsphx_glr_examples_gallery_examples_004_get_material_properties_example.py (004_get_material_properties_example.py)\n00:03.523\n0.0\nsphx_glr_examples_gallery_examples_003_short_fiber_example.py (003_short_fiber_example.py)\n00:03.262\n0.0\nsphx_glr_examples_gallery_examples_005_get_layup_properties_example.py (005_get_layup_properties_example.py)\n00:01.399\n0.0\nComputation times\n001_failure_operator_example.py\n010_harmonic_example.py\n007_interlaminar_normal_stress_example.py\n009_short_fiber_orientation_tensor.py\n014_cyclic_symmetry_example.py\n011_rst_workflow.py\n002_sampling_point_example.py\n006_filter_composite_data_example.py\n013_thermal_example.py\n099_dpf_composite_failure_workflow.py\n008_assembly_example.py\n012_fatigue_example.py\n004_get_material_properties_example.py\n003_short_fiber_example.py\n005_get_layup_properties_example.py" + "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.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.result_definition.FailureMeasureEnum.RESERVE_FACTOR", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.RESERVE_FACTOR.html#reserve_factor", + "title": "RESERVE_FACTOR", + "section": "RESERVE_FACTOR", + "text": "RESERVE_FACTOR" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.Stress_Limits_Yt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt.html#stress_limits_yt", - "title": "Stress_Limits_Yt", - "section": "Stress_Limits_Yt", - "text": "Stress_Limits_Yt" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Yt", - "title": "Stress_Limits_Yt > Stress_Limits_Yt > Stress_Limits_Yt", - "section": "Stress_Limits_Yt > Stress_Limits_Yt", - "text": "MaterialProperty.Stress_Limits_Yt: str = 'stress_tensile_y_direction'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.ply_wise_data.SpotReductionStrategy.TOP", - "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.TOP.html#ansys.dpf.composites.ply_wise_data.SpotReductionStrategy.TOP", - "title": "TOP > TOP > TOP", - "section": "TOP > TOP", - "text": "SpotReductionStrategy.TOP = 'TOP'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.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.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.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.emax", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax.html#emax", + "title": "emax", + "section": "emax", + "text": "emax" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.emax.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.emax", + "title": "emax > emax > emax", + "section": "emax > emax", + "text": "FailureModeEnum.emax = 101\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.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.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.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.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.data_sources.get_composite_files_from_workbench_result_folder", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder.html#get_composite_files_from_workbench_result_folder", + "title": "get_composite_files_from_workbench_result_folder", + "section": "get_composite_files_from_workbench_result_folder", + "text": "Get a ContinuousFiberCompositesFiles object from a result folder.\nThis function assumes a typical Workbench folder structure for a composite\nsimulation. If this method is not able to build the ContinuousFiberCompositesFiles\nobject, you can follow these steps:\nIn the main Workbench window, activate the files panel by selecting\nView > Files. This shows the location of all files used in the\nworkbench project. You can determine the different attributes of the\nContinuousFiberCompositesFiles object:\nrst: A list of files containing either the single file.rst\nfile that belongs to the cell ID of the solution, or the distributed\nfile0.rst to fileN.rst files.\nengineering_data: The MatML.xml file in the same folder as the RST file.\ncomposite: There can be multiple composite definitions,\none definition for each ACP system if shell data is transferred\nand one definition for each solid model if solid data is transferred.\nAll the ACPCompositeDefinitions.h5 and ACPSolidModel*.h5\nfiles that are used in the solution must be added to the\nContinuousFiberCompositesFiles.composite dictionary.\nThe key can be chosen freely. Next to the ACPCompositeDefinitions.h5\nand ACPSolidModel\\*.h5 files, corresponding ACPCompositeDefinitions.mapping\nand ACPSolidModel*.mapping files can be found (optional).\nIf they exist, they must be added as well.\nThe following example shows how a\nContinuousFiberCompositesFiles object can be built.\nThe project in this example has two ACP Pre systems, one that exports\nshell information and one that exports solid information.\nThe files are located in these locations:\nResult file:\nproject_root_folder/dp0/SYS/MECH/file.rst\nEngineering data file:\nproject_root_folder/dp0/SYS/MECH/MatML.xml\nComposite definition and mapping files for the solid model:\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\nComposite definition and mapping files for the shell model:\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\nThe code creates the corresponding ContinuousFiberCompositesFiles object:\nresult_folder (Union[str, PathLike[str]]) – Result folder of the solution. Right-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\nensure_composite_definitions_found (bool, default: True) – Whether to check if at least one composite definition (shell or solid) has been found.\nContinuousFiberCompositesFiles\nget_composite_files_from_workbench_result_folder\nContinuousFiberCompositesFiles\nContinuousFiberCompositesFiles\nContinuousFiberCompositesFiles\nrst\nfile.rst\nfile0.rst\nfileN.rst\nengineering_data\nMatML.xml\ncomposite\nACPCompositeDefinitions.h5\nACPSolidModel*.h5\nContinuousFiberCompositesFiles.composite\nACPCompositeDefinitions.h5\nACPSolidModel\\*.h5\nACPCompositeDefinitions.mapping\nACPSolidModel*.mapping\nContinuousFiberCompositesFiles\nproject_root_folder/dp0/SYS/MECH/file.rst\nproject_root_folder/dp0/SYS/MECH/MatML.xml\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\nContinuousFiberCompositesFiles\nUnion\nstr\nPathLike\nstr\nbool\nTrue\nContinuousFiberCompositesFiles" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal.html#isdecimal", - "title": "isdecimal", - "section": "isdecimal", - "text": "Return True if the string is a decimal string, False otherwise.\nA string is a decimal string if all characters in the string are decimal and\nthere is at least one character in the string.\nisdecimal" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder.html#ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder", + "title": "get_composite_files_from_workbench_result_folder > get_composite_files_from_workbench_result_folder > get_composite_files_from_workbench_result_folder", + "section": "get_composite_files_from_workbench_result_folder > get_composite_files_from_workbench_result_folder", + "text": "ansys.dpf.composites.data_sources.get_composite_files_from_workbench_result_folder(result_folder, ensure_composite_definitions_found=True)\n\nGet a ContinuousFiberCompositesFiles object from a result folder.\n\nThis function assumes a typical Workbench folder structure for a composite\nsimulation. If this method is not able to build the ContinuousFiberCompositesFiles\nobject, you can follow these steps:\n\nIn the main Workbench window, activate the files panel by selecting\nView > Files. This shows the location of all files used in the\nworkbench project. You can determine the different attributes of the\nContinuousFiberCompositesFiles object:\n\nrst: A list of files containing either the single file.rst\nfile that belongs to the cell ID of the solution, or the distributed\nfile0.rst to fileN.rst files.\n\nengineering_data: The MatML.xml file in the same folder as the RST file.\n\ncomposite: There can be multiple composite definitions,\none definition for each ACP system if shell data is transferred\nand one definition for each solid model if solid data is transferred.\nAll the ACPCompositeDefinitions.h5 and ACPSolidModel*.h5\nfiles that are used in the solution must be added to the\nContinuousFiberCompositesFiles.composite dictionary.\nThe key can be chosen freely. Next to the ACPCompositeDefinitions.h5\nand ACPSolidModel\\*.h5 files, corresponding ACPCompositeDefinitions.mapping\nand ACPSolidModel*.mapping files can be found (optional).\nIf they exist, they must be added as well.\n\nThe following example shows how a\nContinuousFiberCompositesFiles object can be built.\nThe project in this example has two ACP Pre systems, one that exports\nshell information and one that exports solid information.\n\nThe files are located in these locations:\n\nResult file:\n\nproject_root_folder/dp0/SYS/MECH/file.rst\n\nEngineering data file:\n\nproject_root_folder/dp0/SYS/MECH/MatML.xml\n\nComposite definition and mapping files for the solid model:\n\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\n\nproject_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\n\nComposite definition and mapping files for the shell model:\n\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\n\nproject_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\n\nThe code creates the corresponding ContinuousFiberCompositesFiles object:\n\nContinuousFiberCompositesFiles(\n rst=[\"project_root_folder/dp0/SYS/MECH/file.rst\"],\n composite={\n \"solid\": CompositeDefinitionFiles(\n definition=\"project_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.h5\",\n mapping=\"project_root_folder/dp0/ACP-Pre-1/ACPSolidModel_SM.mapping\"\n ),\n \"shell\": CompositeDefinitionFiles(\n definition=\"project_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.h5\",\n mapping=\"project_root_folder/dp0/ACP-Pre-2/ACPCompositeDefinitions.mapping\"\n )\n },\n engineering_data=\"project_root_folder/dp0/SYS/MECH/MatML.xml\"\n)\n\nParameters\n\nresult_folder (Union[str, PathLike[str]]) – Result folder of the solution. Right-click the solution item in the Ansys Mechanical tree\nand select Open Solver Files Directory to obtain the result folder.\n\nensure_composite_definitions_found (bool, default: True) – Whether to check if at least one composite definition (shell or solid) has been found.\n\nReturn type\n\nContinuousFiberCompositesFiles\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal", - "title": "isdecimal > isdecimal > isdecimal", - "section": "isdecimal > isdecimal", - "text": "FailureMeasureEnum.isdecimal(/)\n\nReturn True if the string is a decimal string, False otherwise.\n\nA string is a decimal string if all characters in the string are decimal and\nthere is at least one character in the string.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.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": "intro", - "href": "intro.html#getting-started", - "title": "Getting started", - "section": "Getting started", - "text": "Getting started" + "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": "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.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": "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.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": "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.na", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.na.html#na", + "title": "na", + "section": "na", + "text": "na" }, { - "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.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": "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.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.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.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.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.MaxStrainCriterion.e3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3.html#e3", + "title": "e3", + "section": "e3", + "text": "Activates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\nbool\ne3\nbool" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e3", + "title": "e3 > e3 > e3", + "section": "e3 > e3", + "text": "property MaxStrainCriterion.e3: bool\n\nActivates the failure evaluation regarding the strain in the material 3 direction (out-of-plane).\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.ljust", @@ -4235,1201 +4200,1257 @@ "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.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.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.PuckCriterion.wf_pmc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc.html#ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pmc", - "title": "wf_pmc > wf_pmc > wf_pmc", - "section": "wf_pmc > wf_pmc", - "text": "property PuckCriterion.wf_pmc: float\n\nWeighting factor of the matrix failure (pmc) mode.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.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.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.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.MaxStressCriterion.s23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s23.html#s23", + "title": "s23", + "section": "s23", + "text": "Whether to activate the failure evaluation regarding the interlaminar shear stress s23.\nbool\ns23\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.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.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.composite_model.CompositeModel.get_property_for_all_layers", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers.html#get_property_for_all_layers", + "title": "get_property_for_all_layers", + "section": "get_property_for_all_layers", + "text": "Get a layer property for an element ID.\nReturns a numpy array with the values of the property for all the layers.\nValues are ordered from bottom to top.\nThis method returns None if the element is not layered.\nlayup_property (LayerProperty) – Lay-up property.\nelement_id (int) – Element ID or label.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nOptional[ndarray[Any, dtype[float64]]]\nget_property_for_all_layers\nNone\nLayerProperty\nint\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nOptional\nndarray\nAny\ndtype\nfloat64" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers.html#ansys.dpf.composites.composite_model.CompositeModel.get_property_for_all_layers", + "title": "get_property_for_all_layers > get_property_for_all_layers > get_property_for_all_layers", + "section": "get_property_for_all_layers > get_property_for_all_layers", + "text": "CompositeModel.get_property_for_all_layers(layup_property, element_id, composite_definition_label=None)\n\nGet a layer property for an element ID.\n\nReturns a numpy array with the values of the property for all the layers.\nValues are ordered from bottom to top.\n\nThis method returns None if the element is not layered.\n\nParameters\n\nlayup_property (LayerProperty) – Lay-up property.\n\nelement_id (int) – Element ID or label.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nOptional[ndarray[Any, dtype[float64]]]\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K", + "title": "Thermal_Conductivity_K > Thermal_Conductivity_K > Thermal_Conductivity_K", + "section": "Thermal_Conductivity_K > Thermal_Conductivity_K", + "text": "MaterialProperty.Thermal_Conductivity_K: str = 'thermal_conductivity_isotropic'\n\n" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.data_sources.CompositeDataSources.material_support", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.material_support.html#material_support", + "title": "material_support", + "section": "material_support", + "text": "material_support" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.material_support", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.material_support.html#ansys.dpf.composites.data_sources.CompositeDataSources.material_support", + "title": "material_support > material_support > material_support", + "section": "material_support > material_support", + "text": "CompositeDataSources.material_support: DataSources\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.lft3", - "title": "lft3 > lft3 > lft3", - "section": "lft3 > lft3", - "text": "FailureModeEnum.lft3 = 901\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.CuntzeCriterion.cft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft", + "title": "cft > cft > cft", + "section": "cft > cft", + "text": "property CuntzeCriterion.cft: bool\n\nActivates the failure evaluation regarding tension in fiber direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.result_definition.FailureMeasureEnum.rfind", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rfind.html#rfind", + "title": "rfind", + "section": "rfind", + "text": "Return the highest index in S where substring sub is found, such that sub is contained within S[start:end].\nOptional arguments start and end are interpreted as in slice notation.\nReturn -1 on failure.\nrfind" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.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.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.name", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.name.html#ansys.dpf.composites.sampling_point.SamplingPoint.name", - "title": "name > name > name", - "section": "name > name", - "text": "property SamplingPoint.name: str\n\nName of the object.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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": "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.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": "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.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": "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.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": "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.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/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.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/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.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": "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.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": "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.682 seconds)\nDownload Jupyter notebook: 006_filter_composite_data_example.ipynb\nDownload Python source code: 006_filter_composite_data_example.py\nDownload zipped: 006_filter_composite_data_example.zip\nGallery generated by Sphinx-Gallery\nFilter by analysis ply on the client side\nDownload Jupyter notebook: 006_filter_composite_data_example.ipynb\nDownload Python source code: 006_filter_composite_data_example.py\nDownload zipped: 006_filter_composite_data_example.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.material_properties.MaterialProperty.Strain_Limits_eSxz", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eSxz", + "title": "Strain_Limits_eSxz > Strain_Limits_eSxz > Strain_Limits_eSxz", + "section": "Strain_Limits_eSxz > Strain_Limits_eSxz", + "text": "MaterialProperty.Strain_Limits_eSxz: str = 'strain_shear_xz'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.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.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.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.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.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.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.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.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.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.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.LaRCCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.result_definition.FailureMeasureEnum.join", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.join.html#join", - "title": "join", - "section": "join", - "text": "Concatenate any number of strings.\nThe string whose method is called is inserted in between each given string.\nThe result is returned as a new string.\nExample: ‘.’.join([‘ab’, ‘pq’, ‘rs’]) -> ‘ab.pq.rs’\njoin" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.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.join", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.join.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.join", - "title": "join > join > join", - "section": "join > join", - "text": "FailureMeasureEnum.join(iterable, /)\n\nConcatenate any number of strings.\n\nThe string whose method is called is inserted in between each given string.\nThe result is returned as a new string.\n\nExample: ‘.’.join([‘ab’, ‘pq’, ‘rs’]) -> ‘ab.pq.rs’\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.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.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.server_helpers.connect_to_or_start_server", + "href": "api/_autosummary/ansys.dpf.composites.server_helpers.connect_to_or_start_server.html#connect_to_or_start_server", + "title": "connect_to_or_start_server", + "section": "connect_to_or_start_server", + "text": "Connect to or start a DPF server with the DPF Composites plugin loaded.\nIf a port or IP address is set, this method tries to connect to the server specified\nand the ansys_path parameter is ignored. If no parameters are set, a local server\nfrom the latest available Ansys installation is started.\nport (Optional[int], default: None) – Port that the DPF server is listening on.\nip (Optional[str], default: None) – IP address for the DPF server.\nansys_path (Optional[str], default: None) – Root path for the Ansys installation. For example, C:\\\\Program Files\\\\ANSYS Inc\\\\v232.\nThis parameter is ignored if either the port or IP address is set.\nAny\nDPF server.\nconnect_to_or_start_server\nansys_path\nOptional\nint\nNone\nOptional\nstr\nNone\nOptional\nstr\nNone\nC:\\\\Program Files\\\\ANSYS Inc\\\\v232\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.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.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.composite_scope.CompositeScope", - "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.html#compositescope", - "title": "CompositeScope", - "section": "CompositeScope", - "text": "Provides the composite scope.\nThis class defines which part of the model and solution step are selected.\nelements (collections.abc.Sequence[int] | None) – List of elements.\nplies (collections.abc.Sequence[str] | None) – List of plies.\ntime (float | None) – Time or frequency. You can use the\nCompositeModel.get_result_times_or_frequencies() method\nto list the solution steps.\nnamed_selections (collections.abc.Sequence[str] | None) – List of element sets.\nUse composite_model.get_mesh().available_named_selections to list\nall named selections.\nIf more than one scope (elements, named_selections and plies)\nis set, then the final element scope is the intersection\nof the defined parameters. All elements are selected if no parameter is set.\nCompositeScope.elements\n\nCompositeScope.named_selections\n\nCompositeScope.plies\n\nCompositeScope.time\n\nCompositeScope\nCompositeModel.get_result_times_or_frequencies()\nelements\nnamed_selections\nplies\nCompositeScope.elements\nCompositeScope.named_selections\nCompositeScope.plies\nCompositeScope.time" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.composite_scope.CompositeScope", - "href": "api/_autosummary/ansys.dpf.composites.composite_scope.CompositeScope.html#ansys.dpf.composites.composite_scope.CompositeScope", - "title": "CompositeScope > CompositeScope > CompositeScope", - "section": "CompositeScope > CompositeScope", - "text": "class ansys.dpf.composites.composite_scope.CompositeScope(elements=None, plies=None, time=None, named_selections=None)\n\nProvides the composite scope.\n\nThis class defines which part of the model and solution step are selected.\n\nParameters\n\nelements (collections.abc.Sequence[int] | None) – List of elements.\n\nplies (collections.abc.Sequence[str] | None) – List of plies.\n\ntime (float | None) – Time or frequency. You can use the\nCompositeModel.get_result_times_or_frequencies() method\nto list the solution steps.\n\nnamed_selections (collections.abc.Sequence[str] | None) – List of element sets.\nUse composite_model.get_mesh().available_named_selections to list\nall named selections.\n\nNotes\n\nIf more than one scope (elements, named_selections and plies)\nis set, then the final element scope is the intersection\nof the defined parameters. All elements are selected if no parameter is set.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nCompositeScope.elements\n\n\n\nCompositeScope.named_selections\n\n\n\nCompositeScope.plies\n\n\n\nCompositeScope.time\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.l", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.l.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.l", + "title": "l > l > l", + "section": "l > l", + "text": "FailureModeEnum.l = 900\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.layup_info.LayerProperty.ANGLES", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.ANGLES.html#ansys.dpf.composites.layup_info.LayerProperty.ANGLES", - "title": "ANGLES > ANGLES > ANGLES", - "section": "ANGLES > ANGLES", - "text": "LayerProperty.ANGLES = 1\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_spots", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_spots.html#ansys.dpf.composites.layup_info.ElementInfo.n_spots", + "title": "n_spots > n_spots > n_spots", + "section": "n_spots > n_spots", + "text": "ElementInfo.n_spots: int\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.layup_info.material_properties.MaterialProperty.Strain_Limits_effective_strain", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_effective_strain.html#strain_limits_effective_strain", + "title": "Strain_Limits_effective_strain", + "section": "Strain_Limits_effective_strain", + "text": "Strain_Limits_effective_strain" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.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.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.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.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.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.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": "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.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": "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.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": "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.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": "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.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": "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": "examples/gallery_examples/sg_execution_times", + "href": "examples/gallery_examples/sg_execution_times.html#computation-times", + "title": "Computation times", + "section": "Computation times", + "text": "01:22.317 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:12.061\n0.0\nsphx_glr_examples_gallery_examples_010_harmonic_example.py (010_harmonic_example.py)\n00:09.928\n0.0\nsphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py (014_cyclic_symmetry_example.py)\n00:07.394\n0.0\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py (007_interlaminar_normal_stress_example.py)\n00:07.360\n0.0\nsphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py (009_short_fiber_orientation_tensor.py)\n00:05.827\n0.0\nsphx_glr_examples_gallery_examples_011_rst_workflow.py (011_rst_workflow.py)\n00:05.043\n0.0\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py (002_sampling_point_example.py)\n00:04.888\n0.0\nsphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py (099_dpf_composite_failure_workflow.py)\n00:04.671\n0.0\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py (006_filter_composite_data_example.py)\n00:04.636\n0.0\nsphx_glr_examples_gallery_examples_013_thermal_example.py (013_thermal_example.py)\n00:04.181\n0.0\nsphx_glr_examples_gallery_examples_008_assembly_example.py (008_assembly_example.py)\n00:04.148\n0.0\nsphx_glr_examples_gallery_examples_012_fatigue_example.py (012_fatigue_example.py)\n00:03.799\n0.0\nsphx_glr_examples_gallery_examples_004_get_material_properties_example.py (004_get_material_properties_example.py)\n00:03.610\n0.0\nsphx_glr_examples_gallery_examples_003_short_fiber_example.py (003_short_fiber_example.py)\n00:03.287\n0.0\nsphx_glr_examples_gallery_examples_005_get_layup_properties_example.py (005_get_layup_properties_example.py)\n00:01.484\n0.0\nComputation times\n001_failure_operator_example.py\n010_harmonic_example.py\n014_cyclic_symmetry_example.py\n007_interlaminar_normal_stress_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\n004_get_material_properties_example.py\n003_short_fiber_example.py\n005_get_layup_properties_example.py" }, { - "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.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": "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.262 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.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.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.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.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.CompositeDataSources.composite", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.composite.html#ansys.dpf.composites.data_sources.CompositeDataSources.composite", + "title": "composite > composite > composite", + "section": "composite > composite", + "text": "CompositeDataSources.composite: DataSources | None\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.ElementInfo.dpf_material_ids", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids.html#ansys.dpf.composites.layup_info.ElementInfo.dpf_material_ids", - "title": "dpf_material_ids > dpf_material_ids > dpf_material_ids", - "section": "dpf_material_ids > dpf_material_ids", - "text": "ElementInfo.dpf_material_ids: ndarray[Any, dtype[int64]]\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.constants.FailureOutput.FAILURE_MODE", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE.html#failure_mode", + "title": "FAILURE_MODE", + "section": "FAILURE_MODE", + "text": "FAILURE_MODE" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.constants.FailureOutput.FAILURE_MODE", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE.html#ansys.dpf.composites.constants.FailureOutput.FAILURE_MODE", + "title": "FAILURE_MODE > FAILURE_MODE > FAILURE_MODE", + "section": "FAILURE_MODE > FAILURE_MODE", + "text": "FailureOutput.FAILURE_MODE = 0\n\n" }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.failure_criteria.PuckCriterion.wf_pf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pf.html#wf_pf", + "title": "wf_pf", + "section": "wf_pf", + "text": "Weighting factor of the fiber failure (pf) mode.\nfloat\nwf_pf\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.data_sources.get_composites_data_sources", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composites_data_sources.html#ansys.dpf.composites.data_sources.get_composites_data_sources", + "title": "get_composites_data_sources > get_composites_data_sources > get_composites_data_sources", + "section": "get_composites_data_sources > get_composites_data_sources", + "text": "ansys.dpf.composites.data_sources.get_composites_data_sources(continuous_composite_files)\n\nCreate DPF data sources from a ContinuousFiberCompositeFiles object.\n\nParameters\n\ncontinuous_composite_files (ContinuousFiberCompositesFiles)\n\nReturn type\n\nCompositeDataSources\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.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.layup_info.ElementInfo.is_layered", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_layered.html#is_layered", - "title": "is_layered", - "section": "is_layered", - "text": "is_layered" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.result_definition.FailureMeasureEnum.split", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.split.html#split", - "title": "split", - "section": "split", - "text": "Return a list of the substrings in the string, using sep as the separator string.\nThe separator used to split the string.\nWhen set to None (the default value), will split on any whitespace\ncharacter (including n r t f and spaces) and will discard\nempty strings from the result.\nMaximum number of splits.\n-1 (the default value) means no limit.\nSplitting starts at the front of the string and works to the end.\nNote, str.split() is mainly useful for data that has been intentionally\ndelimited. With natural text that includes punctuation, consider using\nthe regular expression module.\nsplit" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.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/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.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.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.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.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.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.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.failure_criteria.CuntzeCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.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.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.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.MaxStrainCriterion.e23", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e23.html#e23", - "title": "e23", - "section": "e23", - "text": "Whether to activate the failure evaluation regarding the interlaminar shear strain e23.\nbool\ne23\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.composite_model.CompositeModel", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.html#compositemodel", + "title": "CompositeModel", + "section": "CompositeModel", + "text": "Provides access to the basic composite postprocessing functionality.\nOn initialization, the CompositeModel class automatically adds composite lay-up\ninformation to the meshed regions. It prepares the providers for different lay-up properties\nso that they can be efficiently evaluated. The composite_files provided are automatically\nuploaded to the server if needed.\nWhen creating a CompositeModel instance, several providers are created and\nlay-up information is added to the DPF meshed regions. Depending on the use\ncase, it can be more efficient to create the providers separately.\nThe handling of models with multiple composite definition files (assemblies)\ndiffer depending on the version of the DPF server. The handling is simplified\nwith DPF Server 7.0 (2024 R1) or later and the full assembly can be post-processed\nin the same way as a model with a single ACP model.\nBefore DPF Server 7.0 (2024 R1):\nFor assemblies with multiple composite definition files, separate meshes and\nlay-up operators are generated (wrapped by the CompositeInfo class). This\nis needed because the lay-up provider can only add the data of a single\ncomposite definitions file to a mesh. All functions that depend on composite\ndefinitions mut be called with the correct composite_definition_label\nparameter. The layered elements that get information from a given\ncomposite definition label can be determined by calling\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label().\nAll the elements that are not part of a composite definition are either homogeneous\nsolids or layered models defined outside of an ACP model. The\nCompositeModel.composite_definition_labels() command returns all available composite\ndefinition labels. For more information, see\nsphx_glr_examples_gallery_examples_008_assembly_example.py.\ncomposite_files (ContinuousFiberCompositesFiles) – Use the get_composite_files_from_workbench_result_folder() function to obtain\nthe ContinuousFiberCompositesFiles object.\nserver (BaseServer) – DPF Server on which the model is created\ndefault_unit_system (Optional[UnitSystem], default: None) – Unit system that is used if the result file\ndoes not specify the unit system. This happens\nfor pure MAPDL projects.\nCompositeModel.add_interlaminar_normal_stresses(...)\nAdd interlaminar normal stresses to the stresses fields container.\nCompositeModel.evaluate_failure_criteria(...)\nGet a fields container with the evaluated failure criteria.\nCompositeModel.get_all_layered_element_ids()\nGet all element IDs with lay-up data.\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label([...])\nGet all layered element IDs that belong to a composite definition label.\nCompositeModel.get_analysis_plies(element_id)\nGet analysis ply names.\nCompositeModel.get_constant_property_dict(...)\nGet a dictionary with constant properties.\nCompositeModel.get_element_info(element_id)\nGet element information for an element ID.\nCompositeModel.get_element_laminate_offset(...)\nGet the laminate offset of an element.\nCompositeModel.get_layup_operator([...])\nGet the lay-up operator.\nCompositeModel.get_mesh([...])\nGet the underlying DPF meshed region.\nCompositeModel.get_property_for_all_layers(...)\nGet a layer property for an element ID.\nCompositeModel.get_result_times_or_frequencies()\nGet the times or frequencies in the result file.\nCompositeModel.get_rst_streams_provider()\nGet the streams provider of the loaded result file.\nCompositeModel.get_sampling_point(...[, ...])\nGet a sampling point for an element ID and failure criteria.\nCompositeModel.composite_definition_labels\nAll composite definition labels in the model.\nCompositeModel.composite_files\nGet the composite file paths on the server.\nCompositeModel.core_model\nUnderlying DPF core model.\nCompositeModel.data_sources\nComposite data sources.\nCompositeModel.layup_model_type\nGet the context type of the lay-up model.\nCompositeModel.material_metadata\nDPF material ID to metadata map of the materials.\nCompositeModel.material_names\nMaterial name to DPF material ID map.\nCompositeModel.material_operators\nMaterial operators.\nCompositeModel\nCompositeModel\nCompositeModel\nCompositeInfo\ncomposite_definition_label\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label()\nCompositeModel.composite_definition_labels()\nContinuousFiberCompositesFiles\nget_composite_files_from_workbench_result_folder()\nContinuousFiberCompositesFiles\nBaseServer\nOptional\nUnitSystem\nNone\nCompositeModel.add_interlaminar_normal_stresses\nCompositeModel.evaluate_failure_criteria\nCompositeModel.get_all_layered_element_ids\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label\nCompositeModel.get_analysis_plies\nCompositeModel.get_constant_property_dict\nCompositeModel.get_element_info\nCompositeModel.get_element_laminate_offset\nCompositeModel.get_layup_operator\nCompositeModel.get_mesh\nCompositeModel.get_property_for_all_layers\nCompositeModel.get_result_times_or_frequencies\nCompositeModel.get_rst_streams_provider\nCompositeModel.get_sampling_point\nCompositeModel.composite_definition_labels\nCompositeModel.composite_files\nCompositeModel.core_model\nCompositeModel.data_sources\nCompositeModel.layup_model_type\nCompositeModel.material_metadata\nCompositeModel.material_names\nCompositeModel.material_operators" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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", + "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.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.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.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.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.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.PuckCriterion.pmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.pmc.html#pmc", + "title": "pmc", + "section": "pmc", + "text": "Whether to activate the failure evaluation regarding matrix failure due to shear failure.\nbool\npmc\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.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.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.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": "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.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": "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.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": "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.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": "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.928 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.MaxStrainCriterion.eSyz", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSyz.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSyz", - "title": "eSyz > eSyz > eSyz", - "section": "eSyz > eSyz", - "text": "property MaxStrainCriterion.eSyz: float\n\nGlobal strain limit in material direction 23.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.html#resultdefinition", + "title": "ResultDefinition", + "section": "ResultDefinition", + "text": "Represents the result definition of DPF Composites.\nThis class is used to configure the DPF operators composite::failure_evaluator\nand composite::sampling_point_evaluator.\nResultDefinition.check_has_single_scope(msg)\nCheck that the result definition has one scope.\nResultDefinition.to_dict()\nGet the result definition in a dictionary representation.\nResultDefinition.to_json()\nConvert the dictionary representation of the result definition to a JSON dictionary.\nResultDefinition.combined_failure_criterion\nConfiguration of the failure criteria such as maximum stress, puck, and wrinkling.\nResultDefinition.expression\nType of the result.\nResultDefinition.material_file\nPath of the material files that store the material properties.\nResultDefinition.max_chunk_size\nMaximum chunk size (number of elements) for the result evaluation.\nResultDefinition.measure\nReturn type of the failure values.\nResultDefinition.name\nCustom name.\nResultDefinition.rst_files\nPath of the result (RST) files.\nResultDefinition.scopes\nScopes of the result definition.\nResultDefinition.stress_strain_eval_mode\nResults loaded from a result (RST) file by default.\nResultDefinition.time\nTime or solution step.\nResultDefinition\ncomposite::failure_evaluator\ncomposite::sampling_point_evaluator\nResultDefinition.check_has_single_scope\nResultDefinition.to_dict\nResultDefinition.to_json\nResultDefinition.combined_failure_criterion\nResultDefinition.expression\nResultDefinition.material_file\nResultDefinition.max_chunk_size\nResultDefinition.measure\nResultDefinition.name\nResultDefinition.rst_files\nResultDefinition.scopes\nResultDefinition.stress_strain_eval_mode\nResultDefinition.time" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.MaxStressCriterion.s1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s1.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s1", + "title": "s1 > s1 > s1", + "section": "s1 > s1", + "text": "property MaxStressCriterion.s1: bool\n\nWhether to activate the failure evaluation regarding the stress in the material 1 direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.result_definition.ResultDefinition.max_chunk_size", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.max_chunk_size.html#max_chunk_size", + "title": "max_chunk_size", + "section": "max_chunk_size", + "text": "Maximum chunk size (number of elements) for the result evaluation.\nSmall chunks reduce the maximum peak of memory, but too many chunks causes\nsome overhead. The default is 50,000. Use -1 to disable chunking.\nint\nmax_chunk_size\n-1\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.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.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.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.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/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.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/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.result_definition.FailureMeasureEnum.isdecimal", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal.html#isdecimal", + "title": "isdecimal", + "section": "isdecimal", + "text": "Return True if the string is a decimal string, False otherwise.\nA string is a decimal string if all characters in the string are decimal and\nthere is at least one character in the string.\nisdecimal" }, { - "objectID": "examples/gallery_examples/011_rst_workflow", - "href": "examples/gallery_examples/011_rst_workflow.html#configure-combined-failure-criterion", - "title": "Failure analysis of an MAPDL (RST) model > Configure combined failure criterion", - "section": "Configure combined failure criterion", - "text": "Configure the combined failure criterion.\nConfigure combined failure criterion" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.isdecimal", + "title": "isdecimal > isdecimal > isdecimal", + "section": "isdecimal > isdecimal", + "text": "FailureMeasureEnum.isdecimal(/)\n\nReturn True if the string is a decimal string, False otherwise.\n\nA string is a decimal string if all characters in the string are decimal and\nthere is at least one character in the string.\n\n!! processed by numpydoc !!" }, { - "objectID": "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.constants.Sym3x3TensorComponent.TENSOR31", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR31.html#tensor31", + "title": "TENSOR31", + "section": "TENSOR31", + "text": "TENSOR31" }, { - "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.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": "examples/gallery_examples/011_rst_workflow", - "href": "examples/gallery_examples/011_rst_workflow.html#create-engineering-data-file-and-set-material-uuids-in-mapdl", - "title": "Failure analysis of an MAPDL (RST) model > Create Engineering Data file and set material UUIDs in MAPDL", - "section": "Create Engineering Data file and set material UUIDs in MAPDL", - "text": "Here are two workflows for setting up the engineering data file\nand the material UUIDs in MAPDL. The material UUIDs must be set\nin MAPDL before the model is solved.\nCreate an External Model system in WB and load the solver input file\nLink the External Model with an Engineering Data system and update it\nSave the project and copy the generated engineering data file (EngineeringData.xml)\nFor each material, look for the DataTransferID, go to MAPDL and set the material\nUUIDs with the MP,UVID,, command\nStart ACP, go to File - Import Model and load the solver input file (CDB)\nGo to the Materials folder and export the engineering data file (Ansys Workbench XML)\nFor each material, look for the DataTransferID, go to MAPDL and set the material\nUUID with the MP,UVID,, command.\nTotal running time of the script: (0 minutes 5.110 seconds)\nDownload Jupyter notebook: 011_rst_workflow.ipynb\nDownload Python source code: 011_rst_workflow.py\nDownload zipped: 011_rst_workflow.zip\nGallery generated by Sphinx-Gallery\nCreate Engineering Data file and set material UUIDs in MAPDL\nDataTransferID\nMP,UVID,,\nDataTransferID\nMP,UVID,,\nDownload Jupyter notebook: 011_rst_workflow.ipynb\nDownload Python source code: 011_rst_workflow.py\nDownload zipped: 011_rst_workflow.zip" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.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.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.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.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.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.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.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.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.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.composite_model.CompositeModel.get_all_layered_element_ids", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids.html#get_all_layered_element_ids", + "title": "get_all_layered_element_ids", + "section": "get_all_layered_element_ids", + "text": "Get all element IDs with lay-up data.\nSequence[int]\nget_all_layered_element_ids\nSequence\nint" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.composite_model.CompositeModel.get_all_layered_element_ids", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids.html#ansys.dpf.composites.composite_model.CompositeModel.get_all_layered_element_ids", + "title": "get_all_layered_element_ids > get_all_layered_element_ids > get_all_layered_element_ids", + "section": "get_all_layered_element_ids > get_all_layered_element_ids", + "text": "CompositeModel.get_all_layered_element_ids()\n\nGet all element IDs with lay-up data.\n\nReturn type\n\nSequence[int]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.result_definition.FailureMeasureEnum.rpartition", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition.html#rpartition", + "title": "rpartition", + "section": "rpartition", + "text": "Partition the string into three parts using the given separator.\nThis will search for the separator in the string, starting at the end. If\nthe separator is found, returns a 3-tuple containing the part before the\nseparator, the separator itself, and the part after it.\nIf the separator is not found, returns a 3-tuple containing two empty strings\nand the original string.\nrpartition" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.result_definition.FailureMeasureEnum.rpartition", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition", + "title": "rpartition > rpartition > rpartition", + "section": "rpartition > rpartition", + "text": "FailureMeasureEnum.rpartition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nThis will search for the separator in the string, starting at the end. If\nthe separator is found, returns a 3-tuple containing the part before the\nseparator, the separator itself, and the part after it.\n\nIf the separator is not found, returns a 3-tuple containing two empty strings\nand the original string.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.result_definition.ResultDefinitionScope.write_data_for_full_element_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.write_data_for_full_element_scope.html#write_data_for_full_element_scope", + "title": "write_data_for_full_element_scope", + "section": "write_data_for_full_element_scope", + "text": "Whether to write the data for all element labels in the element scope.\nThis makes sense if an element scope is explicitly requested\nbut the actual scope where postprocessing has happened is smaller,\nperhaps due to ply scoping.\nwrite_data_for_full_element_scope" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.result_definition.ResultDefinitionScope.write_data_for_full_element_scope", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.write_data_for_full_element_scope.html#ansys.dpf.composites.result_definition.ResultDefinitionScope.write_data_for_full_element_scope", + "title": "write_data_for_full_element_scope > write_data_for_full_element_scope > write_data_for_full_element_scope", + "section": "write_data_for_full_element_scope > write_data_for_full_element_scope", + "text": "ResultDefinitionScope.write_data_for_full_element_scope: bool = True\n\nWhether to write the data for all element labels in the element scope.\n\nThis makes sense if an element scope is explicitly requested\nbut the actual scope where postprocessing has happened is smaller,\nperhaps due to ply scoping.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_layers", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.n_layers.html#ansys.dpf.composites.layup_info.ElementInfo.n_layers", - "title": "n_layers > n_layers > n_layers", - "section": "n_layers > n_layers", - "text": "ElementInfo.n_layers: int\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_shell", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_shell.html#is_shell", + "title": "is_shell", + "section": "is_shell", + "text": "is_shell" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.layup_info.ElementInfo.is_shell", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.is_shell.html#ansys.dpf.composites.layup_info.ElementInfo.is_shell", + "title": "is_shell > is_shell > is_shell", + "section": "is_shell > is_shell", + "text": "ElementInfo.is_shell: bool\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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_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.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_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.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.result_definition.FailureMeasureEnum.startswith", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith.html#startswith", - "title": "startswith", - "section": "startswith", - "text": "Return True if the string starts with the specified prefix, False otherwise.\nA string or a tuple of strings to try.\nOptional start position. Default: start of the string.\nOptional stop position. Default: end of the string.\nstartswith" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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": "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.FailureModeEnum.w", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.w.html#w", - "title": "w", - "section": "w", - "text": "w" + "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.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": "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.FailureModeEnum.cfc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cfc.html#cfc", - "title": "cfc", - "section": "cfc", - "text": "cfc" + "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.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": "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.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/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.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/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.287 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.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.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.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.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.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": "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.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": "examples/gallery_examples/009_short_fiber_orientation_tensor", + "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#set-up-analysis", + "title": "Plot of the orientation tensor for short fiber composites > Set up analysis", + "section": "Set up analysis", + "text": "Setting up the analysis consists of loading Ansys libraries, connecting to the\nDPF server, and retrieving the example files.\nLoad Ansys libraries.\nStart a DPF server and copy the example files into the current working directory.\nThese files are needed:\nMechanical APDL result (RST) file containing the simulation results\nMechanical APDL input file (DS.DAT) containing the fiber orientation tensor data\nSet up analysis" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3c", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3c.html#s3c", - "title": "s3c", - "section": "s3c", - "text": "s3c" + "objectID": "examples/gallery_examples/009_short_fiber_orientation_tensor", + "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#set-up-data-sources", + "title": "Plot of the orientation tensor for short fiber composites > Set up data sources", + "section": "Set up data sources", + "text": "Set up the data sources.\nSet up data sources" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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": "examples/gallery_examples/009_short_fiber_orientation_tensor", + "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#initialize-dpf-model", + "title": "Plot of the orientation tensor for short fiber composites > Initialize DPF model", + "section": "Initialize DPF model", + "text": "Initialize the DPF model.\nShould your mesh contain both solid and shell elements, for visualization purposes\nit can be useful to scope the mesh to the solid ones.\nInitialize DPF model" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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": "examples/gallery_examples/009_short_fiber_orientation_tensor", + "href": "examples/gallery_examples/009_short_fiber_orientation_tensor.html#plot-input-data", + "title": "Plot of the orientation tensor for short fiber composites > Plot input data", + "section": "Plot input data", + "text": "Plot the two largest eigenvalues (a11 and a22) of the fiber orientation tensor.\nNote that the plots reveal the presence of a weld line in the middle of the specimen.\nPlot input data" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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": "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.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": "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 5.827 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.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.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.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.find", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.find.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.find", + "title": "find > find > find", + "section": "find > find", + "text": "FailureMeasureEnum.find(sub, [start, [end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nOptional arguments start and end are interpreted as in slice notation.\nReturn -1 on failure.\n\n!! processed by numpydoc !!" }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.insert", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.insert.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.insert", - "title": "insert > insert > insert", - "section": "insert > insert", - "text": "CombinedFailureCriterion.insert(fc)\n\nAdd a failure criterion to a list of selected criteria.\n\nParameters\n\nfc (FailureCriterionBase) – Failure criterion to add. If a failure criterion of the same type\nalready exists, it is overwritten.\n\nExamples\n\n>>> combined_failure = CombinedFailureCriterion(\"max_stress 3D\")\n>>> max_stress = MaxStressCriterion(s1=True, s2=True, s3=True,\n s12=True, s13=True, s23=True)\n>>> combined_failure.insert(max_stress)\n\nReturn type\n\nNone\n\n!! processed by numpydoc !!" + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.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.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.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.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.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.LaRCCriterion.wf_lmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc.html#wf_lmc", + "title": "wf_lmc", + "section": "wf_lmc", + "text": "Weighting factor of matrix failure due to compression (lmc).\nfloat\nwf_lmc\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.LaRCCriterion.wf_lmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lmc", + "title": "wf_lmc > wf_lmc > wf_lmc", + "section": "wf_lmc > wf_lmc", + "text": "property LaRCCriterion.wf_lmc: float\n\nWeighting factor of matrix failure due to compression (lmc).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.failure_criteria.MaxStressCriterion.s2", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.s2", - "title": "s2 > s2 > s2", - "section": "s2 > s2", - "text": "property MaxStressCriterion.s2: bool\n\nWhether to activate the failure evaluation regarding the stress in the material 2 direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.cfps", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.cfps.html#cfps", + "title": "cfps", + "section": "cfps", + "text": "Whether to consider inter-fiber strength reduction due to fiber parallel stresses.\nbool\ncfps\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf.html#wf", - "title": "wf", - "section": "wf", - "text": "Weighting factor of the failure mode (cs).\nfloat\nwf\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.cfps", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.cfps.html#ansys.dpf.composites.failure_criteria.PuckCriterion.cfps", + "title": "cfps > cfps > cfps", + "section": "cfps > cfps", + "text": "property PuckCriterion.cfps: bool\n\nWhether to consider inter-fiber strength reduction due to fiber parallel stresses.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf", - "title": "wf > wf > wf", - "section": "wf > wf", - "text": "property CoreFailureCriterion.wf: float\n\nWeighting factor of the failure mode (cs).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.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.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.Puck_Constants_p_21_pos", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos", + "title": "Puck_Constants_p_21_pos > Puck_Constants_p_21_pos > Puck_Constants_p_21_pos", + "section": "Puck_Constants_p_21_pos > Puck_Constants_p_21_pos", + "text": "MaterialProperty.Puck_Constants_p_21_pos: str = 'tensile_inclination_xz_puck_constants'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.select_indices.get_selected_indices_by_analysis_ply", + "href": "api/_autosummary/ansys.dpf.composites.select_indices.get_selected_indices_by_analysis_ply.html#get_selected_indices_by_analysis_ply", + "title": "get_selected_indices_by_analysis_ply", + "section": "get_selected_indices_by_analysis_ply", + "text": "Get selected indices by analysis ply.\nSelects all indices that are in a layer with the given analysis ply\nanalysis_ply_info_provider (AnalysisPlyInfoProvider) – Provider for the analysis ply information.\nelement_info (ElementInfo) – Lay-up information for the element.\nSelected elementary indices.\nNDArray[int64]\nget_selected_indices_by_analysis_ply" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.ply_wise_data.get_ply_wise_data", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.get_ply_wise_data.html#get_ply_wise_data", + "title": "get_ply_wise_data", + "section": "get_ply_wise_data", + "text": "Get ply-wise data from a field.\nfield (Field) – Field to extract data from.\nply_name (str) – Name of the ply to extract data from.\nmesh (MeshedRegion) – Meshed region that needs to be enriched with composite information.\nUse the CompositeModel.get_mesh() method to get the meshed region.\nspot_reduction_strategy (SpotReductionStrategy, default: ) – Reduction strategy for getting from spot values (BOT, MID, TOP) to a single value\nper corner node and layer. The default is AVG.\nrequested_location (str, default: 'ElementalNodal') – Location of the output field. Important: The function always averages nodal values\nfor \"elemental\" or \"nodal\" locations,\nirrespective of \"spot_reduction_strategy\".\nOptions are \"elemental\", \"elemental_nodal\", and \"nodal\".\nThe default is \"elemental_nodal\".\ncomponent (IntEnum | int, default: 0) – Component to extract data from. The default is 0.\nField\nget_ply_wise_data\nField\nstr\nMeshedRegion\nCompositeModel.get_mesh()\nSpotReductionStrategy\n\nAVG\nstr\n'ElementalNodal'\n\"elemental\"\n\"nodal\"\n\"spot_reduction_strategy\"\n\"elemental\"\n\"elemental_nodal\"\n\"nodal\"\n\"elemental_nodal\"\nIntEnum\nint\n0\n0\nField" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.ply_wise_data.get_ply_wise_data", + "href": "api/_autosummary/ansys.dpf.composites.ply_wise_data.get_ply_wise_data.html#ansys.dpf.composites.ply_wise_data.get_ply_wise_data", + "title": "get_ply_wise_data > get_ply_wise_data > get_ply_wise_data", + "section": "get_ply_wise_data > get_ply_wise_data", + "text": "ansys.dpf.composites.ply_wise_data.get_ply_wise_data(field, ply_name, mesh, spot_reduction_strategy=SpotReductionStrategy.AVG, requested_location='ElementalNodal', component=0)\n\nGet ply-wise data from a field.\n\nParameters\n\nfield (Field) – Field to extract data from.\n\nply_name (str) – Name of the ply to extract data from.\n\nmesh (MeshedRegion) – Meshed region that needs to be enriched with composite information.\nUse the CompositeModel.get_mesh() method to get the meshed region.\n\nspot_reduction_strategy (SpotReductionStrategy, default: ) – Reduction strategy for getting from spot values (BOT, MID, TOP) to a single value\nper corner node and layer. The default is AVG.\n\nrequested_location (str, default: 'ElementalNodal') – Location of the output field. Important: The function always averages nodal values\nfor \"elemental\" or \"nodal\" locations,\nirrespective of \"spot_reduction_strategy\".\nOptions are \"elemental\", \"elemental_nodal\", and \"nodal\".\nThe default is \"elemental_nodal\".\n\ncomponent (IntEnum | int, default: 0) – Component to extract data from. The default is 0.\n\nReturn type\n\nField\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.composite_model.CompositeModel.add_interlaminar_normal_stresses", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.add_interlaminar_normal_stresses.html#add_interlaminar_normal_stresses", + "title": "add_interlaminar_normal_stresses", + "section": "add_interlaminar_normal_stresses", + "text": "Add interlaminar normal stresses to the stresses fields container.\nInterlaminar normal stresses (s3) are not available for layered shells.\nThis function performs a post-processing step which computes s3 and adds\nit to the stress field. s3 is automatically computed if a formulation\nof a failure criterion depends on this stress component, for instance\nPuck 3D .\nFor a usage example, see\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py.\nstresses (FieldsContainer) – Stresses fields container to add interlaminar normal stresses to.\nstrains (FieldsContainer)\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nInterlaminar normal stresses are only added to the layered elements defined\nin the specified composite definition.\nNone\nadd_interlaminar_normal_stresses\nPuck 3D\nFieldsContainer\nFieldsContainer\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nNone" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.html#tsaiwucriterion", - "title": "TsaiWuCriterion", - "section": "TsaiWuCriterion", - "text": "Defines the Tsai-Wu failure criterion for orthotropic reinforced materials.\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\nTsaiWuCriterion.to_dict()\n\nTsaiWuCriterion.to_json()\n\nTsaiWuCriterion.active\nThe failure criterion is suppressed if active is False.\nTsaiWuCriterion.dim\nSpecifies which formulation of the failure criterion is used.\nTsaiWuCriterion.name\nName of the failure criterion.\nTsaiWuCriterion.wf\nWeighting factor of this failure criterion.\nTsaiWuCriterion\nfloat\n1.0\nint\n2\nTsaiWuCriterion.to_dict\nTsaiWuCriterion.to_json\nTsaiWuCriterion.active\nTsaiWuCriterion.dim\nTsaiWuCriterion.name\nTsaiWuCriterion.wf" + "objectID": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.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.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.LaRCCriterion.lft", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lft.html#lft", + "title": "lft", + "section": "lft", + "text": "Whether to activate the failure evaluation regarding tension in fiber direction.\nbool\nlft\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.failure_criteria.FailureModeEnum.p", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.p.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.p", - "title": "p > p > p", - "section": "p > p", - "text": "FailureModeEnum.p = 800\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.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.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.s", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.s.html#s", - "title": "s", - "section": "s", - "text": "Specifies the effect of fiber parallel stresses regarding inter-fiber failure. s = [0, 1) and the default is 0.5.\nfloat\ns\n0.5\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.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.PuckCriterion.s", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.s.html#ansys.dpf.composites.failure_criteria.PuckCriterion.s", - "title": "s > s > s", - "section": "s > s", - "text": "property PuckCriterion.s: float\n\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure. s = [0, 1) and the default is 0.5.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/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.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.PuckCriterion.p22_neg", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg.html#p22_neg", + "title": "p22_neg", + "section": "p22_neg", + "text": "Global inclination factor of the fracture plane \\perp \\perp for compression.\nfloat\np22_neg\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.name.html#ansys.dpf.composites.failure_criteria.VonMisesCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property VonMisesCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.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": "examples/index", - "href": "examples/index.html#examples", - "title": "Examples", - "section": "Examples", - "text": "These examples demonstrate the behavior and usage of PyDPF - Composites.\nsphx_glr_examples_gallery_examples_001_failure_operator_example.py\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py\nsphx_glr_examples_gallery_examples_003_short_fiber_example.py\nsphx_glr_examples_gallery_examples_004_get_material_properties_example.py\nsphx_glr_examples_gallery_examples_005_get_layup_properties_example.py\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py\nsphx_glr_examples_gallery_examples_008_assembly_example.py\nsphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py\nsphx_glr_examples_gallery_examples_010_harmonic_example.py\nsphx_glr_examples_gallery_examples_011_rst_workflow.py\nsphx_glr_examples_gallery_examples_012_fatigue_example.py\nsphx_glr_examples_gallery_examples_013_thermal_example.py\nsphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py\nsphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py\nGallery generated by Sphinx-Gallery\nExamples" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.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.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.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.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.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.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.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.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.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.MaxStressCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_json.html#to_json", - "title": "to_json", - "section": "to_json", - "text": "str\nthe string representation of the object as JSON.\nIt can be used for the result definition of the DPF Composites Failure Operator.\nto_json\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.data_sources.ContinuousFiberCompositesFiles", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.html#continuousfibercompositesfiles", + "title": "ContinuousFiberCompositesFiles", + "section": "ContinuousFiberCompositesFiles", + "text": "Provides the container for continuous fiber composite file paths.\nContinuousFiberCompositesFiles.files_are_local\n\nContinuousFiberCompositesFiles.rst\n\nContinuousFiberCompositesFiles.composite\n\nContinuousFiberCompositesFiles.engineering_data\n\nContinuousFiberCompositesFiles\nContinuousFiberCompositesFiles.files_are_local\nContinuousFiberCompositesFiles.rst\nContinuousFiberCompositesFiles.composite\nContinuousFiberCompositesFiles.engineering_data" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.data_sources.ContinuousFiberCompositesFiles", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.html#ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles", + "title": "ContinuousFiberCompositesFiles > ContinuousFiberCompositesFiles > ContinuousFiberCompositesFiles", + "section": "ContinuousFiberCompositesFiles > ContinuousFiberCompositesFiles", + "text": "class ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles(rst, composite, engineering_data, files_are_local=True)\n\nProvides the container for continuous fiber composite file paths.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nContinuousFiberCompositesFiles.files_are_local\n\n\n\nContinuousFiberCompositesFiles.rst\n\n\n\nContinuousFiberCompositesFiles.composite\n\n\n\nContinuousFiberCompositesFiles.engineering_data\n\n\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.hm", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.hm.html#hm", + "title": "hm", + "section": "hm", + "text": "hm" }, { - "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.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.constants.FailureOutput.MAX_LAYER_INDEX", @@ -5446,144 +5467,144 @@ "text": "FailureOutput.MAX_LAYER_INDEX = 2\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDefinitionFiles.html#compositedefinitionfiles", - "title": "CompositeDefinitionFiles", - "section": "CompositeDefinitionFiles", - "text": "Provides the container for composite definition file paths.\nCompositeDefinitionFiles.mapping\n\nCompositeDefinitionFiles.definition\n\nCompositeDefinitionFiles\nCompositeDefinitionFiles.mapping\nCompositeDefinitionFiles.definition" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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": "contribute", + "href": "contribute.html#contribute", + "title": "Contribute", + "section": "Contribute", + "text": "Contribute" }, { - "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": "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.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": "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.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": "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.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": "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.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": "contribute", + "href": "contribute.html#view-documentation", + "title": "Contribute > View documentation", + "section": "View documentation", + "text": "Documentation for the latest stable release of PyDPF - Composites is hosted at\nPyDPF - Composites Documentation.\nIn the upper right corner of the documentation’s title bar, there is an option\nfor switching from viewing the documentation for the latest stable release\nto viewing the documentation for the development version or previously\nreleased versions.\nView documentation" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.MaxStrainCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.name.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property MaxStrainCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.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.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.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.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.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.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.CoreFailureCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.CoreFailureCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "CoreFailureCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.data_sources.ContinuousFiberCompositesFiles.rst", + "href": "api/_autosummary/ansys.dpf.composites.data_sources.ContinuousFiberCompositesFiles.rst.html#rst", + "title": "rst", + "section": "rst", + "text": "rst" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.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.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.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.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.FailureModeEnum.wb", @@ -5600,179 +5621,144 @@ "text": "FailureModeEnum.wb = 321\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pma", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pma.html#wf_pma", - "title": "wf_pma", - "section": "wf_pma", - "text": "Weighting factor of the matrix failure (pma) mode.\nfloat\nwf_pma\nfloat" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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": "sg_execution_times", - "href": "sg_execution_times.html#computation-times", - "title": "Computation times", - "section": "Computation times", - "text": "01:20.085 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:11.642\n0.0\nsphx_glr_examples_gallery_examples_010_harmonic_example.py (../../examples/010_harmonic_example.py)\n00:10.117\n0.0\nsphx_glr_examples_gallery_examples_007_interlaminar_normal_stress_example.py (../../examples/007_interlaminar_normal_stress_example.py)\n00:07.347\n0.0\nsphx_glr_examples_gallery_examples_009_short_fiber_orientation_tensor.py (../../examples/009_short_fiber_orientation_tensor.py)\n00:05.877\n0.0\nsphx_glr_examples_gallery_examples_014_cyclic_symmetry_example.py (../../examples/014_cyclic_symmetry_example.py)\n00:05.728\n0.0\nsphx_glr_examples_gallery_examples_011_rst_workflow.py (../../examples/011_rst_workflow.py)\n00:05.110\n0.0\nsphx_glr_examples_gallery_examples_002_sampling_point_example.py (../../examples/002_sampling_point_example.py)\n00:04.837\n0.0\nsphx_glr_examples_gallery_examples_006_filter_composite_data_example.py (../../examples/006_filter_composite_data_example.py)\n00:04.682\n0.0\nsphx_glr_examples_gallery_examples_013_thermal_example.py (../../examples/013_thermal_example.py)\n00:04.427\n0.0\nsphx_glr_examples_gallery_examples_099_dpf_composite_failure_workflow.py (../../examples/099_dpf_composite_failure_workflow.py)\n00:04.414\n0.0\nsphx_glr_examples_gallery_examples_008_assembly_example.py (../../examples/008_assembly_example.py)\n00:04.157\n0.0\nsphx_glr_examples_gallery_examples_012_fatigue_example.py (../../examples/012_fatigue_example.py)\n00:03.564\n0.0\nsphx_glr_examples_gallery_examples_004_get_material_properties_example.py (../../examples/004_get_material_properties_example.py)\n00:03.523\n0.0\nsphx_glr_examples_gallery_examples_003_short_fiber_example.py (../../examples/003_short_fiber_example.py)\n00:03.262\n0.0\nsphx_glr_examples_gallery_examples_005_get_layup_properties_example.py (../../examples/005_get_layup_properties_example.py)\n00:01.399\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/009_short_fiber_orientation_tensor.py\n../../examples/014_cyclic_symmetry_example.py\n../../examples/011_rst_workflow.py\n../../examples/002_sampling_point_example.py\n../../examples/006_filter_composite_data_example.py\n../../examples/013_thermal_example.py\n../../examples/099_dpf_composite_failure_workflow.py\n../../examples/008_assembly_example.py\n../../examples/012_fatigue_example.py\n../../examples/004_get_material_properties_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.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.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.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.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.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.failure_criteria.FailureModeEnum.w", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.w.html#w", + "title": "w", + "section": "w", + "text": "w" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.get_element_info_provider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.get_element_info_provider.html#get_element_info_provider", - "title": "get_element_info_provider", - "section": "get_element_info_provider", - "text": "Get ElementInfoProvider Object.\nmesh (MeshedRegion)\nstream_provider_or_data_source (Operator | DataSources) – dpf stream provider or dpf data source\nmaterial_provider (Optional[Operator], default: None) – DPF operator that provides material information.\nno_bounds_checks (bool, default: False) – Disable bounds checks. Improves\nperformance but can result in cryptic error messages\nElementInfoProvider\nEither a data_source or a stream_provider is required\nget_element_info_provider\nElementInfoProvider\nMeshedRegion\nOperator\nDataSources\nOptional\nOperator\nNone\nbool\nFalse" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.layup_info.get_element_info_provider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.get_element_info_provider.html#ansys.dpf.composites.layup_info.get_element_info_provider", - "title": "get_element_info_provider > get_element_info_provider > get_element_info_provider", - "section": "get_element_info_provider > get_element_info_provider", - "text": "ansys.dpf.composites.layup_info.get_element_info_provider(mesh, stream_provider_or_data_source, material_provider=None, no_bounds_checks=False)\n\nGet ElementInfoProvider Object.\n\nParameters\n\nmesh (MeshedRegion)\n\nstream_provider_or_data_source (Operator | DataSources) – dpf stream provider or dpf data source\n\nmaterial_provider (Optional[Operator], default: None) – DPF operator that provides material information.\n\nno_bounds_checks (bool, default: False) – Disable bounds checks. Improves\nperformance but can result in cryptic error messages\n\nReturn type\n\nElementInfoProvider\n\nNotes\n\nEither a data_source or a stream_provider is required\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.layup_info.material_properties.MaterialProperty", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty", - "title": "MaterialProperty > MaterialProperty > MaterialProperty", - "section": "MaterialProperty > MaterialProperty", - "text": "class ansys.dpf.composites.layup_info.material_properties.MaterialProperty(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides the material properties that are available.\n\n!! processed by numpydoc !!\n\nAttributes\n\n\n\n\n\n\n\nMaterialProperty.Engineering_Constants_E1\n\n\n\nMaterialProperty.Engineering_Constants_E2\n\n\n\nMaterialProperty.Engineering_Constants_E3\n\n\n\nMaterialProperty.Engineering_Constants_E\n\n\n\nMaterialProperty.Engineering_Constants_G12\n\n\n\nMaterialProperty.Engineering_Constants_G23\n\n\n\nMaterialProperty.Engineering_Constants_G13\n\n\n\nMaterialProperty.Engineering_Constants_nu12\n\n\n\nMaterialProperty.Engineering_Constants_nu23\n\n\n\nMaterialProperty.Engineering_Constants_nu13\n\n\n\nMaterialProperty.Engineering_Constants_nu\n\n\n\nMaterialProperty.Strain_Limits_effective_strain\n\n\n\nMaterialProperty.Tensile_Yield_Strength_effective_stress\n\n\n\nMaterialProperty.Strain_Limits_eXt\n\n\n\nMaterialProperty.Strain_Limits_eYt\n\n\n\nMaterialProperty.Strain_Limits_eZt\n\n\n\nMaterialProperty.Strain_Limits_eXc\n\n\n\nMaterialProperty.Strain_Limits_eYc\n\n\n\nMaterialProperty.Strain_Limits_eZc\n\n\n\nMaterialProperty.Strain_Limits_eSxy\n\n\n\nMaterialProperty.Strain_Limits_eSyz\n\n\n\nMaterialProperty.Strain_Limits_eSxz\n\n\n\nMaterialProperty.Stress_Limits_Xt\n\n\n\nMaterialProperty.Stress_Limits_Yt\n\n\n\nMaterialProperty.Stress_Limits_Zt\n\n\n\nMaterialProperty.Stress_Limits_Xc\n\n\n\nMaterialProperty.Stress_Limits_Yc\n\n\n\nMaterialProperty.Stress_Limits_Zc\n\n\n\nMaterialProperty.Stress_Limits_Sxy\n\n\n\nMaterialProperty.Stress_Limits_Syz\n\n\n\nMaterialProperty.Stress_Limits_Sxz\n\n\n\nMaterialProperty.Thermal_Conductivity_K\n\n\n\nMaterialProperty.Thermal_Conductivity_K1\n\n\n\nMaterialProperty.Thermal_Conductivity_K2\n\n\n\nMaterialProperty.Thermal_Conductivity_K3\n\n\n\nMaterialProperty.Specific_Heat_cp\n\n\n\nMaterialProperty.Thermal_Expansion_Coefficients_a\n\n\n\nMaterialProperty.Thermal_Expansion_Coefficients_aX\n\n\n\nMaterialProperty.Thermal_Expansion_Coefficients_aY\n\n\n\nMaterialProperty.Thermal_Expansion_Coefficients_aZ\n\n\n\nMaterialProperty.Fabric_Fiber_Angle_phi\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R11\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R22\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R33\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R12\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R23\n\n\n\nMaterialProperty.Hill_Yield_Criterion_R13\n\n\n\nMaterialProperty.Tsai_Wu_Constant_xy\n\n\n\nMaterialProperty.Tsai_Wu_Constant_yz\n\n\n\nMaterialProperty.Tsai_Wu_Constant_xz\n\n\n\nMaterialProperty.Puck_Constants_p_21_pos\n\n\n\nMaterialProperty.Puck_Constants_p_21_neg\n\n\n\nMaterialProperty.Puck_Constants_p_22_pos\n\n\n\nMaterialProperty.Puck_Constants_p_22_neg\n\n\n\nMaterialProperty.Puck_Constants_s\n\n\n\nMaterialProperty.Puck_Constants_m\n\n\n\nMaterialProperty.Puck_Constants_interface_weakening_factor\n\n\n\nMaterialProperty.Larc_Constants_fracture_angle_under_compression\n\n\n\nMaterialProperty.Larc_Constants_fracture_toughness_ratio\n\n\n\nMaterialProperty.Larc_Constants_fracture_toughness_mode_1\n\n\n\nMaterialProperty.Larc_Constants_fracture_toughness_mode_2\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.layup_info.LayerProperty", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.html#layerproperty", - "title": "LayerProperty", - "section": "LayerProperty", - "text": "Provides the layer properties available.\nLayerProperty.THICKNESSES\n\nLayerProperty.ANGLES\n\nLayerProperty.SHEAR_ANGLES\n\nLayerProperty\nLayerProperty.THICKNESSES\nLayerProperty.ANGLES\nLayerProperty.SHEAR_ANGLES" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.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.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.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.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.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.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.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.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.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.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.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.failure_criteria.MaxStressCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.active.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property MaxStressCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e23.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e23", + "title": "e23 > e23 > e23", + "section": "e23 > e23", + "text": "FailureModeEnum.e23 = 160\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.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.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.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.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.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.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.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.sampling_point.SamplingPointFigure", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPointFigure.html#ansys.dpf.composites.sampling_point.SamplingPointFigure", + "title": "SamplingPointFigure > SamplingPointFigure > SamplingPointFigure", + "section": "SamplingPointFigure > SamplingPointFigure", + "text": "class ansys.dpf.composites.sampling_point.SamplingPointFigure(figure, axes)\n\nProvides the sampling point figure and axes.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nSamplingPointFigure.figure\n\n\n\nSamplingPointFigure.axes\n\n\n\n" }, { "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.lfc", @@ -5789,543 +5775,515 @@ "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.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.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.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": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.element_type", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.element_type.html#element_type", - "title": "element_type", - "section": "element_type", - "text": "element_type" - }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.element_type", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.element_type.html#ansys.dpf.composites.layup_info.ElementInfo.element_type", - "title": "element_type > element_type > element_type", - "section": "element_type > element_type", - "text": "ElementInfo.element_type: int\n\n" + "objectID": "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.FailureModeEnum.as", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.as.html#as", - "title": "as", - "section": "as", - "text": "as" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.TsaiHillCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.html#tsaihillcriterion", + "title": "TsaiHillCriterion", + "section": "TsaiHillCriterion", + "text": "Defines the Tsai-Hill failure criterion for orthotropic reinforced materials.\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\nTsaiHillCriterion.to_dict()\n\nTsaiHillCriterion.to_json()\n\nTsaiHillCriterion.active\nThe failure criterion is suppressed if active is False.\nTsaiHillCriterion.dim\nSpecifies which formulation of the failure criterion is used.\nTsaiHillCriterion.name\nName of the failure criterion.\nTsaiHillCriterion.wf\nWeighting factor of this failure criterion.\nTsaiHillCriterion\nfloat\n1.0\nint\n2\nTsaiHillCriterion.to_dict\nTsaiHillCriterion.to_json\nTsaiHillCriterion.active\nTsaiHillCriterion.dim\nTsaiHillCriterion.name\nTsaiHillCriterion.wf" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.failure_criteria.TsaiHillCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion", + "title": "TsaiHillCriterion > TsaiHillCriterion > TsaiHillCriterion", + "section": "TsaiHillCriterion > TsaiHillCriterion", + "text": "class ansys.dpf.composites.failure_criteria.TsaiHillCriterion(*, active=True, wf=1.0, dim=2)\n\nDefines the Tsai-Hill failure criterion for orthotropic reinforced materials.\n\nParameters\n\nwf (float, default: 1.0) – Weighting factor of this failure criterion.\n\ndim (int, default: 2) – Specifies which formulation of the failure criterion is used.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nTsaiHillCriterion.to_dict()\n\n\n\nTsaiHillCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nTsaiHillCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nTsaiHillCriterion.dim\n\nSpecifies which formulation of the failure criterion is used.\n\nTsaiHillCriterion.name\n\nName of the failure criterion.\n\nTsaiHillCriterion.wf\n\nWeighting factor of this failure criterion.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.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.CuntzeCriterion.cfc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cfc.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cfc", + "title": "cfc > cfc > cfc", + "section": "cfc > cfc", + "text": "property CuntzeCriterion.cfc: bool\n\nActivates the failure evaluation regarding compression in fiber direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.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.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.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.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.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.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.result_definition.FailureMeasureEnum.isalnum", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.isalnum.html#isalnum", - "title": "isalnum", - "section": "isalnum", - "text": "Return True if the string is an alpha-numeric string, False otherwise.\nA string is alpha-numeric if all characters in the string are alpha-numeric and\nthere is at least one character in the string.\nisalnum" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.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.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.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.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.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.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.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.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.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.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.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.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.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.TsaiHillCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.active.html#ansys.dpf.composites.failure_criteria.TsaiHillCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property TsaiHillCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmB", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmB.html#cmb", + "title": "cmB", + "section": "cmB", + "text": "cmB" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.layup_info.material_properties.MaterialProperty.Engineering_Constants_G12", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G12.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_G12", - "title": "Engineering_Constants_G12 > Engineering_Constants_G12 > Engineering_Constants_G12", - "section": "Engineering_Constants_G12 > Engineering_Constants_G12", - "text": "MaterialProperty.Engineering_Constants_G12: str = 'shear_modulus_xy'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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": "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.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": "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.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": "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.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": "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.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": "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.347 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.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.composite_model.CompositeModel.get_mesh", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_mesh.html#get_mesh", - "title": "get_mesh", - "section": "get_mesh", - "text": "Get the underlying DPF meshed region.\nThe meshed region contains the lay-up information.\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\nMeshedRegion\nget_mesh\nOptional\nstr\nNone\nContinuousFiberCompositesFiles.composite\nCompositeModel\nMeshedRegion" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_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.composite_model.CompositeModel.get_mesh", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_mesh.html#ansys.dpf.composites.composite_model.CompositeModel.get_mesh", - "title": "get_mesh > get_mesh > get_mesh", - "section": "get_mesh > get_mesh", - "text": "CompositeModel.get_mesh(composite_definition_label=None)\n\nGet the underlying DPF meshed region.\n\nThe meshed region contains the lay-up information.\n\nParameters\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nMeshedRegion\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.get_material_operators", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_operators.get_material_operators.html#ansys.dpf.composites.layup_info.material_operators.get_material_operators", + "title": "get_material_operators > get_material_operators > get_material_operators", + "section": "get_material_operators > get_material_operators", + "text": "ansys.dpf.composites.layup_info.material_operators.get_material_operators(rst_data_source, engineering_data_source, unit_system=None)\n\nGet material properties related to operators.\n\nParameters\n\nrst_data_source (DataSources) – Data source that contains a RST file. Note that multiple (distributed)\nRST files are not supported.\n\nengineering_data_source (DataSources) – Data source that contains the Engineering Data file.\n\nunit_system (Optional[Union[UnitSystem, Operator]], default: None) – Unit System\n\n----------\n\nReturn type\n\nMaterialOperators\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.failure_criteria.TsaiHillCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiHillCriterion.wf.html#wf", - "title": "wf", - "section": "wf", - "text": "Weighting factor of this failure criterion.\nfloat\nwf\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.html#failuremodeenum", + "title": "FailureModeEnum", + "section": "FailureModeEnum", + "text": "FailureModeEnum.emax\n\nFailureModeEnum.evm\n\nFailureModeEnum.e1\n\nFailureModeEnum.e1t\n\nFailureModeEnum.e1c\n\nFailureModeEnum.e2\n\nFailureModeEnum.e2t\n\nFailureModeEnum.e2c\n\nFailureModeEnum.e3\n\nFailureModeEnum.e3t\n\nFailureModeEnum.e3c\n\nFailureModeEnum.e12\n\nFailureModeEnum.e13\n\nFailureModeEnum.e23\n\nFailureModeEnum.smax\n\nFailureModeEnum.svm\n\nFailureModeEnum.s1\n\nFailureModeEnum.s1t\n\nFailureModeEnum.s1c\n\nFailureModeEnum.s2\n\nFailureModeEnum.s2t\n\nFailureModeEnum.s2c\n\nFailureModeEnum.s3\n\nFailureModeEnum.s3t\n\nFailureModeEnum.s3c\n\nFailureModeEnum.s12\n\nFailureModeEnum.s13\n\nFailureModeEnum.s23\n\nFailureModeEnum.cf\n\nFailureModeEnum.w\n\nFailureModeEnum.wb\n\nFailureModeEnum.wt\n\nFailureModeEnum.sc\n\nFailureModeEnum.tw\n\nFailureModeEnum.th\n\nFailureModeEnum.h\n\nFailureModeEnum.hf\n\nFailureModeEnum.hm\n\nFailureModeEnum.hd\n\nFailureModeEnum.ho\n\nFailureModeEnum.p\n\nFailureModeEnum.pf\n\nFailureModeEnum.pmA\n\nFailureModeEnum.pmB\n\nFailureModeEnum.pmC\n\nFailureModeEnum.pd\n\nFailureModeEnum.l\n\nFailureModeEnum.lft3\n\nFailureModeEnum.lfc4\n\nFailureModeEnum.lfc6\n\nFailureModeEnum.lmt1\n\nFailureModeEnum.lmc2\n\nFailureModeEnum.lmc5\n\nFailureModeEnum.c\n\nFailureModeEnum.cft\n\nFailureModeEnum.cfc\n\nFailureModeEnum.cmA\n\nFailureModeEnum.cmB\n\nFailureModeEnum.cmC\n\nFailureModeEnum.vMe\n\nFailureModeEnum.vMs\n\nFailureModeEnum.as\n\nFailureModeEnum.ap\n\nFailureModeEnum.af\n\nFailureModeEnum.ns\n\nFailureModeEnum.na\n\nFailureModeEnum\nFailureModeEnum.emax\nFailureModeEnum.evm\nFailureModeEnum.e1\nFailureModeEnum.e1t\nFailureModeEnum.e1c\nFailureModeEnum.e2\nFailureModeEnum.e2t\nFailureModeEnum.e2c\nFailureModeEnum.e3\nFailureModeEnum.e3t\nFailureModeEnum.e3c\nFailureModeEnum.e12\nFailureModeEnum.e13\nFailureModeEnum.e23\nFailureModeEnum.smax\nFailureModeEnum.svm\nFailureModeEnum.s1\nFailureModeEnum.s1t\nFailureModeEnum.s1c\nFailureModeEnum.s2\nFailureModeEnum.s2t\nFailureModeEnum.s2c\nFailureModeEnum.s3\nFailureModeEnum.s3t\nFailureModeEnum.s3c\nFailureModeEnum.s12\nFailureModeEnum.s13\nFailureModeEnum.s23\nFailureModeEnum.cf\nFailureModeEnum.w\nFailureModeEnum.wb\nFailureModeEnum.wt\nFailureModeEnum.sc\nFailureModeEnum.tw\nFailureModeEnum.th\nFailureModeEnum.h\nFailureModeEnum.hf\nFailureModeEnum.hm\nFailureModeEnum.hd\nFailureModeEnum.ho\nFailureModeEnum.p\nFailureModeEnum.pf\nFailureModeEnum.pmA\nFailureModeEnum.pmB\nFailureModeEnum.pmC\nFailureModeEnum.pd\nFailureModeEnum.l\nFailureModeEnum.lft3\nFailureModeEnum.lfc4\nFailureModeEnum.lfc6\nFailureModeEnum.lmt1\nFailureModeEnum.lmc2\nFailureModeEnum.lmc5\nFailureModeEnum.c\nFailureModeEnum.cft\nFailureModeEnum.cfc\nFailureModeEnum.cmA\nFailureModeEnum.cmB\nFailureModeEnum.cmC\nFailureModeEnum.vMe\nFailureModeEnum.vMs\nFailureModeEnum.as\nFailureModeEnum.ap\nFailureModeEnum.af\nFailureModeEnum.ns\nFailureModeEnum.na" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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", + "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.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.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.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.s2c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s2c.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.s2c", + "title": "s2c > s2c > s2c", + "section": "s2c > s2c", + "text": "FailureModeEnum.s2c = 222\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Stress_Limits_Xt", + "title": "Stress_Limits_Xt > Stress_Limits_Xt > Stress_Limits_Xt", + "section": "Stress_Limits_Xt > Stress_Limits_Xt", + "text": "MaterialProperty.Stress_Limits_Xt: str = 'stress_tensile_x_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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": "examples/gallery_examples/008_assembly_example", + "href": "examples/gallery_examples/008_assembly_example.html#postprocess-an-assembly", + "title": "Postprocess an assembly", + "section": "Postprocess an assembly", + "text": "This example shows how to postprocess an assembly with multiple composite parts.\nThe assembly consists of a shell and solid composite model. The\nComposite Model class is used to access\nthe data of the different parts.\nWhen using a Workbench project,\nuse the composite_files_from_workbench_harmonic_analysis()\nmethod to obtain the input files.\nPostprocess an assembly\nComposite Model\ncomposite_files_from_workbench_harmonic_analysis()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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": "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.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/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.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": "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.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": "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.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": "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": "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.148 seconds)\nDownload Jupyter notebook: 008_assembly_example.ipynb\nDownload Python source code: 008_assembly_example.py\nDownload zipped: 008_assembly_example.zip\nGallery generated by Sphinx-Gallery\nGet element information\nDownload Jupyter notebook: 008_assembly_example.ipynb\nDownload Python source code: 008_assembly_example.py\nDownload zipped: 008_assembly_example.zip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.failure_criteria.FailureModeEnum.h", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.h.html#h", + "title": "h", + "section": "h", + "text": "h" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.failure_criteria.FailureModeEnum.h", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.h.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.h", + "title": "h > h > h", + "section": "h > h", + "text": "FailureModeEnum.h = 501\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.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.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.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.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.failure_criteria.FailureModeEnum.ho", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ho.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.ho", + "title": "ho > ho > ho", + "section": "ho > ho", + "text": "FailureModeEnum.ho = 700\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.to_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.ShearCrimpingCriterion.kc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc.html#kc", + "title": "kc", + "section": "kc", + "text": "Weighting factor of the core material for evaluation of the maximum allowable load. The default is 1.\nfloat\nkc\n1\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.ShearCrimpingCriterion.kc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc", + "title": "kc > kc > kc", + "section": "kc > kc", + "text": "property ShearCrimpingCriterion.kc: float\n\nWeighting factor of the core material for evaluation of the maximum allowable load. The default is 1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.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.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.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.s3c", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s3c.html#s3c", + "title": "s3c", + "section": "s3c", + "text": "s3c" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.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.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.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.e13", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.e13.html#ansys.dpf.composites.sampling_point.SamplingPoint.e13", + "title": "e13 > e13 > e13", + "section": "e13 > e13", + "text": "property SamplingPoint.e13: ndarray[Any, dtype[float64]]\n\nOut-of-plane shear strains e13 of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.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.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.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.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.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.sampling_point.SamplingPoint.polar_properties_E1", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_E1.html#polar_properties_e1", + "title": "polar_properties_E1", + "section": "polar_properties_E1", + "text": "Polar property E1 of the laminate.\nndarray[Any, dtype[float64]]\npolar_properties_E1\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.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.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.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.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.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.TsaiWuCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.TsaiWuCriterion.name.html#ansys.dpf.composites.failure_criteria.TsaiWuCriterion.name", + "title": "name > name > name", + "section": "name > name", + "text": "property TsaiWuCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.PuckCriterion.wf_pma", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pma.html#wf_pma", + "title": "wf_pma", + "section": "wf_pma", + "text": "Weighting factor of the matrix failure (pma) mode.\nfloat\nwf_pma\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.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.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.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.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.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.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.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.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.PuckCriterion.p22_neg", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg.html#p22_neg", - "title": "p22_neg", - "section": "p22_neg", - "text": "Global inclination factor of the fracture plane \\perp \\perp for compression.\nfloat\np22_neg\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.PuckCriterion.p22_neg", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg.html#ansys.dpf.composites.failure_criteria.PuckCriterion.p22_neg", - "title": "p22_neg > p22_neg > p22_neg", - "section": "p22_neg > p22_neg", - "text": "property PuckCriterion.p22_neg: float\n\nGlobal inclination factor of the fracture plane \\perp \\perp for compression.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.result_definition.ResultDefinition.material_file", @@ -6342,2292 +6300,2334 @@ "text": "property ResultDefinition.material_file: str | PathLike[str]\n\nPath of the material files that store the material properties.\n\nSupported formats are XML and ENGD.\n\nReturn type\n\nUnion[str, PathLike[str]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.smax", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.smax.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.smax", + "title": "smax > smax > smax", + "section": "smax > smax", + "text": "FailureModeEnum.smax = 201\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.failure_criteria.CuntzeCriterion.b32", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32.html#b32", - "title": "b32", - "section": "b32", - "text": "Out-of-plane shear friction coefficient. The default is 1.3805. The value depends on the fracture plane angle.\nfloat\nb32\n1.3805\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.CuntzeCriterion.b32", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32", - "title": "b32 > b32 > b32", - "section": "b32 > b32", - "text": "property CuntzeCriterion.b32: float\n\nOut-of-plane shear friction coefficient. The default is 1.3805. The value depends on the fracture plane angle.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.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.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.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.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.CuntzeCriterion.wf_cmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmc.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_cmc", + "title": "wf_cmc > wf_cmc > wf_cmc", + "section": "wf_cmc > wf_cmc", + "text": "property CuntzeCriterion.wf_cmc: float\n\nWeighting factor of matrix failure due to compression or shear (cmc).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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_element_laminate_offset", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset.html#ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_element_laminate_offset", - "title": "get_element_laminate_offset > get_element_laminate_offset > get_element_laminate_offset", - "section": "get_element_laminate_offset > get_element_laminate_offset", - "text": "LayupPropertiesProvider.get_element_laminate_offset(element_id)\n\nGet laminate offset of element. Returns None if element is not layered.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[float64]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.ElementInfoProvider.get_element_info", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.get_element_info.html#ansys.dpf.composites.layup_info.ElementInfoProvider.get_element_info", + "title": "get_element_info > get_element_info > get_element_info", + "section": "get_element_info > get_element_info", + "text": "ElementInfoProvider.get_element_info(element_id)\n\nGet ElementInfo for a given element id.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturns\n\nReturns None if element type is not supported\n\nReturn type\n\nOptional[ElementInfo]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_factor", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_factor.html#safety_factor", - "title": "safety_factor", - "section": "safety_factor", - "text": "safety_factor" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.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.safety_factor", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.safety_factor.html#ansys.dpf.composites.sampling_point.FailureResult.safety_factor", - "title": "safety_factor > safety_factor > safety_factor", - "section": "safety_factor > safety_factor", - "text": "FailureResult.safety_factor: float\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.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.inverse_reserve_factor", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.inverse_reserve_factor.html#inverse_reserve_factor", - "title": "inverse_reserve_factor", - "section": "inverse_reserve_factor", - "text": "inverse_reserve_factor" + "objectID": "examples/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.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": "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.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": "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.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": "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.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": "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.394 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.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.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.HashinCriterion.wf_hf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hf.html#ansys.dpf.composites.failure_criteria.HashinCriterion.wf_hf", + "title": "wf_hf > wf_hf > wf_hf", + "section": "wf_hf > wf_hf", + "text": "property HashinCriterion.wf_hf: float\n\nWhether to activate the failure evaluation regarding fiber failure.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.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.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.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K1", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K1.html#thermal_conductivity_k1", - "title": "Thermal_Conductivity_K1", - "section": "Thermal_Conductivity_K1", - "text": "Thermal_Conductivity_K1" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.CoreFailureCriterion.name", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.name", - "title": "name > name > name", - "section": "name > name", - "text": "property CoreFailureCriterion.name: str\n\nName of the failure criterion. Read only.\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_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.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.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.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.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.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_21_pos.html#puck_constants_p_21_pos", - "title": "Puck_Constants_p_21_pos", - "section": "Puck_Constants_p_21_pos", - "text": "Puck_Constants_p_21_pos" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.split", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.split.html#split", + "title": "split", + "section": "split", + "text": "Return a list of the substrings in the string, using sep as the separator string.\nThe separator used to split the string.\nWhen set to None (the default value), will split on any whitespace\ncharacter (including n r t f and spaces) and will discard\nempty strings from the result.\nMaximum number of splits.\n-1 (the default value) means no limit.\nSplitting starts at the front of the string and works to the end.\nNote, str.split() is mainly useful for data that has been intentionally\ndelimited. With natural text that includes punctuation, consider using\nthe regular expression module.\nsplit" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.LayupModelContextType.NOT_AVAILABLE", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE.html#not_available", - "title": "NOT_AVAILABLE", - "section": "NOT_AVAILABLE", - "text": "NOT_AVAILABLE" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.layup_info.LayupModelContextType.NOT_AVAILABLE", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE.html#ansys.dpf.composites.layup_info.LayupModelContextType.NOT_AVAILABLE", - "title": "NOT_AVAILABLE > NOT_AVAILABLE > NOT_AVAILABLE", - "section": "NOT_AVAILABLE > NOT_AVAILABLE", - "text": "LayupModelContextType.NOT_AVAILABLE = 0\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.result_definition.FailureMeasureEnum.rpartition", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition.html#rpartition", - "title": "rpartition", - "section": "rpartition", - "text": "Partition the string into three parts using the given separator.\nThis will search for the separator in the string, starting at the end. If\nthe separator is found, returns a 3-tuple containing the part before the\nseparator, the separator itself, and the part after it.\nIf the separator is not found, returns a 3-tuple containing two empty strings\nand the original string.\nrpartition" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.result_definition.FailureMeasureEnum.rpartition", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rpartition", - "title": "rpartition > rpartition > rpartition", - "section": "rpartition > rpartition", - "text": "FailureMeasureEnum.rpartition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nThis will search for the separator in the string, starting at the end. If\nthe separator is found, returns a 3-tuple containing the part before the\nseparator, the separator itself, and the part after it.\n\nIf the separator is not found, returns a 3-tuple containing two empty strings\nand the original string.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion", + "title": "CombinedFailureCriterion > CombinedFailureCriterion > CombinedFailureCriterion", + "section": "CombinedFailureCriterion > CombinedFailureCriterion", + "text": "class ansys.dpf.composites.failure_criteria.CombinedFailureCriterion(name='CombinedFailureCriterion', failure_criteria=())\n\nDefines the combined failure criterion.\n\nThis class can be used in combination with the failure evaluator operator in\nDPF Composites.\n\nExamples\n\n>>> combined_failure = CombinedFailureCriterion(\"max_stress 3D\")\n>>> max_stress = MaxStressCriterion(s1=True, s2=True, s3=True, s12=True, s13=True, s23=True)\n>>> combined_failure.insert(max_stress)\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nCombinedFailureCriterion.insert(fc)\n\nAdd a failure criterion to a list of selected criteria.\n\nCombinedFailureCriterion.remove(key)\n\nRemove a failure criterion.\n\nCombinedFailureCriterion.to_dict()\n\nReturn the combined failure criterion as a dictionary.\n\nCombinedFailureCriterion.to_json()\n\nReturn the combined failure criterion as a JSON dictionary.\n\n\n\nAttributes\n\n\n\n\n\n\n\nCombinedFailureCriterion.JSON_DICT_KEY\n\n\n\nCombinedFailureCriterion.failure_criteria\n\nList of failure criteria.\n\nCombinedFailureCriterion.name\n\nName of the combined failure criterion.\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.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.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.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.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.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.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.layup_model_type", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.layup_model_type.html#ansys.dpf.composites.composite_model.CompositeModel.layup_model_type", - "title": "layup_model_type > layup_model_type > layup_model_type", - "section": "layup_model_type > layup_model_type", - "text": "property CompositeModel.layup_model_type: LayupModelContextType\n\nGet the context type of the lay-up model.\n\nThe type specifies whether the lay-up data was loaded from an ACP model, RST, or both.\nType can be one of the following values: NOT_AVAILABLE, ACP, RST, MIXED.\n\nReturn type\n\nLayupModelContextType\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.CuntzeCriterion.cmb", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmb.html#cmb", - "title": "cmb", - "section": "cmb", - "text": "Activates the failure evaluation of the matrix due to compression.\nbool\ncmb\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.result_definition.FailureMeasureEnum", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.html#failuremeasureenum", - "title": "FailureMeasureEnum", - "section": "FailureMeasureEnum", - "text": "Provides available failure measures.\nFailureMeasureEnum.encode(/[, encoding, errors])\nEncode the string using the codec registered for encoding.\nFailureMeasureEnum.replace(old, new, /[, count])\nReturn a copy with all occurrences of substring old replaced by new.\nFailureMeasureEnum.split(/[, sep, maxsplit])\nReturn a list of the substrings in the string, using sep as the separator string.\nFailureMeasureEnum.rsplit(/[, sep, maxsplit])\nReturn a list of the substrings in the string, using sep as the separator string.\nFailureMeasureEnum.join(iterable, /)\nConcatenate any number of strings.\nFailureMeasureEnum.capitalize(/)\nReturn a capitalized version of the string.\nFailureMeasureEnum.casefold(/)\nReturn a version of the string suitable for caseless comparisons.\nFailureMeasureEnum.title(/)\nReturn a version of the string where each word is titlecased.\nFailureMeasureEnum.center(width[, fillchar])\nReturn a centered string of length width.\nFailureMeasureEnum.count(sub[, start[, end]], /)\nReturn the number of non-overlapping occurrences of substring sub in string S[start:end].\nFailureMeasureEnum.expandtabs(/[, tabsize])\nReturn a copy where all tab characters are expanded using spaces.\nFailureMeasureEnum.find(sub[, start[, end]], /)\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.partition(sep, /)\nPartition the string into three parts using the given separator.\nFailureMeasureEnum.index(sub[, start[, end]], /)\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.ljust(width[, fillchar])\nReturn a left-justified string of length width.\nFailureMeasureEnum.lower(/)\nReturn a copy of the string converted to lowercase.\nFailureMeasureEnum.lstrip([chars])\nReturn a copy of the string with leading whitespace removed.\nFailureMeasureEnum.rfind(sub[, start[, end]], /)\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.rindex(sub[, start[, end]], /)\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\nFailureMeasureEnum.rjust(width[, fillchar])\nReturn a right-justified string of length width.\nFailureMeasureEnum.rstrip([chars])\nReturn a copy of the string with trailing whitespace removed.\nFailureMeasureEnum.rpartition(sep, /)\nPartition the string into three parts using the given separator.\nFailureMeasureEnum.splitlines(/[, keepends])\nReturn a list of the lines in the string, breaking at line boundaries.\nFailureMeasureEnum.strip([chars])\nReturn a copy of the string with leading and trailing whitespace removed.\nFailureMeasureEnum.swapcase(/)\nConvert uppercase characters to lowercase and lowercase characters to uppercase.\nFailureMeasureEnum.translate(table, /)\nReplace each character in the string using the given translation table.\nFailureMeasureEnum.upper(/)\nReturn a copy of the string converted to uppercase.\nFailureMeasureEnum.startswith(prefix[, ...)\nReturn True if the string starts with the specified prefix, False otherwise.\nFailureMeasureEnum.endswith(suffix[, start[, ...)\nReturn True if the string ends with the specified suffix, False otherwise.\nFailureMeasureEnum.removeprefix(prefix, /)\nReturn a str with the given prefix string removed if present.\nFailureMeasureEnum.removesuffix(suffix, /)\nReturn a str with the given suffix string removed if present.\nFailureMeasureEnum.isascii(/)\nReturn True if all characters in the string are ASCII, False otherwise.\nFailureMeasureEnum.islower(/)\nReturn True if the string is a lowercase string, False otherwise.\nFailureMeasureEnum.isupper(/)\nReturn True if the string is an uppercase string, False otherwise.\nFailureMeasureEnum.istitle(/)\nReturn True if the string is a title-cased string, False otherwise.\nFailureMeasureEnum.isspace(/)\nReturn True if the string is a whitespace string, False otherwise.\nFailureMeasureEnum.isdecimal(/)\nReturn True if the string is a decimal string, False otherwise.\nFailureMeasureEnum.isdigit(/)\nReturn True if the string is a digit string, False otherwise.\nFailureMeasureEnum.isnumeric(/)\nReturn True if the string is a numeric string, False otherwise.\nFailureMeasureEnum.isalpha(/)\nReturn True if the string is an alphabetic string, False otherwise.\nFailureMeasureEnum.isalnum(/)\nReturn True if the string is an alpha-numeric string, False otherwise.\nFailureMeasureEnum.isidentifier(/)\nReturn True if the string is a valid Python identifier, False otherwise.\nFailureMeasureEnum.isprintable(/)\nReturn True if the string is printable, False otherwise.\nFailureMeasureEnum.zfill(width, /)\nPad a numeric string with zeros on the left, to fill a field of the given width.\nFailureMeasureEnum.format(*args, **kwargs)\nReturn a formatted version of the string, using substitutions from args and kwargs.\nFailureMeasureEnum.format_map(mapping, /)\nReturn a formatted version of the string, using substitutions from mapping.\nFailureMeasureEnum.maketrans(x[, y, z])\nReturn a translation table usable for str.translate().\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\n\nFailureMeasureEnum.MARGIN_OF_SAFETY\n\nFailureMeasureEnum.RESERVE_FACTOR\n\nFailureMeasureEnum\nFailureMeasureEnum.encode\nFailureMeasureEnum.replace\nFailureMeasureEnum.split\nFailureMeasureEnum.rsplit\nFailureMeasureEnum.join\nFailureMeasureEnum.capitalize\nFailureMeasureEnum.casefold\nFailureMeasureEnum.title\nFailureMeasureEnum.center\nFailureMeasureEnum.count\nFailureMeasureEnum.expandtabs\nFailureMeasureEnum.find\nFailureMeasureEnum.partition\nFailureMeasureEnum.index\nFailureMeasureEnum.ljust\nFailureMeasureEnum.lower\nFailureMeasureEnum.lstrip\nFailureMeasureEnum.rfind\nFailureMeasureEnum.rindex\nFailureMeasureEnum.rjust\nFailureMeasureEnum.rstrip\nFailureMeasureEnum.rpartition\nFailureMeasureEnum.splitlines\nFailureMeasureEnum.strip\nFailureMeasureEnum.swapcase\nFailureMeasureEnum.translate\nFailureMeasureEnum.upper\nFailureMeasureEnum.startswith\nFailureMeasureEnum.endswith\nFailureMeasureEnum.removeprefix\nFailureMeasureEnum.removesuffix\nFailureMeasureEnum.isascii\nFailureMeasureEnum.islower\nFailureMeasureEnum.isupper\nFailureMeasureEnum.istitle\nFailureMeasureEnum.isspace\nFailureMeasureEnum.isdecimal\nFailureMeasureEnum.isdigit\nFailureMeasureEnum.isnumeric\nFailureMeasureEnum.isalpha\nFailureMeasureEnum.isalnum\nFailureMeasureEnum.isidentifier\nFailureMeasureEnum.isprintable\nFailureMeasureEnum.zfill\nFailureMeasureEnum.format\nFailureMeasureEnum.format_map\nFailureMeasureEnum.maketrans\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\nFailureMeasureEnum.MARGIN_OF_SAFETY\nFailureMeasureEnum.RESERVE_FACTOR" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.html#ansys.dpf.composites.result_definition.FailureMeasureEnum", - "title": "FailureMeasureEnum > FailureMeasureEnum > FailureMeasureEnum", - "section": "FailureMeasureEnum > FailureMeasureEnum", - "text": "class ansys.dpf.composites.result_definition.FailureMeasureEnum(value, names=, *values, module=None, qualname=None, type=None, start=1, boundary=None)\n\nProvides available failure measures.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nFailureMeasureEnum.encode(/[, encoding, errors])\n\nEncode the string using the codec registered for encoding.\n\nFailureMeasureEnum.replace(old, new, /[, count])\n\nReturn a copy with all occurrences of substring old replaced by new.\n\nFailureMeasureEnum.split(/[, sep, maxsplit])\n\nReturn a list of the substrings in the string, using sep as the separator string.\n\nFailureMeasureEnum.rsplit(/[, sep, maxsplit])\n\nReturn a list of the substrings in the string, using sep as the separator string.\n\nFailureMeasureEnum.join(iterable, /)\n\nConcatenate any number of strings.\n\nFailureMeasureEnum.capitalize(/)\n\nReturn a capitalized version of the string.\n\nFailureMeasureEnum.casefold(/)\n\nReturn a version of the string suitable for caseless comparisons.\n\nFailureMeasureEnum.title(/)\n\nReturn a version of the string where each word is titlecased.\n\nFailureMeasureEnum.center(width[, fillchar])\n\nReturn a centered string of length width.\n\nFailureMeasureEnum.count(sub[, start[, end]], /)\n\nReturn the number of non-overlapping occurrences of substring sub in string S[start:end].\n\nFailureMeasureEnum.expandtabs(/[, tabsize])\n\nReturn a copy where all tab characters are expanded using spaces.\n\nFailureMeasureEnum.find(sub[, start[, end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.partition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nFailureMeasureEnum.index(sub[, start[, end]], /)\n\nReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.ljust(width[, fillchar])\n\nReturn a left-justified string of length width.\n\nFailureMeasureEnum.lower(/)\n\nReturn a copy of the string converted to lowercase.\n\nFailureMeasureEnum.lstrip([chars])\n\nReturn a copy of the string with leading whitespace removed.\n\nFailureMeasureEnum.rfind(sub[, start[, end]], /)\n\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.rindex(sub[, start[, end]], /)\n\nReturn the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n\nFailureMeasureEnum.rjust(width[, fillchar])\n\nReturn a right-justified string of length width.\n\nFailureMeasureEnum.rstrip([chars])\n\nReturn a copy of the string with trailing whitespace removed.\n\nFailureMeasureEnum.rpartition(sep, /)\n\nPartition the string into three parts using the given separator.\n\nFailureMeasureEnum.splitlines(/[, keepends])\n\nReturn a list of the lines in the string, breaking at line boundaries.\n\nFailureMeasureEnum.strip([chars])\n\nReturn a copy of the string with leading and trailing whitespace removed.\n\nFailureMeasureEnum.swapcase(/)\n\nConvert uppercase characters to lowercase and lowercase characters to uppercase.\n\nFailureMeasureEnum.translate(table, /)\n\nReplace each character in the string using the given translation table.\n\nFailureMeasureEnum.upper(/)\n\nReturn a copy of the string converted to uppercase.\n\nFailureMeasureEnum.startswith(prefix[, ...)\n\nReturn True if the string starts with the specified prefix, False otherwise.\n\nFailureMeasureEnum.endswith(suffix[, start[, ...)\n\nReturn True if the string ends with the specified suffix, False otherwise.\n\nFailureMeasureEnum.removeprefix(prefix, /)\n\nReturn a str with the given prefix string removed if present.\n\nFailureMeasureEnum.removesuffix(suffix, /)\n\nReturn a str with the given suffix string removed if present.\n\nFailureMeasureEnum.isascii(/)\n\nReturn True if all characters in the string are ASCII, False otherwise.\n\nFailureMeasureEnum.islower(/)\n\nReturn True if the string is a lowercase string, False otherwise.\n\nFailureMeasureEnum.isupper(/)\n\nReturn True if the string is an uppercase string, False otherwise.\n\nFailureMeasureEnum.istitle(/)\n\nReturn True if the string is a title-cased string, False otherwise.\n\nFailureMeasureEnum.isspace(/)\n\nReturn True if the string is a whitespace string, False otherwise.\n\nFailureMeasureEnum.isdecimal(/)\n\nReturn True if the string is a decimal string, False otherwise.\n\nFailureMeasureEnum.isdigit(/)\n\nReturn True if the string is a digit string, False otherwise.\n\nFailureMeasureEnum.isnumeric(/)\n\nReturn True if the string is a numeric string, False otherwise.\n\nFailureMeasureEnum.isalpha(/)\n\nReturn True if the string is an alphabetic string, False otherwise.\n\nFailureMeasureEnum.isalnum(/)\n\nReturn True if the string is an alpha-numeric string, False otherwise.\n\nFailureMeasureEnum.isidentifier(/)\n\nReturn True if the string is a valid Python identifier, False otherwise.\n\nFailureMeasureEnum.isprintable(/)\n\nReturn True if the string is printable, False otherwise.\n\nFailureMeasureEnum.zfill(width, /)\n\nPad a numeric string with zeros on the left, to fill a field of the given width.\n\nFailureMeasureEnum.format(*args, **kwargs)\n\nReturn a formatted version of the string, using substitutions from args and kwargs.\n\nFailureMeasureEnum.format_map(mapping, /)\n\nReturn a formatted version of the string, using substitutions from mapping.\n\nFailureMeasureEnum.maketrans(x[, y, z])\n\nReturn a translation table usable for str.translate().\n\n\n\nAttributes\n\n\n\n\n\n\n\nFailureMeasureEnum.INVERSE_RESERVE_FACTOR\n\n\n\nFailureMeasureEnum.MARGIN_OF_SAFETY\n\n\n\nFailureMeasureEnum.RESERVE_FACTOR\n\n\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.e13.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.e13", + "title": "e13 > e13 > e13", + "section": "e13 > e13", + "text": "FailureModeEnum.e13 = 150\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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/data_sources", + "href": "api/data_sources.html#data-sources", + "title": "Data sources", + "section": "Data sources", + "text": "CompositeDefinitionFiles(definition[, mapping])\nProvides the container for composite definition file paths.\nContinuousFiberCompositesFiles(rst, ...[, ...])\nProvides the container for continuous fiber composite file paths.\nShortFiberCompositesFiles(rst, dsdat, ...[, ...])\nProvides the container for short fiber composite file paths.\nCompositeDataSources(rst, material_support, ...)\nProvides data sources related to the composite lay-up.\nget_composite_files_from_workbench_result_folder(...)\nGet a ContinuousFiberCompositesFiles object from a result folder.\ncomposite_files_from_workbench_harmonic_analysis(...)\nGet a ContinuousFiberCompositesFiles object for a harmonic analysis.\nget_composites_data_sources(...)\nCreate DPF data sources from a ContinuousFiberCompositeFiles object.\nData sources\nCompositeDefinitionFiles\nContinuousFiberCompositesFiles\nShortFiberCompositesFiles\nCompositeDataSources\nget_composite_files_from_workbench_result_folder\nContinuousFiberCompositesFiles\ncomposite_files_from_workbench_harmonic_analysis\nContinuousFiberCompositesFiles\nget_composites_data_sources\nContinuousFiberCompositeFiles" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.LayupPropertiesProvider.get_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.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.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.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.islower", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.islower.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.islower", - "title": "islower > islower > islower", - "section": "islower > islower", - "text": "FailureMeasureEnum.islower(/)\n\nReturn True if the string is a lowercase string, False otherwise.\n\nA string is lowercase if all cased characters in the string are lowercase and\nthere is at least one cased character in the string.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.s13.html#s13", + "title": "s13", + "section": "s13", + "text": "s13" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.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.replace", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.replace.html#replace", + "title": "replace", + "section": "replace", + "text": "Return a copy with all occurrences of substring old replaced by new.\nMaximum number of occurrences to replace.\n-1 (the default value) means replace all occurrences.\nIf the optional argument count is given, only the first count occurrences are\nreplaced.\nreplace" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.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.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.FailureMeasureEnum.lstrip", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.lstrip.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.lstrip", + "title": "lstrip > lstrip > lstrip", + "section": "lstrip > lstrip", + "text": "FailureMeasureEnum.lstrip(chars=None, /)\n\nReturn a copy of the string with leading whitespace removed.\n\nIf chars is given and not None, remove characters in chars instead.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.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.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.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_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.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_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.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.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.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.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.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.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.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.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/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.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.layup_info.LayerProperty", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.LayerProperty.html#layerproperty", + "title": "LayerProperty", + "section": "LayerProperty", + "text": "Provides the layer properties available.\nLayerProperty.THICKNESSES\n\nLayerProperty.ANGLES\n\nLayerProperty.SHEAR_ANGLES\n\nLayerProperty\nLayerProperty.THICKNESSES\nLayerProperty.ANGLES\nLayerProperty.SHEAR_ANGLES" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.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.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.failure_criteria.CuntzeCriterion.cft", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft.html#cft", - "title": "cft", - "section": "cft", - "text": "Activates the failure evaluation regarding tension in fiber direction.\nbool\ncft\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.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.cft", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cft", - "title": "cft > cft > cft", - "section": "cft > cft", - "text": "property CuntzeCriterion.cft: bool\n\nActivates the failure evaluation regarding tension in fiber direction.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.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.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.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.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.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.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.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg.html#puck_constants_p_22_neg", + "title": "Puck_Constants_p_22_neg", + "section": "Puck_Constants_p_22_neg", + "text": "Puck_Constants_p_22_neg" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg", + "title": "Puck_Constants_p_22_neg > Puck_Constants_p_22_neg > Puck_Constants_p_22_neg", + "section": "Puck_Constants_p_22_neg > Puck_Constants_p_22_neg", + "text": "MaterialProperty.Puck_Constants_p_22_neg: str = 'compressive_inclination_yz_puck_constants'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.CombinedFailureCriterion.failure_criteria", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.failure_criteria.html#failure_criteria", + "title": "failure_criteria", + "section": "failure_criteria", + "text": "List of failure criteria. Use insert and remove to edit the list.\ndict[str, FailureCriterionBase]\nfailure_criteria\ndict\nstr\nFailureCriterionBase" }, - { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.failure_criteria.MaxStrainCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_dict.html#to_dict", - "title": "to_dict", - "section": "to_dict", - "text": "dict[str, Any]\na dict with all properties.\nto_dict\ndict\nstr\nAny" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.failure_criteria.MaxStrainCriterion.to_dict", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.to_dict", - "title": "to_dict > to_dict > to_dict", - "section": "to_dict > to_dict", - "text": "MaxStrainCriterion.to_dict()\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\na dict with all properties.\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.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.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.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.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.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.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.pmA", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA.html#pma", - "title": "pmA", - "section": "pmA", - "text": "pmA" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.failure_criteria.FailureModeEnum.pmA", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.pmA", - "title": "pmA > pmA > pmA", - "section": "pmA > pmA", - "text": "FailureModeEnum.pmA = 802\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s1", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s1.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s1", + "title": "wf_s1 > wf_s1 > wf_s1", + "section": "wf_s1 > wf_s1", + "text": "property MaxStressCriterion.wf_s1: float\n\nWeighting factor of the failure mode s1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id.html#get_layer_index_by_element_id", - "title": "get_layer_index_by_element_id", - "section": "get_layer_index_by_element_id", - "text": "Get the layer index for the analysis ply in a given element.\nelement_id (int) – Element Id/Label\nOptional[int64]\nget_layer_index_by_element_id\nint\nOptional\nint64" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.AnalysisPlyInfoProvider.get_layer_index_by_element_id", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id.html#ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.get_layer_index_by_element_id", - "title": "get_layer_index_by_element_id > get_layer_index_by_element_id > get_layer_index_by_element_id", - "section": "get_layer_index_by_element_id > get_layer_index_by_element_id", - "text": "AnalysisPlyInfoProvider.get_layer_index_by_element_id(element_id)\n\nGet the layer index for the analysis ply in a given element.\n\nParameters\n\nelement_id (int) – Element Id/Label\n\nReturn type\n\nOptional[int64]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.Engineering_Constants_E1", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1.html#engineering_constants_e1", + "title": "Engineering_Constants_E1", + "section": "Engineering_Constants_E1", + "text": "Engineering_Constants_E1" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E1", + "title": "Engineering_Constants_E1 > Engineering_Constants_E1 > Engineering_Constants_E1", + "section": "Engineering_Constants_E1 > Engineering_Constants_E1", + "text": "MaterialProperty.Engineering_Constants_E1: str = 'young_modulus_x_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.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.constants.Spot.TOP", + "href": "api/_autosummary/ansys.dpf.composites.constants.Spot.TOP.html#top", + "title": "TOP", + "section": "TOP", + "text": "TOP" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.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.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.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.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.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.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.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.material_properties.MaterialProperty.Strain_Limits_eZt", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZt.html#strain_limits_ezt", + "title": "Strain_Limits_eZt", + "section": "Strain_Limits_eZt", + "text": "Strain_Limits_eZt" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.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.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.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.failure_criteria.MaxStressCriterion.wf_s2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s2.html#wf_s2", + "title": "wf_s2", + "section": "wf_s2", + "text": "Weighting factor of the failure mode s2.\nfloat\nwf_s2\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.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.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.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.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.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.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.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.Thermal_Conductivity_K1", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K1.html#thermal_conductivity_k1", + "title": "Thermal_Conductivity_K1", + "section": "Thermal_Conductivity_K1", + "text": "Thermal_Conductivity_K1" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.FailureModeEnum.cmA", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmA.html#cma", + "title": "cmA", + "section": "cmA", + "text": "cmA" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.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.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.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.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.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.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.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.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.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.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.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.ShortFiberCompositesFiles.dsdat", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.dsdat.html#dsdat", - "title": "dsdat", - "section": "dsdat", - "text": "dsdat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.HashinCriterion.hd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.hd.html#ansys.dpf.composites.failure_criteria.HashinCriterion.hd", - "title": "hd > hd > hd", - "section": "hd > hd", - "text": "property HashinCriterion.hd: bool\n\nWhether to activate the failure evaluation regarding delamination if dim is equal to 3.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.data_sources.ShortFiberCompositesFiles.files_are_local", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local.html#files_are_local", - "title": "files_are_local", - "section": "files_are_local", - "text": "files_are_local" + "objectID": "api/_autosummary/ansys.dpf.composites.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.data_sources.ShortFiberCompositesFiles.files_are_local", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local.html#ansys.dpf.composites.data_sources.ShortFiberCompositesFiles.files_are_local", - "title": "files_are_local > files_are_local > files_are_local", - "section": "files_are_local > files_are_local", - "text": "ShortFiberCompositesFiles.files_are_local: bool = True\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.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.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.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.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.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.composite_model.CompositeModel", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.html#compositemodel", - "title": "CompositeModel", - "section": "CompositeModel", - "text": "Provides access to the basic composite postprocessing functionality.\nOn initialization, the CompositeModel class automatically adds composite lay-up\ninformation to the meshed regions. It prepares the providers for different lay-up properties\nso that they can be efficiently evaluated. The composite_files provided are automatically\nuploaded to the server if needed.\nWhen creating a CompositeModel instance, several providers are created and\nlay-up information is added to the DPF meshed regions. Depending on the use\ncase, it can be more efficient to create the providers separately.\nThe handling of models with multiple composite definition files (assemblies)\ndiffer depending on the version of the DPF server. The handling is simplified\nwith DPF Server 7.0 (2024 R1) or later and the full assembly can be post-processed\nin the same way as a model with a single ACP model.\nBefore DPF Server 7.0 (2024 R1):\nFor assemblies with multiple composite definition files, separate meshes and\nlay-up operators are generated (wrapped by the CompositeInfo class). This\nis needed because the lay-up provider can only add the data of a single\ncomposite definitions file to a mesh. All functions that depend on composite\ndefinitions mut be called with the correct composite_definition_label\nparameter. The layered elements that get information from a given\ncomposite definition label can be determined by calling\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label().\nAll the elements that are not part of a composite definition are either homogeneous\nsolids or layered models defined outside of an ACP model. The\nCompositeModel.composite_definition_labels() command returns all available composite\ndefinition labels. For more information, see\nsphx_glr_examples_gallery_examples_008_assembly_example.py.\ncomposite_files (ContinuousFiberCompositesFiles) – Use the get_composite_files_from_workbench_result_folder() function to obtain\nthe ContinuousFiberCompositesFiles object.\nserver (BaseServer) – DPF Server on which the model is created\ndefault_unit_system (Optional[UnitSystem], default: None) – Unit system that is used if the result file\ndoes not specify the unit system. This happens\nfor pure MAPDL projects.\nCompositeModel.add_interlaminar_normal_stresses(...)\nAdd interlaminar normal stresses to the stresses fields container.\nCompositeModel.evaluate_failure_criteria(...)\nGet a fields container with the evaluated failure criteria.\nCompositeModel.get_all_layered_element_ids()\nGet all element IDs with lay-up data.\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label([...])\nGet all layered element IDs that belong to a composite definition label.\nCompositeModel.get_analysis_plies(element_id)\nGet analysis ply names.\nCompositeModel.get_constant_property_dict(...)\nGet a dictionary with constant properties.\nCompositeModel.get_element_info(element_id)\nGet element information for an element ID.\nCompositeModel.get_element_laminate_offset(...)\nGet the laminate offset of an element.\nCompositeModel.get_layup_operator([...])\nGet the lay-up operator.\nCompositeModel.get_mesh([...])\nGet the underlying DPF meshed region.\nCompositeModel.get_property_for_all_layers(...)\nGet a layer property for an element ID.\nCompositeModel.get_result_times_or_frequencies()\nGet the times or frequencies in the result file.\nCompositeModel.get_rst_streams_provider()\nGet the streams provider of the loaded result file.\nCompositeModel.get_sampling_point(...[, ...])\nGet a sampling point for an element ID and failure criteria.\nCompositeModel.composite_definition_labels\nAll composite definition labels in the model.\nCompositeModel.composite_files\nGet the composite file paths on the server.\nCompositeModel.core_model\nUnderlying DPF core model.\nCompositeModel.data_sources\nComposite data sources.\nCompositeModel.layup_model_type\nGet the context type of the lay-up model.\nCompositeModel.material_metadata\nDPF material ID to metadata map of the materials.\nCompositeModel.material_names\nMaterial name to DPF material ID map.\nCompositeModel.material_operators\nMaterial operators.\nCompositeModel\nCompositeModel\nCompositeModel\nCompositeInfo\ncomposite_definition_label\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label()\nCompositeModel.composite_definition_labels()\nContinuousFiberCompositesFiles\nget_composite_files_from_workbench_result_folder()\nContinuousFiberCompositesFiles\nBaseServer\nOptional\nUnitSystem\nNone\nCompositeModel.add_interlaminar_normal_stresses\nCompositeModel.evaluate_failure_criteria\nCompositeModel.get_all_layered_element_ids\nCompositeModel.get_all_layered_element_ids_for_composite_definition_label\nCompositeModel.get_analysis_plies\nCompositeModel.get_constant_property_dict\nCompositeModel.get_element_info\nCompositeModel.get_element_laminate_offset\nCompositeModel.get_layup_operator\nCompositeModel.get_mesh\nCompositeModel.get_property_for_all_layers\nCompositeModel.get_result_times_or_frequencies\nCompositeModel.get_rst_streams_provider\nCompositeModel.get_sampling_point\nCompositeModel.composite_definition_labels\nCompositeModel.composite_files\nCompositeModel.core_model\nCompositeModel.data_sources\nCompositeModel.layup_model_type\nCompositeModel.material_metadata\nCompositeModel.material_names\nCompositeModel.material_operators" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.result_definition.FailureMeasureEnum.istitle", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.istitle.html#istitle", - "title": "istitle", - "section": "istitle", - "text": "Return True if the string is a title-cased string, False otherwise.\nIn a title-cased string, upper- and title-case characters may only\nfollow uncased characters and lowercase characters only cased ones.\nistitle" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.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.MaxStrainCriterion.e23", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.e23.html#e23", + "title": "e23", + "section": "e23", + "text": "Whether to activate the failure evaluation regarding the interlaminar shear strain e23.\nbool\ne23\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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/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.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.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.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.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.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.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.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.MaxStressCriterion.active", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.active.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.active", + "title": "active > active > active", + "section": "active > active", + "text": "property MaxStressCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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": "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.FailureModeEnum.th", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.th.html#th", + "title": "th", + "section": "th", + "text": "th" }, { - "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.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": "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.constants.FailureOutput.FAILURE_VALUE", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE.html#failure_value", + "title": "FAILURE_VALUE", + "section": "FAILURE_VALUE", + "text": "FAILURE_VALUE" }, { - "objectID": "examples/gallery_examples/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.constants.FailureOutput.FAILURE_VALUE", + "href": "api/_autosummary/ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE.html#ansys.dpf.composites.constants.FailureOutput.FAILURE_VALUE", + "title": "FAILURE_VALUE > FAILURE_VALUE > FAILURE_VALUE", + "section": "FAILURE_VALUE > FAILURE_VALUE", + "text": "FailureOutput.FAILURE_VALUE = 1\n\n" }, { - "objectID": "examples/gallery_examples/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.399 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.CombinedFailureCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict.html#to_dict", + "title": "to_dict", + "section": "to_dict", + "text": "Return the combined failure criterion as a dictionary.\ndict[str, Any]\nJSON dictionary that can be used for the result definition\nof the DPF Composites Failure evaluator operator.\nto_dict\ndict\nstr\nAny" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.expression", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.expression.html#expression", - "title": "expression", - "section": "expression", - "text": "Type of the result. The supported type is \"composite_failure\".\nstr\nexpression\n\"composite_failure\"\nstr" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict.html#ansys.dpf.composites.failure_criteria.CombinedFailureCriterion.to_dict", + "title": "to_dict > to_dict > to_dict", + "section": "to_dict > to_dict", + "text": "CombinedFailureCriterion.to_dict()\n\nReturn the combined failure criterion as a dictionary.\n\nReturn type\n\ndict[str, Any]\n\nReturns\n\nJSON dictionary that can be used for the result definition\nof the DPF Composites Failure evaluator operator.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.expression", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinition.expression.html#ansys.dpf.composites.result_definition.ResultDefinition.expression", - "title": "expression > expression > expression", - "section": "expression > expression", - "text": "property ResultDefinition.expression: str\n\nType of the result. The supported type is \"composite_failure\".\n\nReturn type\n\nstr\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc.html#cmc", + "title": "cmc", + "section": "cmc", + "text": "Activates the failure evaluation of the matrix due to compression or shear.\nbool\ncmc\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.engineering_data", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.CompositeDataSources.engineering_data.html#engineering_data", - "title": "engineering_data", - "section": "engineering_data", - "text": "engineering_data" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.cmc", + "title": "cmc > cmc > cmc", + "section": "cmc > cmc", + "text": "property CuntzeCriterion.cmc: bool\n\nActivates the failure evaluation of the matrix due to compression or shear.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.data_sources.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.sampling_point.FailureResult.mode", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.mode.html#mode", + "title": "mode", + "section": "mode", + "text": "mode" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.sampling_point.FailureResult.mode", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.FailureResult.mode.html#ansys.dpf.composites.sampling_point.FailureResult.mode", + "title": "mode > mode > mode", + "section": "mode > mode", + "text": "FailureResult.mode: str\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff.html#ansys.dpf.composites.failure_criteria.FaceSheetWrinklingCriterion.homogeneous_core_coeff", - "title": "homogeneous_core_coeff > homogeneous_core_coeff > homogeneous_core_coeff", - "section": "homogeneous_core_coeff > homogeneous_core_coeff", - "text": "property FaceSheetWrinklingCriterion.homogeneous_core_coeff: float\n\nWrinkling coefficient (reduction factor) for homogeneous core materials.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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": "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.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.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.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.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.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.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.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.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.PuckCriterion.s", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.s.html#s", + "title": "s", + "section": "s", + "text": "Specifies the effect of fiber parallel stresses regarding inter-fiber failure. s = [0, 1) and the default is 0.5.\nfloat\ns\n0.5\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.PuckCriterion.s", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.s.html#ansys.dpf.composites.failure_criteria.PuckCriterion.s", + "title": "s > s > s", + "section": "s > s", + "text": "property PuckCriterion.s: float\n\nSpecifies the effect of fiber parallel stresses regarding inter-fiber failure. s = [0, 1) and the default is 0.5.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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": "examples/gallery_examples/001_failure_operator_example", + "href": "examples/gallery_examples/001_failure_operator_example.html#composite-failure-analysis", + "title": "Composite failure analysis", + "section": "Composite failure analysis", + "text": "This example shows how to analyze a composite structure by a combined failure criterion.\nThe failure operator of DPF Composites computes the minimum and maximum failure values\nand failure modes of a combined failure criterion. A combined failure criterion is a selection of\nfailure criteria such as Puck, Tsai-Wu, or face sheet wrinkling. For a list of all\nfailure criteria, see failure_criteria.\nThe Combined Failure Criterion class\nallows you to assess different type of materials and failure modes at once.\nThe scoping enables you to evaluate the minimum and maximum failures per element\nor select a list of materials or plies.\nWhen using a Workbench project,\nuse the get_composite_files_from_workbench_result_folder()\nmethod to obtain the input files.\nComposite failure analysis\nCombined Failure Criterion\nget_composite_files_from_workbench_result_folder()" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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/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.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": "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.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": "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 12.061 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.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.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.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.failure_criteria.MaxStrainCriterion.eYc", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eYc", + "title": "eYc > eYc > eYc", + "section": "eYc > eYc", + "text": "property MaxStrainCriterion.eYc: float\n\nGlobal compressive strain limit in material direction 1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.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.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.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.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.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.result_definition.FailureMeasureEnum.rstrip", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip.html#rstrip", + "title": "rstrip", + "section": "rstrip", + "text": "Return a copy of the string with trailing whitespace removed.\nIf chars is given and not None, remove characters in chars instead.\nrstrip" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfoProvider.html#ansys.dpf.composites.layup_info.ElementInfoProvider", - "title": "ElementInfoProvider > ElementInfoProvider > ElementInfoProvider", - "section": "ElementInfoProvider > ElementInfoProvider", - "text": "class ansys.dpf.composites.layup_info.ElementInfoProvider(mesh, layer_indices, element_types_apdl, element_types_dpf, keyopt_8_values, keyopt_3_values, material_ids, solver_material_ids=None, no_bounds_checks=False)\n\nProvider for ElementInfo.\n\nUse get_element_info_provider() to create ElementInfoProvider\nobjects.\n\nInitialize the class before a loop and\ncall get_element_info() for each element.\n\nNote that the ElementInfoProvider class is not fully supported for\ndistributed RST files. The get_element_info() method will raise an\nexception if the DPF server version does not support reading the required\ninformation.\n\nParameters\n\nmesh (MeshedRegion)\n\nlayer_indices (PropertyField)\n\nelement_types_apdl (PropertyField)\n\nelement_types_dpf (PropertyField)\n\nkeyopt_8_values (PropertyField)\n\nkeyopt_3_values (PropertyField)\n\nmaterial_ids (PropertyField)\n\nno_bounds_checks (bool, default: False) – Disable bounds checks.\nResults in better performance but potentially cryptic\nerror messages\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nElementInfoProvider.get_element_info(element_id)\n\nGet ElementInfo for a given element id.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.rstrip", + "title": "rstrip > rstrip > rstrip", + "section": "rstrip > rstrip", + "text": "FailureMeasureEnum.rstrip(chars=None, /)\n\nReturn a copy of the string with trailing whitespace removed.\n\nIf chars is given and not None, remove characters in chars instead.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.composite_model.CompositeModel.get_element_laminate_offset", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_laminate_offset.html#ansys.dpf.composites.composite_model.CompositeModel.get_element_laminate_offset", + "title": "get_element_laminate_offset > get_element_laminate_offset > get_element_laminate_offset", + "section": "get_element_laminate_offset > get_element_laminate_offset", + "text": "CompositeModel.get_element_laminate_offset(element_id, composite_definition_label=None)\n\nGet the laminate offset of an element.\n\nTHis method returns None if the element is not layered.\n\nParameters\n\nelement_id (int) – Element ID or label.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nOptional[float64]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.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.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.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.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.failure_criteria.PuckCriterion.cfps", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.cfps.html#ansys.dpf.composites.failure_criteria.PuckCriterion.cfps", - "title": "cfps > cfps > cfps", - "section": "cfps > cfps", - "text": "property PuckCriterion.cfps: bool\n\nWhether to consider inter-fiber strength reduction due to fiber parallel stresses.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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": "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.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": "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.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": "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_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": "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.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": "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.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": "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.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": "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.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": "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.636 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.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.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.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.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.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.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.na", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.na.html#na", - "title": "na", - "section": "na", - "text": "na" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.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": "index", - "href": "index.html#pydpf---composites", - "title": "PyDPF - Composites", - "section": "PyDPF - Composites", - "text": "PyDPF - Composites enables the post-processing of composite structures based on\nAnsys DPF and the DPF Composites plugin. It implements\nclasses on top of DPF Composites operators and data accessors for short\nfiber and layered composites (layered shell and solid elements). This module\ncan be used to postprocess fiber reinforced plastics and layered composites, and\nto implement custom failure criteria and computation.\nContains installation instructions and a simple\nexample to create a failure plot from a Workbench project.\nDemonstrates the use of PyDPF - Composites for various workflows.\nDescribes the public Python classes, methods, and functions.\nProvides developer installation and usage information.\nThe minimum set of inputs to run a postprocessing for composites is the result files of an\nMAPDL solution and a material file (MATML) which was generated by Engineering Data.\nLay-up files from ACP are optional and only required for some advanced operations. Refer to\nLimitations.\nPyDPF - Composites" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.wf_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": "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.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": "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.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.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.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.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.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.FailureModeEnum.svm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.svm.html#svm", - "title": "svm", - "section": "svm", - "text": "svm" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.name", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.name.html#name", + "title": "name", + "section": "name", + "text": "Name of the failure criterion. Read only.\nstr\nname\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.svm", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.svm.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.svm", - "title": "svm > svm > svm", - "section": "svm > svm", - "text": "FailureModeEnum.svm = 202\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.ShearCrimpingCriterion.kc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc.html#kc", - "title": "kc", - "section": "kc", - "text": "Weighting factor of the core material for evaluation of the maximum allowable load. The default is 1.\nfloat\nkc\n1\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ns", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.ns.html#ns", + "title": "ns", + "section": "ns", + "text": "ns" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc.html#ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.kc", - "title": "kc > kc > kc", - "section": "kc > kc", - "text": "property ShearCrimpingCriterion.kc: float\n\nWeighting factor of the core material for evaluation of the maximum allowable load. The default is 1.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.Puck_Constants_p_22_neg", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg.html#puck_constants_p_22_neg", - "title": "Puck_Constants_p_22_neg", - "section": "Puck_Constants_p_22_neg", - "text": "Puck_Constants_p_22_neg" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Puck_Constants_p_22_neg", - "title": "Puck_Constants_p_22_neg > Puck_Constants_p_22_neg > Puck_Constants_p_22_neg", - "section": "Puck_Constants_p_22_neg > Puck_Constants_p_22_neg", - "text": "MaterialProperty.Puck_Constants_p_22_neg: str = 'compressive_inclination_yz_puck_constants'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.VonMisesCriterion.eval_ins", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.VonMisesCriterion.eval_ins.html#eval_ins", + "title": "eval_ins", + "section": "eval_ins", + "text": "Whether to consider interlaminar normal stresses (s3) and compute them for layered shells.\nbool\neval_ins\nbool" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.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.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.HashinCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_json.html#to_json", + "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": "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" + "text": "Convert the dictionary representation of the result definition to a JSON dictionary.\nstr\nto_json\nstr" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_json", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.HashinCriterion.to_json.html#ansys.dpf.composites.failure_criteria.HashinCriterion.to_json", + "objectID": "api/_autosummary/ansys.dpf.composites.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": "HashinCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + "text": "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.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.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.composite_model.CompositeModel.data_sources", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.data_sources.html#ansys.dpf.composites.composite_model.CompositeModel.data_sources", - "title": "data_sources > data_sources > data_sources", - "section": "data_sources > data_sources", - "text": "property CompositeModel.data_sources: CompositeDataSources\n\nComposite data sources.\n\nReturn type\n\nCompositeDataSources\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.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.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.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.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.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.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.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.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.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.PuckCriterion.p22_pos", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p22_pos.html#p22_pos", - "title": "p22_pos", - "section": "p22_pos", - "text": "Global inclination factor of the fracture plane \\perp \\perp for tension.\nfloat\np22_pos\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s13", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s13.html#wf_s13", + "title": "wf_s13", + "section": "wf_s13", + "text": "Weighting factor of the failure mode s13.\nfloat\nwf_s13\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.composite_model.CompositeModel.evaluate_failure_criteria", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.evaluate_failure_criteria.html#ansys.dpf.composites.composite_model.CompositeModel.evaluate_failure_criteria", - "title": "evaluate_failure_criteria > evaluate_failure_criteria > evaluate_failure_criteria", - "section": "evaluate_failure_criteria > evaluate_failure_criteria", - "text": "CompositeModel.evaluate_failure_criteria(combined_criterion, composite_scope=None, measure=FailureMeasureEnum.INVERSE_RESERVE_FACTOR, write_data_for_full_element_scope=True, max_chunk_size=50000)\n\nGet a fields container with the evaluated failure criteria.\n\nThe fields container contains the maximum per element if the measure\nis FailureMeasureEnum.INVERSE_RESERVE_FACTOR and the minimum per element\nif the measure is FailureMeasureEnum.MARGIN_OF_SAFETY or\nFailureMeasureEnum.RESERVE_FACTOR.\n\nParameters\n\ncombined_criterion (CombinedFailureCriterion) – Combined failure criterion to evaluate.\n\ncomposite_scope (Optional[CompositeScope], default: None) – Composite scope on which to evaluate the failure criteria. If empty, the criteria\nis evaluated on the full model. If the time is not set, the last time or\nfrequency in the result file is used.\n\nmeasure (FailureMeasureEnum, default: ) – Failure measure to evaluate.\n\nwrite_data_for_full_element_scope (bool, default: True) – Whether each element in the element scope is to get a\n(potentially zero) failure value, even elements that are not\npart of composite_scope.plies. If no element scope is\nspecified (composite_scope.elements), a (potentially zero)\nfailure value is written for all elements.\n\nmax_chunk_size (int, default: 50000) – A higher value results in more memory consumption, but faster evaluation.For some special element types such as beams,\nwrite_data_for_full_element_scope=True is not supported.\n\nReturn type\n\nFieldsContainer\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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/composite_model", + "href": "api/composite_model.html#composite-model", + "title": "Composite model", + "section": "Composite model", + "text": "CompositeModel(composite_files, server[, ...])\nProvides access to the basic composite postprocessing functionality.\nComposite model\nCompositeModel" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.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.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.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.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.CuntzeCriterion.b32", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32.html#b32", + "title": "b32", + "section": "b32", + "text": "Out-of-plane shear friction coefficient. The default is 1.3805. The value depends on the fracture plane angle.\nfloat\nb32\n1.3805\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.failure_criteria.CuntzeCriterion.b32", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.b32", + "title": "b32 > b32 > b32", + "section": "b32 > b32", + "text": "property CuntzeCriterion.b32: float\n\nOut-of-plane shear friction coefficient. The default is 1.3805. The value depends on the fracture plane angle.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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_model.CompositeModel.get_rst_streams_provider", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_rst_streams_provider.html#get_rst_streams_provider", + "title": "get_rst_streams_provider", + "section": "get_rst_streams_provider", + "text": "Get the streams provider of the loaded result file.\nOperator\nget_rst_streams_provider\nOperator" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.composite_model.CompositeModel.get_rst_streams_provider", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_rst_streams_provider.html#ansys.dpf.composites.composite_model.CompositeModel.get_rst_streams_provider", + "title": "get_rst_streams_provider > get_rst_streams_provider > get_rst_streams_provider", + "section": "get_rst_streams_provider > get_rst_streams_provider", + "text": "CompositeModel.get_rst_streams_provider()\n\nGet the streams provider of the loaded result file.\n\nReturn type\n\nOperator\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.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.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.CoreFailureCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf.html#wf", + "title": "wf", + "section": "wf", + "text": "Weighting factor of the failure mode (cs).\nfloat\nwf\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.failure_criteria.CoreFailureCriterion.wf", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf.html#ansys.dpf.composites.failure_criteria.CoreFailureCriterion.wf", + "title": "wf > wf > wf", + "section": "wf > wf", + "text": "property CoreFailureCriterion.wf: float\n\nWeighting factor of the failure mode (cs).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.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.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.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.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.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.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.ShearCrimpingCriterion.wf", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.ShearCrimpingCriterion.wf.html#wf", - "title": "wf", - "section": "wf", - "text": "Weighting factor of the failure mode (wb or wt).\nfloat\nwf\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.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.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.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.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.FailureMeasureEnum.startswith", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith.html#startswith", + "title": "startswith", + "section": "startswith", + "text": "Return True if the string starts with the specified prefix, False otherwise.\nA string or a tuple of strings to try.\nOptional start position. Default: start of the string.\nOptional stop position. Default: end of the string.\nstartswith" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.result_definition.FailureMeasureEnum.startswith", + "href": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith.html#ansys.dpf.composites.result_definition.FailureMeasureEnum.startswith", + "title": "startswith > startswith > startswith", + "section": "startswith > startswith", + "text": "FailureMeasureEnum.startswith(prefix, [start, [end]], /)\n\nReturn True if the string starts with the specified prefix, False otherwise.\n\nprefix\n\nA string or a tuple of strings to try.\n\nstart\n\nOptional start position. Default: start of the string.\n\nend\n\nOptional stop position. Default: end of the string.\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.constants.Sym3x3TensorComponent.TENSOR11", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11.html#tensor11", + "title": "TENSOR11", + "section": "TENSOR11", + "text": "TENSOR11" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.constants.Sym3x3TensorComponent.TENSOR11", + "href": "api/_autosummary/ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11.html#ansys.dpf.composites.constants.Sym3x3TensorComponent.TENSOR11", + "title": "TENSOR11 > TENSOR11 > TENSOR11", + "section": "TENSOR11 > TENSOR11", + "text": "Sym3x3TensorComponent.TENSOR11 = 0\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.wf_lft", - "title": "wf_lft > wf_lft > wf_lft", - "section": "wf_lft > wf_lft", - "text": "property LaRCCriterion.wf_lft: float\n\nWeighting factor of fiber failure due to tension (lft).\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.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.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.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.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.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.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.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aZ", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aZ.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Expansion_Coefficients_aZ", - "title": "Thermal_Expansion_Coefficients_aZ > Thermal_Expansion_Coefficients_aZ > Thermal_Expansion_Coefficients_aZ", - "section": "Thermal_Expansion_Coefficients_aZ > Thermal_Expansion_Coefficients_aZ", - "text": "MaterialProperty.Thermal_Expansion_Coefficients_aZ: str = 'coefficient_thermal_expansion_z'\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.PuckCriterion.wf_pd", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.wf_pd.html#wf_pd", - "title": "wf_pd", - "section": "wf_pd", - "text": "Weighting factor of the delamination failure (pd) mode.\nfloat\nwf_pd\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_json", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.LaRCCriterion.to_json.html#ansys.dpf.composites.failure_criteria.LaRCCriterion.to_json", + "title": "to_json > to_json > to_json", + "section": "to_json > to_json", + "text": "LaRCCriterion.to_json()\n\nReturn type\n\nstr\n\nReturns\n\nthe string representation of the object as JSON.\n\nIt can be used for the result definition of the DPF Composites Failure Operator.\n\n!! processed by numpydoc !!" + }, + { + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K3", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Thermal_Conductivity_K3.html#thermal_conductivity_k3", + "title": "Thermal_Conductivity_K3", + "section": "Thermal_Conductivity_K3", + "text": "Thermal_Conductivity_K3" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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": "examples/gallery_examples/099_dpf_composite_failure_workflow", - "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#dpf-composite-failure-workflow", - "title": "DPF composite failure workflow", - "section": "DPF composite failure workflow", - "text": "This example shows how to use the native DPF Python interface to configure\nand run the composite failure evaluator. It connects the different DPF\noperators that are needed to evaluate composite failure criteria.\nFor simple use cases, using the composite failure operator or\ncomposite sampling point operator is preferable. For examples,\nsee sphx_glr_examples_gallery_examples_001_failure_operator_example.py\nand sphx_glr_examples_gallery_examples_002_sampling_point_example.py.\nAdditionally, sphx_glr_examples_gallery_examples_006_filter_composite_data_example.py\nshows how helper functions can be used to obtain composite result data.\nDPF composite failure workflow" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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/099_dpf_composite_failure_workflow", - "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#set-up-analysis", - "title": "DPF composite failure workflow > Set up analysis", - "section": "Set up analysis", - "text": "Setting up the analysis consists of loading Ansys libraries, configuring\nthe combined failure criterion, connecting to the DPF server, and\npreparing files.\nLoad Ansys libraries.\nConfigure the combined failure criterion.\nStart a DPF server and prepare files\nSet up analysis" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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": "examples/gallery_examples/099_dpf_composite_failure_workflow", - "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#initialize-dpf-model-and-data-sources", - "title": "DPF composite failure workflow > Initialize DPF model and data sources", - "section": "Initialize DPF model and data sources", - "text": "Initialize the DPF model and the data sources.\nInitialize DPF model and data sources" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos.html#p21_pos", + "title": "p21_pos", + "section": "p21_pos", + "text": "Global inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.\nfloat\np21_pos\nfloat" }, { - "objectID": "examples/gallery_examples/099_dpf_composite_failure_workflow", - "href": "examples/gallery_examples/099_dpf_composite_failure_workflow.html#set-up-providers", - "title": "DPF composite failure workflow > Set up providers", - "section": "Set up providers", - "text": "Set up the mesh provider.\nSet up the material support provider.\nThe material support provider takes care of mapping the materials in the RST file to\nthe materials in the composite definitions.\nThe material support contains all materials from the RST file.\nSet up the result information provider, which gets\nthe unit system from the RST file.\nSet up the material provider\nThe material provider combines the material support in the engineering data\nXML file and the unit system. Its output can be used to evaluate material\nproperties.\nSet up the lay-up provider, which reads the composite definition file\nand enriches the mesh with the composite lay-up information.\nSet up providers" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos.html#ansys.dpf.composites.failure_criteria.PuckCriterion.p21_pos", + "title": "p21_pos > p21_pos > p21_pos", + "section": "p21_pos > p21_pos", + "text": "property PuckCriterion.p21_pos: float\n\nGlobal inclination factor in the \\sigma_1 - \\tau_{12} plane at \\sigma_2 = 0 for tension.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/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.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": "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.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": "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.414 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.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": "contribute", - "href": "contribute.html#contribute", - "title": "Contribute", - "section": "Contribute", - "text": "Contribute" + "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": "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.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": "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.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": "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.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": "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.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": "contribute", - "href": "contribute.html#view-documentation", - "title": "Contribute > View documentation", - "section": "View documentation", - "text": "Documentation for the latest stable release of PyDPF - Composites is hosted at\nPyDPF - Composites Documentation.\nIn the upper right corner of the documentation’s title bar, there is an option\nfor switching from viewing the documentation for the latest stable release\nto viewing the documentation for the development version or previously\nreleased versions.\nView documentation" + "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.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.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.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.FailureModeEnum.cmA", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.cmA.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.cmA", - "title": "cmA > cmA > cmA", - "section": "cmA > cmA", - "text": "FailureModeEnum.cmA = 1003\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.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.data_sources.get_composites_data_sources", - "href": "api/_autosummary/ansys.dpf.composites.data_sources.get_composites_data_sources.html#ansys.dpf.composites.data_sources.get_composites_data_sources", - "title": "get_composites_data_sources > get_composites_data_sources > get_composites_data_sources", - "section": "get_composites_data_sources > get_composites_data_sources", - "text": "ansys.dpf.composites.data_sources.get_composites_data_sources(continuous_composite_files)\n\nCreate DPF data sources from a ContinuousFiberCompositeFiles object.\n\nParameters\n\ncontinuous_composite_files (ContinuousFiberCompositesFiles)\n\nReturn type\n\nCompositeDataSources\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e2", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.wf_e2.html#wf_e2", + "title": "wf_e2", + "section": "wf_e2", + "text": "Weighting factor of the failure mode e2.\nfloat\nwf_e2\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3.html#wf_s3", - "title": "wf_s3", - "section": "wf_s3", - "text": "Weighting factor of the failure mode s3.\nfloat\nwf_s3\nfloat" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.MaxStressCriterion.wf_s3", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion.wf_s3", - "title": "wf_s3 > wf_s3 > wf_s3", - "section": "wf_s3 > wf_s3", - "text": "property MaxStressCriterion.wf_s3: float\n\nWeighting factor of the failure mode s3.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.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.result_definition.ResultDefinitionScope.ply_scope", - "href": "api/_autosummary/ansys.dpf.composites.result_definition.ResultDefinitionScope.ply_scope.html#ply_scope", - "title": "ply_scope", - "section": "ply_scope", - "text": "ply_scope" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.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.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.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.layup_info.material_properties.MaterialProperty.Engineering_Constants_E", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Engineering_Constants_E.html#engineering_constants_e", + "title": "Engineering_Constants_E", + "section": "Engineering_Constants_E", + "text": "Engineering_Constants_E" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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/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.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.CuntzeCriterion.cma", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.cma.html#cma", - "title": "cma", - "section": "cma", - "text": "Activates the failure evaluation of the matrix due to tension.\nbool\ncma\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmB", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmB.html#ansys.dpf.composites.failure_criteria.FailureModeEnum.pmB", + "title": "pmB > pmB > pmB", + "section": "pmB > pmB", + "text": "FailureModeEnum.pmB = 803\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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_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.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.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.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.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.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.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.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.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.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.sampling_point.SamplingPoint", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.html#ansys.dpf.composites.sampling_point.SamplingPoint", - "title": "SamplingPoint > SamplingPoint > SamplingPoint", - "section": "SamplingPoint > SamplingPoint", - "text": "class ansys.dpf.composites.sampling_point.SamplingPoint(*args, **kwargs)\n\nImplements the Sampling Point object that wraps the DPF sampling point operator.\n\nUse CompositeModel.get_sampling_point() to get a sampling point object.\nThis class provides for plotting the lay-up and results at a certain point of the\nlayered structure. The results, including analysis_plies, e1, s12, and\nfailure_modes, are always from the bottom to the top of the laminate (along\nthe element normal direction). Postprocessing results such as e1 are returned\nas flat arrays where self.spots_per_ply can be used to compute the index for\na certain ply.\n\nNotes\n\nThe results of layered elements are stored per integration point. A layered shell element\nhas a number of in-plane integration points (depending on the integration scheme) and\ntypically three integration points through the thickness. The through-the-thickness\nintegration points are called spots. They are typically at the BOTTOM, MIDDLE,\nand TOP of the layer. This notation is used here to identify the corresponding data.\n\nThe SamplingPoint class returns three results per layer (one for each spot) because\nthe results of the in-plane integration points are interpolated to the centroid of the element.\nThe following table shows an example of a laminate with three layers. So a result, such as\ns1 has nine values, three for each ply.\n\n\n\n\n\n\n\nLayer\n\nIndex\n\nSpot\n\nLayer 3\n\n8\n\n7\n\n6\n\nTOP of Layer 3\n\nMIDDLE of Layer 3\n\nBOTTOM of Layer 3\n\nLayer 2\n\n5\n\n4\n\n3\n\nTOP of Layer 2\n\nMIDDLE of Layer 2\n\nBOTTOM of Layer 2\n\nLayer 1\n\n2\n\n1\n\n0\n\nTOP of Layer 1\n\nMIDDLE of Layer 1\n\nBOTTOM of Layer 1\n\nThe get_indices and get_offsets_by_spots methods simplify the indexing and\nfiltering of the data.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nSamplingPoint.add_ply_sequence_to_plot(axes)\n\nAdd the stacking (ply and text) to an axis or plot.\n\nSamplingPoint.add_results_to_plot(axes, ...)\n\nAdd results (strain, stress, or failure values) to an Axes object.\n\nSamplingPoint.get_indices([spots])\n\nGet the indices of the selected spots (interfaces) for each ply.\n\nSamplingPoint.get_offsets_by_spots([spots, ...])\n\nAccess the y coordinates of the selected spots (interfaces) for each ply.\n\nSamplingPoint.get_ply_wise_critical_failures()\n\nGet the critical failure value and modes per ply.\n\nSamplingPoint.get_polar_plot([components])\n\nCreate a standard polar plot to visualize the polar properties of the laminate.\n\nSamplingPoint.get_result_plots([...])\n\nGenerate a figure with a grid of axes (plot) for each selected result entity.\n\n\n\nAttributes\n\n\n\n\n\n\n\nSamplingPoint.analysis_plies\n\nList of analysis plies from the bottom to the top.\n\nSamplingPoint.e1\n\nStrains in the material 1 direction of each ply.\n\nSamplingPoint.e12\n\nIn-plane shear strains e12 of each ply.\n\nSamplingPoint.e13\n\nOut-of-plane shear strains e13 of each ply.\n\nSamplingPoint.e2\n\nStrains in the material 2 direction of each ply.\n\nSamplingPoint.e23\n\nOut-of-plane shear strains e23 of each ply.\n\nSamplingPoint.e3\n\nStrains in the material 3 direction of each ply.\n\nSamplingPoint.element_id\n\nElement label for sampling the laminate.\n\nSamplingPoint.failure_modes\n\nCritical failure mode of each ply.\n\nSamplingPoint.inverse_reserve_factor\n\nCritical inverse reserve factor of each ply.\n\nSamplingPoint.is_uptodate\n\nTrue if the Sampling Point is up-to-date.\n\nSamplingPoint.margin_of_safety\n\nLowest margin of safety of each ply.\n\nSamplingPoint.name\n\nName of the object.\n\nSamplingPoint.number_of_plies\n\nNumber of plies.\n\nSamplingPoint.offsets\n\nZ coordinates for each interface and ply.\n\nSamplingPoint.polar_properties_E1\n\nPolar property E1 of the laminate.\n\nSamplingPoint.polar_properties_E2\n\nPolar property E2 of the laminate.\n\nSamplingPoint.polar_properties_G12\n\nPolar property G12 of the laminate.\n\nSamplingPoint.reserve_factor\n\nLowest reserve factor of each ply.\n\nSamplingPoint.results\n\nResults of the sampling point results as a JSON dictionary.\n\nSamplingPoint.s1\n\nStresses in the material 1 direction of each ply.\n\nSamplingPoint.s12\n\nIn-plane shear stresses s12 of each ply.\n\nSamplingPoint.s13\n\nOut-of-plane shear stresses s13 of each ply.\n\nSamplingPoint.s2\n\nStresses in the material 2 direction of each ply.\n\nSamplingPoint.s23\n\nOut-of-plane shear stresses s23 of each ply.\n\nSamplingPoint.s3\n\nStresses in the material 3 direction of each ply.\n\nSamplingPoint.spots_per_ply\n\nNumber of through-the-thickness integration points per ply.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.composite_model.CompositeModel.get_element_info", - "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.get_element_info.html#ansys.dpf.composites.composite_model.CompositeModel.get_element_info", - "title": "get_element_info > get_element_info > get_element_info", - "section": "get_element_info > get_element_info", - "text": "CompositeModel.get_element_info(element_id, composite_definition_label=None)\n\nGet element information for an element ID.\n\nThis method returns None if the element type is not supported.\n\nParameters\n\nelement_id (int) – Element ID or label.\n\ncomposite_definition_label (Optional[str], default: None) – Label of the composite definition, which is the\ndictionary key in the ContinuousFiberCompositesFiles.composite\nattribute. This parameter is only required for assemblies.\nSee the note about assemblies in the description for the CompositeModel class.\n\nReturn type\n\nOptional[ElementInfo]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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": "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.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": "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.sampling_point.SamplingPoint.inverse_reserve_factor", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor.html#inverse_reserve_factor", + "title": "inverse_reserve_factor", + "section": "inverse_reserve_factor", + "text": "Critical inverse reserve factor of each ply.\nndarray[Any, dtype[float64]]\ninverse_reserve_factor\nndarray\nAny\ndtype\nfloat64" }, { - "objectID": "examples/gallery_examples/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.sampling_point.SamplingPoint.inverse_reserve_factor", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor.html#ansys.dpf.composites.sampling_point.SamplingPoint.inverse_reserve_factor", + "title": "inverse_reserve_factor > inverse_reserve_factor > inverse_reserve_factor", + "section": "inverse_reserve_factor > inverse_reserve_factor", + "text": "property SamplingPoint.inverse_reserve_factor: ndarray[Any, dtype[float64]]\n\nCritical inverse reserve factor of each ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "examples/gallery_examples/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.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": "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.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": "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.FailureModeEnum.pmC", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.FailureModeEnum.pmC.html#pmc", + "title": "pmC", + "section": "pmC", + "text": "pmC" }, { - "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.564 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.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.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.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc.html#strain_limits_ezc", + "title": "Strain_Limits_eZc", + "section": "Strain_Limits_eZc", + "text": "Strain_Limits_eZc" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStressCriterion.html#ansys.dpf.composites.failure_criteria.MaxStressCriterion", - "title": "MaxStressCriterion > MaxStressCriterion > MaxStressCriterion", - "section": "MaxStressCriterion > MaxStressCriterion", - "text": "class ansys.dpf.composites.failure_criteria.MaxStressCriterion(*, s1=True, s2=True, s3=False, s12=True, s13=False, s23=False, wf_s1=1.0, wf_s2=1.0, wf_s3=1.0, wf_s12=1.0, wf_s13=1.0, wf_s23=1.0)\n\nDefines the maximum stress failure criterion for orthotropic reinforced materials.\n\nParameters\n\ns1 (bool, default: True) – Whether to activate the failure evaluation regarding the stress in the material 1 direction.\n\ns2 (bool, default: True) – Whether to activate the failure evaluation regarding the stress in the material 2 direction.\n\ns3 (bool, default: False) – Whether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\n\ns12 (bool, default: True) – Whether to activate the failure evaluation regarding the in-plane shear stress s12.\n\ns13 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear stress s13.\n\ns23 (bool, default: False) – Whether to activate the failure evaluation regarding the interlaminar shear stress s23.\n\nwf_s1 (float, default: 1.0) – Weighting factor of the failure mode s1.\n\nwf_s2 (float, default: 1.0) – Weighting factor of the failure mode s2.\n\nwf_s3 (float, default: 1.0) – Weighting factor of the failure mode s3.\n\nwf_s12 (float, default: 1.0) – Weighting factor of the failure mode s12.\n\nwf_s13 (float, default: 1.0) – Weighting factor of the failure mode s13.\n\nwf_s23 (float, default: 1.0) – Weighting factor of the failure mode s23.\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nMaxStressCriterion.to_dict()\n\n\n\nMaxStressCriterion.to_json()\n\n\n\n\n\nAttributes\n\n\n\n\n\n\n\nMaxStressCriterion.active\n\nThe failure criterion is suppressed if active is False.\n\nMaxStressCriterion.name\n\nName of the failure criterion.\n\nMaxStressCriterion.s1\n\nWhether to activate the failure evaluation regarding the stress in the material 1 direction.\n\nMaxStressCriterion.s12\n\nWhether to activate the failure evaluation regarding the in-plane shear stress s12.\n\nMaxStressCriterion.s13\n\nWhether to activate the failure evaluation regarding the interlaminar shear stress s13.\n\nMaxStressCriterion.s2\n\nWhether to activate the failure evaluation regarding the stress in the material 2 direction.\n\nMaxStressCriterion.s23\n\nWhether to activate the failure evaluation regarding the interlaminar shear stress s23.\n\nMaxStressCriterion.s3\n\nWhether to activate the failure evaluation regarding the stress in the material 3 direction (out-of-plane).\n\nMaxStressCriterion.wf_s1\n\nWeighting factor of the failure mode s1.\n\nMaxStressCriterion.wf_s12\n\nWeighting factor of the failure mode s12.\n\nMaxStressCriterion.wf_s13\n\nWeighting factor of the failure mode s13.\n\nMaxStressCriterion.wf_s2\n\nWeighting factor of the failure mode s2.\n\nMaxStressCriterion.wf_s23\n\nWeighting factor of the failure mode s23.\n\nMaxStressCriterion.wf_s3\n\nWeighting factor of the failure mode s3.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc", + "href": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc.html#ansys.dpf.composites.layup_info.material_properties.MaterialProperty.Strain_Limits_eZc", + "title": "Strain_Limits_eZc > Strain_Limits_eZc > Strain_Limits_eZc", + "section": "Strain_Limits_eZc > Strain_Limits_eZc", + "text": "MaterialProperty.Strain_Limits_eZc: str = 'strain_compressive_z_direction'\n\n" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.FailureMeasureEnum.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.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.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.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.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.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.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.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.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.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.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.sampling_point.SamplingPoint.offsets", + "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.offsets.html#ansys.dpf.composites.sampling_point.SamplingPoint.offsets", + "title": "offsets > offsets > offsets", + "section": "offsets > offsets", + "text": "property SamplingPoint.offsets: ndarray[Any, dtype[float64]]\n\nZ coordinates for each interface and ply.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.id", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.ElementInfo.id.html#id", - "title": "id", - "section": "id", - "text": "id" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz.html#esxz", + "title": "eSxz", + "section": "eSxz", + "text": "Global strain limit in material direction 13.\nfloat\neSxz\nfloat" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.MaxStrainCriterion.eSxz", + "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz.html#ansys.dpf.composites.failure_criteria.MaxStrainCriterion.eSxz", + "title": "eSxz > eSxz > eSxz", + "section": "eSxz > eSxz", + "text": "property MaxStrainCriterion.eSxz: float\n\nGlobal strain limit in material direction 13.\n\nReturn type\n\nfloat\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.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.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.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.composite_model.CompositeModel.material_metadata", + "href": "api/_autosummary/ansys.dpf.composites.composite_model.CompositeModel.material_metadata.html#ansys.dpf.composites.composite_model.CompositeModel.material_metadata", + "title": "material_metadata > material_metadata > material_metadata", + "section": "material_metadata > material_metadata", + "text": "property CompositeModel.material_metadata: dict[int, MaterialMetadata]\n\nDPF material ID to metadata map of the materials.\n\nThis data can be used to filter analysis plies\nor element layers by ply type, material name etc.\n\nNote: ply type is only available in DPF server version 9.0 (2025 R1 pre0) and later.\n\nReturn type\n\ndict[int, MaterialMetadata]\n\n!! processed by numpydoc !!" }, { - "objectID": "api/_autosummary/ansys.dpf.composites.sampling_point.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.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.sampling_point.SamplingPoint.polar_properties_G12", - "href": "api/_autosummary/ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12.html#ansys.dpf.composites.sampling_point.SamplingPoint.polar_properties_G12", - "title": "polar_properties_G12 > polar_properties_G12 > polar_properties_G12", - "section": "polar_properties_G12 > polar_properties_G12", - "text": "property SamplingPoint.polar_properties_G12: ndarray[Any, dtype[float64]]\n\nPolar property G12 of the laminate.\n\nReturn type\n\nndarray[Any, dtype[float64]]\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.result_definition.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.layup_info.AnalysisPlyInfoProvider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.html#analysisplyinfoprovider", - "title": "AnalysisPlyInfoProvider", - "section": "AnalysisPlyInfoProvider", - "text": "AnalysisPlyInfoProvider. Can be used to compute the layer indices of a given analysis ply.\nmesh (MeshedRegion) – DPF MeshedRegion with lay-up information.\nname (str) – Analysis Ply Name\nAnalysisPlyInfoProvider.get_layer_index_by_element_id(...)\nGet the layer index for the analysis ply in a given element.\nAnalysisPlyInfoProvider.ply_element_ids()\nReturn list of element labels of the analysis ply.\nAnalysisPlyInfoProvider\nMeshedRegion\nstr\nAnalysisPlyInfoProvider.get_layer_index_by_element_id\nAnalysisPlyInfoProvider.ply_element_ids" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.AnalysisPlyInfoProvider", - "href": "api/_autosummary/ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider.html#ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider", - "title": "AnalysisPlyInfoProvider > AnalysisPlyInfoProvider > AnalysisPlyInfoProvider", - "section": "AnalysisPlyInfoProvider > AnalysisPlyInfoProvider", - "text": "class ansys.dpf.composites.layup_info.AnalysisPlyInfoProvider(mesh, name)\n\nAnalysisPlyInfoProvider. Can be used to compute the layer indices of a given analysis ply.\n\nParameters\n\nmesh (MeshedRegion) – DPF MeshedRegion with lay-up information.\n\nname (str) – Analysis Ply Name\n\n!! processed by numpydoc !!\n\nMethods\n\n\n\n\n\n\n\nAnalysisPlyInfoProvider.get_layer_index_by_element_id(...)\n\nGet the layer index for the analysis ply in a given element.\n\nAnalysisPlyInfoProvider.ply_element_ids()\n\nReturn list of element labels of the analysis ply.\n\n" + "objectID": "api/_autosummary/ansys.dpf.composites.layup_info.material_properties.MaterialProperty.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.CuntzeCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.active.html#active", - "title": "active", - "section": "active", - "text": "The failure criterion is suppressed if active is False.\nbool\nactive\nbool" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.CuntzeCriterion.active", - "href": "api/_autosummary/ansys.dpf.composites.failure_criteria.CuntzeCriterion.active.html#ansys.dpf.composites.failure_criteria.CuntzeCriterion.active", - "title": "active > active > active", - "section": "active > active", - "text": "property CuntzeCriterion.active: bool\n\nThe failure criterion is suppressed if active is False.\n\nReturn type\n\nbool\n\n!! processed by numpydoc !!" + "objectID": "api/_autosummary/ansys.dpf.composites.failure_criteria.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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 !!" } ] \ 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 a4a6b8400b..70a2bab183 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 11.642 seconds)

+

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

-Stresses, Failures

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

+Stresses, Failures

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