From 2a701c0ce4471d48047458b537fa4043b983a61a Mon Sep 17 00:00:00 2001 From: benSepanski Date: Tue, 30 Jun 2020 10:02:41 -0500 Subject: [PATCH] Some doc fixes, added intersphinx links --- doc/conf.py | 3 +- doc/images/firedrake_mesh_design.gv | 25 ------- doc/images/firedrake_mesh_design.png | Bin 43833 -> 0 bytes doc/interop.rst | 101 +++++++++++++++++++-------- 4 files changed, 75 insertions(+), 54 deletions(-) delete mode 100755 doc/images/firedrake_mesh_design.gv delete mode 100755 doc/images/firedrake_mesh_design.png diff --git a/doc/conf.py b/doc/conf.py index 8ff4e0bb..bcfef766 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -33,6 +33,7 @@ extensions = [ 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.mathjax', + 'sphinx.ext.graphviz', ] # Add any paths that contain templates here, relative to this directory. @@ -281,5 +282,5 @@ intersphinx_mapping = { 'https://documen.tician.de/meshpy': None, 'https://documen.tician.de/modepy': None, 'https://documen.tician.de/loopy': None, - 'https://firedrakeproject.org/' : None + 'https://firedrakeproject.org/': None } diff --git a/doc/images/firedrake_mesh_design.gv b/doc/images/firedrake_mesh_design.gv deleted file mode 100755 index b5465390..00000000 --- a/doc/images/firedrake_mesh_design.gv +++ /dev/null @@ -1,25 +0,0 @@ -// created with graphviz2.38 dot - -digraph{ - // NODES - - top [label="Topological\nMesh"]; - ref [label="Reference\nElement"]; - fspace [label="Function Space"]; - coordless [label="Coordinateless\nFunction"]; - geo [label="Geometric\nMesh"]; - withgeo [label="With\nGeometry"]; - - // EDGES - - top -> fspace; - ref -> fspace; - - fspace -> coordless; - - top -> geo; - coordless -> geo [label="Mesh\nCoordinates"]; - - fspace -> withgeo; - geo -> withgeo; -} diff --git a/doc/images/firedrake_mesh_design.png b/doc/images/firedrake_mesh_design.png deleted file mode 100755 index f394f9e7f3d56138ff15850311e6bcd6dcdd7bbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43833 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ÐvkF`1pR%HXscR z4srcBm*8Mw&@kRo@9BrGUKOqV{cWl2#J~-+W=Z||b~~SgkMG#~{r~x#I6$-gOTDK* zdb|C;+xvTaGu=Zvil3hYt?{{f_3DLd*Otk;tA%~IdZ7G%ZTnp7@<%5pt6#W!b*b#~ z!&=(ff^u?w4<01M>?~rPHER}V9rd&G^ZP*~hiA_8l)1S1fmXW<3O06&>pyyQw0p(c zwMRkOx8!AzPRx!C?lq^peSKNypFh60`a38C-YQHQ;dy?3{_&rmp9@M#cCK2b)gxys1>KGD@X3=U-)eW*dL}0;3keGszPzLg8tvSk zcekmpk8hd({J!n?>!iEI_1*se`L;WnZO<93MY^ z1numJiID;ALJtjPH8wT|9j^gh)o)nwA>meF=&36!gC9P4(BRz8cd<`NSo=p-lK@k6 zbo7oLJ05&^czDZWjSxS-z8xq2e7zp;;qUJr94wrZn|tv2XTz#585R~62M!)&6cZEM z@_5x=&{C0Q%alw_MNghQ>EY`uTAy6<ixMzQLL(+11qr8Zuk6MrX&W?#?GOM(-v?ffOre>%8^j{oks_Vk#%b*P#IXO8? z{%zT`>Cghl<_pXH7Ya`cRCNuT(kB`YS zkG?zD%wF;D&&~?#+S*zkDH9H6cD^GE9Gerevbeapxj}QKXU_1rxw#n_7&PqLXZPjn z*Of6nYu2uH1zoCf`ZVM~2_u`@Um~uquAm9Ez(7IJ)C*)nZOYWCo$=Wj88;p!9RHh{ zn0TRmSufeMN2a&8mmyB<)2mlmD`Q#&rc9mcs3O$a{ij=8KkCVaOP3BEXk`9)D|`LH zGiQAMEC(%RP0P(at5*;l6coe+ny&qLTppCm-dgBxXjtv zx^$_AwzjbN{ZF5Y3Jt|NT{N_{os*N5U6dyNC=Cq_ebfxvS?QuA=%OU}({RfSFW^7oH+5v0;QiXo#Nx;|8yoFXka|`H_>43wdMZuKYssC zzPc)O%i=8ys^;^3o04+7TdGlt@l@=xmNy(F`2YW#qpCpY~R<2yRVf*&!&PHya zJ5E-;VQI?Q=3~00;$u=obTsGyf-Q>;crN#}wz6vf==qb8k&$qEn(mLU*W&|&f}E`R z4jTwX987-^{2efabVbTCj>R#wLGM2TnnBjoKC3(Pjp zcPlM5{qyHfhC4`5M^`s6C`hR|LN|BKgVlzhQ!j38V66WBZmQJvvj#l2cmDYG%h@iP zvqUxQ!__;-arU77`x5d2>x$AmiSuuT2{_8fyRONt!WZM#uS2t5>bcIG#8| zF8@FSqlT8&BH6{PVIOvPf~MV$c8h~1*xzdKTz))r=FE-8HExAHy}h7?)(5X&7k64X zp-iUj<;9-f-q26~6}5ldJuyu;Iw2vUVXk%grM^Q3wzF2QTSfvvj99-6RUgO@X(A6J~N#`dV?~~oK*ubYhH7DoHxet;@FJHNGWS(tx z!M8V&ph9lTV*{W5l$;#U)Z)dyi%i--?q2xw^Rr>~x12w(eQ)Q7JDSJ?w@T{@POgnot@1M4GgyeC6*n3c+GfP3{$Y^hNkb9iJc-JFZrieYx+jfi0+4 zul=Lv)6JVVA3pB4KlXfnecz!&PPYmrmboXe&R=-!_;GeMHMJX?Qn}x1_?U-;gtR<( zkN{cbX7uap>*HK@&h34De1HD_1#MYuX>SLe*e}_CeDW?;6_qW!a-E!03 zu%NJzk>SYEqgyNV^z{7x?9p*`bp@rj3LCkY*jPbPQPr@8`3dum8E!)zuZWNQ8}7ip7azTi)HSna1f#s;aC9PA9#8_KeMmW13E6Q!_jN zsXP8oPE0IJj7G-B58uD<*Wdpqs4m~H_siSc;ZJw@MIL;=u(Cl{$WWEzL zTbqC1u5~|q>9Y0f`*-cKx@EXzL(~1kvK9plvu4fu@afYc+1821>gwtY`ubPgTwOcg zZ&%mW_I~#Ga67+yM1;ho$&(+xdJ4|6MM^{yP@ekXuAQpk(PN`?a7lT7y1tGQOf(V_=&-Z^82;o3`^RQyzKOU zesAR#XR5fFo}ZDyA=lsD$jt5)`{L`@ucH0$&5ewj*00ZB{d>xsum$RTXRm--$_rV; zK1ebgI5*ciF+00^s&@FM(t@i3;d2-h9voie zv&Uoh^y%tfPbOSm<_nshuCS5wn{THp_w;Jbe1-&26~A$w+toJP&m6nYocj|V7AAJA zPqsVv_O`_5=jLvCykaj(CAD0(J#dq4^|u4(&--Vc;=Xl5(oWf|=10Ms`}^hNYrl%F zi{0%8s*#G0aoH(9ZRWRYm_1uMY)!;P<=?TAZgD22rkU;;jiNQnT0y5MRaI4e`0&9Y z7_@MSXYn-9Rs)DEYi(_9OH0dxUteF}*qqM))`Dm8wpFWEWw=i`#AT;^d4^%~hr8wX z!E3jCe0V_8({99A_1pq&Rst;<(}~{Jv$plL!FmU0=dE6AvX&->oSUfZo{*5hU~XgcT9_Zo22`^_{^T1g43ut4=Y5o02j`d0lf(}IQi+XhK$=^SJj&wIO=r1=B;9#+R_gqV; zv*5`I!CQt^B4Hn9^8J3)t#6Qj&t}KYoexh=R^Re?#nhG-7U(Xij8f^mr5c{lvCVh# zdAc{x<%NfYw0!tbuw&OQCl#TCr%!vYvXA@pb=|sky30KB?k&In$8LMu+SRL9UwQO0 zCUE+jeUFNM{`%FmyGKPl=HWN}{;j1m(>M;7fKIECG)!VCEGkk0Encpp7}44UHo z_~px#s=dpXFR%E$V1dHNZ)fB6v+F0l4=>t3Z{EB|-*sPCo~$j}@yF58u|>d1Nm-eb zVbYvAK9HHvCr_UWI>r67E3%Ic{rvTM{N#ns?U(u#UBA|O^_&7NaWynBP5? zrJiCnk*#ZOV-`-f@i=n)xG=+`q#HBe?%+AgFP4~?$ii^)%o!2;u&}UeO2yURQ*EEU zeS0^par##NcL|qk_TRgA@6mqmec=lOR%~LufA8MBG9Jw}-t8~92r9chm>yr}=-|Kr zz7fT5d+Dz)nGE{Be^}=4`N-Drf35xPnQtxF*w});*Z==p&M;xux(hY4!?$K%*ZcAF zry}T7`_;*%)3=s}7EbAVB`YSm_2bj&@j|(|xgXuD+-5zIw7b6b;-5FWbTgg?JAOX? zbZ@MCy#DLbO>*2E912X04Jm19`##yJq^6~Lm1_R{^=sQMUEle&-y{nQ3P5GK_2Klm zo73a#IxUNz9XNZI7qlAx@ro@!KR;(?kh80~@$fna3lqbp@a|7vzP$NTX2QbGo_u## zsYS_)30KrR`U1XhEzQo(2K7~}+dye9{Mh4<;BEbql8OKR{0#EGWq65&iIIhg@z3AC z(RY_sZa@C%>1jrXtec+i(sg#eNpRnu&AWYCu9uhB?%QS4cJH=k*s^=xx-~Yh_HBFD zEv_Gum&JN*>EV)_i{1M>T3cCXnr4e-f~q0+RFATk0-yF@RG&9*UXZxQ&RkZe#w$lp zfaZ2Hq~Cp9us~sD_X63weY-bkzTR&$Jy=1Y!+n2&c+BP9ImuzT0b7A7{jGekZ7?dY$Y$ z21e0$hvWCvSQeI+f*LB(m#0mfyky=pey9S?iEj)8`~+fF@G5?3L01%6^BvZRNlsSI%E}5^_h574%$^|7F$@-E zZzODNY!WguPVAd;v?P1#)Ts;yxa=+$uZ`Hq^z`Y|8#@Y>dwO~{)cvixHBrJ%afj#q zh=b`>Ci?pNQ>IKwczmq)#r^&D?PGxhxZ{N#s+T06SBl7bBk?s`Q=N`lT&oKPf`nKOmY znYI7;;g64xKYaA4sq*tPMP1$AGL^Q8voBo=%E-z(m7AMTnaDbSVcYB`(0I@c>vFw! z_xJl-2Tj+B-zQ@u$N%@&SLgk8e+{y(Xn?u`7cU0>k?22u7<9I^wbtSURaI33BO^#> zNpe+5X=&lNH<1xhQAx*oBr85VV0`PbevSWpJBGM#_lvgw`c)MY8ru1uSzrBX(yr~7 zE(Lvge}8^ik66UP^cBVi1_!2UhbN?^v8AV{KY8}-Qr{P^YwKcfFMJD{?0TTWle={3 z(lIA+Y4k#MX>^2F)Wi)B|{R`Z*~!Oh)mwmot2q$;+s50cAd-Q3(d zIyxE_E>r}a-qzH_bZeqj>+#2lS679uJ=eHy?b=>Z?XVShv^;wL*w+7(VP@l50Pgik zPBlt6z~JKIvLOHdKG4}Ukzb^xr6m?BrBZR=&8qJRfu#M{8^Aqvsropjn25{QUkED>S+^Q#Wtke7HkUImPZfXawQn z#Xykm8yd20FIm>T$j-<}cy?x{09PwR!`a#9$`%$93?XIDd?W8#MMXt{3_9@mqsG#t zDJz#OVL5i}*p}oi2e|AOZvr)WSFF%5F*Qv*)*}h(F@f6TCZ?v044|>Zr>8_uX+{^7 zm**RP*|cw;9B8w~l#ak<%a*CxRDa`1OH13b7;Mm`GiT2Vii)x-D=W*`R0L!(iu(Hc zPPI8L4>|l+z0@o}JDa<@y1Hwn1n43O$K+&X>%-|Y!a-+&?Em*`_0g=z-rio&1(ip; z#Whv4@2(16yV36il1e#x1U=VHo+_$Jf^|_m&9* zXoGJ;ZmzGT;9?zBRn-euuB5QePqb=|HeIn*->5L;q0atIn}n7wU8x+x&h?xItKN3& z?>q4G^Ye+bW_ekAaj$t`oCUJ?c%SUy?f2_I=e~maMH@E;{sGMvwkPueD&%T!=5>;#UCCV3_3dF_vIr;SpNR{+PrR^Ue)(^ zybqr4agdUddU18N_^+?8+q=5BOiWA~1eD?=7Oz{!7aAJ6V#SIBo72x9Veg+bN$8`a zs=dAZ)vH$-;`~k+$uyOO~j7d3Dv>=Golij~_lcIeBfI!rC=!Tw-Em{{8!%4?4t2QHP~u+TX%FK^wM?HaBcB99&(Zhyoa=;y}=I^=KGtgc6o zl0H<}L_|k}mTfO~?>`3G7@T=YrA%N!#=$0514F}uA0HpjbkA%Qt#QjedgMsL`FXaW zxsR%^uUdcossfE-R#sMmHurpfejc=u5p?>DnVA^qQXkNOa!!sx)t8J9KWjextm%=n zl>#kr{99(VcEbh%&>7Bter`oYMxYp&I+c~-!RMbdtV*>&iwjOpR$u*u^~k%f^Us|X z1VF2npqcI4yL)@PYkz-xcw=KS14DRtxJ}g;4oywX3l}bcP89$hO##~4Jz32+=%nY` zC$1_&ie_e@DJ{_9iDze2gC-M6<)TUuKm-q~3UO4MyUl1%32=Ae63{rvnu19xv{TnPyeS5{PH6ciNX;O9Sn zcXxSWULIeg14E+&gSfc(ix)30^xe!22@hYKe}5n7>Lbu4HMa_*5?JR4dVl=*(W35; zg_Dz0Kwu!FySqE+2;i$%w_d%eB?;O}$HC3*91$S_I`ri+XwJUuzZ^y7L!!+!Grf3UyJ z$Wk>h5Rf*@0bSqtR>Nqcwt3H~u8xiapatw{XCzWmQb1?AwzjrfRD4j-{#KNhpWpv} z-)}xvR#px^KDW3y@R9JDmzO=tBc+HLw;Qr)c(FJ~Kc}XJ9-rn4Kd3m5|2GH>jUtVA5XKG|9D=V`oe<$;{LhJp- z#qJxnY*`|^ICRYeV=ZM(P0n-Y&do5-ms_)D&4ejaS~@y7z^#UB%D%JBctJC2RaI6$ zYV1H>^qj1wsHoUjW->K2AmG5c50cAt`{it#+S}PdQ>=R`J~9;+7Ftw)({byU^R<>@ zPIz)+BIqnD(8=$)xw#gWmWiNqhC!8lhE}_1O(zwfQU%TjvW?e zHUX}^^7e9|GXiEBr%#wNg@v8HU2OG)uO(|9829k7va-&wueSp&mEn~(1I?m)PtyrJ zshKL7*)68)l$E6gI;9CTBmk=F&z@Z>+r8`6t1O%Pe{)1@+9sB~x}tgG=FNu>54U&p z_8y&QTYckbgz4g?OItyMtjBt#H8eFD=bsn%&%GEdDk8$bp#6h~dC#1epCBId0f7spJ+_o&% z40Uv5EGa1osY(k14fV!2Ix@=0%7TuaoH0Wp?2YJ= zR#Q+{Z;uj_;^N{8sp7E%)%FQTj~;y_DVcv~$HFQ3CzdT)a^U!Jb{jc<8##VEJ39{# zj|LBwpxxbvUQN4s@1C4_-kpZdPR_KmvsB+*f5%x=TpU`rvC3>Z-(rKMOP9_t%at-Q zG5G+RYrb$H;9>5sA3qi>S;8`J-n<8&e=@|0ovr@<4m3FR@87>H(;fpG8<}>TczI?gz1J5TF*pNb8=e~V*dhz>sWMySR zEh*5^3M#FqPo6yZdi{PsYq!}E2h&AB$BJm^=^eYeI(%wT+4M=1n%>^tp8WdS+O>Jc zB`*SI_KS;(Cf?sy``}|mL20RLNXV2cpP?fVdW)3Z`xdNN;qmJ0!Gi}2N=sQkd|ET- z_~V18PjmnL`IAARZts)iw_D%8e%<}yLji-p_SldR6}#8soi3o+jQ)QAZl2uKa4~0R zXV7_eU%!6+@aa=f)NT{dYW9zhk8jwxaiQ$e+?K>AIw~qH8QIyBqqpa2uJw(Nk7sHC zFBmU{3`2l!_25ucF*2IOpm6f!$w#@6#mEzG#VH7M+!o?sVQIMX`qAUZoD7d%zVrk! z6k9-RZ{=TS{JvACy1AhL=<(x|pFBx<^zxXdujN^|a3N?x(3NY~F7;hf3;Q6sGipNu<4pT{yUeVtpsd}w zqBTx&^E``hdx$xlG)|6WXYuzxFZNqkTU(i73D@)0Vt>BfdjF#C_O0!!D!$(>@7%oE z_^kxjM$jeAB`*SQ8QwbT_R^rJ`0J}s&|a4lr%r+9J*V8-HhsGIpTB=6PM_X>u$lez zoi^!v8b7u5UvK;tr~LY3-@Dz)>#MJxnR|EpCQ)(m$DrFM_W%EzuM@SUqfBNe=$th< zyPA%U4vt%aw~pxDGAjCfGkt#IEJ`rjD9gWDb5-PKF4r>CZ#tcg(&U}(7F8r5gx z{&&l@y6}RV!9hV!_Pq}W^*D2HZ##JWIJ>W}@0Q0WLc_wu+IXeitlf5l=F1-4+L{fz zJARsO^olL^$;Wsqs;Um%y}LJS z9YDq~;lv4#mEE&Wo;+#vd!Op>Z>sr~m6a_MrvLqVXNAnV_x2hZD~@_dzblQIy=k4~ zmhUsxeA`)9u`s}+rnYwJw*0rX9`APlG-dMl_n$O#rsnqfKUae)@W>4bj8}O+g@lH> zR@lgaj?H_k@ivKd{>x2WU0jP+ul7DS$I{uFOYuo+;q$i4BJ=$Gd?7J0wc;CTadGp0 zI6Qp$Qd4i640QP7Hy0Pzq+9-z!36T33*)ZCxM?wFsS|LW*G z0jG5_JDs*{+2R4(@vTt=S`Wi8!Mgn2g}zIAWf!Nt+~hr7&rv~O!IC8|n)g?vUb)>Z zuAh*S(sJOyfjq;B_kMnUzOmwCQb=g1qq}>1*&MTtb~VdRCnYB*=I5X9vc0TmWn~55 zh~E_hI*eu7v}s!LZy3WqNLqs8?8HRn%;O1HI_A!meRprKw{=@gN_zV0qa3mgqBU-O zpFV#E?H{^jC}EnEnF%^{^HQIp_|2O)Ul}^FgZ8@z#KrM}HsOI3q@=Wb`c!nw@X4cp ze}BK>ng7zV>Xpzc7)(t~w-G z_h)Aa`!I9f;WKAIhq-P^F5zB#Hv9fv5izl#nN803-rd{FZEL$X?0Qsy>6!<|v1Um} zI8xHmK+d`2qTv$C9$ zl9bf^=6G0pO~1Rdm>qoj=iNANH~Fo7V$^*{XU3%4r>bhpE$q2@cvOxZ zJGNxis;;srde${R3=Bah{4WlUn9ipxe(TmP(CHTU_Ezt{I^&O|aT>#feGbx6Qd)H} z(}I`#F*`E3E5=s*}mMvSRwV7w3($%Y1L93vDe7WquaP?|$ zYrpAt_g06m{q>&lTKoAE7k8DuUa)*QXl2x;KBaI+N5@Cq+g)8<-}aq)&=xXj`uqh; z^B6unY?pUZ5IAu6u54RdTT$d)FImv}2N_vehnD%y&TyaD{pCx^R;h)|3#4n@QbJB` z&A#3-ZJOB6$Nlyh?k|N-{+Ft(tbEk!-_+E!L`=g``mX+4U9(AZ=IHEmd+_@8?S-|g zR`37!t2-kzbK?E_|8vVkb{ZNQDzfv*ERbCseC4}&M_{CN*&Bst&z>z=v7)1FO8B)s zJBq}^RJo0}$9~S;d3EESy?d8Vvw0H7-MLhN^XL6lVYzRE=W^F&W@<`Wm1x}DQ)vv^ zY!_SpaNW}t++Y9jCWS=R*4h@9l&EY@Kd%O!JSdU+K0or)A+7K!J13e=x@~%Y+uqWw zoz0BppnCyp3?^(nziE@v%(p9=+uGPbdozrxzGQrQbd>v6;gh!AGyXq0DSRu?s#Ubc zO|huBxU;j9v-11ha!+Sx=C>BIYO4c^RoY!o-C9>^9+3U|N>S_V=<@Ke^1dhkqOzT@ zg0?V)t_~AqW@avWf6w+-;geSn4mLv;wfZGz-!kHwJY@J6%8i*v-x9 z9}lw2mvsL;Kl7WZscGWtYioZzogObBCwK2{mo4bNg98T-HkS4HC9}>CT+u14uB4;G zqo}9|S{3Kz?VahKB(h@BBBpLJ-9r^ zaPHi>j^19^v@|tPLwD*_S8Jig3_Ex3oMDnFly`4W=j-e1lR;+(DQh0tTm3yCIJkLZ z^6^W3monEpF!nn5{PV;aGdPlylR?XNLCZ;HJ0~vg=-}{~VZgYz`ny|FlG3q$d4KCk zhd?LOSXo)U`o2_qL(_SUi7QuXDk&?2%6L$-08~qzI&~`Jc+#!~ixx4xzP|oAXj5*Ka8E|Jpy(G&Fb-Cb$-J{iY|2ni)6CD1;|)6?}Y z_Z{8Sv|@$Eho3cbtjqZn6%|3@{_D$2XX|N)?(VCN*4v62AvbuBUPR8+|u4T*ARMgc$3z@bo-Xj$D zK{D&t_xJt5%l#hy`S}^V#5L&%M@4nDvx?BgzGEjqN1xBNE>HUL;o*R%XKHP+M!; zCuiIB@NoO%-|zPy2Q9zo>EY3d+|*KLvUGRtZ?i31wj|`|`&*yVPGp@Q$a(A5tsC2N zrHhJ+He_AZ0xg>d?W{GwUvpURO;Au^VB_E4-;-}_NCaI%u*kK$;QzncH#asecK>qq zG&qEB-UMw&2l>!!E7RghT-@9r5A)kUSU$hbDLGmB+Pc_o&?5I~)23}%Tv~m${u^j* z@U^wk;JWnUirI$AY-`r60UZo|D=>~z`$vx#Xql;l0|TFoMZRdjEUC}+ZQfWd|RQ_2wtm~3_1&VN1^gt zi}fv~FAcQT#_z8Kc@)$E1Ks(yZ=YPZxPDt}D=TOj)sm%4FZQjtW@Kda0n{w~@Zg{T z2aATT?$M3O$3a(H`P=`UB3jL9X=$mUtsQ(@&;G9EI(!&3zHNO4~uxHMZx1a$Rw|+VBIo?-R1YWp&dGVZYS3|?YK`Rh7H8nx&9nQ`+2ZfM{ zsp-Lc;1$$|LCz|D6*6PSj0=6Mx6PV0>%#u}`kJp-!?UUniY2hlf2nxt^l8u)elK2R zsHmxdR)3zKZ{Ob5#+H+l13EOHot+&ta(L^Olyf^@E9k(|8%a(J1wd!;ojnU0GX{<8 zO`6p7=1q=?nc1NO2OMe)W?PkNfmSUmD=XjHxVzW7{2l19MDzT6DdM@3Zn96GKkw#F z_wwQb-PJaGw)Vfa{P}jZ38|^9+1c3l^q;}Q68nQ(w%#;jRR@$vF|tG~ay z(z<8XEGf{~3+To&O-;f3pyMg_J$?RMSzVod=gyrg)~#dv@QFLixs8W${`vO3du`kJ z<@uC!^5*+;X+1TUELQiUxEgkOG`^Lva+&@=PBsw>V9lIa^r?XGdq9V)TvXi zoIP}iNlNO{;+4rsNe|w<>DgQT{n6rnyGggtH~pNyHTycK5equp;H^gNAuhYadz!ks zxIjk$E?L6z^y$+_#$^l|+S<&DETGc{*R5+?w{G2!)jwj)xxaTVh~Hla8WQj9^qj7z z@&4{^@q72~fp&gBIXQXvKQ>9tva&Kz6}0c?GwEA_yIMqR+Fr78C`N3_nD}E+uK%oq zK^I+=1VP0n=uBf!S8k48;{7eDGx9)#YCk?cesOoVIcT^1v14wxChqDza>NCcfG%E~ zST;oubk)W#PG@K5Id-*D8#iwJvH$;X`&)&(dVl<=01b14CrC;pwSVwj?(LDa7Gvj= zIS?LSdvsdgl*!WOc?pk>bZ$vL!3vT;3p(LePEIajXOZfsPoFZ52Uger|7))OgXi!H zJ$rlm8M9|6pPZzc%cq!nYuenoy^kIx^~l@LD-+q7z&by1mtt&eY)f04lCm=M?QOY> zW!-aCRa8JH^&}tfTPo|S7jZCsM&7Aw*Tg`3y!d3TKr7;I6|9)vpNlSyy!7SUS9-Wk=6t}11;@fi{A`hm|kUMtd2+P5P z2SLZ5etUD%*}BiGtFI3_-;&`zQ5!Tl$X--bbjbXE4YRzwJm}oBEss~snK5HVUU?Zm zD8txZyS6qOv)0a^5R7X=v0ti^Lq+_6N3(}V?U3&1~LB{QQcVC$mKk!aU|G{&Z zfuW?NL_kWai=AIC;q$YzTOJ1pLT3A*#~Fe=c4W=kwSp279iZiQ`~Q66erw?+E-Bgh z^73-$;NZz+BCVi=Dxt|Ou6N|y+uIMHK5gBy#pG7ulw}JSGJ?(!J~Pue(>+k)TKjne zA8uY=-Wi6;Y@pTeGiGprI=vIY=k@vd`R%Cwp0{0Q5+^8;C8mI8p`4tYK-Xt&&AxuA zZ?Q;VV4#FaM!*$`u7YJw81>y)BD1L|z|GmssZ8BEZ4Iv}D<`N7vRygAM?a z^?bK3Zg1Dk&FPOpW9gv7T-+0HNZK7X$bIy&0@OAJOk^Xf1P!UH8$rh zPj;+p>#nu2$NBRE0b3jb4h33%{`2p{^qhtQ z=Y1+QamF(zzW-WtqUZg4bAP#c$M482_nYffR%T}R_e=1)(~_l;k&#liGQn+3^977F zK#?LIU(;w?{q4b}rQR{qjdO0^yt$+P|Gq!Z)6dUy)DZFOII!HV#_7a_HIbXy?EidV z&bzmVQ(9Vj-D$~5&z_~tm^F)uAtyIiP(*~qZhrrc9Tr!vT|0E>P}5_s<6^9KiYXpZ zQBe;bJ_H^5_~uQ{idyOp>C&YI>(}>-YKIks#Qyj3^}TrK&YkSt)24}S*}C=O z#fyv#E7q>PxL}#qPOQQ+`L)% zK=;0nmzVn&$ILBy_Uu{hyUW+E9qW^|-ca%~NHlDTl?X`J%U7=sfe!0=eSQ7o>+$td zzt=K5R99OE1qE5GS(jhSx^LY&Jgq08wrthi6^j=x07qnGbTofO&%AkZmo8n}ka1B- zG{mH$#!mj$ty_1Obv*c3abth|{$qT{rz}(lMf=;^+xZW4=S|qxb3ISi*m!eZ^2gHB z(vP>Y*DD$sO**_Pq?u{HfKf{H_B_|fNJ%lhm>aq_)vMO5Y4K1AN=#*b{Q2i6#l@hT z=nM@Hn%}Rv{QmtyO^pwniiaOPc+ddyD`>TKV`Jl`<+ZV~cMHv^KWi*h}Kci z{O`)(qQ@_O+0?cLX!I~OlbzEk@8!_S(MvN9)kclL)5 zA98SUJ=&!*b>T`;4#mYyhHZ!2`IWV_xZb{fd$%p~-p*onKR-X^yv2L>%IfOsGBhk( zrdCo`wrKNaVP9Wg28P<&+Mn?!{AQVeIxiP4UVQoO`c_acID7qGHoN)#?fmkGjvPrj zQo53xtH$ZX3eb66E-oyf8*SwJ+2#7%`|W;l>@I)*?(>{qzpAE8pT2m}A|`%08wX!s z-dC?*D~fdoMn{8A(Cj#xWK;jICc-o`JNxjZOG4A8O*1evJJu_0E+8Vp5*{87I?3$Z zInYgY8#ZnXv`PsM1_i;fBO8;CgHO%hxKZ#xw?9K@Xs7^JtA>t_i>GI&%@b82&Ia+? ze~{bsx@;Ec>gp!u=JI-bd;82X@%*kEZBW?#p>10xw*QpUcUxi5p7~(a^m)U(`>OfZ{C0!zvkxVJ9h3oc=P7Y z`+}aYnn3Zdb|lGg-|u(Upz9iXdwW4==ghOMW&_Q}%rpiC`G(D#C)>x~zIn6oTT5(w ze1BIL*H2zh10ppw6?ArVacggHn3PmFw3* zR}x!VTAny}?%3Pg+ZQfh&Yqs04r&3+n>VkZyu5w$=FPXxxSW(Y{P*|wz=(*BLx-F= zT0yAeXcDNke*8H5zJ2>XeEljr^}WV1DUh)@yu7_ZN56gfQX(QI21-J5a&jL&e+FGe zI!z~%$=TU?-D#OpRaI5c+1g=YVnxNpielZMWh5LdOrZ6KKR-QvT-3z|N)8i1w<3X# z1e#pO5Z7vrITarJsif z2NN^%@w3%Vjs6^x0lB%l|9+mYR{|Y${{CL;;>F5N&d#7#6=Qpb#VOuJys*1|W%*T!$i`bmTtE8m# z;L)Q)rIlF^UtV4gI_EqnNT{p3`{AosT^$`9YofRN*=_Qe3d*B*OG-)}+}N1>AiI4PS2AkDJm)|3$|?&0}Zom%e|eDpKt#x zH~4|D(ZSNPGEf0NzvdICl(aNxx!wLhPxUu!-THKwN$<6L_xeD`J-xrTcg31DM?l+P zK)vf*TQZZcsj=EA3P+TcnVIF^>j5nx{QT@JsDHl9XXc^ONMWz=aPgqvU{LpN*Dfm; zcX!aeBgvO)-8QER88J?sK3&eQ)%hlf~GQc@DWy}21P-SnZPlvL97b+Mp} z-uLX?D<~z^W&h_Pf5o>qH&<+RjJ0a<5hyJ!1uX97+3jJbe*?Sb4p%b-(+?FM<*sKTU2~d z0Bv!2_Uu_=eE+Tzj*9_3hHq|d<*xqz?&$r0-^}0K*x3Af(g_X`F|kLW%5#clFnDXx zGxPnDpG;qH&KKala`kHK*6iy^|Ns5<@bsK%kSH%L-F@T64ZH8xuU&g|q*FL+XW!c0 zyREsnxGvnh$*Hfe|L6Pu|FWMM zy}zxD(T(Gx#>I;l&zv~X5xcvr_jM4PuD$(y#)OX_Ki=II9u~Ig#0igU;UTJOYTvBf z1Kr%*))zB=skAMQN^cOPxG>;LtE^P&Q1ttz{GO~aNgCR<-`yRjux zc-89F6DLl*m|GnhDhj$tche>#3k!=A+r3qUKK!f+2@BJj%jTps5p)*qi8E(flFpo* z_v5PVuUD^MKYae2U0GTA$+Krp@$vNsidT5I3-E$YQdzM=13U~N{*B?oIqUZd#>Sh& z%TGT(-p|P3v~a`iZO@9FJoxkT^NMxrj;)K`%~pO%qV|zO%Zdx1pP#?Er}A@ziwn#3r9B)BY62X)a=SY_ z6G7*VZGZm!`RRHw4wk*Uva9~B+2LE37a1wZd_YNA+5PwRz|Pg->y2V#W2a4>YWiTK z$d8tch7~I`%&NcTT)T4RNU5gsq!}|#Fl^Yg$>^9wGA}Q$kAlF4Q>VPx8bn1!Pi|*U z;N|7Ldrsc#0sj`?xuDc^c8=xd>%T7wm%bEO^b9n(%goOA;Kjwo28My zZEbC3ED9Ld`Qm*X z>!-I$6FJtcTX#pq!f)@NPp3imN~q7Tx%Ax7L}#*qshErmPi<}Ol4Z+^Vo$A@$h%#H zg9UV9(w;qgp8QTx&NVVJQV`&%ntQwW#L`WQGn(%%>jPZ{vS5KiNLX0Xt1Bz_e!DDe zrz(Ejw{gM*Jx z&z{-t6CY*8ZmNHOb2B@`2T-1TeQj-U70>+h;Z?k)M;?C^5EE+)Uhb!P-#^x>WyNyP zw(_}i=hpsvt|ol>=H_%k85z*F!h@iblM?bDN!8#Zlnij0h0Un}yXWrgBR zlY?evW-{SU#}-eIt6F(GQ(qP`gcf8Iy=*N66@N|XIWWUuS}iT7aUM`(e<5gC(H2RwEq5r7*5H4 zIs3Yv%*)HZ-U4edGBR~!-tCV^=5c)+_=%A{P^_?bmZimYZE3+V3_D}C0jPi*x0zDvhv`C z3lly|wL2+IRM6Dyd~M{WVr?y5{QTU~lb1Ozsw`Z%u;Rl5$Msv|LS0paKyxx3U0ts} z&xqWdrg>Ly_L-jJj}=agi66@mW>A6?UE;wd?SYd9|%^$@#e|Ftw z%Zk5gwPWknt)M#}0|Eq8ggDJ|Z>ii@uU1u2Ik8@Mw_f;NC(!+_85t`+%}w6*PE0Yy zM>ld)OYY50t&_Jse*Ac3vZ+~QJ zbhtO|(XXwWK7acB`Dym$Q`c5c)$LueBkrxk+r`I=+PiX}K7YP>(ITZvY1{Q{EBt(Y z&rY~E{UWHPbnNlR2v5(>OMgKzzwyeIkYmq3TSlJVmTsVR`}*gj63L)>tzFA?ILsxEz zjWqZ!p6ASYzVX}lJ9c*t$ou{NJ6E|{UP?+T!r8g`lAc^BXc$&IeBGPx62C4@6EGDQ z5^7TQo|f?U*H^9BMgH5qz3I3AXR+qCz=`QEOFE0W?cRqdm`0=m&idohCiYYp_b$@0=Mnr5lZ~s4L>DyED@vCtdHQthcQ#y4oe^;#E zs!yNK+Z!7j8<)Mfu#mBT=>c^Y=bGPdx1Tw1pg~kbWW}1Zvt~(&2@5OpCm+=}P5pb@ zwmE2He*8z(*HT#-858w47FUUQ0Yx>uZr}LP)j(>Ok zwsccc{64KMTeogZJw0us`Mru}&!v|b`AvPf zoS~tijH2rj%7;(tg@69PkU9GL3(xC?Inpa?Z}w`bsV%#H zcHw^YibjV6r%s(}`_9JaoSv>8y|YLaG+|Wz>B-3j=N6jga$Zz;`}QpdC#Pd!p&@92 zM)EP9b>6c;83Z&r^5KEw)Gfy)oKsR%f`Wq!zrG5!u(sxZWdn*m-bKrox99KwD|UIg zKj;eDv&&X0fld*s@3g&kAww#{r!>~8QVa;LERgST&OmweXzz; zZf2gQ7u$7ux_)u&q+=VmZe?XqQBzAgKhHM#-o4Aq{Xw^;f{r5j{eJ&+{&-ogSBKSI znoCPc9{AV)5(XU|@%Q)l$9uou3x2)xp8Bfj?RlV!Sz}{kE$aW-$jHdFmCAyO_2!qa zUV$2mpq-+iQ9#HsH6M{U{O|AYhYue%t_)tTWN%-81MD>;#Wy!Lg3dSA(A912 z?(VMPN-(Okt@;AG!{WxiTI;0bp3-2wvzLBs9~7AUNV z-!JDs&*tGSolBrN`uDNF{=n6%qM)mt>gw#u-reEM&3!8vKO3a=$dxN1p!wITDyvPK zH-pap*s;T6%l7TXu~LknS+=9y;*ZbQ|1O;YPo8h)D}E=kZ@;j zwfM!07dyJU5AUh`JYm|jWtUD~Kk+{#Bt$_+ho`Qt4zxBq@9wVF+TY&}o;Z;aa(f}D z&2MC4a%5fXZqV`bN4v$9b#!>%y?Y0m;@!1t*ABgWrya%5`L3;t<#u;>2Q7pV*NZvO z$}R5pSL zv5S%*Xchx>?%n$R|9;Kb<_+##Sy)>?j{pBl{N261-174BpaJh0rrBa;@9uPd`c$;; zbZ|9j$a~+vU)i9G=r3Ou_Mc}1nnUjD?%r7SHS5KT7d@4{U)sZ41eStYvUBG2D7*JP zczC$|!}ss*E-oxiPEHHfuRmW}ndPh@0_uorYHDWW=DJ2ifR2)5ke8RAdL7hReK|cu z>*&#L@xmV;5>wLB4qdq-q8+}@rJ%roiHRv8A>lx2=VQOZLc>d!EPetUf!dx*MoMSpD*p4^WxPj zCr3v{&>+JcyILtxQPB;XH#=u!XxyuMty@u9Ss1It0P2JrbRJCtEwI+r#5&Bo|D}8>{%M9XAv10dE(^B#sCeL{^N%q9qry&@i9p!Vgm!{s_LR5(6LR|pYnk= z0xF1b1%`yMEDY#a9lrk2%gf7W7$&oUcJDub&R$<%e`b#5+0eH zT{+kaxsf|IR(8wQt)NuT$}N^~b5km)L7HFxJK8T>P74$&GbVd21>IBB;-tvM%?%nH znKVf#Bs~0d|4h4Dt2b}ne7NMTfAG{Pu4~t>ZP>J_Y3b6Xe^L_@8Rh!f?dIFB$ecHO z_UwxnFE&n_Cf0E@>B^NW4mx6s_wAEQ+9*+4TDoG@DyPay%esF*)3sHsNPenh2ODiiaLG$Ljc3D+gY~Qlw zOC{(GFdklBMuuO%er055H-~7ox+uN;EE5|W`;+&`sZ(5LW@exKB{%uYD9@c*v7(Ve8hf zEwY|0Aa|T-aSYZLa5}-_*yzupD9plYr`X~n@Si=8$Jl5ChuaGV1_lOCS3j3^P6`_ for more info on how topological mesh information is stored @@ -78,47 +78,92 @@ roughly as so not require a positive orientation of elements and that its reference traingle is different than specified in :mod:`modepy`. -(2) A ``MeshTopology`` which holds information about connectivity +(2) A :class:`firedrake.mesh.MeshTopology` + which holds information about connectivity and other topological properties, but nothing about geometry/coordinates etc. -(3) A ``FunctionSpace`` created from a ``FInAT`` element and a - ``MeshTopology`` which allows us to define functions - mapping the nodes (defined by the ``FInAT`` element) of - each element in the ``MeshTopology`` to some values - -(4) A ``CoordinatelessFunction`` (in the sense that its - *domain* has no coordinates) which is a function - in a ``FunctionSpace`` - -(5) A ``MeshGeometry`` created from a ``FunctionSpace`` - and a ``CoordinatelessFunction`` in that ``FunctionSpace`` +(3) A class :class:`firedrake.functionspaceimpl.FunctionSpace` + created from a :mod:`FInAT` element and a + :class:`firedrake.mesh.MeshTopology` which allows us to + define functions mapping the nodes (defined by the + :mod:`FInAT` element) of each element in the + :class:`firedrake.mesh.MeshTopology` to some values. + Note that the function :func:`firedrake.functionspace.FunctionSpace` + in the firedrake API is used to create objects of class + :class:`firedrake.functionspaceimpl.FunctionSpace` s + and :class:`firedrake.functionspaceimpl.WithGeometry` (see + (6)). + +(4) A :class:`firedrake.function.CoordinatelessFunction` + (in the sense that its *domain* has no coordinates) + which is a function in a + :class:`firedrake.functionspaceimpl.FunctionSpace` + +(5) A :class:`firedrake.mesh.MeshGeometry` created from a + :class:`firedrake.functionspaceimpl.FunctionSpace` + and a :class:`firedrake.function.CoordinatelessFunction` + in that :class:`firedrake.functionspaceimpl.FunctionSpace` which maps each dof to its geometric coordinates. -(6) A ``WithGeometry`` which is a ``FunctionSpace`` together - with a ``MeshGeometry``. This is the object returned +(6) A :class:`firedrake.functionspaceimpl.WithGeometry` which is a + :class:`firedrake.functionspaceimpl.FunctionSpace` together + with a :class:`firedrake.mesh.MeshGeometry`. + This is the object returned usually returned to the user by a call - to the :mod:`firedrake` function :func:`FunctionSpace`. + to the :mod:`firedrake` function + :func:`firedrake.functionspace.FunctionSpace`. -(7) A ``Function`` is defined on a ``WithGeometry`` +(7) A :class:`firedrake.function.Function` is defined on a + :class:`firedrake.functionspaceimpl.WithGeometry` Thus, by the coordinates of a mesh geometry we mean -(a) On the hidden back-end: a ``CoordinatelessFunction`` *f* on some function - space defined only on the mesh topology -(b) On the front-end: A ``Function`` with the values of *f* but defined - on a ``WithGeometry`` created from the ``FunctionSpace`` *f* lives in - and the ``MeshGeometry`` *f* defines. +(a) On the hidden back-end: a :class:`firedrake.function.CoordinatelessFunction` + *f* on some function space defined only on the mesh topology +(b) On the front-end: A :class:`firedrake.function.Function` + with the values of *f* but defined + on a :class:`firedrake.functionspaceimpl.WithGeometry` + created from the :class:`firedrake.functionspaceimpl.FunctionSpace` + *f* lives in and the :class:`firedrake.mesh.MeshGeometry` *f* defines. Basically, it's this picture (where a->b if b depends on a) .. warning:: - In general, the ``FunctionSpace`` of the coordinates function - of a ``WithGeometry`` may not be the same ``FunctionSpace`` - as for functions which live in the ``WithGeometry``. + In general, the :class:`firedrake.functionspaceimpl.FunctionSpace` + of the coordinates function + of a :class:`firedrake.functionspaceimpl.WithGeometry` may not be the same + :class:`firedrake.functionspaceimpl.FunctionSpace` + as for functions which live in the + :class:`firedrake.functionspaceimpl.WithGeometry`. This picture only shows how the class definitions depend on each other. -.. image:: images/firedrake_mesh_design.png +.. graphviz:: + + digraph{ + // created with graphviz2.38 dot + // NODES + + top [label="Topological\nMesh"]; + ref [label="Reference\nElement"]; + fspace [label="Function Space"]; + coordless [label="Coordinateless\nFunction"]; + geo [label="Geometric\nMesh"]; + withgeo [label="With\nGeometry"]; + + // EDGES + + top -> fspace; + ref -> fspace; + + fspace -> coordless; + + top -> geo; + coordless -> geo [label="Mesh\nCoordinates"]; + + fspace -> withgeo; + geo -> withgeo; + } -- GitLab