From 10e2e6e957d2db70edb14758b712fd6a14cd1423 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Fri, 21 May 2021 16:20:10 +0200 Subject: [PATCH 01/29] [#75] added tex of comp, notebook, beginning of code modif --- .gitignore | 1 + .../Solid_Angle_Sphere_Approx.ipynb | 0 Notes_Upgrades/SA_tetra/SA_tetra.pdf | Bin 0 -> 115038 bytes Notes_Upgrades/SA_tetra/SA_tetra.synctex.gz | Bin 0 -> 21944 bytes Notes_Upgrades/SA_tetra/SA_tetra.tex | 168 ++++++++ Notes_Upgrades/SA_tetra/drawing.svg | 153 +++++++ Notes_Upgrades/SA_tetra/tetra.png | Bin 0 -> 29805 bytes Notes_Upgrades/SA_tetra/tetra.svg | 150 +++++++ tofu/geom/_GG.pyx | 398 ++++++++++++++++++ tofu/geom/_vignetting_tools.pxd | 4 + tofu/geom/_vignetting_tools.pyx | 29 +- tofu/geom/openmp_enabled.py | 2 +- 12 files changed, 903 insertions(+), 2 deletions(-) rename {Notes_Upgrades/SolidAngle => Notebooks}/Solid_Angle_Sphere_Approx.ipynb (100%) create mode 100644 Notes_Upgrades/SA_tetra/SA_tetra.pdf create mode 100644 Notes_Upgrades/SA_tetra/SA_tetra.synctex.gz create mode 100644 Notes_Upgrades/SA_tetra/SA_tetra.tex create mode 100644 Notes_Upgrades/SA_tetra/drawing.svg create mode 100644 Notes_Upgrades/SA_tetra/tetra.png create mode 100644 Notes_Upgrades/SA_tetra/tetra.svg diff --git a/.gitignore b/.gitignore index 56f6f9a26..5a2f03dda 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,7 @@ build/ # Tex files *.aux *.log +*.synctex.gz # coverage output .coverage diff --git a/Notes_Upgrades/SolidAngle/Solid_Angle_Sphere_Approx.ipynb b/Notebooks/Solid_Angle_Sphere_Approx.ipynb similarity index 100% rename from Notes_Upgrades/SolidAngle/Solid_Angle_Sphere_Approx.ipynb rename to Notebooks/Solid_Angle_Sphere_Approx.ipynb diff --git a/Notes_Upgrades/SA_tetra/SA_tetra.pdf b/Notes_Upgrades/SA_tetra/SA_tetra.pdf new file mode 100644 index 0000000000000000000000000000000000000000..db8276265025a67292bda6b2ba763ab3a232455d GIT binary patch literal 115038 zcmcG#Ra9I-w=UX1aCf(0!Ciy9ySux)2Pe1(clY2PEJz~(f(3VXNN_oefA6!$eYj)X z^Kfpz^y<~KrhK#Nt2t|RQz?r}GO{vpB2Z1w4gEpjBx50SGPOnE=SN_cw{Wy_wy9F-g}nBGCqeNRa)O5 z7BqWXn$9TV4WC;nuWo!Vxdm%~ch6^e&8?>8K-jvYUY5DK^tuSJUu^R14U-^HCYsK8EX8cS=+Q-=yTtO^yIHw!wpXlmmLzx;E?@CNn^~70(pHmH?)`T ztRADnHNhQ9QPFw%w~n?5OtHz7%jq(O43?bR(_M<$cf;kwJXlSw;e>u)Y)oUPWaH2h zZ~Q-B$+8qt;wH;Rz85g_qhg=9BRKqpSFcwpFh#*F8c;jAffu2)ur=q z*8HT)4wPboKbrSR_lwO;vWKBCV{HWNmwE*~h#-XeE-ZoR;$TRiW7puaAinzmRTKPHtOG zw1jP!u$`Q+UEJ2UbVh@$#D)S54u>p*yShfM%5av?xx99c_|aiu{AhdY8??9wSF3RB z77aXqL$8f7whGP96ltSS#4^UIUi~v+b=zFH; ziiZY1F$Zb683mJ+;wEF|7A->%MiN0mlL?6!oDT1CC^1!36X&_yS69g|I$1E(t<)=+ zC^*4!jJczhg%>|cDx$TS7jwvNMfzAWE6481i9N<__TttpG}u3^SDU3^FfhtrA&x*q)1E293{N~O-0x4vvw zHl8WFhxulFI-8}H!In=z2rIMpy0lgg_Xd?AxX6ZJ;b{Kf6arkm(+}(agND?7oGr+h zwUtb5EzH~znAJQ?-T!k(#=*qO0)bh}#vC9iE?!;)W@!r>D{FT$4jygFh=H)RV~ zF((ISCr1lMcQPIXW-%vwCs#FR6Ei@cxP_;UnT4v9D4 zf697iYkrq|9tI;j7=?nUqe-2*O#@+MnGt)uN#okrM z22cEJ)6;9<)WOZFTj0Ts0_gwFi*Ik}?F|aV;=wqv2@9G=a(jgWHMiqSrV)XJ*Fwm} zmVVAdgPIHQRa?*#Y(q71LCS-c8KzBnzL@nIw-tyWyyYjP6t68o?nBEL3qW*25U(t- z%_K70=_#U^31oa6SCc>a>(}8KB8Wq*tRsBspQJXfByyj1Hu>yo+Nt$1WDt&%{Onq< zWz*hFO&=&|q7K5cBe#$VWWD!<)HDHe!4HRoOI+~zf?a-HeBYB$)S#Uev^lt#Gm(IdttVLy1N`sd zDM>&D=#wlyu%r%LpI|{5DQ7JTlVre6m&rum(?wv+@di@mtR*9GtF>Rb!)S4r85m!% zKY3}I`}zo&eq7>^YFAjS%}s>@$@gfD!CZkrEeH`~YaOjA=%}E?tbm7xeF{|+kaYyE z-6d?rn`8|U;7to3W1)!HEGo#o7XP>votwT57*7lzLBKT_Gf7nJ4H9M_h1mlIS$a2o z`%<#+*bbPQWJz{tgWkbL1vMArANQ`bQcM7Y6gI{Q8s=MVHs2-42!BF>92_Dn&%W2% zbG?tp`?I#@Z@)0`w#fgCmiuD(=edJnh=~Dw7 zg;@d+sJK~}jjwHLN>_RpFYEH~eE1j*3*s1T=2Fm_6$YUpHHz?qSOz9b(+H^qn?T0D z?owMFQ{{v8o-`G0%y-_psP8-bCopo09;b;U?;;9X*!#L5m674*01J7I_l zkU7ux63oxb(>q%^<{cd%4hMXiS91PUUZLdGtem{n)aUF%5Qq6cNv_zRCSWHTBW|}K zNr$A-h%BVlU5MjuefEEn!*JvM&k(jPvQ2}Gu}OgYSt48j4jf`nt&Fy+D0R?5mKATU z614!#{RQ}kLL?x(f#n!`w09@g*>;Gdm%oKpLlpqo6jM3yZl}t$Vgk7}_py!lMDZEr z&V!-AoDq;LxF>Xtg|&`~fvg>@yetn&i-^MPa}l5r`lnx<_}})d)p$X%o)SfQ zD<9<1QP0tY*^P~a`9WC_OF^!n4^WN4S%0DWf;0&U8i@Pc$NL?iCLTVDh2BCcqr3+L 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 OnAl**$wlNuVg4Wg4CDg< literal 0 HcmV?d00001 diff --git a/Notes_Upgrades/SA_tetra/SA_tetra.synctex.gz b/Notes_Upgrades/SA_tetra/SA_tetra.synctex.gz new file mode 100644 index 0000000000000000000000000000000000000000..13e5115830ca33024adf385a9d7333c6534cbfda GIT binary patch literal 21944 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 z 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 literal 0 HcmV?d00001 diff --git a/Notes_Upgrades/SA_tetra/SA_tetra.tex b/Notes_Upgrades/SA_tetra/SA_tetra.tex new file mode 100644 index 000000000..f30a52f16 --- /dev/null +++ b/Notes_Upgrades/SA_tetra/SA_tetra.tex @@ -0,0 +1,168 @@ +\documentclass[10pt,a4paper]{article} +\usepackage[utf8]{inputenc} +\usepackage[english]{babel} +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{amssymb} + \usepackage{cancel} +\usepackage{graphicx} + +\title{Solid angle subtended by a tetrahedron computation} +\begin{document} + +\maketitle + + +\includegraphics[scale=0.4]{tetra.png} + + +\section{Notations} + +Let + +\begin{itemize} + \item $\vec{a}$ be the vector $\vec{OA}$ + \item $\vec{b}$ be the vector $\vec{OB}$ + \item $\vec{c}$ be the vector $\vec{OC}$ + \item $a$ be the magnitude of the vector $\vec{OA}$ + \item $b$ be the magnitude of the vector $\vec{OB}$ + \item $c$ be the magnitude of the vector $\vec{OC}$ +\end{itemize} + +\section{Computation} + +The solid angle $\Omega$ subtended by the triangular surface $ABC$ is: + +$$ +{\displaystyle \tan \left({\frac {1}{2}}\Omega \right) + = {\frac {\left|{\vec {a}}\ {\vec {b}}\ {\vec {c}}\right|} + {abc + \left({\vec {a}}\cdot {\vec {b}}\right)c + + \left({\vec {a}}\cdot {\vec {c}}\right)b + + \left({\vec {b}}\cdot {\vec {c}}\right)a}}} +$$ + +where $ \left|{\vec {a}}\ {\vec {b}}\ {\vec {c}}\right|={\vec {a}}\cdot ({\vec {b}}\times {\vec {c}}) $ + + +\subsection{Numerator} + + +Given that $\vec{a} = \vec{OA} = \vec{OG} + \vec{GA}$ (and resp. +with $B$ and $C$), we get + + +\begin{align*} +\left|{\vec {a}}\ {\vec {b}}\ {\vec {c}}\right| + & = {\vec {a}} \cdot ({\vec {b}}\times {\vec {c}}) \\ + & = {\vec {a}} \cdot ({(\vec{OG} + \vec{GB})} \times {(\vec{OG} + \vec{GC})}) \\ + & = {(\vec{OG} + \vec{GA})} \cdot (\cancel{\vec{OG} \times \vec{OG}} + + \vec{OG} \times \vec{GC} + + \vec{GB} \times \vec{OG} + + \vec{GB} \times \vec{GC}) \\ + & = \cancel{\vec{OG} \cdot (\vec{OG} \times \vec{GC})} + + \cancel{\vec{OG} \cdot (\vec{GB} \times \vec{OG})}\\ + & + \vec{OG} \cdot (\vec{GB} \times \vec{GC}) + + \vec{GA} \cdot (\vec{OG} \times \vec{GC}) + + \vec{GA} \cdot (\vec{GB} \times \vec{OG}) + + \cancel{\vec{GA} \cdot (\vec{GB} \times \vec{GC})} \\ + & = \vec{OG} \cdot (\vec{GB} \times \vec{GC}) + + \vec{OG} \cdot (\vec{GC} \times \vec{GA}) + + \vec{OG} \cdot (\vec{GA} \times \vec{GB}) \\ + & = \vec{OG} \cdot (\vec{GB} \times \vec{GC}) + + \vec{OG} \cdot (\vec{GC} \times \vec{GA}) + + \vec{OG} \cdot (\vec{GA} \times \vec{GB})\\ + & = \vec{OG} \cdot \left(\vec{GB} \times \vec{GC} + +\vec{GC} \times \vec{GA} + + \vec{GA} \times \vec{GB} \right) +\end{align*} + +since $G$ is the centroid of $ABC$, + +\begin{equation} +\vec{GA} + \vec{GB} + \vec{GC}= 0 +\label{eq1} +\end{equation}. We obtain + +\begin{align} +\left|{\vec {a}}\ {\vec {b}}\ {\vec {c}}\right| +& = \vec{OG} \cdot \left(\vec{GB} \times \vec{GC} + +\vec{GC} \times \vec{GA} + + \vec{GA} \times \vec{GB} \right) \nonumber \\ +& = \vec{OG} \cdot \left(\vec{GB} \times \vec{GC} + +\vec{GC} \times (-\vec{GB} - \vec{GC}) + + (-\vec{GB} - \vec{GC}) \times \vec{GB} \right) \nonumber \\ +& = \vec{OG} \cdot \left(\vec{GB} \times \vec{GC} + +\vec{GC} \times (-\vec{GB}) + \cancel{\vec{GC} \times (- \vec{GC})} + + \cancel{(-\vec{GB}) \times \vec{GB}} + (- \vec{GC}) \times \vec{GB} \right) \nonumber \\ +& = \vec{OG} \cdot \left(3 \vec{GB} \times \vec{GC} \right) \nonumber \\ +& = 3 \vec{OG} \cdot \left( \vec{GB} \times \vec{GC} \right) +\end{align} + +\subsection{Denominator} + + +First let's see the term in $c$ +\begin{align*} + \left({\vec {a}}\cdot {\vec {b}}\right)c + =& \left( \vec{OG} + \vec{GA} \right) \cdot \left( \vec{OG} + \vec{GB} \right) c \\ + =& (g^2 + \vec{OG} \cdot \vec{GB} + \vec{GA} \cdot \vec{OG} + \vec{GA} \cdot \vec{GB} ) c +\end{align*} + +Using \eqref{eq1} + +\begin{align} + \left({\vec {a}}\cdot {\vec {b}}\right)c + =& (g^2 + \vec{OG} \cdot \vec{GB} + (-\vec{GB} - \vec{GC}) \cdot \vec{OG} + (-\vec{GB} - \vec{GC}) \cdot \vec{GB} ) c \nonumber \\ + =& (g^2 - ||GB||^2 - \vec{OG} \cdot \vec{GC} - \vec{GC} \cdot \vec{GB})c +\end{align} + + + +Now, the term in $b$ + + +\begin{align*} + \left({\vec {a}}\cdot {\vec {c}}\right)c + =& \left( \vec{OG} + \vec{GA} \right) \cdot \left( \vec{OG} + \vec{GC} \right) b \\ + =& (g^2 + \vec{OG} \cdot \vec{GC} + \vec{GA} \cdot \vec{OG} + \vec{GA} \cdot \vec{GC} ) b +\end{align*} + +Using \eqref{eq1} + +\begin{align} + \left({\vec {a}}\cdot {\vec {c}}\right)b + =& (g^2 + \vec{OG} \cdot \vec{GC} + (-\vec{GB} - \vec{GC}) \cdot \vec{OG} + (-\vec{GB} - \vec{GC}) \cdot \vec{GC} ) b \nonumber \\ + =& (g^2 - ||GC||^2 - \vec{OG} \cdot \vec{GC} - \vec{GC} \cdot \vec{GB})b +\end{align} + + +For the third term there is no simplification + +\begin{align} + \left({\vec {b}}\cdot {\vec {c}}\right)a + =& \left( \vec{OG} + \vec{GB} \right) \cdot \left( \vec{OG} + \vec{GC} \right) a +\end{align} + + +For the computation of the norms, we can use: + +\begin{align*} +a^2 &= ||OG||^2 + ||GA||^2\\ + &= g^2 + ||GA||^2 +\end{align*} + +thus + +\begin{align} +g^2 &= a^2 - ||GA||^2 \nonumber \\ + &= b^2 - ||GB||^2 \nonumber \\ + &= c^2 - ||GC||^2 +\end{align} + +and + +\begin{align} +(abc)^2 &= (g^2 + ||GA||)^2(g^2 + ||GB||)^2(g^2 + ||GC||)^2 +\end{align} + +\end{document} diff --git a/Notes_Upgrades/SA_tetra/drawing.svg b/Notes_Upgrades/SA_tetra/drawing.svg new file mode 100644 index 000000000..87d03cb7c --- /dev/null +++ b/Notes_Upgrades/SA_tetra/drawing.svg @@ -0,0 +1,153 @@ + + + + + + + + image/svg+xml + + + + + + + + + A + B + C + + + + G + + O + + + diff --git a/Notes_Upgrades/SA_tetra/tetra.png b/Notes_Upgrades/SA_tetra/tetra.png new file mode 100644 index 0000000000000000000000000000000000000000..c9f56ea4c5a294e6558f53e45174e807183f2142 GIT binary patch literal 29805 zcmXtA2Q-`S+eVC{w%Vh$Yqk}mW|Z2as9l?gO~t4^enzyYy@^e2FKwd;bF#pjsA8{!wVN<-ySR#{)jt(vj z=Fw5WdmO4vq5YU98VP~C%D~YnQi9->EiSUI(?fHHcA#F~(4C~+%i|e?g!%N#tn}F*Lvu_HM@3=9rt zD4V1=Z4y-A@Z)~~DdMYj={b#M1q~zw$)3B^VFm{)%7(DakcT!WoJ%fCic4A@?@i}+UgmFg4ps>F zeGD3&;<&t#=3Mk+rc28TMFWoZ7KURlAdlf+MM!EjV9&qGTmr;6Yk0kQ7;S{vrF)Mkv(O1@6hqPxlxAB z=-uug4_PfV&pP`)pZJsgVeKuxFo;ewN&LYA(Ibl51iR*>nxp-Ez7Y;^&D!R+HLM#s)LN?cQ|WlQOaP&=_Zl^M(0IxW{bz??qX` zDqlDhI*~MkFq+b7qU26(BX={2+^rn#dpcB6yRCK;2KOf1VzL@o3e6548Nc@fP?U+} zq05b%d3bNm=<=d4AGj)AB6gOayYf-xcdjJ;i0yqPjkN{BO-zW@CM!!@%|( zw|3id%Ix%Xk;DTH(Dn-jP9ZY#YZH#$-;=7+d}tz5ez^kW6yGkXE0>d_YJ6 zFLi2qdPCIY-}w&%R}~AEb7H)A8%^m-_by0Z2y9h8S{4x&=2MeAOribo2|dN!=T0AH zZEqN|( z;6mSLz{=ro)Nh_GH}Qd8`j|foenNkSPKf_}bSqO6B-D3q(oeTbAt{@Yo<3wCSsP$i z*1!us$zZ;@jwFh4gvMAtInSnA#H-p_Gn9RN?iXZnx`1yBg;v_x|1rg_Q)j+2o2}Tv zF7~`LnUw6P#E0Wa86`U?RA4Rcw-$%pvHMqH$q%P}GO>2hn04sEE=Ur%OKx%_3)3&al^UN&HpQ(1UPJs>>kSRR zbo`vs@a)GJn}zArcAM2qqfPPntIG~D-Y0)>m#!0@niE9mTf6~6je-xyRoL~sGws=K z`$IRS$jkO@K%mM35}(j3zfQ#m441{Et2^3x?n8qWFPX6Xm2Yegh-xeC41{^Y5XJjK zUY{2uJM2C&Ri}^V26l{*nr}Z~@arU9O}Vt38yqx#ZNj}cODmrHPL1q__=@I?ARa3Y zn+600u}jRI1S~<8z7h30+@&miicFli(U#WDTwKxWfbVygplgixnB>k?b`v|+L*yQZ z0_GML-Yi8ui}=Y;;-r`)@L{OUjPnP54!#R6OVtbif1mmHYXVaL80Lv4M^nG*d+GM? zQjD^-oK{E<{x#0gBa91L6!``DUd}NzkU)a4{yyeDdI70|41jEgD2C|cYhb;zCI;?> zqR}l|NPRGILR5phM`blxXcsJo&=9=Qbkg6)b$hm_wp6(#x{F1O&4}fQJwPQX7JxT( zj|2SxNg@}7A0Vw3A%w$>n?WSORR1!?Z5UsGkl{Xq>406wAn>}VinWuRm5HLn&*3o6 zb0)Y#C9_qU_0^q)$ECakenEaOwUoqfp)$ z8JrmG7c3d_J~%UkFBlb^i!(`uIB*R%LD&Rpp3v#DiSGI^(5Z0zxGlf3ehO&K(Zw@o z>xC%QC0z|;{d`J*EA!I(Zb4^9?8z6iE!w^vK1*P$;uC)hswD=PU(HFacVUQvQEz0o zpob%+z}z347RtCo`Xyq8ge&qr=_UO9)>)$tTZM!mpOe%ZzBz~!llu4bVZ5X=*G)ajXD#2MNx1}MV zvZW)VKpgBM*5S5G)g8nNIyY9HKa}r0=EtORzl)^yx-WBm_F|9o#6yiVk0?EJM~I*Ph^R)qd+0w|7kpvE9fdCEyOIGr_U#Rs`tWZNdx9r{Xc7N7>5D3 zHBL6HY0y+DudQ;C{12wpC>~GU;F){$XQzes3F8_6h`_Sw(mji)O+&|*VTef#j|Fef ziQ6WiJ;)N3LjD}7e~xmJEQhLDn|hMo7Fm`OM>i|`58*$QYfM2LGlK%^W6y61d}wE6 zDtg!fG=ti3=&+%Mm{1)TcnoBEj(=0IIs`4jU@cz>`W)D4Tq<9{WqrgiJy@-Z4+6Or zkCm^ZY<%eUE!RcZw9O(*#aQn91CkR^Ixh)6f@W)hV!1ccWMA?-_-898RpZ~h9OGF` z4+xTq=V{mEPvAcUB?Ez}XA;KMg7rg{dgf%iGXP2%;AlslIw%y}*yQIkm)8Nea-U4@ z?xl#tK?P?bw{xW#hc^=O0RgGmv{?u%3f0d>JB!)Cgc)%*a)wD5AJ!qnWQ%uJ_D@ zz!}a(YVOr=?*&*8E-3>#|5$1*gH5ODztuP&g#)l+$8} zz&<{5R67*{FSQ+?i1qu=;lRLqZcN&bIfFN!%2uF;^;;qdA7L z$3fv|x6|**8i4!$$apx7ho3zU9{G(KoGpE*BGIr8}(AXkBWFs6kDH@ zMr?k@r={7*W8_tSMae6*ui&SbEgZEqyR-`QJ)+&B6OI&~{e9&9dwmG{KZx$guc)ZP zcX;`~OKVI|S{3>}+;j^Dta1Ek=N64kmp^iD%i>uB?CXf<0Jp#)w%oB!2h4ay=vYI=<}iccajLB8j>e;Iixm&hlzgNxQd(#l1?_SzDRdoH3Dn2I}uXG&ts zley3EI+Jd2qc`w(;@r=+9b7NYjVK^xWhA$eqYCus{n8D|OHAwNODM*l|CH+6CNq|T zeui^ne!y~zwGyAT_B4AHGqxbj3xAT=PPqrK1xZXsQDGjpNy%h_(4 zK@*VJXuz*cN&>+0Tr)&R2Kgg_0 zm&mKZ9W5TN8kDL_(=#`gJ@aNw-$m>yjthdjO+3q1bfVE7u-3%8{)pjg)(qfiEjltn zdulsYm_WE~Jv**-l%Nwa<=?q0_^@ax8TH^$up7@FwJCS2p!*YH6cl+4$yI@GRa221 z(pI;pzdjyt@QY&;#Z4o=(C#kd)KRjV=xqAVUB>8jcK)J6KYOk^J11G3UnhJDFyJQ@ zT|~^IUQUS{wr)j=+Ybj3zD2c0t-A-)hn^ZVmtJFESO1%qB4y9b+R;5g>4k8Icq5!Y zv^)ztP-7CUf*k?gGhQ^J&=mTV(AtpcNCn-DtX7nEmL8=;^CHc|e&RV}T~NZljKv$N z&E)v&7+-YmUnT6`f($KWtYh-+I7#*9q(=Z}usUkscX!lc>dWue?@$WSFTX8pf(+Q& z())#wg08{kDpjb1`;I#0AGH*O_|K;;mf8|>uW@)v*5URDd3#4xthvzgomI+%HV9@2 zz*3$ZFC|!xcxzR;qknj5iq15m{OTy` zF>evqw=osO!<7@X`FovJ==|KTqq$XF5%5!1c=i!dT9_IWAf1do4W_TGAT5;!JAg}# zsh!kV+*6^o;1Ti$DHO)SAtCM0U2foloOUdiC(~6Iy;WK-B3gX>Wr(=r%#3A#lN3mE z-@!~r+ZPpLEVu=g zD~tWwN^VU@0U`f)@NHl9X~?EKA`C#N1P!*t6`Cr{DyMJ`j0k!LiCtFkSF(YMndJmu zAU;{@%?l^D+GsTvCz+q@xfWFmJ=-*(Km{j$ZIyp6rMT7zN2mY zO%WCYzA<+FGmIr#ubZu@)jDF9f8FpvW$mZ!g6p&S)5YyFFDv|0-yeMLhV`L+qCjs! zr~ztKkUxqAM50h=Ul7g^rXO2!a-Y?LaECS$1PCWs3ZFd8RcA5k4S-U$6tv>1e|n+* zZv(z1*{EkBZ!g|XV8;w4%%f07Xha$NCl(C?X5yI)Ork$kZHHS(?|Fa`UZt80;_AfT zWf6bQ`0b@h$cxC@XHY7}7}DyNf_qS%#$fs{ZL_dZkgf zE`8Sy5hHM+G=vhVnf=Zk#Xj)WT+&Uq|M~`ZtQn=ErN&e|CN2XcIg*)=7=JXbaOe#4 z5ihJy`N%jq;NdY{yHcM?AX zy4VExW6bX{?bi{#!8Eu)rF40-;%d7=mVsj|P(IpruO1)c@s!HNbI0a@aJkRd=k_?{ zuq>B^RgtoYIBw}*L^H?qCm^{pNXB0nX>0;NyHjn9IrHm*vJ9G4l&0z1!au+$5mI?(~XQ< z>Zf4cKEAxn|2!ZsJ(cBuFqx`vB}v}D8a6hpF4O^L%exl)r_YUFkC2QyO4`yhG)F|R z+&`t-RbUdVN+qZ1D-e1UsfP&vFsh?8nV-U$dt^E@;2wdamHfdYkTbNr=B*kN%cExL ze+KrIw}#9X#pe6gLmCY?CD3Hv(_!+`uAQI^raGg3#dd-Nd7|h%WI5{K<6@ZR_qIia z;|0%ky=cM(Q~=W^I-&MPez;k(@Ck`{GED2wKc!L&$k&&BDrs)x9U({WBTcMQ3`TX8 z#^_{bl77F+Z{L4|K1b#OIw_i0dRptpig6S;)>7;ByH7XLx9^bmYGv=qe5$yVD#wvP z9V$OP{TT3aX(EPXiG-PvUSuk2X6oki^~=pI&w6@{n)`T% zFGl?UF?aER&I5nXOLV~*{6`)3g_BeaWU_iE)@IfOZUC1jbwddS(mJZgsYFs`ldm#O zIOLtNpLzRDvZL> zct3E?kSmc;UoVPzng2e_(U6G?elKf0+gE9DZ*s}3}!{c^LKtlcG-{3(zkk^d(@FMer*8XczK`1uf$>$E(% z@a=bEJtLpgO}+wS-M6zyJ)f(jJCDDA=kW~^4Plzm^y2In6hSg-{_RA@k31EIRIcSN zLw^oYF18124w=PO)`jUa?$PvgZ^iR6Sx+YHFXByvbR6u zd_yBbp(4v`D@3{`qQo~mFfdGUBg!~YF}U$j z@FgB&v2;ewcbud_U3aB?NWCChCCpRH+2~yt3b`w~G-#DLvNBE3cnI;3)0K-15zUt| z$#RCs^h*@<_L+lV;}X|KN#-j{*)&6g8F5}%%t;c_y?Js-TREkWzz~y^aqQy(nGZ~4 z7p9`b{u(J)69bV6J^kDU29p?o51@@w*c}j&fVT1`iGPi_gCoWvQyRFHtb}eu zQc6$beTyRcu8sTM%|XRudsD|%S(K4tcW!SajE12(hF_he%+%p-JVwWDVh+BnmCC~6 zoh)ZrQ5lP#h?i0C_0E@q9_A{HJ2=h;b_j6xwGx-wCM@17UIAhsrH?#D;W;MiDE;~j z{y0Tv8I-S=LVG(d(h#B#GR3-}2HJviq~51j6CU*EzspjD!&ifYQkX7}7+6~3?{i7m z4OVwA@7@_1NUyZ$|4RMp7e=wrfj}FOi$A2w9G@(&i!xdmm!q{qwU_r*xaPJWf^{?MpilxcEy>+{Z6XQf8Ca&`sC^zkq-#tZ$TjNP8a zVK`^9Pj0d(wil=&b@Z36VLAN?OS*`kWNU*LE-Er|7Y=$|+ixV@NNQX|t;L#OAiBbm z3|49&8Bc(P2;kuFm){MNF6@qxl2p=`lYm6WDHjy2{?+{F!9Gs<1as3{3kSaw^I0ds zb5&oezOLT|%mh=t5GF)Wb8dorgKUPl-t=TWqKv(+?NtzZ%PC~GuDi-*5u1cSAZH$i zdv1f7uvw0f>o79n_v45y(iQ;5HeXdIRdyr)sWr!*eonISN4+rSDf$O;O-IQ(85u6; z*gM#IqjGeTO)7aqph%s7ETJU$LUwNSy(mF(bm}gnG2LafamI$Qofvw)a+ZcL{4f@r z`A~0^<1=F{FtJMzRU6lo@m>+xQbSVe=h-Od_r!=P^WZ$fReKug$L@QPCc>x-0R0S? z#O8~XvW{#xSfiPd$GS>34?LM48XCDZFYR0-oMWmVdigNwtokT|v|g!y6Rh0d&zx3R zQuwC^9somWA)f+vAaNkr#-9PzvzJat8&yjDM^mDT(dO~9pUNP_)8I3%Rt6Pj*M+{{%zObWXq!p1e9 zbCSB+H5on9{s5$P)d8y6Jl{VhRiz~LB$z1vFVmfCB%Z4TzY~*io!h{a^#U*o^l;s6 z*Fe|=NFZw-26Ub(Sqp|-t%OGv-FZQG&@Lmc*M=}zD0`B#lAt-#u%{h&AzHkFs-K%{ zmNNz)OCTp%`U(r2Y8dPb&N{Ni7(^XP=WA6IiA5ewv!qWBshX8;!-RXf$r zCRHTaLpC6lTa=OOh~HCp=8!HBfY1Ww@O|M(ZbHsVYCNdoI!=NsgG__ZWdmz8c%NNT z8rcsPZaH+yQ?B{`|5<=sh+U{C4l^ZT4d+B6W#j{@9vE~Y3QPod7`riAMPs2kk&*0w z8+b3cdu&#Fx@(Wd=&aV8Qlm)7RRM!>)#ml=Alc>C!}O0LOACAN;3P^_M{=a=aB3{x z&=n?+et~RZx2)ymY3;sxgjR0YG0^#NeG1Q{vnNEaM+x*+| zmVlzC(`==-x=L29MKLJ)3tKrq-{Q9Xs)xC6)U_Bj(qP|UNkQrs zIy3IgWMcOHq-#}v93bhDmiAT-K7P9Xl?zD$u1wl1d;9>gSHwx$wqgyfRG18oRRuJj zIl<;N%s_Af=a;CXY=4+bt**+bncIMUs_QT1S;M2}+|5PPRX4pLCYLC8*)vWcRK-8) zwuH4rVSyr*<%7F_2Hl0{1K6_>Gk_gR0g9n{XkgmV2AL|ecJ`UzxsAnk{qpPXjSfj_ z)=@J+f6DT!0ZNNFL)bA`*F4bB%KO{hkr`Ek95TP}V3MlE&?iL)XiCn7Eum|S<0U^c z2@W&J7az>$3HDqf{+$?XIvSz-G*a7N{T6$}hxR22mjuFJn9uKw7=w$(n!F6O(e+)> z`FR&2a(y9H>dfKe8Tz0Yf@>VOGI6Tdmg-ISZ8)%_F+FP5$pQ$dox(v&HE|bUf=yl#cOC!ckK~fQ!+|UP<`{UoN*7Y3T#vgGTq3&>jiSSo8Lsu zDD#T&w#B}ytdv3_!NkWYwS=TZ49o;(uBQON$g~mj1&emDui%a0 zGS+j>m7r96nFyH-sp4uDuUGvgiMT@C&;l!cPJYZKT0OeH{huxnGrI3{DTxKiumZCG z%uDz&^(-z1mCb#t1M;fy9riJfgocX3mItQsZH^NO!g2_lGbAz?VBGC#o1K7|JtZNR z!JN7TI`53J;r^nteiRr3y~i(xv-vs6CB z05Q2n(D6%8#ta}S1@5TmN2*Mp>Ny+IjWjTkNM|5P9KYZT5yX$dW*#eK{V!1I=06z; zXK}p-aBY0ACw#H(6CsQ+zo3f~Ia$|yWQ`DrWz1V!>7+JKoE+QxOnjF)9Rq*CcI}_5b zdu3V#qY@7WNNVs!1V41b7))}cLnU-kV>bHn>|r78YJ$7&*|YP+(+R*1pML2(?*3xR zgdK(AQ*95$a(Q|C;UA5kk(Y$)C@CeSzk%>;wn)13W0k)OM99ByD;})CwtsFFeiI6) z&$n<5qDEmt5tP?y=PUd2rZ7Nx#_iLNe{|e2{Z~)^X@V;fRP`icp-nA#;ywMcO)oYd zhg6^v(9EKs1wbk$V90A5N38v#l+{1s^HtBt)qHRc(*b-HLt(RWCl zJ1De`%~@QemSe=bX)oBZC! zgrPF&I9~}^8#)=s*WDaT0Eh%W6ml02J`1vg>I>Cl12hGFg}-q$%;bawfJDB#o5nLm zOSyo*6`_I`K~$7|BS`R*@wkgp19BUTHZR)ZH@Kips_wkxOeSp3xD|o!Galk!44Jh)<
M6TDwZJcS3rZ(jmP~qlUL&z)2$e24oQ>k_t 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 ZUJ?^yw!0n#zABUqsc&+nQrGGJ{{ex=QTG4< literal 0 HcmV?d00001 diff --git a/Notes_Upgrades/SA_tetra/tetra.svg b/Notes_Upgrades/SA_tetra/tetra.svg new file mode 100644 index 000000000..fced958bd --- /dev/null +++ b/Notes_Upgrades/SA_tetra/tetra.svg @@ -0,0 +1,150 @@ + + + + + + + + image/svg+xml + + + + + + + + + A + B + C + + + + G + + O + + + diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index cd7a8af7a..446c63373 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -4932,3 +4932,401 @@ def compute_solid_angle_map(double[:,::1] part_coords, double[::1] part_r, free(ncells_rphi) return pts, sa_map, ind, reso_r_z + +# ============================================================================== +# +# Solid Angle Computation +# subtended by a polygon +# +# ============================================================================== +def compute_solid_angle_poly_map(double[:,::1] poly_coords, + double[:] poly_norm, + double rstep, double zstep, double phistep, + double[::1] RMinMax, double[::1] ZMinMax, + bint approx=True, + list DR=None, list DZ=None, DPhi=None, + double[:,::1] limit_vpoly=None, + bint block=False, + double[:, ::1] ves_poly=None, + double[:, ::1] ves_norm=None, + double[::1] ves_lims=None, + long[::1] lstruct_nlim=None, + double[::1] lstruct_polyx=None, + double[::1] lstruct_polyy=None, + list lstruct_lims=None, + double[::1] lstruct_normx=None, + double[::1] lstruct_normy=None, + long[::1] lnvert=None, + int nstruct_tot=0, + int nstruct_lim=0, + double rmin=-1, bint forbid=True, + double eps_uz=_SMALL, double eps_a=_VSMALL, + double eps_vz=_VSMALL, double eps_b=_VSMALL, + double eps_plane=_VSMALL, str ves_type='Tor', + double margin=_VSMALL, int num_threads=48, + bint test=True): + """ + Computes the 2D map of the integrated solid angles subtended by a polygon + of coordinates poly_coords, not necessarily flat, one sided and side defined + by poly_norm, nomal vector of polygon. + + Parameters + ---------- + poly_coords: double array + coordinates of the points defining the polygon. + not necessarily flat. + poly_coords[i] being the i-th coordinate + poly_norm: double array + normal vector that defines the visble face of the polygon + rstep: double + refinement along radius `r` + zstep: double + refinement along height `z` + phistep: double + refinement along toroidal direction `phi` + approx: bool + do you want to use approximation (8th order) or exact formula ? + default: True + RMinMax: double memory-view + limits min and max in `r` + ZMinMax: double memory-view + limits min and max in `z` + DR: double memory-view, optional + actual sub-volume limits to get in `r` + DZ: double memory-view, optional + actual sub-volume limits to get in `z` + DPhi: double memory-view, optional + actual sub-volume limits to get in `phi` + limit_vpoly: (3, npts) double memory-view, optional + if we only want to discretize the volume inside a certain flux surface. + Defines the `(R,Z)` coords of the poloidal cut of the limiting flux + surface. + block: bool, optional + check if ppolygon is viewable from viewing points or if there is a + structural element blocking visibility (False) + ves_poly : (2, num_vertex) double array + Coordinates of the vertices of the Polygon defining the 2D poloidal + cut of the Vessel + ves_norm : (2, num_vertex-1) double array + Normal vectors going "inwards" of the edges of the Polygon defined + by ves_poly + nstruct_tot : int + Total number of structures (counting each limited structure as one) + ves_lims : array + Contains the limits min and max of vessel + lstruct_polyx : array + List of x coordinates of the vertices of all structures on poloidal plane + If no structures : None + lstruct_polyy : array + List of y coordinates of the vertices of all structures on poloidal plane + If no structures : None + lstruct_lims : array + List of limits of all structures + If no structures : None + lstruct_nlim : array of ints + List of number of limits for all structures + If no structures : None + lstruct_normx : double memory-view, optional + List of x-coordinates of "inwards" normal vectors of the polygon of all + the structures + If no structures : None + lstruct_normy : double memory-view, optional + List of y-coordinates of "inwards" normal vectors of the polygon of all + the structures + If no structures : None + rmin : double, optional + Minimal radius of vessel to take into consideration + forbid : bool, optional + Should we forbid values behind visible radius ? (see rmin) + eps_ : double, optional + Small value, acceptance of error + margin: double, optional + tolerance error. Defaults to |_VSMALL| + num_threads : int + The num_threads argument indicates how many threads the team should + consist of. If not given, OpenMP will decide how many threads to use. + Typically this is the number of cores available on the machine. + test : bool, optional + Should we run tests? Default True + + Returns + ------- + pts: (2, npts) array of (R, Z) coordinates of viewing points in + vignette where solid angle is integrated + sa_map: (npts, sz_p) array approx solid angle integrated along phi + integral (sa * dphi * r) + ind: (npts) indices to reconstruct (R,Z) map from sa_map + rdrdz: (npts) volume unit: dr*dz + """ + cdef int jj + cdef int sz_p + cdef int sz_r + cdef int sz_z + cdef int npts_pol + cdef int r_ratio + cdef int ind_loc_r0 + cdef int npts_disc = 0 + cdef int[1] max_sz_phi + cdef double min_phi, max_phi + cdef double min_phi_pi + cdef double max_phi_pi + cdef double abs0, abs1 + cdef double reso_r_z + cdef double twopi_over_dphi + cdef long[1] ncells_r0, ncells_r, ncells_z + cdef long[::1] ind_mv + cdef long[::1] first_ind_mv + cdef double[2] limits_dl + cdef double[1] reso_r0, reso_r, reso_z + cdef double[::1] reso_rdrdz_mv + cdef double[::1] lstruct_lims_np + cdef double[:, ::1] poly_mv + cdef double[:, ::1] pts_mv + cdef long[:, ::1] indi_mv + cdef long[:, ::1] ind_rz2pol + cdef long[:, ::1] is_in_vignette + cdef long** ltri = NULL + cdef long* lindex = NULL + cdef long* sz_phi = NULL + cdef long* lindex_z = NULL + cdef long* ncells_rphi = NULL + cdef double* disc_r0 = NULL + cdef double* disc_r = NULL + cdef double* disc_z = NULL + cdef double* step_rphi = NULL + cdef np.ndarray[long, ndim=2] indI + cdef np.ndarray[long, ndim=1] ind + cdef np.ndarray[double, ndim=1] reso_rdrdz + cdef np.ndarray[double, ndim=2] pts + cdef np.ndarray[double, ndim=2] sa_map + # + # == Testing inputs ======================================================== + if test: + if block: + msg = "ves_poly and ves_norm are not optional arguments" + assert ves_poly is not None and ves_norm is not None, msg + bool1 = (ves_poly.shape[0]==2 and ves_norm.shape[0]==2 + and ves_norm.shape[1]==ves_poly.shape[1]-1) + msg = "Args ves_poly & ves_norm must be of the same shape (2, NS)!" + assert bool1, msg + bool1 = (lstruct_lims is None + or len(lstruct_normy) == len(lstruct_normx)) + bool2 = (lstruct_normx is None + or len(lstruct_polyx) == len(lstruct_polyy)) + msg = "Args lstruct_polyx, lstruct_polyy, lstruct_lims,"\ + + " lstruct_normx, lstruct_normy, must be None or"\ + + " lists of same len()!" + assert bool1 and bool2, msg + # TODO: add tests to verify shape of poly_coords + msg = "[eps_uz,eps_vz,eps_a,eps_b] must be floats < 1.e-4!" + assert all([ee < 1.e-4 for ee in [eps_uz, eps_a, + eps_vz, eps_b, + eps_plane]]), msg + msg = "ves_type must be a str in ['Tor','Lin']!" + assert ves_type.lower() in ['tor', 'lin'], msg + # ... + # .. Getting size of arrays ................................................ + # TODO : faire algo pour plusieurs polys. + nvert = poly_coords.shape[1] + ltri = malloc(sizeof(long*)) + _vt.triangulate_poly(&poly_coords[0,0], nvert, ltri) + # TODO: pas besoin de rajouter le calcul d'un vecteur normal, prendre celui du + # poly pour tous les tris. + # TODO: calcul barycentre des triangles + # # .. Check if points are visible ........................................... + # Get the actual R and Z resolutions and mesh elements + # .. First we discretize R without limits .................................. + _st.cythonize_subdomain_dl(None, limits_dl) # no limits + _ = _st.discretize_line1d_core(&RMinMax[0], rstep, limits_dl, + True, 0, # discretize in absolute mode + margin, &disc_r0, reso_r0, &lindex, + ncells_r0) + free(lindex) # getting rid of things we dont need + lindex = NULL + # .. Now the actual R limited ............................................. + _st.cythonize_subdomain_dl(DR, limits_dl) + sz_r = _st.discretize_line1d_core(&RMinMax[0], rstep, limits_dl, + True, 0, # discretize in absolute mode + margin, &disc_r, reso_r, &lindex, + ncells_r) + free(lindex) # getting rid of things we dont need + # .. Now Z ................................................................. + _st.cythonize_subdomain_dl(DZ, limits_dl) + sz_z = _st.discretize_line1d_core(&ZMinMax[0], zstep, limits_dl, + True, 0, # discretize in absolute mode + margin, &disc_z, reso_z, &lindex_z, + ncells_z) + # .. Preparing for phi: get the limits if any and make sure to replace them + # .. in the proper quadrants ............................................... + if DPhi is None: + min_phi = -c_pi + max_phi = c_pi + else: + min_phi = DPhi[0] # to avoid conversions + min_phi = c_atan2(c_sin(min_phi), c_cos(min_phi)) + max_phi = DPhi[1] # to avoid conversions + max_phi = c_atan2(c_sin(max_phi), c_cos(max_phi)) + # .. Initialization ........................................................ + sz_phi = malloc(sz_r*sizeof(long)) + ncells_rphi = malloc(sz_r*sizeof(long)) + step_rphi = malloc(sz_r*sizeof(double)) + r_ratio = (c_ceil(disc_r[sz_r - 1] / disc_r[0])) + twopi_over_dphi = _TWOPI / phistep + ind_loc_r0 = 0 + min_phi_pi = min_phi + c_pi + max_phi_pi = max_phi + c_pi + abs0 = c_abs(min_phi_pi) + abs1 = c_abs(max_phi_pi) + # ... doing 0 loop before .................................................. + if min_phi < max_phi: + # Get the actual RPhi resolution and Phi mesh elements (! depends on R!) + ncells_rphi[0] = c_ceil(twopi_over_dphi * disc_r[0]) + loc_nc_rphi = ncells_rphi[0] + step_rphi[0] = _TWOPI / ncells_rphi[0] + inv_drphi = 1. / step_rphi[0] + # Get index and cumulated indices from background + for jj in range(ind_loc_r0, ncells_r0[0]): + if disc_r0[jj]==disc_r[0]: + ind_loc_r0 = jj + break + # Get indices of phi + # Get the extreme indices of the mesh elements that really need to + # be created within those limits + if abs0 - step_rphi[0]*c_floor(abs0 * inv_drphi) < margin*step_rphi[0]: + nphi0 = int(c_round((min_phi + c_pi) * inv_drphi)) + else: + nphi0 = int(c_floor((min_phi +c_pi) * inv_drphi)) + if abs1-step_rphi[0]*c_floor(abs1 * inv_drphi) < margin*step_rphi[0]: + nphi1 = int(c_round((max_phi+c_pi) * inv_drphi)-1) + else: + nphi1 = int(c_floor((max_phi+c_pi) * inv_drphi)) + sz_phi[0] = nphi1 + 1 - nphi0 + max_sz_phi[0] = sz_phi[0] + ind_i = -np.ones((sz_r, sz_phi[0] * r_ratio + 1), dtype=int) + indi_mv = ind_i + for jj in range(sz_phi[0]): + indi_mv[0, jj] = nphi0 + jj + npts_disc += sz_z * sz_phi[0] + else: + # Get the actual RPhi resolution and Phi mesh elements (! depends on R!) + ncells_rphi[0] = c_ceil(twopi_over_dphi * disc_r[0]) + loc_nc_rphi = ncells_rphi[0] + step_rphi[0] = _TWOPI / ncells_rphi[0] + inv_drphi = 1. / step_rphi[0] + # Get index and cumulated indices from background + for jj in range(ind_loc_r0, ncells_r0[0]): + if disc_r0[jj]==disc_r[0]: + ind_loc_r0 = jj + break + # Get indices of phi + # Get the extreme indices of the mesh elements that really need to + # be created within those limits + if abs0 - step_rphi[0]*c_floor(abs0 * inv_drphi) < margin*step_rphi[0]: + nphi0 = int(c_round((min_phi + c_pi) * inv_drphi)) + else: + nphi0 = int(c_floor((min_phi + c_pi) * inv_drphi)) + if abs1-step_rphi[0]*c_floor(abs1 * inv_drphi) < margin*step_rphi[0]: + nphi1 = int(c_round((max_phi+c_pi) * inv_drphi)-1) + else: + nphi1 = int(c_floor((max_phi+c_pi) * inv_drphi)) + sz_phi[0] = nphi1+1+loc_nc_rphi-nphi0 + max_sz_phi[0] = sz_phi[0] + ind_i = -np.ones((sz_r, sz_phi[0] * r_ratio + 1), dtype=int) + indi_mv = ind_i + for jj in range(loc_nc_rphi - nphi0): + indi_mv[0, jj] = nphi0 + jj + for jj in range(loc_nc_rphi - nphi0, sz_phi[0]): + indi_mv[0, jj] = jj - (loc_nc_rphi - nphi0) + npts_disc += sz_z * sz_phi[0] + # ... doing the others ..................................................... + npts_disc += _st.sa_disc_phi(sz_r, sz_z, ncells_rphi, phistep, + disc_r, disc_r0, step_rphi, + ind_loc_r0, + ncells_r0[0], ncells_z[0], &max_sz_phi[0], + min_phi, max_phi, sz_phi, indi_mv, + margin, num_threads) + # ... vignetting ........................................................... + is_in_vignette = np.ones((sz_r, sz_z), dtype=int) # by default yes + if limit_vpoly is not None: + npts_vpoly = limit_vpoly.shape[1] - 1 + # we make sure it is closed + if not(abs(limit_vpoly[0, 0] - limit_vpoly[0, npts_vpoly]) < _VSMALL + and abs(limit_vpoly[1, 0] + - limit_vpoly[1, npts_vpoly]) < _VSMALL): + poly_mv = np.concatenate((limit_vpoly, limit_vpoly[:,0:1]), axis=1) + else: + poly_mv = limit_vpoly + _ = _vt.are_in_vignette(sz_r, sz_z, + poly_mv, npts_vpoly, + disc_r, disc_z, + is_in_vignette) + # .. preparing for actual discretization ................................... + ind_rz2pol = np.empty((sz_r, sz_z), dtype=int) + npts_pol = _st.sa_get_index_arrays(ind_rz2pol, + is_in_vignette, + sz_r, sz_z) + # initializing arrays + reso_rdrdz = np.empty((npts_pol, )) + sa_map = np.zeros((npts_pol, sz_p)) + pts = np.empty((2, npts_pol)) + ind = -np.ones((npts_pol, ), dtype=int) + pts_mv = pts + ind_mv = ind + reso_rdrdz_mv = reso_rdrdz + reso_r_z = reso_r[0]*reso_z[0] + ind_i = np.sort(ind_i, axis=1) + indi_mv = ind_i + first_ind_mv = np.argmax(ind_i > -1, axis=1).astype(int) + # initializing utilitary arrays + num_threads = _ompt.get_effective_num_threads(num_threads) + lstruct_lims_np = flatten_lstruct_lims(lstruct_lims) + # .............. + # TODO: pour checker si triangle est visible par un point ed discretization + # checker juste si point voit le barycentre du triangle. + _st.sa_assemble_arrays(block, + approx, + ltri, poly_norm, + + is_in_vignette, + sa_map, + ves_poly, + ves_norm, + ves_lims, + lstruct_nlim, + lstruct_polyx, + lstruct_polyy, + lstruct_lims_np, + lstruct_normx, + lstruct_normy, + lnvert, + nstruct_tot, + nstruct_lim, + rmin, + eps_uz, eps_a, + eps_vz, eps_b, + eps_plane, + forbid, + first_ind_mv, + indi_mv, + sz_p, sz_r, sz_z, + ncells_rphi, + reso_r_z, + disc_r, + step_rphi, + disc_z, + ind_rz2pol, + sz_phi, + reso_rdrdz_mv, + pts_mv, + ind_mv, + num_threads) + # ... freeing up memory .................................................... + free(lindex_z) + free(disc_r) + free(disc_z) + free(disc_r0) + free(sz_phi) + free(step_rphi) + free(ncells_rphi) + + return pts, sa_map, ind, reso_r_z diff --git a/tofu/geom/_vignetting_tools.pxd b/tofu/geom/_vignetting_tools.pxd index bc7cd77dd..4e6d9e050 100644 --- a/tofu/geom/_vignetting_tools.pxd +++ b/tofu/geom/_vignetting_tools.pxd @@ -29,6 +29,10 @@ cdef void earclipping_poly(double* vignett, bint* lref, int nvert) nogil +cdef void triangulate_poly(double* vignett_poly, + long nvert, + long** ltri) nogil + cdef int triangulate_polys(double** vignett_poly, long* lnvert, int nvign, diff --git a/tofu/geom/_vignetting_tools.pyx b/tofu/geom/_vignetting_tools.pyx index e3eb38671..a3e14aa5c 100644 --- a/tofu/geom/_vignetting_tools.pyx +++ b/tofu/geom/_vignetting_tools.pyx @@ -239,6 +239,32 @@ cdef inline void earclipping_poly(double* vignett, # ============================================================================== # = Polygons triangulation and Intersection Ray-Poly # ============================================================================== +cdef inline void triangulate_poly(double* vignett_poly, + long nvert, + long** ltri) nogil: + """ + Triangulates a single 3d polygon using the earclipping techinque + https://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf + Returns + ltri: 3*(nvert-2) : + {tri_0_0, tri_0_1, ... tri_0_nvert0} + where tri_i_j are the 3 indices of the vertex forming a sub-triangle + on each vertex (-2) and for each vignett + """ + cdef double* diff = NULL + cdef bint* lref = NULL + # ... + # -- Defining parallel part ------------------------------------------------ + diff = malloc(3*nvert*sizeof(double)) + lref = malloc(nvert*sizeof(bint)) + ltri[0] = malloc((nvert-2)*3*sizeof(long)) + compute_diff3d(vignett_poly, nvert, &diff[0]) + are_points_reflex(nvert, diff, &lref[0]) + earclipping_poly(vignett_poly, <ri[0][0], + &diff[0], &lref[0], nvert) + return + + cdef inline int triangulate_polys(double** vignett_poly, long* lnvert, int nvign, @@ -253,7 +279,7 @@ cdef inline int triangulate_polys(double** vignett_poly, where tri_i_j are the 3 indices of the vertex forming a sub-triangle on each vertex (-2) and for each vignett """ - cdef int ivign, ii + cdef int ivign cdef int nvert cdef double* diff = NULL cdef bint* lref = NULL @@ -279,6 +305,7 @@ cdef inline int triangulate_polys(double** vignett_poly, return 0 + cdef inline bint inter_ray_poly(const double[3] ray_orig, const double[3] ray_vdir, double* vignett, diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index 5eecc8034..53e67c96f 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-05-12 08:38:44 +# Autogenerated by Tofu's setup.py on 2021-05-20 13:01:20 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. From 6c60f4df048a64b1cb3fee42f2cd3b553e9f5ae8 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Fri, 21 May 2021 16:24:31 +0200 Subject: [PATCH 02/29] added notebook and erased useless tex file --- Notebooks/solid_angle_triangle.ipynb | 369 ++++++++++++++++++++ Notes_Upgrades/SA_tetra/SA_tetra.synctex.gz | Bin 21944 -> 0 bytes 2 files changed, 369 insertions(+) create mode 100644 Notebooks/solid_angle_triangle.ipynb delete mode 100644 Notes_Upgrades/SA_tetra/SA_tetra.synctex.gz diff --git a/Notebooks/solid_angle_triangle.ipynb b/Notebooks/solid_angle_triangle.ipynb new file mode 100644 index 000000000..12707522a --- /dev/null +++ b/Notebooks/solid_angle_triangle.ipynb @@ -0,0 +1,369 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "guided-triple", + "metadata": {}, + "source": [ + "# Benchmarking computation of solid angle for triangular aperture" + ] + }, + { + "cell_type": "markdown", + "id": "suffering-buddy", + "metadata": {}, + "source": [ + "From [wikipedia](https://en.wikipedia.org/wiki/Solid_angle#Tetrahedron):\n", + "\n", + "Let OABC be the vertices of a tetrahedron with an origin at $O$ subtended by the triangular face $ABC$ where $\\vec a\\ ,\\, \\vec b\\ ,\\, \\vec c$ are the vector positions of the vertices $A$, $B$ and $C$. Define the vertex angle $\\theta_a$ to be the angle $BOC$ and define $\\theta_b$, $\\theta_c$ correspondingly. Let $\\phi_{ab}$ be the dihedral angle between the planes that contain the tetrahedral faces $OAC$ and $OBC$ and define $\\phi_{ac}$, $\\phi_{bc}$ correspondingly. The solid angle $\\Omega$ subtended by the triangular surface $ABC$ is given by\n", + "\n", + "$$\n", + "\\Omega = \\left(\\phi_{ab} + \\phi_{bc} + \\phi_{ac}\\right)\\ - \\pi\\\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "biological-cedar", + "metadata": {}, + "source": [ + "In ``tofu`` we have the coordinates of the points $O$, $A$, $B$, and $C$. If we want to compute the solid angle this ways, we would have to compute the dihedral angles $\\phi_{ab}$, $\\phi_{bc}$, and $\\phi_{ac}$ first. To do so, the computation of the latter is described as such:" + ] + }, + { + "cell_type": "markdown", + "id": "public-blend", + "metadata": {}, + "source": [ + "\\[...\\] if $\\mathbf{n}_A$ and $\\mathbf{n}_B$ are normal vector to the planes (defining the angle), one has:\n", + "\n", + "$$\\cos \\varphi = \\frac{ \\left\\vert\\mathbf{n}_\\mathrm{A} \\cdot \\mathbf{n}_\\mathrm{B}\\right\\vert}{|\\mathbf{n}_\\mathrm{A} | |\\mathbf{n}_\\mathrm{B}|}$$\n", + "\n", + "where $\\mathbf{n}_A \\cdot \\mathbf{n}_B$ is the dot product of the vectors and $|\\mathbf{n}_\\mathrm{A} | |\\mathbf{n}_\\mathrm{B}|$ is the product of their lengths.\n", + "\n", + "The absolute value is required in above formulas, as the planes are not changed when changing all coefficient signs in one equation, or replacing one normal vector by its opposite.\n" + ] + }, + { + "cell_type": "markdown", + "id": "cross-costs", + "metadata": {}, + "source": [ + "## Example of computation with original formula" + ] + }, + { + "cell_type": "markdown", + "id": "alternative-baker", + "metadata": {}, + "source": [ + "Let's generate four arbitrary points in space and compute the solid angle on the triangle using this formula" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "chicken-fleet", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy\n", + "from mpl_toolkits import mplot3d" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "demonstrated-aruba", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, -1, 5, 7],\n", + " [ 0, -5, -5, -1],\n", + " [ 0, -9, 1, -5]])" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# We create randomly the coordinates of A, B, C\n", + "coord = numpy.random.randint(-10, 10, size=(3, 4))\n", + "# We set O to orign\n", + "coord[:, 0] = 0\n", + "coord" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "typical-separation", + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "executive-memorabilia", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "

" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure()\n", + "ax = plt.axes(projection='3d')\n", + "# we plot the origin in red, A in green, B in blue and C in cyan.\n", + "ax.scatter3D(coord[0], coord[1], coord[2], c=[\"r\", \"g\", \"b\", \"c\"])\n", + "ax.plot_trisurf(coord[0, 1:], coord[1, 1:], coord[2, 1:], shade=False)\n", + "ax.plot([coord[0,0], coord[0,1]], [coord[1,0], coord[1,1]], [coord[2,0], coord[2,1]], c=\"black\")\n", + "ax.plot([coord[0,0], coord[0,2]], [coord[1,0], coord[1,2]], [coord[2,0], coord[2,2]], c=\"black\")\n", + "ax.plot([coord[0,0], coord[0,3]], [coord[1,0], coord[1,3]], [coord[2,0], coord[2,3]], c=\"black\")" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "bizarre-production", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1, -5, -7],\n", + " [ 5, 5, 1],\n", + " [ 9, -1, 5]])" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vectors = coord[:, 0, None] - coord[:, 1:] # [OA; OB; OC]\n", + "vectors = vectors.copy()\n", + "vectors" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "infinite-desire", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-5, -7, 1],\n", + " [ 5, 1, 5],\n", + " [-1, 5, 9]])" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "others = np.roll(vectors, -1, axis=1) # [OB; OC; OA]\n", + "others" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "embedded-agent", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-50, 26, -16],\n", + " [-44, 32, 68],\n", + " [ 30, 30, -36]])" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nA = np.cross(vectors, others, axis=0) # normal of [OAB; OBC; OCA]\n", + "nA" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "present-vaccine", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-35, 86, -17],\n", + " [ 74, 98, 34],\n", + " [ 34, -26, 17]])" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nB = np.roll(nA, 1, axis=1) # normal of OCA, OAB, OBC\n", + "nB" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "driven-farmer", + "metadata": {}, + "outputs": [], + "source": [ + "norms = np.linalg.norm(nA, axis=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "generic-profile", + "metadata": {}, + "outputs": [], + "source": [ + "phiAB = np.arccos(np.abs(np.dot(nA[:, 2], nA[:,1]))/ (norms[2] * norms[1])) # OAC OBC" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "id": "raised-yahoo", + "metadata": {}, + "outputs": [], + "source": [ + "phiBC = np.arccos(np.abs(np.dot(nA[:, 0], nA[:,2]))/ (norms[0] * norms[2])) # OAB OAC" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "latin-lounge", + "metadata": {}, + "outputs": [], + "source": [ + "phiAC = np.arccos(np.abs(np.dot(nA[:, 0], nA[:,1]))/ (norms[0] * norms[1])) # OAB OBC" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "naked-occurrence", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1.4002763334109076, 0.9643273930827477, 1.0639705015950622)" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "phiAB, phiBC, phiAC" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "id": "inner-bibliography", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.28698157449892436" + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res_f1 = phiAB + phiBC + phiAC - np.pi; res_f1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "norwegian-scheme", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "continuing-ferry", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Notes_Upgrades/SA_tetra/SA_tetra.synctex.gz b/Notes_Upgrades/SA_tetra/SA_tetra.synctex.gz deleted file mode 100644 index 13e5115830ca33024adf385a9d7333c6534cbfda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21944 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 z ztK1SjS$DmNjA{#!h@2|3P!GMj!>f;aMUT7dHjJXG2L=RrwteCzG5YefNWlPIM~JkC z#*H?n8ggLf^SbvR9`-&?4kGFWNY%TmlDVU02i$V0S~tdStK+n4iYMmxr4fuywXU}L z(ScsMu0iiXp!0v+CfbvoCj+gB7vQknAM$HjEY_Fq>Nu3~!dgcfK;Gx#`qu(@V_fJYcmA{A43ZL@2LC@` zD+`pw8xr=2+)~NZ*TQoU8nV+eEiMIX8M|MlZD{g@0v3~>5}!=pM(p0_CXX@fQ&M>U zK-dW@=hnrRas_kxS0D}ET!7$c(JL27fVstJGCXhe>%sxl@;GK?phfrO9`b8mqRf$A z{4nOih5I7onf%TXJlmIIxv^idJUhfV1&S5oH!YAQj|`?pTpAj@vGXp792QGhQ{{GKhR&XnB4 zF41kNE;nQ0QRg8lK^QrWMslbjjRdSd_V%xTVdM}ML1h+tQ;A`L81AbXpdh$y7>QG$ z8@uDq&|&vL1d-lssP&YDo%d&b7t`mKnuq1Rq3Oeu`gxUaR2}J}7VgpTtD>Rm0w`R&I}w4hj;LOpX!q&Mv3N$Y`I=O>DDEKJ z6FT3Yup(=fu|Caahz@M{@N%0fIrJNA(yV=@$ z(&%Mzb1@%|F=5gSXE&a-p^#x>BEGWP%w9~RIoJ=q;{bE>z@7V=x$PO6L@088D&XFL zJuy#(c`I%%@tH7yB3p}28kO$L@yGdw#c88oQ8TrF{=jf+^CX^vK%K2h{Z4{Ep2;or zBk7}sIN(|tV8_c{DPETqSfW0lOBY{>`({J9zV*PROjpaTaL?tXk2x2t#FtHGNx2Krv}aYy>z2gaU+8>8Ejjq?R-{@D{tHg6sgqk85R z-(zPwi1HbVZAqLhv~r-8WcH3b*(KW+a?z-~YCy-IPk4K8UwywAi7dO}1bU{@CB(Jk zRxOn;p1iqeYp7TSSyxfw(YZF+OuN=;9XBWNhp(ORFkCznSMFrkcEFf8P;gOf^7@gjXncSr-kNvGuaIA!m{1}*gWb)yA=Ij(9 zTRsGjRPm4)OB26s=pyKbW~vIoaZ4cWk%(SCV+gj<*k{?=psvthUN4w`(6W>jptm|kfBD^w#5ntCCez9I0T}3%s z{y8IQ*MvjdYFPTBvM@~w{c1KFMR@c67L6PF{Yu_RA_1dgUvc|2!9(v}fZJVaC^5A# zxUk1ke?}JM*CgmnWe^xW&c_1tZ%)f#L`-mvg9JaiQkE&dh8aZ{vxVWfvql?D_Q{S- zD%r@RUbnx+Z8~K@q$*P;3F}?FO~5jm{*^^KajgS)lo8x2DO)W&($TZQq{t}hbknyS z?-y2>95f%0yYT_*uUlkVL{Y2I7d_9_qK!J@Q%Q~s7WW?&)g&LC5X{HlVN?C}DmSf9 z_diXO8GwjLHj%b9DrmGbDAk&YBWp3!E7J* zPmn40u}}J{&}OmL+YIL;6OrdFhO_W{+m~fJV>m?OCPlfoebO|h>O<8BCp3Z+YNtKE zvQjRnHOs5~1T+W(lbz?eH9*gND31=>b5U+cyy1^Q{MbnWRSPCcml+wuqH6S-MHQPT ziud1_CZSXpFm}xK1bk4htRScAkP>SVO{QrYKk0*e?h29o4anV5Z8uC|f{D{8KdPgbKVF6z&{?l3%&M?26Ps-L#Yj%B$Dhlh~%usoA#E)Vlgoh z)KQn3bDN#XiWLl0a$Udgp*Qqpn7@E9Xy0V7u~7fn;o(VhW1+tLu{AZ!a5#OF>a365 zcva~GmFk%&sJF+-B+%k!*v997R=vFun#ZwMLqKq7m$#^{v{^&MeMXK`^khDeQySkr z(f37!t7*MZIff=N1M)AVwVyV#jO&^Qv_P&Z?lclmb1X~44-4(=c^l%%fZvqivHRuc zhN&*i^~Tk!iIuM1sv!hSC8~(fr5=nxX!0lvjjC`PhoWJBP+56<*4x_urtOvX%+vhAW+n#G_E$k+@$PWVKRd5Hr$_(U| zMuEQ;f2HkNS_EL_sfhqdN-NUuvfE<nX{S@o1*rz8Mkq-U!+~pH7EkMz09~AVgItm|43@Ij(%s_dSW^V&*$01VVU%6p#c2T zpj1GU5<#_RB*N0y{S6e zVnZg8D%*V)DaQ?zQz#hKN5A$LR=lJ+4W6SVU$ihTk+L$WXXT<4!+(@fzNS#$drtSB z!`VBq{?78*^t!Nsz*EJe}X+x!yQo<8)Q?XJ`7#4a- zg2p9oXIvBh=`1;D)b>}-%9|Urd>7P}d@CPSX-)0ya)v)nsmasqlWu1M-#65{bkY_? z1Byh3*lDjSS$TZvY-46Nx2FItYUsp`_YU5@fwq&5bPG`? zZ_8t8xMtC#$Kzf?%7Gx1Df|EWLpe}$QDW;@j%V((KIQfKMiwfj7>ZIE8xhGj3QpAO z-4g(>OkZ}EosV6J(%KzY3!z1^Seh^c>Rwk1yfuFC+D5_mpaK^ZD=$WaY5}}Sb;Kp0Vb7xlzzDS%V@Xn^0W%e0oxw&H%wQt4fS7sr)7v{)9W{vBZ#8MR4aa@cwPb)Oea?_T zQ1Ll(Rmj4zPy-~ z(B!_>a)Nx6h2S$Qo!T0UTw#pol0wdv%*}ic^L}AM9P5vtEzx`*l=$4-3thqVEOFQ9 zt%6y}rL)%0Ua~$KDq&M}wSX+!8w0W8Z`rPS&@RRLTaokSlY0=NjrHn!7L#9=qx4E@}YhEaUEs^Ya8JD<7`1DZY;7 zWi43hJU#jyxgS7({kno~K<9YoDZ9%fW^q*pLAz0E9jTLf(=`gp0`~3icdssg?{!fK zlC^bs0IG&u8$Pg|x;{Obkusk`$ve`9ms$TW5CK)L(fNCBGX{sJVBdzN+vL@O_Ha1t zRWNh#&PDNT(5;Aox&%iC87{Y#-TQQ(^$2lJ_T3kYk)Vde2>|c;bHUyesBX;jD=IqV zs|gA*e$vC+&Lk8Nb}3E$Em0Qnf^-KVFUwy@5548!%ysr>OXNdDRBmtdK_>*IJbmAB z*$`!JsQ4*id<`mmU@w+G28~*yOAqfo61TbIIb5mO*XBzsee?Z)@A`KGkx~4UO#K{d zvY#jX1d$a)0UnP=K#|-$8SN(`N4A-gSsHoIwId_i)e6@$G$h9 zd9?XI<>OIh+QF3RtRi=og9{g&12u9S>y+72j}QhO`_S6A$MY=68Du_Vtuhk5#dKO| zlU4IeIG-x5;mg1dt-PhPEKfebo|u}9xeXquZ;g3LjLT$O>M<1kDuu1+7SpHFx=9RC zxrx?NgitVmw`T(?D8{d9nhP#k*45RBc)W^tFu-;R*Xkto(pnFV4HdjAc|%hA;Xflz zM0jT^6?wX@zgU%M9rt-B%xEzDIv(!&7$}uf0)h-fts$Gakao6Va0TV}{lW+Dd}H*z zeR4|ZXYP^<6EkEn5}#9I;^ay$OyAb)B(Q0;)S~{M?oRJalF11`<(;s~kD;g3wd|zt zcdalx14#3&jNa6I%H%{_1@UyFEJ^U$D4DR~L8f>$6BLrIP zo`N14W98bHoEaR;;-c|&u;l=3jFrEz@)~?{^?_}xi=7ZI@rilQGPJ@Nc{+CUiH^}o zLdkt(4W-tQh6VZ|6`p=oqGdVCbI zoX2V}kJy!Ea}vm-$9+psEqc$_@&j;1ab?I)SrT=-At&ZcO|m3=*6$dn;{aW32aNFK zf~HJpg;#Pc4t2%VmQy$cHHu^rn`~@OU~k%2(kzt;x755?S)2__p@wAvN{SrpepB-Gen20$4)v(mwNyDrjc5<-BtbVq? zJy@k4e$l|Z6LBon-uCx=jk!JSe6OqhqU`VQgRZHyVD&Kd@Ux4BorsnbXnEB|Ulpva x?etHT`f~*0pdjM>9D;lEh34>+`Ngln)3uTI=jZ2Z3D$qrAB~MsK~MmS{{s&wEEoU) From b8eb6e250e745980a4e120bd64b33e81096315b7 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Fri, 21 May 2021 18:02:05 +0200 Subject: [PATCH 03/29] new notations --- Notebooks/solid_angle_triangle.ipynb | 106 +++++++++-------- Notes_Upgrades/SA_tetra/SA_tetra.pdf | Bin 115038 -> 123868 bytes Notes_Upgrades/SA_tetra/SA_tetra.tex | 163 +++++++++++++++------------ 3 files changed, 151 insertions(+), 118 deletions(-) diff --git a/Notebooks/solid_angle_triangle.ipynb b/Notebooks/solid_angle_triangle.ipynb index 12707522a..f81a484b6 100644 --- a/Notebooks/solid_angle_triangle.ipynb +++ b/Notebooks/solid_angle_triangle.ipynb @@ -62,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 4, "id": "chicken-fleet", "metadata": {}, "outputs": [], @@ -73,19 +73,19 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 5, "id": "demonstrated-aruba", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[ 0, -1, 5, 7],\n", - " [ 0, -5, -5, -1],\n", - " [ 0, -9, 1, -5]])" + "array([[ 0, -1, -3, -8],\n", + " [ 0, 1, 6, 6],\n", + " [ 0, 1, 5, -10]])" ] }, - "execution_count": 60, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -100,7 +100,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 6, "id": "typical-separation", "metadata": {}, "outputs": [], @@ -111,23 +111,23 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 7, "id": "executive-memorabilia", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 62, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -151,44 +151,43 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 8, "id": "bizarre-production", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[ 1, -5, -7],\n", - " [ 5, 5, 1],\n", - " [ 9, -1, 5]])" + "array([[ 1, 3, 8],\n", + " [-1, -6, -6],\n", + " [-1, -5, 10]])" ] }, - "execution_count": 67, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vectors = coord[:, 0, None] - coord[:, 1:] # [OA; OB; OC]\n", - "vectors = vectors.copy()\n", "vectors" ] }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 9, "id": "infinite-desire", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[-5, -7, 1],\n", - " [ 5, 1, 5],\n", - " [-1, 5, 9]])" + "array([[ 3, 8, 1],\n", + " [-6, -6, -1],\n", + " [-5, 10, -1]])" ] }, - "execution_count": 68, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -200,19 +199,19 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 10, "id": "embedded-agent", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[-50, 26, -16],\n", - " [-44, 32, 68],\n", - " [ 30, 30, -36]])" + "array([[ -1, -90, 16],\n", + " [ 2, -70, 18],\n", + " [ -3, 30, -2]])" ] }, - "execution_count": 71, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -224,19 +223,19 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 11, "id": "present-vaccine", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[-35, 86, -17],\n", - " [ 74, 98, 34],\n", - " [ 34, -26, 17]])" + "array([[ 16, -1, -90],\n", + " [ 18, 2, -70],\n", + " [ -2, -3, 30]])" ] }, - "execution_count": 58, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -248,7 +247,7 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 12, "id": "driven-farmer", "metadata": {}, "outputs": [], @@ -258,7 +257,7 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 13, "id": "generic-profile", "metadata": {}, "outputs": [], @@ -268,7 +267,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 14, "id": "raised-yahoo", "metadata": {}, "outputs": [], @@ -278,7 +277,7 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 15, "id": "latin-lounge", "metadata": {}, "outputs": [], @@ -288,17 +287,17 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 16, "id": "naked-occurrence", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(1.4002763334109076, 0.9643273930827477, 1.0639705015950622)" + "(0.2508036166329773, 1.2791357466336846, 1.247848641316634)" ] }, - "execution_count": 86, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -309,17 +308,17 @@ }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 17, "id": "inner-bibliography", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.28698157449892436" + "-0.36380464900649745" ] }, - "execution_count": 88, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -330,11 +329,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "norwegian-scheme", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "78.5 µs ± 3.61 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "vectors = coord[:, 0, None] - coord[:, 1:]\n", + "nA = np.cross(vectors, others, axis=0) # normal of [OAB; OBC; OCA]\n", + "norms = np.linalg.norm(nA, axis=0)\n", + "phiAB = np.arccos(np.abs(np.dot(nA[:, 2], nA[:,1]))/ (norms[2] * norms[1])) # OAC OBC\n", + "phiBC = np.arccos(np.abs(np.dot(nA[:, 0], nA[:,2]))/ (norms[0] * norms[2])) # OAB OAC\n", + "phiAC = np.arccos(np.abs(np.dot(nA[:, 0], nA[:,1]))/ (norms[0] * norms[1])) # OAB OBC\n", + "res_f1 = phiAB + phiBC + phiAC - np.pi; res_f1" + ] }, { "cell_type": "code", diff --git a/Notes_Upgrades/SA_tetra/SA_tetra.pdf b/Notes_Upgrades/SA_tetra/SA_tetra.pdf index db8276265025a67292bda6b2ba763ab3a232455d..e3245e87119411f3c1f7e86cc48cdf48dbca6817 100644 GIT binary patch delta 62525 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⪻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 LGBPoFap?a8D7X`T delta 53549 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

4`-t^b_U0p(D%kj5ao`F_YT9@M31IZ#E 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

" ] @@ -141,9 +141,10 @@ "source": [ "fig = plt.figure()\n", "ax = plt.axes(projection='3d')\n", + "coord[:, 0] = np.sum(coord[:, 1:], axis=1) / 3.\n", "# we plot the origin in red, A in green, B in blue and C in cyan.\n", - "ax.scatter3D(coord[0], coord[1], coord[2], c=[\"r\", \"g\", \"b\", \"c\"])\n", "ax.plot_trisurf(coord[0, 1:], coord[1, 1:], coord[2, 1:], shade=False)\n", + "ax.scatter3D(coord[0], coord[1], coord[2], c=[\"r\", \"g\", \"b\", \"c\"])\n", "ax.plot([coord[0,0], coord[0,1]], [coord[1,0], coord[1,1]], [coord[2,0], coord[2,1]], c=\"black\")\n", "ax.plot([coord[0,0], coord[0,2]], [coord[1,0], coord[1,2]], [coord[2,0], coord[2,2]], c=\"black\")\n", "ax.plot([coord[0,0], coord[0,3]], [coord[1,0], coord[1,3]], [coord[2,0], coord[2,3]], c=\"black\")" diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index 446c63373..1657c1516 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -4885,7 +4885,7 @@ def compute_solid_angle_map(double[:,::1] part_coords, double[::1] part_r, num_threads = _ompt.get_effective_num_threads(num_threads) lstruct_lims_np = flatten_lstruct_lims(lstruct_lims) # .............. - _st.sa_assemble_arrays(block, + _st.sa_sphere_assemble(block, approx, part_coords, part_r, @@ -4939,8 +4939,9 @@ def compute_solid_angle_map(double[:,::1] part_coords, double[::1] part_r, # subtended by a polygon # # ============================================================================== -def compute_solid_angle_poly_map(double[:,::1] poly_coords, - double[:] poly_norm, +def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, + double[:, ::1] poly_norm, + long[::1] lnvert_poly, double rstep, double zstep, double phistep, double[::1] RMinMax, double[::1] ZMinMax, bint approx=True, @@ -4956,7 +4957,7 @@ def compute_solid_angle_poly_map(double[:,::1] poly_coords, list lstruct_lims=None, double[::1] lstruct_normx=None, double[::1] lstruct_normy=None, - long[::1] lnvert=None, + long[::1] lstruct_nvert=None, int nstruct_tot=0, int nstruct_lim=0, double rmin=-1, bint forbid=True, @@ -4966,18 +4967,19 @@ def compute_solid_angle_poly_map(double[:,::1] poly_coords, double margin=_VSMALL, int num_threads=48, bint test=True): """ - Computes the 2D map of the integrated solid angles subtended by a polygon - of coordinates poly_coords, not necessarily flat, one sided and side defined - by poly_norm, nomal vector of polygon. + Computes the 2D map of the integrated solid angles subtended by a list of + npoly polygons of coordinates poly_coords[npoly], not necessarily flat, + one sided and side defined by poly_norm[npoly], nomal vector of polygon. Parameters ---------- poly_coords: double array - coordinates of the points defining the polygon. + coordinates of the points defining the polygons. not necessarily flat. - poly_coords[i] being the i-th coordinate + poly_coords[np, i] being the i-th coordinate of the np polygon poly_norm: double array - normal vector that defines the visble face of the polygon + normal vector that defines the visible face of the polygon + poly_norm[np] defines the norm of the np-th polygon rstep: double refinement along radius `r` zstep: double @@ -5062,10 +5064,12 @@ def compute_solid_angle_poly_map(double[:,::1] poly_coords, cdef int sz_p cdef int sz_r cdef int sz_z - cdef int npts_pol + cdef int npoly cdef int r_ratio + cdef int npts_pol cdef int ind_loc_r0 cdef int npts_disc = 0 + cdef int tot_num_tri cdef int[1] max_sz_phi cdef double min_phi, max_phi cdef double min_phi_pi @@ -5094,11 +5098,14 @@ def compute_solid_angle_poly_map(double[:,::1] poly_coords, cdef double* disc_r = NULL cdef double* disc_z = NULL cdef double* step_rphi = NULL + cdef double** data = NULL cdef np.ndarray[long, ndim=2] indI cdef np.ndarray[long, ndim=1] ind cdef np.ndarray[double, ndim=1] reso_rdrdz cdef np.ndarray[double, ndim=2] pts cdef np.ndarray[double, ndim=2] sa_map + cdef np.ndarray[double, ndim=2] centroids + cdef np.ndarray[double, ndim=2, mode="c"] temp # # == Testing inputs ======================================================== if test: @@ -5126,13 +5133,31 @@ def compute_solid_angle_poly_map(double[:,::1] poly_coords, assert ves_type.lower() in ['tor', 'lin'], msg # ... # .. Getting size of arrays ................................................ - # TODO : faire algo pour plusieurs polys. - nvert = poly_coords.shape[1] - ltri = malloc(sizeof(long*)) - _vt.triangulate_poly(&poly_coords[0,0], nvert, ltri) - # TODO: pas besoin de rajouter le calcul d'un vecteur normal, prendre celui du - # poly pour tous les tris. - # TODO: calcul barycentre des triangles + npoly = poly_coords.shape[0] + # .. Dividing polys in triangles ........................................... + ltri = malloc(sizeof(long*) * npoly) + # re writting_polygons coordinates to C type: + data = malloc(npoly * sizeof(double *)) + for ii in range(npoly): + temp = poly_coords[ii] + data[ii] = &temp[0, 0] + _vt.triangulate_polys( + &data[0], + &lnvert_poly[0], + npoly, + ltri, + num_threads + ) + # .. Getting centroids of triangles ....................................... + centroids = np.zeros((3, tot_num_tri)) + _bgt.find_centroids_ltri( + poly_coords, + ltri, + &lnvert_poly[0], + npoly, + num_threads, + centroids, + ) # # .. Check if points are visible ........................................... # Get the actual R and Z resolutions and mesh elements # .. First we discretize R without limits .................................. @@ -5267,7 +5292,7 @@ def compute_solid_angle_poly_map(double[:,::1] poly_coords, sz_r, sz_z) # initializing arrays reso_rdrdz = np.empty((npts_pol, )) - sa_map = np.zeros((npts_pol, sz_p)) + sa_map = np.zeros((npts_pol, npoly)) pts = np.empty((2, npts_pol)) ind = -np.ones((npts_pol, ), dtype=int) pts_mv = pts @@ -5283,43 +5308,46 @@ def compute_solid_angle_poly_map(double[:,::1] poly_coords, # .............. # TODO: pour checker si triangle est visible par un point ed discretization # checker juste si point voit le barycentre du triangle. - _st.sa_assemble_arrays(block, - approx, - ltri, poly_norm, - - is_in_vignette, - sa_map, - ves_poly, - ves_norm, - ves_lims, - lstruct_nlim, - lstruct_polyx, - lstruct_polyy, - lstruct_lims_np, - lstruct_normx, - lstruct_normy, - lnvert, - nstruct_tot, - nstruct_lim, - rmin, - eps_uz, eps_a, - eps_vz, eps_b, - eps_plane, - forbid, - first_ind_mv, - indi_mv, - sz_p, sz_r, sz_z, - ncells_rphi, - reso_r_z, - disc_r, - step_rphi, - disc_z, - ind_rz2pol, - sz_phi, - reso_rdrdz_mv, - pts_mv, - ind_mv, - num_threads) + _st.sa_tri_assemble( + block, + approx, + poly_coords, + ltri[0], poly_norm, + centroids, + is_in_vignette, + sa_map, + ves_poly, + ves_norm, + ves_lims, + lstruct_nlim, + lstruct_polyx, + lstruct_polyy, + lstruct_lims_np, + lstruct_normx, + lstruct_normy, + lstruct_nvert, + nstruct_tot, + nstruct_lim, + rmin, + eps_uz, eps_a, + eps_vz, eps_b, + eps_plane, + forbid, + first_ind_mv, + indi_mv, + npoly, sz_r, sz_z, + ncells_rphi, + reso_r_z, + disc_r, + step_rphi, + disc_z, + ind_rz2pol, + sz_phi, + reso_rdrdz_mv, + pts_mv, + ind_mv, + num_threads + ) # ... freeing up memory .................................................... free(lindex_z) free(disc_r) diff --git a/tofu/geom/_basic_geom_tools.pxd b/tofu/geom/_basic_geom_tools.pxd index 4047fd300..5acdab826 100644 --- a/tofu/geom/_basic_geom_tools.pxd +++ b/tofu/geom/_basic_geom_tools.pxd @@ -66,6 +66,13 @@ cdef void compute_cross_prod(const double[3] vec_a, const double[3] vec_b, double[3] res) nogil +cdef void find_centroids_ltri(const double[:, :, ::1] poly_coords, + const long** ltri, + const long* lnvert, + const int npoly, + const int num_threads, + double[:, ::1] centroid) nogil + cdef void compute_dist_pt_vec(const double pt0, const double pt1, const double pt2, const int npts, const double[:, ::1] vec, diff --git a/tofu/geom/_basic_geom_tools.pyx b/tofu/geom/_basic_geom_tools.pyx index 2fd91e399..d096faea0 100644 --- a/tofu/geom/_basic_geom_tools.pyx +++ b/tofu/geom/_basic_geom_tools.pyx @@ -4,12 +4,15 @@ # cython: cdivision=True # cython: initializedcheck=False # -from cython.parallel import prange -from cpython.array cimport array, clone from libc.math cimport sqrt as c_sqrt from libc.math cimport NAN as CNAN from libc.math cimport pi as c_pi -from libc.stdlib cimport malloc, free +from libc.stdlib cimport free +from libc.stdlib cimport malloc +from cpython.array cimport clone +from cpython.array cimport array +from cython.parallel import prange +from cython.parallel cimport parallel # cdef double _VSMALL = 1.e-9 cdef double _SMALL = 1.e-6 @@ -54,6 +57,7 @@ cdef inline bint is_point_in_path(const int nvert, c = not c return c + cdef inline int is_point_in_path_vec(const int nvert, const double* vertx, const double* verty, @@ -287,6 +291,50 @@ cdef inline int find_ind_lowerright_corner(const double[::1] xpts, return res +cdef inline void find_centroid_tri(const double[3] xpts, + const double[3] ypts, + const double[3] zpts, + double[::1] centroid) nogil: + centroid[0] = (xpts[0] + xpts[1] + xpts[2]) / 3. + centroid[1] = (ypts[0] + ypts[1] + ypts[2]) / 3. + centroid[2] = (zpts[0] + zpts[1] + zpts[2]) / 3. + return + + +cdef inline void find_centroids_ltri(const double[:, :, ::1] poly_coords, + const long** ltri, + const long* lnvert, + const int npoly, + const int num_threads, + double[:, ::1] centroid) nogil: + cdef int ipol + cdef int itri + cdef int wim1 + cdef int wi + cdef int wip1 + cdef double[3] xtri + cdef double[3] ytri + cdef double[3] ztri + + with nogil, parallel(num_threads=num_threads): + for ipol in prange(npoly): + for itri in range(lnvert[ipol] - 2): + wim1 = ltri[ipol][itri*3] + wi = ltri[ipol][itri*3+1] + wip1 = ltri[ipol][itri*3+2] + xtri[0] = poly_coords[ipol, 0, wim1] + ytri[0] = poly_coords[ipol, 1, wim1] + ztri[0] = poly_coords[ipol, 2, wim1] + xtri[1] = poly_coords[ipol, 0, wi] + ytri[1] = poly_coords[ipol, 1, wi] + ztri[1] = poly_coords[ipol, 2, wi] + xtri[2] = poly_coords[ipol, 0, wip1] + ytri[2] = poly_coords[ipol, 1, wip1] + ztri[2] = poly_coords[ipol, 2, wip1] + find_centroid_tri(xtri, ytri, ztri, + centroid[ipol]) + return + # ============================================================================== # = Distance # ============================================================================== diff --git a/tofu/geom/_sampling_tools.pxd b/tofu/geom/_sampling_tools.pxd index 25794a699..4834161c7 100644 --- a/tofu/geom/_sampling_tools.pxd +++ b/tofu/geom/_sampling_tools.pxd @@ -253,7 +253,7 @@ cdef int sa_get_index_arrays(long[:, ::1] lnp, int sz_r, int sz_z) nogil -cdef void sa_assemble_arrays(int block, +cdef void sa_sphere_assemble(int block, int use_approx, double[:, ::1] part_coords, double[::1] part_rad, @@ -291,3 +291,46 @@ cdef void sa_assemble_arrays(int block, double[:, ::1] pts_mv, long[::1] ind_mv, int num_threads) + +cdef void sa_tri_assemble( + int block, + int use_approx, + double[:, :, ::1] poly_coords, + long** ltri, + double[:, ::1] poly_norm, + double[:, ::1] centroids, + long[:, ::1] is_in_vignette, + double[:, ::1] sa_map, + double[:, ::1] ves_poly, + double[:, ::1] ves_norm, + double[::1] ves_lims, + long[::1] lstruct_nlim, + double[::1] lstruct_polyx, + double[::1] lstruct_polyy, + double[::1] lstruct_lims, + double[::1] lstruct_normx, + double[::1] lstruct_normy, + long[::1] lnvert, + int nstruct_tot, + int nstruct_lim, + double rmin, + double eps_uz, double eps_a, + double eps_vz, double eps_b, + double eps_plane, + bint forbid, + long[::1] first_ind, + long[:, ::1] indi_mv, + int num_tot_tri, + int sz_r, int sz_z, + long* ncells_rphi, + double reso_r_z, + double* disc_r, + double* step_rphi, + double* disc_z, + long[:, ::1] ind_rz2pol, + long* sz_phi, + double[::1] reso_rdrdz, + double[:, ::1] pts_mv, + long[::1] ind_mv, + int num_threads +) diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index 6fbb37777..90834637e 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -2040,7 +2040,10 @@ cdef inline int sa_disc_phi(int sz_r, int sz_z, return npts_disc -cdef inline void sa_assemble_arrays(int block, +# ------------------------------------------------------------------------------ +# -- Solid Angle Computation subtended by a SPHERE +# ------------------------------------------------------------------------------ +cdef inline void sa_sphere_assemble(int block, int use_approx, double[:, ::1] part_coords, double[::1] part_rad, @@ -2093,45 +2096,45 @@ cdef inline void sa_assemble_arrays(int block, coeff_inter_out = clone(array('d'), sz_p, True) ind_inter_out = clone(array('i'), sz_p * 3, True) - assemble_block_approx(part_coords, part_rad, - is_in_vignette, - sa_map, - ves_poly, ves_norm, - ves_lims, - lstruct_nlim, - lstruct_polyx, - lstruct_polyy, - lstruct_lims, - lstruct_normx, - lstruct_normy, - lnvert, vperp_out, - coeff_inter_in, coeff_inter_out, - ind_inter_out, sz_ves_lims, - ray_orig, ray_vdir, npts_poly, - nstruct_tot, nstruct_lim, - rmin, - eps_uz, eps_a, - eps_vz, eps_b, eps_plane, - forbid, - first_ind, indi_mv, - sz_p, sz_r, sz_z, - ncells_rphi, - reso_r_z, disc_r, step_rphi, - disc_z, ind_rz2pol, sz_phi, - reso_rdrdz, pts_mv, ind_mv, - num_threads) - elif not block and use_approx: - assemble_unblock_approx(part_coords, part_rad, + sphr_asmbl_block_approx(part_coords, part_rad, is_in_vignette, sa_map, + ves_poly, ves_norm, + ves_lims, + lstruct_nlim, + lstruct_polyx, + lstruct_polyy, + lstruct_lims, + lstruct_normx, + lstruct_normy, + lnvert, vperp_out, + coeff_inter_in, coeff_inter_out, + ind_inter_out, sz_ves_lims, + ray_orig, ray_vdir, npts_poly, + nstruct_tot, nstruct_lim, + rmin, + eps_uz, eps_a, + eps_vz, eps_b, eps_plane, + forbid, first_ind, indi_mv, sz_p, sz_r, sz_z, ncells_rphi, reso_r_z, disc_r, step_rphi, - disc_z, ind_rz2pol, - sz_phi, + disc_z, ind_rz2pol, sz_phi, reso_rdrdz, pts_mv, ind_mv, num_threads) + elif not block and use_approx: + sphr_asmbl_unblock_approx(part_coords, part_rad, + is_in_vignette, + sa_map, + first_ind, indi_mv, + sz_p, sz_r, sz_z, + ncells_rphi, + reso_r_z, disc_r, step_rphi, + disc_z, ind_rz2pol, + sz_phi, + reso_rdrdz, pts_mv, ind_mv, + num_threads) elif block: # .. useless tabs ..................................................... # declared here so that cython can run without gil @@ -2147,92 +2150,92 @@ cdef inline void sa_assemble_arrays(int block, coeff_inter_out = clone(array('d'), sz_p, True) ind_inter_out = clone(array('i'), sz_p * 3, True) - assemble_block_exact(part_coords, part_rad, - is_in_vignette, - sa_map, - ves_poly, ves_norm, - ves_lims, - lstruct_nlim, - lstruct_polyx, - lstruct_polyy, - lstruct_lims, - lstruct_normx, - lstruct_normy, - lnvert, vperp_out, - coeff_inter_in, coeff_inter_out, - ind_inter_out, sz_ves_lims, - ray_orig, ray_vdir, npts_poly, - nstruct_tot, nstruct_lim, - rmin, - eps_uz, eps_a, - eps_vz, eps_b, eps_plane, - forbid, - first_ind, indi_mv, - sz_p, sz_r, sz_z, - ncells_rphi, - reso_r_z, disc_r, step_rphi, - disc_z, ind_rz2pol, sz_phi, - reso_rdrdz, pts_mv, ind_mv, - num_threads) - else: - assemble_unblock_exact(part_coords, part_rad, + sphr_asmbl_block_exact(part_coords, part_rad, is_in_vignette, sa_map, + ves_poly, ves_norm, + ves_lims, + lstruct_nlim, + lstruct_polyx, + lstruct_polyy, + lstruct_lims, + lstruct_normx, + lstruct_normy, + lnvert, vperp_out, + coeff_inter_in, coeff_inter_out, + ind_inter_out, sz_ves_lims, + ray_orig, ray_vdir, npts_poly, + nstruct_tot, nstruct_lim, + rmin, + eps_uz, eps_a, + eps_vz, eps_b, eps_plane, + forbid, first_ind, indi_mv, sz_p, sz_r, sz_z, ncells_rphi, reso_r_z, disc_r, step_rphi, - disc_z, ind_rz2pol, - sz_phi, + disc_z, ind_rz2pol, sz_phi, reso_rdrdz, pts_mv, ind_mv, num_threads) + else: + sphr_asmbl_unblock_exact(part_coords, part_rad, + is_in_vignette, + sa_map, + first_ind, indi_mv, + sz_p, sz_r, sz_z, + ncells_rphi, + reso_r_z, disc_r, step_rphi, + disc_z, ind_rz2pol, + sz_phi, + reso_rdrdz, pts_mv, ind_mv, + num_threads) return -cdef inline void assemble_block_approx(double[:, ::1] part_coords, - double[::1] part_rad, - long[:, ::1] is_in_vignette, - double[:, ::1] sa_map, - double[:, ::1] ves_poly, - double[:, ::1] ves_norm, - double[::1] ves_lims, - long[::1] lstruct_nlim, - double[::1] lstruct_polyx, - double[::1] lstruct_polyy, - double[::1] lstruct_lims, - double[::1] lstruct_normx, - double[::1] lstruct_normy, - long[::1] lnvert, - double[::1] vperp_out, - double[::1] coeff_inter_in, - double[::1] coeff_inter_out, - int[::1] ind_inter_out, - int sz_ves_lims, - double[:, ::1] ray_orig, - double[:, ::1] ray_vdir, - int npts_poly, - int nstruct_tot, - int nstruct_lim, - double rmin, - double eps_uz, double eps_a, - double eps_vz, double eps_b, - double eps_plane, - bint forbid, - long[::1] first_ind_mv, - long[:, ::1] indi_mv, - int sz_p, - int sz_r, int sz_z, - long* ncells_rphi, - double reso_r_z, - double* disc_r, - double* step_rphi, - double* disc_z, - long[:, ::1] ind_rz2pol, - long* sz_phi, - double[::1] reso_rdrdz, - double[:, ::1] pts_mv, - long[::1] ind_mv, - int num_threads) nogil: +cdef inline void sphr_asmbl_block_approx(double[:, ::1] part_coords, + double[::1] part_rad, + long[:, ::1] is_in_vignette, + double[:, ::1] sa_map, + double[:, ::1] ves_poly, + double[:, ::1] ves_norm, + double[::1] ves_lims, + long[::1] lstruct_nlim, + double[::1] lstruct_polyx, + double[::1] lstruct_polyy, + double[::1] lstruct_lims, + double[::1] lstruct_normx, + double[::1] lstruct_normy, + long[::1] lnvert, + double[::1] vperp_out, + double[::1] coeff_inter_in, + double[::1] coeff_inter_out, + int[::1] ind_inter_out, + int sz_ves_lims, + double[:, ::1] ray_orig, + double[:, ::1] ray_vdir, + int npts_poly, + int nstruct_tot, + int nstruct_lim, + double rmin, + double eps_uz, double eps_a, + double eps_vz, double eps_b, + double eps_plane, + bint forbid, + long[::1] first_ind_mv, + long[:, ::1] indi_mv, + int sz_p, + int sz_r, int sz_z, + long* ncells_rphi, + double reso_r_z, + double* disc_r, + double* step_rphi, + double* disc_z, + long[:, ::1] ind_rz2pol, + long* sz_phi, + double[::1] reso_rdrdz, + double[:, ::1] pts_mv, + long[::1] ind_mv, + int num_threads) nogil: cdef int rr cdef int zz cdef int jj @@ -2305,7 +2308,7 @@ cdef inline void assemble_block_approx(double[:, ::1] part_coords, for pp in range(sz_p): if is_vis[pp] and dist[pp] > part_rad[pp]: sa_map[ind_pol, - pp] += sa_approx_formula(part_rad[pp], + pp] += comp_sa_sphr_appx(part_rad[pp], dist[pp], vol_pi) free(dist) @@ -2313,25 +2316,25 @@ cdef inline void assemble_block_approx(double[:, ::1] part_coords, return -cdef inline void assemble_unblock_approx(double[:, ::1] part_coords, - double[::1] part_rad, - long[:, ::1] is_in_vignette, - double[:, ::1] sa_map, - long[::1] first_ind_mv, - long[:, ::1] indi_mv, - int sz_p, - int sz_r, int sz_z, - long* ncells_rphi, - double reso_r_z, - double* disc_r, - double* step_rphi, - double* disc_z, - long[:, ::1] ind_rz2pol, - long* sz_phi, - double[::1] reso_rdrdz, - double[:, ::1] pts_mv, - long[::1] ind_mv, - int num_threads) nogil: +cdef inline void sphr_asmbl_unblock_approx(double[:, ::1] part_coords, + double[::1] part_rad, + long[:, ::1] is_in_vignette, + double[:, ::1] sa_map, + long[::1] first_ind_mv, + long[:, ::1] indi_mv, + int sz_p, + int sz_r, int sz_z, + long* ncells_rphi, + double reso_r_z, + double* disc_r, + double* step_rphi, + double* disc_z, + long[:, ::1] ind_rz2pol, + long* sz_phi, + double[::1] reso_rdrdz, + double[:, ::1] pts_mv, + long[::1] ind_mv, + int num_threads) nogil: cdef int rr cdef int zz cdef int jj @@ -2379,14 +2382,14 @@ cdef inline void assemble_unblock_approx(double[:, ::1] part_coords, for pp in range(sz_p): if dist[pp] > part_rad[pp]: sa_map[ind_pol, - pp] += sa_approx_formula(part_rad[pp], + pp] += comp_sa_sphr_appx(part_rad[pp], dist[pp], vol_pi) free(dist) return -cdef inline double sa_approx_formula(double radius, +cdef inline double comp_sa_sphr_appx(double radius, double distance, double volpi, int debug=0) nogil: @@ -2419,7 +2422,7 @@ cdef inline double sa_approx_formula(double radius, # ----------------------------------------------------------------------------- # Exact formula computation # ----------------------------------------------------------------------------- -cdef inline void assemble_block_exact(double[:, ::1] part_coords, +cdef inline void sphr_asmbl_block_exact(double[:, ::1] part_coords, double[::1] part_rad, long[:, ::1] is_in_vignette, double[:, ::1] sa_map, @@ -2536,7 +2539,7 @@ cdef inline void assemble_block_exact(double[:, ::1] part_coords, for pp in range(sz_p): if is_vis[pp] and dist[pp] > part_rad[pp]: sa_map[ind_pol, - pp] += sa_exact_formula(part_rad[pp], + pp] += comp_sa_sphr_ext(part_rad[pp], dist[pp], vol_pi) free(dist) @@ -2544,7 +2547,7 @@ cdef inline void assemble_block_exact(double[:, ::1] part_coords, return -cdef inline void assemble_unblock_exact(double[:, ::1] part_coords, +cdef inline void sphr_asmbl_unblock_exact(double[:, ::1] part_coords, double[::1] part_rad, long[:, ::1] is_in_vignette, double[:, ::1] sa_map, @@ -2610,14 +2613,14 @@ cdef inline void assemble_unblock_exact(double[:, ::1] part_coords, for pp in range(sz_p): if dist[pp] > part_rad[pp]: sa_map[ind_pol, - pp] += sa_exact_formula(part_rad[pp], + pp] += comp_sa_sphr_ext(part_rad[pp], dist[pp], vol_pi) free(dist) return -cdef inline double sa_exact_formula(double radius, +cdef inline double comp_sa_sphr_ext(double radius, double distance, double volpi) nogil: """ @@ -2641,3 +2644,296 @@ cdef inline double sa_exact_formula(double radius, cdef double r_over_d = radius / distance return 2 * volpi * (1. - c_sqrt(1. - r_over_d**2)) + + + +# ------------------------------------------------------------------------------ +# -- Solid Angle Computation subtended by a POLYGON +# ------------------------------------------------------------------------------ +cdef inline void sa_tri_assemble( + int block, + int use_approx, + double[:, :, ::1] poly_coords, + long** ltri, + double[:, ::1] poly_norm, + double[:, ::1] centroids, + long[:, ::1] is_in_vignette, + double[:, ::1] sa_map, + double[:, ::1] ves_poly, + double[:, ::1] ves_norm, + double[::1] ves_lims, + long[::1] lstruct_nlim, + double[::1] lstruct_polyx, + double[::1] lstruct_polyy, + double[::1] lstruct_lims, + double[::1] lstruct_normx, + double[::1] lstruct_normy, + long[::1] lnvert, + int nstruct_tot, + int nstruct_lim, + double rmin, + double eps_uz, double eps_a, + double eps_vz, double eps_b, + double eps_plane, + bint forbid, + long[::1] first_ind, + long[:, ::1] indi_mv, + int num_tot_tri, + int sz_r, int sz_z, + long* ncells_rphi, + double reso_r_z, + double* disc_r, + double* step_rphi, + double* disc_z, + long[:, ::1] ind_rz2pol, + long* sz_phi, + double[::1] reso_rdrdz, + double[:, ::1] pts_mv, + long[::1] ind_mv, + int num_threads +): + if block and use_approx: + # .. useless tabs ..................................................... + # declared here so that cython can run without gil + if ves_lims is not None: + sz_ves_lims = np.size(ves_lims) + else: + sz_ves_lims = 0 + npts_poly = ves_norm.shape[1] + ray_orig = np.zeros((3, num_tot_tri)) + ray_vdir = np.zeros((3, num_tot_tri)) + vperp_out = clone(array('d'), num_tot_tri * 3, True) + coeff_inter_in = clone(array('d'), num_tot_tri, True) + coeff_inter_out = clone(array('d'), num_tot_tri, True) + ind_inter_out = clone(array('i'), num_tot_tri * 3, True) + + tri_asmbl_block_approx( + poly_coords, + ltri, + poly_norm, + centroids, + is_in_vignette, + sa_map, + ves_poly, ves_norm, + ves_lims, + lstruct_nlim, + lstruct_polyx, + lstruct_polyy, + lstruct_lims, + lstruct_normx, + lstruct_normy, + lnvert, vperp_out, + coeff_inter_in, coeff_inter_out, + ind_inter_out, sz_ves_lims, + ray_orig, ray_vdir, npts_poly, + nstruct_tot, nstruct_lim, + rmin, eps_uz, eps_a, + eps_vz, eps_b, eps_plane, + forbid, + first_ind, indi_mv, + num_tot_tri, sz_r, sz_z, + ncells_rphi, + reso_r_z, disc_r, step_rphi, + disc_z, ind_rz2pol, sz_phi, + reso_rdrdz, pts_mv, ind_mv, + num_threads) + # elif not block and use_approx: + # assemble_unblock_approx(part_coords, part_rad, + # is_in_vignette, + # sa_map, + # first_ind, indi_mv, + # num_tot_tri, sz_r, sz_z, + # ncells_rphi, + # reso_r_z, disc_r, step_rphi, + # disc_z, ind_rz2pol, + # sz_phi, + # reso_rdrdz, pts_mv, ind_mv, + # num_threads) + # elif block: + # # .. useless tabs ..................................................... + # # declared here so that cython can run without gil + # if ves_lims is not None: + # sz_ves_lims = np.size(ves_lims) + # else: + # sz_ves_lims = 0 + # npts_poly = ves_norm.shape[1] + # ray_orig = np.zeros((3, num_tot_tri)) + # ray_vdir = np.zeros((3, num_tot_tri)) + # vperp_out = clone(array('d'), num_tot_tri * 3, True) + # coeff_inter_in = clone(array('d'), num_tot_tri, True) + # coeff_inter_out = clone(array('d'), num_tot_tri, True) + # ind_inter_out = clone(array('i'), num_tot_tri * 3, True) + + # assemble_block_exact(part_coords, part_rad, + # is_in_vignette, + # sa_map, + # ves_poly, ves_norm, + # ves_lims, + # lstruct_nlim, + # lstruct_polyx, + # lstruct_polyy, + # lstruct_lims, + # lstruct_normx, + # lstruct_normy, + # lnvert, vperp_out, + # coeff_inter_in, coeff_inter_out, + # ind_inter_out, sz_ves_lims, + # ray_orig, ray_vdir, npts_poly, + # nstruct_tot, nstruct_lim, + # rmin, + # eps_uz, eps_a, + # eps_vz, eps_b, eps_plane, + # forbid, + # first_ind, indi_mv, + # num_tot_tri, sz_r, sz_z, + # ncells_rphi, + # reso_r_z, disc_r, step_rphi, + # disc_z, ind_rz2pol, sz_phi, + # reso_rdrdz, pts_mv, ind_mv, + # num_threads) + # else: + # assemble_unblock_exact(part_coords, part_rad, + # is_in_vignette, + # sa_map, + # first_ind, indi_mv, + # num_tot_tri, sz_r, sz_z, + # ncells_rphi, + # reso_r_z, disc_r, step_rphi, + # disc_z, ind_rz2pol, + # sz_phi, + # reso_rdrdz, pts_mv, ind_mv, + # num_threads) + return + + +cdef inline void tri_asmbl_block_approx( + double[:, :, ::1] poly_coords, + long** ltri, + double[:, ::1] poly_norm, + double[:, ::1] centroids, + long[:, ::1] is_in_vignette, + double[:, ::1] sa_map, + double[:, ::1] ves_poly, + double[:, ::1] ves_norm, + double[::1] ves_lims, + long[::1] lstruct_nlim, + double[::1] lstruct_polyx, + double[::1] lstruct_polyy, + double[::1] lstruct_lims, + double[::1] lstruct_normx, + double[::1] lstruct_normy, + long[::1] lnvert, + double[::1] vperp_out, + double[::1] coeff_inter_in, + double[::1] coeff_inter_out, + int[::1] ind_inter_out, + int sz_ves_lims, + double[:, ::1] ray_orig, + double[:, ::1] ray_vdir, + int npts_poly, + int nstruct_tot, + int nstruct_lim, + double rmin, + double eps_uz, double eps_a, + double eps_vz, double eps_b, + double eps_plane, + bint forbid, + long[::1] first_ind_mv, + long[:, ::1] indi_mv, + int num_tot_tri, + int sz_r, int sz_z, + long* ncells_rphi, + double reso_r_z, + double* disc_r, + double* step_rphi, + double* disc_z, + long[:, ::1] ind_rz2pol, + long* sz_phi, + double[::1] reso_rdrdz, + double[:, ::1] pts_mv, + long[::1] ind_mv, + int num_threads +) nogil: + cdef int rr + cdef int zz + cdef int jj + cdef int pp + cdef int ind_pol + cdef int loc_first_ind + cdef int loc_size_phi + cdef long indiijj + cdef double vol_pi + cdef double loc_x + cdef double loc_y + cdef double loc_r + cdef double loc_z + cdef double loc_phi + cdef double loc_step_rphi + cdef long* is_vis + cdef double* dist = NULL + + dist = malloc(num_tot_tri * sizeof(double)) + is_vis = malloc(num_tot_tri * sizeof(long)) + for rr in range(sz_r): + loc_r = disc_r[rr] + loc_size_phi = sz_phi[rr] + loc_step_rphi = step_rphi[rr] + loc_first_ind = first_ind_mv[rr] + for zz in range(sz_z): + loc_z = disc_z[zz] + if is_in_vignette[rr, zz]: + ind_pol = ind_rz2pol[rr, zz] + ind_mv[ind_pol] = rr * sz_z + zz + reso_rdrdz[ind_pol] = loc_r * reso_r_z + pts_mv[0, ind_pol] = loc_r + pts_mv[1, ind_pol] = loc_z + for jj in range(loc_size_phi): + indiijj = indi_mv[rr, loc_first_ind + jj] + loc_phi = - c_pi + (0.5 + indiijj) * loc_step_rphi + loc_x = loc_r * c_cos(loc_phi) + loc_y = loc_r * c_sin(loc_phi) + # computing distance .... + _bgt.compute_dist_pt_vec(loc_x, loc_y, loc_z, + num_tot_tri, centroids, + &dist[0]) + # checking if visible ..... + _rt.is_visible_pt_vec_core(loc_x, loc_y, loc_z, + centroids, + num_tot_tri, + ves_poly, ves_norm, + &is_vis[0], dist, + ves_lims, + lstruct_nlim, + lstruct_polyx, + lstruct_polyy, + lstruct_lims, + lstruct_normx, + lstruct_normy, + lnvert, vperp_out, + coeff_inter_in, + coeff_inter_out, + ind_inter_out, sz_ves_lims, + ray_orig, ray_vdir, + npts_poly, + nstruct_tot, nstruct_lim, + rmin, + eps_uz, eps_a, + eps_vz, eps_b, eps_plane, + 1, # is toroidal + forbid, 1) + + for pp in range(num_tot_tri): + if is_vis[pp]: + sa_map[ind_pol, + pp] += comp_sa_tri_appx(poly_coords[pp], + ltri[pp]) + free(dist) + free(is_vis) + return + + +cdef inline void comp_sa_tri_appx( + double[:, ::1] poly_coords, + long* ltri, + ) nogil: + return diff --git a/tofu/geom/_vignetting_tools.pyx b/tofu/geom/_vignetting_tools.pyx index a3e14aa5c..b0b955246 100644 --- a/tofu/geom/_vignetting_tools.pyx +++ b/tofu/geom/_vignetting_tools.pyx @@ -176,6 +176,7 @@ cdef inline int get_one_ear(double* polygon, assert False, "Got here but shouldnt have " return -1 + cdef inline void earclipping_poly(double* vignett, long* ltri, double* diff, @@ -266,10 +267,10 @@ cdef inline void triangulate_poly(double* vignett_poly, cdef inline int triangulate_polys(double** vignett_poly, - long* lnvert, - int nvign, - long** ltri, - int num_threads) nogil except -1: + long* lnvert, + int nvign, + long** ltri, + int num_threads) nogil except -1: """ Triangulates a list 3d polygon using the earclipping techinque https://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index bc60177ac..9cc237fe7 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-05-24 05:48:45 +# Autogenerated by Tofu's setup.py on 2021-05-26 19:31:50 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. From f1ab24d36a42139e1788f7e68094ad76e66062e5 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Mon, 31 May 2021 17:09:00 +0200 Subject: [PATCH 09/29] [#75] almost done with SA tetra comp --- Notes_Upgrades/SA_tetra/LM_version.tex | 19 +++++- Notes_Upgrades/SA_tetra/SA_tetra.tex | 4 +- tofu/geom/_GG.pyx | 32 +++++++-- tofu/geom/_basic_geom_tools.pxd | 18 +++++ tofu/geom/_basic_geom_tools.pyx | 94 +++++++++++++++++++++++++- tofu/geom/_sampling_tools.pxd | 4 ++ tofu/geom/_sampling_tools.pyx | 80 +++++++++++++++++----- tofu/geom/openmp_enabled.py | 2 +- 8 files changed, 226 insertions(+), 27 deletions(-) diff --git a/Notes_Upgrades/SA_tetra/LM_version.tex b/Notes_Upgrades/SA_tetra/LM_version.tex index f1922cf80..bb31437f5 100644 --- a/Notes_Upgrades/SA_tetra/LM_version.tex +++ b/Notes_Upgrades/SA_tetra/LM_version.tex @@ -14,7 +14,7 @@ \maketitle -\includegraphics[scale=0.4]{tetra.png} +\includegraphics[scale=0.4]{tetra.png} \section{Notations} @@ -158,7 +158,7 @@ \subsection{Denominator} \begin{align} -(\mathbf{A}\mathbf{B}\mathbf{C}) &= ||G-b-c||\,vcdW||G+b||\,||G+c|| +(\mathbf{A}\mathbf{B}\mathbf{C}) &= ||G-b-c||\,||G+b||\,||G+c|| \end{align} and @@ -186,6 +186,7 @@ \section{Final formula} + \left({B}\cdot {C}\right)\mathbf{A}}}} $$ +we get $$ {\displaystyle \tan \left({\frac {1}{2}}\Omega \right) @@ -197,4 +198,18 @@ \section{Final formula} }}} $$ +or + +$$ +{\displaystyle \tan \left({\frac {1}{2}}\Omega \right) + = {\frac {3 G \cdot \left( b \times c \right)} + {\mathbf{A}\mathbf{B}\mathbf{C} + + \mathbf{G}^2 (\mathbf{A} + \mathbf{B} + \mathbf{C}) + + c \cdot b (\mathbf{A} - \mathbf{B} - \mathbf{C}) + + G \cdot b (\mathbf{A} - \mathbf{B}) + + G \cdot c (\mathbf{A} - \mathbf{C}) + }}} +$$ + + \end{document} diff --git a/Notes_Upgrades/SA_tetra/SA_tetra.tex b/Notes_Upgrades/SA_tetra/SA_tetra.tex index d7be9695e..ff1d6ba63 100644 --- a/Notes_Upgrades/SA_tetra/SA_tetra.tex +++ b/Notes_Upgrades/SA_tetra/SA_tetra.tex @@ -41,7 +41,7 @@ \section{Notations} \item $C$ be the vector $\vec{OC}$ \item $a$ be the vector $\vec{GA}$ \item $b$ be the vector $\vec{GB}$ - \item $c$ be the vector $c$ + \item $c$ be the vector $\vec{GC}$ \item $\mathbf{A}$ be the magnitude of the vector $\vec{OA}$ \item $\mathbf{B}$ be the magnitude of the vector $\vec{OB}$ \item $\mathbf{C}$ be the magnitude of the vector $\vec{OC}$ @@ -241,7 +241,7 @@ \subsection{Denominator} \begin{align} -(\mathbf{A}\mathbf{B}\mathbf{C}) &= ||G-b-c||\,vcdW||G+b||\,||G+c|| +(\mathbf{A}\mathbf{B}\mathbf{C}) &= ||G-b-c||\,||G+b||\,||G+c|| \end{align} and diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index 1657c1516..7d46fc2c0 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -4970,7 +4970,8 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, Computes the 2D map of the integrated solid angles subtended by a list of npoly polygons of coordinates poly_coords[npoly], not necessarily flat, one sided and side defined by poly_norm[npoly], nomal vector of polygon. - + If you want to see the details of the computation see: + $TOFU_DIR/Notes_Upgrades/SA_tetra/SA_tetra.tex Parameters ---------- poly_coords: double array @@ -5102,9 +5103,13 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, cdef np.ndarray[long, ndim=2] indI cdef np.ndarray[long, ndim=1] ind cdef np.ndarray[double, ndim=1] reso_rdrdz + cdef np.ndarray[double, ndim=1] dot_GBGC cdef np.ndarray[double, ndim=2] pts cdef np.ndarray[double, ndim=2] sa_map + cdef np.ndarray[double, ndim=2] vec_GB + cdef np.ndarray[double, ndim=2] vec_GC cdef np.ndarray[double, ndim=2] centroids + cdef np.ndarray[double, ndim=2] cross_GBGC cdef np.ndarray[double, ndim=2, mode="c"] temp # # == Testing inputs ======================================================== @@ -5148,17 +5153,32 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, ltri, num_threads ) + # cpumputing total number of triangles + tot_num_tri = np.sum(lnvert_poly) - 2 * npoly # .. Getting centroids of triangles ....................................... + dot_GBGC = np.zeros(tot_num_tri) + vec_GB = np.zeros((3, tot_num_tri)) + vec_GC = np.zeros((3, tot_num_tri)) centroids = np.zeros((3, tot_num_tri)) - _bgt.find_centroids_ltri( + cross_GBGC = np.zeros((3, tot_num_tri)) + _bgt.find_centroids_GB_GC_ltri( poly_coords, ltri, &lnvert_poly[0], npoly, num_threads, centroids, + vec_GB, + vec_GC, ) - # # .. Check if points are visible ........................................... + _bgt.compute_dot_cross_vec(vec_GB, + vec_GC, + cross_GBGC, + dot_GBGC, + tot_num_tri, + num_threads, + ) + # .. Check if points are visible ........................................... # Get the actual R and Z resolutions and mesh elements # .. First we discretize R without limits .................................. _st.cythonize_subdomain_dl(None, limits_dl) # no limits @@ -5312,8 +5332,12 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, block, approx, poly_coords, - ltri[0], poly_norm, + ltri, poly_norm, centroids, + vec_GB, + vec_GC, + cross_GBGC, + dot_GBGC, is_in_vignette, sa_map, ves_poly, diff --git a/tofu/geom/_basic_geom_tools.pxd b/tofu/geom/_basic_geom_tools.pxd index 5acdab826..a6deddc96 100644 --- a/tofu/geom/_basic_geom_tools.pxd +++ b/tofu/geom/_basic_geom_tools.pxd @@ -66,6 +66,14 @@ cdef void compute_cross_prod(const double[3] vec_a, const double[3] vec_b, double[3] res) nogil +cdef void compute_dot_cross_vec(const double[:, ::1] lvec_a, + const double[:, ::1] lvec_b, + double[:, ::1] cross_p, + double[::1] dot_p, + const int npts, + const int num_threads, + ) nogil + cdef void find_centroids_ltri(const double[:, :, ::1] poly_coords, const long** ltri, const long* lnvert, @@ -73,6 +81,16 @@ cdef void find_centroids_ltri(const double[:, :, ::1] poly_coords, const int num_threads, double[:, ::1] centroid) nogil +cdef void find_centroids_GB_GC_ltri(const double[:, :, ::1] poly_coords, + const long** ltri, + const long* lnvert, + const int npoly, + const int num_threads, + double[:, ::1] centroid, + double[:, ::1] vec_GB, + double[:, ::1] vec_GC, + ) nogil + cdef void compute_dist_pt_vec(const double pt0, const double pt1, const double pt2, const int npts, const double[:, ::1] vec, diff --git a/tofu/geom/_basic_geom_tools.pyx b/tofu/geom/_basic_geom_tools.pyx index d096faea0..c244c5ec1 100644 --- a/tofu/geom/_basic_geom_tools.pyx +++ b/tofu/geom/_basic_geom_tools.pyx @@ -188,6 +188,33 @@ cdef inline double compute_dot_prod(const double[3] vec_a, return vec_a[0] * vec_b[0] + vec_a[1] * vec_b[1] + vec_a[2] * vec_b[2] +cdef inline void compute_dot_cross_vec(const double[:, ::1] lvec_a, + const double[:, ::1] lvec_b, + double[:, ::1] cross_p, + double[::1] dot_p, + const int npts, + const int num_threads, + ) nogil: + cdef int ii + cdef double vec1[3] + cdef double vec2[3] + cdef double vec3[3] + + with nogil, parallel(num_threads=num_threads): + for ii in prange(npts): + vec1[0] = lvec_a[0, ii] + vec1[1] = lvec_a[1, ii] + vec1[2] = lvec_a[2, ii] + vec2[0] = lvec_b[0, ii] + vec2[1] = lvec_b[1, ii] + vec2[2] = lvec_b[2, ii] + compute_cross_prod(vec1, vec2, vec3) + cross_p[0, ii] = vec3[0] + cross_p[1, ii] = vec3[1] + cross_p[2, ii] = vec3[2] + dot_p[ii] = compute_dot_prod(vec1, vec2) + return + cdef inline double compute_norm(const double[3] vec) nogil: return c_sqrt(vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]) @@ -294,7 +321,7 @@ cdef inline int find_ind_lowerright_corner(const double[::1] xpts, cdef inline void find_centroid_tri(const double[3] xpts, const double[3] ypts, const double[3] zpts, - double[::1] centroid) nogil: + double[:] centroid) nogil: centroid[0] = (xpts[0] + xpts[1] + xpts[2]) / 3. centroid[1] = (ypts[0] + ypts[1] + ypts[2]) / 3. centroid[2] = (zpts[0] + zpts[1] + zpts[2]) / 3. @@ -332,7 +359,54 @@ cdef inline void find_centroids_ltri(const double[:, :, ::1] poly_coords, ytri[2] = poly_coords[ipol, 1, wip1] ztri[2] = poly_coords[ipol, 2, wip1] find_centroid_tri(xtri, ytri, ztri, - centroid[ipol]) + centroid[:, ipol + itri * npoly]) + return + + + +cdef inline void find_centroids_GB_GC_ltri(const double[:, :, ::1] poly_coords, + const long** ltri, + const long* lnvert, + const int npoly, + const int num_threads, + double[:, ::1] centroid, + double[:, ::1] vec_GB, + double[:, ::1] vec_GC, + ) nogil: + cdef int wi + cdef int wip1 + cdef int wim1 + cdef int ipol + cdef int itri + cdef int iglob + cdef double[3] xtri + cdef double[3] ytri + cdef double[3] ztri + + with nogil, parallel(num_threads=num_threads): + for ipol in prange(npoly): + for itri in range(lnvert[ipol] - 2): + wim1 = ltri[ipol][itri*3] + wi = ltri[ipol][itri*3+1] + wip1 = ltri[ipol][itri*3+2] + xtri[0] = poly_coords[ipol, 0, wim1] + ytri[0] = poly_coords[ipol, 1, wim1] + ztri[0] = poly_coords[ipol, 2, wim1] + xtri[1] = poly_coords[ipol, 0, wi] + ytri[1] = poly_coords[ipol, 1, wi] + ztri[1] = poly_coords[ipol, 2, wi] + xtri[2] = poly_coords[ipol, 0, wip1] + ytri[2] = poly_coords[ipol, 1, wip1] + ztri[2] = poly_coords[ipol, 2, wip1] + iglob = ipol + itri * npoly + find_centroid_tri(xtri, ytri, ztri, + centroid[:, iglob]) + vec_GB[0, iglob] = xtri[1] - centroid[0, iglob] + vec_GB[1, iglob] = ytri[1] - centroid[1, iglob] + vec_GB[2, iglob] = ztri[1] - centroid[2, iglob] + vec_GC[0, iglob] = xtri[2] - centroid[0, iglob] + vec_GC[1, iglob] = ytri[2] - centroid[1, iglob] + vec_GC[2, iglob] = ztri[2] - centroid[2, iglob] return # ============================================================================== @@ -353,6 +427,22 @@ cdef inline void compute_dist_pt_vec(const double pt0, const double pt1, + (pt2 - vec[2, ii]) * (pt2 - vec[2, ii])) return +# TODO: FAIRE UNE FONCTION QUI CALCULE G \dot (B \ cross C) !!!!!!!!!!!!!!!!!!!!!! +cdef inline void compute__dist_pt_vec(const double pt0, const double pt1, + const double pt2, int npts, + const double[:, ::1] vec, + double* dist) nogil: + """ + Compute the distance between the point P = [pt0, pt1, pt2] and each point + Q_i, where vec = {Q_0, Q_1, ..., Q_npts-1} + """ + cdef int ii + for ii in range(0, npts): + dist[ii] = c_sqrt((pt0 - vec[0, ii]) * (pt0 - vec[0, ii]) + + (pt1 - vec[1, ii]) * (pt1 - vec[1, ii]) + + (pt2 - vec[2, ii]) * (pt2 - vec[2, ii])) + return + cdef inline void compute_dist_vec_vec(const int npts1, const int npts2, const double[:, ::1] vec1, diff --git a/tofu/geom/_sampling_tools.pxd b/tofu/geom/_sampling_tools.pxd index 4834161c7..a7cecd53b 100644 --- a/tofu/geom/_sampling_tools.pxd +++ b/tofu/geom/_sampling_tools.pxd @@ -299,6 +299,10 @@ cdef void sa_tri_assemble( long** ltri, double[:, ::1] poly_norm, double[:, ::1] centroids, + double[:, ::1] vec_GB, + double[:, ::1] vec_GC, + double[:, ::1] cross_GBGC, + double[::1] dot_GBGC, long[:, ::1] is_in_vignette, double[:, ::1] sa_map, double[:, ::1] ves_poly, diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index 90834637e..1256a800e 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -2653,10 +2653,15 @@ cdef inline double comp_sa_sphr_ext(double radius, cdef inline void sa_tri_assemble( int block, int use_approx, - double[:, :, ::1] poly_coords, + int npoly, + long[::1] lnvert_poly, long** ltri, double[:, ::1] poly_norm, double[:, ::1] centroids, + double[:, ::1] vec_GB, + double[:, ::1] vec_GC, + double[:, ::1] cross_GBGC, + double[::1] dot_GBGC, long[:, ::1] is_in_vignette, double[:, ::1] sa_map, double[:, ::1] ves_poly, @@ -2708,10 +2713,15 @@ cdef inline void sa_tri_assemble( ind_inter_out = clone(array('i'), num_tot_tri * 3, True) tri_asmbl_block_approx( - poly_coords, + npoly, + lnvert_poly, ltri, poly_norm, centroids, + vec_GB, + vec_GC, + cross_GBGC, + dot_GBGC, is_in_vignette, sa_map, ves_poly, ves_norm, @@ -2808,9 +2818,15 @@ cdef inline void sa_tri_assemble( cdef inline void tri_asmbl_block_approx( double[:, :, ::1] poly_coords, + int npoly, + long[::1] lnvert_poly, long** ltri, double[:, ::1] poly_norm, double[:, ::1] centroids, + double[:, ::1] vec_GB, + double[:, ::1] vec_GC, + double[:, ::1] cross_GBGC, + double[::1] dot_GBGC, long[:, ::1] is_in_vignette, double[:, ::1] sa_map, double[:, ::1] ves_poly, @@ -2870,9 +2886,10 @@ cdef inline void tri_asmbl_block_approx( cdef double loc_phi cdef double loc_step_rphi cdef long* is_vis - cdef double* dist = NULL + cdef double* dist_og = NULL + cdef double* dist_opts = NULL - dist = malloc(num_tot_tri * sizeof(double)) + dist_og = malloc(num_tot_tri * sizeof(double)) is_vis = malloc(num_tot_tri * sizeof(long)) for rr in range(sz_r): loc_r = disc_r[rr] @@ -2895,13 +2912,13 @@ cdef inline void tri_asmbl_block_approx( # computing distance .... _bgt.compute_dist_pt_vec(loc_x, loc_y, loc_z, num_tot_tri, centroids, - &dist[0]) + &dist_og[0]) # checking if visible ..... _rt.is_visible_pt_vec_core(loc_x, loc_y, loc_z, centroids, num_tot_tri, ves_poly, ves_norm, - &is_vis[0], dist, + &is_vis[0], dist_og, ves_lims, lstruct_nlim, lstruct_polyx, @@ -2922,18 +2939,49 @@ cdef inline void tri_asmbl_block_approx( 1, # is toroidal forbid, 1) - for pp in range(num_tot_tri): - if is_vis[pp]: + for ipoly in range(npoly): + dist_opts = malloc(lnvert[ipoly] * sizeof(double)) + # computing distances to vertices of poly (OA, OB, OC) + _bgt.compute_dist_pt_vec(loc_x, loc_y, loc_z, + lnver[ipoly], + poly_coords[ipoly] + &dist_opts[0]) + for itri in range(lnvert[ipoly] - 2): + iglob = ipoly + itri * npoly sa_map[ind_pol, - pp] += comp_sa_tri_appx(poly_coords[pp], - ltri[pp]) - free(dist) + ipoly] += comp_sa_tri_appx( + # ltri[ipoly], + centroids[:, iglob], + vec_GB[:, iglob], + vec_GC[:, iglob], + cross_GBGC[:, iglob], + dot_GBGC[iglob], + ) + free(dist_og) free(is_vis) return -cdef inline void comp_sa_tri_appx( - double[:, ::1] poly_coords, - long* ltri, - ) nogil: - return +cdef inline double comp_sa_tri_appx( + double[:] centroids, + double[:] vec_GB, + double[:] vec_GC, + double[:] cross_GBGC, + double dot_GBGC, +) nogil: + """ + Given by: + numerator = 3 G \dot (b \cross c) + denominator = G \dot G (norm A + norm B + norm C) + + (c \dot b) (norm A - norm B - norm C) + + (c \dot G) (norm A - norm C) + + (G \dot b) (norm A - norm B) + with G centroid of triangle + """ + cdef double numertor + cdef double denumertor + cdef double normA, normB, normC, normG2 + cdef double cdotG, bdotG + + numerator = + return diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index 9cc237fe7..f9fead718 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-05-26 19:31:50 +# Autogenerated by Tofu's setup.py on 2021-05-27 08:16:18 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. From 152c8313cd982a86a33726ab87c4172d82188c1f Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Tue, 1 Jun 2021 15:38:34 +0200 Subject: [PATCH 10/29] [#75] algo complete missing tests --- tofu/geom/_basic_geom_tools.pxd | 11 ++ tofu/geom/_basic_geom_tools.pyx | 33 +++- tofu/geom/_sampling_tools.pxd | 2 + tofu/geom/_sampling_tools.pyx | 299 +++++++++++++++++++++----------- tofu/geom/openmp_enabled.py | 2 +- 5 files changed, 239 insertions(+), 108 deletions(-) diff --git a/tofu/geom/_basic_geom_tools.pxd b/tofu/geom/_basic_geom_tools.pxd index a6deddc96..dc6c887b2 100644 --- a/tofu/geom/_basic_geom_tools.pxd +++ b/tofu/geom/_basic_geom_tools.pxd @@ -91,6 +91,17 @@ cdef void find_centroids_GB_GC_ltri(const double[:, :, ::1] poly_coords, double[:, ::1] vec_GC, ) nogil +cdef void compute_vec_ass_tri(const double pt0, const double pt1, + const double pt2, int npts, + const double[:, ::1] ptG, + const double[:, ::1] cross_bc, + const double[:, ::1] vecb, + const double[:, ::1] vecc, + double* num, + double* dot_Gb, + double* dot_Gc, + double* normG2) nogil + cdef void compute_dist_pt_vec(const double pt0, const double pt1, const double pt2, const int npts, const double[:, ::1] vec, diff --git a/tofu/geom/_basic_geom_tools.pyx b/tofu/geom/_basic_geom_tools.pyx index c244c5ec1..b0c4d9d66 100644 --- a/tofu/geom/_basic_geom_tools.pyx +++ b/tofu/geom/_basic_geom_tools.pyx @@ -427,20 +427,35 @@ cdef inline void compute_dist_pt_vec(const double pt0, const double pt1, + (pt2 - vec[2, ii]) * (pt2 - vec[2, ii])) return -# TODO: FAIRE UNE FONCTION QUI CALCULE G \dot (B \ cross C) !!!!!!!!!!!!!!!!!!!!!! -cdef inline void compute__dist_pt_vec(const double pt0, const double pt1, - const double pt2, int npts, - const double[:, ::1] vec, - double* dist) nogil: +# TODO: FAIRE UNE FONCTION QUI CALCULE G \dot (b \ cross c) !!!!!!!!!!!!!!!!!!!!!! +cdef inline void compute_vec_ass_tri(const double pt0, const double pt1, + const double pt2, int npts, + const double[:, ::1] ptG, + const double[:, ::1] cross_bc, + const double[:, ::1] vecb, + const double[:, ::1] vecc, + double* num, + double* dot_Gb, + double* dot_Gc, + double* normG2) nogil: """ Compute the distance between the point P = [pt0, pt1, pt2] and each point - Q_i, where vec = {Q_0, Q_1, ..., Q_npts-1} + Q_i, where ptG = {Q_0, Q_1, ..., Q_npts-1} """ cdef int ii for ii in range(0, npts): - dist[ii] = c_sqrt((pt0 - vec[0, ii]) * (pt0 - vec[0, ii]) - + (pt1 - vec[1, ii]) * (pt1 - vec[1, ii]) - + (pt2 - vec[2, ii]) * (pt2 - vec[2, ii])) + normG2[ii] = ((pt0 - ptG[0, ii]) * (pt0 - ptG[0, ii]) + + (pt1 - ptG[1, ii]) * (pt1 - ptG[1, ii]) + + (pt2 - ptG[2, ii]) * (pt2 - ptG[2, ii])) + num[ii] = ((pt0 - ptG[0, ii]) * cross_bc[0, ii] + + (pt1 - ptG[1, ii]) * cross_bc[1, ii] + + (pt2 - ptG[2, ii]) * cross_bc[2, ii]) + dot_Gb[ii] = ((pt0 - ptG[0, ii]) * vecb[0, ii] + + (pt1 - ptG[1, ii]) * vecb[1, ii] + + (pt2 - ptG[2, ii]) * vecb[2, ii]) + dot_Gc[ii] = ((pt0 - ptG[0, ii]) * vecc[0, ii] + + (pt1 - ptG[1, ii]) * vecc[1, ii] + + (pt2 - ptG[2, ii]) * vecc[2, ii]) return diff --git a/tofu/geom/_sampling_tools.pxd b/tofu/geom/_sampling_tools.pxd index a7cecd53b..f8cdc21d3 100644 --- a/tofu/geom/_sampling_tools.pxd +++ b/tofu/geom/_sampling_tools.pxd @@ -296,6 +296,8 @@ cdef void sa_tri_assemble( int block, int use_approx, double[:, :, ::1] poly_coords, + int npoly, + long[::1] lnvert_poly, long** ltri, double[:, ::1] poly_norm, double[:, ::1] centroids, diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index 1256a800e..e182760cb 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -2653,6 +2653,7 @@ cdef inline double comp_sa_sphr_ext(double radius, cdef inline void sa_tri_assemble( int block, int use_approx, + double[:, :, ::1] poly_coords, int npoly, long[::1] lnvert_poly, long** ltri, @@ -2713,6 +2714,7 @@ cdef inline void sa_tri_assemble( ind_inter_out = clone(array('i'), num_tot_tri * 3, True) tri_asmbl_block_approx( + poly_coords, npoly, lnvert_poly, ltri, @@ -2747,72 +2749,36 @@ cdef inline void sa_tri_assemble( disc_z, ind_rz2pol, sz_phi, reso_rdrdz, pts_mv, ind_mv, num_threads) - # elif not block and use_approx: - # assemble_unblock_approx(part_coords, part_rad, - # is_in_vignette, - # sa_map, - # first_ind, indi_mv, - # num_tot_tri, sz_r, sz_z, - # ncells_rphi, - # reso_r_z, disc_r, step_rphi, - # disc_z, ind_rz2pol, - # sz_phi, - # reso_rdrdz, pts_mv, ind_mv, - # num_threads) - # elif block: - # # .. useless tabs ..................................................... - # # declared here so that cython can run without gil - # if ves_lims is not None: - # sz_ves_lims = np.size(ves_lims) - # else: - # sz_ves_lims = 0 - # npts_poly = ves_norm.shape[1] - # ray_orig = np.zeros((3, num_tot_tri)) - # ray_vdir = np.zeros((3, num_tot_tri)) - # vperp_out = clone(array('d'), num_tot_tri * 3, True) - # coeff_inter_in = clone(array('d'), num_tot_tri, True) - # coeff_inter_out = clone(array('d'), num_tot_tri, True) - # ind_inter_out = clone(array('i'), num_tot_tri * 3, True) - - # assemble_block_exact(part_coords, part_rad, - # is_in_vignette, - # sa_map, - # ves_poly, ves_norm, - # ves_lims, - # lstruct_nlim, - # lstruct_polyx, - # lstruct_polyy, - # lstruct_lims, - # lstruct_normx, - # lstruct_normy, - # lnvert, vperp_out, - # coeff_inter_in, coeff_inter_out, - # ind_inter_out, sz_ves_lims, - # ray_orig, ray_vdir, npts_poly, - # nstruct_tot, nstruct_lim, - # rmin, - # eps_uz, eps_a, - # eps_vz, eps_b, eps_plane, - # forbid, - # first_ind, indi_mv, - # num_tot_tri, sz_r, sz_z, - # ncells_rphi, - # reso_r_z, disc_r, step_rphi, - # disc_z, ind_rz2pol, sz_phi, - # reso_rdrdz, pts_mv, ind_mv, - # num_threads) - # else: - # assemble_unblock_exact(part_coords, part_rad, - # is_in_vignette, - # sa_map, - # first_ind, indi_mv, - # num_tot_tri, sz_r, sz_z, - # ncells_rphi, - # reso_r_z, disc_r, step_rphi, - # disc_z, ind_rz2pol, - # sz_phi, - # reso_rdrdz, pts_mv, ind_mv, - # num_threads) + elif not block and use_approx: + tri_asmbl_unblock_approx( + poly_coords, + npoly, + lnvert_poly, + ltri, + poly_norm, + centroids, + vec_GB, + vec_GC, + cross_GBGC, + dot_GBGC, + is_in_vignette, + sa_map, + first_ind, + indi_mv, + num_tot_tri, + sz_r, sz_z, + ncells_rphi, + reso_r_z, + disc_r, + step_rphi, + disc_z, + ind_rz2pol, + sz_phi, + reso_rdrdz, + pts_mv, + ind_mv, + num_threads + ) return @@ -2873,12 +2839,12 @@ cdef inline void tri_asmbl_block_approx( cdef int rr cdef int zz cdef int jj - cdef int pp + cdef int itri + cdef int ipoly cdef int ind_pol cdef int loc_first_ind cdef int loc_size_phi cdef long indiijj - cdef double vol_pi cdef double loc_x cdef double loc_y cdef double loc_r @@ -2886,11 +2852,16 @@ cdef inline void tri_asmbl_block_approx( cdef double loc_phi cdef double loc_step_rphi cdef long* is_vis - cdef double* dist_og = NULL + cdef double* dot_Gb = NULL + cdef double* dot_Gc = NULL + cdef double* norm_G2 = NULL cdef double* dist_opts = NULL + cdef double* numerator = NULL - dist_og = malloc(num_tot_tri * sizeof(double)) is_vis = malloc(num_tot_tri * sizeof(long)) + dot_Gb = malloc(num_tot_tri * sizeof(double)) + dot_Gc = malloc(num_tot_tri * sizeof(double)) + norm_G2 = malloc(num_tot_tri * sizeof(double)) for rr in range(sz_r): loc_r = disc_r[rr] loc_size_phi = sz_phi[rr] @@ -2909,16 +2880,21 @@ cdef inline void tri_asmbl_block_approx( loc_phi = - c_pi + (0.5 + indiijj) * loc_step_rphi loc_x = loc_r * c_cos(loc_phi) loc_y = loc_r * c_sin(loc_phi) - # computing distance .... - _bgt.compute_dist_pt_vec(loc_x, loc_y, loc_z, + # OG norm and other associated values .... + _bgt.compute_vec_ass_tri(loc_x, loc_y, loc_z, num_tot_tri, centroids, - &dist_og[0]) + cross_GBGC, + vec_GB, vec_GC, + &numerator[0], + &dot_Gb[0], + &dot_Gc[0], + &norm_G2[0]) # checking if visible ..... _rt.is_visible_pt_vec_core(loc_x, loc_y, loc_z, centroids, num_tot_tri, ves_poly, ves_norm, - &is_vis[0], dist_og, + &is_vis[0], norm_G2, ves_lims, lstruct_nlim, lstruct_polyx, @@ -2940,34 +2916,151 @@ cdef inline void tri_asmbl_block_approx( forbid, 1) for ipoly in range(npoly): - dist_opts = malloc(lnvert[ipoly] * sizeof(double)) + dist_opts = malloc(lnvert_poly[ipoly] + * sizeof(double)) + # computing distances to vertices of poly (OA, OB, OC) + _bgt.compute_dist_pt_vec(loc_x, loc_y, loc_z, + lnvert_poly[ipoly], + poly_coords[ipoly], + &dist_opts[0]) + for itri in range(lnvert_poly[ipoly] - 2): + iglob = ipoly + itri * npoly + if is_vis[iglob]: + sa_map[ind_pol, + ipoly] += comp_sa_tri_appx( + itri, + ltri[ipoly], + numerator[iglob], + dot_Gb[iglob], + dot_Gc[iglob], + norm_G2[iglob], + dot_GBGC[iglob], + dist_opts, + ) + free(dist_opts) + free(dot_Gb) + free(dot_Gc) + free(norm_G2) + free(is_vis) + return + +cdef inline void tri_asmbl_unblock_approx( + double[:, :, ::1] poly_coords, + int npoly, + long[::1] lnvert_poly, + long** ltri, + double[:, ::1] poly_norm, + double[:, ::1] centroids, + double[:, ::1] vec_GB, + double[:, ::1] vec_GC, + double[:, ::1] cross_GBGC, + double[::1] dot_GBGC, + long[:, ::1] is_in_vignette, + double[:, ::1] sa_map, + long[::1] first_ind_mv, + long[:, ::1] indi_mv, + int num_tot_tri, + int sz_r, int sz_z, + long* ncells_rphi, + double reso_r_z, + double* disc_r, + double* step_rphi, + double* disc_z, + long[:, ::1] ind_rz2pol, + long* sz_phi, + double[::1] reso_rdrdz, + double[:, ::1] pts_mv, + long[::1] ind_mv, + int num_threads +) nogil: + cdef int rr + cdef int zz + cdef int jj + cdef int itri + cdef int ipoly + cdef int ind_pol + cdef int loc_first_ind + cdef int loc_size_phi + cdef long indiijj + cdef double loc_x + cdef double loc_y + cdef double loc_r + cdef double loc_z + cdef double loc_phi + cdef double loc_step_rphi + cdef double* dot_Gb = NULL + cdef double* dot_Gc = NULL + cdef double* norm_G2 = NULL + cdef double* dist_opts = NULL + cdef double* numerator = NULL + + dot_Gb = malloc(num_tot_tri * sizeof(double)) + dot_Gc = malloc(num_tot_tri * sizeof(double)) + norm_G2 = malloc(num_tot_tri * sizeof(double)) + for rr in range(sz_r): + loc_r = disc_r[rr] + loc_size_phi = sz_phi[rr] + loc_step_rphi = step_rphi[rr] + loc_first_ind = first_ind_mv[rr] + for zz in range(sz_z): + loc_z = disc_z[zz] + if is_in_vignette[rr, zz]: + ind_pol = ind_rz2pol[rr, zz] + ind_mv[ind_pol] = rr * sz_z + zz + reso_rdrdz[ind_pol] = loc_r * reso_r_z + pts_mv[0, ind_pol] = loc_r + pts_mv[1, ind_pol] = loc_z + for jj in range(loc_size_phi): + indiijj = indi_mv[rr, loc_first_ind + jj] + loc_phi = - c_pi + (0.5 + indiijj) * loc_step_rphi + loc_x = loc_r * c_cos(loc_phi) + loc_y = loc_r * c_sin(loc_phi) + # OG norm and other associated values .... + _bgt.compute_vec_ass_tri(loc_x, loc_y, loc_z, + num_tot_tri, centroids, + cross_GBGC, + vec_GB, vec_GC, + &numerator[0], + &dot_Gb[0], + &dot_Gc[0], + &norm_G2[0]) + for ipoly in range(npoly): + dist_opts = malloc(lnvert_poly[ipoly] + * sizeof(double)) # computing distances to vertices of poly (OA, OB, OC) _bgt.compute_dist_pt_vec(loc_x, loc_y, loc_z, - lnver[ipoly], - poly_coords[ipoly] + lnvert_poly[ipoly], + poly_coords[ipoly], &dist_opts[0]) - for itri in range(lnvert[ipoly] - 2): + for itri in range(lnvert_poly[ipoly] - 2): iglob = ipoly + itri * npoly sa_map[ind_pol, ipoly] += comp_sa_tri_appx( - # ltri[ipoly], - centroids[:, iglob], - vec_GB[:, iglob], - vec_GC[:, iglob], - cross_GBGC[:, iglob], + itri, + ltri[ipoly], + numerator[iglob], + dot_Gb[iglob], + dot_Gc[iglob], + norm_G2[iglob], dot_GBGC[iglob], - ) - free(dist_og) - free(is_vis) + dist_opts, + ) + free(dist_opts) + free(dot_Gb) + free(dot_Gc) + free(norm_G2) return cdef inline double comp_sa_tri_appx( - double[:] centroids, - double[:] vec_GB, - double[:] vec_GC, - double[:] cross_GBGC, - double dot_GBGC, + int itri, + long* ltri, + double numerator, + double dot_Gb, + double dot_Gc, + double norm_G2, + double dot_bc, + double* dist_opts, ) nogil: """ Given by: @@ -2978,10 +3071,20 @@ cdef inline double comp_sa_tri_appx( + (G \dot b) (norm A - norm B) with G centroid of triangle """ - cdef double numertor - cdef double denumertor - cdef double normA, normB, normC, normG2 - cdef double cdotG, bdotG - - numerator = - return + cdef double normA + cdef double normB + cdef double normC + cdef double denumerator + + normA = dist_opts[ltri[itri*3]] + normB = dist_opts[ltri[itri*3 + 1]] + normC = dist_opts[ltri[itri*3 + 2]] + + denumerator = ( + normA * normB * normC + + norm_G2 * (normA + normB + normC) + + dot_bc * (normA - normB - normC) + + dot_Gb * (normA - normB) + + dot_Gc * (normA - normC) + ) + return numerator/denumerator diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index f9fead718..0c7cbf325 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-05-27 08:16:18 +# Autogenerated by Tofu's setup.py on 2021-06-01 13:27:38 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. From 3d87f1d8387f06e3006c82059895eac2c736ec35 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Tue, 1 Jun 2021 16:40:22 +0200 Subject: [PATCH 11/29] [#75] added comp only if on right side of poly --- tofu/geom/_GG.pyx | 9 ++++++++- tofu/geom/_basic_geom_tools.pxd | 2 ++ tofu/geom/_basic_geom_tools.pyx | 19 ++++++++++++++++--- tofu/geom/_sampling_tools.pyx | 13 +++++++++++++ tofu/geom/openmp_enabled.py | 2 +- 5 files changed, 40 insertions(+), 5 deletions(-) diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index 7d46fc2c0..c584d7803 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -5109,6 +5109,7 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, cdef np.ndarray[double, ndim=2] vec_GB cdef np.ndarray[double, ndim=2] vec_GC cdef np.ndarray[double, ndim=2] centroids + cdef np.ndarray[double, ndim=2] poly_norm_tot cdef np.ndarray[double, ndim=2] cross_GBGC cdef np.ndarray[double, ndim=2, mode="c"] temp # @@ -5171,6 +5172,10 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, vec_GB, vec_GC, ) + + poly_norm_tot = np.repeat(poly_norm, np.asarray(lnvert_poly) - 2, axis = 1) + assert poly_norm_tot.shape[1] == tot_num_tri + _bgt.compute_dot_cross_vec(vec_GB, vec_GC, cross_GBGC, @@ -5332,7 +5337,9 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, block, approx, poly_coords, - ltri, poly_norm, + npoly, + lnvert_poly, + ltri, poly_norm_tot, centroids, vec_GB, vec_GC, diff --git a/tofu/geom/_basic_geom_tools.pxd b/tofu/geom/_basic_geom_tools.pxd index dc6c887b2..29a5c6a68 100644 --- a/tofu/geom/_basic_geom_tools.pxd +++ b/tofu/geom/_basic_geom_tools.pxd @@ -94,9 +94,11 @@ cdef void find_centroids_GB_GC_ltri(const double[:, :, ::1] poly_coords, cdef void compute_vec_ass_tri(const double pt0, const double pt1, const double pt2, int npts, const double[:, ::1] ptG, + const double[:, ::1] poly_norm, const double[:, ::1] cross_bc, const double[:, ::1] vecb, const double[:, ::1] vecc, + double* side_of_poly, double* num, double* dot_Gb, double* dot_Gc, diff --git a/tofu/geom/_basic_geom_tools.pyx b/tofu/geom/_basic_geom_tools.pyx index b0c4d9d66..e302ac093 100644 --- a/tofu/geom/_basic_geom_tools.pyx +++ b/tofu/geom/_basic_geom_tools.pyx @@ -427,20 +427,30 @@ cdef inline void compute_dist_pt_vec(const double pt0, const double pt1, + (pt2 - vec[2, ii]) * (pt2 - vec[2, ii])) return -# TODO: FAIRE UNE FONCTION QUI CALCULE G \dot (b \ cross c) !!!!!!!!!!!!!!!!!!!!!! + cdef inline void compute_vec_ass_tri(const double pt0, const double pt1, const double pt2, int npts, const double[:, ::1] ptG, + const double[:, ::1] poly_norm, const double[:, ::1] cross_bc, const double[:, ::1] vecb, const double[:, ::1] vecc, + double* side_of_poly, double* num, double* dot_Gb, double* dot_Gc, double* normG2) nogil: """ - Compute the distance between the point P = [pt0, pt1, pt2] and each point - Q_i, where ptG = {Q_0, Q_1, ..., Q_npts-1} + Computes: + - numerator of triangle SA comp : 3 G \dot (b \cross c) + - G \dot b = OG \dot Gb + - G \dot c = OG \dot Gc + - (norm G)**2 = G \dot G = OG \dot \OG + ptG are the coordinates of all G, centroids of all triangles + pt0, pt1, pt2 are the coordinates of O + cross_bc are b x c for all triangles + vecb = \vec Gb + vecc = \vec Gc """ cdef int ii for ii in range(0, npts): @@ -456,6 +466,9 @@ cdef inline void compute_vec_ass_tri(const double pt0, const double pt1, dot_Gc[ii] = ((pt0 - ptG[0, ii]) * vecc[0, ii] + (pt1 - ptG[1, ii]) * vecc[1, ii] + (pt2 - ptG[2, ii]) * vecc[2, ii]) + side_of_poly[ii] = ((pt0 - ptG[0, ii]) * poly_norm[0, ii] + + (pt1 - ptG[1, ii]) * poly_norm[1, ii] + + (pt2 - ptG[2, ii]) * poly_norm[2, ii]) return diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index e182760cb..1e11d9603 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -2857,11 +2857,13 @@ cdef inline void tri_asmbl_block_approx( cdef double* norm_G2 = NULL cdef double* dist_opts = NULL cdef double* numerator = NULL + cdef double* side_of_poly = NULL is_vis = malloc(num_tot_tri * sizeof(long)) dot_Gb = malloc(num_tot_tri * sizeof(double)) dot_Gc = malloc(num_tot_tri * sizeof(double)) norm_G2 = malloc(num_tot_tri * sizeof(double)) + side_of_poly = malloc(num_tot_tri * sizeof(double)) for rr in range(sz_r): loc_r = disc_r[rr] loc_size_phi = sz_phi[rr] @@ -2883,8 +2885,10 @@ cdef inline void tri_asmbl_block_approx( # OG norm and other associated values .... _bgt.compute_vec_ass_tri(loc_x, loc_y, loc_z, num_tot_tri, centroids, + poly_norm, cross_GBGC, vec_GB, vec_GC, + &side_of_poly[0], &numerator[0], &dot_Gb[0], &dot_Gc[0], @@ -2916,6 +2920,8 @@ cdef inline void tri_asmbl_block_approx( forbid, 1) for ipoly in range(npoly): + if side_of_poly[ipoly] < 0.: + continue # point is not on right side of poly dist_opts = malloc(lnvert_poly[ipoly] * sizeof(double)) # computing distances to vertices of poly (OA, OB, OC) @@ -2993,10 +2999,12 @@ cdef inline void tri_asmbl_unblock_approx( cdef double* norm_G2 = NULL cdef double* dist_opts = NULL cdef double* numerator = NULL + cdef double* side_of_poly = NULL dot_Gb = malloc(num_tot_tri * sizeof(double)) dot_Gc = malloc(num_tot_tri * sizeof(double)) norm_G2 = malloc(num_tot_tri * sizeof(double)) + side_of_poly = malloc(num_tot_tri * sizeof(double)) for rr in range(sz_r): loc_r = disc_r[rr] loc_size_phi = sz_phi[rr] @@ -3018,13 +3026,17 @@ cdef inline void tri_asmbl_unblock_approx( # OG norm and other associated values .... _bgt.compute_vec_ass_tri(loc_x, loc_y, loc_z, num_tot_tri, centroids, + poly_norm, cross_GBGC, vec_GB, vec_GC, + &side_of_poly[0], &numerator[0], &dot_Gb[0], &dot_Gc[0], &norm_G2[0]) for ipoly in range(npoly): + if side_of_poly[ipoly] < 0.: + continue # point is not on right side of poly dist_opts = malloc(lnvert_poly[ipoly] * sizeof(double)) # computing distances to vertices of poly (OA, OB, OC) @@ -3049,6 +3061,7 @@ cdef inline void tri_asmbl_unblock_approx( free(dot_Gb) free(dot_Gc) free(norm_G2) + free(side_of_poly) return diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index 0c7cbf325..c0962d4c1 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-06-01 13:27:38 +# Autogenerated by Tofu's setup.py on 2021-06-01 14:39:52 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. From 175ea375f091ffeaba4bccc66414ac08685522d5 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Wed, 16 Jun 2021 16:12:16 +0200 Subject: [PATCH 12/29] [#75] solved three mem allocs (with prints) --- tofu/geom/_GG.pyx | 60 ++++-- tofu/geom/_basic_geom_tools.pyx | 20 +- tofu/geom/_sampling_tools.pyx | 26 +++ tofu/geom/_vignetting_tools.pyx | 96 ++++++++-- tofu/geom/openmp_enabled.py | 2 +- tofu/tests/tests01_geom/test_04_sampling.py | 192 ++++++++++++++++++++ 6 files changed, 357 insertions(+), 39 deletions(-) diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index c584d7803..378914a93 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -2751,7 +2751,18 @@ def triangulate_by_earclipping(np.ndarray[double,ndim=2] poly): diff = malloc(3*nvert*sizeof(double)) lref = malloc(nvert*sizeof(bint)) _vt.compute_diff3d(&poly[0,0], nvert, diff) + for ii in range(nvert): + print("... diff = ", + diff[ii*3 + 0], + diff[ii*3 + 1], + diff[ii*3 + 2] + ) + _vt.are_points_reflex(nvert, diff, lref) + for ii in range(nvert): + print("... lref = ", + lref[ii] + ) # Calling core function..................................................... _vt.earclipping_poly(&poly[0,0], <ri[0], diff, lref, nvert) free(diff) @@ -4940,8 +4951,8 @@ def compute_solid_angle_map(double[:,::1] part_coords, double[::1] part_r, # # ============================================================================== def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, - double[:, ::1] poly_norm, - long[::1] lnvert_poly, + double[:, ::1] poly_lnorms, + long[::1] poly_lnvert, double rstep, double zstep, double phistep, double[::1] RMinMax, double[::1] ZMinMax, bint approx=True, @@ -4957,7 +4968,7 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, list lstruct_lims=None, double[::1] lstruct_normx=None, double[::1] lstruct_normy=None, - long[::1] lstruct_nvert=None, + long[::1] lnvert=None, int nstruct_tot=0, int nstruct_lim=0, double rmin=-1, bint forbid=True, @@ -4969,18 +4980,18 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, """ Computes the 2D map of the integrated solid angles subtended by a list of npoly polygons of coordinates poly_coords[npoly], not necessarily flat, - one sided and side defined by poly_norm[npoly], nomal vector of polygon. + one sided and side defined by poly_lnorms[npoly], nomal vector of polygon. If you want to see the details of the computation see: $TOFU_DIR/Notes_Upgrades/SA_tetra/SA_tetra.tex Parameters ---------- - poly_coords: double array + poly_coords: double (npoly, 3, npts) array coordinates of the points defining the polygons. not necessarily flat. poly_coords[np, i] being the i-th coordinate of the np polygon - poly_norm: double array + poly_lnorms: double array normal vector that defines the visible face of the polygon - poly_norm[np] defines the norm of the np-th polygon + poly_lnorms[np] defines the norm of the np-th polygon rstep: double refinement along radius `r` zstep: double @@ -5062,7 +5073,6 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, rdrdz: (npts) volume unit: dr*dz """ cdef int jj - cdef int sz_p cdef int sz_r cdef int sz_z cdef int npoly @@ -5100,7 +5110,6 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, cdef double* disc_z = NULL cdef double* step_rphi = NULL cdef double** data = NULL - cdef np.ndarray[long, ndim=2] indI cdef np.ndarray[long, ndim=1] ind cdef np.ndarray[double, ndim=1] reso_rdrdz cdef np.ndarray[double, ndim=1] dot_GBGC @@ -5109,9 +5118,9 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, cdef np.ndarray[double, ndim=2] vec_GB cdef np.ndarray[double, ndim=2] vec_GC cdef np.ndarray[double, ndim=2] centroids - cdef np.ndarray[double, ndim=2] poly_norm_tot + cdef np.ndarray[double, ndim=2] poly_lnorms_tot cdef np.ndarray[double, ndim=2] cross_GBGC - cdef np.ndarray[double, ndim=2, mode="c"] temp + cdef double[:, ::1] temp # # == Testing inputs ======================================================== if test: @@ -5149,33 +5158,39 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, data[ii] = &temp[0, 0] _vt.triangulate_polys( &data[0], - &lnvert_poly[0], + &poly_lnvert[0], npoly, ltri, num_threads ) + for ii in range(6): + print("+ ", ltri[0][ii]) # cpumputing total number of triangles - tot_num_tri = np.sum(lnvert_poly) - 2 * npoly + tot_num_tri = np.sum(poly_lnvert) - 2 * npoly # .. Getting centroids of triangles ....................................... dot_GBGC = np.zeros(tot_num_tri) vec_GB = np.zeros((3, tot_num_tri)) vec_GC = np.zeros((3, tot_num_tri)) centroids = np.zeros((3, tot_num_tri)) cross_GBGC = np.zeros((3, tot_num_tri)) + print("about to compute centroids") _bgt.find_centroids_GB_GC_ltri( poly_coords, ltri, - &lnvert_poly[0], + &poly_lnvert[0], npoly, num_threads, centroids, vec_GB, vec_GC, ) + print("DOOOOOOOOOOOOONE") - poly_norm_tot = np.repeat(poly_norm, np.asarray(lnvert_poly) - 2, axis = 1) - assert poly_norm_tot.shape[1] == tot_num_tri - + poly_lnorms_tot = np.repeat(poly_lnorms, + np.asarray(poly_lnvert) - 2, + axis = 0) + assert np.shape(poly_lnorms_tot)[0] == tot_num_tri + print("dot corss vec...........;;") _bgt.compute_dot_cross_vec(vec_GB, vec_GC, cross_GBGC, @@ -5183,6 +5198,7 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, tot_num_tri, num_threads, ) + print("DOOOOOOOOOOOOOOOE") # .. Check if points are visible ........................................... # Get the actual R and Z resolutions and mesh elements # .. First we discretize R without limits .................................. @@ -5207,6 +5223,7 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, margin, &disc_z, reso_z, &lindex_z, ncells_z) # .. Preparing for phi: get the limits if any and make sure to replace them + print("DOOOOOOOOONE 1") # .. in the proper quadrants ............................................... if DPhi is None: min_phi = -c_pi @@ -5315,6 +5332,7 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, npts_pol = _st.sa_get_index_arrays(ind_rz2pol, is_in_vignette, sz_r, sz_z) + print("DOOOOOOOOOOONE 2") # initializing arrays reso_rdrdz = np.empty((npts_pol, )) sa_map = np.zeros((npts_pol, npoly)) @@ -5330,6 +5348,7 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, # initializing utilitary arrays num_threads = _ompt.get_effective_num_threads(num_threads) lstruct_lims_np = flatten_lstruct_lims(lstruct_lims) + print("DOOOOOOOOOOONE 3") # .............. # TODO: pour checker si triangle est visible par un point ed discretization # checker juste si point voit le barycentre du triangle. @@ -5338,8 +5357,8 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, approx, poly_coords, npoly, - lnvert_poly, - ltri, poly_norm_tot, + poly_lnvert, + ltri, poly_lnorms_tot, centroids, vec_GB, vec_GC, @@ -5356,7 +5375,7 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, lstruct_lims_np, lstruct_normx, lstruct_normy, - lstruct_nvert, + lnvert, nstruct_tot, nstruct_lim, rmin, @@ -5379,6 +5398,7 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, ind_mv, num_threads ) + print("done before frees") # ... freeing up memory .................................................... free(lindex_z) free(disc_r) diff --git a/tofu/geom/_basic_geom_tools.pyx b/tofu/geom/_basic_geom_tools.pyx index e302ac093..cc4485831 100644 --- a/tofu/geom/_basic_geom_tools.pyx +++ b/tofu/geom/_basic_geom_tools.pyx @@ -453,22 +453,34 @@ cdef inline void compute_vec_ass_tri(const double pt0, const double pt1, vecc = \vec Gc """ cdef int ii - for ii in range(0, npts): + for ii in range(npts): + with gil: + print("_______\n ii / npts =", ii, npts) normG2[ii] = ((pt0 - ptG[0, ii]) * (pt0 - ptG[0, ii]) + (pt1 - ptG[1, ii]) * (pt1 - ptG[1, ii]) + (pt2 - ptG[2, ii]) * (pt2 - ptG[2, ii])) + with gil: + print("right here 1", num==NULL) num[ii] = ((pt0 - ptG[0, ii]) * cross_bc[0, ii] + (pt1 - ptG[1, ii]) * cross_bc[1, ii] + (pt2 - ptG[2, ii]) * cross_bc[2, ii]) + # with gil: + # print("right here 2") dot_Gb[ii] = ((pt0 - ptG[0, ii]) * vecb[0, ii] + (pt1 - ptG[1, ii]) * vecb[1, ii] + (pt2 - ptG[2, ii]) * vecb[2, ii]) + # with gil: + # print("right here 3") dot_Gc[ii] = ((pt0 - ptG[0, ii]) * vecc[0, ii] + (pt1 - ptG[1, ii]) * vecc[1, ii] + (pt2 - ptG[2, ii]) * vecc[2, ii]) - side_of_poly[ii] = ((pt0 - ptG[0, ii]) * poly_norm[0, ii] - + (pt1 - ptG[1, ii]) * poly_norm[1, ii] - + (pt2 - ptG[2, ii]) * poly_norm[2, ii]) + # with gil: + # print("right here 4") + side_of_poly[ii] = ((pt0 - ptG[0, ii]) * poly_norm[ii, 0] + + (pt1 - ptG[1, ii]) * poly_norm[ii, 1] + + (pt2 - ptG[2, ii]) * poly_norm[ii, 2]) + # with gil: + # print("right here 5") return diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index 1e11d9603..49478a4e6 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -2750,6 +2750,7 @@ cdef inline void sa_tri_assemble( reso_rdrdz, pts_mv, ind_mv, num_threads) elif not block and use_approx: + print("........ NOT BLOCKING") tri_asmbl_unblock_approx( poly_coords, npoly, @@ -2863,7 +2864,9 @@ cdef inline void tri_asmbl_block_approx( dot_Gb = malloc(num_tot_tri * sizeof(double)) dot_Gc = malloc(num_tot_tri * sizeof(double)) norm_G2 = malloc(num_tot_tri * sizeof(double)) + numerator = malloc(num_tot_tri * sizeof(double)) side_of_poly = malloc(num_tot_tri * sizeof(double)) + for rr in range(sz_r): loc_r = disc_r[rr] loc_size_phi = sz_phi[rr] @@ -3004,8 +3007,14 @@ cdef inline void tri_asmbl_unblock_approx( dot_Gb = malloc(num_tot_tri * sizeof(double)) dot_Gc = malloc(num_tot_tri * sizeof(double)) norm_G2 = malloc(num_tot_tri * sizeof(double)) + numerator = malloc(num_tot_tri * sizeof(double)) side_of_poly = malloc(num_tot_tri * sizeof(double)) + + with gil: + print("........ hereeee") for rr in range(sz_r): + with gil: + print("rr / sz/r =", rr, sz_r) loc_r = disc_r[rr] loc_size_phi = sz_phi[rr] loc_step_rphi = step_rphi[rr] @@ -3024,6 +3033,14 @@ cdef inline void tri_asmbl_unblock_approx( loc_x = loc_r * c_cos(loc_phi) loc_y = loc_r * c_sin(loc_phi) # OG norm and other associated values .... + with gil: + print("before vec ass tri..........", num_tot_tri, + side_of_poly==NULL, + numerator==NULL, + dot_Gb==NULL, + dot_Gc==NULL, + norm_G2==NULL, + ) _bgt.compute_vec_ass_tri(loc_x, loc_y, loc_z, num_tot_tri, centroids, poly_norm, @@ -3034,7 +3051,11 @@ cdef inline void tri_asmbl_unblock_approx( &dot_Gb[0], &dot_Gc[0], &norm_G2[0]) + # with gil: + # print("before vec ass tri.......... DONE") for ipoly in range(npoly): + # with gil: + # print("ipoly / npoly =", ipoly, npoly) if side_of_poly[ipoly] < 0.: continue # point is not on right side of poly dist_opts = malloc(lnvert_poly[ipoly] @@ -3045,6 +3066,8 @@ cdef inline void tri_asmbl_unblock_approx( poly_coords[ipoly], &dist_opts[0]) for itri in range(lnvert_poly[ipoly] - 2): + # with gil: + # print("before comp_sa_tri_appx.......") iglob = ipoly + itri * npoly sa_map[ind_pol, ipoly] += comp_sa_tri_appx( @@ -3057,10 +3080,13 @@ cdef inline void tri_asmbl_unblock_approx( dot_GBGC[iglob], dist_opts, ) + # with gil: + # print("before comp_sa_tri_appx....... DONE") free(dist_opts) free(dot_Gb) free(dot_Gc) free(norm_G2) + free(numerator) free(side_of_poly) return diff --git a/tofu/geom/_vignetting_tools.pyx b/tofu/geom/_vignetting_tools.pyx index b0b955246..937ac8ddf 100644 --- a/tofu/geom/_vignetting_tools.pyx +++ b/tofu/geom/_vignetting_tools.pyx @@ -36,16 +36,20 @@ cdef inline bint is_reflex(const double[3] u, cdef double sumc cdef double[3] ucrossv # ... + # with gil: + # for ii in range(3): + # print("- u, v = ", u[ii], v[ii]) _bgt.compute_cross_prod(u, v, ucrossv) sumc = 0.0 for ii in range(3): # normally it should be a sum, but it is a minus cause is we have (U,-V) - sumc = ucrossv[ii] + sumc += ucrossv[ii] return sumc >= 0. cdef inline void compute_diff3d(double* orig, int nvert, double* diff) nogil: + # poly can be open ! cdef int ivert for ivert in range(nvert-1): diff[ivert*3 + 0] = orig[0*nvert+(ivert+1)] - orig[0*nvert+ivert] @@ -57,6 +61,7 @@ cdef inline void compute_diff3d(double* orig, diff[3*(nvert-1) + 2] = orig[2*nvert] - orig[2*nvert+(nvert-1)] return + cdef inline void are_points_reflex(int nvert, double* diff, bint* are_reflex) nogil: @@ -65,10 +70,8 @@ cdef inline void are_points_reflex(int nvert, (angle > pi) or not. """ cdef int ivert - cdef int icoord - cdef double[3] u1, v1, un, vn # .. Computing if reflex or not ........................................... - for ivert in range(1,nvert): + for ivert in range(1, nvert): are_reflex[ivert] = is_reflex(&diff[ivert*3], &diff[(ivert-1)*3]) # doing first point: are_reflex[0] = is_reflex(&diff[0], &diff[(nvert-1)*3]) @@ -115,7 +118,7 @@ cdef inline int get_one_ear(double* polygon, double* diff, bint* lref, vecpp[int] working_index, - int nvert, int orig_nvert) nogil: + int nvert, int orig_nvert) nogil except -1: """ A polygon's "ear" is defined as a triangle of vert_i-1, vert_i, vert_i+1, points on the polygon, where the point vert_i has the following properties: @@ -138,13 +141,16 @@ cdef inline int get_one_ear(double* polygon, lref = [ .. is_reflex(Pii-1), X, is_reflex(Pii+1),..] where X represents values that will never be used ! """ - cdef int iloc cdef int i, j cdef int wi, wj cdef int wip1, wim1 cdef bint a_pt_in_tri + with gil: + print("Number of vert : ", nvert) for i in range(1, nvert-1): wi = working_index[i] + with gil: + print("> ", i, " working ind =", wi, lref[wi]) if not lref[wi]: # angle is not reflex a_pt_in_tri = False @@ -158,22 +164,25 @@ cdef inline int get_one_ear(double* polygon, # edges of the triangle if (lref[wj] and wj != wim1 and wj != wip1 and wj != wi): if is_pt_in_tri(&diff[wi*3], &diff[wim1*3], - polygon[0*orig_nvert+wi], - polygon[1*orig_nvert+wi], - polygon[2*orig_nvert+wi], - polygon[0*orig_nvert+wj], - polygon[1*orig_nvert+wj], - polygon[2*orig_nvert+wj]): + polygon[0 * orig_nvert + wi], + polygon[1 * orig_nvert + wi], + polygon[2 * orig_nvert + wi], + polygon[0 * orig_nvert + wj], + polygon[1 * orig_nvert + wj], + polygon[2 * orig_nvert + wj]): # We found a point in the triangle, thus is not ear # no need to keep testing.... a_pt_in_tri = True break # Let's check if there was a point in the triangle.... + # with gil: + # print("was there a point in tri =", a_pt_in_tri, i) if not a_pt_in_tri: return i # if not, we found an ear # if we havent returned, either, there was an error somerwhere with gil: assert False, "Got here but shouldnt have " + raise ValueError() return -1 @@ -192,7 +201,7 @@ cdef inline void earclipping_poly(double* vignett, # init... cdef int loc_nv = nvert cdef int itri = 0 - cdef int ii, jj + cdef int ii cdef int wi, wim1, wip1 cdef int iear cdef vecpp[int] working_index @@ -203,38 +212,69 @@ cdef inline void earclipping_poly(double* vignett, working_index.push_back(ii) # .. Loop .................................................................. for itri in range(nvert-3): + # with gil: + # print("# itri =", itri, lref[0]) iear = get_one_ear(vignett, &diff[0], &lref[0], - working_index, loc_nv, nvert) + working_index, loc_nv, nvert) + if iear < 0: + with gil: + print("itri :", itri) + raise ValueError() wim1 = working_index[iear-1] + with gil: + print("doing first done", wim1) wi = working_index[iear] + with gil: + print("doing second done", wi) wip1 = working_index[iear+1] + with gil: + print("doing third done", wip1) ltri[itri*3] = wim1 ltri[itri*3+1] = wi ltri[itri*3+2] = wip1 + with gil: + print("doing ltri getts done") # updates on the "information" arrays: diff[wim1*3] = vignett[0*nvert+wip1] - vignett[0*nvert+wim1] diff[wim1*3+1] = vignett[1*nvert+wip1] - vignett[1*nvert+wim1] diff[wim1*3+2] = vignett[2*nvert+wip1] - vignett[2*nvert+wim1] + with gil: + print("doing getting diffs done") #... theoritically we should get rid of off diff[wip1] as well but # we'll just not use it, however we have to update lref # if an angle is not reflex, then it will stay so, only chage if reflex if lref[wim1]: + with gil: + print("lref is ref done") if iear >= 2: lref[wim1] = is_reflex(&diff[3*wim1], &diff[3*working_index[iear-2]]) else: lref[wim1] = is_reflex(&diff[3*wim1], &diff[3*working_index[loc_nv-1]]) + with gil: + print(" going to check lref +1") + print(" lref )", lref[wip1]) if lref[wip1]: lref[wip1] = is_reflex(&diff[wip1*3], &diff[wim1*3]) # last but not least update on number of vertices and working indices loc_nv = loc_nv - 1 + with gil: + print("erasing") working_index.erase(working_index.begin()+iear) + with gil: + print("erasing done") # we only have three points left, so that is the last triangle: ltri[(itri+1)*3] = working_index[0] + with gil: + print("1") ltri[(itri+1)*3+1] = working_index[1] + with gil: + print("doing 2 done") ltri[(itri+1)*3+2] = working_index[2] + with gil: + print("doing 3 done") return # ============================================================================== @@ -252,6 +292,7 @@ cdef inline void triangulate_poly(double* vignett_poly, where tri_i_j are the 3 indices of the vertex forming a sub-triangle on each vertex (-2) and for each vignett """ + cdef int ii cdef double* diff = NULL cdef bint* lref = NULL # ... @@ -260,6 +301,14 @@ cdef inline void triangulate_poly(double* vignett_poly, lref = malloc(nvert*sizeof(bint)) ltri[0] = malloc((nvert-2)*3*sizeof(long)) compute_diff3d(vignett_poly, nvert, &diff[0]) + for ii in range(nvert): + with gil: + print("... diff = ", + diff[ii*3 + 0], + diff[ii*3 + 1], + diff[ii*3 + 2] + ) + are_points_reflex(nvert, diff, &lref[0]) earclipping_poly(vignett_poly, <ri[0][0], &diff[0], &lref[0], nvert) @@ -282,6 +331,7 @@ cdef inline int triangulate_polys(double** vignett_poly, """ cdef int ivign cdef int nvert + cdef int ii cdef double* diff = NULL cdef bint* lref = NULL # ... @@ -297,12 +347,30 @@ cdef inline int triangulate_polys(double** vignett_poly, raise MemoryError() try: compute_diff3d(vignett_poly[ivign], nvert, &diff[0]) + # for ii in range(nvert): + # with gil: + # print("... diff = ", + # diff[ii*3 + 0], + # diff[ii*3 + 1], + # diff[ii*3 + 2] + # ) are_points_reflex(nvert, diff, &lref[0]) + # with gil: + # for ii in range(nvert): + # print("... is ref = ", + # lref[ii] + # ) earclipping_poly(vignett_poly[ivign], <ri[ivign][0], &diff[0], &lref[0], nvert) finally: + # with gil: + # print("about to free: ") free(diff) + # with gil: + # print("in between") free(lref) + # with gil: + # print("done") return 0 diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index c0962d4c1..da10a9347 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-06-01 14:39:52 +# Autogenerated by Tofu's setup.py on 2021-06-16 14:10:19 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. diff --git a/tofu/tests/tests01_geom/test_04_sampling.py b/tofu/tests/tests01_geom/test_04_sampling.py index 0e152b13c..13437be22 100644 --- a/tofu/tests/tests01_geom/test_04_sampling.py +++ b/tofu/tests/tests01_geom/test_04_sampling.py @@ -361,6 +361,198 @@ def test05_sa_integ_map(ves_poly=VPoly, debug=0): equal_nan=True) assert np.allclose(sa_map_py, sa_map_py_ex, atol=1e-14, rtol=1e-16, equal_nan=True) + # ... + return + + +def test06_sa_integ_poly_map(ves_poly=VPoly, debug=0): + import matplotlib.pyplot as plt + print() + + lblock = [False, True] + lstep_rz = [0.015, 0.02] + + for (block, step_rz) in zip(lblock, lstep_rz): + + config = tf.load_config("A1") + kwdargs = config.get_kwdargs_LOS_isVis() + ves_poly = kwdargs["ves_poly"] + + # coordonnées en x,y,z: + poly_coords = np.array([ + np.array([ + [2.50, 0, -0.5], + [2.50, 0, -0.3], + [2.75, 0, -0.3], + [2.75, 0, -0.5], + + ]).T # first polygon in (R, Z) + ]) + poly_lnorms = np.array([[0, 1., 0]]) + poly_lnvert = np.array([4 for poly in poly_coords]) + print(">>>>>>>>>>>>>>>>>>>>>>><", poly_lnvert) + print(poly_coords[0].shape) + print(poly_coords[0]) + rstep = zstep = step_rz + phistep = 0.08 + limits_r, limits_z = compute_min_max_r_and_z(ves_poly) + DR = None + DZ = None + DPhi = [-0.1, 0.1] + + # -- Getting cython APPROX computation -------------------------------- + res = GG.compute_solid_angle_poly_map( + poly_coords, + poly_lnorms, + poly_lnvert, + rstep, zstep, phistep, + limits_r, limits_z, + DR=DR, DZ=DZ, + DPhi=DPhi, + block=block, + limit_vpoly=ves_poly, + **kwdargs, + ) + pts, sa_map_cy, ind, reso_r_z = res + + # check sizes + npts_ind = np.size(ind) + dim, npts = np.shape(pts) + npts_sa, npoly = np.shape(sa_map_cy) + + if debug > 2: + print(f"sa_map_cy is of size {npts_sa},{sz_p}") + + # Checking shapes, sizes, types + assert dim == 2 + assert npoly == np.shape(poly_coords)[0], str(np.shape(poly_coords)) + assert npts_ind == npts + assert npts == npts_sa + assert isinstance(reso_r_z, float) + # # -- Getting cython EXACT computation --------------------------------- + # kwdargs = config.get_kwdargs_LOS_isVis() + # res = GG.compute_solid_angle_map(part, part_rad, + # rstep, zstep, phistep, + # limits_r, limits_z, + # approx=False, + # DR=DR, DZ=DZ, + # DPhi=DPhi, + # block=block, + # **kwdargs, + # limit_vpoly=ves_poly + # ) + # pts_ex, sa_map_cy_ex, ind_ex, reso_r_z_ex = res + + # if debug > 2: + # print(f"sa_map_cy_ex is of size {npts_sa},{sz_p}") + + # # Checking if pts, indices and resolution same as with approx + # assert np.allclose(pts_ex, pts) + # assert np.allclose(ind_ex, ind) + # assert reso_r_z_ex == reso_r_z + + # # ... Testing with python function .................................... + # res = GG._Ves_Vmesh_Tor_SubFromD_cython(rstep, zstep, phistep, + # limits_r, limits_z, + # limit_vpoly=ves_poly, + # DR=DR, DZ=DZ, + # DPhi=DPhi, + # out_format='(X,Y,Z)', + # margin=1.e-9) + + # pts_xyz, dvol, ind_disc, reso_r, reso_z, reso_phi, sz_r, sz_z = res + + # npts_disc = np.shape(pts_xyz)[1] + + # sang = config.calc_solidangle_particle(pts_xyz, + # part, + # part_rad, + # block=block, + # approx=True) + + # sang_ex = config.calc_solidangle_particle(pts_xyz, + # part, + # part_rad, + # block=block, + # approx=False) + + # pts_disc = GG.coord_shift(pts_xyz, in_format='(X,Y,Z)', + # out_format='(R,Z)') + + # assert (npts_disc, sz_p) == np.shape(sang) + # assert npts_disc >= npts + # assert reso_r * reso_z == reso_r_z + # if ves_poly is None: + # assert npts_sa == sz_z * sz_r, f"sizes r and z = {sz_r}{sz_z}" + + # sa_map_py = np.zeros((npts_sa, sz_p)) + # sa_map_py_ex = np.zeros((npts_sa, sz_p)) + + # r0 = limits_r[0] + # z0 = limits_z[0] + + # lvisited = [] + # for ii in range(npts_disc): + # i_r = int(np.abs(r0 - pts_disc[0, ii]) // reso_r) + # i_z = int(np.abs(z0 - pts_disc[1, ii]) // reso_z) + # ind_pol = int(i_r * sz_z + i_z) + # if ves_poly is not None: + # wh_eq = np.where(ind == ind_pol) + # ind_pol_u = wh_eq[0][0] + # else: + # ind_pol_u = ind_pol + # if ind_pol_u not in lvisited: + # lvisited.append(ind_pol_u) + # for pp in range(sz_p): + # sa_map_py[ind_pol_u, pp] += sang[ii, pp] * reso_phi[i_r] + # sa_map_py_ex[ind_pol_u, pp] += sang_ex[ii, pp] * reso_phi[i_r] + + # if debug > 0: + # for pp in range(sz_p): + # fig = plt.figure(figsize=(14, 8)) + # ax = plt.subplot(121) + # # import pdb; pdb.set_trace() + # ax.scatter(pts[0, :], pts[1, :], + # marker="s", edgecolors="None", + # s=10, c=sa_map_cy[:, pp].flatten(), + # vmin=0, vmax=max(sa_map_cy[:, pp].max(), + # sa_map_py[:, pp].max())) + # ax.set_title("cython function") + # ax = plt.subplot(122) + # im = ax.scatter(pts[0, :], pts[1, :], + # marker="s", edgecolors="None", + # s=10, c=sa_map_py[:, pp].flatten(), + # vmin=0, vmax=max(sa_map_cy[:, pp].max(), + # sa_map_py[:, pp].max())) + # fig.colorbar(im, ax=ax) + # ax.set_title("python reconstruction") + # plt.savefig("comparaison_part"+str(pp)) + + # max_py = np.max(sa_map_py) + # max_cy = np.max(sa_map_cy) + # max_py_ex = np.max(sa_map_py_ex) + # max_cy_ex = np.max(sa_map_cy_ex) + + # err = np.abs(sa_map_py - sa_map_cy) / max(max_py, max_cy) + # print("max error approx py vs cy =", np.max(err)) + + # err = np.abs(sa_map_py_ex - sa_map_cy_ex) / max(max_py_ex, max_cy_ex) + # print("max error exacts py vs cy =", np.max(err)) + + # err = np.abs(sa_map_py_ex - sa_map_py) / max(max_py, max_py_ex) + # print("max error python approx vs exact =", np.max(err)) + + # err = np.abs(sa_map_cy_ex - sa_map_cy) / max(max_cy, max_cy_ex) + # print("max error cython approx vs exact =", np.max(err)) + + # assert np.allclose(sa_map_cy, sa_map_py, atol=1e-16, rtol=1e-16, + # equal_nan=True) + # assert np.allclose(sa_map_cy_ex, sa_map_py_ex, atol=1e-16, rtol=1e-16, + # equal_nan=True) + # assert np.allclose(sa_map_cy, sa_map_cy_ex, atol=1e-14, rtol=1e-16, + # equal_nan=True) + # assert np.allclose(sa_map_py, sa_map_py_ex, atol=1e-14, rtol=1e-16, + # equal_nan=True) # ... return From e16d5b28681d53b20c610312db80b8b514611db9 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Thu, 17 Jun 2021 16:45:49 +0200 Subject: [PATCH 13/29] [#75] debugging stripes in result --- tofu/geom/_GG.pyx | 23 --- tofu/geom/_basic_geom_tools.pyx | 12 -- tofu/geom/_sampling_tools.pyx | 21 --- tofu/geom/_vignetting_tools.pyx | 71 +------- tofu/geom/openmp_enabled.py | 2 +- tofu/tests/tests01_geom/test_04_sampling.py | 178 ++++++-------------- 6 files changed, 54 insertions(+), 253 deletions(-) diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index 378914a93..e31028d68 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -2751,18 +2751,7 @@ def triangulate_by_earclipping(np.ndarray[double,ndim=2] poly): diff = malloc(3*nvert*sizeof(double)) lref = malloc(nvert*sizeof(bint)) _vt.compute_diff3d(&poly[0,0], nvert, diff) - for ii in range(nvert): - print("... diff = ", - diff[ii*3 + 0], - diff[ii*3 + 1], - diff[ii*3 + 2] - ) - _vt.are_points_reflex(nvert, diff, lref) - for ii in range(nvert): - print("... lref = ", - lref[ii] - ) # Calling core function..................................................... _vt.earclipping_poly(&poly[0,0], <ri[0], diff, lref, nvert) free(diff) @@ -5163,8 +5152,6 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, ltri, num_threads ) - for ii in range(6): - print("+ ", ltri[0][ii]) # cpumputing total number of triangles tot_num_tri = np.sum(poly_lnvert) - 2 * npoly # .. Getting centroids of triangles ....................................... @@ -5173,7 +5160,6 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, vec_GC = np.zeros((3, tot_num_tri)) centroids = np.zeros((3, tot_num_tri)) cross_GBGC = np.zeros((3, tot_num_tri)) - print("about to compute centroids") _bgt.find_centroids_GB_GC_ltri( poly_coords, ltri, @@ -5184,13 +5170,11 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, vec_GB, vec_GC, ) - print("DOOOOOOOOOOOOONE") poly_lnorms_tot = np.repeat(poly_lnorms, np.asarray(poly_lnvert) - 2, axis = 0) assert np.shape(poly_lnorms_tot)[0] == tot_num_tri - print("dot corss vec...........;;") _bgt.compute_dot_cross_vec(vec_GB, vec_GC, cross_GBGC, @@ -5198,7 +5182,6 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, tot_num_tri, num_threads, ) - print("DOOOOOOOOOOOOOOOE") # .. Check if points are visible ........................................... # Get the actual R and Z resolutions and mesh elements # .. First we discretize R without limits .................................. @@ -5223,7 +5206,6 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, margin, &disc_z, reso_z, &lindex_z, ncells_z) # .. Preparing for phi: get the limits if any and make sure to replace them - print("DOOOOOOOOONE 1") # .. in the proper quadrants ............................................... if DPhi is None: min_phi = -c_pi @@ -5332,7 +5314,6 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, npts_pol = _st.sa_get_index_arrays(ind_rz2pol, is_in_vignette, sz_r, sz_z) - print("DOOOOOOOOOOONE 2") # initializing arrays reso_rdrdz = np.empty((npts_pol, )) sa_map = np.zeros((npts_pol, npoly)) @@ -5348,10 +5329,7 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, # initializing utilitary arrays num_threads = _ompt.get_effective_num_threads(num_threads) lstruct_lims_np = flatten_lstruct_lims(lstruct_lims) - print("DOOOOOOOOOOONE 3") # .............. - # TODO: pour checker si triangle est visible par un point ed discretization - # checker juste si point voit le barycentre du triangle. _st.sa_tri_assemble( block, approx, @@ -5398,7 +5376,6 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, ind_mv, num_threads ) - print("done before frees") # ... freeing up memory .................................................... free(lindex_z) free(disc_r) diff --git a/tofu/geom/_basic_geom_tools.pyx b/tofu/geom/_basic_geom_tools.pyx index cc4485831..4f3fa56d2 100644 --- a/tofu/geom/_basic_geom_tools.pyx +++ b/tofu/geom/_basic_geom_tools.pyx @@ -454,33 +454,21 @@ cdef inline void compute_vec_ass_tri(const double pt0, const double pt1, """ cdef int ii for ii in range(npts): - with gil: - print("_______\n ii / npts =", ii, npts) normG2[ii] = ((pt0 - ptG[0, ii]) * (pt0 - ptG[0, ii]) + (pt1 - ptG[1, ii]) * (pt1 - ptG[1, ii]) + (pt2 - ptG[2, ii]) * (pt2 - ptG[2, ii])) - with gil: - print("right here 1", num==NULL) num[ii] = ((pt0 - ptG[0, ii]) * cross_bc[0, ii] + (pt1 - ptG[1, ii]) * cross_bc[1, ii] + (pt2 - ptG[2, ii]) * cross_bc[2, ii]) - # with gil: - # print("right here 2") dot_Gb[ii] = ((pt0 - ptG[0, ii]) * vecb[0, ii] + (pt1 - ptG[1, ii]) * vecb[1, ii] + (pt2 - ptG[2, ii]) * vecb[2, ii]) - # with gil: - # print("right here 3") dot_Gc[ii] = ((pt0 - ptG[0, ii]) * vecc[0, ii] + (pt1 - ptG[1, ii]) * vecc[1, ii] + (pt2 - ptG[2, ii]) * vecc[2, ii]) - # with gil: - # print("right here 4") side_of_poly[ii] = ((pt0 - ptG[0, ii]) * poly_norm[ii, 0] + (pt1 - ptG[1, ii]) * poly_norm[ii, 1] + (pt2 - ptG[2, ii]) * poly_norm[ii, 2]) - # with gil: - # print("right here 5") return diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index 49478a4e6..1755e02bd 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -2750,7 +2750,6 @@ cdef inline void sa_tri_assemble( reso_rdrdz, pts_mv, ind_mv, num_threads) elif not block and use_approx: - print("........ NOT BLOCKING") tri_asmbl_unblock_approx( poly_coords, npoly, @@ -3010,11 +3009,7 @@ cdef inline void tri_asmbl_unblock_approx( numerator = malloc(num_tot_tri * sizeof(double)) side_of_poly = malloc(num_tot_tri * sizeof(double)) - with gil: - print("........ hereeee") for rr in range(sz_r): - with gil: - print("rr / sz/r =", rr, sz_r) loc_r = disc_r[rr] loc_size_phi = sz_phi[rr] loc_step_rphi = step_rphi[rr] @@ -3033,14 +3028,6 @@ cdef inline void tri_asmbl_unblock_approx( loc_x = loc_r * c_cos(loc_phi) loc_y = loc_r * c_sin(loc_phi) # OG norm and other associated values .... - with gil: - print("before vec ass tri..........", num_tot_tri, - side_of_poly==NULL, - numerator==NULL, - dot_Gb==NULL, - dot_Gc==NULL, - norm_G2==NULL, - ) _bgt.compute_vec_ass_tri(loc_x, loc_y, loc_z, num_tot_tri, centroids, poly_norm, @@ -3051,11 +3038,7 @@ cdef inline void tri_asmbl_unblock_approx( &dot_Gb[0], &dot_Gc[0], &norm_G2[0]) - # with gil: - # print("before vec ass tri.......... DONE") for ipoly in range(npoly): - # with gil: - # print("ipoly / npoly =", ipoly, npoly) if side_of_poly[ipoly] < 0.: continue # point is not on right side of poly dist_opts = malloc(lnvert_poly[ipoly] @@ -3066,8 +3049,6 @@ cdef inline void tri_asmbl_unblock_approx( poly_coords[ipoly], &dist_opts[0]) for itri in range(lnvert_poly[ipoly] - 2): - # with gil: - # print("before comp_sa_tri_appx.......") iglob = ipoly + itri * npoly sa_map[ind_pol, ipoly] += comp_sa_tri_appx( @@ -3080,8 +3061,6 @@ cdef inline void tri_asmbl_unblock_approx( dot_GBGC[iglob], dist_opts, ) - # with gil: - # print("before comp_sa_tri_appx....... DONE") free(dist_opts) free(dot_Gb) free(dot_Gc) diff --git a/tofu/geom/_vignetting_tools.pyx b/tofu/geom/_vignetting_tools.pyx index 937ac8ddf..60c346f24 100644 --- a/tofu/geom/_vignetting_tools.pyx +++ b/tofu/geom/_vignetting_tools.pyx @@ -36,9 +36,6 @@ cdef inline bint is_reflex(const double[3] u, cdef double sumc cdef double[3] ucrossv # ... - # with gil: - # for ii in range(3): - # print("- u, v = ", u[ii], v[ii]) _bgt.compute_cross_prod(u, v, ucrossv) sumc = 0.0 for ii in range(3): @@ -145,12 +142,8 @@ cdef inline int get_one_ear(double* polygon, cdef int wi, wj cdef int wip1, wim1 cdef bint a_pt_in_tri - with gil: - print("Number of vert : ", nvert) for i in range(1, nvert-1): wi = working_index[i] - with gil: - print("> ", i, " working ind =", wi, lref[wi]) if not lref[wi]: # angle is not reflex a_pt_in_tri = False @@ -175,15 +168,11 @@ cdef inline int get_one_ear(double* polygon, a_pt_in_tri = True break # Let's check if there was a point in the triangle.... - # with gil: - # print("was there a point in tri =", a_pt_in_tri, i) if not a_pt_in_tri: return i # if not, we found an ear # if we havent returned, either, there was an error somerwhere with gil: - assert False, "Got here but shouldnt have " - raise ValueError() - return -1 + raise ValueError("Didn't find a non reflex angle in polygon") cdef inline void earclipping_poly(double* vignett, @@ -212,69 +201,38 @@ cdef inline void earclipping_poly(double* vignett, working_index.push_back(ii) # .. Loop .................................................................. for itri in range(nvert-3): - # with gil: - # print("# itri =", itri, lref[0]) iear = get_one_ear(vignett, &diff[0], &lref[0], working_index, loc_nv, nvert) - if iear < 0: - with gil: - print("itri :", itri) - raise ValueError() wim1 = working_index[iear-1] - with gil: - print("doing first done", wim1) wi = working_index[iear] - with gil: - print("doing second done", wi) wip1 = working_index[iear+1] - with gil: - print("doing third done", wip1) ltri[itri*3] = wim1 ltri[itri*3+1] = wi ltri[itri*3+2] = wip1 - with gil: - print("doing ltri getts done") # updates on the "information" arrays: diff[wim1*3] = vignett[0*nvert+wip1] - vignett[0*nvert+wim1] diff[wim1*3+1] = vignett[1*nvert+wip1] - vignett[1*nvert+wim1] diff[wim1*3+2] = vignett[2*nvert+wip1] - vignett[2*nvert+wim1] - with gil: - print("doing getting diffs done") #... theoritically we should get rid of off diff[wip1] as well but # we'll just not use it, however we have to update lref # if an angle is not reflex, then it will stay so, only chage if reflex if lref[wim1]: - with gil: - print("lref is ref done") if iear >= 2: lref[wim1] = is_reflex(&diff[3*wim1], &diff[3*working_index[iear-2]]) else: lref[wim1] = is_reflex(&diff[3*wim1], &diff[3*working_index[loc_nv-1]]) - with gil: - print(" going to check lref +1") - print(" lref )", lref[wip1]) if lref[wip1]: lref[wip1] = is_reflex(&diff[wip1*3], &diff[wim1*3]) # last but not least update on number of vertices and working indices loc_nv = loc_nv - 1 - with gil: - print("erasing") working_index.erase(working_index.begin()+iear) - with gil: - print("erasing done") # we only have three points left, so that is the last triangle: ltri[(itri+1)*3] = working_index[0] - with gil: - print("1") ltri[(itri+1)*3+1] = working_index[1] - with gil: - print("doing 2 done") ltri[(itri+1)*3+2] = working_index[2] - with gil: - print("doing 3 done") return # ============================================================================== @@ -301,14 +259,6 @@ cdef inline void triangulate_poly(double* vignett_poly, lref = malloc(nvert*sizeof(bint)) ltri[0] = malloc((nvert-2)*3*sizeof(long)) compute_diff3d(vignett_poly, nvert, &diff[0]) - for ii in range(nvert): - with gil: - print("... diff = ", - diff[ii*3 + 0], - diff[ii*3 + 1], - diff[ii*3 + 2] - ) - are_points_reflex(nvert, diff, &lref[0]) earclipping_poly(vignett_poly, <ri[0][0], &diff[0], &lref[0], nvert) @@ -331,7 +281,6 @@ cdef inline int triangulate_polys(double** vignett_poly, """ cdef int ivign cdef int nvert - cdef int ii cdef double* diff = NULL cdef bint* lref = NULL # ... @@ -347,30 +296,12 @@ cdef inline int triangulate_polys(double** vignett_poly, raise MemoryError() try: compute_diff3d(vignett_poly[ivign], nvert, &diff[0]) - # for ii in range(nvert): - # with gil: - # print("... diff = ", - # diff[ii*3 + 0], - # diff[ii*3 + 1], - # diff[ii*3 + 2] - # ) are_points_reflex(nvert, diff, &lref[0]) - # with gil: - # for ii in range(nvert): - # print("... is ref = ", - # lref[ii] - # ) earclipping_poly(vignett_poly[ivign], <ri[ivign][0], &diff[0], &lref[0], nvert) finally: - # with gil: - # print("about to free: ") free(diff) - # with gil: - # print("in between") free(lref) - # with gil: - # print("done") return 0 diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index da10a9347..e9a04f71a 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-06-16 14:10:19 +# Autogenerated by Tofu's setup.py on 2021-06-16 15:10:43 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. diff --git a/tofu/tests/tests01_geom/test_04_sampling.py b/tofu/tests/tests01_geom/test_04_sampling.py index 13437be22..ecaf7e1ef 100644 --- a/tofu/tests/tests01_geom/test_04_sampling.py +++ b/tofu/tests/tests01_geom/test_04_sampling.py @@ -1,6 +1,7 @@ """Tests of the functions in `sampling_tools.pxd` or their wrappers found in `tofu.geom`. """ +import itertools import numpy as np import tofu as tf import tofu.geom._GG as GG @@ -365,39 +366,47 @@ def test05_sa_integ_map(ves_poly=VPoly, debug=0): return -def test06_sa_integ_poly_map(ves_poly=VPoly, debug=0): +def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): import matplotlib.pyplot as plt print() - lblock = [False, True] - lstep_rz = [0.015, 0.02] - - for (block, step_rz) in zip(lblock, lstep_rz): - - config = tf.load_config("A1") - kwdargs = config.get_kwdargs_LOS_isVis() - ves_poly = kwdargs["ves_poly"] + config = tf.load_config("B1") + kwdargs = config.get_kwdargs_LOS_isVis() + ves_poly = kwdargs["ves_poly"] + + if debug > 2: + config.plot() + fig = plt.gcf() + fig.savefig("configuration") + + # coordonnées en x,y,z: + poly_coords = np.array([ + np.array([ + [2.50, 0, -0.5], + [2.50, 0, -0.3], + [2.75, 0, -0.3], + [2.75, 0, -0.5], + ]).T # first polygon in (R, Z) + ]) + poly_lnorms = np.array([[0, 1., 0]]) + poly_lnvert = np.array([4 for poly in poly_coords]) + limits_r, limits_z = compute_min_max_r_and_z(ves_poly) + + lblock = [False] #, True] + lstep_rz = [ + 0.001, + 0.02, + ] + + test_cases = list(itertools.product(lblock, lstep_rz)) + + for (block, step_rz) in test_cases: - # coordonnées en x,y,z: - poly_coords = np.array([ - np.array([ - [2.50, 0, -0.5], - [2.50, 0, -0.3], - [2.75, 0, -0.3], - [2.75, 0, -0.5], - - ]).T # first polygon in (R, Z) - ]) - poly_lnorms = np.array([[0, 1., 0]]) - poly_lnvert = np.array([4 for poly in poly_coords]) - print(">>>>>>>>>>>>>>>>>>>>>>><", poly_lnvert) - print(poly_coords[0].shape) - print(poly_coords[0]) rstep = zstep = step_rz + zstep = step_rz phistep = 0.08 - limits_r, limits_z = compute_min_max_r_and_z(ves_poly) - DR = None - DZ = None + DR = [2., 3.] + DZ = [-0.5, 0.5] DPhi = [-0.1, 0.1] # -- Getting cython APPROX computation -------------------------------- @@ -421,7 +430,7 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=0): npts_sa, npoly = np.shape(sa_map_cy) if debug > 2: - print(f"sa_map_cy is of size {npts_sa},{sz_p}") + print(f"sa_map_cy is of size {npts_sa},{npoly}") # Checking shapes, sizes, types assert dim == 2 @@ -430,104 +439,21 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=0): assert npts == npts_sa assert isinstance(reso_r_z, float) - # # -- Getting cython EXACT computation --------------------------------- - # kwdargs = config.get_kwdargs_LOS_isVis() - # res = GG.compute_solid_angle_map(part, part_rad, - # rstep, zstep, phistep, - # limits_r, limits_z, - # approx=False, - # DR=DR, DZ=DZ, - # DPhi=DPhi, - # block=block, - # **kwdargs, - # limit_vpoly=ves_poly - # ) - # pts_ex, sa_map_cy_ex, ind_ex, reso_r_z_ex = res - - # if debug > 2: - # print(f"sa_map_cy_ex is of size {npts_sa},{sz_p}") - - # # Checking if pts, indices and resolution same as with approx - # assert np.allclose(pts_ex, pts) - # assert np.allclose(ind_ex, ind) - # assert reso_r_z_ex == reso_r_z - - # # ... Testing with python function .................................... - # res = GG._Ves_Vmesh_Tor_SubFromD_cython(rstep, zstep, phistep, - # limits_r, limits_z, - # limit_vpoly=ves_poly, - # DR=DR, DZ=DZ, - # DPhi=DPhi, - # out_format='(X,Y,Z)', - # margin=1.e-9) - - # pts_xyz, dvol, ind_disc, reso_r, reso_z, reso_phi, sz_r, sz_z = res - - # npts_disc = np.shape(pts_xyz)[1] - - # sang = config.calc_solidangle_particle(pts_xyz, - # part, - # part_rad, - # block=block, - # approx=True) - - # sang_ex = config.calc_solidangle_particle(pts_xyz, - # part, - # part_rad, - # block=block, - # approx=False) - - # pts_disc = GG.coord_shift(pts_xyz, in_format='(X,Y,Z)', - # out_format='(R,Z)') - - # assert (npts_disc, sz_p) == np.shape(sang) - # assert npts_disc >= npts - # assert reso_r * reso_z == reso_r_z - # if ves_poly is None: - # assert npts_sa == sz_z * sz_r, f"sizes r and z = {sz_r}{sz_z}" - - # sa_map_py = np.zeros((npts_sa, sz_p)) - # sa_map_py_ex = np.zeros((npts_sa, sz_p)) - - # r0 = limits_r[0] - # z0 = limits_z[0] - - # lvisited = [] - # for ii in range(npts_disc): - # i_r = int(np.abs(r0 - pts_disc[0, ii]) // reso_r) - # i_z = int(np.abs(z0 - pts_disc[1, ii]) // reso_z) - # ind_pol = int(i_r * sz_z + i_z) - # if ves_poly is not None: - # wh_eq = np.where(ind == ind_pol) - # ind_pol_u = wh_eq[0][0] - # else: - # ind_pol_u = ind_pol - # if ind_pol_u not in lvisited: - # lvisited.append(ind_pol_u) - # for pp in range(sz_p): - # sa_map_py[ind_pol_u, pp] += sang[ii, pp] * reso_phi[i_r] - # sa_map_py_ex[ind_pol_u, pp] += sang_ex[ii, pp] * reso_phi[i_r] - - # if debug > 0: - # for pp in range(sz_p): - # fig = plt.figure(figsize=(14, 8)) - # ax = plt.subplot(121) - # # import pdb; pdb.set_trace() - # ax.scatter(pts[0, :], pts[1, :], - # marker="s", edgecolors="None", - # s=10, c=sa_map_cy[:, pp].flatten(), - # vmin=0, vmax=max(sa_map_cy[:, pp].max(), - # sa_map_py[:, pp].max())) - # ax.set_title("cython function") - # ax = plt.subplot(122) - # im = ax.scatter(pts[0, :], pts[1, :], - # marker="s", edgecolors="None", - # s=10, c=sa_map_py[:, pp].flatten(), - # vmin=0, vmax=max(sa_map_cy[:, pp].max(), - # sa_map_py[:, pp].max())) - # fig.colorbar(im, ax=ax) - # ax.set_title("python reconstruction") - # plt.savefig("comparaison_part"+str(pp)) + if debug > 0: + for pp in range(npoly): + plt.clf() + fig = plt.figure() + ax = plt.subplot(111) + # import pdb; pdb.set_trace() + im = ax.scatter(pts[0, :], pts[1, :], + marker="s", edgecolors="None", + s=10, c=sa_map_cy[:, pp].flatten(), + vmin=0, vmax=sa_map_cy[:, pp].max()) + ax.set_title("cython function") + fig.colorbar(im, ax=ax) + plt.savefig("sa_map_poly" + str(pp) + + "_block" + str(block) + + "_steprz" + str(step_rz).replace(".", "_")) # max_py = np.max(sa_map_py) # max_cy = np.max(sa_map_cy) From c0876e38cf1142c1d9e7741e32262ad2c020851c Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Fri, 25 Jun 2021 00:10:29 +0200 Subject: [PATCH 14/29] [#75] working but doesnt look like right answer --- tofu/geom/_GG.pyx | 17 +++-- tofu/geom/_basic_geom_tools.pxd | 7 +- tofu/geom/_basic_geom_tools.pyx | 75 ++++++++++++++------- tofu/geom/_sampling_tools.pxd | 2 +- tofu/geom/_sampling_tools.pyx | 17 ++--- tofu/geom/openmp_enabled.py | 2 +- tofu/tests/tests01_geom/test_04_sampling.py | 72 ++++++++++++++------ 7 files changed, 129 insertions(+), 63 deletions(-) diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index e31028d68..ea071471a 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -4939,7 +4939,7 @@ def compute_solid_angle_map(double[:,::1] part_coords, double[::1] part_r, # subtended by a polygon # # ============================================================================== -def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, +def compute_solid_angle_poly_map(list poly_coords, double[:, ::1] poly_lnorms, long[::1] poly_lnvert, double rstep, double zstep, double phistep, @@ -4974,7 +4974,7 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, $TOFU_DIR/Notes_Upgrades/SA_tetra/SA_tetra.tex Parameters ---------- - poly_coords: double (npoly, 3, npts) array + poly_coords: double (npoly, 3, npts) list coordinates of the points defining the polygons. not necessarily flat. poly_coords[np, i] being the i-th coordinate of the np polygon @@ -5137,7 +5137,7 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, assert ves_type.lower() in ['tor', 'lin'], msg # ... # .. Getting size of arrays ................................................ - npoly = poly_coords.shape[0] + npoly = len(poly_coords) # .. Dividing polys in triangles ........................................... ltri = malloc(sizeof(long*) * npoly) # re writting_polygons coordinates to C type: @@ -5161,7 +5161,7 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, centroids = np.zeros((3, tot_num_tri)) cross_GBGC = np.zeros((3, tot_num_tri)) _bgt.find_centroids_GB_GC_ltri( - poly_coords, + data, ltri, &poly_lnvert[0], npoly, @@ -5174,7 +5174,10 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, poly_lnorms_tot = np.repeat(poly_lnorms, np.asarray(poly_lnvert) - 2, axis = 0) - assert np.shape(poly_lnorms_tot)[0] == tot_num_tri + assert np.shape(poly_lnorms_tot)[0] == tot_num_tri, ( + f"Total number of triangles = {tot_num_tri} " + + " and was expecting: " + + str(np.shape(poly_lnorms_tot))) _bgt.compute_dot_cross_vec(vec_GB, vec_GC, cross_GBGC, @@ -5333,7 +5336,7 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, _st.sa_tri_assemble( block, approx, - poly_coords, + data, npoly, poly_lnvert, ltri, poly_lnorms_tot, @@ -5384,5 +5387,5 @@ def compute_solid_angle_poly_map(double[:, :, ::1] poly_coords, free(sz_phi) free(step_rphi) free(ncells_rphi) - + free(data) return pts, sa_map, ind, reso_r_z diff --git a/tofu/geom/_basic_geom_tools.pxd b/tofu/geom/_basic_geom_tools.pxd index 29a5c6a68..4c7604f7b 100644 --- a/tofu/geom/_basic_geom_tools.pxd +++ b/tofu/geom/_basic_geom_tools.pxd @@ -81,7 +81,7 @@ cdef void find_centroids_ltri(const double[:, :, ::1] poly_coords, const int num_threads, double[:, ::1] centroid) nogil -cdef void find_centroids_GB_GC_ltri(const double[:, :, ::1] poly_coords, +cdef void find_centroids_GB_GC_ltri(const double** poly_coords, const long** ltri, const long* lnvert, const int npoly, @@ -104,6 +104,11 @@ cdef void compute_vec_ass_tri(const double pt0, const double pt1, double* dot_Gc, double* normG2) nogil +cdef void compute_dist_pt_arr(const double pt0, const double pt1, + const double pt2, int npts, + const double* vec, + double* dist) nogil + cdef void compute_dist_pt_vec(const double pt0, const double pt1, const double pt2, const int npts, const double[:, ::1] vec, diff --git a/tofu/geom/_basic_geom_tools.pyx b/tofu/geom/_basic_geom_tools.pyx index 4f3fa56d2..051e9cd85 100644 --- a/tofu/geom/_basic_geom_tools.pyx +++ b/tofu/geom/_basic_geom_tools.pyx @@ -208,7 +208,7 @@ cdef inline void compute_dot_cross_vec(const double[:, ::1] lvec_a, vec2[0] = lvec_b[0, ii] vec2[1] = lvec_b[1, ii] vec2[2] = lvec_b[2, ii] - compute_cross_prod(vec1, vec2, vec3) + compute_cross_prod(vec1, vec2, &vec3[0]) cross_p[0, ii] = vec3[0] cross_p[1, ii] = vec3[1] cross_p[2, ii] = vec3[2] @@ -364,7 +364,7 @@ cdef inline void find_centroids_ltri(const double[:, :, ::1] poly_coords, -cdef inline void find_centroids_GB_GC_ltri(const double[:, :, ::1] poly_coords, +cdef inline void find_centroids_GB_GC_ltri(const double** poly_coords, const long** ltri, const long* lnvert, const int npoly, @@ -389,15 +389,15 @@ cdef inline void find_centroids_GB_GC_ltri(const double[:, :, ::1] poly_coords, wim1 = ltri[ipol][itri*3] wi = ltri[ipol][itri*3+1] wip1 = ltri[ipol][itri*3+2] - xtri[0] = poly_coords[ipol, 0, wim1] - ytri[0] = poly_coords[ipol, 1, wim1] - ztri[0] = poly_coords[ipol, 2, wim1] - xtri[1] = poly_coords[ipol, 0, wi] - ytri[1] = poly_coords[ipol, 1, wi] - ztri[1] = poly_coords[ipol, 2, wi] - xtri[2] = poly_coords[ipol, 0, wip1] - ytri[2] = poly_coords[ipol, 1, wip1] - ztri[2] = poly_coords[ipol, 2, wip1] + xtri[0] = poly_coords[ipol][0 * lnvert[ipol] + wim1] + ytri[0] = poly_coords[ipol][1 * lnvert[ipol] + wim1] + ztri[0] = poly_coords[ipol][2 * lnvert[ipol] + wim1] + xtri[1] = poly_coords[ipol][0 * lnvert[ipol] + wi] + ytri[1] = poly_coords[ipol][1 * lnvert[ipol] + wi] + ztri[1] = poly_coords[ipol][2 * lnvert[ipol] + wi] + xtri[2] = poly_coords[ipol][0 * lnvert[ipol] + wip1] + ytri[2] = poly_coords[ipol][1 * lnvert[ipol] + wip1] + ztri[2] = poly_coords[ipol][2 * lnvert[ipol] + wip1] iglob = ipol + itri * npoly find_centroid_tri(xtri, ytri, ztri, centroid[:, iglob]) @@ -412,6 +412,23 @@ cdef inline void find_centroids_GB_GC_ltri(const double[:, :, ::1] poly_coords, # ============================================================================== # = Distance # ============================================================================== +cdef inline void compute_dist_pt_arr(const double pt0, const double pt1, + const double pt2, int npts, + const double* vec, + double* dist) nogil: + """ + Compute the distance between the point P = [pt0, pt1, pt2] and each point + Q_i, where vec = {Q_0, Q_1, ..., Q_npts-1} + """ + cdef int ii + for ii in range(0, npts): + dist[ii] = c_sqrt( + (pt0 - vec[0 * npts + ii]) * (pt0 - vec[0 * npts + ii]) + + (pt1 - vec[1 * npts + ii]) * (pt1 - vec[1 * npts + ii]) + + (pt2 - vec[2 * npts + ii]) * (pt2 - vec[2 * npts + ii])) + return + + cdef inline void compute_dist_pt_vec(const double pt0, const double pt1, const double pt2, int npts, const double[:, ::1] vec, @@ -453,22 +470,28 @@ cdef inline void compute_vec_ass_tri(const double pt0, const double pt1, vecc = \vec Gc """ cdef int ii + cdef double[3] vec_OG + for ii in range(npts): - normG2[ii] = ((pt0 - ptG[0, ii]) * (pt0 - ptG[0, ii]) - + (pt1 - ptG[1, ii]) * (pt1 - ptG[1, ii]) - + (pt2 - ptG[2, ii]) * (pt2 - ptG[2, ii])) - num[ii] = ((pt0 - ptG[0, ii]) * cross_bc[0, ii] - + (pt1 - ptG[1, ii]) * cross_bc[1, ii] - + (pt2 - ptG[2, ii]) * cross_bc[2, ii]) - dot_Gb[ii] = ((pt0 - ptG[0, ii]) * vecb[0, ii] - + (pt1 - ptG[1, ii]) * vecb[1, ii] - + (pt2 - ptG[2, ii]) * vecb[2, ii]) - dot_Gc[ii] = ((pt0 - ptG[0, ii]) * vecc[0, ii] - + (pt1 - ptG[1, ii]) * vecc[1, ii] - + (pt2 - ptG[2, ii]) * vecc[2, ii]) - side_of_poly[ii] = ((pt0 - ptG[0, ii]) * poly_norm[ii, 0] - + (pt1 - ptG[1, ii]) * poly_norm[ii, 1] - + (pt2 - ptG[2, ii]) * poly_norm[ii, 2]) + vec_OG[0] = ptG[0, ii] - pt0 + vec_OG[1] = ptG[1, ii] - pt1 + vec_OG[2] = ptG[2, ii] - pt2 + normG2[ii] = (vec_OG[0] * vec_OG[0] + + vec_OG[1] * vec_OG[1] + + vec_OG[2] * vec_OG[2]) + num[ii] = 3.0 * ( vec_OG[0] * cross_bc[0, ii] + + vec_OG[1] * cross_bc[1, ii] + + vec_OG[2] * cross_bc[2, ii]) + num[ii] = cross_bc[1, ii] + dot_Gb[ii] = (vec_OG[0] * vecb[0, ii] + + vec_OG[1] * vecb[1, ii] + + vec_OG[2] * vecb[2, ii]) + dot_Gc[ii] = (vec_OG[0] * vecc[0, ii] + + vec_OG[1] * vecc[1, ii] + + vec_OG[2] * vecc[2, ii]) + side_of_poly[ii] = (vec_OG[0] * poly_norm[ii, 0] + + vec_OG[1] * poly_norm[ii, 1] + + vec_OG[2] * poly_norm[ii, 2]) return diff --git a/tofu/geom/_sampling_tools.pxd b/tofu/geom/_sampling_tools.pxd index f8cdc21d3..a5c25c211 100644 --- a/tofu/geom/_sampling_tools.pxd +++ b/tofu/geom/_sampling_tools.pxd @@ -295,7 +295,7 @@ cdef void sa_sphere_assemble(int block, cdef void sa_tri_assemble( int block, int use_approx, - double[:, :, ::1] poly_coords, + double** poly_coords, int npoly, long[::1] lnvert_poly, long** ltri, diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index 1755e02bd..3437faf67 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -239,8 +239,8 @@ cdef inline void discretize_vpoly_core(double[:, ::1] ves_poly, double dstep, #.. Filling arrays.......................................................... if c_abs(din) < _VSMALL: for ii in range(np-1): - v0 = ves_poly[0, ii+1]-ves_poly[0, ii] - v1 = ves_poly[1, ii+1]-ves_poly[1, ii] + v0 = ves_poly[0, ii+1] - ves_poly[0, ii] + v1 = ves_poly[1, ii+1] - ves_poly[1, ii] lminmax[1] = c_sqrt(v0 * v0 + v1 * v1) inv_norm = 1. / lminmax[1] discretize_line1d_core(lminmax, dstep, dl_array, True, @@ -2653,7 +2653,7 @@ cdef inline double comp_sa_sphr_ext(double radius, cdef inline void sa_tri_assemble( int block, int use_approx, - double[:, :, ::1] poly_coords, + double** poly_coords, int npoly, long[::1] lnvert_poly, long** ltri, @@ -2783,7 +2783,7 @@ cdef inline void sa_tri_assemble( cdef inline void tri_asmbl_block_approx( - double[:, :, ::1] poly_coords, + double** poly_coords, int npoly, long[::1] lnvert_poly, long** ltri, @@ -2927,7 +2927,7 @@ cdef inline void tri_asmbl_block_approx( dist_opts = malloc(lnvert_poly[ipoly] * sizeof(double)) # computing distances to vertices of poly (OA, OB, OC) - _bgt.compute_dist_pt_vec(loc_x, loc_y, loc_z, + _bgt.compute_dist_pt_arr(loc_x, loc_y, loc_z, lnvert_poly[ipoly], poly_coords[ipoly], &dist_opts[0]) @@ -2953,7 +2953,7 @@ cdef inline void tri_asmbl_block_approx( return cdef inline void tri_asmbl_unblock_approx( - double[:, :, ::1] poly_coords, + double** poly_coords, int npoly, long[::1] lnvert_poly, long** ltri, @@ -3044,7 +3044,7 @@ cdef inline void tri_asmbl_unblock_approx( dist_opts = malloc(lnvert_poly[ipoly] * sizeof(double)) # computing distances to vertices of poly (OA, OB, OC) - _bgt.compute_dist_pt_vec(loc_x, loc_y, loc_z, + _bgt.compute_dist_pt_arr(loc_x, loc_y, loc_z, lnvert_poly[ipoly], poly_coords[ipoly], &dist_opts[0]) @@ -3105,4 +3105,5 @@ cdef inline double comp_sa_tri_appx( + dot_Gb * (normA - normB) + dot_Gc * (normA - normC) ) - return numerator/denumerator + + return numerator / denumerator diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index e9a04f71a..a39fd467f 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-06-16 15:10:43 +# Autogenerated by Tofu's setup.py on 2021-06-24 22:03:10 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. diff --git a/tofu/tests/tests01_geom/test_04_sampling.py b/tofu/tests/tests01_geom/test_04_sampling.py index ecaf7e1ef..53f644080 100644 --- a/tofu/tests/tests01_geom/test_04_sampling.py +++ b/tofu/tests/tests01_geom/test_04_sampling.py @@ -186,7 +186,7 @@ def test04_ves_vmesh_lin(): # ============================================================================= # Ves - Solid angles # ============================================================================= -def test05_sa_integ_map(ves_poly=VPoly, debug=0): +def test05_sa_integ_map(ves_poly=VPoly, debug=3): import matplotlib.pyplot as plt print() @@ -370,7 +370,14 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): import matplotlib.pyplot as plt print() - config = tf.load_config("B1") + config = tf.load_config("A1") + for name_pfc in ['BaffleV0', "DivUpV1", "DivLowITERV1"]: + try: + config.remove_Struct("PFC", name_pfc) + except: + pass + + kwdargs = config.get_kwdargs_LOS_isVis() ves_poly = kwdargs["ves_poly"] @@ -380,22 +387,38 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): fig.savefig("configuration") # coordonnées en x,y,z: - poly_coords = np.array([ + poly_coords = [ + np.array([ + [2.50, 0, -0.4], + [2.50, 0, -0.1], + [2.60, 0, -0.1], + [2.70, 0, -0.1], + [2.75, 0, -0.1], + [2.75, 0, -0.4], + [2.7, 0, -0.4], + ]).T, # first polygon np.array([ - [2.50, 0, -0.5], - [2.50, 0, -0.3], - [2.75, 0, -0.3], - [2.75, 0, -0.5], - ]).T # first polygon in (R, Z) + [2.2, 0., 0.25], + [2.2, 0., 0.50], + [2.5, 0., 0.50], + [2.7, 0., 0.50], + [3.0, 0., 0.50], + [3.0, 0., 0.25], + [2.6, 0., 0.25], + ]).T, + ] + poly_coords = [np.ascontiguousarray(poly) for poly in poly_coords] + poly_lnorms = np.array([ + [0, 1., 0], + [0, 1., 0], ]) - poly_lnorms = np.array([[0, 1., 0]]) - poly_lnvert = np.array([4 for poly in poly_coords]) + poly_lnvert = np.array([poly.shape[1] for poly in poly_coords]) limits_r, limits_z = compute_min_max_r_and_z(ves_poly) lblock = [False] #, True] lstep_rz = [ - 0.001, - 0.02, + # 0.01, + 0.01, ] test_cases = list(itertools.product(lblock, lstep_rz)) @@ -404,10 +427,10 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): rstep = zstep = step_rz zstep = step_rz - phistep = 0.08 - DR = [2., 3.] - DZ = [-0.5, 0.5] - DPhi = [-0.1, 0.1] + phistep = 0.01 + DR = None # [2.45, 2.8] + DZ = None # [-0.5, 0.] + DPhi = None # [-0.1, 0.1] # -- Getting cython APPROX computation -------------------------------- res = GG.compute_solid_angle_poly_map( @@ -434,7 +457,7 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): # Checking shapes, sizes, types assert dim == 2 - assert npoly == np.shape(poly_coords)[0], str(np.shape(poly_coords)) + assert npoly == len(poly_coords), str(len(poly_coords)) assert npts_ind == npts assert npts == npts_sa assert isinstance(reso_r_z, float) @@ -447,8 +470,19 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): # import pdb; pdb.set_trace() im = ax.scatter(pts[0, :], pts[1, :], marker="s", edgecolors="None", - s=10, c=sa_map_cy[:, pp].flatten(), - vmin=0, vmax=sa_map_cy[:, pp].max()) + s=40, c=sa_map_cy[:, pp].flatten(), + vmin=sa_map_cy[:, pp].min(), + vmax=sa_map_cy[:, pp].max()) + poly = poly_coords[pp] + xpoly = np.sqrt(poly[0]**2 + poly[1]**2) + zpoly = poly[2] + ax.plot( + xpoly[[iii for iii in range(np.size(xpoly))]+[0]], + zpoly[[iii for iii in range(np.size(xpoly))]+[0]], + "r-", marker='o', + linewidth=2, + ) + ax.plot() ax.set_title("cython function") fig.colorbar(im, ax=ax) plt.savefig("sa_map_poly" + str(pp) From f9d103dce106fe5c56e47c45a6ed114163eb50cf Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Thu, 1 Jul 2021 22:47:04 +0200 Subject: [PATCH 15/29] pep8 --- tofu/geom/openmp_enabled.py | 1 - tofu/tests/tests01_geom/test_04_sampling.py | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index 76f73eb1e..da70693f8 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,3 @@ -# Autogenerated by Tofu's setup.py on 2021-06-29 22:53:56 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. diff --git a/tofu/tests/tests01_geom/test_04_sampling.py b/tofu/tests/tests01_geom/test_04_sampling.py index 53f644080..bf2840634 100644 --- a/tofu/tests/tests01_geom/test_04_sampling.py +++ b/tofu/tests/tests01_geom/test_04_sampling.py @@ -377,7 +377,6 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): except: pass - kwdargs = config.get_kwdargs_LOS_isVis() ves_poly = kwdargs["ves_poly"] @@ -417,7 +416,7 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): lblock = [False] #, True] lstep_rz = [ - # 0.01, + # 0.01, 0.01, ] From 13cce018fcfd325be268b5f2738df6f7a34dc784 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Tue, 21 Sep 2021 17:16:38 +0200 Subject: [PATCH 16/29] [#75] merged with devel --- tofu/geom/_GG.pyx | 7 +++- tofu/geom/_basic_geom_tools.pyx | 1 - tofu/geom/_sampling_tools.pyx | 10 ++++- tofu/geom/openmp_enabled.py | 4 ++ tofu/tests/tests01_geom/test_04_sampling.py | 44 +++++++++++++++++++++ 5 files changed, 61 insertions(+), 5 deletions(-) diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index ea071471a..899c21c6e 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -1,7 +1,7 @@ # cython: language_level=3 -# cython: boundscheck=False +# cython: boundscheck=True # cython: wraparound=False -# cython: initializedcheck=False +# cython: initializedcheck=True # cython: cdivision=True # # -- Python libraries imports -------------------------------------------------- @@ -5178,6 +5178,9 @@ def compute_solid_angle_poly_map(list poly_coords, f"Total number of triangles = {tot_num_tri} " + " and was expecting: " + str(np.shape(poly_lnorms_tot))) + + print("vec GB = ", vec_GB) + print("vec GC = ", vec_GC) _bgt.compute_dot_cross_vec(vec_GB, vec_GC, cross_GBGC, diff --git a/tofu/geom/_basic_geom_tools.pyx b/tofu/geom/_basic_geom_tools.pyx index 051e9cd85..ea187d236 100644 --- a/tofu/geom/_basic_geom_tools.pyx +++ b/tofu/geom/_basic_geom_tools.pyx @@ -482,7 +482,6 @@ cdef inline void compute_vec_ass_tri(const double pt0, const double pt1, num[ii] = 3.0 * ( vec_OG[0] * cross_bc[0, ii] + vec_OG[1] * cross_bc[1, ii] + vec_OG[2] * cross_bc[2, ii]) - num[ii] = cross_bc[1, ii] dot_Gb[ii] = (vec_OG[0] * vecb[0, ii] + vec_OG[1] * vecb[1, ii] + vec_OG[2] * vecb[2, ii]) diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index 3437faf67..1f0826e48 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -1,8 +1,8 @@ # cython: language_level=3 -# cython: boundscheck=False +# cython: boundscheck=True # cython: wraparound=False # cython: cdivision=True -# cython: initializedcheck=False +# cython: initializedcheck=True # ################################################################################ # Utility functions for sampling and discretizating @@ -3106,4 +3106,10 @@ cdef inline double comp_sa_tri_appx( + dot_Gc * (normA - normC) ) + if (numerator / denumerator) > 1000000: + with gil: + print("found big value = ", + numerator/denumerator, + numerator, + denumerator) return numerator / denumerator diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index da70693f8..bd5c8efff 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,3 +1,7 @@ +<<<<<<< HEAD +======= +# Autogenerated by Tofu's setup.py on 2021-09-21 12:16:52 +>>>>>>> 20de072f ([#75] checking bug) def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. diff --git a/tofu/tests/tests01_geom/test_04_sampling.py b/tofu/tests/tests01_geom/test_04_sampling.py index bf2840634..3486a93ba 100644 --- a/tofu/tests/tests01_geom/test_04_sampling.py +++ b/tofu/tests/tests01_geom/test_04_sampling.py @@ -396,6 +396,42 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): [2.75, 0, -0.4], [2.7, 0, -0.4], ]).T, # first polygon + np.array([ + [2.50, 0, -0.1], + [2.60, 0, -0.1], + [2.70, 0, -0.1], + [2.75, 0, -0.1], + [2.75, 0, -0.4], + [2.7, 0, -0.4], + [2.50, 0, -0.4], + ]).T, # first polygon + np.array([ + [2.60, 0, -0.1], + [2.70, 0, -0.1], + [2.75, 0, -0.1], + [2.75, 0, -0.4], + [2.7, 0, -0.4], + [2.50, 0, -0.4], + [2.50, 0, -0.1], + ]).T, # first polygon + np.array([ + [2.70, 0, -0.1], + [2.75, 0, -0.1], + [2.75, 0, -0.4], + [2.7, 0, -0.4], + [2.50, 0, -0.4], + [2.50, 0, -0.1], + [2.60, 0, -0.1], + ]).T, # first polygon + np.array([ + [2.75, 0, -0.1], + [2.75, 0, -0.4], + [2.7, 0, -0.4], + [2.50, 0, -0.4], + [2.50, 0, -0.1], + [2.60, 0, -0.1], + [2.70, 0, -0.1], + ]).T, # first polygon np.array([ [2.2, 0., 0.25], [2.2, 0., 0.50], @@ -410,6 +446,10 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): poly_lnorms = np.array([ [0, 1., 0], [0, 1., 0], + [0, 1., 0], + [0, 1., 0], + [0, 1., 0], + [0, 1., 0], ]) poly_lnvert = np.array([poly.shape[1] for poly in poly_coords]) limits_r, limits_z = compute_min_max_r_and_z(ves_poly) @@ -481,6 +521,10 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): "r-", marker='o', linewidth=2, ) + # for iii in range(np.size(xpoly)): + # ax.annotate(iii, + # (xpoly[iii], + # zpoly[iii])) ax.plot() ax.set_title("cython function") fig.colorbar(im, ax=ax) From 88ab750cdfc240b7cc68f0bfe751a6cc4dbeedf0 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Thu, 7 Oct 2021 00:11:50 +0200 Subject: [PATCH 17/29] found one bug --- tofu/geom/_GG.pyx | 2 +- tofu/geom/_basic_geom_tools.pyx | 8 ++++++++ tofu/geom/_core.py | 2 +- tofu/geom/_sampling_tools.pyx | 8 ++++++++ tofu/geom/openmp_enabled.py | 5 +---- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index 899c21c6e..7c68f3c87 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -5369,7 +5369,7 @@ def compute_solid_angle_poly_map(list poly_coords, forbid, first_ind_mv, indi_mv, - npoly, sz_r, sz_z, + tot_num_tri, sz_r, sz_z, ncells_rphi, reso_r_z, disc_r, diff --git a/tofu/geom/_basic_geom_tools.pyx b/tofu/geom/_basic_geom_tools.pyx index ea187d236..f15dbfc60 100644 --- a/tofu/geom/_basic_geom_tools.pyx +++ b/tofu/geom/_basic_geom_tools.pyx @@ -482,6 +482,14 @@ cdef inline void compute_vec_ass_tri(const double pt0, const double pt1, num[ii] = 3.0 * ( vec_OG[0] * cross_bc[0, ii] + vec_OG[1] * cross_bc[1, ii] + vec_OG[2] * cross_bc[2, ii]) + if num[ii] > 1000000 or num[ii] < -1000000: + with gil: + print(">> found inf numerator: ", + ii, npts, + vec_OG[0], vec_OG[1], vec_OG[2], + cross_bc[0, ii], cross_bc[1, ii], cross_bc[2, ii], + ) + dot_Gb[ii] = (vec_OG[0] * vecb[0, ii] + vec_OG[1] * vecb[1, ii] + vec_OG[2] * vecb[2, ii]) diff --git a/tofu/geom/_core.py b/tofu/geom/_core.py index 83ae76f81..693fd66b8 100644 --- a/tofu/geom/_core.py +++ b/tofu/geom/_core.py @@ -1971,7 +1971,7 @@ def from_txt( + "\t- 'dict' : return a dict with polygon, pos and extent") raise Exception(msg) - if pfe.endswith('.txt') or pfe.endswith('.csv'): + if not (pfe.endswith('.txt') or pfe.endswith('.csv')): msg = ("Only accepts .txt and .csv files (fed to np.loadtxt) !\n" + "\t file: {}".format(pfe)) raise Exception(msg) diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index 1f0826e48..99dd6c0a5 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -3050,6 +3050,14 @@ cdef inline void tri_asmbl_unblock_approx( &dist_opts[0]) for itri in range(lnvert_poly[ipoly] - 2): iglob = ipoly + itri * npoly + if numerator[ipoly] > 1000000 or numerator[ipoly] < -1000000: + with gil: + print("found inf numerator: ", + iglob, "/", num_tot_tri, + numerator[ipoly], + ipoly, itri, npoly, + ) + sa_map[ind_pol, ipoly] += comp_sa_tri_appx( itri, diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index bd5c8efff..22ebb58f9 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,7 +1,4 @@ -<<<<<<< HEAD -======= -# Autogenerated by Tofu's setup.py on 2021-09-21 12:16:52 ->>>>>>> 20de072f ([#75] checking bug) +# Autogenerated by Tofu's setup.py on 2021-10-06 22:06:17 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. From b642dc4d1e7215dd85cebf89859a8eb0a397ffa6 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Tue, 12 Oct 2021 01:08:20 +0200 Subject: [PATCH 18/29] cleaning --- tofu/geom/_basic_geom_tools.pyx | 8 -------- tofu/geom/_sampling_tools.pyx | 14 -------------- tofu/geom/openmp_enabled.py | 2 +- 3 files changed, 1 insertion(+), 23 deletions(-) diff --git a/tofu/geom/_basic_geom_tools.pyx b/tofu/geom/_basic_geom_tools.pyx index f15dbfc60..ea187d236 100644 --- a/tofu/geom/_basic_geom_tools.pyx +++ b/tofu/geom/_basic_geom_tools.pyx @@ -482,14 +482,6 @@ cdef inline void compute_vec_ass_tri(const double pt0, const double pt1, num[ii] = 3.0 * ( vec_OG[0] * cross_bc[0, ii] + vec_OG[1] * cross_bc[1, ii] + vec_OG[2] * cross_bc[2, ii]) - if num[ii] > 1000000 or num[ii] < -1000000: - with gil: - print(">> found inf numerator: ", - ii, npts, - vec_OG[0], vec_OG[1], vec_OG[2], - cross_bc[0, ii], cross_bc[1, ii], cross_bc[2, ii], - ) - dot_Gb[ii] = (vec_OG[0] * vecb[0, ii] + vec_OG[1] * vecb[1, ii] + vec_OG[2] * vecb[2, ii]) diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index 99dd6c0a5..f298f83ac 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -3050,14 +3050,6 @@ cdef inline void tri_asmbl_unblock_approx( &dist_opts[0]) for itri in range(lnvert_poly[ipoly] - 2): iglob = ipoly + itri * npoly - if numerator[ipoly] > 1000000 or numerator[ipoly] < -1000000: - with gil: - print("found inf numerator: ", - iglob, "/", num_tot_tri, - numerator[ipoly], - ipoly, itri, npoly, - ) - sa_map[ind_pol, ipoly] += comp_sa_tri_appx( itri, @@ -3114,10 +3106,4 @@ cdef inline double comp_sa_tri_appx( + dot_Gc * (normA - normC) ) - if (numerator / denumerator) > 1000000: - with gil: - print("found big value = ", - numerator/denumerator, - numerator, - denumerator) return numerator / denumerator diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index 22ebb58f9..679ced9ad 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-10-06 22:06:17 +# Autogenerated by Tofu's setup.py on 2021-10-11 22:57:04 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. From cde3558ffb1188865bae3f160b780e03b09e2749 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Tue, 12 Oct 2021 14:30:10 +0200 Subject: [PATCH 19/29] all tests passing, corrected isreflex function --- tofu/geom/_GG.pyx | 20 ++++++++++++++------ tofu/geom/_vignetting_tools.pyx | 16 ++++++++++------ tofu/geom/openmp_enabled.py | 2 +- tofu/tests/tests01_geom/test_01_GG.py | 11 +++++++---- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index 7c68f3c87..b15fdd18f 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -2743,6 +2743,17 @@ def LOS_isVis_PtFromPts_VesStruct(double pt0, double pt1, double pt2, # # ============================================================================== def triangulate_by_earclipping(np.ndarray[double,ndim=2] poly): + """ + Triangulates a polygon by the earclipping method. + Params + ===== + poly : (3, nvert) double array + Contains 3D coordinates of polygon in counter clockwise order + Returns + ======= + ltri : (3*(nvert-2)) int array + Indices of triangles + """ cdef int nvert = poly.shape[1] cdef np.ndarray[long,ndim=1] ltri = np.empty((nvert-2)*3, dtype=int) cdef double* diff = NULL @@ -2750,10 +2761,10 @@ def triangulate_by_earclipping(np.ndarray[double,ndim=2] poly): # Initialization ........................................................... diff = malloc(3*nvert*sizeof(double)) lref = malloc(nvert*sizeof(bint)) - _vt.compute_diff3d(&poly[0,0], nvert, diff) - _vt.are_points_reflex(nvert, diff, lref) + _vt.compute_diff3d(&poly[0,0], nvert, &diff[0]) + _vt.are_points_reflex(nvert, diff, &lref[0]) # Calling core function..................................................... - _vt.earclipping_poly(&poly[0,0], <ri[0], diff, lref, nvert) + _vt.earclipping_poly(&poly[0,0], <ri[0], &diff[0], &lref[0], nvert) free(diff) free(lref) return ltri @@ -5178,9 +5189,6 @@ def compute_solid_angle_poly_map(list poly_coords, f"Total number of triangles = {tot_num_tri} " + " and was expecting: " + str(np.shape(poly_lnorms_tot))) - - print("vec GB = ", vec_GB) - print("vec GC = ", vec_GC) _bgt.compute_dot_cross_vec(vec_GB, vec_GC, cross_GBGC, diff --git a/tofu/geom/_vignetting_tools.pyx b/tofu/geom/_vignetting_tools.pyx index 60c346f24..56df33bb3 100644 --- a/tofu/geom/_vignetting_tools.pyx +++ b/tofu/geom/_vignetting_tools.pyx @@ -28,20 +28,24 @@ from . cimport _basic_geom_tools as _bgt cdef inline bint is_reflex(const double[3] u, const double[3] v) nogil: """ + /\ + \ + v\ + \______> + P u Determines if the angle between U and -V is reflex (angle > pi) or not. Warning: note the MINUS in front of V, this was done as this is the only form how we will need this function. but it is NOT general. + Is reflex if + u x v has a negative 3rd coordinate """ cdef int ii cdef double sumc cdef double[3] ucrossv # ... - _bgt.compute_cross_prod(u, v, ucrossv) - sumc = 0.0 - for ii in range(3): - # normally it should be a sum, but it is a minus cause is we have (U,-V) - sumc += ucrossv[ii] - return sumc >= 0. + _bgt.compute_cross_prod(u, v, &ucrossv[0]) + return ucrossv[2] >= 0. + cdef inline void compute_diff3d(double* orig, int nvert, diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index 679ced9ad..3f7480eaa 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-10-11 22:57:04 +# Autogenerated by Tofu's setup.py on 2021-10-12 12:27:07 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. diff --git a/tofu/tests/tests01_geom/test_01_GG.py b/tofu/tests/tests01_geom/test_01_GG.py index c4de572d8..02d00ca7e 100644 --- a/tofu/tests/tests01_geom/test_01_GG.py +++ b/tofu/tests/tests01_geom/test_01_GG.py @@ -1571,6 +1571,12 @@ def test21_which_los_closer_vpoly_vec(): # ============================================================================== def test22_earclipping(): # .. First test ............................................................ + # + # (4,5) +------+(5,5) + # | | + # | | + # (4,4) +------+(5,4) + # ves_poly0 = np.zeros((3, 4)) ves_poly00 = [4, 5, 5, 4] ves_poly01 = [4, 4, 5, 5] @@ -1587,8 +1593,6 @@ def test22_earclipping(): ves_poly1[1] = y1 # ...computing out = GG.triangulate_by_earclipping(ves_poly1) - # out = out.reshape((7, 3)) - # print(out) assert np.allclose(out, [1, 2, 3, 1, 3, 4, 1, 4, 5, 0, 1, 5, 0, 5, 6, 0, 6, 7, 0, 7, 8]) @@ -1603,10 +1607,9 @@ def test22_earclipping(): ves_poly2[2] = z2 # ...computing out = GG.triangulate_by_earclipping(ves_poly2) + assert np.allclose(out, [0, 1, 2, 2, 3, 4, 2, 4, 5, 2, 5, 6, 2, 6, 7, 0, 2, 7, 0, 7, 8, 0, 8, 9]) - # out = out.reshape((npts-2, 3)) - # print(out) def test23_vignetting(): # .. First configuration .................................................... From 320fb8cd53e6fb9ab7ae9f22d5e24038fd69acaf Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Tue, 12 Oct 2021 14:48:11 +0200 Subject: [PATCH 20/29] found bug since GG is checking memory boundaries --- tofu/geom/_GG.pyx | 14 +++++++------- tofu/geom/openmp_enabled.py | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index b15fdd18f..9de87fde1 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -1621,7 +1621,7 @@ def _Ves_Smesh_Tor_SubFromInd_cython(double dL, double dRPhi, # Number of Phi per R dRPhirRef, dPhir, dRPhir = np.empty((Ln,)), np.empty((Ln,)), -np.ones((Ln,)) dLr, Rref = -np.ones((Ln,)), -np.ones((Ln,)) - NRPhi, NRPhi0 = np.empty((Ln,),dtype=int), np.empty((Ln,),dtype=int) + NRPhi, NRPhi0 = np.empty((Ln,),dtype=int), np.empty((Ln+1,),dtype=int) radius_ratio = int(c_ceil(np.max(RrefRef)/np.min(RrefRef))) for ii in range(0,Ln): NRPhi[ii] = (c_ceil(DPhiMinMax*RrefRef[ii]/dRPhi)) @@ -1637,8 +1637,8 @@ def _Ves_Smesh_Tor_SubFromInd_cython(double dL, double dRPhi, nRPhi0 = NRPhi0[Ln-1]+NRPhi[Ln-1] if Out.lower()=='(x,y,z)': - for ii in range(0,NP): - for jj in range(0,Ln+1): + for ii in range(NP): + for jj in range(Ln + 1): if ind[ii]-NRPhi0[jj]<0.: break iiL = jj-1 @@ -1653,8 +1653,8 @@ def _Ves_Smesh_Tor_SubFromInd_cython(double dL, double dRPhi, Rref[iiL] = RrefRef[iiL] else: - for ii in range(0,NP): - for jj in range(0,Ln+1): + for ii in range(NP): + for jj in range(Ln + 1): if ind[ii]-NRPhi0[jj]<0.: break iiL = jj-1 @@ -1690,7 +1690,7 @@ def _Ves_Smesh_TorStruct_SubFromD_cython(double[::1] PhiMinMax, double dL, for the desired resolution (dR,dZ,dRphi) """ cdef double Dphi, dR0r=0., dZ0r=0. - cdef int NR0=0, NZ0=0, R0n, Z0n, NRPhi0 + cdef int NR0=0, NZ0=0, R0n, Z0n cdef double[::1] phiMinMax = np.array([c_atan2(c_sin(PhiMinMax[0]), c_cos(PhiMinMax[0])), c_atan2(c_sin(PhiMinMax[1]), @@ -1835,7 +1835,7 @@ def _Ves_Smesh_TorStruct_SubFromInd_cython(double[::1] PhiMinMax, double dL, """ Return the desired surfacic submesh indicated by the limits (DR,DZ,DPhi) for the desired resolution (dR,dZ,dRphi) """ cdef double Dphi, dR0r, dZ0r - cdef int NR0, NZ0, R0n, Z0n, NRPhi0 + cdef int NR0, NZ0, R0n, Z0n cdef double[::1] phiMinMax = np.array([c_atan2(c_sin(PhiMinMax[0]), c_cos(PhiMinMax[0])), c_atan2(c_sin(PhiMinMax[1]), diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index 3f7480eaa..d48049dd4 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-10-12 12:27:07 +# Autogenerated by Tofu's setup.py on 2021-10-12 12:43:15 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. From 1961a636afbcda36fd60d2d1c7ddc1d311be66de Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Tue, 12 Oct 2021 15:59:19 +0200 Subject: [PATCH 21/29] corrected bug --- tofu/geom/_GG.pyx | 13 ++- tofu/geom/_sampling_tools.pyx | 4 +- tofu/geom/_vignetting_tools.pyx | 17 +++- tofu/geom/openmp_enabled.py | 2 +- tofu/tests/tests01_geom/test_04_sampling.py | 104 ++++++++++---------- 5 files changed, 78 insertions(+), 62 deletions(-) diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index 9de87fde1..d1b4fa7e1 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -1,7 +1,7 @@ # cython: language_level=3 -# cython: boundscheck=True +# cython: boundscheck=False # cython: wraparound=False -# cython: initializedcheck=True +# cython: initializedcheck=False # cython: cdivision=True # # -- Python libraries imports -------------------------------------------------- @@ -2748,7 +2748,7 @@ def triangulate_by_earclipping(np.ndarray[double,ndim=2] poly): Params ===== poly : (3, nvert) double array - Contains 3D coordinates of polygon in counter clockwise order + Contains 3D coordinates of open polygon in counter clockwise order Returns ======= ltri : (3*(nvert-2)) int array @@ -2779,7 +2779,7 @@ def vignetting(double[:, ::1] ray_orig, double[:, ::1] ray_vdir, LOS normalized direction vector vignett_poly : (num_vign, 3, num_vertex) double list of arrays Coordinates of the vertices of the Polygon defining the 3D vignett. - POLY CLOSED + POLY CLOSED in counter clockwise lnvert : (num_vign) long array Number of vertices for each vignett (without counting the rebound) Returns @@ -4989,9 +4989,13 @@ def compute_solid_angle_poly_map(list poly_coords, coordinates of the points defining the polygons. not necessarily flat. poly_coords[np, i] being the i-th coordinate of the np polygon + The coordinates should be given in anti clockwise order and the polygon + should be open poly_lnorms: double array normal vector that defines the visible face of the polygon poly_lnorms[np] defines the norm of the np-th polygon + poly_lnvert: int array + number of vertices for each polygon rstep: double refinement along radius `r` zstep: double @@ -5139,7 +5143,6 @@ def compute_solid_angle_poly_map(list poly_coords, + " lstruct_normx, lstruct_normy, must be None or"\ + " lists of same len()!" assert bool1 and bool2, msg - # TODO: add tests to verify shape of poly_coords msg = "[eps_uz,eps_vz,eps_a,eps_b] must be floats < 1.e-4!" assert all([ee < 1.e-4 for ee in [eps_uz, eps_a, eps_vz, eps_b, diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index f298f83ac..3437faf67 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -1,8 +1,8 @@ # cython: language_level=3 -# cython: boundscheck=True +# cython: boundscheck=False # cython: wraparound=False # cython: cdivision=True -# cython: initializedcheck=True +# cython: initializedcheck=False # ################################################################################ # Utility functions for sampling and discretizating diff --git a/tofu/geom/_vignetting_tools.pyx b/tofu/geom/_vignetting_tools.pyx index 56df33bb3..ed9dccf85 100644 --- a/tofu/geom/_vignetting_tools.pyx +++ b/tofu/geom/_vignetting_tools.pyx @@ -34,17 +34,21 @@ cdef inline bint is_reflex(const double[3] u, \______> P u Determines if the angle between U and -V is reflex (angle > pi) or not. + We suppose the angle is defined anticlockwise from u to v Warning: note the MINUS in front of V, this was done as this is the only form how we will need this function. but it is NOT general. Is reflex if - u x v has a negative 3rd coordinate + u x -v has a negative 3rd coordinate + https://dai.fmph.uniba.sk/upload/8/89/Gm17_lesson05.pdf """ cdef int ii cdef double sumc cdef double[3] ucrossv # ... _bgt.compute_cross_prod(u, v, &ucrossv[0]) - return ucrossv[2] >= 0. + # reflexive if u x v 3rd coordinate is negative, since we computed u x -v + # the angle in P is reflexive if the 3rd coordinate is positive + return ucrossv[2] > 0. cdef inline void compute_diff3d(double* orig, @@ -176,6 +180,15 @@ cdef inline int get_one_ear(double* polygon, return i # if not, we found an ear # if we havent returned, either, there was an error somerwhere with gil: + for j in range(nvert): + wj = working_index[j] + print("coordinates at i =", j, + " ", polygon[0 * orig_nvert + wj], + " ", polygon[1 * orig_nvert + wj], + " ", polygon[2 * orig_nvert + wj], + ) + print("... and btw, original polygon had : ", orig_nvert, + " vertices, now we are working on :", nvert) raise ValueError("Didn't find a non reflex angle in polygon") diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index d48049dd4..4ea3db62f 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-10-12 12:43:15 +# Autogenerated by Tofu's setup.py on 2021-10-12 13:56:43 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. diff --git a/tofu/tests/tests01_geom/test_04_sampling.py b/tofu/tests/tests01_geom/test_04_sampling.py index 3486a93ba..f66d2127a 100644 --- a/tofu/tests/tests01_geom/test_04_sampling.py +++ b/tofu/tests/tests01_geom/test_04_sampling.py @@ -388,68 +388,68 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): # coordonnées en x,y,z: poly_coords = [ np.array([ - [2.50, 0, -0.4], - [2.50, 0, -0.1], - [2.60, 0, -0.1], - [2.70, 0, -0.1], - [2.75, 0, -0.1], - [2.75, 0, -0.4], [2.7, 0, -0.4], - ]).T, # first polygon - np.array([ - [2.50, 0, -0.1], - [2.60, 0, -0.1], - [2.70, 0, -0.1], - [2.75, 0, -0.1], [2.75, 0, -0.4], - [2.7, 0, -0.4], - [2.50, 0, -0.4], - ]).T, # first polygon - np.array([ - [2.60, 0, -0.1], - [2.70, 0, -0.1], [2.75, 0, -0.1], - [2.75, 0, -0.4], - [2.7, 0, -0.4], - [2.50, 0, -0.4], - [2.50, 0, -0.1], - ]).T, # first polygon - np.array([ [2.70, 0, -0.1], - [2.75, 0, -0.1], - [2.75, 0, -0.4], - [2.7, 0, -0.4], - [2.50, 0, -0.4], - [2.50, 0, -0.1], [2.60, 0, -0.1], - ]).T, # first polygon - np.array([ - [2.75, 0, -0.1], - [2.75, 0, -0.4], - [2.7, 0, -0.4], - [2.50, 0, -0.4], [2.50, 0, -0.1], - [2.60, 0, -0.1], - [2.70, 0, -0.1], - ]).T, # first polygon - np.array([ - [2.2, 0., 0.25], - [2.2, 0., 0.50], - [2.5, 0., 0.50], - [2.7, 0., 0.50], - [3.0, 0., 0.50], - [3.0, 0., 0.25], - [2.6, 0., 0.25], - ]).T, + [2.50, 0, -0.4], + ]).T, # 1st polygon + # np.array([ + # [2.50, 0, -0.1], + # [2.60, 0, -0.1], + # [2.70, 0, -0.1], + # [2.75, 0, -0.1], + # [2.75, 0, -0.4], + # [2.7, 0, -0.4], + # [2.50, 0, -0.4], + # ]).T, # 2nd polygon + # np.array([ + # [2.60, 0, -0.1], + # [2.70, 0, -0.1], + # [2.75, 0, -0.1], + # [2.75, 0, -0.4], + # [2.7, 0, -0.4], + # [2.50, 0, -0.4], + # [2.50, 0, -0.1], + # ]).T, # 3rd polygon + # np.array([ + # [2.70, 0, -0.1], + # [2.75, 0, -0.1], + # [2.75, 0, -0.4], + # [2.7, 0, -0.4], + # [2.50, 0, -0.4], + # [2.50, 0, -0.1], + # [2.60, 0, -0.1], + # ]).T, # 4th polygon + # np.array([ + # [2.75, 0, -0.1], + # [2.75, 0, -0.4], + # [2.7, 0, -0.4], + # [2.50, 0, -0.4], + # [2.50, 0, -0.1], + # [2.60, 0, -0.1], + # [2.70, 0, -0.1], + # ]).T, # 5th polygon + # np.array([ + # [2.2, 0., 0.25], + # [2.2, 0., 0.50], + # [2.5, 0., 0.50], + # [2.7, 0., 0.50], + # [3.0, 0., 0.50], + # [3.0, 0., 0.25], + # [2.6, 0., 0.25], + # ]).T, # 6th polygon ] poly_coords = [np.ascontiguousarray(poly) for poly in poly_coords] poly_lnorms = np.array([ [0, 1., 0], - [0, 1., 0], - [0, 1., 0], - [0, 1., 0], - [0, 1., 0], - [0, 1., 0], + # [0, 1., 0], + # [0, 1., 0], + # [0, 1., 0], + # [0, 1., 0], + # [0, 1., 0], ]) poly_lnvert = np.array([poly.shape[1] for poly in poly_coords]) limits_r, limits_z = compute_min_max_r_and_z(ves_poly) From c1a071d85d6eeacdc683a160b0d7c483c7ff6f53 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Tue, 12 Oct 2021 16:05:54 +0200 Subject: [PATCH 22/29] reverted back all tests --- tofu/geom/_GG.pyx | 5 +- tofu/geom/openmp_enabled.py | 2 +- tofu/tests/tests01_geom/test_04_sampling.py | 100 ++++++++++---------- 3 files changed, 55 insertions(+), 52 deletions(-) diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index d1b4fa7e1..6020147a8 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -5150,8 +5150,11 @@ def compute_solid_angle_poly_map(list poly_coords, msg = "ves_type must be a str in ['Tor','Lin']!" assert ves_type.lower() in ['tor', 'lin'], msg # ... - # .. Getting size of arrays ................................................ + # .. Formatting polygon coordinates ........................................ npoly = len(poly_coords) + for ii in range(npoly): + poly_coords[ii] = format_poly(poly_coords[ii], Clock=False, + close=False, Test=True) # .. Dividing polys in triangles ........................................... ltri = malloc(sizeof(long*) * npoly) # re writting_polygons coordinates to C type: diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index 4ea3db62f..5d9c623d0 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-10-12 13:56:43 +# Autogenerated by Tofu's setup.py on 2021-10-12 14:03:51 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. diff --git a/tofu/tests/tests01_geom/test_04_sampling.py b/tofu/tests/tests01_geom/test_04_sampling.py index f66d2127a..b8d9f7f82 100644 --- a/tofu/tests/tests01_geom/test_04_sampling.py +++ b/tofu/tests/tests01_geom/test_04_sampling.py @@ -396,60 +396,60 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): [2.50, 0, -0.1], [2.50, 0, -0.4], ]).T, # 1st polygon - # np.array([ - # [2.50, 0, -0.1], - # [2.60, 0, -0.1], - # [2.70, 0, -0.1], - # [2.75, 0, -0.1], - # [2.75, 0, -0.4], - # [2.7, 0, -0.4], - # [2.50, 0, -0.4], - # ]).T, # 2nd polygon - # np.array([ - # [2.60, 0, -0.1], - # [2.70, 0, -0.1], - # [2.75, 0, -0.1], - # [2.75, 0, -0.4], - # [2.7, 0, -0.4], - # [2.50, 0, -0.4], - # [2.50, 0, -0.1], - # ]).T, # 3rd polygon - # np.array([ - # [2.70, 0, -0.1], - # [2.75, 0, -0.1], - # [2.75, 0, -0.4], - # [2.7, 0, -0.4], - # [2.50, 0, -0.4], - # [2.50, 0, -0.1], - # [2.60, 0, -0.1], - # ]).T, # 4th polygon - # np.array([ - # [2.75, 0, -0.1], - # [2.75, 0, -0.4], - # [2.7, 0, -0.4], - # [2.50, 0, -0.4], - # [2.50, 0, -0.1], - # [2.60, 0, -0.1], - # [2.70, 0, -0.1], - # ]).T, # 5th polygon - # np.array([ - # [2.2, 0., 0.25], - # [2.2, 0., 0.50], - # [2.5, 0., 0.50], - # [2.7, 0., 0.50], - # [3.0, 0., 0.50], - # [3.0, 0., 0.25], - # [2.6, 0., 0.25], - # ]).T, # 6th polygon + np.array([ + [2.50, 0, -0.1], + [2.60, 0, -0.1], + [2.70, 0, -0.1], + [2.75, 0, -0.1], + [2.75, 0, -0.4], + [2.7, 0, -0.4], + [2.50, 0, -0.4], + ]).T, # 2nd polygon + np.array([ + [2.60, 0, -0.1], + [2.70, 0, -0.1], + [2.75, 0, -0.1], + [2.75, 0, -0.4], + [2.7, 0, -0.4], + [2.50, 0, -0.4], + [2.50, 0, -0.1], + ]).T, # 3rd polygon + np.array([ + [2.70, 0, -0.1], + [2.75, 0, -0.1], + [2.75, 0, -0.4], + [2.7, 0, -0.4], + [2.50, 0, -0.4], + [2.50, 0, -0.1], + [2.60, 0, -0.1], + ]).T, # 4th polygon + np.array([ + [2.75, 0, -0.1], + [2.75, 0, -0.4], + [2.7, 0, -0.4], + [2.50, 0, -0.4], + [2.50, 0, -0.1], + [2.60, 0, -0.1], + [2.70, 0, -0.1], + ]).T, # 5th polygon + np.array([ + [2.2, 0., 0.25], + [2.2, 0., 0.50], + [2.5, 0., 0.50], + [2.7, 0., 0.50], + [3.0, 0., 0.50], + [3.0, 0., 0.25], + [2.6, 0., 0.25], + ]).T, # 6th polygon ] poly_coords = [np.ascontiguousarray(poly) for poly in poly_coords] poly_lnorms = np.array([ [0, 1., 0], - # [0, 1., 0], - # [0, 1., 0], - # [0, 1., 0], - # [0, 1., 0], - # [0, 1., 0], + [0, 1., 0], + [0, 1., 0], + [0, 1., 0], + [0, 1., 0], + [0, 1., 0], ]) poly_lnvert = np.array([poly.shape[1] for poly in poly_coords]) limits_r, limits_z = compute_min_max_r_and_z(ves_poly) From 08624ec48724f296e61a12f2cdccf79551bb8b03 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Tue, 12 Oct 2021 16:32:03 +0200 Subject: [PATCH 23/29] full test sa_map_poly with all option --- tofu/geom/openmp_enabled.py | 2 +- tofu/tests/tests01_geom/test_04_sampling.py | 47 ++++----------------- 2 files changed, 9 insertions(+), 40 deletions(-) diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index 5d9c623d0..e206884a5 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-10-12 14:03:51 +# Autogenerated by Tofu's setup.py on 2021-10-12 14:27:20 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. diff --git a/tofu/tests/tests01_geom/test_04_sampling.py b/tofu/tests/tests01_geom/test_04_sampling.py index b8d9f7f82..e637a1f51 100644 --- a/tofu/tests/tests01_geom/test_04_sampling.py +++ b/tofu/tests/tests01_geom/test_04_sampling.py @@ -371,11 +371,9 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): print() config = tf.load_config("A1") + # lightening up config by removing all PFCs for name_pfc in ['BaffleV0', "DivUpV1", "DivLowITERV1"]: - try: - config.remove_Struct("PFC", name_pfc) - except: - pass + config.remove_Struct("PFC", name_pfc) kwdargs = config.get_kwdargs_LOS_isVis() ves_poly = kwdargs["ves_poly"] @@ -440,7 +438,7 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): [3.0, 0., 0.50], [3.0, 0., 0.25], [2.6, 0., 0.25], - ]).T, # 6th polygon + ]).T, # 6th polygon ] poly_coords = [np.ascontiguousarray(poly) for poly in poly_coords] poly_lnorms = np.array([ @@ -454,9 +452,9 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): poly_lnvert = np.array([poly.shape[1] for poly in poly_coords]) limits_r, limits_z = compute_min_max_r_and_z(ves_poly) - lblock = [False] #, True] + lblock = [False, True] lstep_rz = [ - # 0.01, + 0.03, 0.01, ] @@ -467,9 +465,9 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): rstep = zstep = step_rz zstep = step_rz phistep = 0.01 - DR = None # [2.45, 2.8] - DZ = None # [-0.5, 0.] - DPhi = None # [-0.1, 0.1] + DR = [2.45, 2.8] + DZ = [-0.5, 0.] + DPhi = [-0.1, 0.1] # -- Getting cython APPROX computation -------------------------------- res = GG.compute_solid_angle_poly_map( @@ -521,10 +519,6 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): "r-", marker='o', linewidth=2, ) - # for iii in range(np.size(xpoly)): - # ax.annotate(iii, - # (xpoly[iii], - # zpoly[iii])) ax.plot() ax.set_title("cython function") fig.colorbar(im, ax=ax) @@ -532,30 +526,5 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): + "_block" + str(block) + "_steprz" + str(step_rz).replace(".", "_")) - # max_py = np.max(sa_map_py) - # max_cy = np.max(sa_map_cy) - # max_py_ex = np.max(sa_map_py_ex) - # max_cy_ex = np.max(sa_map_cy_ex) - - # err = np.abs(sa_map_py - sa_map_cy) / max(max_py, max_cy) - # print("max error approx py vs cy =", np.max(err)) - - # err = np.abs(sa_map_py_ex - sa_map_cy_ex) / max(max_py_ex, max_cy_ex) - # print("max error exacts py vs cy =", np.max(err)) - - # err = np.abs(sa_map_py_ex - sa_map_py) / max(max_py, max_py_ex) - # print("max error python approx vs exact =", np.max(err)) - - # err = np.abs(sa_map_cy_ex - sa_map_cy) / max(max_cy, max_cy_ex) - # print("max error cython approx vs exact =", np.max(err)) - - # assert np.allclose(sa_map_cy, sa_map_py, atol=1e-16, rtol=1e-16, - # equal_nan=True) - # assert np.allclose(sa_map_cy_ex, sa_map_py_ex, atol=1e-16, rtol=1e-16, - # equal_nan=True) - # assert np.allclose(sa_map_cy, sa_map_cy_ex, atol=1e-14, rtol=1e-16, - # equal_nan=True) - # assert np.allclose(sa_map_py, sa_map_py_ex, atol=1e-14, rtol=1e-16, - # equal_nan=True) # ... return From 7a028ab2284d5d53d98a2fe41eabeeaf1cac3db6 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Wed, 10 Nov 2021 17:08:47 +0100 Subject: [PATCH 24/29] added pdf --- Notes_Upgrades/SA_tetra/SA_tetra.pdf | Bin 0 -> 130912 bytes tofu/geom/openmp_enabled.py | 2 +- tofu/tests/tests01_geom/test_04_sampling.py | 42 ++++++++++++-------- 3 files changed, 26 insertions(+), 18 deletions(-) create mode 100644 Notes_Upgrades/SA_tetra/SA_tetra.pdf diff --git a/Notes_Upgrades/SA_tetra/SA_tetra.pdf b/Notes_Upgrades/SA_tetra/SA_tetra.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5c10085e3bb5282f3d6214b809d59d370fe0b93b GIT binary patch literal 130912 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 *P`PP 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 0: + print(f">>>>>>>>>> THERE IS {npoly=}") for pp in range(npoly): + print(f"...... {pp} / {npoly}") plt.clf() fig = plt.figure() ax = plt.subplot(111) - # import pdb; pdb.set_trace() + print("begining") im = ax.scatter(pts[0, :], pts[1, :], marker="s", edgecolors="None", - s=40, c=sa_map_cy[:, pp].flatten(), + s=40, c=sa_map_cy[:, pp], vmin=sa_map_cy[:, pp].min(), vmax=sa_map_cy[:, pp].max()) poly = poly_coords[pp] + poly = np.concatenate((poly, poly[:, 0].reshape(-1, 1)), axis=1) xpoly = np.sqrt(poly[0]**2 + poly[1]**2) + print(f"{xpoly=}") zpoly = poly[2] ax.plot( - xpoly[[iii for iii in range(np.size(xpoly))]+[0]], - zpoly[[iii for iii in range(np.size(xpoly))]+[0]], + xpoly, zpoly, "r-", marker='o', linewidth=2, ) + print("so far so good") + for xzi, (x,z) in enumerate(zip(xpoly, zpoly)): + #ax.annotate(f"({x},{z})", (x, z)) + ax.annotate(f"{xzi}", (x,z)) ax.plot() + print("sfsg 2") ax.set_title("cython function") fig.colorbar(im, ax=ax) + print("sfsg 3") plt.savefig("sa_map_poly" + str(pp) + "_block" + str(block) + "_steprz" + str(step_rz).replace(".", "_")) + print("...saved!\n") # ... return From a05983dcc7a11db9d3d3458e97a5f2a3adb151fc Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Wed, 10 Nov 2021 17:09:09 +0100 Subject: [PATCH 25/29] added other pdf --- Notes_Upgrades/SA_tetra/LM_version.pdf | Bin 0 -> 124735 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Notes_Upgrades/SA_tetra/LM_version.pdf diff --git a/Notes_Upgrades/SA_tetra/LM_version.pdf b/Notes_Upgrades/SA_tetra/LM_version.pdf new file mode 100644 index 0000000000000000000000000000000000000000..79b1a5ba83fe0d884264cb46cc3021ffe87c90b4 GIT binary patch literal 124735 zcmcG#Ra6{Nw=UYadvFgH+%>obcXxMp5AMMU?(V^%fnW*HNPu9$-7QFPImN&C+2cOk zG46Rdw_m!tdafzoT+>!{)2K*FGqbaBBhyUH{``Z?O~FRtY-WcnD2U9eVCiJ-VMD>r z&Cf>hpBFN#w5@}Or5gpSw1cUKrKF{~vxOzHurRW_hnuCTBeKuZsjj^9vNY!RNA15K zC^xOFZwx6A7#+j#0t=&^UD2CLe;_+BChrpTT({qD%fBxxqt=VnZ}?a5kI7=G4}JwrPeUQvi0evGR5x#J`V z(XRBKvtE8|UeSEgQ^330{AVFpu!_qn-Mp-f5w~d;i+|1%G_)CxBgGbZHQ0(Xx=hW@ zr1LfERp6v~3{K*E@%~R3`ErFHix~LUX);eLX4D!BF{;$19*~2ZldG($d$W7S&z3qU zJooFP*+*FNtU=(ioyWyR^1CXF^0KKGTF<1c2@_3}GROMPrWkZ19dnejssilB!)G4G zsWp6;Ky1lx4$aCIDI7?X8UYt$7OE%g8q48Sp**s3MmF}bc^L{#f8_qv-Q$$*`Tydb zq@p)anTxCm8vUN(t5&tP1rE4N$@1gS8{bQYF=4dD#)}M~+-`7CPq8b4K#kjN-WuHb z!YUsjk=^i9l>B=MhQ|`c++8sZPSaAAREk6_7DFlC(D0UQD2{I85=6wJDl>~#_=_dk zpohty77VQ#RY>ggJ{0zIVH|Z7iHZ(PX(%%&9i^e1?q2V++nOKIkM(HS#?lk?qXy>idtmT7M9 zT+iYoOQlTnUk{frR63t*&(MX8c3M8dxzWfx_%N3S%2Q@hblWkKoOW!NO~E$9@QIS| z90vy^lx;U@Me5W!aJ{6F=y^aZy-%ap=g*jUofBAI{QbhpP-rpTXS8Ro^o>zA$p zt?=7%-QeI(IPF@NNSd|C9_BwVmgTA76>s{i5@r}mSl8d02Gu*h1sS#RW$$3mzd?Ug z=co67RH8L!dda1@-{>69c}TCCqzQ+<)b{#tz=pc^~m`6Nvs&$p01929@A$ak!b%XuphP|;nVyO4y$DcgCy zHXJR6n~mdjVybe9Og+e}xHNKF_6@8!iO^UXn!{L^PYKC16~wW(DcwM5pQj=sfPwZP z9LZ2qlZ>suO%`LiDXoIAy{j^CN#s~&$auH(s9sXcOvF!83@#*+RHd&e2(`l$gR?yW z-yIQDzW?!FbBJoqaUPsRX*uTCoj*>8Rkw(e*eU9yEbpzN$Metr;FZJ5E{4Uj08{ik zbC6yDa)!Xn&$5*PIZf{jD^hPy*`yQ(exYiFs3w^vorD#P_SAcq#p?w>mdcn*+_C&1 z2zY;|{vajJo~?58eQ~>(9Aj5tn>5|((FX$Es6Yd=_6;p2^HsTUws`MKW(>5 z;y4o(5OWWH98Xu{!>tZvSl7lg#1m*rGTgVd&Ox!KXl~nUL|6@9JxBN?;Y{tfAo)J;_6Fn$gaa zlPsHz+iGrU4mFp@P8@kUT`TJG?p^5bQLpG?^Oo+gf!3V3OTweYa^5E09|r^E%4`Cs z#s*EFo7iQpoj#A4Ab*~+eJV=KVr#gyq6lA{`(W2rxt-Qw4!f@!`$t%@3oGYc=deA` zY@|3k@-uJBB{@t`?7>2wovO6a0K1&hGF^41V}!fYCw8-OwGCBx^NphK8|sf{uk#b% zy3@;#*{)B&7N=5@OC>LK90-rxW=p=%jCe*B4=d+>b}Yr$zcw3NH-PuZvHz~cHUA7g z7ut-04r{LB%h7%ZZ{BmGJkSfJ=s4zxZ0Th2-vtD?dMiHc|BoW1;p<{a!K$NdW@l;c zfy}DzY3A{tJFA0Qbdzv)ba8gF zbn>9!LuQq5c5rr6cQG{w_(@uN*_vCbeG&&aDw?|6Q?T;^GS&X4=5cdy@ckdxyjB0d zyPk%_7Ypa@y*Wvq*&ZgU>%XLVPV}7si^zoRT*Suit}WK zk!jP1pyb(8Wm|q=A{2RWaVN+9nI)f?C4a^`4agR{^T<1%8X?}bO zn%uuyaSz(RQUv|qc?sVzT9cJB02vntsNE^kz}Fpg>0}sP0|8j0hkb zOE%Ok&WQeJ)t@jRE-)eO`AOIdXWSbEqfnrwRaC+US{5>piOmGtL14fg5;Ym95Nm?X z7lGW7=K}&LGxfApae@N4={k|*cd`JiIa)`pnz3RAZngERbQ&-0umbA~_a^?D<-I%r zq8}EyK6NNA)a9kYfE0SPN8v9(pjPC_(bdkjR4fcoQg+~d;~te7I>;sx-~KN`<*Rfp z37}1@0CSO;#0&<=qmJ;X4U3nt9av9_6iLK07&k#u;sX-p9D&~j1zY(ve*Ij!=hOj+ znqW(DY=_&%#Q?RG5FYg|w^5A)ixk(#h#KeGY&YI0D2RW+fE*notxmtyIq<|_2CBRlp8H|g`VU`95L8HL5#|PnK=l|5U9MG zpGl}|Zq87CBQNjr^tyi^ivZ#pY~fMVo)HCMqBe;Mg4hNo%F>BxgquMozi!jooYE9X zF#vLhxaVOQ&~;~6OOSQxqz@Y-sCo&Gi4Q3wJD5*QXqX3SM-;Y=XJ~i4KPq zx#38@$$D6MRQcap{5N$9_j*v28>q0LY)vW32Y8oSBeS;0!2n%1e{|U;jRjzrEIX)RsKU<6kz=2ERv5nbI4ZR*N*sAiiO{xxnxxbL` zK!glLFt8Nofcd7x8pk$i?9$h;8kj=Bn-Z$~J{>e!)+`|RmOhTLo)`h+yg3LAggX+N z4gZ*-si@9LDTuw3ouBPqc>zU~bC!x&p-D`8lm;fVpCQ%(F#ftTh$HGF))tf~+nYy& ztxSG-lcxdiqCC+E!S!`tP(5Y<^ljiD)|~)yW*wwtv}lAk_XD4@i(K_l4G(~ieFmpY z9z`SuHidyGq)j0qU&F@GTC4&kc-X>y07s1b@D}Az_l&ZjGiS zCh&b@ZUF;$G1#iG;0w%ca1PWI>UFQ>29Jvf=$}DJ(tpddQRfH6dr1}NFT*NeVVq%# za+(;63WBns7K7bDurN&_+1D_A!CJ&bjih}ZWBraWPZH#fqup!%Gu(U9Mzv5MvPjEIuEr70<t$`1;^C=MjKtcJueEx0_AV08?ckzfOrLC!4r6 zZColj-ExZWP{Mq7fK^(mH zLVIuErf?avvu3ewkyQjlpB+Ewqep<7XOsOU21Fe~R`&jDCQ6CXkQk4s&=4Ws&W?-1&vew2w9XuecHbhy9D<3mGjh`%dB?zu;z zQX;IxCgvRp9C6!8v3iYZ|aAG%Q1)E@mP_9H}%IHxNIm37!7{zd)cO+6bEZdD2l8I1PO2uUkD{c z)k-W%+i(h%E#hJ)dFSO)hW_BP8ijcT-kSr)P3fNh55>1NJ=AHElWdSOIDx0Y9OLm0Ag8N~^tU!7j!EPUB9Cu0KML9tVUS5|oJA7e) zdjK0Qzq-Aj>9>L!w1W?}%E}PT52(%k1#1Hz3~8fvRx+~1WQ#SKLKUUz7WQS}AE5x& zYw+{kcU?wAOIbl>Llur*0-W{V%oa_zgcPKa7dkD1RB#Z|Cn=o%IUr)9f`klI&@Ba) zC<=#w%odELmv3NzZh5&XTltw26#wICM}JqFgme`43nKgk2z7lIfZ!SR4FU{jh3{D> z&X|RSplXt@0YbXzOl&Aqs31)(>d%?E&X^PgAivT9x>W!FqRtsDQaD$}%Z3AVXTYap zrH&$gGlStHjWc5u$EiKu)S4A2^9vlLJ@sP>dvmZB0sxGal|Q9HYHrqvIo?#311Qsp zIagOn?~e%{z`U9yFMw*XQ;-_^Ko96wOrnNT(jjd-OwB;Zs95?l1e6PUU<3N3qXYb( zBdsNZtpK1fdefe$fx6!}mJPK*(?zWh>_`7BxI)5U29(runs!3iDJlXk7>^a5%NhtF z#IG61ds8KNzhu8>pV;C7o~wQexSY5YtU_uAJvhM^ejFOz{IZAXs*2%$=^ChA!tn zg1cyp6@(oy0sZ{=+DJw{@)9Y5{d4W2c&TtH7Y34ELKStalVy=dXLe=<#q$6b&d#Ll zeA@j67yMuWqe6a_vd%PF;WZAe(hg{(g0l^gg5ZxXya%jjTRcvsOSPmS2H7p6_EjoS z*8rZR%Y;*T1Sr|C?NeCk$hqEh7a}P*$u~GQM=Z1jcFKe&WCjuh55>g>2t(}$?_{J- zK!A(|fRS#w`z7KS?LU_>I}#B3-CMl>2=Zy-zIV8XrxDG`hRS4gW{BcomK}Oq(nozY z=FH&33s4=H3;bvi~yp?=b`;6%8H=5x#JA4YHgnk&-v@ zA31p`)+zR=&<8G@Aa$LjC!&syib0V&gZ7q=@r^JPsya7MFrDer5ivLe zF3c)8gNZ4MV>OS&77vK$>RM$oc_$9Ux3rp@TPw@L`Jc;`+yK_aF$$o*YAmvL3NEJA zvY`MZnp(7zG};8P!B)WxaVcFXsiWTSK>%cnlD^uT!sHU5aWG+F9SgvpnF}$v6NoR- zMr3-vj*;EZUKjw`J$S|FB{OpTAnLv?is8fh2DK#mHbn+9>Kv_<&gQP+N00y=I z13P8z=c~0QjA-{{AGLkzehMcVba1s*uwhECOoHs!EI5!*s2Hcm%GM5e z$2;ZT3JPeOQyNo{6Ej|+fj$PJ1u$?@zTp5yRv1lm`JgldGfdEUC814EE$1zG$rte$p$U)~Hf z0(v6=dXJBXL114%6ng9?`yMOi=6 z@Y0-LvID4zacbx$t>iz|i2;-CfvH53z`bbGZzhl^o5o^FcT%nsCcw3tNr6Rqp6(Nv z4q$uzSLO21qOl7Kfr5L=$fffDCQMgTMaw}2RI z0JhZA+-_FiDEYTxYIIEAkFUm?6CnhFsuVbjVgt1 zj8y;{#620A{3lH?`6N}L0~ItCZUXejC)q101}D$}s+CP#_cJ?C?g+tFJcF1HEP%l( zzuW*16QG7UMK-_H9U|U0{Kitffq+71vjN#iagKL3?o97E0b+x_xCcqB261<-zd)da zO)5F^Nm79xVOL!$b*UC!6EW06+dNL5$(;+bVye!+HPkmNHinI)HCtbyF0-3l8Q_f4U|pE@AmtZ z@2f$M!CDs$D7gOq_BT9hmUfWg=Jcg3EU0fXK=@w6SKG9!B=wy7cyu2N1Y+e)escBQ z+IdXn`~m|y*lgPoRtJH~xi+!p{_mW^{eN+ZUwMVzn6HNZe>o|AJGT7a&+GpGJSzR< zX6pMtr=#q=oV;BBr%wb85e(i9(kN6?<9hQb9){iy+FFG-*I83UqUMEC~ z@APYBf8ccurRWql0$({anmPZ7mh*jG{5T4=;N^Vl#M^zIVQjH{a*}gy^*zh?DzX^! z2on`HX9^v0+LT9eHSw1XV)%&3Lwq?4s<=ENfpqdILITkr%27ncqTsgh_D&G~GMQd;+VTD;0xuR_(V{s?x zlyVYD__zef$kFy#^}Ei(xIK*^p-HH=#?X|jYh+=7{HKTp2DS7UVHt7}3;zvjaiK~* zi=tvFysV1r(KvHOO<_vJE#pZkaThBWSrpcCf|RB|x4ge0h`PZf;z==EG&otIrP-IG z^uyu|kbO11MBQ+vCz8~0De<@TOta~BNK|vq83YyVsQ0F)i&}PPjMq7(S(R{B~!%2>gvVM|FNMZ$BKwu{J6W96}r3qQyU`k=afrA zl`V(QZZ|gc?eP~>!5LP*2!k?=&WUu~rw*hF4~^Ra{@9kAXR zB|$SBI;)4}25OEnOJFoh;*vZ|CooVMhKDPc%81M5q7_#}(v&T+{UV1FW@hPgHA~Kt z!Kd6*Oa{}CtL~gE|8~smSAkYmNMeN^AkA{taGj;Ieq~vW|_g9@*s%Lr3SJhKh!x{fDmKjg3@Q8%hsXv2!vfFQ{oHiETj4c*LEZ zJ~Xu~kYMHsx9`*N`wCj@98{?RM1*u3H2lg5h*|`T3L8=`#%H%94s2=B!cT!}ad|ls zzeri(sQlF3hUbCtEqe9vK` z@OAv?i?moYG@27`)_L~~qGBi}l0wwGl-pkmRyLU7(JJ)5H`S{(`>4_t8nDnIY~2J2 zO@G^fGZRUK{jOWDoqUH2hPt5;q>yGDA^+J%6mMSXE{brB5<=^-)HCwiY04U zg!IoYkM($-7Rs(3osg^^T{PVsHXohdaX6S=xz&X_j_MZ4V)=;=XkWjce*S1>CHGRt zRpQ+H#Zxhh+GKC@Xj+iN!l0|8&bU30t@rWDIs0k8cW9ROEpRiK*yssXMG4-&N(*9Y^}3*Fd5khe_+JvG9(n*8QgLD z^vIpL&Qz!(OLlqV~)4Xn#168=h;H;8;;$qmy*Gd;mEZ)1C_wpFbgQ4{&*T<&8 zGA~w^17mQv33lHKr4r3$ON0{$13Hz5TdZ0Ur0y16+XtpmU@7;Vynhb@)MrZ00lHRMioBb>%}vyN5rBBx-mT=}wKDt6(7&Sz>U$Ieu2GuCsF zpc^A3^DNy;+Qs|Jh)+!ElmQIuS^wKaOMLR#aOgWB$Gum35HS%KDIwm{)ZjGXYP1~E z(#nVV9`880^D>LzLf@%SI@jcZ_-RYc{!X>W!iO0%|8u9D%i{I;$5nVI+dpOobAPRj zl+G9;E=v)a0$oeQEiUqP(uV?jwaV#wPQM50a#ww?n(7^C$_+HJ@0CuiraQF}xOYwD zKg^3dt6UE<^ZBP`DKv`9agV{bO8RN{2P!0Fn&uZ=o&D^T-l0se#T{h@w}isa>kvFL zp7iW=XFitqw)SE4w_QwuYfj^59h2n|Q$BD56itai@PFYcIE(L%X3^eDH;+{d z!8~@T;w;f$P-QoSjZm&x@Tf86PS!`X49U$sO%9N;*u*8iF`#C?Z*35-_djV{r=_!d6o)u?O zqTS>prR;jCISz8p!gyw}ordceOb^^*IYdytm6+IMA4D4P`xXG&qQ(2^*nhWOiNl2d z#amw>#nfX&H>H=fek^&{nelY|if58Ja4%Qo3*N*zf^QUclZzX9HqyE+=hXd1i{xpP zgf&gC7A#M*4z*JFdJ0O?)V~Ndyj%y!QIFtVDXhwPynO?)9=@QIcreG)8C_?t%iDZU z(S{NpNgD_V9+v7kQ00wAn|E(bDL=cSjp}4m(97;vIU8V#Nt%~@k;|kvuU(YwFf5kW zW&f9#+r799kc)CSWR~ydNf=9Wdg&)=Db^-6jIndyQs^Eb?Fq}YJ>R{}m(N>;9u0L=Cy{dw~Na=7VGUvxO9~eF9 zp!JR`@s7XjU;8Hf>%3EVio_MhR)L@<_z!|-n9Y>1p8u`>{^Aw1E<6De!D_%!J^?}) z_+g$lJU53m9UYoP<2(9y72aIMfz@vj@#P|%ogWV^CEDu2^UTm+MH1>a?Y^=8qjgxx z{=9KRAeuhKI*ZnzuF8vuZ#7(;xpHRbZbkNJ8g@DFZmdP7Gs%{4G^7jKM^4ykrfe@e z(t2;qyHn_d$r8V9&jDVy3|}@N9TNURU4p*oOyGd14e0!1vUC1Z-2@iCDAFhpOP{^ zA2DaF{=8e$FqtdP_eXM*&nspx3t_p`zLFRgwE~x^T4h)@!F}xb$xile>m~53)KQt- zV=m^mJAs#2A}aZJN0Gdh#Nh}K0dhR$MTMoU!@>ULF^qWKfcNDj=iBIC3V#IaKZnLPfaMZ2SKxD&r?7)-Mys8>l`PgCNA znQ3M7^Nb&1!BNDGOKrpE;WY3(#_|5RLl)HEXDTl6g8CUMA6hjjR~JVvg~H9`D(WUCK_?bj<~gNfaNvF- zLJPjkAV`dVOxf!Wv)~zzsaD|XtH6YrK`SfGliK(Ff_38HqWo1E~sExu#o>5y6e!IrRQ?`p z8ZM+JyUr#&n?7^>u;zg__v!mH(Wma0X)3J=fw(Bpq^5Bm^52xO^i()7C5&g-n&~;j zQHcJcqf1TXw4zbFZadEYv#!z4T@j=rjmbr#Qy9LXpU_msvuN-V4g&4J+S6=h)>pCo zM!TuqY|o+O(;`caBo0c;X+0DXG9j{L<6Zm5kvWyb*KrAF1`W)-hw86a1U9i60f{4AkhXkF6w}>=T+Wn}r#Tc{QZP53#oQT?+QB+Zn=kH8V-(>Z^WktlKQw!>37< zZZ5Z>RejIInX3wdVT{TryYHLNai=$;;mON0It~{ZNO8PyuBQL6!xSZR+mP5Q;!rw9_^V z&OVx7Fmdz;krbtP=YOBGMWBe%U8v_l1ub8aD$c__v5v%_|E#l+X(i(LlomQonKOG1 z#I(1R8G>6KD{on|KULyv&kMN>wpLRzRLqI5!(8ud?pm#~zB`EI7-0!wcf>BJ;_bz* zIG24f4d-nMi= z$`1YXx11kdzQ{lTfE4S9qUvQ$YE!iPt>Ap7c^1yr6>C|jH(X7){xJ#{0uzWiZp`!k zH?oHWn_E1qhoI@uE#pyvGif2+r5p!TeVU*nsm|lWZ@X1o?~qobtC&e!ky$jq4<`{% z-euIk!>k>yulRXo6)TEK8(M|=U9H4u_~16s8)gu!Rwwt9Z+VX3^QU^_$bu+ZVU&0m zhKEn6G*p>GLWh2^ERj+YV{rk^QQm%Ap(w9Kxu#hDMev44pn{Q{9%_u^V6Ven2&U9& zM~0((gW_Sor@@EUc98K^9;r9ns!6=YHi=T>gYCp|?vZZD`Tgd*0qiebxc8aQe@D&l zB!ih=^0p_I$Qh^55=OY|8%=uhjV!vKi&1)=4`lf+)A4QzWz}z3;Cu=bg*vEy3l}+U z)L0!@7d2?l{o|WSn7rOblK4J%X|$}L^t?rkLif_UB(zI-1Rq2pWGwG|ZYN0FMD@9; zKXJ-Dtc};-Sn;oNbWqR8$FH}BCP1Aic{hueduba%W~}vmuyGlXyugL9QFO%b0zfhhqpDHhZXiqw$3T1Bn^d-GT zqm&ASzg-xMT=^;$G$k+>g}ruQUtLI?o8${F`Dgar+nn$`ouBKKkc}hEhFro3v^>S765Y1qYI7Ou zix+b_Kuc33BV=eAIE}egqg3t9iXNpYfkYf+b{%dn(5=0;(V-O=_!Ovul3xx1AU!;* zB=$Ic9U?A;u558e_nv+{LBd66^QXS4K4NC4_Hy+fY9l?JOmx!888(#pv|30du-3vo z?rgP0`pXN(55*;ClS*8;#jaAheZcXU+F{Gh z3Kd|s(tG)E73yc@N3HcIh?_5dxhE6{>PDrWitOD1JdOp0zXPFFCGUd4)&oEOSd=#= zHX9o7>;R##F_8hOT`xnmOg|P)X}>rS z=dlknYg8nNxtt9KNeMUtGYg^bNI9Cjqs`Rqr>BFvh)xz#VYM5SOc5)0QWIvXA|jRZ z24C*3M&o}MRHCjKbhBvS{ud?tL90IZY$85{Js7e^^jm5gq53!nvZtq7@|@x7_?phG1aaFw328kiaWHqluHvBGgbnrLARnY43AR(>zH?;){ zX0C1k7dn~5=@lSR;QS&EYPVz${D(vD;+0zcRT(N}aerZidRP1Lbm`QewFjxti)2bt zjMwKqWoy){y4cBz!^L8%Ry=vOOl*#2Ql%28pxAS?(RX=s^OjEE)}Y(Gi%Wg`XtFv2 zOi4sv#T_abfwje4xs`&2YQMHt`VFBeU==&~QDE}t!|>0ZEcK#<$jCL#IG6X8#D6F( zqcjKzt8({VI=NF3j#5)zA|18{%{fPr>ct zuBaohpbbvD5@g4nTW|9dbcge0bl&~s8IA~h?vsCmfd zwbzaL*AcE?PLDNir?E`!`DkpZiyKlQPCgtxOls;>Od|Md3lt_&5o=3x z8gx)@i`q)Gr4g)y7kVbvhfTeX`z@mjh;7akH6$}!1Ng5w4a9boyxgKqo^6Gf<}Wjz z?v8szJV}@TW_G3K&J;F;Z}B98nEZXBv7So^hMc+-9xZ0k^p+X4O!^~gxASl30v6g! zUA8@a;%*T}HZ6ylW*&q}jFlMGL)h42HKEmJ(Ut}dU1>sgM|ka4U=<$`sKXM7tCV1T zAle(B+W*2gK(XjG2MX7!@KRHV%@ux1*=X8n7VOS>I84zhH5op>L@o&g4c}emKSFJ+ zOtF;w8G}t^;@f;8#C^B*fpe(Ux@=Z(^)GOK#GxRMW%tVg z#wbBcuMtXPLFnHdo!|)}8<|Pfr2toxRKQSt6D4X6O4m*=AmGfopas`qO%TT~@L2C@ z=Yv`jsRud2NJu=W{>uJ_z)drXp|O7IuEF`p!yGR{OqDlHq75&?BD39vb3b{hNvaXA zgVCk&xxoUZPpW<);|A_e)eCy6A2CjEZvP3d`v06ry!*LPf=y}dyo9pwKCqfVE&9qs zd43bUk0XIGgi&uoH7X%a=hog*TMN9&bQJj>52J?q;Ayd|H?x@UPE^i?7y%+31Ul%q zmCk`Sn5xJ7W`EjpUgRBmvm}=NO-PwnP-3+Zw9RN3ktfz}<+zW>6wLkr>yjU*fdFk0 z>6)c@Tx!4C(%Tg}4c>3tKC)Zg!aay2nMI30B%{410slIh|FE8O#L~y8gl&k>=Xxzl z-wgVr78kQ@&_-uFX4JLw5g3iIbs3|s$az91w+}MDUl#odD?Q;O#BKckb%+MWOy~Yu zr;S+SYK@Qh^s5cfz%Ep+$>&IDQ=2%yK0-8mWGCi8sg6;IMQ-6JQo3&7LQtXs#nwUXMPy>FE7DkmHV?U$5t#`d( zCEMi~;=~sP4(WSr{4lTfQIS-|o0`6bl~3-RGkAGr98td~+`+J&Ji%}+;CFFscE+zF zrw^ev${$@VJpSsdSiB9f>KW!yR=~$$Co6Y6 z;8yRIeU6xfTjI}g3iYz{mpJcBP`4>(dqf*}Q_*$-&6o%OlW+lyU^W{E7@D_=8P=z; zYvxiFRR0mICDD8P@jAV6sclN+ANeerhy2rs^t*dOMY+*5IX|PQ)RXMIJyC%i=85i! zur-dFb>^3!u={Ryo`Z9Ot1d!|)z@wdLelU08F^CO-pft>dKyCJL{GU2N*)!Xpuqp` zwd;yv`(k0&YBjHS7 zDmw!>#>ntmHF-`aFnfm)8Tv)taaf^2FFA}l_3XH%;Flo0sqA9$o;SPvyp~28l7n22 z6WezJh9`wKN;s~zjmqU2D*@%b1cW<@sO*_d^1I5!x>7-ZKa%fi!lT$gta`i)v8aTX z`Wn2bldoT59#wbZ9!!5iPLA|VTzQ@43)|xT(Ak(vS$el|h|{0tZr})rV;lB$`d6vT z&AVy-z_EJd-}Df_#iZqw(?MDc(7^TGGu~cR6seY{Ry}e3&S7M)T!9lC|3mu5)g7y< zht#AFnz4#5opX~csNoM!a}3D;-x}j#Dz>j_W<&(`>NjD1rM31d;j;KHGBVuo{GZ35 zbNLoDM>6l}qWt7DD87D<=r#UeY4~rUsv4=Zgg8ACX$O(oWg5JaLLT@&=-#Pj^qtNP zWfT2hP9)&F%3!Wd|5*eE+eey3e^DMI#=!;)6gwqt*L(=Ec0r;~m7&>Z7V$Qk@C&ED zkwESe6?F&s5&tF{LgV!$;px#)r>CDqi(^cGf9916Cri5seX| z;vdmZM>(io{nRwpVDlpuxeQ28orDwzPl51ug1E#&N5ec?Ar?P$FCzKBIh%jp3Gt_@ zcn{um3vv3!LbK8ue~a&SVH3GCI1@Qo zY>R{dXOjw=JY$j-vGajmIo2#L`*`n}WTv|DurP=z({!E)hq9(U$$_dhzh%wdpEV}b z$)~E>>95iny>VKyC#~jRl>Q|?WIlJ=Qd<6!8}u0{eL)=$o+wav&3J8~A9`nqcyprW zBh-cWr=?xiq;{4mG+ya%y3zZc3@Gnh>QejCug<8Utk0nOP!w-xJ4JF`uV@z$UGk<& zFY#9-lefrlOZ2~IVW#zp3YV+!vb_|w2BQ3Q(fKp`?^U-i>!bKdMdP~ZQOl)v`IRis z0@OU)<^y-IfOu<4m3xi);L^X_DMjAvRQ`XtM4GFE9J$#G z@LHp6jrVs^7X-8>V58?=ZoYylA`Ig%#*QZqsFy>R1rD)MR;L)E1YPv|drR)&`qeYC z?^8{hdC*#N{kfHvwtv(bPqQ|&hIL^;d*B5WbZr%0M!hg84|{)@LL*!{ifn3OUCMfo zrCGM^9{%!k=q%I``4P)MsD8Hx=q{{UP@~C?fAbs}!uG+i^X;o!UF;zkFL_@T1rQ!Z z?(WQA0~1LO;)}l_88UaZCXUI5vHcd0GkHn+JFBWC_+YN{Ajc0hczoG)9cCXJvV3m? zR$bh~hXUgTg;O50RktKg!9xS%I+*MS4Dd}o){7BK?G)I>&@En1Y1uK=l8#Zos@y6+ zucGPRgT)3_Hr@#|5zZg%IdV1Gn>)lx^90ll(dCO335QPLo#Tbt&u zvTU8>Y&(zE=F#v=J9qs<)v8|7y#PYegvL05uaa} z2Mwj~PAZLp3?T*qlv)kVQx&04(~dMemS;C+v&<%6wS<&=c|n8Rs}=!?sXYj2G4sP~ zm2+q0DN_L(BGIR72r z+zCtPiZheTcSv$jqqI*fOY9#H_T!2&(m^_#e5@v2PNUUb;~%^Z7OI_xeY%Vvs-=bX zWd}V`n>a1IIug__KLY=v&>Nq13=((Ib)({W)~v95EX{$Ru=hlBJE|#q-5SR?L!xy$ zB9|$>Z|p{%&vr|HO%7_|mV)yPRCs-sw7qS`L0s#RQGcG1uwgFQ5$e+f zG4Is*Q(x6X$WjH$6TpaAC9-`wx6?MqXM}}9@z3cJNTGOOtRxI4B zwWV5foN3v+{vt_~ed-&~Bd^+eNEwDl$s`WW5GvJW8o`obReH=kGWct8gn&uxS(UH= z*HV{FU&W>5nq7Q9tv)0t_xqT#o0%-6PL4(JcVb4Tx<%9`%BrO?;~+_FHX|{I4x0jg zSph{(UWc)Kj(>?o+@kOq`Am=Om9V<0YW--w zZ%otv#6Qm$7L$$TqXR}j6bZ#=V=s3e_SjOIvGd$duK7B5Qe!4?--qL*Fd>+xy^c2~ zn>)K7L|OK68qxG=yy%Ut1XiGQv`!38Jp+DLepvSCtNmhaG@u__ovoa1^p4wEO3p0L zZN*_y>*iaV8D($t(snhpYr%vY&gO@(TmH@QrB{X8k+8dZ|5B$fW~edLTlEO*55o;X z>s9tcs4rA9VgI&;m5B|bhJ)Sxdpzp`Gf zN9p_gE)s4TI@cmU-%(~vGPXJ+d3XUf_92Iiqoc=J7s2p$-iiUQO+cj#XATa#YUJy? z0rKwen;H5%$ayXeFj#OB#HTIF;Vt9;i?Mf%jx6~4g=2MW+qP}nww+9D+nm_R#F*H& zCdot{I}_VC|NFepyY5=|et150b)QpxcI{IewQKKR-LP@xmUl^BQPZ*~cJKhHe`zIZ zJCXV8)@&BsR|}D6F4k_GHl`a4t}5>!^b-VZBcnTa8J}AI&UBW;Tw_Dsabh49&U&S| z&ucn5+1EhlU<{n^4{!2!wZB*@ef^9$DQioL4)5ZqRE^^p#0K^Vuj}>N)n*CCzl|Gw z($9jwi~iNZTZSfQqt&8fDdUyMn<+UjxHX1inzPU4=wAt1Va;dEf!f$p{+TVOEEBxCZQ%0?-|$*TSL@A}qT7pU!Evp*5RSHTOA;zyDUIVlU2Th{ zy3}CQN3=z^w6D6Wr12AS%G+D z>#8FbR(@6-HV$mdRT{q}4Sa~*pkwG7M%_g9Bo=8aKNC37I9>BErL|4_h^AkJqK)}` zJeq{?wGk(=6SB?m8iK&TpOcl=ny$8$mecP zd~%CBCnMp1YI36b@MM=w-gd)|h!$=3IGyBamzAoyM~~eDOS-aD5^hPrgOXX5pmfRp zWeclhc#zUiI%U^8P{xFl4l!`R*Pc6qn_s6iY&Sr5nK#0N(byPDgZpfpuMAP4ssP^N zht;HOji!c0sTY64w9c?QLp`Rd?mCA7DN7}8a~-f0r=FlwieM!SdOzNpSPbmE$2-gT zKtDmV=rd3!(ExZCNi`BGmX*QP1w=B9&dLQ@(43ds>V)>XD`=Uj>EFr`I&zUxoz}-{ z1mA0g^?SoDwj}6%?wd~!CA~XN^G|;OaPCnv_NKBbLs~=%6;qzz67ka|muOa#`r(-a zszEpR9`a06u|;0%-}3o@O#Ta%oPqh|+&4MpC1oTjSS#;xKakgpsf&(4Uo$}seff5} zTn9WyQ?o6^#?i7IKmi0e>p#cpPaoDw|KwOyr^!V)1CeoJ8WMNvTK>mx8;x<8UvDm@ zwxk>6nHeBMuqoYzu74t%k66s5azcUTOgIvvt8K_^PR<&r%6;C_K9?@Nl9lJZixg^6 z(4Bq5pB9_ft=&tZ?FUTN3)e>jsqR=Yxn%rLbx`ME{9M#UY0uiNp*>FZ!c~K(YekVtMt;pAaErk;!bQ>_Sx#)#5ue&q8`7-PGE+5-XMhQz(P0e zJQ$@^pl>NrI8~OIv(2W5$g1tB%>oVDiX0K0%XbRrsGbcgDQ>gr&1Zkpjw{4x;Mz23 z{b6ekxFZE4L?=_{i2;M$OkKSmFz28_N;`=|sm@|AM*3iGfTW`sf|l%bP2X z{9R{t1esaJl3%PT$eqhsVrUDV)7}K-bC>Db z8=;DBL)LsnB%7n0)8<(Vs=OI)&;+~Fbp4or_L;yrzHDq>=7AlsBusYCV4=4Rj4i6< zyy<;+^iqCAGev@QlZ_g@HAE15BGKJIa64Ce~gSx%nwX=Wsw(?VMYJq9QEJ`D{*1N zDTJv*V9Ke`H-x;HhPHd_Lw&E^8I0rA)Z>cTQ6^6ucPMn)Zy2Q|Mzwjjk)41tF>*wg z5Cp__aZPt-ZYG66!-I#D(&CuQb&({4YJN(SazrdG3EDXPiJw#tmM}fQ#4d&j-P2? zo+WY;PY&Jlnx>ZRJskEc z4KSS~mrvwefYL#1!f7oX;c8_&gCL%(-l-D(eAl9wBW(<%qlt%T;>ItXgOu{0b6D>X z%(9eIk#h!GJw4~>!ib3%N9aNPQszE=g?6@=?lzTFjSYk&V2Rj& z6`bmexxx<`n_0=&sF)&{3GPhFUUMiW-rIJU9sf-GFQCheX5#+Y__yd;N_>8s)hpMF z^-tD22=zy&FIx8@k7g@5&Is6?bElr3k`pd@;>xhl$#3z{r90d22(Y1m%RkQXkq}tc zIH9zsc{TQmm3wwjr)aD&iu6d&kH|#M($&0Xk*yKZCn~Oz+4V-kC()D^DFEg zjtHC^j!`rbly&wOSC4^m-=N$%Aa|^l*7=+)Q9(Fgn_Go&VubCpqCjCHPuk{kw>ks7 zU9W*_bF`Qbm9C629sW9@0-4YQPlf&j0C+&F{vzl%;-~0QQ~@%Q48N3L>&`r~OJbBT zN(`T97#=tt5M*mx$8|4)(;6&I&F^aj$p={G_cZS~6fs>(TP*v=?=AiA&EN=$+>}nS z*ytg=7uP+791Xp1EW33om43+v%{DL(B=&(kri-RLQ!VlfvvA%FHWlg1YL-D_D#BtE zzfEqqz#FI4^0Jn#2aEk9Z2(pRtI;tdv$W0bR=^=Dd5S>!`+g^h^=BF_Q>wNA$O<)~ z6A6=UJ>-wP#~}vBzxapI;X?dL%06L-p`G1*C3rNN0i1+!Yx)W|Nn6Iue3EQGY8k=b z2lKXmtkYltMy08Ginoxrj8r1g?SB~x9)WoOA)uNGAt4s~(~Xxp=Sz(SKuDH*m3(>d z`-{0%YTkC8blHIVC-~EyeIy4Iw@U5@*t2@9T%$9{NXRD%@CI^wA6o~+sza%j(L7z7 zdx!4l?2FB9`|_I9b>k3mSdPWD@cvNb4J&b1z@sc6fr2JOTZ(o z7G{cv&B}UiR>n*dm^o8E!|>AZf)ixWIR#vma(`9ABaVd+jjG`110$pyu^akPjN!JE zodV*n!6e4Asm9x>vKxQNm-)?xkIQiqv7!#Dz65S}ZS&a@ZzfP_6hGa+4p`kq{6Pmy0pANik^`H*A{8JF;%NAp_S|wU&fC!Y^$~Ow%NKuuz~vKB?<( zvO|HNT?dvR)4R(4?~s6&u0Pt0n5}%I8W54fN&%z3q^ArR+;TH#6y|R2&C>CSx}2~U zNJZMnj6e0ifpv7WR1f-GGIUw{p%~qsIQoTxe>zn^g;`#H=#HbBm`YMJ(Z2S)j<-!G zrNHLaNoCqYwU^q|FeuT#t3vURs^8=HOZ^H2eV;P0Wt7=Gn*HSLw?#1BWsZR?8luWW zGNSg8o{(uLB9PUE{4G+0YHqq~$bKs}?i_U(Y&Io5;C7IsDMvz2V}%WZWX2v7?m&$R zkwDYc;e;`koZ>X2pqj(3p7f7dUSUbDo{Y7TSu|u5nLEzMMQAb!Mjuk}dLlxrJ1#_- zku0si=~I;w)0UJi3~2&(*34>|B7AO!{myT;XXQ@$4Fz7A;d>27%rqRNn|sB0Dkocz zI_`(~)lU`B9o7lvN2}B9v!L?1ixvaf*iW0j58O~_0#$TLo~I5f@OnKVilU_!9N7@1 z#JpS)mW_fsw{p(i5eu@?e}^Ch3A?$UIkEz6#i}xhuQ*kMQ`-bCE4iMUNa{UiaeMBiqZK92-9KC=Iz#v@oad+9p&aVw9)$l6!0bH$!L>gRWkUT@oDU~)1)~1uP z3Evog+X(n>q3GYNo~^wa_T4{a7u0h@XMJ%a>?A8fj`Dq~>upVbJliXm(vdO-5`}Cl zzUw)s9`tjCC0Ygq@Zx00nHZ?R_EfJ-AIL)HfNLd_2mM^Sfi!T-a{zVwIbm7V)ZUGE z(Qq$;P?4VNkbDc+4b4=f@dIs$|599sMF)H#NUuD*rY-Uh!sKa^%htKzMTpb<*P4Rf z`^K!l9-o3ePPsT%k<`6^<_~{hO@}^xP0Oh37gK)+1=p!Naqe@0ql~ooRu26ReoXim zY7OJl9yx)}dC%347uf9Ek1~ht`RSer(_NuZS=e0rt9?c5B02oq--(j9>j}rv;p}wu zH($t}^=>TH)1NL^^y52j-M{v{f3{z#(7(4`J4i9AcEDaEy;byqXN~MrdAvz| zzawLluQBA25yrtjG{*)+bK^ItrpY30VP=Uncf`TKcM#s1nHOARgh12X5PAChZyk(k#`!9kCvdwXY+&bT=IQ9*}!6Nojnev%bLR5b3>iqr*vM8#|URA;6!4Cz>YBm9U#p3q3`Y!KtK{B6ni|`9g6fF1vc-28xcJXz9_NnM@pK+CcfC-ZoU|NCT`*=!EbE-!=p6gpv+ zTnV3=k$VL+5t zl5mX-t^LG?K_&>CFpaJa;$(HyHhr3AgrdYzmv3>ga$n z+>})CHGa(uXDhx`=r~6f%&}j{F0q!EIUd?xW%zY?cXGys7lbjtsTFJF-y-L|}kdbiZSO^*o+K&fpW#UJL& z%j#c>M6v)U`2B4ZW zvmrrmOtQ(UiwTnyvh%%z0k*ZZYy_Et7NN_)?-S@8fZ>0q1E#)#>~>l(-6GCx9xF5y zB9EZlXBBPw!(B^H=?Q^9=K&g>=h3EMRZwStJKz8VQHiDGg8eXsE6x^OpkpAzaHluM zt%0kOgOnHi181Q6e=Q^=mbO_N=doj9itx)na2Q~|GUjO%tNGrnLJ(C(DJBZ6k3M&U zDZ-Q?PqVS1JgLwGALdnKr+z z>s{mO6lsf=wb|$O|AtbIqQk+z`TvuA$jPkb>Jd%xVtKC@79@2wCfwlLE&*ZWpo)^| z^VgZ0r$O3_UKnGKlcroxE%T(lT}#ekQxWUnLMq*Q!FI4~k!JK0=<8TUQO_?NcaKr#*yV&S1ChH7N)eE!Y$ZzWFG?(cDm^>|nR|QH za!kZ}p#*t(*32~5zp5NXwkH{XdRPcG_8$wDs73g@e>E?S7}I0Jw}B1#$kUB3VVGPv z7NEI*=4H$XGnOp4Vjv-Wz3P@DcsxN3fAtI;DXiE=r1rb8HeMHUW`KrRRQIR?+JeQx z%sI~-v8Rn+es+^8B}a$**J*>nv||63xf7s+omz5muyw}^T2Q28^tIlz{MMHzsu!KM zmpe+J4**YIFnr6~+2=9VM&!^HsS~iS4F`5$ig?tD(#*p?NNrYBIR4KLUln>{ckyMP zpCJq!r1ClCudWV38|%KrUWB5JK|3%e$L#;y38mXxbsr9EK|X#5=m=zMw;KUw5_Uj@ ztgSB@VAm2VdpEB}<>(l;&A($6eQ6>kWZWVO2m^9PNj|CuTJl>FZ#vS#NFVT16kbQt798%@`8ad3Z?hNd(%!TaV=CU%>e0hu7Q zI%6=i95l@G5rUzVxv5DQM11@X>ge{byFh$-=?YQAC$MLQ94vNU5w<5o1$K@QyZ5xh zS6#h9UX1E(CJ^ggryQzphovwNC70~6+jc@Ze%>*9kuDyD(Ix}LF!0*~gncV$0R7u9 zd^%^6;f>n+NkWIcWR5@?wkJn~7M2h!>DJO;-H%ND9A#u^9oOP&VcqSfTv>M48lgk%4pzFxIFKbQkOJsa+sdxN1U^ZS8VkuzAL5i%phv6W@nW zKBfH_^Rph%eK)rYQu~E=n-Lu@|2?_=i!viqbU0G&DT476LEM$I@FrH1V7P=gxYg8MY-3_8dquaA3#FY$yGkNzcmRcF^(#0 z$SSVrNb!^xfAda!41wN8cX_t20J=i-JX=a)W>VK57_3+aHPmEIjnh9zu8j?gxCqhn ze1mkDLU)iPW+|F;P`P4_LCn~3jGlBJ<*-Hj<|Ak>w1X+F-y(#}PC7^oLrdt%m6ZVk zH%5unw31zg4zT%VaYV?U;9>)2Jkjw`xG^BeBOMCh_}k1$eg73PW*mdhJKRp);I2+k zIYs{IBht*KoyNQm4EW$uk3+KA;>#p$Zcr4JtL86JdhMbcWGIP_F$sOURuoMi4Ezgf zo-O5@|M(gbQzY>5)=DEfzdH(dC^cE2^L5aB-q^my05{G<44V-6L?=G;@e{e(?sEV& z=s&t7C0R5`QJ(==S$Y8+|CU_?n6EaYfYExf*{ET!q4!Hd- zwlDydQ^=Ao$FSV4TPUKK2;4?(((kyRHB*@LjtW~J7v;AvMf$~dDibpZ_b8mLJ$@20 zDhdNfmvQ{{BQ#2fC%PVF7z+)c6*8|5V=`c?9Ke3(A6C?K!mR+xcu;TBrv2@KkSJpp z%$+AQP@yAKe61oSU1?!@$xveQmSiJ?iANG0ekDM^j0TW&Tr<}ftb7>#?6CS+kcJT% zG^vp%yeFprhhrwovsQ^Vyy0aAfi&v1415NH?nn6& zLGlj>BDV{p-&)CZp-9|Y3Pe=KKwN9J7EENmeE@gJ7J%q;2|O2_iqIc1cn~^=mC4~j zQ#E#gC`3aX!gItUA~?2>+V^-06_EFYw_`&s(l45y?!T12*&79Q!7C={+V?%hkWms2 z*q#)8*`Y+`D}Rn{s`Xj}!rHGjDKS;QHQ_K6@BCowku`MKNdv)7Dbi0+50g9SC&N^V_|3Ym_jUDmgPIMoX!v)Xr;akofQD z?T-?CYp-zf%c2fn^%zZ&sIbm-xP;fm&3K7wVsR-0TRNWH|NNZTDKN21+X5%*x8xv+ z__ss@d9TFL$u;Z0uJMhNT;4?@6a9dm2k&ZcqZOrJs%3IBxvqa0F>$>n0sY?(!nl!w zScf1HJ+ox04xf4M7INgmMU=bR&E>34YK3 zI=A9Qn*TR3tUQKMmj5BfVd6&SoAckq2q#<>>->ipD_1{+nUHT9j+6Jd7wBOYRQ`T2 z@DRp--yh%EYh?qCuRoW74Ew{Ea(v!?=N0K*-x*F9k_7b(a|9LkyCHhEHN=7X-HmI1 zV0UR$(i+w9CU7c*wDSMPBVqkNp_~8v`~WUap8qkHvYwpV1}AdwvDS&E4Jv8>9xxl9 zzU@*TX=Wsk@Qe^$s_HblEUuLOPvG{U7%FH8y7Zrx+*67aG33?bNGGiM_t)hOI=04P zTIJMpB{Z364AbITa?JaK*ZqUJQ%(aQqg9~6*Xv_U%JKv@nS9Jg zkUO6o_wgSfkoAqUylrY3e%ifFr-CR}>Rc(cE~z-jmbM!BhgRfa_knmA`a^C))a0hQqs*O0fQ zwrEW$CiLcFrgjuxEABg2S!#jj&)&K+@|4(;j0Z>@2`3t+Zv8bE1ec`K2vtoZNo2bn zZt=x_+3cgiyUJ$d&Lz!^V5kbwST&4f;x5T>DshVlOd7;ge$G}bP?BG0!`gdd<79;z zBV-ojR>9IJil~&XFt&*R0df5XwrIeQNs4(gM)_1dy2%(y3zwfsBJ2xN;biclzSs~q zalvSWQGP+?6GFIQR?o{UqDH3*anJ8z&(n#Q>%2=@jMQy^e140e8d0?gyb*n-!F*TYh?B1tynA=V|c zNEyYhP0NL>TqlNHWA@0bdd+1Dmel?B(A&kMY}C>@dg|v^F!dE8)QQk-gIs4L4?Bj0 z7~Uer8Uwp)Ntuywgr=ouP5T4Nd|TwnDa?LzY*L2PVd5jxXddjERAXGSA;`7fjOh3! zYKt|pt*WBI5bz74P57wrlD40`Aq()QEaRt2Q_HU;1`HnO3jQ)Nt&;sT3#YU|dryh< zNAHd|6TP&}jl)Hn!5ct8)9F#svz-ws?O9q>2);Wk`c@38S+fBQh6!&zKp(>1DVp`y zrI{7#*u-5YzqXXL0W_FYMa^p(186w$bL{U#Z-hLFq zxMps`nrDP(;siNbvJ5|M>N9cn@H*S+1oauu4{XI^dGQb=Qvx=hr^-GTpB+WFTWE8M z&Iqx7%$%&&&_hB`*SS9*Nq+o-aFG*zS*-wqV(@h?K_f$34mnCaU-GP4(mC`F;ephe12RFXXY*Yo%Jl?Hwr~MPz zhjYUdW1!uw@~BKTofbD%JXT_SV|xeo_KJ>1q*PZ8vsFXmxKwRvKUPQfT(2Oguo`pm z4Uws|%(y&{NEByb-3qf}&~o2tySRRDJ;&d6x!*OGok7~@v>?VjGiE|Qk$N%$CU?R;eopFb# za8!URLtPV*k%5fZxLxyg$^j%F_Rw3h{bC6WRwUTcuwQi^Dp9szIF(vZ zJ%C8r!<{cd_lXse^(W~odF~VPg{4*muE!oLOZJLU@qLPQ(!T!QX z>)=lXQ3xK4LR9wKZ{VevJd*J-04p3R z(=93`D`!oV${|6=$gg*nam$X66tbOLkIc_h@b}|DxppN_&oLw79jTX;EW=)!&;53i zs7WUx*U#FYc>6QyBP0AvSD7c$U*(jNF39g3CX2(NU(IjL4{b1teci-4^mDru1q?V%fI8(;y23Rgx?h@&q7-iy8ZxW1+Q?@&0Tsn8p*-vN-`=DPFCY zwNE^Y_{f%DfwnoUVe)$2K=Aa!TflJtX!E_>L;z3U ze#d{w%8^|03gE{jI6=;5uM?6R>11f;j}9)VDcSKXFcoVn2=}JrXImR!AJWuEi6ke} zp=7lUOY2ZBU&H}dtQ~{x#x}U)f%AiM`QV%1R4*L+)>33fUjL5O%F%9_oT*_&mzDk5Q~*79i7yVD#382 z(eumld!`rQQV7c}VvgJzCSfpQ3pNu`n>L+o|$AMv;BEH&K$!Txc@t} z{Ll5fkl;)rX`p!Ki;!Ac%+TDLoTkt9*5{$6DQtC7)`B>(*4@Ul2zi51fDb*}*Au#9 z=HSlt)(uSb1`9@A77St+|3=B>j{C)c~}?^6qD@BCoOJedp` zT92=ZJddk7NJ4c`);XikcTuA==%O<>%s9tF1&juD8^NE$qPiGP>Z+SOx6U9j#ggymUckNd2CE>hZF3ORtueLu z-d_k|ZG}}Y;T_sHrOin--?q6zGQhYuKj4OOP+ca~!O-bZ(1^XiF5C#K_E+a{dK(}2 z!qHA;V_rn5gWtA1sqmy9Ev?wTG6c*pM??!}7+kLINKV$_B^khrbpjwzF|Obb8kanv zcMW_e*F@~$>hY+$%XLet9z%XllgE){BbU!Ufy;m{&-QSXr6h9tAq9K;#I2hPQyG4G-VogeAOWxI^ z2$lYicbW8LIw<9^wsUCZMd>);Gz^sY0*3b?vSy>Xv>9f*ghYST(;A%jVJisuGcL#a z_Hran<3Irkdgko(MJM_2B+}JMu&>4uGU-6no9^FvH0PeCaK5o%S1p_BE@NWLZ>lLR zB%xN1PK;K+(qNJ3txttHb~b0)=g>{KakrzC|~=)b;!XtFhD{kZjgpGsGW~oVlvFHG1ASiK=|j-d3S0&!rm9j8H-*AR+#ZbRXSF? z5OzUBo(_;NC;;M$;r}h5Z2u?H-hX+vEW|AAtQ`N1ipNUK#m&k5-{07X|Nka2H}|(& z{6B=ti+6`qPjmRoNCPBB5R>)v(n!Ne%gD&ckr4yqgVI`r zdLKTnJZE)}Yjn=DeXsm4I-hYdxP-vzw7h! z`(???zZ$m#PMicNQ%PWsKqEwlKe0p!p}+=-e!vMolPROYfmV8Vf_S}vc8i*J51R7x zg9s85F7yQ}XJHG2oOAS&0s-!IEM)xy}ZE~H(Eem$Hc(7z3(C> z{eT?kZxx0SMuYK$=n%AQf$RjiFKjhN-h49pJ~;}1*O`mO(b37tiLtO68Vmi1cw`dv z8fu6Dw38SKc^Y62{S0Ik2AsgXR&y}QQwH^tt?ny@5-t&5B7_BlB*I}eFu?5Hob16i zf)9Wsu7Ude!VNlhBpxp?ju!&O59(ut?w=ZYQ)=()4ul31`*em{Ul%n11|b_U4}%&b zd4PiE)7dx=`0wC@5D#B+A)oAl`rkwQfDSMU=ScMvm4SoGHt~Y&m_-IY9Gd{Zy9NZ> z`TH6Bd=EYej&6Qpka*lGYiS`vTn4{%2|_Z%o4-;j0J&}aaqyWZy!{v9J~H{K?X@vd zIPe>ArT?=LL78}!@cudS^a}JI40MNCNxAUri}PJ?@Zb<~HP~Sn1TP63JLIL{B+)kM zqu_S`-NcwE2xpG$!wZzZFYqguo)E_pI=ub)6Z&&3s^bu$<>CIv>X+>cQAsZT678h0onoR^(`DMNEi`P@K-_!0>qcb*w?K__^KFaabU)qmr`KnzXvR6?N41~&Hg?! z8xf*x09eC&mA*}x<GLp zD)_L0px&%Rv4AuP(9iC~b8G0^m(URqM@AU*&l4~&dq!kqq;QkZ{K_QaAic-7GbI_A zeugI^ndfBnFX_Q<5XZwn@&zfpYot@7!&RR_<3za^XcI!a553QQNRVJZ;nplSHf6mV z=Zf{~)@ocGS*O`rl?j@1h7xy8#V?*!syRIU7WI|0e^_)4a%)Qij_)G~5*dJO?{(j= z&?BFg@eK34m5m_2YH?t6t>(1TzS7%h45InDPZdig_k%?%_$3e=UMw#;2Ze7b>lP>= z;rtsAUDxfK=6~ihg%x2mYkz951*kFurYpIQ;tcZEto4w%}w4+i^F{harO#XGje>2$33kH zJndS=m{`-_J^2fMw<{p?=PcsjUS!?8;hI%(q6Rr0k#uyH-)VzBE4Jt&3p3~i$AO?T z5JIi$J7*VT$hb-a5rg~rH9uIFX##s8;X@5e;dnP$1X@pc(T!+Md@xx;- zaZ%Sf)h0$itOdf7x^I|8gm>++5|z|F92mwAXo0=6*!LNqKn&-ew~5oRf9N>Zh?lm# z^edrFT5G;$=vtKUxE51FsoG|)EC!^a!92*Oy>m}6QR)aCEzB?E$eVHHo^NNszxq$aDv(Ip)%cqgG)~< z^qdi*i7jTdTt**V5MvwuyDfV!tr|^VR|MLEBtnhj@&woRpC;OgqT0iG z)-^O5(?f^ox)QOQ(mi}U8o`qn>=3!eS~g6~hn4i9Qdk&FTAD-ICP|zx$~$#XQs*`!7J!> zx?YS9M+U*-je_>E1NNO}2BLy08Gn2ALoZA!z*K!QAOG2)<%~Tt&K`JG_U4^v@$A^D zz<jZ72kq2Zcp0f z?=bXh5UU^2wcf zm%By%V8|Yv1oylEQT@dR*fmytw>x(CYqQmFe<(Z5-#pHdZhAOHI-)HSd7~89%(O5{ z`K}w9cZ#;p=Di8gjygSJS?;zJaJ~Wi^Ckhb>TVm;`rx_^H$>Hp_lcuKvyQMb)@M0) z4)E}8yrcj5q7gyqR_iPv!Zv`{emcnz!xP8LEzGRZTq={)dkLxM%V7xpu>0OCuJF(L zm#CjTfmHQqb`P4b?B1^OTSWp>R3@}{D9^nhKTwDOCy7pzf5!X>{IAFHiPa!8^o2Sa z#u_s>h$6uT=0=a9zJYUrrF#l%+&;P02qRkN;F)KzN3wn{F-J{a=O^GLOuc2tGo{7i z3{MFU-8q+d`PY5#@Mv<{YAjqlsMfRtq)Gu(Zkfjbj|0#x@)>4WT#%y?nsX)}xR`cj zsOTq+3*u~!kH_hI@cg5E%VA=D529_4`j5N`)}zd7XW9cnBFEzM=|r_(i`Zu&iWY5H z%AFc*5yUiHt}X)CYc3b;jvtJ(SfLL|rCK_O@(oEg_I5U0j)nQFZ`q$AAxojIV|C)}nR zGSP)}%}BL;2F)uv9Y={Of$G{1XJ3E))*Uz$f}@%C-MIIT^guaP%ZP%oFzuHftYfxE z#7!A&Kwh7g+k_|Z%HWxE>}SjAgjDtgo`I44h4Vo1xt&WJrwV$zx=IG#5;PRtLt z4(mSh1SxoJ{8q+Z1Eywl9id~nSesrZ(r@ItUZmDZ@C^B)5(47i27LA^I-zPIw?m&0gH&Wj8_OFw8F znNf%8wd_Z?wJgqCPw$ZFU~~*`a)Q~C0_DSe$Ef{_r>^jMuVhd+V+2Z{3;jzRo`tOr zIZ??xk%D5Z&KL`1NMUM6u9ZQn0Dw6^C;LlH=B~F0xAQ#mea7hKstMA}of}+Oe~> zXJ>o{RIWNt+i6S-3|HEOoVd~uEd5Kwx)!Sg1!7D_;sxvm{PtfyN|^~^yU=|(0G zdsc5JuChhj1?uutu;}_Kww*PJasfxc50FoZr)(0lE}bGBt$+UFojt+a9sOeR`VNd8 zvuG7Z&80clox@s6__|~^1dE!5Q?cCc@=H+Y!+8z~3nLb_vGhi6Abwa~GtJ&V2#5yZ z8?pr6}Tcv*pI{2KuDo#hqih#!R^8oz7KzJPpq3CZ|kmJL$=0RpYoK z5wLGeJrxwlMbu)(qLKZ$EQ^n|4dbFHUk#8k z$%P~-_pD*`(A7#4aiDd}eS2TI^l9V;H>~bs6ltd2Deg+u?nO5iRB}x|rLb)_;@?r* zDEU`a0q7mJ0Viuri))WP+;wGb*vqLd(zQ|)4+_x? zx4=OmRTmXBzBg9X>KtHL#Z&^7#lSSztC{B7R9uooq*E87ljnlme7dtM%nGIZJ=#z+ zs1hP6vhwYnga+HT_=3sGNa$h2K1;c2tPR?jCOYFoZ?~ca}@BsDBOr9f~Ra;yB>aQU@mfy-hC2J)bfQSTIrk z2I;Y?>y$u&ESbUS#39viD;%CZ)koVfR8FESp~eFvFKRT;Q$==n>ES8GjAL6FX+1J* ze^Eb6q_j1lXp#+i;nLsNqDXpuZYqv#NvdEe5Wq zIQt57sgE92wAvH?7ul4stT^@$muP)j;};OSkCN4R!SmlLo3&hIf8$`skX%2q!!K&0 zWb;I2V5J4S)Pa~=ABzO?GMi!nmA$gPmSu(Rf>XX&H z@ZW6e3@Nv7KIB@7dSYlkls$285-LwuSS}qxo-vF3n^o-*-m}U4tktj%rTqW>k+^RH zD?3TkrJ3M-C)yTQ#5H1}JUCi&7-43+o>vsESKZ0Cd{E;h8)}Pz`fyh_?=hOT$wcFi z>c$AnGtkhSBY^v@jy*GK(nG$8GSL5GNEJMDus?_|s}sWG_DT3fEj{aE;Hpv8>l~gx z*S!{E#^!Yv3J*W58gpLUGPLqGDgNxp==hoQ17!u8OTea_(z!n~%gzfV1m|_Gf)n*` z+ThQWziX+3rG%mTNl-CZ`_J)chg*JNQ_syPc^;dbQg9-cHOqgk5y2=R-@BgVCZ}OG z9d%8B@?KR-ZhKc7I};n+Q8uPgjpmMBZ>w*^e}TbUKeNdpHeo)oN6gYmoV?rZCl@($ zPvp7wEXYk`T3rnF1)pDL+x;v)ekd6Mw7EN!nTT;WV9xbfox>F^@r&keFi2KO%OIN~ z4($IuQ`E;K%OU$cd;2va*SRaiCL>)4o+1n}O#wGGR{HM<77MTh)0OqP4FgZy6FK2h z>Y2JdI7oz2H$feo*I0nYPIuBDK2*J;OE<6kQlm3O870y$s`!*^`b)BHu{07<+1~O| zG?N7~dQo}nJXt6S`MAu9XBruII~P{Uqnf4XJwz_nT-(-Xz5eMg4eY^#m(+t8GV)y7 zs!Vy$a>U5#J)U0I-NYZOiUD5b!tb|1k{uO2M-I{|M)fqI_Wr0kB09hua=~$fMjbe$ zDlx4R{QVKJs8=qW(I6hkk|!J%wd2io-5*NyV`?vJUQ0}zVoyGoSZ{(&P>Lj4RTnnA z^Gd96TT$-~ww{$qPdlkj$VbX^6GJ((>5@ba1O#R?+luk1+M~S#1_u_x{~}t|yKO$D zWs7C)>~l&!?(~%Jr40Kw1l)H{V-=?M41;}BL`cr6&^4*fj<1e_$%6=q6DXFR1ZP?M zOjC5ytSJ~?!Tc-wLaG|XLstxZF}URmT&CSkDs=u<&o zRi7K}1b6d~W*Edt9^4yZf*OChCEvu5*l(wCYhS zgj$4!g5Cw_9|i|ZNDC++{W>dDW-U;jHE{ZiWNa{O#ST2nk6@jdeurZ>XrnVTL)<4@ z@a$fiodIbl^cn((6b-QOqAl_Qsv6Q0wMc=J33)af zpdKtQCaO`9z|iA9iwN7JPRiw4fgo!2gStBHd^Tf?QZ=12qT;&8$EMX<3N<_Bxf1dI zlJeR}HtyOyKZs0NCfhv0XOR5{y21C<|ao8as8hA zr&B=S1BC6ytv*pzXM-o?K)Y~ez?6#N4Wrl@Ogh;UjwFlRdl1Y>l`@IdH8~x^@lB6b z9F)9z#A!OCOwE@sDw{@JMtE!+$DwV8s1Musi!-M%|LMWiL~a+xSXLeVh>r|o zisN!0nKp$80}%CY;b(_nIzpCwLglcY<2P~{C4-yc*7gPxo7mcm#bQ+FyuyX5>zps2 zKF0^f`2>;BM{`M|H>h_tLeSE> z@qO)xh?>(B&*lW2PaXAtSB|UkGUe!T6)n5DyOM@f&|S^pY`V#)(S&Y-dwNe z`LZ4U8zG~f0Jnj^%-=kRH0~{sTtqIVlA(4XP4{F=p28mtuc}V;)qRJ=GA9wJfU~L{ z=F0CF$xjxuIn5M@f{jPh)VQc%$x^?J>HUuuF*A7WvF*)|yIP1VBQlk_ z8qd4E`rVja!pr_Ho>jJ$Zgt~~t&4}?ilVXlswtx6t?w+FHy^o(>fG%ldJ&hO89B|s z&%60%ea0BXYG>tZTQvPs4xy*eeRT7K2|5;c4m%m()oz!E8{`xV_O9kme zVJDZnZ#XCXqX;VcgFPrem}1d-+OBegC*Xt0*GB|r4Lfe|f{62S_$>-kJ@Z16%|2qz z=#O=82Rdr;DtC8vTTB5nrUMwT!*^~^ZU;dm+V|u>V zzc&rMzRpXA^!^qu%b)A2^{xVc-&6)+FS&dv=x}VX69B78?LDIirdYQ`Tb)Kv$K)yp zqkac;{Cu}d8(~YA7Bbk`^Zr8r{b+FUv9X5!zV>lKQqXJfoxKvdYOc_x0^9u8h2Lzk z?5QxogW26pK#F@L4Uy9y1D;z9^YNN@=yAN)&?o!^`#zB6~|k+jXrYDCSkp z%a92oL=z#T;{XWt=xG08F7ajAB;PHIok+g+N>ev5^*T-Ef!fbm>S1b-zt(pB^_tBh z_Wky10*k5?sRa`rP9UyTR>;oxJ!2Vg$x62)?lKZs0U77E1#u(#NCbNq26Sk#t58Dn zl4&UR-l~81+C3P8TSi5Z?^u(}y+%M?UE3nbrGm@pA&q2cen&s^p_KhA;aaGjnltEe z@=xy5SgG^SCWp4YF6#qQzgFX<&vGf6w4GyM|5 zDbKZ`&{2-bl3o_bSgRIs8A|PHdM<#6C-LZf{j3Gt+Kfh~Zg(Sp`pssr^^FxUD0Q=n6)pU_;xC@1m_QvGoE z_0uXIHe}6)G`{3CAaZR~uW&0sT?Usf%@_PsecVHae!)}8-4ieum`WUwRRWD9-w2&( z_FZ5Q+ZE?=_P-cAr{+wcDAC6G;&hyj?T&5Rwr$(C)3I&awr$&Xrt99Cxl?uLVII#9 zI8~?4UVAMNkx`}@30hR$)RQ#zdzJWQ)SUL-%Q09plj-zHn)7J9z^1WgSlXg4LZ`HUBVB7L z^b1Th&n#z`{?b$f5Uy_Q?73onJ9z!NfaR$-{>b8dj@F+?@hEC7tz*(Y5BKJ?U{@d{ z4Ahp3@URJy3=RL$hE|WK9Lp^X2$q^zPgVva%$lI$atBWEEq>Cib-R5 z3ut+6mt2}~^vFQs9*$MB!tCPS+RFyH!F*@?t{9_3Mh?GVX;~esY9F^Ti-+CiK9nT1 zQ8)R9{4D#owObgt(yYOP^srXZ?Znx_iGAVkYOe04M-utN*F*mCR=S(}3|hAU8>UOQ zX4Od>td*pawN-amaR}y~tGW(Y98KJSqU*^ol zK|LS-HeFYl~_%N>)?@~Um85-pj^>R9BIqmA5Q{&hT zvZb#))|52AZBP<)E| zVgK}}+OMB-qsKBGiDEC;ymgHqL)~=ylrn_R+w@B^L0gWGh1#a)q&YFen5B|KYWA4r z6Tr{caweC0F$!c>QX$q-!OSdxJdF2Nk`mB!($;Y}0Yv3rErS+>eho(s$<7eUvwssC;(bWfXyaHl%k9w8&UXnW3s%clOjX1X1!0t;;60dCLf#hlTxp^H`QbOK(dh zX7>Qm96I8hCX6B4+U^)* z*5C7ReE6sF#?|*=+@ng_lCz}t{uOjUhxMhU^J1Zu+vl`VZKj5J8No2jgdkg0w^+XJ z@y?Np*x=zd|LrGVVEH}1MF0GdC4SQ~myjMTt5VGO(2+g0)}_)-4o3!sl~xoq?bKhN zDq@2AP{K)BdPv*nOM z2QS?G3mPgk^DxE;Ru9t1b%SVL>KJi{#396-Ly|4A6j#MNsUB-zQX|{T?{wS^={WwML_^!{ zOtI$@i5l-2`I`^EK`mAuL3hv;IC4(HGiEoLIqzdinjhs%8TV>@`N0#@iaMmK zp7s!CU^lUXkqOr9s|4bm=a(X=h=YXC^{`~LzInoE9FQS&$BnbJ-7JC;Jw!?deO%!h7LK~jHZ3Uf ze!1GnYnqezP2YYb51OOl(kfMsiDz5L080>2*~@c|zL?Ai@0o(&-J+!ku22%ZM+RG* zlhR)F2_Qw)vc;SZ9RYpW{{4Cn9UoD&A%-EOAe276LC3Bq^{Jnx2vLVHP7# zERa5dR9?dq8_k9Knr8P>s6rVfgVg7gXj{NFrpfM{BvK0d>Fj%&I(GWmV>49!v_Z9< zcMrLL8VdG4U-;}%R)r~c^{<_JFKM1apRzVuP1rEQ$zeoTnlS;nSLqOhnzA^gQss=y zdfba!scqzAy<|A&F3Ay;M-4TcQWXwcfI+ZuK!zIm2XldxZjh~EQc91~ z>A=yc(-A6*%On^06ze04V3mt!%2Pq2?dXY-F+;Q{AzzIf>c=-E#yu+6|IfNG(c%BU zs^ovME-b7}|4Fwn;IlI_GW_T1zq2m%bWHS&|6A6j5nKu79E}Bb9)F8OkX6vN#K{$Y z5=d~em(HmrC1W1@C$qxv^Cx~7QJ<0T(ZhQGzdGBVnoSJNSX}Ivt`Ko6) z$GoTX+j~Y-W`iB0>K&nllABjyLPi9;eSo>Ud-x|&uK&#+Zxi>kYOgMh51=K-CVis~ zK>`60*xpFuAN9;KaqY2`hO(=8OI@@z|J0nn)T`< z(rT%Yw1)D6oF7JY);#3&0Kr4b`1u6|Va(v|0fD;$K+b^zfE)S6Ov66Bg(2gxdJ(UI zg7Lq8sK7%T8IjHipupbW-|zi5yIywzWa=`wezYiOuylTI{D?e=bh|I3Ksa%nhc$Dr zcIv<)({eSuI3aeTg|q-*;7zQ}TzJIP74I-sSXh3b>k3fVr6!*1Ti5oUd|$GF{%-&TJ6rD-Hy@oZ`6SdXz&Y@r-Jt0;&PNOv2mtXd4c6w~cXPnc zgI|g@`kj3%dV%j(9>4?S#Ji{a;LeVpiz`OULtDCWgX!P1u!+|I4OKfV`r_?dFIKX!qyq?IY)@tH0MS zHRFf(k+&M7w7jIaFt_(>Wz?4w6?MhD7!V&HpBM-}X+Hws`-aN{|5Vre z_6NBF-Z2Q2_}l8`JM(*?en$8A?yDs~8}Lt-B&1J`7QpWSFHiF>@|JVc7wVID;wv`p zhd23W`ra4y{l}&7{Ob5QH0MCJ|7QfjA+-JNXQ)-Rn)TiXrg8731L#AyoZ@h1Nja#) z|7WEn25jpl0AzCP>c%k0qfFonUyqx7zVA)8?bDp~yUWZ*4nqjx8vN_45y%bv_3dZG zwMQGi`ei0`rHk~(j{o}aNsnZCFZS;4jwUHNAv6#HBEGNIwLeV`1Q&!*t-wG zAs~D_*qBZP;7tT{Si2x1JKvqsQVgKd$BjoaBuJp-9}$Dkm;86gtq-Sf5u_LU+@AQ} zE*AedUw(d|**jf1Frc7sm~B&s5A-A;psgQ&kQZhBpMaONJzv2+&+9MGciI_vz0p|``z=;}vNLLo;+t_uM(@@$Y2|7R)7NxGuH}YOU|F=x=8$+qA3}{Q z>hGPogW0>^W3~`mZV+if9r;ZK&la_4ZXS`yr>F@!ukfXB%-t2QY-o%<>9W{ z^iv;;Y;%;IPAN~x-rLxy$fOB>aWf(hXJhT2AFV=&e+F;@MJQQqZevRXhWycV!4m(R zfbb||LU}yNH^^zq%@t%NL`m0yQ`(rC$^8LKNhY=&Bu-+R-N9OIA~pQ2#->%3t4H8@OWP9cg-93aGC(swLwxO#vNi7j{~!!%r*OI;BYV( z)HyfZ6N-&w@mLk}BGG=L%wbC@{(Loz`_OCV>jqge5;ISyBxLEu<0Uz}-jFMl0Xg8( zWvWuwqP)#_-ucpMif_REm6cxjajFzX=_-rpBdjd$n-zVc1nqK+lC)XoLRH+Kfo19} z(ELOE+C|9pLf;Grdm6-!F;*49l0RvVdv=Vj#dlS{vOHN6+&_pVHjv>zNhmOsI6pH*2w ztX-n>yJ_3&A4wcIwu4+HDN!ws?(2MXESo9t}_|MSV(D*031f-VLogZWE*+ zQEkJ#JV@p1(CnJNT9=ZTn6-JdZ+bQu6^Z_O-xq8<4-^iNJu%P`gm~rXs7%;vzli72 z=I`<&*9g<`OdGJ|O?PB7FCSWhHi_0-f3XFDL-<@yT@E)@Gii59Ci4V~l+1oYHrTv?uRvr*+9H05{L zEVw86b7`jwN?e04;5UQyXnlY0NRF3X6A1|?3PkT?=<9A90et6f)bPT6;iz5cynmHt zvO5WClg9jJzn{>H8;Gc-E;kHlMD*4(Z)g2TA3BI*indP(_c>C_r=J7DCo-`|(aP>f zFqrDX0tzo?=&PUn-Iv$rWP5zI_ujevBHS7jWqj5aUJq_-E#fP^TzOV+5+dq&HSpEn zoT5q~vVAfX`q17H4RTnf9QAk4i69r7g??`(UK1mHN43~gO_eo`7FE*QGBOf4q zTm+*!6+}hHAuNWOh=7+)aiq6g#x>6-S$=6wQm>KO#NsI|vJ`(;T1I-}F&156?GmLj zpIM!znlf#uc1hhOU2#xuZZ@}n6sI6|5Vvu5WUkC5PR1s=`_xKI_le#c9v^B2Xz?U@ zJ);8og1Q!@h9XGhj)Mcge-IujwDhj2%G|=0( zde7_t`jzN7(H4*P=pmHZ?;P{6*^X<{EE`7v6c0OL1PX&@egaaYyfbMNlB3%10bMxb zopt3Yh^Gt9uN+W7m`(!~x#bI%S%MX(TRS_WRiIvu0)R{qL2v`Z0FtKdLB8F03i<1A zwM5U7vGA`;LWv(EdZ}%#ubGm~URAW}<^CY?x$QI@eDcWKzDCKyb5Aa{_j=D@55rnt zi8dkA(lec;U+q6?>5#^Ast{fwoWBA8VBy4z*WXZ*LmolH(F{a}m%=$>QpiM1j4=9s zcA1P`?NLeQnU{RnRAC-WbB4w_fqOF3o0C0xiI#LU_n1d*DTZTVr`dKOLpN(KryH&i z-DzJ$DxL0%@K>*Y(H&5$n0?)H$pdD^8Tk%DiO3-~QMvpIb`tgLJdYgJcR2ev0^wdk z&FyYL-ZAc@P{WVD^WEJ1pL_oPspARpxFoN6P>X)~kv5|$H#F+-@9%@z&0jNfQm$}* zCPck;9lPPYfA>fz`ES*+m8OIi(HA2m-jav92!=(|$$JHImPIUWB6UqidKo|d)w}<$ z*0!YBtOP}QpSq2HH(imzWnvWpoY~FebA~Y7L=ZqbB{H4^x|%K-8qo(RJyHjCES@KK z^R9AiopHS*--xekV8j4i91`w0O1p+5Z>MlM4zM^`vlT^CPSPn(7WMhonU#NlV&%*P zU4|dYYFgaKld^P8V6XS*BX%(MT7sh47Y&u6zr~`B;Ch}_o9Ar^S(4m3-AaENE&m|w zx#g=^I9ihsB4tc>b{`7bU|N6Yg(rGN3Or=!*THEk0xG#HG%|)SBSbT+#9)JX0VZwU zcN91?5Kv4cP`Zylvsmk#e995tS|pprHJGDq#EdaW*5#YvDOW)Yd@d<84qPeo=DG5n zhyw0irW&r#WBkgdleidC`CaL

mRmlOnv3tH?=*nuBaoIgmTSH}>@k7Bm(d=g>$# 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�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 YJ0abj9xeq45&%KL_^hn*>I(S(1tUZxh5!Hn literal 0 HcmV?d00001 From 8a30c8fa8c9ddaf6d352231df21a1ff725177e2b Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Wed, 10 Nov 2021 23:32:10 +0100 Subject: [PATCH 26/29] [bf] corrected earclipping of triangle --- tofu/geom/_GG.pyx | 14 +++ tofu/geom/_basic_geom_tools.pyx | 25 +++- tofu/geom/_sampling_tools.pyx | 14 ++- tofu/geom/_vignetting_tools.pyx | 6 + tofu/geom/openmp_enabled.py | 2 +- tofu/tests/tests01_geom/test_04_sampling.py | 122 ++++++++++++-------- 6 files changed, 126 insertions(+), 57 deletions(-) diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index 6020147a8..b9add144f 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -5125,6 +5125,7 @@ def compute_solid_angle_poly_map(list poly_coords, cdef np.ndarray[double, ndim=2] poly_lnorms_tot cdef np.ndarray[double, ndim=2] cross_GBGC cdef double[:, ::1] temp + print("begining.....................................") # # == Testing inputs ======================================================== if test: @@ -5150,11 +5151,15 @@ def compute_solid_angle_poly_map(list poly_coords, msg = "ves_type must be a str in ['Tor','Lin']!" assert ves_type.lower() in ['tor', 'lin'], msg # ... + print("after tests.................................") # .. Formatting polygon coordinates ........................................ npoly = len(poly_coords) for ii in range(npoly): + print(poly_coords[ii]) poly_coords[ii] = format_poly(poly_coords[ii], Clock=False, close=False, Test=True) + print(poly_coords[ii]) + print("......................... after format") # .. Dividing polys in triangles ........................................... ltri = malloc(sizeof(long*) * npoly) # re writting_polygons coordinates to C type: @@ -5169,6 +5174,7 @@ def compute_solid_angle_poly_map(list poly_coords, ltri, num_threads ) + print("...............after triangulate") # cpumputing total number of triangles tot_num_tri = np.sum(poly_lnvert) - 2 * npoly # .. Getting centroids of triangles ....................................... @@ -5188,6 +5194,8 @@ def compute_solid_angle_poly_map(list poly_coords, vec_GC, ) + print("............ got here 1") + poly_lnorms_tot = np.repeat(poly_lnorms, np.asarray(poly_lnvert) - 2, axis = 0) @@ -5227,6 +5235,7 @@ def compute_solid_angle_poly_map(list poly_coords, ncells_z) # .. Preparing for phi: get the limits if any and make sure to replace them # .. in the proper quadrants ............................................... + print("got here 2...........................") if DPhi is None: min_phi = -c_pi max_phi = c_pi @@ -5307,6 +5316,7 @@ def compute_solid_angle_poly_map(list poly_coords, for jj in range(loc_nc_rphi - nphi0, sz_phi[0]): indi_mv[0, jj] = jj - (loc_nc_rphi - nphi0) npts_disc += sz_z * sz_phi[0] + print("Got heeeeeeere 3...........................") # ... doing the others ..................................................... npts_disc += _st.sa_disc_phi(sz_r, sz_z, ncells_rphi, phistep, disc_r, disc_r0, step_rphi, @@ -5314,6 +5324,7 @@ def compute_solid_angle_poly_map(list poly_coords, ncells_r0[0], ncells_z[0], &max_sz_phi[0], min_phi, max_phi, sz_phi, indi_mv, margin, num_threads) + print("Got heeeeeeere 4...........................") # ... vignetting ........................................................... is_in_vignette = np.ones((sz_r, sz_z), dtype=int) # by default yes if limit_vpoly is not None: @@ -5329,6 +5340,7 @@ def compute_solid_angle_poly_map(list poly_coords, poly_mv, npts_vpoly, disc_r, disc_z, is_in_vignette) + print("Got heeeeeeere 5...........................") # .. preparing for actual discretization ................................... ind_rz2pol = np.empty((sz_r, sz_z), dtype=int) npts_pol = _st.sa_get_index_arrays(ind_rz2pol, @@ -5349,6 +5361,7 @@ def compute_solid_angle_poly_map(list poly_coords, # initializing utilitary arrays num_threads = _ompt.get_effective_num_threads(num_threads) lstruct_lims_np = flatten_lstruct_lims(lstruct_lims) + print("Got heeeeeeere 6...........................") # .............. _st.sa_tri_assemble( block, @@ -5396,6 +5409,7 @@ def compute_solid_angle_poly_map(list poly_coords, ind_mv, num_threads ) + print("Got heeeeeeere 7...........................") # ... freeing up memory .................................................... free(lindex_z) free(disc_r) diff --git a/tofu/geom/_basic_geom_tools.pyx b/tofu/geom/_basic_geom_tools.pyx index ea187d236..17fe5719f 100644 --- a/tofu/geom/_basic_geom_tools.pyx +++ b/tofu/geom/_basic_geom_tools.pyx @@ -379,16 +379,31 @@ cdef inline void find_centroids_GB_GC_ltri(const double** poly_coords, cdef int ipol cdef int itri cdef int iglob - cdef double[3] xtri - cdef double[3] ytri - cdef double[3] ztri + cdef double* xtri + cdef double* ytri + cdef double* ztri with nogil, parallel(num_threads=num_threads): + xtri = malloc(3*sizeof(double)) + ytri = malloc(3*sizeof(double)) + ztri = malloc(3*sizeof(double)) for ipol in prange(npoly): + with gil: + print(f"{ipol} / ({npoly})") for itri in range(lnvert[ipol] - 2): + with gil: + print(f"{itri}/({lnvert[ipol]}-2)") + print(ltri == NULL) + print(ltri[0] == NULL) wim1 = ltri[ipol][itri*3] wi = ltri[ipol][itri*3+1] wip1 = ltri[ipol][itri*3+2] + with gil: + print("xxxxxxxxxxxxx 1", wim1, wi, wip1) + print(lnvert == NULL) + print(lnvert[ipol]) + print(poly_coords == NULL) + print(poly_coords[0] == NULL) xtri[0] = poly_coords[ipol][0 * lnvert[ipol] + wim1] ytri[0] = poly_coords[ipol][1 * lnvert[ipol] + wim1] ztri[0] = poly_coords[ipol][2 * lnvert[ipol] + wim1] @@ -399,8 +414,12 @@ cdef inline void find_centroids_GB_GC_ltri(const double** poly_coords, ytri[2] = poly_coords[ipol][1 * lnvert[ipol] + wip1] ztri[2] = poly_coords[ipol][2 * lnvert[ipol] + wip1] iglob = ipol + itri * npoly + with gil: + print("...........before find centroid") find_centroid_tri(xtri, ytri, ztri, centroid[:, iglob]) + with gil: + print("...........after find centroid") vec_GB[0, iglob] = xtri[1] - centroid[0, iglob] vec_GB[1, iglob] = ytri[1] - centroid[1, iglob] vec_GB[2, iglob] = ztri[1] - centroid[2, iglob] diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index 3437faf67..9740ce76d 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -11,6 +11,7 @@ from libc.math cimport ceil as c_ceil, fabs as c_abs from libc.math cimport floor as c_floor, round as c_round from libc.math cimport sqrt as c_sqrt from libc.math cimport pi as c_pi, cos as c_cos, sin as c_sin +from libc.math cimport atan2 as c_atan2 from libc.math cimport isnan as c_isnan from libc.math cimport NAN as C_NAN from libc.math cimport log2 as c_log2 @@ -18,6 +19,7 @@ from libc.stdlib cimport malloc, free, realloc from cython.parallel import prange from cython.parallel cimport parallel from cpython.array cimport array, clone +from libc.stdio cimport printf # for utility functions: import numpy as np cimport numpy as cnp @@ -3069,7 +3071,9 @@ cdef inline void tri_asmbl_unblock_approx( free(side_of_poly) return - +#TODO : checker que ce qui va dans le arctan() est forcement positif ! +# TODO : numerateur : prend la valeur absolue +# denumerateur : ajouter pi si negatif cdef inline double comp_sa_tri_appx( int itri, long* ltri, @@ -3106,4 +3110,10 @@ cdef inline double comp_sa_tri_appx( + dot_Gc * (normA - normC) ) - return numerator / denumerator + if denumerator < 0. : + denumerator += c_pi + + if denumerator < 0. : + printf(">>>>>> denumerator is still negative: %f", denumerator) + + return c_atan2(c_abs(numerator), denumerator) diff --git a/tofu/geom/_vignetting_tools.pyx b/tofu/geom/_vignetting_tools.pyx index ed9dccf85..5b73b10b1 100644 --- a/tofu/geom/_vignetting_tools.pyx +++ b/tofu/geom/_vignetting_tools.pyx @@ -211,6 +211,12 @@ cdef inline void earclipping_poly(double* vignett, cdef int wi, wim1, wip1 cdef int iear cdef vecpp[int] working_index + # .. Checking if poly is a triangle ....................................... + if nvert == 3: + ltri[0] = 0 + ltri[1] = 1 + ltri[2] = 2 + return # .. First computing the edges coodinates ................................. # .. and checking if the angles defined by the edges are reflex or not..... # initialization of working index tab: diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index 90a825f93..1a25442fe 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-11-10 15:17:19 +# Autogenerated by Tofu's setup.py on 2021-11-10 22:31:38 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. diff --git a/tofu/tests/tests01_geom/test_04_sampling.py b/tofu/tests/tests01_geom/test_04_sampling.py index 7a5dcb1ec..a9f15c4b3 100644 --- a/tofu/tests/tests01_geom/test_04_sampling.py +++ b/tofu/tests/tests01_geom/test_04_sampling.py @@ -387,69 +387,89 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): # coordonnées en x,y,z: # Tester : enlever des points au rectangle et puis un rectangle avec plus de points poly_coords = [ - np.array([ - [2.7, 0, -0.4], - [2.75, 0, -0.4], - [2.75, 0, -0.1], - [2.70, 0, -0.1], - [2.60, 0, -0.1], - [2.50, 0, -0.1], - [2.50, 0, -0.4], - ]).T, # 1st polygon - np.array([ - [2.50, 0, -0.1], - [2.60, 0, -0.1], - [2.70, 0, -0.1], - [2.75, 0, -0.1], - [2.75, 0, -0.4], - [2.7, 0, -0.4], - [2.50, 0, -0.4], - ]).T, # 2nd polygon - np.array([ - [2.60, 0, -0.1], - [2.70, 0, -0.1], - [2.75, 0, -0.1], - [2.75, 0, -0.4], - [2.7, 0, -0.4], - [2.50, 0, -0.4], - [2.50, 0, -0.1], - ]).T, # 3rd polygon + # np.array([ + # [2.7, 0, -0.4], + # [2.75, 0, -0.4], + # [2.75, 0, -0.1], + # [2.70, 0, -0.1], + # [2.60, 0, -0.1], + # [2.50, 0, -0.1], + # [2.50, 0, -0.4], + # ]).T, # 1st polygon + # np.array([ + # [2.50, 0, -0.1], + # [2.50, 0, -0.4], + # [2.7, 0, -0.4], + # [2.75, 0, -0.4], + # [2.75, 0, -0.1], + # [2.70, 0, -0.1], + # [2.60, 0, -0.1], + # ]).T, # 2nd polygon + # np.array([ + # [2.60, 0, -0.1], + # [2.50, 0, -0.1], + # [2.50, 0, -0.4], + # [2.7, 0, -0.4], + # [2.75, 0, -0.4], + # [2.75, 0, -0.1], + # [2.70, 0, -0.1], + # ]).T, # 3rd polygon np.array([ [-2.5, 0, -0.35], - [2.70, 0, -0.15], - [2.68, 0, -0.3], [2.65, 0, -0.4], + [2.70, 0, -0.15], ]).T, # 4th polygon - np.array([ - [2.75, 0, -0.1], - [2.65, 0, -0.35], - [2.55, 0, -0.35], - [2.50, 0, -0.1], - [2.60, 0, -0.1], - [2.70, 0, -0.1], - ]).T, # 5th polygon - np.array([ - [2.2, 0., 0.25], - [2.2, 0., 0.50], - [2.5, 0., 0.50], - [2.7, 0., 0.50], - [3.0, 0., 0.50], - [3.0, 0., 0.25], - [2.6, 0., 0.25], - ]).T, # 6th polygon + # np.array([ + # [2.75, 0, -0.1], + # [2.70, 0, -0.1], + # [2.60, 0, -0.1], + # [2.50, 0, -0.1], + # [2.55, 0, -0.35], + # [2.65, 0, -0.35], + # ]).T, # 5th polygon + # np.array([ + # [2.2, 0., 0.25], + # [2.6, 0., 0.25], + # [3.0, 0., 0.25], + # [3.0, 0., 0.50], + # [2.7, 0., 0.50], + # [2.5, 0., 0.50], + # [2.2, 0., 0.50], + # ]).T, # 6th polygon ] poly_coords = [np.ascontiguousarray(poly) for poly in poly_coords] poly_lnorms = np.array([ + # [0, 1., 0], + # [0, 1., 0], + # [0, 1., 0], [0, 1., 0], - [0, 1., 0], - [0, 1., 0], - [0, 1., 0], - [0, 1., 0], - [0, 1., 0], + # [0, 1., 0], + # [0, 1., 0], ]) poly_lnvert = np.array([poly.shape[1] for poly in poly_coords]) limits_r, limits_z = compute_min_max_r_and_z(ves_poly) + if debug > 0: + for pp in range(len(poly_coords)): + plt.clf() + fig = plt.figure() + ax = plt.subplot(111) + poly = poly_coords[pp] + poly = np.concatenate((poly, poly[:, 0].reshape(-1, 1)), axis=1) + xpoly = np.sqrt(poly[0]**2 + poly[1]**2) + zpoly = poly[2] + ax.plot( + xpoly, zpoly, + "r-", marker='o', + linewidth=2, + ) + for xzi, (x,z) in enumerate(zip(xpoly, zpoly)): + #ax.annotate(f"({x},{z})", (x, z)) + ax.annotate(f"{xzi}", (x,z)) + ax.plot() + plt.savefig("poly" + str(pp)) + print("...saved!\n") + lblock = [False, True] lstep_rz = [ 0.005, From fdf8344f91da0d1d5053ac689be77c25617b5a7a Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Mon, 15 Nov 2021 13:48:00 +0100 Subject: [PATCH 27/29] [notes upgrade] corrected calculus errors in SA_tetra tex/pdf --- Notes_Upgrades/SA_tetra/LM_version.pdf | Bin 124735 -> 125887 bytes Notes_Upgrades/SA_tetra/LM_version.tex | 15 ++++++++------- tofu/geom/openmp_enabled.py | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Notes_Upgrades/SA_tetra/LM_version.pdf b/Notes_Upgrades/SA_tetra/LM_version.pdf index 79b1a5ba83fe0d884264cb46cc3021ffe87c90b4..563a57360ce4611069d2409e669539333f33c6ef 100644 GIT binary patch delta 25507 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 delta 24309 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 diff --git a/Notes_Upgrades/SA_tetra/LM_version.tex b/Notes_Upgrades/SA_tetra/LM_version.tex index bb31437f5..52d3d080d 100644 --- a/Notes_Upgrades/SA_tetra/LM_version.tex +++ b/Notes_Upgrades/SA_tetra/LM_version.tex @@ -113,8 +113,8 @@ \subsection{Denominator} \begin{align} \left({A}\cdot {B}\right)\mathbf{C} - =& (\mathbf{G}^2 + G \cdot b + (-b - c) \cdot G + (-b - c) \cdot b ) c \nonumber \\ - =& (\mathbf{G}^2 - G \cdot c - c \cdot b)\mathbf{C} + =& (\mathbf{G}^2 + G \cdot b + (-b - c) \cdot G + (-b - c) \cdot b ) \mathbf{C} \nonumber \\ + =& (\mathbf{G}^2 - G \cdot c - c \cdot b -\mathbf{b}^2)\mathbf{C} \end{align} @@ -132,8 +132,8 @@ \subsection{Denominator} \begin{align} \left({A}\cdot {C}\right)\mathbf{B} - =& (\mathbf{G}^2 + G \cdot c + (-b - c) \cdot G + (-b - c) \cdot c ) b \nonumber \\ - =& (\mathbf{G}^2 - G \cdot c - c \cdot b)\mathbf{B} + =& (\mathbf{G}^2 + G \cdot c + (-b - c) \cdot G + (-b - c) \cdot c ) \mathbf{B} \nonumber \\ + =& (\mathbf{G}^2 - G \cdot b - c \cdot b - \mathbf{c}^2)\mathbf{B} \end{align} @@ -158,7 +158,7 @@ \subsection{Denominator} \begin{align} -(\mathbf{A}\mathbf{B}\mathbf{C}) &= ||G-b-c||\,||G+b||\,||G+c|| +(\mathbf{A}\mathbf{B}\mathbf{C}) &= ||G-b-c||^2\,||G+b||^2\,||G+c||^2 \end{align} and @@ -166,12 +166,13 @@ \subsection{Denominator} \begin{align} \left({A}\cdot {B}\right)\mathbf{C} - + \left({A}\cdot {C}\right)\mathbf{B} - + \left({B}\cdot {C}\right)\mathbf{A} + +& \left({A}\cdot {C}\right)\mathbf{B} + + \left({B}\cdot {C}\right)\mathbf{A} \\ \nonumber =& \mathbf{G}^2 (\mathbf{A} + \mathbf{B} + \mathbf{C}) + c \cdot b (\mathbf{A} - \mathbf{B} - \mathbf{C}) + G \cdot b (\mathbf{A} - \mathbf{B}) + G \cdot c (\mathbf{A} - \mathbf{C}) + - ||b||^2\, \mathbf{C} - ||c||^2\, \mathbf{B} \end{align} diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index 1a25442fe..2ce70d4c1 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-11-10 22:31:38 +# Autogenerated by Tofu's setup.py on 2021-11-15 11:52:06 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. From 87ac8dd7e0d198c8d5e0c8ff2958f8e5a432a15b Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Tue, 30 Nov 2021 00:24:54 +0100 Subject: [PATCH 28/29] found error in test that was making tests fail --- tofu/geom/_GG.pyx | 1 + tofu/geom/_sampling_tools.pyx | 10 +++++++--- tofu/geom/openmp_enabled.py | 2 +- tofu/tests/tests01_geom/test_04_sampling.py | 9 +++++++-- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/tofu/geom/_GG.pyx b/tofu/geom/_GG.pyx index b9add144f..1304f4eab 100644 --- a/tofu/geom/_GG.pyx +++ b/tofu/geom/_GG.pyx @@ -5195,6 +5195,7 @@ def compute_solid_angle_poly_map(list poly_coords, ) print("............ got here 1") + print(centroids) poly_lnorms_tot = np.repeat(poly_lnorms, np.asarray(poly_lnvert) - 2, diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index b0b3806d6..b706162b1 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -2929,6 +2929,11 @@ cdef inline void tri_asmbl_block_approx( &dist_opts[0]) for itri in range(lnvert_poly[ipoly] - 2): iglob = ipoly + itri * npoly + if rr < 2 and zz < 2 and jj < 2: + printf("r, z, p = %f, %f, %f\n", loc_r, loc_z, loc_phi) + printf("x, y, z = %f, %f, %f\n", loc_x, loc_y, loc_z) + printf("Poly %d at the %d itri, iglob = %d => is vis = %d\n", + ipoly, itri, iglob, is_vis[iglob]) if is_vis[iglob]: sa_map[ind_pol, ipoly] += comp_sa_tri_appx( @@ -2946,6 +2951,8 @@ cdef inline void tri_asmbl_block_approx( free(dot_Gc) free(norm_G2) free(is_vis) + free(numerator) + free(side_of_poly) return cdef inline void tri_asmbl_unblock_approx( @@ -3065,9 +3072,6 @@ cdef inline void tri_asmbl_unblock_approx( free(side_of_poly) return -#TODO : checker que ce qui va dans le arctan() est forcement positif ! -# TODO : numerateur : prend la valeur absolue -# denumerateur : ajouter pi si negatif cdef inline double comp_sa_tri_appx( int itri, long* ltri, diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index 5efa3b03f..dec95ac49 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-11-29 16:00:07 +# Autogenerated by Tofu's setup.py on 2021-11-29 23:24:44 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. diff --git a/tofu/tests/tests01_geom/test_04_sampling.py b/tofu/tests/tests01_geom/test_04_sampling.py index a9f15c4b3..a4b62ee6d 100644 --- a/tofu/tests/tests01_geom/test_04_sampling.py +++ b/tofu/tests/tests01_geom/test_04_sampling.py @@ -415,7 +415,7 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): # [2.70, 0, -0.1], # ]).T, # 3rd polygon np.array([ - [-2.5, 0, -0.35], + [2.5, 0, -0.35], [2.65, 0, -0.4], [2.70, 0, -0.15], ]).T, # 4th polygon @@ -437,7 +437,12 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): # [2.2, 0., 0.50], # ]).T, # 6th polygon ] + # print(poly_coords) + # poly_coords = [GG.coord_shift(np.ascontiguousarray(poly), + # in_format="(r,z,phi)", + # out_format="(x,y,z)") for poly in poly_coords] poly_coords = [np.ascontiguousarray(poly) for poly in poly_coords] + # print(poly_coords) poly_lnorms = np.array([ # [0, 1., 0], # [0, 1., 0], @@ -541,7 +546,7 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): linewidth=2, ) print("so far so good") - for xzi, (x,z) in enumerate(zip(xpoly, zpoly)): + for xzi, (x, z) in enumerate(zip(xpoly, zpoly)): #ax.annotate(f"({x},{z})", (x, z)) ax.annotate(f"{xzi}", (x,z)) ax.plot() From 7a76929f8d7ada008e0635e78488bda444ead1fa Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Tue, 21 Dec 2021 22:34:49 +0100 Subject: [PATCH 29/29] fixed a bug --- setup.py | 2 +- tofu/geom/_sampling_tools.pyx | 4 ++-- tofu/geom/openmp_enabled.py | 2 +- tofu/tests/tests01_geom/test_04_sampling.py | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/setup.py b/setup.py index 6482f3017..97370b51d 100644 --- a/setup.py +++ b/setup.py @@ -175,7 +175,7 @@ def get_version_tofu(path=_HERE): # Compiling files openmp_installed, openmp_flag = is_openmp_installed() -extra_compile_args = ["-O3", "-Wall", "-fno-wrapv"] + openmp_flag +extra_compile_args = ["-O3", "-Wall", "-fno-wrapv", "-ffast-math"] + openmp_flag extra_link_args = [] + openmp_flag extensions = [ diff --git a/tofu/geom/_sampling_tools.pyx b/tofu/geom/_sampling_tools.pyx index b706162b1..2c35d382c 100644 --- a/tofu/geom/_sampling_tools.pyx +++ b/tofu/geom/_sampling_tools.pyx @@ -1,8 +1,8 @@ # cython: language_level=3 -# cython: boundscheck=False +# cython: boundscheck=True # cython: wraparound=False # cython: cdivision=True -# cython: initializedcheck=False +# cython: initializedcheck=True # ################################################################################ # Utility functions for sampling and discretizating diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index dec95ac49..37fa7dbe3 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-11-29 23:24:44 +# Autogenerated by Tofu's setup.py on 2021-12-09 14:54:42 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. diff --git a/tofu/tests/tests01_geom/test_04_sampling.py b/tofu/tests/tests01_geom/test_04_sampling.py index a4b62ee6d..d217e0de1 100644 --- a/tofu/tests/tests01_geom/test_04_sampling.py +++ b/tofu/tests/tests01_geom/test_04_sampling.py @@ -444,10 +444,10 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): poly_coords = [np.ascontiguousarray(poly) for poly in poly_coords] # print(poly_coords) poly_lnorms = np.array([ + [0, 1., 0], # [0, 1., 0], # [0, 1., 0], # [0, 1., 0], - [0, 1., 0], # [0, 1., 0], # [0, 1., 0], ]) @@ -461,7 +461,7 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): ax = plt.subplot(111) poly = poly_coords[pp] poly = np.concatenate((poly, poly[:, 0].reshape(-1, 1)), axis=1) - xpoly = np.sqrt(poly[0]**2 + poly[1]**2) + xpoly = poly[0] zpoly = poly[2] ax.plot( xpoly, zpoly, @@ -475,7 +475,7 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): plt.savefig("poly" + str(pp)) print("...saved!\n") - lblock = [False, True] + lblock = [False] lstep_rz = [ 0.005, 0.01, @@ -537,7 +537,7 @@ def test06_sa_integ_poly_map(ves_poly=VPoly, debug=3): vmax=sa_map_cy[:, pp].max()) poly = poly_coords[pp] poly = np.concatenate((poly, poly[:, 0].reshape(-1, 1)), axis=1) - xpoly = np.sqrt(poly[0]**2 + poly[1]**2) + xpoly = poly[0] print(f"{xpoly=}") zpoly = poly[2] ax.plot(

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%0AiDKX0HCytTk8uG(2dnKH1nS#hXd=){x} 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 diff --git a/Notes_Upgrades/SA_tetra/SA_tetra.tex b/Notes_Upgrades/SA_tetra/SA_tetra.tex index f30a52f16..98a1c66af 100644 --- a/Notes_Upgrades/SA_tetra/SA_tetra.tex +++ b/Notes_Upgrades/SA_tetra/SA_tetra.tex @@ -1,4 +1,5 @@ \documentclass[10pt,a4paper]{article} +\usepackage[margin=0.5in]{geometry} \usepackage[utf8]{inputenc} \usepackage[english]{babel} \usepackage{amsmath} @@ -21,12 +22,15 @@ \section{Notations} Let \begin{itemize} - \item $\vec{a}$ be the vector $\vec{OA}$ - \item $\vec{b}$ be the vector $\vec{OB}$ - \item $\vec{c}$ be the vector $\vec{OC}$ - \item $a$ be the magnitude of the vector $\vec{OA}$ - \item $b$ be the magnitude of the vector $\vec{OB}$ - \item $c$ be the magnitude of the vector $\vec{OC}$ + \item $A$ be the vector $\vec{OA}$ + \item $B$ be the vector $\vec{OB}$ + \item $C$ be the vector $\vec{OC}$ + \item $a$ be the vector $\vec{GA}$ + \item $b$ be the vector $\vec{GB}$ + \item $c$ be the vector $c$ + \item $\mathbf{A}$ be the magnitude of the vector $\vec{OA}$ + \item $\mathbf{B}$ be the magnitude of the vector $\vec{OB}$ + \item $\mathbf{C}$ be the magnitude of the vector $\vec{OC}$ \end{itemize} \section{Computation} @@ -35,134 +39,147 @@ \section{Computation} $$ {\displaystyle \tan \left({\frac {1}{2}}\Omega \right) - = {\frac {\left|{\vec {a}}\ {\vec {b}}\ {\vec {c}}\right|} - {abc + \left({\vec {a}}\cdot {\vec {b}}\right)c - + \left({\vec {a}}\cdot {\vec {c}}\right)b - + \left({\vec {b}}\cdot {\vec {c}}\right)a}}} + = {\frac {\left|{A}\ {B}\ {C}\right|} + {\mathbf{A}\mathbf{B}\mathbf{C} + \left({A}\cdot {B}\right)\mathbf{C} + + \left({A}\cdot {C}\right)\mathbf{B} + + \left({B}\cdot {C}\right)\mathbf{A}}}} $$ -where $ \left|{\vec {a}}\ {\vec {b}}\ {\vec {c}}\right|={\vec {a}}\cdot ({\vec {b}}\times {\vec {c}}) $ +where $ \left|{A}\ {B}\ {C}\right|={A}\cdot ({B}\times {C}) $ \subsection{Numerator} -Given that $\vec{a} = \vec{OA} = \vec{OG} + \vec{GA}$ (and resp. +Given that $A = \vec{OA} = G + a$ (and resp. with $B$ and $C$), we get \begin{align*} -\left|{\vec {a}}\ {\vec {b}}\ {\vec {c}}\right| - & = {\vec {a}} \cdot ({\vec {b}}\times {\vec {c}}) \\ - & = {\vec {a}} \cdot ({(\vec{OG} + \vec{GB})} \times {(\vec{OG} + \vec{GC})}) \\ - & = {(\vec{OG} + \vec{GA})} \cdot (\cancel{\vec{OG} \times \vec{OG}} - + \vec{OG} \times \vec{GC} - + \vec{GB} \times \vec{OG} - + \vec{GB} \times \vec{GC}) \\ - & = \cancel{\vec{OG} \cdot (\vec{OG} \times \vec{GC})} - + \cancel{\vec{OG} \cdot (\vec{GB} \times \vec{OG})}\\ - & + \vec{OG} \cdot (\vec{GB} \times \vec{GC}) - + \vec{GA} \cdot (\vec{OG} \times \vec{GC}) - + \vec{GA} \cdot (\vec{GB} \times \vec{OG}) - + \cancel{\vec{GA} \cdot (\vec{GB} \times \vec{GC})} \\ - & = \vec{OG} \cdot (\vec{GB} \times \vec{GC}) - + \vec{OG} \cdot (\vec{GC} \times \vec{GA}) - + \vec{OG} \cdot (\vec{GA} \times \vec{GB}) \\ - & = \vec{OG} \cdot (\vec{GB} \times \vec{GC}) - + \vec{OG} \cdot (\vec{GC} \times \vec{GA}) - + \vec{OG} \cdot (\vec{GA} \times \vec{GB})\\ - & = \vec{OG} \cdot \left(\vec{GB} \times \vec{GC} - +\vec{GC} \times \vec{GA} - + \vec{GA} \times \vec{GB} \right) +\left|{A}\ {B}\ {C}\right| + & = {A} \cdot ({B}\times {C}) \\ + & = {A} \cdot ({(G + b)} \times {(G + c)}) \\ + & = {(G + a)} \cdot (\cancel{G \times G} + + G \times c + + b \times G + + b \times c) \\ + & = \cancel{G \cdot (G \times c)} + + \cancel{G \cdot (b \times G)}\\ + & + G \cdot (b \times c) + + a \cdot (G \times c) + + a \cdot (b \times G) + + \cancel{a \cdot (b \times c)} \\ + & = G \cdot (b \times c) + + G \cdot (c \times a) + + G \cdot (a \times b) \\ + & = G \cdot \left(b \times c + +c \times a + + a \times b \right) \end{align*} since $G$ is the centroid of $ABC$, \begin{equation} -\vec{GA} + \vec{GB} + \vec{GC}= 0 +a + b + c= 0 \label{eq1} \end{equation}. We obtain \begin{align} -\left|{\vec {a}}\ {\vec {b}}\ {\vec {c}}\right| -& = \vec{OG} \cdot \left(\vec{GB} \times \vec{GC} - +\vec{GC} \times \vec{GA} - + \vec{GA} \times \vec{GB} \right) \nonumber \\ -& = \vec{OG} \cdot \left(\vec{GB} \times \vec{GC} - +\vec{GC} \times (-\vec{GB} - \vec{GC}) - + (-\vec{GB} - \vec{GC}) \times \vec{GB} \right) \nonumber \\ -& = \vec{OG} \cdot \left(\vec{GB} \times \vec{GC} - +\vec{GC} \times (-\vec{GB}) + \cancel{\vec{GC} \times (- \vec{GC})} - + \cancel{(-\vec{GB}) \times \vec{GB}} + (- \vec{GC}) \times \vec{GB} \right) \nonumber \\ -& = \vec{OG} \cdot \left(3 \vec{GB} \times \vec{GC} \right) \nonumber \\ -& = 3 \vec{OG} \cdot \left( \vec{GB} \times \vec{GC} \right) +\left|{A}\ {B}\ {C}\right| +& = G \cdot \left(b \times c + +c \times a + + a \times b \right) \nonumber \\ +& = G \cdot \left(b \times c + +c \times (-b - c) + + (-b - c) \times b \right) \nonumber \\ +& = G \cdot \left(b \times c + +c \times (-b) + \cancel{c \times (- c)} + + \cancel{(-b) \times b} + (- c) \times b \right) \nonumber \\ +& = G \cdot \left(3 b \times c \right) \nonumber \\ +& = 3 G \cdot \left( b \times c \right) \end{align} \subsection{Denominator} -First let's see the term in $c$ +First let's see the term in $\mathbf{C}$ \begin{align*} - \left({\vec {a}}\cdot {\vec {b}}\right)c - =& \left( \vec{OG} + \vec{GA} \right) \cdot \left( \vec{OG} + \vec{GB} \right) c \\ - =& (g^2 + \vec{OG} \cdot \vec{GB} + \vec{GA} \cdot \vec{OG} + \vec{GA} \cdot \vec{GB} ) c + \left({A}\cdot {B}\right)\mathbf{C} + =& \left( G + a \right) \cdot \left( G + b \right) \mathbf{C} \\ + =& (\mathbf{G}^2 + G \cdot b + a \cdot G + a \cdot b ) \mathbf{C} \end{align*} Using \eqref{eq1} \begin{align} - \left({\vec {a}}\cdot {\vec {b}}\right)c - =& (g^2 + \vec{OG} \cdot \vec{GB} + (-\vec{GB} - \vec{GC}) \cdot \vec{OG} + (-\vec{GB} - \vec{GC}) \cdot \vec{GB} ) c \nonumber \\ - =& (g^2 - ||GB||^2 - \vec{OG} \cdot \vec{GC} - \vec{GC} \cdot \vec{GB})c + \left({A}\cdot {B}\right)\mathbf{C} + =& (\mathbf{G}^2 + G \cdot b + (-b - c) \cdot G + (-b - c) \cdot b ) c \nonumber \\ + =& (\mathbf{G}^2 - ||GB||^2 - G \cdot c - c \cdot b)\mathbf{C} \end{align} -Now, the term in $b$ +Now, the term in $\mathbf{B}$ \begin{align*} - \left({\vec {a}}\cdot {\vec {c}}\right)c - =& \left( \vec{OG} + \vec{GA} \right) \cdot \left( \vec{OG} + \vec{GC} \right) b \\ - =& (g^2 + \vec{OG} \cdot \vec{GC} + \vec{GA} \cdot \vec{OG} + \vec{GA} \cdot \vec{GC} ) b + \left({A}\cdot {C}\right)\mathbf{B} + =& \left( G + a \right) \cdot \left( G + c \right) \mathbf{B} \\ + =& (\mathbf{G}^2 + G \cdot c + a \cdot G + a \cdot c ) \mathbf{B} \end{align*} Using \eqref{eq1} \begin{align} - \left({\vec {a}}\cdot {\vec {c}}\right)b - =& (g^2 + \vec{OG} \cdot \vec{GC} + (-\vec{GB} - \vec{GC}) \cdot \vec{OG} + (-\vec{GB} - \vec{GC}) \cdot \vec{GC} ) b \nonumber \\ - =& (g^2 - ||GC||^2 - \vec{OG} \cdot \vec{GC} - \vec{GC} \cdot \vec{GB})b + \left({A}\cdot {C}\right)\mathbf{B} + =& (\mathbf{G}^2 + G \cdot c + (-b - c) \cdot G + (-b - c) \cdot c ) b \nonumber \\ + =& (\mathbf{G}^2 - ||GC||^2 - G \cdot c - c \cdot b)\mathbf{B} \end{align} For the third term there is no simplification \begin{align} - \left({\vec {b}}\cdot {\vec {c}}\right)a - =& \left( \vec{OG} + \vec{GB} \right) \cdot \left( \vec{OG} + \vec{GC} \right) a + \left({B}\cdot {C}\right)\mathbf{A} + =& \left( G + b \right) \cdot \left( G + c \right) \mathbf{A} \end{align} For the computation of the norms, we can use: \begin{align*} -a^2 &= ||OG||^2 + ||GA||^2\\ - &= g^2 + ||GA||^2 +\mathbf{A}^2 &= ||OG||^2 + \mathbf{a}^2 - 2 G \cdot a \\ + &= \mathbf{G}^2 + \mathbf{a}^2 - 2 G \cdot a \end{align*} -thus +and respectively with B and C, we obtain + \begin{align} -g^2 &= a^2 - ||GA||^2 \nonumber \\ - &= b^2 - ||GB||^2 \nonumber \\ - &= c^2 - ||GC||^2 +(\mathbf{A}\mathbf{B}\mathbf{C})^2 &= (\mathbf{G}^2 + \mathbf{a} - 2 G \cdot a )^2(\mathbf{G}^2 + \mathbf{b} - 2 G \cdot b)^2(\mathbf{G}^2 + \mathbf{c} - 2 G \cdot c)^2 \end{align} -and -\begin{align} -(abc)^2 &= (g^2 + ||GA||)^2(g^2 + ||GB||)^2(g^2 + ||GC||)^2 -\end{align} +\section{Final formula} + + +$$ +{\displaystyle \tan \left({\frac {1}{2}}\Omega \right) + = {\frac {3 G \cdot \left( b \times c \right)} + {\mathbf{A}\mathbf{B}\mathbf{C} + \left({A}\cdot {B}\right)\mathbf{C} + + \left({A}\cdot {C}\right)\mathbf{B} + + \left({B}\cdot {C}\right)\mathbf{A}}}} +$$ + + +$$ +{\displaystyle \tan \left({\frac {1}{2}}\Omega \right) + = {\frac {3 G \cdot \left( b \times c \right)} + {\mathbf{A}\mathbf{B}\mathbf{C} + + (\mathbf{G}^2 - ||GB||^2 - G \cdot c - c \cdot b)\mathbf{C} + + (\mathbf{G}^2 - ||GC||^2 - G \cdot c - c \cdot b)\mathbf{B} + + \left( G + b \right) \cdot \left( G + c \right) \mathbf{A} + }}} +$$ \end{document} From 50e5a8e7dab1b13b0510efb5437892bc5cb4bc41 Mon Sep 17 00:00:00 2001 From: Didou09 Date: Fri, 21 May 2021 19:43:14 +0200 Subject: [PATCH 04/29] [#75] Started updating notes on SA for triangle --- Notes_Upgrades/SA_tetra/SA_tetra.pdf | Bin 123868 -> 121364 bytes Notes_Upgrades/SA_tetra/SA_tetra.tex | 109 +++++++++++++++------------ 2 files changed, 62 insertions(+), 47 deletions(-) diff --git a/Notes_Upgrades/SA_tetra/SA_tetra.pdf b/Notes_Upgrades/SA_tetra/SA_tetra.pdf index e3245e87119411f3c1f7e86cc48cdf48dbca6817..a3fc213472ac896e3501284df062a422813ca5ce 100644 GIT binary patch delta 45532 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≪ke}Qi^pHEp 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ɓV6+u`$C0$&KVkHDz<&vk3AEIgS*SNg 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 Date: Sat, 22 May 2021 12:15:50 +0200 Subject: [PATCH 05/29] corrections in comp --- Notes_Upgrades/SA_tetra/SA_tetra.pdf | Bin 123868 -> 123787 bytes Notes_Upgrades/SA_tetra/SA_tetra.tex | 14 +++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Notes_Upgrades/SA_tetra/SA_tetra.pdf b/Notes_Upgrades/SA_tetra/SA_tetra.pdf index e3245e87119411f3c1f7e86cc48cdf48dbca6817..ff9d8efcb4fd127bcb0bbc7af668a0624979fce9 100644 GIT binary patch delta 2363 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 diff --git a/Notes_Upgrades/SA_tetra/SA_tetra.tex b/Notes_Upgrades/SA_tetra/SA_tetra.tex index 98a1c66af..ce77e3bb4 100644 --- a/Notes_Upgrades/SA_tetra/SA_tetra.tex +++ b/Notes_Upgrades/SA_tetra/SA_tetra.tex @@ -114,7 +114,7 @@ \subsection{Denominator} \begin{align} \left({A}\cdot {B}\right)\mathbf{C} =& (\mathbf{G}^2 + G \cdot b + (-b - c) \cdot G + (-b - c) \cdot b ) c \nonumber \\ - =& (\mathbf{G}^2 - ||GB||^2 - G \cdot c - c \cdot b)\mathbf{C} + =& (\mathbf{G}^2 - G \cdot c - c \cdot b)\mathbf{C} \end{align} @@ -133,7 +133,7 @@ \subsection{Denominator} \begin{align} \left({A}\cdot {C}\right)\mathbf{B} =& (\mathbf{G}^2 + G \cdot c + (-b - c) \cdot G + (-b - c) \cdot c ) b \nonumber \\ - =& (\mathbf{G}^2 - ||GC||^2 - G \cdot c - c \cdot b)\mathbf{B} + =& (\mathbf{G}^2 - G \cdot c - c \cdot b)\mathbf{B} \end{align} @@ -148,15 +148,15 @@ \subsection{Denominator} For the computation of the norms, we can use: \begin{align*} -\mathbf{A}^2 &= ||OG||^2 + \mathbf{a}^2 - 2 G \cdot a \\ - &= \mathbf{G}^2 + \mathbf{a}^2 - 2 G \cdot a +\mathbf{A}^2 &= ||OG||^2 + \mathbf{a}^2 + 2 G \cdot a \\ + &= \mathbf{G}^2 + \mathbf{a}^2 + 2 G \cdot a \end{align*} and respectively with B and C, we obtain \begin{align} -(\mathbf{A}\mathbf{B}\mathbf{C})^2 &= (\mathbf{G}^2 + \mathbf{a} - 2 G \cdot a )^2(\mathbf{G}^2 + \mathbf{b} - 2 G \cdot b)^2(\mathbf{G}^2 + \mathbf{c} - 2 G \cdot c)^2 +(\mathbf{A}\mathbf{B}\mathbf{C})^2 &= (\mathbf{G}^2 + \mathbf{a} + 2 G \cdot a )^2(\mathbf{G}^2 + \mathbf{b} + 2 G \cdot b)^2(\mathbf{G}^2 + \mathbf{c} + 2 G \cdot c)^2 \end{align} @@ -176,8 +176,8 @@ \section{Final formula} {\displaystyle \tan \left({\frac {1}{2}}\Omega \right) = {\frac {3 G \cdot \left( b \times c \right)} {\mathbf{A}\mathbf{B}\mathbf{C} + - (\mathbf{G}^2 - ||GB||^2 - G \cdot c - c \cdot b)\mathbf{C} - + (\mathbf{G}^2 - ||GC||^2 - G \cdot c - c \cdot b)\mathbf{B} + (\mathbf{G}^2 - G \cdot c - c \cdot b)\mathbf{C} + + (\mathbf{G}^2 - G \cdot c - c \cdot b)\mathbf{B} + \left( G + b \right) \cdot \left( G + c \right) \mathbf{A} }}} $$ From 7226d2f96e7b8856922a7f403c85b8a5cb0ff427 Mon Sep 17 00:00:00 2001 From: Didou09 Date: Sun, 23 May 2021 23:21:00 +0200 Subject: [PATCH 06/29] [#75] Advanced formulas for ABC --- Notes_Upgrades/SA_tetra/SA_tetra.tex | 85 ++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 5 deletions(-) diff --git a/Notes_Upgrades/SA_tetra/SA_tetra.tex b/Notes_Upgrades/SA_tetra/SA_tetra.tex index 99fcd3929..05dc492cb 100644 --- a/Notes_Upgrades/SA_tetra/SA_tetra.tex +++ b/Notes_Upgrades/SA_tetra/SA_tetra.tex @@ -5,9 +5,12 @@ \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amssymb} - \usepackage{cancel} +\usepackage{cancel} +\usepackage{xcolor} \usepackage{graphicx} +%\renewcommand\CancelColor{} +\newcommand\cc[2][black]{\renewcommand\CancelColor{\color{#1}}\cancel{#2}} \newcommand{\ud}[1]{\underline{#1}} \DeclareMathOperator{\tm}{\times} \DeclareMathOperator{\A}{\ud{A}} @@ -108,12 +111,84 @@ \subsection{Numerator} \left|{\A}\ {\B}\ {\C}\right| & = \G \cdot \left(\bv \tm \cv + \cv \tm \av + \av \tm \bv \right) \nonumber \\ & = \G \cdot \left(\bv \tm \cv + \cv \tm (-\bv-\cv) + (-\bv-\cv) \tm \bv \right) \nonumber \\ -& = G \cdot \left(\bv \times \cv + \cv \times (-\bv) + \cancel{\cv \times (-\cv)} - + \cancel{(-b) \times b} + (- c) \times b \right) \nonumber \\ -& = G \cdot \left(3 b \times c \right) \nonumber \\ -& = 3 G \cdot \left( b \times c \right) +& = \G \cdot \left(\bv \times \cv + \cv \times (-\bv) + \cancel{\cv \times (-\cv)} + + \cancel{(-\bv) \times \bv} + (- \cv) \times \bv \right) \nonumber \\ +& = \G \cdot \left(3 \bv \times \cv \right) \nonumber \\ +& = 3 \G \cdot \left( \bv \times \cv \right) \end{align} + +\subsection{norms} + +We can write: +$$ +\begin{array}{ll} + A^2 + & = \A \cdot \A\\ + & = (\G+\av) \cdot (\G + \av)\\ + & = G^2 + 2\G \cdot \av + a^2\\ +\end{array} +$$ + +Hence: +$$ +\begin{array}{ll} + (ABC)^2 + & = (G^2 + 2\G \cdot \av + a^2) + (G^2 + 2\G \cdot \bv + b^2) + (G^2 + 2\G \cdot \cv + c^2)\\ + & = (G^2 + 2\G \cdot \av + a^2) + (G^4 + 2G^2\G \cdot \cv + G^2c^2 + + 2G^2\G \cdot \bv + 4(\G \cdot \bv)(\G \cdot \cv) + 2c^2\G \cdot \bv + + b^2G^2 + 2b^2\G \cdot \cv + b^2c^2)\\ +\end{array} +$$ + +Given that: $\av = -(\bv+\cv) \Rightarrow a^2=b^2 + 2\bv \cdot \cv + c^2$ + +We can write: +$$ +\begin{array}{lll} + (ABC)^2 + & = & (G^2 + 2\G \cdot \av + a^2) + (G^4 + 2G^2\G \cdot \cv + G^2c^2 + + 2G^2\G \cdot \bv + 4(\G \cdot \bv)(\G \cdot \cv) + 2c^2\G \cdot \bv + + b^2G^2 + 2b^2\G \cdot \cv + b^2c^2)\\ + & = & (G^2 - 2\G \cdot \bv - 2\G \cdot \cv + b^2 + 2\bv \cdot \cv + c^2)\\ + && (G^4 + 2G^2\G \cdot \cv + G^2c^2 + + 2G^2\G \cdot \bv + 4(\G \cdot \bv)(\G \cdot \cv) + 2c^2\G \cdot \bv + + b^2G^2 + 2b^2\G \cdot \cv + b^2c^2)\\ + & = & G^2 + \left(G^4 + \cc[black]{2G^2\G \cdot \cv} + G^2c^2 + + \cc[red]{2G^2\G \cdot \bv} + \cc[blue]{4(\G \cdot \bv)(\G \cdot \cv)} + + \cc[green]{2c^2\G \cdot \bv} + + b^2G^2 + \cc[yellow]{2b^2\G \cdot \cv} + b^2c^2\right)\\ + && - 2\G \cdot \bv + \left(\cc[red]{G^4} + \cc[blue]{2G^2\G \cdot \cv} + \cc[green]{G^2c^2} + + 2G^2\G \cdot \bv + 4(\G \cdot \bv)(\G \cdot \cv) + 2c^2\G \cdot \bv + + \cc[red]{b^2G^2} + \cc[cyan]{2b^2\G \cdot \cv} + \cc[blue]{b^2c^2}\right)\\ + && - 2\G \cdot \cv + \left(\cc[black]{G^4} + 2G^2\G \cdot \cv + \cc[magenta]{G^2c^2} + + 2G^2\G \cdot \bv + 4(\G \cdot \bv)(\G \cdot \cv) + + \cc[black]{2c^2\G \cdot \bv} + + \cc[yellow]{b^2G^2} + 2b^2\G \cdot \cv + \cc[green]{b^2c^2}\right)\\ + &&+ 2\bv \cdot \cv + \left(G^4 + 2G^2\G \cdot \cv + G^2c^2 + + 2G^2\G \cdot \bv + 4(\G \cdot \bv)(\G \cdot \cv) + 2c^2\G \cdot \bv + + b^2G^2 + 2b^2\G \cdot \cv + b^2c^2\right)\\ + && + b^2 + \left(G^4 + 2G^2\G \cdot \cv + G^2c^2 + + \cc[red]{2G^2\G \cdot \bv} + \cc[cyan]{4(\G \cdot \bv)(\G \cdot \cv)} + + \cc[blue]{2c^2\G \cdot \bv} + + b^2G^2 + 2b^2\G \cdot \cv + b^2c^2\right)\\ + && + c^2 + \left(G^4 + \cc[magenta]{2G^2\G} \cdot \cv + G^2c^2 + + 2G^2\G \cdot \bv + \cc[black]{4(\G \cdot \bv)(\G \cdot \cv)} + 2c^2\G \cdot \bv + + b^2G^2 + \cc[green]{2b^2\G \cdot \cv} + b^2c^2\right)\\ +\end{array} +$$ + + \subsection{Denominator} From a956e5ee70c0daf2128cad49cc8f7848dada17c8 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Mon, 24 May 2021 11:12:36 +0200 Subject: [PATCH 07/29] update tex --- Notes_Upgrades/SA_tetra/SA_tetra.tex | 130 +++++++++++++-------------- setup.py | 4 +- tofu/geom/_core.py | 2 +- tofu/geom/openmp_enabled.py | 2 +- 4 files changed, 69 insertions(+), 69 deletions(-) diff --git a/Notes_Upgrades/SA_tetra/SA_tetra.tex b/Notes_Upgrades/SA_tetra/SA_tetra.tex index 99fcd3929..f1922cf80 100644 --- a/Notes_Upgrades/SA_tetra/SA_tetra.tex +++ b/Notes_Upgrades/SA_tetra/SA_tetra.tex @@ -8,17 +8,6 @@ \usepackage{cancel} \usepackage{graphicx} -\newcommand{\ud}[1]{\underline{#1}} -\DeclareMathOperator{\tm}{\times} -\DeclareMathOperator{\A}{\ud{A}} -\DeclareMathOperator{\B}{\ud{B}} -\DeclareMathOperator{\C}{\ud{C}} -\DeclareMathOperator{\G}{\ud{G}} -\DeclareMathOperator{\av}{\ud{a}} -\DeclareMathOperator{\bv}{\ud{b}} -\DeclareMathOperator{\cv}{\ud{c}} - - \title{Solid angle subtended by a tetrahedron computation} \begin{document} @@ -30,27 +19,18 @@ \section{Notations} -\subsection{vectors} - -\begin{itemize} - \item $\A=\vec{OA}$ - \item $\B=\vec{OB}$ - \item $\C=\vec{OC}$ - \item $\G=\vec{OG}$ - \item $\av=\vec{GA}$ - \item $\bv=\vec{GB}$ - \item $\cv=\vec{GC}$ -\end{itemize} - -\subsection{scalars} +Let \begin{itemize} - \item $A = \|\A\|$ - \item $B = \|\B\|$ - \item $C = \|\C\|$ - \item $a = \|\av\|$ - \item $b = \|\bv\|$ - \item $c = \|\cv\|$ + \item $A$ be the vector $\vec{OA}$ + \item $B$ be the vector $\vec{OB}$ + \item $C$ be the vector $\vec{OC}$ + \item $a$ be the vector $\vec{GA}$ + \item $b$ be the vector $\vec{GB}$ + \item $c$ be the vector $c$ + \item $\mathbf{A}$ be the magnitude of the vector $\vec{OA}$ + \item $\mathbf{B}$ be the magnitude of the vector $\vec{OB}$ + \item $\mathbf{C}$ be the magnitude of the vector $\vec{OC}$ \end{itemize} \section{Computation} @@ -59,56 +39,61 @@ \section{Computation} $$ {\displaystyle \tan \left({\frac {1}{2}}\Omega \right) - = {\frac {\left|{\A}\ {\B}\ {\C}\right|} - {ABC + \left({\A}\cdot {\B}\right)C - + \left({\A}\cdot {\C}\right)B - + \left({\B}\cdot {\C}\right)A}}} + = {\frac {\left|{A}\ {B}\ {C}\right|} + {\mathbf{A}\mathbf{B}\mathbf{C} + \left({A}\cdot {B}\right)\mathbf{C} + + \left({A}\cdot {C}\right)\mathbf{B} + + \left({B}\cdot {C}\right)\mathbf{A}}}} $$ -where $ \left|{\A}\ {\B}\ {\C}\right| = {\A}\cdot ({\B}\tm {\C}) $ +where $ \left|{A}\ {B}\ {C}\right|={A}\cdot ({B}\times {C}) $ \subsection{Numerator} -Given that $\A = \G + \av$ (and resp. -with $\B$ and $\C$), we get +Given that $A = \vec{OA} = G + a$ (and resp. +with $B$ and $C$), we get \begin{align*} -\left|{\A}\ {\B}\ {\C}\right| - & =& {\A} \cdot ({\B}\tm {\C}) \\ - & =& {(\G + \av)} \cdot ({(\G + \bv)} \tm {(\G + \cv)}) \\ - & =& {(\G + \av)} \cdot (\cancel{\G \tm \G} - + \G \tm \cv - + \bv \tm \G - + \bv \tm \cv) \\ - & =& \cancel{\G \cdot (\G \tm \cv)} - + \cancel{\G \cdot (\bv \tm \G)} - + \G \cdot (\bv \tm \cv) - + \av \cdot (\G \tm \cv) - + \av \cdot (\bv \tm \G) - + \cancel{\av \cdot (\bv \tm \cv)} \\ - & =& \G \cdot (\bv \tm \cv) - + \G \cdot (\cv \tm \av) - + \G \cdot (\av \tm \bv) \\ - & = &\G \cdot \left(\bv \tm \cv - + \cv \tm \av - + \av \tm \bv \right) +\left|{A}\ {B}\ {C}\right| + & = {A} \cdot ({B}\times {C}) \\ + & = {A} \cdot ({(G + b)} \times {(G + c)}) \\ + & = {(G + a)} \cdot (\cancel{G \times G} + + G \times c + + b \times G + + b \times c) \\ + & = \cancel{G \cdot (G \times c)} + + \cancel{G \cdot (b \times G)}\\ + & + G \cdot (b \times c) + + a \cdot (G \times c) + + a \cdot (b \times G) + + \cancel{a \cdot (b \times c)} \\ + & = G \cdot (b \times c) + + G \cdot (c \times a) + + G \cdot (a \times b) \\ + & = G \cdot \left(b \times c + +c \times a + + a \times b \right) \end{align*} since $G$ is the centroid of $ABC$, \begin{equation} -\av + \bv + \cv= 0 +a + b + c= 0 \label{eq1} \end{equation}. We obtain \begin{align} -\left|{\A}\ {\B}\ {\C}\right| -& = \G \cdot \left(\bv \tm \cv + \cv \tm \av + \av \tm \bv \right) \nonumber \\ -& = \G \cdot \left(\bv \tm \cv + \cv \tm (-\bv-\cv) + (-\bv-\cv) \tm \bv \right) \nonumber \\ -& = G \cdot \left(\bv \times \cv + \cv \times (-\bv) + \cancel{\cv \times (-\cv)} +\left|{A}\ {B}\ {C}\right| +& = G \cdot \left(b \times c + +c \times a + + a \times b \right) \nonumber \\ +& = G \cdot \left(b \times c + +c \times (-b - c) + + (-b - c) \times b \right) \nonumber \\ +& = G \cdot \left(b \times c + +c \times (-b) + \cancel{c \times (- c)} + \cancel{(-b) \times b} + (- c) \times b \right) \nonumber \\ & = G \cdot \left(3 b \times c \right) \nonumber \\ & = 3 G \cdot \left( b \times c \right) @@ -119,7 +104,7 @@ \subsection{Denominator} First let's see the term in $\mathbf{C}$ \begin{align*} - \left({\A}\cdot {\B}\right)C + \left({A}\cdot {B}\right)\mathbf{C} =& \left( G + a \right) \cdot \left( G + b \right) \mathbf{C} \\ =& (\mathbf{G}^2 + G \cdot b + a \cdot G + a \cdot b ) \mathbf{C} \end{align*} @@ -156,7 +141,8 @@ \subsection{Denominator} \begin{align} \left({B}\cdot {C}\right)\mathbf{A} - =& \left( G + b \right) \cdot \left( G + c \right) \mathbf{A} + =& \left( G + b \right) \cdot \left( G + c \right) \mathbf{A}\\ + =& (\mathbf{G}^2 + G \cdot b + G \cdot c + c \cdot b)\mathbf{A} \end{align} @@ -164,14 +150,28 @@ \subsection{Denominator} \begin{align*} \mathbf{A}^2 &= ||OG||^2 + \mathbf{a}^2 + 2 G \cdot a \\ - &= \mathbf{G}^2 + \mathbf{a}^2 + 2 G \cdot a + &= (G+a) \cdot (G+a) \\ + &= (G-b-c) \cdot (G-b-c) \\ \end{align*} and respectively with B and C, we obtain \begin{align} -(\mathbf{A}\mathbf{B}\mathbf{C})^2 &= (\mathbf{G}^2 + \mathbf{a} + 2 G \cdot a )^2(\mathbf{G}^2 + \mathbf{b} + 2 G \cdot b)^2(\mathbf{G}^2 + \mathbf{c} + 2 G \cdot c)^2 +(\mathbf{A}\mathbf{B}\mathbf{C}) &= ||G-b-c||\,vcdW||G+b||\,||G+c|| +\end{align} + +and + + +\begin{align} + \left({A}\cdot {B}\right)\mathbf{C} + + \left({A}\cdot {C}\right)\mathbf{B} + + \left({B}\cdot {C}\right)\mathbf{A} + =& \mathbf{G}^2 (\mathbf{A} + \mathbf{B} + \mathbf{C}) + + c \cdot b (\mathbf{A} - \mathbf{B} - \mathbf{C}) + + G \cdot b (\mathbf{A} - \mathbf{B}) + + G \cdot c (\mathbf{A} - \mathbf{C}) \end{align} diff --git a/setup.py b/setup.py index 918742c79..62773565b 100644 --- a/setup.py +++ b/setup.py @@ -154,13 +154,13 @@ def get_version_tofu(path=_HERE): _README = [ ff for ff in os.listdir(_HERE) - if len(ff) <= 10 and ff[:7] == "README." + if len(ff) <= 10 and ff.startswith("README.") ] assert len(_README) == 1 _README = _README[0] with open(os.path.join(_HERE, _README), encoding="utf-8") as f: long_description = f.read() -if _README[-3:] == ".md": +if _README.endswith(".md"): long_description_content_type = "text/markdown" else: long_description_content_type = "text/x-rst" diff --git a/tofu/geom/_core.py b/tofu/geom/_core.py index 92d4726f4..d9e877d4d 100644 --- a/tofu/geom/_core.py +++ b/tofu/geom/_core.py @@ -1934,7 +1934,7 @@ def from_txt( msg += " - 'object': return a %s instance\n" % cls.__name__ msg += " - 'dict' : return a dict with polygon, pos and extent" raise Exception(msg) - if not pfe[-4:] == ".txt": + if not pfe.endswith(".txt"): msg = "Only accepts .txt files (fed to np.loadtxt) !\n" msg += " file: %s" % pfe raise Exception(msg) diff --git a/tofu/geom/openmp_enabled.py b/tofu/geom/openmp_enabled.py index 53e67c96f..bc60177ac 100644 --- a/tofu/geom/openmp_enabled.py +++ b/tofu/geom/openmp_enabled.py @@ -1,4 +1,4 @@ -# Autogenerated by Tofu's setup.py on 2021-05-20 13:01:20 +# Autogenerated by Tofu's setup.py on 2021-05-24 05:48:45 def is_openmp_enabled(): """ Determine whether this package was built with OpenMP support. From 5dc7c68b55681c5cb7913184c842abf062f2a457 Mon Sep 17 00:00:00 2001 From: "Laura S. Mendoza" Date: Wed, 26 May 2021 21:34:35 +0200 Subject: [PATCH 08/29] updating skeleton --- Notebooks/solid_angle_triangle.ipynb | 27 +- tofu/geom/_GG.pyx | 140 ++++--- tofu/geom/_basic_geom_tools.pxd | 7 + tofu/geom/_basic_geom_tools.pyx | 54 ++- tofu/geom/_sampling_tools.pxd | 45 ++- tofu/geom/_sampling_tools.pyx | 564 ++++++++++++++++++++------- tofu/geom/_vignetting_tools.pyx | 9 +- tofu/geom/openmp_enabled.py | 2 +- 8 files changed, 636 insertions(+), 212 deletions(-) diff --git a/Notebooks/solid_angle_triangle.ipynb b/Notebooks/solid_angle_triangle.ipynb index f81a484b6..b9bb2272e 100644 --- a/Notebooks/solid_angle_triangle.ipynb +++ b/Notebooks/solid_angle_triangle.ipynb @@ -62,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 36, "id": "chicken-fleet", "metadata": {}, "outputs": [], @@ -73,26 +73,26 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 76, "id": "demonstrated-aruba", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[ 0, -1, -3, -8],\n", - " [ 0, 1, 6, 6],\n", - " [ 0, 1, 5, -10]])" + "array([[ 0., 1., -5., 1.],\n", + " [ 0., -5., 4., -1.],\n", + " [ 0., -6., 6., 3.]])" ] }, - "execution_count": 5, + "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We create randomly the coordinates of A, B, C\n", - "coord = numpy.random.randint(-10, 10, size=(3, 4))\n", + "coord = numpy.random.randint(-10, 10, size=(3, 4)) + 0.0\n", "# We set O to orign\n", "coord[:, 0] = 0\n", "coord" @@ -100,7 +100,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 77, "id": "typical-separation", "metadata": {}, "outputs": [], @@ -111,23 +111,23 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 78, "id": "executive-memorabilia", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 7, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "