From bdb54a333144897339f75e8441f9ee2e5a79c2ca Mon Sep 17 00:00:00 2001 From: Stefano Dominici Date: Mon, 3 Dec 2018 14:25:35 +0100 Subject: [PATCH] Modified implementation in favor of a constant eccentricity manifold Unit tests, comments, and pictures were modified accordingly. Minor modifications - Adjusted style. - Used `std_cxx14` instead of `std` for `make_unique()`. - Added guard in `pull_back()` to prevent NaNs in `std::acos()`. This may happen due to numerical errors: when the argument of acos() falls outside the range [-1,1]. Included a special case for pull_back() If the first coordinate is exactly 0, the center of the manifold is returned. --- doc/doxygen/images/elliptical_hyper_shell.png | Bin 15192 -> 15498 bytes include/deal.II/grid/manifold_lib.h | 29 +- source/grid/manifold_lib.cc | 88 +- tests/manifold/elliptical_manifold_01.cc | 73 +- tests/manifold/elliptical_manifold_01.output | 1152 ++++++++--------- tests/manifold/elliptical_manifold_02.cc | 36 +- tests/manifold/elliptical_manifold_02.output | 32 +- 7 files changed, 682 insertions(+), 728 deletions(-) diff --git a/doc/doxygen/images/elliptical_hyper_shell.png b/doc/doxygen/images/elliptical_hyper_shell.png index c4e70c62783d021779e22e92624c45f63740fbac..7da426131d36809b098b53b4f3b4112f8e6685a3 100644 GIT binary patch literal 15498 zcmb`ucURNT^FAD!QUoc2fP@yBL{LC!p?8p~K_FYPEE;52><}7H8oV80RSYt002=i z`3=ICvA8?2001XIQ$^9xe;POYwEmxD`%*@$?%Aj3P8&XsE*!VtIeZaB^zp4Rj>YUnu<5Q!V&vh*k=!w|M%hd5=eBr4XM#6 zT{7yXUrh@pNCM!L3lEm7)#Ee19>vpv?pKqW@b)TDc4{k2gNQJ#0-R`9>x~b!nW8d@l5xfg>J@=x%yM_zP3#SF|v#Nh%&;kW3xvt)(IM<}Dl&Vr3+E-ohV zU%i748sK3MX($=F$rQ|)1psbj8miT%c|uaVK?bJLWiFfBkg@C!iFnmif5w{trwDC| zaAT!^1K_!^$ZsA*wXQz{M&?i;?iFXunbngZ|IEtPl5$C2hqWAjlE2%Ti&!Hr~(?-wZ2ae2`uC>f*n9z!G{&m0l z9wR4Woip6=a~TZia&WPBP6MP91a^!`nBG|;?Y!y~03360?cT38Wvn%7u$uiEYGZs$ z#RB%{!Yo7xT57)j=kxJzU%9+5CZyro6bdnHx6K5hM|caWSA3H4(xjd@+kGpfUsYt- zx<&^bm!T|fE*=!!h*BVOk4xg=LuPEO_Zp?@HvnR?%&ql-AgBtQ(dbq1x4nvH?hza@-exM>v zW*~;B&G`1O&%<}RBPn=M^b8B3(JUV+PM8V9v;c}p0bHU&w8cm<<1auV$!u_^n%(a2MZ!kd3PySyRiVy5La_B$0H37*Vg(IzG%=$97c5vA!s z`$7uW_I*I2^1g|9!F0Ptqr59Vur{ijqWZp^m9?D+GO%&6pwoVw>0{YTJmX}&cXYXB z((Dd;OSJCdM1sSuOY7dY=T)~vr(<6_AcrCap4g$q+=}@&Rv~V?`V!yx5TfH2c0N~t zWa3>t8JH7Dym{CYP3g+5Hd0xuc7qf~{EpF^Iq?R3jOeF(Z^yI3(ACxHqD>5%?=H)s z6XzMv3K8KLqHTGknLkhn7?V!5cvP{TyhAD3P2$W=C;g+`0>JIjDK2sJ0*bF$dgK(8 zUFV5~`PA5fSK8Z;AOIn0=Cg?t{v1Zk-(r$&OZ0&>81>c&xUE*TZZxZYVA~sCVcAVV z0INT*N-;@HiYd22hy1MxyJyC5;{9%Q^2f9w zaDB4josT1~>a0>LK~LMSo96G$8L;}o}%!W zjdInD+2codYOpf-SaB}`Bs-sU_c?XSYz}phv1TYULF|c&Nn;XjsF8h7`HDkC?d;XH z4i*|V+^g)%XUn~#mka1RE)C}v5e0FJCZTNmY>gfj0N2*j>n26uL5_$w15WR~4)nXV z%*)L064Z`~PZ5BzHEA^xeyOS$sLI)(yxqFD(7gt0ESdTmTm_AJT^b}|mqt7dj{g#_ zN!VOsQqA%Gy>d4O@Y@G!?qO!KxDc|Ew0Zb&y1h>GylIvy=5=T6dh{sxrNGkHGf{6E zJxnt>gEcV+?ISKVZjwShM6gjFtStJ0+O04IO|W2M7!LrSUbNviG;}t3a1pn*ong9p zsB36Mty*41f#D}@g-$`bnE>=*`Ud10GS*`^1zYj$DGNsq8Kr8|NRCrrjJ%Yy$RA|2|3aQ1)Rp4 zw6dAh>cD!9Xrl>_)eIKE9Itn>(QTjJp{G4(O+od0efX;B4QcONrVO1o0q3W_NI!d@ zo=U;vw&~=awc`D<(+prVMdEJO_`qczSSCJW-soQdoGmU(h$%ies__;9?-C-Zz%@h4 zH%=mt=-2$dwylfeWW9YaUAGG?8}z-($6V&_KTVaYYb!Rktpl1#0p)Cn6oYRRlQzEQ z?AOLU+z5NYddrZi$U`^uFj%_sGwin2j83{wQ&`?yMhQOTptZ!PzI1xaaXQqLVTLYh zt1*K)*2kDF-EKEfs=9i_S$|pRmF4s^<6*|wTeXSx7g+t=P?c~W z;o8LV`NmgygDroDDStBJcSe-yU@jhI(=~Tpix^uX1c?0TKn65U6I~U#j=_hLV~G&+ zTShm1#E8~_aRZF=1wne!ECv&_`NwJ3fDhio4 z%c!gPyJlRPJwIATB7y_b&6}qe4%h3!I==ULZ1v$`msam}Mk-wlT!@QForKjyZ_9!1 zBuan7j@Lnzw~$9DC}mM8to7N)iaU1DV)Gx%;}SpDA^wv+h_aUXmgcm`Lb-9iyJ)jI zK2EK0-AEo3qk|7T*Xa2a^n4CcuKdM1?7(m%FY+86_SdRCtcsgdOYLqIV?_f;3yX1V z&5-dbi)os~D%d3ww?q8*StO6>apl^~v*k7D@ZGP?BdDOZr2OZT+y`jZXtebK_QWvv z`^FiYZz~;_{*!{zZ&no+wf*fQt_2^-*;_!*BcD>Hs(+VVA{T`AgNfrdPPoUp*ZPcW z$~r&Cl|+QrZL=~mfQZf*rOs%em?W*79oJsO8|Wblh}(sKyg(*U`2C2F7wYMYc`jo+ z1=Z!Me6^b$vA)rqeTxn$YQ8J1A2;K{@g(Qd;85af^H;iv+S4Xz$6rLp^0;M1nd_?z z`CoZdE!@u|aism)V~hOC9lt149fi~q#TfqOqj&X1>_w!V`h_1z?8rugyrs*w;Ep%H zCMaAC>35@r^k7>$`-R^GbAl(B)b31Od9#@^xJG3%Hqi2nM_?2F=2-#}AC~3<`fQC? z?r#K_%(Z|Wq@>wOHpQf04b8sgHpU>bI}mfy?-y3P1E+|y>1UoLpNpKM&tlY3Ot4Gw zS5NR7e4vdZH8EQC&<5iKS;*ArD7ur{C2>v+I#%?*f19 zjAvW(w|;bbsD@-y^do}(8Nj!Amz9o|3VIH+B2A3$J`!cqduuyySN>sI&WzLYK#sk} zfYF>w4CkQeGLKD6T9PB2pBPTln%)*W@ZzeSaYb#F>pJG8-}iDrzf6NLCcm>uxJg=;^GO+P2!H-247Pua(qqo?TXun6c&PJArjxSJAob zk=2Re_lD?!@`-lzs$Nzh*jdXHte9$qF&N)C^qTfsW{Mf0F*L1HF2Pt?<)wX~&8>SP zro?#~5;We05CmHq6zsS@M1^jy?Z8~9#3--Z$*o3Rzv@E zs?=Fkup^J}A6IS}8q(<}ktYnCW|i(?+W3}dTN-UkoedFl#jP;yL3Y#y282h9Izt<^uy>DUD>*vN;knxF6TOmE1lf^Rz*epIQSq-KZ zLI_?au^~-r-fa%)w?Qc5DM|%8KI%lj=V^h`){o1iHm691k9cK{SY}{Kk+7U{r%g-|c&tIe*TF5aqr%)XCirl+ zWvJqK1%aI!ky|jjS@Cg?5nN1~P4D_pBcD2Wb;L4h1T?r9BJJ3{F+bMv4(oH^-t%~a zJ>P3B?@Jr39)$a`v6=8;I)8S78#(wV+e7YmyWy}`KQj-j*A{-u;K$KJyGX58`zfpB zp&O%&5hGtJpBNB*@AFcVZnUS&PU%2YQhg8klj0)pUW8tOds-iwB!NJ zeevmCqW|sDTe0aPL3Bdy%L7U$85M89Bv%PEW-MK^V&i1{<3#WuaoeVX_?@`b z-=EkWR97pprfR5f{zipiD|5MR@^1+KvM`%dY9qXseq^5e0GIE>ie&a0Mnv_$ZC~Jj z-tFTr%z`&t;cUYOrc>TydMOXj=~cRh&j-rXAwaFDNuN*R=n>zUMDeBzcl3kG{M`_7 zgpb(SrI?_x^qpRHvO*SRI#hfgw2lUkJT}0k{SQB^RH>_Wl@=9{pz?umu06PD74NHf zlgX}7*W-XLl*Z9$%o*fRS0J*q$6tu@;7RcSf&1pmRu}uj54Ia0+P-OP3)eR_NXXx@QWuXhv3cP*qI0uiis{$&cDQnB zs8Q#RSTLB-309lzvW95I@ETG^{iO;J&$>*6hXX#aSu))uE(^;Xo6wHHnECkpc* z;hb94?>MDwkNpIa9hjAqr0BV6D9O`xH7P@d|9;%$6^S_hGOM&IKe1bu!zvAJ@C z=qR0<)F85rw4XoPjPZ{eJIb6|N3}Cq$RGJePbq{P5*J31j>dDnx@Wh1lCQPWEHu0j*jZ_?ymZNrE>SLT1t!exsji$EIy4h9i7C>kZ7~kS!pMSW7%&6TOE`7#=2v=D~VmKn$hme_!|pG%hA{itze;; zYac9sjWpZ`YAnQqY=mBq@N0Tn9?f1%g{0SkvyFqnI%phYJSAtLnrrW7H&b!)BLm_T zvS)WKFD=h7S%0a*SQEG-!*kgW61CYFDH(83fvpCX{;Ie5`g#KG&HJCdM5`nRiykMb zy;!aMVEnC$uNd}(!FttGH6nFqSViyS)&4zcr?!WN9J0{=$xFpN1f*Ps`fbI%+9*h* zLsw>ndRZI`0*{q;&OU zfS7vX#jiYzjOY3S9AIH&eYgtn%$m0Q{onDFa=+1_8sy$q6y(K(c;=Xm5g%%|2^#ykGi12uSUC5zeIj1s!D$8^Gkz`O1xwzx_Kk_%s7-la$vEZ_OCObz0}xk zI0c8_N;8tF7C^&3`rzeN%QsrTIgcENW2o;I5r-z#mzF`G_faK z)1(AV@v8PqD4Vh+Af&2ke@`iDS7bGHRx8Vmc*8B!$YtIg zSj&yWYso)v8cq-(r~*TkN~b(ynLZR(QND-Rm^rY0l4MC7=Nk5L_{5RF+2?1o7Up#P zb;AFD46>!>z{+hwMdy9{%RonZPmRvHbA>1zbB#yF6R>G-d}BdgRR%|RbW#P12h8@D zvLsZk5IfZrFGO6)t1a#G)9j@L1m{c06`UlO%vnX8oE`9Z1|%@xab`)BIa`CiD|2AYw+ES1}) z339z2y%6s$Qx^Vk0mYk2U(UC3y<*t{O@{Zn4;dMjU+BD({}~X?NyHkT=JCzGd%|AF z5byq_B>3saN9%#*(Z_F+2-fDV;;taUBBVntnofA0abp1L^9|z|=0tlva(ZhI8&Pwp zIBRDphL!21dI_ct_Gig=KL>>wXUC7thh6Y#Z#ntQLUaf0e8Lg^7Rb zWW^#}_GAxtX+QP0^p=OOY@aD+9$ld7@pmAO!IQ)8_1Sh>Bc+_{o66d_{SkxNugm{_ z@1R-2uLNoov;FFyzi-Vc7~BS(-!vfBF{^$i zeM&t70ZqB}@TGxpLePm%x$81NA^;7Gc7qEjaY&2)MJ3r3tmUQSOwdBLfftp#^56qa z6)($LqSmLDTEA$;#K{`7Jz{HhpbgpCy>YZwK$w>)w)wUwuZg3R+Hq~Ochq4*K_#SF zn0Gh8leN?BWVGsAU=ND>UmWF?N@0NgQ$oz7 zlWgg*pGdk3aVH9zdjWg`j(QEC<UVhaz@Qd)W;@`N_*~8Ii&S2sM;a#e|HdZ}W1J_IJTPO}8K1KjVV zzn`7}iRV*q9n27fX`o7lp@e`1n1^6}z|zZXp><@n3Snd-cW!rMmT|p~lhs_uJnm>B zg+duV$;#=kaajO^NTX7Iv^Gy3BM=b2S8OLC67l`Wj4&B7kwh8(fNqR_G1qODIC*GM z$f5*Q8WVeH`>pMU0rAqx$kBBBOTet_WVz0g%k>hces*$*NOup{yX$-3jbEB8>ng z{yC=u!0+BM@Jr6R&Q9_JU;g>o9j32GT=?PY{CTO2kU$ItLFLso)lyt$0PEOy#GWCS zN#@s?TEb_-U&2ORH$sZ?|Gp5?NwAZ#CQ<-k=3UrQ0S7!%perh7W2X`-0{~1i64AN+ zD@lC4X>Bt7q*@7Z2mo;0kh_Jk^jkiear_vW-;)fU@~sZpAa35}3%A~ZsRi_rcj#Q(l5u$d8)NGQO?0T7G;NdRH33f`~~6;C#= zwXmy$v(?P{IDqqslvBZH9Ip)tp}(TYqJ4+duRbC}z|RzNh(Dj*`PMwLj$GKWYTb8Q_e+vU;2=b{rO(QyCrI>mnsyM&NDFT2@YjmeLg-wcw^Js z>VS52RK>~(fiRMwVDQ+!YaVEQRHX0cOV7VbjJ$@E2ZtgG($1#8^RMV~2=#DOIv#Kr-mB_J|Mw zz@~a#3jj!rd#~pg7&ZFnHsSX0Q(qgqzy`{-MXfqg-3@m#bKHYCnENq>6EtpXo3gO> zSY^PQ#FM|p;^pc{%zL=pYfCjV&T)b$~7|KTK9f;tr+EfM+@1ajn;Xuq1~2pPQNGaZTPe<+*Zi`X;E zaMRrOJ*P7u9=h2t_5;5$`zg_CJ|&1Hpn#kKU=;bUJcMmW2>PNf3?8DsHAv%|Mc~t_ z5(@=2D(?V*_?@u`n_tU-EoLYD)cc0lZE{NuzH}r8kq%v+5`RO-1Cyagt-sUZgq849 z45sGR*{M4labvMY@mnyJUR_ih!I!;F^5umYOK;766@0$!Fz*fMgyqcJEaJ45Ry2AC z$6VtB>5ED4d5`xaTgY?Aq(8j5rEbEsI$8CC0D|_NJts)BJ;(~^QcE%gMDe6tzT)vC z=x6x#5tuUEo%o9jG)q9_%vMjthIpZZ^Tas1+GQbkY`VTVBhys?DlL1FnUl+3!FSIWe zJs08Jo4Sh3wh202)xH`Zr%lSm@JBGN(^4=1P?7&M^yN`be?$hag56Q38IV7pw#8H^ zs#O<44a0+_j}loD$>~x<+}}_rB&$p}gMdh5H^t$B#sojW=GJQm3(p&hq+iCqajM5B zv3#H1VJ%2vTud$*eJ4wFoM|M!m!~t+m0xujkaO&RxqPE9ec=uQ#fvw7=bqZ^EZk;3N@T_u$!^(2AMaUW)Qulyjggd-3dvD5t*TJ55O%QBb!1lDZD5=~i;CLR* zxbRu-({o(!7wqnUH$rBD<%QtW$Z^8ZkH@lO5eM*swo9@D&gi@kC%k|;iqzXwj4yEN zhmnIRJyqaSf-~&2*L)P$8NqO0Ou8UpVf^qsRNAMiYR{-tHu<81zC2ifq@QxI@v@bb0b=Ck7_=Bv@LaDhb= zB^3>I5_7leQOPoz$&>q_)Ed^l8USg(!P%3vnu_`=gliZ)jD?PW``%Iap%9y>ApX{1 z<@XyP{Ajkfl|gCfk1>96k>eU#V(fi2L6Xg}>3YV9z|4rmJW@?V37r`RqHj8R+P&hj zMmLbp-jug`fT3*jy`bOsd&ktga?xk^XS7es5O#q4*2Ze<1f5ocR&cM|rxNaWlK9B@@U| z*{IAB>IlE)u{lJB71GG>I4Tk6{8cZ1b+{3`3mXmU4xKN0BBH324#-?KvX*7-t17#B z!lQz05NU<}L;&E!kS6CMNVcZ5BbUJWat#WGV(JSGUh=}?wh1)qCb+UUyKf5x7*2J)c zd-vY31U(O@mO?tIR04VLm{+{1pNJiSX^L@?XRfU_P^hkuKfN$=y;%>prC!(SHOP*Vd^Hrq_)V;9uyotzOZXFUxwA7l=Op6?6S;LsEpE5- zLySqU>8)q!Z0N+gprTWaNA2b}D?HBfNg^2!DVb|=+3~kciS`FZEMcxEiI*>bsMB4u zZ7epg>OLfs(>=34{yu{1J5h`07@;!p_+8MkUVg%ohgr1xq#ydPnVjC<)}Q;A|M<5@ zU`{JdoW&h>9|KamssC6`uouR`8BfM z#LSTg$i^)}gogSXjfRRF8Fk=na8A{h*u5LAcR^&PgS_JH=Bt(9y8|#exG910(4gak z&U#>Yr{n{N258LGLnSt*nth1uY@8J}NagWb7(VxF0B~^lwDyWb|&f z3QBl~(%G(*D%_K5K!x@8N3>l+a6$5?aIr(tZ*Luh5>;Zqz$g8CqFVGu(+FX1q>cLB z4CHLjwi+(8{TX3X!ueW?BFZVYoJ!Pj3WpL+g7IS&-jfm$uNW0y8GfWCY~&*$?MlZ7 z9a3>ytIQ$!^CJ>vefz&fxEsQ&Jvh|@gVPEUy?RG1(V;LB`9Wa<%@b(wtKYia+bj<{ zAz05V!_mMEO0#@3II`$$%L7Udk+X8VQ8Ey!8jsMPr{(%6em@AhM>p#3xmfytwn!rFeXluBqIcJU@X&MP3g4zHC< zWXP0ig5kKmp~vmvzGSOU-jk;CYRT7-{biVi)h}h|%604+8tX{9#V+Tjdhg<0|CWs_ zXZ;-zdS0&wUf|Z^ND>;gdkrXB-lD`$X%V5k`NsM9Z0{J)&tr(x2%3DMZa>?POJ`q? zw_r?nxBfICzTvO&q>x3*@^35A-r;5i8eq-mDY+*xjuE``!>*1tw)Q5=d{_^>W8T%k`a*!9sm-hI?Tx|=%(R60F}_O%V()OJUf}Fq8HcU*k9~$VqHzh;hnhNv7#u$tOj9hP{{vRi4q&Z6#mrT({Q70)UF&tu}gxE-lms3a&(r7ia>I!+&r-))BH5*z@V6J4Y5Jm z6`k&hpgyO-J#glX=RPwNNABFRIa)C)dMfxr?HXs;elXbljGdZUl$B)Y{49>sfN9x^`{Qp&CR%fIO{!wb7VXvITI(_ONk6}h z5a=9!v!7HtC>ilET3ptq)fXxET$$m9%7Y<^Ar#N1FjR!Hz5^~6{K3#!E;_(t)%Y89 zjiADgYZW>PY5NHqa?lw<-Erpk!$lpF$^{dyICZBMbV&O^K;l6oyze;i_Y5-%b(scB z%4M_&p$~2du46tbxfn-dHeL||QvF#Lm`SsAoYQEZc}AXGZY?gzTz-Cu>NtzT%MZGb zkXM0Lk!W#8aViyxK#%X_!W6REK8X-#s|04;zk6k{@jv+{+Dl znD%-owI@l?{JjmtcZ>VKL($}OvqDVwp|`I{;QT2aKO4&fmGM@eDWvzSrSm-O*=WlZ zmsr+lAiweBsM2G0=yayXJ7}}x_Yyp{;&su3ptiK%PgdV7Mwa|?H#Sr6o80kZP|8#R zgO==v$5MMq&~|=%Y1Aw442Y#`*ma>;39P zArlmuVY{o5Sspj>13|o%-C1d-kLT2CZv%zwU zvjxWzDswo%jdzY1^Yyn-DLfI5S+~#*fpevw9Dy)MQDiV8I@*{rd&u^R@&)bvLUIBs z6i94RMGPN2eQeKml<>W*Ssjg17u>KI$$##d z=*YE&ur7Mkzx6M5Z1(f7uX0sc#%?-@4Vrp0(qKpfY8Bq#_5u;5+I=fq*D|%tEU*J9 zWJDBvV39UHOLQ+r--~;~gvGQ?*D*OP&#PTt44s)@u=}zgO?dAhaZ}ewKW4fh{g_Z7{7Z3j?0&gB4&q%guG^+O0sad#&!af)rZIhw3gZZv1?JoJ z1W5-KfX#@Y(=~*w6b!ya&k!j<#QsL}20Ew=)uQd7`})Q5A80K@s2m<0vNKyB1{6Xj z(X7ELxi-$F9i+KQ9UValaUNB+1`bgb7VCE@rCH-{Dy9RHzVQs&sNm14+zm{}5MkpJ zRb^)ZJ~`;IO^jl?N=%)0aU>q7+CO$w(d_bj9NRAl0p8cAG^2TpV zgk5f#A*)=(oe<>4kb-*#zfdN!yLs!u?z66%85J`%Mly<#Bh2|R^^pO7eM{g($sa7R z>Vsq)RrH~Zxr^rz4kHeRli-pYP3_WE1FF%CRD$S3 z|L&{c)1U)TquatNQ=ycDFQ4Vk> z6;@_KIByGL9sD-!4nTxUD0O##Vo(|Eh@OL*uXt1*oOWk%VRR-_n8?O>K~evo%$}a= zpk?_qO~2-uc~uyy&>=Z8RzJbab&EyYgdV$R9> zm3^s2bcMk@WgfTzwa}_lDnQH;QiZICsJYRd9Ud8AED){^pJX-ZT}dep$@gc7U4M)w zGWaJ+ej9(j2s-=)XO7FFQ*qP{zv4**oAt~U?TwH1#FV=|Mx#=T=TER)@u;KE1ICqt z?{Bxud9l|kekR3GtP@BUSwqoT~0g`-1_4st%1lOwU6A8MYE7+CgzbEizEQB>X>cmlAv?CjC8m|S( zy_hqsrRUSA_SIiyS|C36@xYy}`;T9oAxL&d4%jn#c7ZN;M%;7ynGEta>;>mv>xu

ok7=1`N6)6*@8az~D3DIO#s7ZxKA(5r>u8~wJT2@Juji=$9(|wBJXa<^sOPW@WL_p+ zXE~fToliGJ2k<2d{8NMc(xy(fIzIw-K}@yGk6yO9=2+}k&|kx>3HGMNonUfWU6 zeO4=v+Xi%_SR8_f2k4tQiYUVD_n8Tv10bdASPh1>!2twcOPHM9CQo>?){ zh0N2PNO)+JvDs{xP^XqpMB7wmF&hi>b3Q|O8|NU8>O!RF%JnUG*wr2Qud8}596!kl zZ_xAkkq~$)0qx@4F}j->O-jajnrlC`PK*E<>-!}~|I|stAf!0Bl<~fIMPMeXUemF@ z{@wAgR?q{;b=k6w7xI-^kOP6*2*H{wJb!W`3925rMO$JvLr?G98y8BbMb>nHY=P>z zzVn5kUK8@iycci%sWa7eDBMAvC}*AgmY(ttkksXvj`0vfCaaEh>ED4pf%djR8J%t5 zk|WuYdxmP0<$Cj4D-x#T8|N6F!!rEpC?4i3mJaN~5kF}FNc`jX_Sh+F0%b&C2GPx9{ZH{#sx?u(h0Vw`Hbd;|Nu339n~9KRmOXt|^du zizQzm0bKIx%25v^uxt$LSm-U)gyW0i(5pqF1sd>P;v{s+fnqtYV{zl~UxxS#Khoo? z()&d0DyMc8niGUd&yZd)e|M7fNs1{2V`TRq0;TtA`s^>>$N>U#F?DpESo47SJqq6X zbKHwR76ovSY{wSp%5FhDG)tMUz2DG{RMS=AJ>;rLi*C@B&pDXd)Z(Sx?fkT3Du1QV zr2e2O)XIle%4hALjzFV}+AG`;^L;`8&G*@osRk)JUGDg9#1B$5IvZ5acPi8F@cC|? zC%;BGG$PX+5X@_t+v=SR{z4CJcveB4EJ&4JQmOd)Rl9>h>3z_!8;t-r-}c5JX3!<^W|P)=DqBG-TpUHX?n zUdqIu(NhH@d5zFMM?_%bDkNj+ z84*2Qea>#a(3)}u;h-0%!d-j9y)(G%3f7f?73pH+6Chu8ffUVutKsd|TzMZ=Nhk^? zPsM)4wUCV@VvZVtpW8St^1w8vY>j?9473R!=s69xI|Sd3QVL4nRxQtOd9}|5d!yC6 z6mV{K>HhA{Cs=U&*yJ;V4uU944XYXn*Uua7dp)BI4!);t%%~l<@jhc1?ee$|h{oIf zX)&CQ^j9_Ch0bpe9Ikbf>oY$h5-4#6{B0?8QuVZKT5A6L=P+(>v|R#TbyXUyUN*Nk z&N4!y%+#Z)03^Huh>Qxy5+zhc7H<^A;3L0e2Y|q@r#!%oj1dBXp8v98H+KzK(m?YI zW!RxOk632H%aw4+`*&`PCWehW@9RFtBw2lL=*+N2oBLZVp1cc&p}&0`OjfleHDO~W zGSM{~?ni&a2n%@=3iy-qzv#1UZ#4>)FHL2S77apJG6GD-Djx1xm9Y>7UKjtHbH)ti zv-$pGA^U_fw}0NlG=%Fg-A){m?q?r57W!$zrIE<=p~@_;P1$q){_|fu z`Ra~B(BLarCBnIJu^(S>tq#E0(m#VjAC@?iSy3Mzz`RYIc=hj~)8koa18W!zZm$|n zMJffT|LFScJX@h`$)e2hu|?5V=guVi)o%~%V+8C#B5d2D`$^|#!egUJ6O&`pnrA1% zU)S=ujuI@GT& z_=}J`l!*-*L<62a9HD$@O1H40NEwcKWmZ_evGtsV$Jpv`N}_fNap{Ix^Z5^Ki221# z)jlwlfELUN&38*1|GvHh!lsn*Vr1OSCP{ zNfdtbJvB@Q^hQ)gtD!k#;B3+~*^>7!!-YBUOIz5fr7t&NjsTqnMwpLhvkkgfaUdk)~aH#tRkVPX3uuk57Ft9 z6+N9%ZVjzaFMy4$%kn4zd{jP@b~>|@6cvEsKR!%}|K|4G(%zSCu~pj~mgQCf)Kc95 z6oOu6r*CwkN`Wp};RDT;DDceZFbuh-TXt{;%0 z!*%Cpto+hz^6SNP>ZlCx*X(X)N;Ce8Pb$F+Tqj8t%C)JOSh7P{X1^VL+AcT-TqE^I zk5;X9|H1%w>C?QMi$vFNJYD%s?4KU~Q~tmIE!3-9Bg6aevZ6*At~ass6DbvuvJ(Js zlL9c6T@c3+z#ls2rUQX2=Mf&&62=U7+WFplos<24)jD;K!{+pFl=duVeY_r1Q&m@` JQpq~<{{v{Qe<}a~ literal 15192 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 * . * + * This is based on the definition of elliptic coordinates $(u,v)$ + * @f[ + * \left\lbrace\begin{align*} + * x &= x_0 + c \cosh(u) \cos(v) \\ + * y &= y_0 + c \sinh(u) \sin(v) + * \end{align*}\right. + * @f] + * in which $(x_0,y_0)$ are coordinates of the center of the cartesian system. + * + * The current implementation uses coordinates $(c,v)$, instead of $(u,v)$, and + * fixes $u$ according to a given eccentricity. Therefore, this choice + * of coordinates generates an elliptical manifold characterized by a constant + * eccentricity: $e=\frac{1}{\cosh(u)}$, with $e\in\left]0,1\right[$. + * * The constructor of this class will throw an exception if both dim and * spacedim are different from two. * * This manifold can be used to produce hyper_shells with elliptical curvature. - * As an example, the test elliptical_manifold_01 produces the following + * As an example, the test elliptical_manifold_01 produces the following * triangulation: * @image html elliptical_hyper_shell.png * @@ -486,19 +500,19 @@ class EllipticalManifold : public ChartManifold public: /** * Constructor that takes the center of the manifold system, the direction of - * the major axis, and the eccentricity parameter. + * the major axis, and the manifold eccentricity. * The default major axis is the x-axis. The manifold is rotated in * order to align the major axis to the direction specified in input. * @param center Center of the manifold. * @param major_axis_direction Direction of the major axis of the * manifold. - * @param c_parameter Parameter controlling the eccentricity of the - * manifold. + * @param eccentricity Eccentricity of the + * manifold $e\in\left]0,1\right[$. * */ EllipticalManifold(const Point & center, const Tensor<1, spacedim> &major_axis_direction, - const double c_parameter); + const double eccentricity); virtual std::unique_ptr> clone() const override; @@ -532,9 +546,10 @@ protected: */ const Point center; /** - * The parameter controlling the eccentricity of the manifold. + * Parameters deriving from the eccentricity of the manifold. */ - const double c_parameter; + const double cosh_u; + const double sinh_u; private: /** diff --git a/source/grid/manifold_lib.cc b/source/grid/manifold_lib.cc index e809bcf27e..7387e35f89 100644 --- a/source/grid/manifold_lib.cc +++ b/source/grid/manifold_lib.cc @@ -1156,18 +1156,20 @@ template EllipticalManifold::EllipticalManifold( const Point & center, const Tensor<1, spacedim> &major_axis_direction, - const double c_parameter) + const double eccentricity) : ChartManifold( EllipticalManifold::get_periodicity()) , direction(major_axis_direction) , center(center) - , c_parameter(c_parameter) + , cosh_u(1.0 / eccentricity) + , sinh_u(std::sqrt(cosh_u * cosh_u - 1.0)) { - // throws an exception if dim!=2 || spacedim!=2. + // Throws an exception if dim!=2 || spacedim!=2. Assert(dim == 2 && spacedim == 2, ExcNotImplemented()); - Assert(this->c_parameter > 0.0, + // Throws an exception if eccentricity is not in range. + Assert(std::signbit(cosh_u * cosh_u - 1.0) == false, ExcMessage( - "Invalid ellipsis parameter 'c': It must satisfy c > 0.0.")); + "Invalid eccentricity: It must satisfy 0 < eccentricity < 1.")); const double direction_norm = direction.norm(); Assert(direction_norm != 0.0, ExcMessage( @@ -1181,9 +1183,9 @@ template std::unique_ptr> EllipticalManifold::clone() const { - return std::make_unique>(center, - direction, - c_parameter); + const double eccentricity = 1.0 / cosh_u; + return std_cxx14::make_unique>( + center, direction, eccentricity); } @@ -1215,14 +1217,12 @@ template <> Point<2> EllipticalManifold<2, 2>::push_forward(const Point<2> &chart_point) const { - const double ch = std::cosh(chart_point[0]); - const double sh = std::sinh(chart_point[0]); const double cs = std::cos(chart_point[1]); const double sn = std::sin(chart_point[1]); // Coordinates in the reference frame (i.e. major axis direction is // x-axis) - const double x = c_parameter * ch * cs; - const double y = c_parameter * sh * sn; + const double x = chart_point[0] * cosh_u * cs; + const double y = chart_point[0] * sinh_u * sn; // Rotate them according to the major axis direction const Point<2> p(direction[0] * x - direction[1] * y, direction[1] * x + direction[0] * y); @@ -1246,45 +1246,29 @@ Point<2> EllipticalManifold<2, 2>::pull_back(const Point<2> &space_point) const { // Moving space_point in the reference coordinate system. - const double c2 = c_parameter * c_parameter; const double x0 = space_point[0] - center[0]; const double y0 = space_point[1] - center[1]; const double x = direction[0] * x0 + direction[1] * y0; const double y = -direction[1] * x0 + direction[0] * y0; - // From here we try to find solutions of two equations: - // x^2/(1-q)-y^2/q = c^2 for q, given q = -sinh^2(pt[0]), - // and - // x^2/(1-p)-y^2/p = c^2 for p, given p = sin^2(pt[1]). - // Note that, in the end, p and q are solutions to the same quadratic - // equation. - const double x2 = x * x; - const double y2 = y * y; - // - const double b = x2 + y2 - c2; - const double srdelta = std::sqrt(b * b + 4.0 * c2 * y2); - double p = (-b + srdelta) / (2.0 * c2); - // Since p=sin^2(pt[1]) is bounded in [0,1], - // guard against numerical overflows. - if (p < 0.0) - p = 0.0; - if (p > 1.0) - p = 1.0; - const double q = (-b - srdelta) / (2.0 * c2); - const bool x_is_positive = !std::signbit(x); - const bool y_is_positive = !std::signbit(y); - const double eta0 = std::asin(std::sqrt(p)); - // Given q = -sinh^2(pt[0]), - // pt[0] is calculated by straight inversion since q <= 0 for any - // pt[0]. - Point<2> pt(std::log(std::sqrt(-q) + std::sqrt(1.0 - q)), eta0); - // Unfolding pt[1] according to the quadrant. - if (x_is_positive && !y_is_positive) - pt[1] = 2.0 * numbers::PI - eta0; - else if (!x_is_positive && y_is_positive) - pt[1] = numbers::PI - eta0; - else if (!x_is_positive && !y_is_positive) - pt[1] = numbers::PI + eta0; - return pt; + const double pt0 = + std::sqrt((x * x) / (cosh_u * cosh_u) + (y * y) / (sinh_u * sinh_u)); + // If the radius is exactly zero, the point coincides with the origin. + if (pt0 == 0.0) + { + return center; + } + double cos_eta = x / (pt0 * cosh_u); + if (cos_eta < -1.0) + { + cos_eta = -1.0; + } + if (cos_eta > 1.0) + { + cos_eta = 1.0; + } + const double eta = std::acos(cos_eta); + const double pt1 = (std::signbit(y) ? 2.0 * numbers::PI - eta : eta); + return Point<2>(pt0, pt1); } @@ -1305,15 +1289,13 @@ DerivativeForm<1, 2, 2> EllipticalManifold<2, 2>::push_forward_gradient( const Point<2> &chart_point) const { - const double ch = std::cosh(chart_point[0]); - const double sh = std::sinh(chart_point[0]); const double cs = std::cos(chart_point[1]); const double sn = std::sin(chart_point[1]); DerivativeForm<1, 2, 2> dX; - dX[0][0] = c_parameter * sh * cs; - dX[0][1] = -c_parameter * ch * sn; - dX[1][0] = c_parameter * ch * sn; - dX[1][1] = c_parameter * sh * cs; + dX[0][0] = cosh_u * cs; + dX[0][1] = -chart_point[0] * cosh_u * sn; + dX[1][0] = sinh_u * sn; + dX[1][1] = chart_point[1] * sinh_u * cs; return dX; } diff --git a/tests/manifold/elliptical_manifold_01.cc b/tests/manifold/elliptical_manifold_01.cc index a9a6b0affd..cc1bf38599 100644 --- a/tests/manifold/elliptical_manifold_01.cc +++ b/tests/manifold/elliptical_manifold_01.cc @@ -41,64 +41,27 @@ // hyper_shell made of 8 elements. namespace { - /* The following system of equations - // / - // |x = ellPar*cosh(u)*cos(v) - // |y = ellPar*sinh(u)*sin(v) - // \ - // allows to transform a point (u,v) in the chart space to a - // point (x,y) in the cartesian space. - // - // Setting v=0, the system of equations becomes - // / - // |x = x_0 = ellPar*cosh(u) - // |y = 0 - // \ - // which represents the crossing point of an ellipsis, non-rotated and - // centered at the origin of the cartesian system, with its major axis. - // - // For the sake of completeness, by setting v=pi/2, one finds y_0 = - // ellPar*sinh(u) as the crossing point on the minor axis. - // - // This function takes in input a point pt={x_0,v} - // and transforms it into (x,y) in accordance with the first system of - // equations above. - // - // On a final note, the condition x_0 >= ellPar has to be satisfied. This is - // required because min(cosh(u)) = 1 is obtained for u = 0, and imposing v = 0 - // the minimum value that x can assume is x = ellPar. - // For the sake of completeness, it's worth to notice that there would be no - // restrictions on the input if we passed y_0, instead of x_0, as pt[0]. - */ - Point<2> - chart_to_cartesian(const Point<2> &pt, const double ellPar) - { - Point<2> c; - const double ch = pt[0] / ellPar; - const double sh = std::sqrt(ch * ch - 1.0); - c[0] = ellPar * ch * std::cos(pt[1]); - c[1] = ellPar * sh * std::sin(pt[1]); - return c; - } - - - std::vector> generate_shell_points(const Point<2> ¢er, const double radius0, const double radius1, - const double ellPar) + const double eccentricity) { - const std::array radii{{radius0, radius1}}; + const std::array radii{ + {radius0 * eccentricity, radius1 * eccentricity}}; const std::array angle{ {0, numbers::PI_4, numbers::PI_2, 3.0 * numbers::PI_4, numbers::PI}}; std::vector> points; + // Create an elliptical manifold to use push_forward() + Tensor<1, 2> axis; + axis[0] = 1.0; + axis[1] = 0.0; + EllipticalManifold<2, 2> mani(center, axis, eccentricity); for (auto &i : radii) { for (auto &j : angle) { - points.emplace_back(chart_to_cartesian(Point<2>(i, j), ellPar) + - center); + points.emplace_back(mani.push_forward(Point<2>(i, j)) + center); } } std::array dup{{1, 2, 3, 6, 7, 8}}; @@ -117,19 +80,15 @@ namespace // center, and the major axis oriented in the direction of the x-axis. // // inner_radius and outer_radius parameters correspond to the - // distances from the center of the manifold of the - // crossing points of two concentric ellipsis with their major axis. + // semi-major axis length for the inner and outer ellipsis. // - // Input parameters must respect the following constrains: - // c_parameter < inner_radius < outer_radius. + // Eccentricity must be in range ]0,1[ // - // To understand the constrain on the c_parameter refer to the - // documentation of function chart_to_cartesian() whithin this namespace. void build_simple_hyper_shell(Triangulation<2, 2> &grid, const Point<2> & center, const double inner_radius, const double outer_radius, - const double c_param) + const double eccentricity) { unsigned int cell[][4] = {{5, 6, 0, 1}, {6, 7, 1, 2}, @@ -140,7 +99,7 @@ namespace {15, 14, 12, 11}, {9, 15, 4, 12}}; std::vector> points = - generate_shell_points(center, inner_radius, outer_radius, c_param); + generate_shell_points(center, inner_radius, outer_radius, eccentricity); std::vector> cells(8, CellData<2>()); for (int i = 0; i < 8; ++i) for (int j = 0; j < 4; ++j) @@ -151,7 +110,7 @@ namespace Tensor<1, 2> axis; axis[0] = 1.0; axis[1] = 0.0; - grid.set_manifold(0, EllipticalManifold<2, 2>(center, axis, c_param)); + grid.set_manifold(0, EllipticalManifold<2, 2>(center, axis, eccentricity)); grid.set_all_manifold_ids(0); } @@ -168,13 +127,11 @@ template void test(unsigned int ref = 1) { - // deallog << "Testing dim " << dim << ", spacedim " << spacedim << std::endl; - Triangulation tria; switch (dim) { case 2: - build_simple_hyper_shell(tria, Point(), 1.5, 1.8, 1.4); + build_simple_hyper_shell(tria, Point(), 1.0, 2.0, 0.8); break; default: AssertThrow(0, ExcNotImplemented()); diff --git a/tests/manifold/elliptical_manifold_01.output b/tests/manifold/elliptical_manifold_01.output index d380473c18..edd50e266f 100644 --- a/tests/manifold/elliptical_manifold_01.output +++ b/tests/manifold/elliptical_manifold_01.output @@ -1,582 +1,582 @@ $NOD 576 -1 1.50000 0.00000 0 -2 1.06066 0.380789 0 -3 9.18485e-17 0.538516 0 -4 -1.06066 0.380789 0 -5 -1.50000 6.59492e-17 0 -6 1.80000 0.00000 0 -7 1.27279 0.800000 0 -8 1.10218e-16 1.13137 0 -9 -1.27279 0.800000 0 -10 -1.80000 1.38553e-16 0 -11 1.06066 -0.380789 0 -12 9.18485e-17 -0.538516 0 -13 -1.06066 -0.380789 0 -14 1.27279 -0.800000 0 -15 1.10218e-16 -1.13137 0 -16 -1.27279 -0.800000 0 -17 1.38582 0.206081 0 -18 1.38582 -0.206081 0 -19 0.574025 0.497524 0 -20 -0.574025 0.497524 0 -21 -1.38582 0.206081 0 -22 -1.38582 -0.206081 0 -23 1.62315 0.00000 0 -24 1.66298 0.432957 0 -25 1.66298 -0.432957 0 -26 1.14774 0.580789 0 -27 0.688830 1.04525 0 -28 9.93896e-17 0.821359 0 -29 -1.14774 0.580789 0 -30 -0.688830 1.04525 0 -31 -1.62315 1.00587e-16 0 -32 -1.66298 0.432957 0 -33 -1.66298 -0.432957 0 -34 0.574025 -0.497524 0 -35 -0.574025 -0.497524 0 -36 1.14774 -0.580789 0 -37 0.688830 -1.04525 0 -38 -2.98169e-16 -0.821359 0 -39 -1.14774 -0.580789 0 -40 -0.688830 -1.04525 0 -41 1.49960 0.314321 0 -42 0.621154 0.758837 0 -43 -0.621154 0.758837 0 -44 -1.49960 0.314321 0 -45 1.49960 -0.314321 0 -46 0.621154 -0.758837 0 -47 -0.621154 -0.758837 0 -48 -1.49960 -0.314321 0 -49 1.47118 0.105059 0 -50 1.24720 0.299184 0 -51 1.47118 -0.105059 0 -52 1.24720 -0.299184 0 -53 0.833355 0.447760 0 -54 0.292635 0.528169 0 -55 -0.833355 0.447760 0 -56 -0.292635 0.528169 0 -57 -1.47118 0.105059 0 -58 -1.24720 0.299184 0 -59 -1.47118 -0.105059 0 -60 -1.24720 -0.299184 0 -61 1.70454 0.00000 0 -62 1.55516 0.00000 0 -63 1.76541 0.220720 0 -64 1.49665 0.628556 0 -65 1.76541 -0.220720 0 -66 1.49665 -0.628556 0 -67 1.20529 0.687557 0 -68 1.09966 0.478813 0 -69 1.00003 0.940700 0 -70 0.351163 1.10963 0 -71 1.04373e-16 0.972353 0 -72 9.52261e-17 0.677144 0 -73 -1.20529 0.687557 0 -74 -1.09966 0.478813 0 -75 -1.00003 0.940700 0 -76 -0.351163 1.10963 0 -77 -1.70454 1.19079e-16 0 -78 -1.55516 8.29262e-17 0 -79 -1.76541 0.220720 0 -80 -1.49665 0.628556 0 -81 -1.76541 -0.220720 0 -82 -1.49665 -0.628556 0 -83 0.833355 -0.447760 0 -84 0.292635 -0.528169 0 -85 -0.833355 -0.447760 0 -86 -0.292635 -0.528169 0 -87 1.20529 -0.687557 0 -88 1.09966 -0.478813 0 -89 1.00003 -0.940700 0 -90 0.351163 -1.10963 0 -91 -3.13120e-16 -0.972353 0 -92 -2.85678e-16 -0.677144 0 -93 -1.20529 -0.687557 0 -94 -1.09966 -0.478813 0 -95 -1.00003 -0.940700 0 -96 -0.351163 -1.10963 0 -97 1.57479 0.372103 0 -98 1.43678 0.259132 0 -99 1.59197 0.160239 0 -100 1.34960 0.456323 0 -101 0.652301 0.898337 0 -102 0.595134 0.625599 0 -103 0.901776 0.682935 0 -104 0.316662 0.805577 0 -105 -0.901776 0.682935 0 -106 -0.316662 0.805577 0 -107 -0.652301 0.898337 0 -108 -0.595134 0.625599 0 -109 -1.59197 0.160239 0 -110 -1.34960 0.456323 0 -111 -1.57479 0.372103 0 -112 -1.43678 0.259132 0 -113 1.59197 -0.160239 0 -114 1.34960 -0.456323 0 -115 1.57479 -0.372103 0 -116 1.43678 -0.259132 0 -117 0.901776 -0.682935 0 -118 0.316662 -0.805577 0 -119 0.652301 -0.898337 0 -120 0.595134 -0.625599 0 -121 -0.652301 -0.898337 0 -122 -0.595134 -0.625599 0 -123 -0.901776 -0.682935 0 -124 -0.316662 -0.805577 0 -125 -1.57479 -0.372103 0 -126 -1.43678 -0.259132 0 -127 -1.59197 -0.160239 0 -128 -1.34960 -0.456323 0 -129 1.67179 0.189697 0 -130 1.41728 0.540210 0 -131 1.52528 0.132104 0 -132 1.29307 0.376201 0 -133 0.946994 0.808482 0 -134 0.332540 0.953669 0 -135 0.864001 0.563024 0 -136 0.303397 0.664133 0 -137 -0.946994 0.808482 0 -138 -0.864001 0.563024 0 -139 -0.332540 0.953669 0 -140 -0.303397 0.664133 0 -141 -1.67179 0.189697 0 -142 -1.52528 0.132104 0 -143 -1.41728 0.540210 0 -144 -1.29307 0.376201 0 -145 1.67179 -0.189697 0 -146 1.52528 -0.132104 0 -147 1.41728 -0.540210 0 -148 1.29307 -0.376201 0 -149 0.946994 -0.808482 0 -150 0.864001 -0.563024 0 -151 0.332540 -0.953669 0 -152 0.303397 -0.664133 0 -153 -0.946994 -0.808482 0 -154 -0.332540 -0.953669 0 -155 -0.864001 -0.563024 0 -156 -0.303397 -0.664133 0 -157 -1.67179 -0.189697 0 -158 -1.41728 -0.540210 0 -159 -1.52528 -0.132104 0 -160 -1.29307 -0.376201 0 -161 1.49278 0.0527838 0 -162 1.43541 0.156323 0 -163 1.32288 0.253855 0 -164 1.15952 0.341631 0 -165 1.49278 -0.0527838 0 -166 1.43541 -0.156323 0 -167 1.32288 -0.253855 0 -168 1.15952 -0.341631 0 -169 0.951590 0.416279 0 -170 0.707095 0.474929 0 -171 0.435427 0.515328 0 -172 0.147026 0.535923 0 -173 -0.951590 0.416279 0 -174 -0.707095 0.474929 0 -175 -0.435427 0.515328 0 -176 -0.147026 0.535923 0 -177 -1.49278 0.0527838 0 -178 -1.43541 0.156323 0 -179 -1.32288 0.253855 0 -180 -1.15952 0.341631 0 -181 -1.49278 -0.0527838 0 -182 -1.43541 -0.156323 0 -183 -1.32288 -0.253855 0 -184 -1.15952 -0.341631 0 -185 1.75047 0.00000 0 -186 1.66214 0.00000 0 -187 1.58752 0.00000 0 -188 1.52601 0.00000 0 -189 1.79133 0.110894 0 -190 1.72249 0.328420 0 -191 1.58746 0.533325 0 -192 1.39142 0.717734 0 -193 1.79133 -0.110894 0 -194 1.72249 -0.328420 0 -195 1.58746 -0.533325 0 -196 1.39142 -0.717734 0 -197 1.23777 0.743013 0 -198 1.17531 0.633520 0 -199 1.12255 0.529255 0 -200 1.07905 0.429358 0 -201 1.14191 0.874561 0 -202 0.848514 0.997780 0 -203 0.522512 1.08265 0 -204 0.176431 1.12592 0 -205 1.30420e-08 1.05078 0 -206 1.23839e-08 0.895932 0 -207 9.72076e-17 0.748480 0 -208 9.34410e-17 0.607204 0 -209 -1.23777 0.743013 0 -210 -1.17531 0.633520 0 -211 -1.12255 0.529255 0 -212 -1.07905 0.429358 0 -213 -1.14191 0.874561 0 -214 -0.848514 0.997780 0 -215 -0.522512 1.08265 0 -216 -0.176431 1.12592 0 -217 -1.75047 1.28683e-16 0 -218 -1.66214 1.09720e-16 0 -219 -1.58752 9.16623e-17 0 -220 -1.52601 7.43611e-17 0 -221 -1.79133 0.110894 0 -222 -1.72249 0.328420 0 -223 -1.58746 0.533325 0 -224 -1.39142 0.717734 0 -225 -1.79133 -0.110894 0 -226 -1.72249 -0.328420 0 -227 -1.58746 -0.533325 0 -228 -1.39142 -0.717734 0 -229 0.951590 -0.416279 0 -230 0.707095 -0.474929 0 -231 0.435427 -0.515328 0 -232 0.147026 -0.535923 0 -233 -0.951590 -0.416279 0 -234 -0.707095 -0.474929 0 -235 -0.435427 -0.515328 0 -236 -0.147026 -0.535923 0 -237 1.23777 -0.743013 0 -238 1.17531 -0.633520 0 -239 1.12255 -0.529255 0 -240 1.07905 -0.429358 0 -241 1.14191 -0.874561 0 -242 0.848514 -0.997780 0 -243 0.522512 -1.08265 0 -244 0.176431 -1.12592 0 -245 -1.30420e-08 -1.05078 0 -246 -1.23839e-08 -0.895932 0 -247 -2.91623e-16 -0.748480 0 -248 -2.80323e-16 -0.607204 0 -249 -1.23777 -0.743013 0 -250 -1.17531 -0.633520 0 -251 -1.12255 -0.529255 0 -252 -1.07905 -0.429358 0 -253 -1.14191 -0.874561 0 -254 -0.848514 -0.997780 0 -255 -0.522512 -1.08265 0 -256 -0.176431 -1.12592 0 -257 1.61722 0.402116 0 -258 1.53561 0.342858 0 -259 1.46668 0.286431 0 -260 1.40985 0.232367 0 -261 1.61534 0.0805073 0 -262 1.55326 0.238428 0 -263 1.43149 0.387186 0 -264 1.25472 0.521065 0 -265 0.669875 0.970793 0 -266 0.636072 0.827734 0 -267 0.607518 0.691505 0 -268 0.583978 0.560983 0 -269 1.02972 0.634919 0 -270 0.765150 0.724374 0 -271 0.471177 0.785992 0 -272 0.159097 0.817404 0 -273 -1.02972 0.634919 0 -274 -0.765150 0.724374 0 -275 -0.471177 0.785992 0 -276 -0.159097 0.817404 0 -277 -0.669875 0.970793 0 -278 -0.636072 0.827734 0 -279 -0.607518 0.691505 0 -280 -0.583978 0.560983 0 -281 -1.61534 0.0805073 0 -282 -1.55326 0.238428 0 -283 -1.43149 0.387186 0 -284 -1.25472 0.521065 0 -285 -1.61722 0.402116 0 -286 -1.53561 0.342858 0 -287 -1.46668 0.286431 0 -288 -1.40985 0.232367 0 -289 1.61534 -0.0805073 0 -290 1.55326 -0.238428 0 -291 1.43149 -0.387186 0 -292 1.25472 -0.521065 0 -293 1.61722 -0.402116 0 -294 1.53561 -0.342858 0 -295 1.46668 -0.286431 0 -296 1.40985 -0.232367 0 -297 1.02972 -0.634919 0 -298 0.765150 -0.724374 0 -299 0.471177 -0.785992 0 -300 0.159097 -0.817404 0 -301 0.669875 -0.970793 0 -302 0.636072 -0.827734 0 -303 0.607518 -0.691505 0 -304 0.583978 -0.560983 0 -305 -0.669875 -0.970793 0 -306 -0.636072 -0.827734 0 -307 -0.607518 -0.691505 0 -308 -0.583978 -0.560983 0 -309 -1.02972 -0.634919 0 -310 -0.765150 -0.724374 0 -311 -0.471177 -0.785992 0 -312 -0.159097 -0.817404 0 -313 -1.61722 -0.402116 0 -314 -1.53561 -0.342858 0 -315 -1.46668 -0.286431 0 -316 -1.40985 -0.232367 0 -317 -1.61534 -0.0805073 0 -318 -1.55326 -0.238428 0 -319 -1.43149 -0.387186 0 -320 -1.25472 -0.521065 0 -321 1.71683 0.204997 0 -322 1.63020 0.174788 0 -323 1.69634 0.0953072 0 -324 1.63115 0.282259 0 -325 1.45546 0.583781 0 -326 1.38202 0.497753 0 -327 1.50327 0.458364 0 -328 1.31763 0.616854 0 -329 1.55702 0.146021 0 -330 1.49669 0.118460 0 -331 1.54767 0.0663717 0 -332 1.48820 0.196564 0 -333 1.31998 0.415833 0 -334 1.26883 0.337345 0 -335 1.37153 0.319203 0 -336 1.20216 0.429575 0 -337 0.972507 0.873690 0 -338 0.923433 0.744940 0 -339 1.08135 0.751639 0 -340 0.803516 0.857539 0 -341 0.341499 1.03059 0 -342 0.324267 0.878717 0 -343 0.494803 0.930484 0 -344 0.167075 0.967671 0 -345 0.881979 0.622338 0 -346 0.847804 0.504872 0 -347 0.986583 0.523439 0 -348 0.733098 0.597187 0 -349 0.309710 0.734098 0 -350 0.297709 0.595537 0 -351 0.451439 0.647986 0 -352 0.152432 0.673883 0 -353 -1.08135 0.751639 0 -354 -0.803516 0.857539 0 -355 -0.972507 0.873690 0 -356 -0.923433 0.744940 0 -357 -0.986583 0.523439 0 -358 -0.733098 0.597187 0 -359 -0.881979 0.622338 0 -360 -0.847804 0.504872 0 -361 -0.494803 0.930484 0 -362 -0.167075 0.967671 0 -363 -0.341499 1.03059 0 -364 -0.324267 0.878717 0 -365 -0.451439 0.647986 0 -366 -0.152432 0.673883 0 -367 -0.309710 0.734098 0 -368 -0.297709 0.595537 0 -369 -1.69634 0.0953072 0 -370 -1.63115 0.282259 0 -371 -1.71683 0.204997 0 -372 -1.63020 0.174788 0 -373 -1.54767 0.0663717 0 -374 -1.48820 0.196564 0 -375 -1.55702 0.146021 0 -376 -1.49669 0.118460 0 -377 -1.50327 0.458364 0 -378 -1.31763 0.616854 0 -379 -1.45546 0.583781 0 -380 -1.38202 0.497753 0 -381 -1.37153 0.319203 0 -382 -1.20216 0.429575 0 -383 -1.31998 0.415833 0 -384 -1.26883 0.337345 0 -385 1.69634 -0.0953072 0 -386 1.63115 -0.282259 0 -387 1.71683 -0.204997 0 -388 1.63020 -0.174788 0 -389 1.54767 -0.0663717 0 -390 1.48820 -0.196564 0 -391 1.55702 -0.146021 0 -392 1.49669 -0.118460 0 -393 1.50327 -0.458364 0 -394 1.31763 -0.616854 0 -395 1.45546 -0.583781 0 -396 1.38202 -0.497753 0 -397 1.37153 -0.319203 0 -398 1.20216 -0.429575 0 -399 1.31998 -0.415833 0 -400 1.26883 -0.337345 0 -401 1.08135 -0.751639 0 -402 0.803516 -0.857539 0 -403 0.972507 -0.873690 0 -404 0.923433 -0.744940 0 -405 0.986583 -0.523439 0 -406 0.733098 -0.597187 0 -407 0.881979 -0.622338 0 -408 0.847804 -0.504872 0 -409 0.494803 -0.930484 0 -410 0.167075 -0.967671 0 -411 0.341499 -1.03059 0 -412 0.324267 -0.878717 0 -413 0.451439 -0.647986 0 -414 0.152432 -0.673883 0 -415 0.309710 -0.734098 0 -416 0.297709 -0.595537 0 -417 -0.972507 -0.873690 0 -418 -0.923433 -0.744940 0 -419 -1.08135 -0.751639 0 -420 -0.803516 -0.857539 0 -421 -0.341499 -1.03059 0 -422 -0.324267 -0.878717 0 -423 -0.494803 -0.930484 0 -424 -0.167075 -0.967671 0 -425 -0.881979 -0.622338 0 -426 -0.847804 -0.504872 0 -427 -0.986583 -0.523439 0 -428 -0.733098 -0.597187 0 -429 -0.309710 -0.734098 0 -430 -0.297709 -0.595537 0 -431 -0.451439 -0.647986 0 -432 -0.152432 -0.673883 0 -433 -1.71683 -0.204997 0 -434 -1.63020 -0.174788 0 -435 -1.69634 -0.0953072 0 -436 -1.63115 -0.282259 0 -437 -1.45546 -0.583781 0 -438 -1.38202 -0.497753 0 -439 -1.50327 -0.458364 0 -440 -1.31763 -0.616854 0 -441 -1.55702 -0.146021 0 -442 -1.49669 -0.118460 0 -443 -1.54767 -0.0663717 0 -444 -1.48820 -0.196564 0 -445 -1.31998 -0.415833 0 -446 -1.26883 -0.337345 0 -447 -1.37153 -0.319203 0 -448 -1.20216 -0.429575 0 -449 1.74204 0.102994 0 -450 1.67509 0.305025 0 -451 1.65413 0.0878167 0 -452 1.59056 0.260075 0 -453 1.54377 0.495334 0 -454 1.35313 0.666607 0 -455 1.46587 0.422340 0 -456 1.28485 0.568373 0 -457 1.57988 0.0733638 0 -458 1.51916 0.217272 0 -459 1.51866 0.0595164 0 -460 1.46030 0.176262 0 -461 1.40007 0.352831 0 -462 1.22717 0.474831 0 -463 1.34582 0.286234 0 -464 1.17962 0.385206 0 -465 1.11048 0.812263 0 -466 0.825165 0.926704 0 -467 1.05445 0.692565 0 -468 0.783525 0.790142 0 -469 0.508134 1.00553 0 -470 0.171576 1.04572 0 -471 0.482492 0.857354 0 -472 0.162918 0.891618 0 -473 1.00711 0.578583 0 -474 0.748352 0.660100 0 -475 0.968088 0.469375 0 -476 0.719355 0.535506 0 -477 0.460833 0.716250 0 -478 0.155604 0.744876 0 -479 0.442976 0.581058 0 -480 0.149575 0.604280 0 -481 -1.11048 0.812263 0 -482 -1.05445 0.692565 0 -483 -0.825165 0.926704 0 -484 -0.783525 0.790142 0 -485 -1.00711 0.578583 0 -486 -0.968088 0.469375 0 -487 -0.748352 0.660100 0 -488 -0.719355 0.535506 0 -489 -0.508134 1.00553 0 -490 -0.482492 0.857354 0 -491 -0.171576 1.04572 0 -492 -0.162918 0.891618 0 -493 -0.460833 0.716250 0 -494 -0.442976 0.581058 0 -495 -0.155604 0.744876 0 -496 -0.149575 0.604280 0 -497 -1.74204 0.102994 0 -498 -1.65413 0.0878167 0 -499 -1.67509 0.305025 0 -500 -1.59056 0.260075 0 -501 -1.57988 0.0733638 0 -502 -1.51866 0.0595164 0 -503 -1.51916 0.217272 0 -504 -1.46030 0.176262 0 -505 -1.54377 0.495334 0 -506 -1.46587 0.422340 0 -507 -1.35313 0.666607 0 -508 -1.28485 0.568373 0 -509 -1.40007 0.352831 0 -510 -1.34582 0.286234 0 -511 -1.22717 0.474831 0 -512 -1.17962 0.385206 0 -513 1.74204 -0.102994 0 -514 1.65413 -0.0878167 0 -515 1.67509 -0.305025 0 -516 1.59056 -0.260075 0 -517 1.57988 -0.0733638 0 -518 1.51866 -0.0595164 0 -519 1.51916 -0.217272 0 -520 1.46030 -0.176262 0 -521 1.54377 -0.495334 0 -522 1.46587 -0.422340 0 -523 1.35313 -0.666607 0 -524 1.28485 -0.568373 0 -525 1.40007 -0.352831 0 -526 1.34582 -0.286234 0 -527 1.22717 -0.474831 0 -528 1.17962 -0.385206 0 -529 1.11048 -0.812263 0 -530 1.05445 -0.692565 0 -531 0.825165 -0.926704 0 -532 0.783525 -0.790142 0 -533 1.00711 -0.578583 0 -534 0.968088 -0.469375 0 -535 0.748352 -0.660100 0 -536 0.719355 -0.535506 0 -537 0.508134 -1.00553 0 -538 0.482492 -0.857354 0 -539 0.171576 -1.04572 0 -540 0.162918 -0.891618 0 -541 0.460833 -0.716250 0 -542 0.442976 -0.581058 0 -543 0.155604 -0.744876 0 -544 0.149575 -0.604280 0 -545 -1.11048 -0.812263 0 -546 -0.825165 -0.926704 0 -547 -1.05445 -0.692565 0 -548 -0.783525 -0.790142 0 -549 -0.508134 -1.00553 0 -550 -0.171576 -1.04572 0 -551 -0.482492 -0.857354 0 -552 -0.162918 -0.891618 0 -553 -1.00711 -0.578583 0 -554 -0.748352 -0.660100 0 -555 -0.968088 -0.469375 0 -556 -0.719355 -0.535506 0 -557 -0.460833 -0.716250 0 -558 -0.155604 -0.744876 0 -559 -0.442976 -0.581058 0 -560 -0.149575 -0.604280 0 -561 -1.74204 -0.102994 0 -562 -1.67509 -0.305025 0 -563 -1.65413 -0.0878167 0 -564 -1.59056 -0.260075 0 -565 -1.54377 -0.495334 0 -566 -1.35313 -0.666607 0 -567 -1.46587 -0.422340 0 -568 -1.28485 -0.568373 0 -569 -1.57988 -0.0733638 0 -570 -1.51916 -0.217272 0 -571 -1.51866 -0.0595164 0 -572 -1.46030 -0.176262 0 -573 -1.40007 -0.352831 0 -574 -1.22717 -0.474831 0 -575 -1.34582 -0.286234 0 -576 -1.17962 -0.385206 0 +1 1.00000 0.00000 0 +2 0.707107 0.424264 0 +3 6.12323e-17 0.600000 0 +4 -0.707107 0.424264 0 +5 -1.00000 7.34788e-17 0 +6 2.00000 0.00000 0 +7 1.41421 0.848528 0 +8 1.22465e-16 1.20000 0 +9 -1.41421 0.848528 0 +10 -2.00000 1.46958e-16 0 +11 0.707107 -0.424264 0 +12 6.12323e-17 -0.600000 0 +13 -0.707107 -0.424264 0 +14 1.41421 -0.848528 0 +15 1.22465e-16 -1.20000 0 +16 -1.41421 -0.848528 0 +17 0.923880 0.229610 0 +18 0.923880 -0.229610 0 +19 0.382683 0.554328 0 +20 -0.382683 0.554328 0 +21 -0.923880 0.229610 0 +22 -0.923880 -0.229610 0 +23 1.50000 0.00000 0 +24 1.84776 0.459220 0 +25 1.84776 -0.459220 0 +26 1.06066 0.636396 0 +27 0.765367 1.10866 0 +28 9.18485e-17 0.900000 0 +29 -1.06066 0.636396 0 +30 -0.765367 1.10866 0 +31 -1.50000 1.10218e-16 0 +32 -1.84776 0.459220 0 +33 -1.84776 -0.459220 0 +34 0.382683 -0.554328 0 +35 -0.382683 -0.554328 0 +36 1.06066 -0.636396 0 +37 0.765367 -1.10866 0 +38 -2.75546e-16 -0.900000 0 +39 -1.06066 -0.636396 0 +40 -0.765367 -1.10866 0 +41 1.38582 0.344415 0 +42 0.574025 0.831492 0 +43 -0.574025 0.831492 0 +44 -1.38582 0.344415 0 +45 1.38582 -0.344415 0 +46 0.574025 -0.831492 0 +47 -0.574025 -0.831492 0 +48 -1.38582 -0.344415 0 +49 0.980785 0.117054 0 +50 0.831470 0.333342 0 +51 0.980785 -0.117054 0 +52 0.831470 -0.333342 0 +53 0.555570 0.498882 0 +54 0.195090 0.588471 0 +55 -0.555570 0.498882 0 +56 -0.195090 0.588471 0 +57 -0.980785 0.117054 0 +58 -0.831470 0.333342 0 +59 -0.980785 -0.117054 0 +60 -0.831470 -0.333342 0 +61 1.75000 0.00000 0 +62 1.25000 0.00000 0 +63 1.96157 0.234108 0 +64 1.66294 0.666684 0 +65 1.96157 -0.234108 0 +66 1.66294 -0.666684 0 +67 1.23744 0.742462 0 +68 0.883883 0.530330 0 +69 1.11114 0.997764 0 +70 0.390181 1.17694 0 +71 1.07157e-16 1.05000 0 +72 7.65404e-17 0.750000 0 +73 -1.23744 0.742462 0 +74 -0.883883 0.530330 0 +75 -1.11114 0.997764 0 +76 -0.390181 1.17694 0 +77 -1.75000 1.28588e-16 0 +78 -1.25000 9.18485e-17 0 +79 -1.96157 0.234108 0 +80 -1.66294 0.666684 0 +81 -1.96157 -0.234108 0 +82 -1.66294 -0.666684 0 +83 0.555570 -0.498882 0 +84 0.195090 -0.588471 0 +85 -0.555570 -0.498882 0 +86 -0.195090 -0.588471 0 +87 1.23744 -0.742462 0 +88 0.883883 -0.530330 0 +89 1.11114 -0.997764 0 +90 0.390181 -1.17694 0 +91 -3.21470e-16 -1.05000 0 +92 -2.29621e-16 -0.750000 0 +93 -1.23744 -0.742462 0 +94 -0.883883 -0.530330 0 +95 -1.11114 -0.997764 0 +96 -0.390181 -1.17694 0 +97 1.61679 0.401818 0 +98 1.15485 0.287013 0 +99 1.47118 0.175581 0 +100 1.24720 0.500013 0 +101 0.669696 0.970074 0 +102 0.478354 0.692910 0 +103 0.833355 0.748323 0 +104 0.292635 0.882707 0 +105 -0.833355 0.748323 0 +106 -0.292635 0.882707 0 +107 -0.669696 0.970074 0 +108 -0.478354 0.692910 0 +109 -1.47118 0.175581 0 +110 -1.24720 0.500013 0 +111 -1.61679 0.401818 0 +112 -1.15485 0.287013 0 +113 1.47118 -0.175581 0 +114 1.24720 -0.500013 0 +115 1.61679 -0.401818 0 +116 1.15485 -0.287013 0 +117 0.833355 -0.748323 0 +118 0.292635 -0.882707 0 +119 0.669696 -0.970074 0 +120 0.478354 -0.692910 0 +121 -0.669696 -0.970074 0 +122 -0.478354 -0.692910 0 +123 -0.833355 -0.748323 0 +124 -0.292635 -0.882707 0 +125 -1.61679 -0.401818 0 +126 -1.15485 -0.287013 0 +127 -1.47118 -0.175581 0 +128 -1.24720 -0.500013 0 +129 1.71637 0.204845 0 +130 1.45507 0.583349 0 +131 1.22598 0.146318 0 +132 1.03934 0.416678 0 +133 0.972248 0.873043 0 +134 0.341408 1.02982 0 +135 0.694463 0.623602 0 +136 0.243863 0.735589 0 +137 -0.972248 0.873043 0 +138 -0.694463 0.623602 0 +139 -0.341408 1.02982 0 +140 -0.243863 0.735589 0 +141 -1.71637 0.204845 0 +142 -1.22598 0.146318 0 +143 -1.45507 0.583349 0 +144 -1.03934 0.416678 0 +145 1.71637 -0.204845 0 +146 1.22598 -0.146318 0 +147 1.45507 -0.583349 0 +148 1.03934 -0.416678 0 +149 0.972248 -0.873043 0 +150 0.694463 -0.623602 0 +151 0.341408 -1.02982 0 +152 0.243863 -0.735589 0 +153 -0.972248 -0.873043 0 +154 -0.341408 -1.02982 0 +155 -0.694463 -0.623602 0 +156 -0.243863 -0.735589 0 +157 -1.71637 -0.204845 0 +158 -1.45507 -0.583349 0 +159 -1.22598 -0.146318 0 +160 -1.03934 -0.416678 0 +161 0.995185 0.0588103 0 +162 0.956940 0.174171 0 +163 0.881921 0.282838 0 +164 0.773010 0.380636 0 +165 0.995185 -0.0588103 0 +166 0.956940 -0.174171 0 +167 0.881921 -0.282838 0 +168 0.773010 -0.380636 0 +169 0.634393 0.463806 0 +170 0.471397 0.529153 0 +171 0.290285 0.574164 0 +172 0.0980171 0.597111 0 +173 -0.634393 0.463806 0 +174 -0.471397 0.529153 0 +175 -0.290285 0.574164 0 +176 -0.0980171 0.597111 0 +177 -0.995185 0.0588103 0 +178 -0.956940 0.174171 0 +179 -0.881921 0.282838 0 +180 -0.773010 0.380636 0 +181 -0.995185 -0.0588103 0 +182 -0.956940 -0.174171 0 +183 -0.881921 -0.282838 0 +184 -0.773010 -0.380636 0 +185 1.87500 0.00000 0 +186 1.62500 0.00000 0 +187 1.37500 0.00000 0 +188 1.12500 0.00000 0 +189 1.99037 0.117621 0 +190 1.91388 0.348342 0 +191 1.76384 0.565676 0 +192 1.54602 0.761272 0 +193 1.99037 -0.117621 0 +194 1.91388 -0.348342 0 +195 1.76384 -0.565676 0 +196 1.54602 -0.761272 0 +197 1.32583 0.795495 0 +198 1.14905 0.689429 0 +199 0.972272 0.583363 0 +200 0.795495 0.477297 0 +201 1.26879 0.927613 0 +202 0.942793 1.05831 0 +203 0.580569 1.14833 0 +204 0.196034 1.19422 0 +205 1.14811e-16 1.12500 0 +206 9.95026e-17 0.975000 0 +207 8.41945e-17 0.825000 0 +208 6.88864e-17 0.675000 0 +209 -1.32583 0.795495 0 +210 -1.14905 0.689429 0 +211 -0.972272 0.583363 0 +212 -0.795495 0.477297 0 +213 -1.26879 0.927613 0 +214 -0.942793 1.05831 0 +215 -0.580569 1.14833 0 +216 -0.196034 1.19422 0 +217 -1.87500 1.37773e-16 0 +218 -1.62500 1.19403e-16 0 +219 -1.37500 1.01033e-16 0 +220 -1.12500 8.26637e-17 0 +221 -1.99037 0.117621 0 +222 -1.91388 0.348342 0 +223 -1.76384 0.565676 0 +224 -1.54602 0.761272 0 +225 -1.99037 -0.117621 0 +226 -1.91388 -0.348342 0 +227 -1.76384 -0.565676 0 +228 -1.54602 -0.761272 0 +229 0.634393 -0.463806 0 +230 0.471397 -0.529153 0 +231 0.290285 -0.574164 0 +232 0.0980171 -0.597111 0 +233 -0.634393 -0.463806 0 +234 -0.471397 -0.529153 0 +235 -0.290285 -0.574164 0 +236 -0.0980171 -0.597111 0 +237 1.32583 -0.795495 0 +238 1.14905 -0.689429 0 +239 0.972272 -0.583363 0 +240 0.795495 -0.477297 0 +241 1.26879 -0.927613 0 +242 0.942793 -1.05831 0 +243 0.580569 -1.14833 0 +244 0.196034 -1.19422 0 +245 -3.44432e-16 -1.12500 0 +246 -2.98508e-16 -0.975000 0 +247 -2.52583e-16 -0.825000 0 +248 -2.06659e-16 -0.675000 0 +249 -1.32583 -0.795495 0 +250 -1.14905 -0.689429 0 +251 -0.972272 -0.583363 0 +252 -0.795495 -0.477297 0 +253 -1.26879 -0.927613 0 +254 -0.942793 -1.05831 0 +255 -0.580569 -1.14833 0 +256 -0.196034 -1.19422 0 +257 1.73227 0.430519 0 +258 1.50130 0.373116 0 +259 1.27033 0.315714 0 +260 1.03936 0.258311 0 +261 1.49278 0.0882154 0 +262 1.43541 0.261256 0 +263 1.32288 0.424257 0 +264 1.15952 0.570954 0 +265 0.717531 1.03936 0 +266 0.621861 0.900783 0 +267 0.526190 0.762201 0 +268 0.430519 0.623619 0 +269 0.951590 0.695709 0 +270 0.707095 0.793729 0 +271 0.435427 0.861246 0 +272 0.147026 0.895666 0 +273 -0.951590 0.695709 0 +274 -0.707095 0.793729 0 +275 -0.435427 0.861246 0 +276 -0.147026 0.895666 0 +277 -0.717531 1.03936 0 +278 -0.621861 0.900783 0 +279 -0.526190 0.762201 0 +280 -0.430519 0.623619 0 +281 -1.49278 0.0882154 0 +282 -1.43541 0.261256 0 +283 -1.32288 0.424257 0 +284 -1.15952 0.570954 0 +285 -1.73227 0.430519 0 +286 -1.50130 0.373116 0 +287 -1.27033 0.315714 0 +288 -1.03936 0.258311 0 +289 1.49278 -0.0882154 0 +290 1.43541 -0.261256 0 +291 1.32288 -0.424257 0 +292 1.15952 -0.570954 0 +293 1.73227 -0.430519 0 +294 1.50130 -0.373116 0 +295 1.27033 -0.315714 0 +296 1.03936 -0.258311 0 +297 0.951590 -0.695709 0 +298 0.707095 -0.793729 0 +299 0.435427 -0.861246 0 +300 0.147026 -0.895666 0 +301 0.717531 -1.03936 0 +302 0.621861 -0.900783 0 +303 0.526190 -0.762201 0 +304 0.430519 -0.623619 0 +305 -0.717531 -1.03936 0 +306 -0.621861 -0.900783 0 +307 -0.526190 -0.762201 0 +308 -0.430519 -0.623619 0 +309 -0.951590 -0.695709 0 +310 -0.707095 -0.793729 0 +311 -0.435427 -0.861246 0 +312 -0.147026 -0.895666 0 +313 -1.73227 -0.430519 0 +314 -1.50130 -0.373116 0 +315 -1.27033 -0.315714 0 +316 -1.03936 -0.258311 0 +317 -1.49278 -0.0882154 0 +318 -1.43541 -0.261256 0 +319 -1.32288 -0.424257 0 +320 -1.15952 -0.570954 0 +321 1.83897 0.219477 0 +322 1.59378 0.190213 0 +323 1.74157 0.102918 0 +324 1.67465 0.304799 0 +325 1.55901 0.625017 0 +326 1.35114 0.541681 0 +327 1.54336 0.494967 0 +328 1.35277 0.666113 0 +329 1.34858 0.160950 0 +330 1.10338 0.131686 0 +331 1.24398 0.0735129 0 +332 1.19618 0.217714 0 +333 1.14327 0.458345 0 +334 0.935403 0.375010 0 +335 1.10240 0.353548 0 +336 0.966263 0.475795 0 +337 1.04169 0.935403 0 +338 0.902802 0.810683 0 +339 1.11019 0.811661 0 +340 0.824944 0.926017 0 +341 0.365794 1.10338 0 +342 0.317022 0.956266 0 +343 0.507998 1.00479 0 +344 0.171530 1.04494 0 +345 0.763909 0.685962 0 +346 0.625017 0.561242 0 +347 0.792992 0.579758 0 +348 0.589246 0.661441 0 +349 0.268249 0.809148 0 +350 0.219477 0.662030 0 +351 0.362856 0.717705 0 +352 0.122521 0.746389 0 +353 -1.11019 0.811661 0 +354 -0.824944 0.926017 0 +355 -1.04169 0.935403 0 +356 -0.902802 0.810683 0 +357 -0.792992 0.579758 0 +358 -0.589246 0.661441 0 +359 -0.763909 0.685962 0 +360 -0.625017 0.561242 0 +361 -0.507998 1.00479 0 +362 -0.171530 1.04494 0 +363 -0.365794 1.10338 0 +364 -0.317022 0.956266 0 +365 -0.362856 0.717705 0 +366 -0.122521 0.746389 0 +367 -0.268249 0.809148 0 +368 -0.219477 0.662030 0 +369 -1.74157 0.102918 0 +370 -1.67465 0.304799 0 +371 -1.83897 0.219477 0 +372 -1.59378 0.190213 0 +373 -1.24398 0.0735129 0 +374 -1.19618 0.217714 0 +375 -1.34858 0.160950 0 +376 -1.10338 0.131686 0 +377 -1.54336 0.494967 0 +378 -1.35277 0.666113 0 +379 -1.55901 0.625017 0 +380 -1.35114 0.541681 0 +381 -1.10240 0.353548 0 +382 -0.966263 0.475795 0 +383 -1.14327 0.458345 0 +384 -0.935403 0.375010 0 +385 1.74157 -0.102918 0 +386 1.67465 -0.304799 0 +387 1.83897 -0.219477 0 +388 1.59378 -0.190213 0 +389 1.24398 -0.0735129 0 +390 1.19618 -0.217714 0 +391 1.34858 -0.160950 0 +392 1.10338 -0.131686 0 +393 1.54336 -0.494967 0 +394 1.35277 -0.666113 0 +395 1.55901 -0.625017 0 +396 1.35114 -0.541681 0 +397 1.10240 -0.353548 0 +398 0.966263 -0.475795 0 +399 1.14327 -0.458345 0 +400 0.935403 -0.375010 0 +401 1.11019 -0.811661 0 +402 0.824944 -0.926017 0 +403 1.04169 -0.935403 0 +404 0.902802 -0.810683 0 +405 0.792992 -0.579758 0 +406 0.589246 -0.661441 0 +407 0.763909 -0.685962 0 +408 0.625017 -0.561242 0 +409 0.507998 -1.00479 0 +410 0.171530 -1.04494 0 +411 0.365794 -1.10338 0 +412 0.317022 -0.956266 0 +413 0.362856 -0.717705 0 +414 0.122521 -0.746389 0 +415 0.268249 -0.809148 0 +416 0.219477 -0.662030 0 +417 -1.04169 -0.935403 0 +418 -0.902802 -0.810683 0 +419 -1.11019 -0.811661 0 +420 -0.824944 -0.926017 0 +421 -0.365794 -1.10338 0 +422 -0.317022 -0.956266 0 +423 -0.507998 -1.00479 0 +424 -0.171530 -1.04494 0 +425 -0.763909 -0.685962 0 +426 -0.625017 -0.561242 0 +427 -0.792992 -0.579758 0 +428 -0.589246 -0.661441 0 +429 -0.268249 -0.809148 0 +430 -0.219477 -0.662030 0 +431 -0.362856 -0.717705 0 +432 -0.122521 -0.746389 0 +433 -1.83897 -0.219477 0 +434 -1.59378 -0.190213 0 +435 -1.74157 -0.102918 0 +436 -1.67465 -0.304799 0 +437 -1.55901 -0.625017 0 +438 -1.35114 -0.541681 0 +439 -1.54336 -0.494967 0 +440 -1.35277 -0.666113 0 +441 -1.34858 -0.160950 0 +442 -1.10338 -0.131686 0 +443 -1.24398 -0.0735129 0 +444 -1.19618 -0.217714 0 +445 -1.14327 -0.458345 0 +446 -0.935403 -0.375010 0 +447 -1.10240 -0.353548 0 +448 -0.966263 -0.475795 0 +449 1.86597 0.110269 0 +450 1.79426 0.326570 0 +451 1.61718 0.0955667 0 +452 1.55503 0.283028 0 +453 1.65360 0.530321 0 +454 1.44939 0.713692 0 +455 1.43312 0.459612 0 +456 1.25614 0.618533 0 +457 1.36838 0.0808641 0 +458 1.31579 0.239485 0 +459 1.11958 0.0661616 0 +460 1.07656 0.195942 0 +461 1.21264 0.388902 0 +462 1.06289 0.523374 0 +463 0.992161 0.318193 0 +464 0.869637 0.428215 0 +465 1.18949 0.869637 0 +466 0.883869 0.992161 0 +467 1.03089 0.753685 0 +468 0.766020 0.859873 0 +469 0.544284 1.07656 0 +470 0.183782 1.11958 0 +471 0.471713 0.933017 0 +472 0.159278 0.970305 0 +473 0.872291 0.637734 0 +474 0.648171 0.727585 0 +475 0.713692 0.521782 0 +476 0.530321 0.595297 0 +477 0.399141 0.789476 0 +478 0.134774 0.821027 0 +479 0.326570 0.645935 0 +480 0.110269 0.671750 0 +481 -1.18949 0.869637 0 +482 -1.03089 0.753685 0 +483 -0.883869 0.992161 0 +484 -0.766020 0.859873 0 +485 -0.872291 0.637734 0 +486 -0.713692 0.521782 0 +487 -0.648171 0.727585 0 +488 -0.530321 0.595297 0 +489 -0.544284 1.07656 0 +490 -0.471713 0.933017 0 +491 -0.183782 1.11958 0 +492 -0.159278 0.970305 0 +493 -0.399141 0.789476 0 +494 -0.326570 0.645935 0 +495 -0.134774 0.821027 0 +496 -0.110269 0.671750 0 +497 -1.86597 0.110269 0 +498 -1.61718 0.0955667 0 +499 -1.79426 0.326570 0 +500 -1.55503 0.283028 0 +501 -1.36838 0.0808641 0 +502 -1.11958 0.0661616 0 +503 -1.31579 0.239485 0 +504 -1.07656 0.195942 0 +505 -1.65360 0.530321 0 +506 -1.43312 0.459612 0 +507 -1.44939 0.713692 0 +508 -1.25614 0.618533 0 +509 -1.21264 0.388902 0 +510 -0.992161 0.318193 0 +511 -1.06289 0.523374 0 +512 -0.869637 0.428215 0 +513 1.86597 -0.110269 0 +514 1.61718 -0.0955667 0 +515 1.79426 -0.326570 0 +516 1.55503 -0.283028 0 +517 1.36838 -0.0808641 0 +518 1.11958 -0.0661616 0 +519 1.31579 -0.239485 0 +520 1.07656 -0.195942 0 +521 1.65360 -0.530321 0 +522 1.43312 -0.459612 0 +523 1.44939 -0.713692 0 +524 1.25614 -0.618533 0 +525 1.21264 -0.388902 0 +526 0.992161 -0.318193 0 +527 1.06289 -0.523374 0 +528 0.869637 -0.428215 0 +529 1.18949 -0.869637 0 +530 1.03089 -0.753685 0 +531 0.883869 -0.992161 0 +532 0.766020 -0.859873 0 +533 0.872291 -0.637734 0 +534 0.713692 -0.521782 0 +535 0.648171 -0.727585 0 +536 0.530321 -0.595297 0 +537 0.544284 -1.07656 0 +538 0.471713 -0.933017 0 +539 0.183782 -1.11958 0 +540 0.159278 -0.970305 0 +541 0.399141 -0.789476 0 +542 0.326570 -0.645935 0 +543 0.134774 -0.821027 0 +544 0.110269 -0.671750 0 +545 -1.18949 -0.869637 0 +546 -0.883869 -0.992161 0 +547 -1.03089 -0.753685 0 +548 -0.766020 -0.859873 0 +549 -0.544284 -1.07656 0 +550 -0.183782 -1.11958 0 +551 -0.471713 -0.933017 0 +552 -0.159278 -0.970305 0 +553 -0.872291 -0.637734 0 +554 -0.648171 -0.727585 0 +555 -0.713692 -0.521782 0 +556 -0.530321 -0.595297 0 +557 -0.399141 -0.789476 0 +558 -0.134774 -0.821027 0 +559 -0.326570 -0.645935 0 +560 -0.110269 -0.671750 0 +561 -1.86597 -0.110269 0 +562 -1.79426 -0.326570 0 +563 -1.61718 -0.0955667 0 +564 -1.55503 -0.283028 0 +565 -1.65360 -0.530321 0 +566 -1.44939 -0.713692 0 +567 -1.43312 -0.459612 0 +568 -1.25614 -0.618533 0 +569 -1.36838 -0.0808641 0 +570 -1.31579 -0.239485 0 +571 -1.11958 -0.0661616 0 +572 -1.07656 -0.195942 0 +573 -1.21264 -0.388902 0 +574 -1.06289 -0.523374 0 +575 -0.992161 -0.318193 0 +576 -0.869637 -0.428215 0 $ENDNOD $ELM 512 diff --git a/tests/manifold/elliptical_manifold_02.cc b/tests/manifold/elliptical_manifold_02.cc index 17b8966091..e6b99121e5 100644 --- a/tests/manifold/elliptical_manifold_02.cc +++ b/tests/manifold/elliptical_manifold_02.cc @@ -28,7 +28,7 @@ #include #include -#define TOLERANCE 1e-12 +#define TOLERANCE 1e-14 @@ -36,13 +36,13 @@ template Point test_push(const Tensor<1, spacedim> &axis, - const double c_parameter, + const double eccentricity, const Point & space_point, unsigned int ref = 1) { EllipticalManifold manifold(Point(), axis, - c_parameter); + eccentricity); const Point chart_point(manifold.push_forward(space_point)); deallog << space_point << " -> "; deallog << chart_point << std::endl; @@ -54,13 +54,13 @@ test_push(const Tensor<1, spacedim> &axis, template Point test_pull(const Tensor<1, spacedim> &axis, - const double c_parameter, + const double eccentricity, const Point & chart_point, unsigned int ref = 1) { EllipticalManifold manifold(Point(), axis, - c_parameter); + eccentricity); const Point space_point(manifold.pull_back(chart_point)); deallog << space_point << " <- "; deallog << chart_point << std::endl; @@ -72,11 +72,11 @@ test_pull(const Tensor<1, spacedim> &axis, // Function that tests pull_back() and push_forward(). void local_test(const Tensor<1, 2> &axis, - const double c_parameter, + const double eccentricity, const Point<2> & space_point) { - const Point<2> pt1 = test_push<2, 2>(axis, c_parameter, space_point); - const Point<2> pt2 = test_pull<2, 2>(axis, c_parameter, pt1); + const Point<2> pt1 = test_push<2, 2>(axis, eccentricity, space_point); + const Point<2> pt2 = test_pull<2, 2>(axis, eccentricity, pt1); if ((space_point - pt2).norm() < TOLERANCE) { deallog << "OK" << std::endl; @@ -95,20 +95,20 @@ test() { // test on a default manifold const Tensor<1, 2> axis({1.0, 0.0}); - const double c_parameter(0.1); - local_test(axis, c_parameter, Point<2>(1.1, 0.0)); - local_test(axis, c_parameter, Point<2>(2.0, 0.0)); - local_test(axis, c_parameter, Point<2>(3.0, 0.0)); - local_test(axis, c_parameter, Point<2>(4.0, 2.0)); + const double eccentricity(0.1); + local_test(axis, eccentricity, Point<2>(1.1, 0.0)); + local_test(axis, eccentricity, Point<2>(2.0, 0.0)); + local_test(axis, eccentricity, Point<2>(3.0, 0.0)); + local_test(axis, eccentricity, Point<2>(4.0, 2.0)); } { // test on a rotated manifold const Tensor<1, 2> axis({1.0, -1.0}); - const double c_parameter(0.1); - local_test(axis, c_parameter, Point<2>(1.1, 0.0)); - local_test(axis, c_parameter, Point<2>(2.0, 0.0)); - local_test(axis, c_parameter, Point<2>(3.0, 0.0)); - local_test(axis, c_parameter, Point<2>(4.0, 2.0)); + const double eccentricity(0.1); + local_test(axis, eccentricity, Point<2>(1.1, 0.0)); + local_test(axis, eccentricity, Point<2>(2.0, 0.0)); + local_test(axis, eccentricity, Point<2>(3.0, 0.0)); + local_test(axis, eccentricity, Point<2>(4.0, 2.0)); } } diff --git a/tests/manifold/elliptical_manifold_02.output b/tests/manifold/elliptical_manifold_02.output index 755935b8f6..0cf687080f 100644 --- a/tests/manifold/elliptical_manifold_02.output +++ b/tests/manifold/elliptical_manifold_02.output @@ -1,25 +1,25 @@ -DEAL::1.10000 0.00000 -> 0.166852 0.00000 -DEAL::1.10000 0.00000 <- 0.166852 0.00000 +DEAL::1.10000 0.00000 -> 11.0000 0.00000 +DEAL::1.10000 0.00000 <- 11.0000 0.00000 DEAL::OK -DEAL::2.00000 0.00000 -> 0.376220 0.00000 -DEAL::2.00000 0.00000 <- 0.376220 0.00000 +DEAL::2.00000 0.00000 -> 20.0000 0.00000 +DEAL::2.00000 0.00000 <- 20.0000 0.00000 DEAL::OK -DEAL::3.00000 0.00000 -> 1.00677 0.00000 -DEAL::3.00000 0.00000 <- 1.00677 0.00000 +DEAL::3.00000 0.00000 -> 30.0000 0.00000 +DEAL::3.00000 0.00000 <- 30.0000 0.00000 DEAL::OK -DEAL::4.00000 2.00000 -> -1.13642 2.48147 -DEAL::4.00000 2.00000 <- -1.13642 2.48147 +DEAL::4.00000 2.00000 -> -16.6459 36.1896 +DEAL::4.00000 2.00000 <- -16.6459 36.1896 DEAL::OK -DEAL::1.10000 0.00000 -> 0.117982 -0.117982 -DEAL::1.10000 0.00000 <- 0.117982 -0.117982 +DEAL::1.10000 0.00000 -> 7.77817 -7.77817 +DEAL::1.10000 0.00000 <- 7.77817 -7.77817 DEAL::OK -DEAL::2.00000 0.00000 -> 0.266027 -0.266027 -DEAL::2.00000 0.00000 <- 0.266027 -0.266027 +DEAL::2.00000 0.00000 -> 14.1421 -14.1421 +DEAL::2.00000 0.00000 <- 14.1421 -14.1421 DEAL::OK -DEAL::3.00000 0.00000 -> 0.711891 -0.711891 -DEAL::3.00000 0.00000 <- 0.711891 -0.711891 +DEAL::3.00000 0.00000 -> 21.2132 -21.2132 +DEAL::3.00000 0.00000 <- 21.2132 -21.2132 DEAL::OK -DEAL::4.00000 2.00000 -> 0.951088 2.55823 -DEAL::4.00000 2.00000 <- 0.951088 2.55823 +DEAL::4.00000 2.00000 -> 13.8195 37.3603 +DEAL::4.00000 2.00000 <- 13.8195 37.3603 DEAL::OK -- 2.39.5