From 64da4cfcceb2113ca3b797eb6561bd4fcb6c21fd Mon Sep 17 00:00:00 2001 From: Feda Curic Date: Tue, 21 Apr 2026 10:09:58 +0200 Subject: [PATCH] WIP: 3D heat equation --- test-data/ert/heat_equation/CASE.EGRID | Bin 7104 -> 13520 bytes test-data/ert/heat_equation/cond_0.bgrdecl | Bin 432 -> 1232 bytes test-data/ert/heat_equation/cond_1.bgrdecl | Bin 432 -> 1232 bytes test-data/ert/heat_equation/cond_2.bgrdecl | Bin 432 -> 1232 bytes test-data/ert/heat_equation/cond_3.bgrdecl | Bin 432 -> 1232 bytes test-data/ert/heat_equation/cond_4.bgrdecl | Bin 432 -> 1232 bytes test-data/ert/heat_equation/cond_5.bgrdecl | Bin 432 -> 1232 bytes test-data/ert/heat_equation/cond_6.bgrdecl | Bin 432 -> 1232 bytes test-data/ert/heat_equation/cond_7.bgrdecl | Bin 432 -> 1232 bytes test-data/ert/heat_equation/cond_8.bgrdecl | Bin 432 -> 1232 bytes test-data/ert/heat_equation/cond_9.bgrdecl | Bin 432 -> 1232 bytes test-data/ert/heat_equation/definition.py | 13 +- test-data/ert/heat_equation/generate_files.py | 74 +- test-data/ert/heat_equation/heat_equation.py | 98 +- .../ert/heat_equation/observations_loc.txt | 1818 ++++++++++++++--- 15 files changed, 1652 insertions(+), 351 deletions(-) diff --git a/test-data/ert/heat_equation/CASE.EGRID b/test-data/ert/heat_equation/CASE.EGRID index d45def7720797f67b0fdf9f2df2599e2a9e87000..f5bd5778780b0190b61f8a549f778011e605118b 100644 GIT binary patch literal 13520 zcmeI3L2eU45Jfv61p$lr2z?V~6c5Bwa3m8X#EJz6nImw7KFXW|wsREf|M}If1uP<2 zSwvMDPrrU$Zcq1=9Y;}0DZ7t{`{`~P_obAdhvVa9?XHxoU)H`Z<;@>!5ym~PIwd^g z4)C7rKAjHxugAlqz3{8syYXbL-LJCyJUyPKFSUnzX?+TDxkYw%)t#L(FA1cv867$cnF?dbW= z^cZV4Xu*C{I|ncBJlAfF zaE7;|=R4D5Y_UNL_7}Bt@M4a);KluUOJVR@jOo{qFNWvZEeGLDkF_t<+xx2)@>eqW`hyV z7{_PWSPR3MehFSozXmUc=h|ywIMZY8?#1-xx);OiyY=q-?ZfHF@7-^IoWFP9G-PDt z4&)Bx4&)Bx4m@=S@G~?Yxd&MTSp!)ESp!)ESp!)Em#cwN@H_fV%RRl^p5|V@yuBRk z7ngkG9%Kz<4P*^u4P*^u4P*^u4P*^u4LnB;Y`>>p5BQsVK5`GT2C@dS2C@d8S_7qA Th@$NN-5>=?sPZaj>EB(^7V9n7$YA_xq6IzUCPVvkrBZ?t~%}T4_APD za(I6^9Y38<5Ann=Zf=K5vn+QG3?FEQD`5fWFPN74){8FFLWb(qsS1S9aeP~+?M`f%MZ z={jQ8ugQzy+521=W_qlHy_mixFNR07g^3Sfcno_pb5z+kF?~$B7t>G4i|Oa&#q>+^ zV)`|CF+6*ZI)s@Xy)V?;{SZuFlNZAy+RDTSFg%96nK`QLo0vW(-HYj`(dNX}Yx);+=$&2ad7W1LTLqv-))a`hS2^e8!{gk|z zeokIYza%fFUy~QZv-esUW_t8)FQyOIy%=8Ktq)&r?k{J4@4l{2-@D(i0#$qLE3mJ? xz5@FS>?`n`6~JfAKK3=(?}7au*zbY;9(e9OPzwJBIgIBc{*_bl+2jAy{QzAqv*`c; diff --git a/test-data/ert/heat_equation/cond_0.bgrdecl b/test-data/ert/heat_equation/cond_0.bgrdecl index 47e753c96541c38fb2e486afe0d81a2d232d38b0..fa9c3bf66195e24094f12304d427745caef3cd97 100644 GIT binary patch literal 1232 zcmWlZYcv;j0EYiAC6|)imE5UGr9!p&y)TKVD5=!Ys*RnBnv!EFG(!nXQW_$uTuX^! zb(W>D(X#0%HFUcDk$Yhkv-jik@j1_VB@)ThWghNMhU1e+WafA-cUUDEXA+706?8`& z;w1Y-Dl3LkMWvaFx0*5d$P#tEX}GcfD5|0=asT88+&{M+@5{cT%G&Kz-@23vDna<$ zc@R1Kb&#TOf-|>2A=xhoH-l|4oaIlQ>6$b$mf_?^7d*3UL;2WT+}LS@Dp82@YS)qP zmVkcwxzzbHg@)VOI5i}PGPCA$VrD80CjLkhwHCYzY)8!E>$nr}Jq9~YV9d!C!%B%% z((9r4*NM>|PcYK!5;e^3!t%mWgoZ`n?4EAqc{ig}r4fUWYIxC z>RHf!VuIBjx!88D4hMGyqwhd<&qG{G%kah?0M*V2gA9u3t4N+@X<4X)8>TWd2WV? zKGQ1lMs|s3velwX%oN>hgi??$mi*#_kgO>+l`DV0Nzo8e0wF z;@yPYfK-e%#d7-bFix}U!@a}pC~1^~r)#cgOMfa#)&+>6Dkto59!0Cddg|8{(IWmd z?Gmn0HrxO~x(1>;O-V#dFBE6<+o3(%42fAqXsC+B3!7l(_#CF!-c2ZQ@DTm)=Zi?? zcOpE=MpPCRK=pb%Y))2#zt3Z*rxvqwHd8^`4aYniaZ|}c#K*{s1m!+)qISJV8ht5_ z#!DS!GU8bGsF!YIa=4t(0_&d7McZL}@w4t9V#C>3q1Q7YBt;ilvtb@fhoZT2p*kmz zjG-+10={W^Cq8NBh$!`9F|}C6zP9f*9e=ass{Ab4MM-Ji@sQfoLEFj^>@`{-S_a~T zm(@P|(IS7u4~C=2Wj&f3il};5lh!L{(Wvh-s#}7vWNWf0JZ365&@D#IzrZ4sV@T?E z$J=SMX@2?^Eu<^)GPw_dM;8j|XT>5$F@kTj)-XY93GH3paz=_AjrH8==siOJhn@5> z+evlJw>V>^=`g|n2WG^ay4Ok`AbN@9YFrPOdPlP377n~P|~o2zLti(sx`>2kz)40{D+l^JCG#0;n$^# zbrwB{TM>lkQKz|jjRo^f4)V3nZjM;&;KPb~n15`AT&6da(`(@wu88|3Ms#{7W!|{Q zSNqC2T;j{8^0DG}O_NBS86d7!TEY04A1X8^(nGD2<;yp)%iW#Qx-G0(Tr1+{w2Cbf zWs#!&0{S!Nqd{uT(8Wglt2>%~eQvCuoWe{G6OlZnKtu;T7k2_fv2k-HRU*omZYRes UeBhgNS6Eo1%Dw%&|NpH20Qdq7w*UYD literal 432 zcmV;h0Z;w_000m}PfkQ2ARr(B003lCML|pe000mG00EFcp36i(^xkYhCFWf~G56m< z3*<&Wqa~_8A?kBJsRIB$U5{`+L63Dmchx07>w7~$Hk2_yPPAP>BJLnRy`$hiK^qW0 z)C)a6kkNELdnisnUwbA$@m8lmN3>BuWOuAUGsR~=**uv)biGJF8nJag?oMnz*M$y0 zU0fbN>&a|DI<|g5OMERr9}dGm&qt&`i3ig^Q-h2@K>Zm%J-dfLSa!`n#Ln7422x2t z1PI$d%Jd6Akion^WTg5(S;logZmeKGgjo(hMq6b+jf8nWormu~hesMeN3jJz7brkK z2yml68AKgFMfWT}f9xhdIFsu?P$BR?KI5oA4unlU!e0PBkbaFmhR>irqXJJp?1Yy; zG}y>LOvAK4ML?229io{&&%x0?d#SKKC-Q?n5M;bQDM02vfbt7I zbX6Q;S;NwWZb-tqs8;AQM`lyxtbKpJ&-1>2egc6&*KN&e_vzyk2$XESJzPBn<4hn> zDTPjZGj%B^Q&IH@9rL(J`PC&b=#@j({3i!$bZ|qTn8%XRpjUB`UWCo2g4|>}a3qlu z_DQHt`5ppGm$0zkjuU=2;gZbnplxkHeZ7WMP?k=y5Bh0qUL$1{>%(w`2!;7qd3J-4 zw>XF~!MlPw$4*e8u#4gz?V-@DG?Ik8pjYM*2tT|P&l>{S*z^ii6WginH#uFZN+xMQ zD#hz*k+d*~9xD9ceAX8k?|sntsSN7mMZJS}=}wIWl~h>Mg%M+toqkFk8_!{Cx)TDX zB;)Wu+cC-d1HIp=L~Xc7&AIcaO-Vv>Q36z-xWXt@2XhBP;p40h^Ok6+)Rj}8t{wH1 zZ-w%1FPI)3f_?n=nE$~S_Vrgl7RGRn+Xbza-PHZaf;uu0cJChnd*b;(?ZPLJpfh}W1D^%QfL^(iRrlMr;B@|`|&i< z1B1qqcxU1br;2{83w(yO&8Fz9a$rmSE_QR)VRzq5b}IgZt=?wy?KvOT7<1x9)Bk13+E%VSFq6A7tPrkeiKK{j z6hMaCE4t8BXN#eZTRg2_n>VBsvGjurXXm*fO!gLgb|>Q4+FQu6+k^|6c95yvN81_~ zp0qHGUFJ^V<;x!6px1oFw;e>vSS!*B>XD>;8F6=9anv&kvi{R}nx%r5s^!SP(Tj|B zWn>%bAtQObeS96hoYjG)ik}hWXNI_yn;{8ajv9FdN|G#58Z!fDK0Qa|>KxctTEnQ{ S9U|v>aNOVmcT@BKKkGkYR1gjT literal 432 zcmV;h0Z;w_000m}PfkQ2ARr(B003lCML|pe000mG00EFd16Mph#b}K`m>DrYf+E*H zaiSDIYo@P1eY7z@q`?h90ksl9TQKWD5CDHa$rQ&wmaR%ZgT4SidjH-(Z(uP$ZAPF! ziYk*o$Cy+=BOK&E;Ae_Ilyav(VDK?NQPI;sRs?oGPw{U*LPkb0708R$*L+o z!>=(u(UjUg+~;LJ>A3Pg3bnaELi-s%m$=eD8rX_H-IAC-upLJ}p$Ef0qW^wAvRLIl z+@5nkA<88`hH{!e-njlh8eiQ$@wh8K!C&t_qy`*5n{&B7v6o#x0v#VeY^Q8LjC`QuEnAD!x@e z0us|c%2owFzIo6-`5nzaVTOD^?*3aqW_XN1rj>j@X`*jGFB4@y0ZubM(0lwo*AlEh a8DxAvi`FJU1``NCTRzV~hRwAA00EGrC9!V+ diff --git a/test-data/ert/heat_equation/cond_2.bgrdecl b/test-data/ert/heat_equation/cond_2.bgrdecl index 6367bbe87afe51e441dd7c491b59542e93102441..d176ed2bc41281e2b0e6db8d0950421297c79a5e 100644 GIT binary patch literal 1232 zcmWmE|2NeK9LMqNTZ+(0jkywT`bMU!?KtW4e!cHOSGO+=GgD5>kiITu;$(()x)QCL zu2K=YtSFRkrACfQHBm>mn#3Ye-FqaJlD78z@$m;dMIzB8FTWMu_MZ}o^jrdbWXnXK zOe8WaXYqS^+s-zq_(S)5JEMh~?TJ&wyp>IY@a5bjj!kP|8-)}@P0c*s z;Vk=o9>EP+a@M|x;&;MH)~r?V;nouN>1<-db_u$7En_2_3iclq^HE6)*QLn${Hcw6 zFeZcj#mCuH6o#9@3e-B<;+`g*t#!>D*cihprW#J3b&?gq_t@023H28mp^7fW-U2Oh zjnYvUwizFzEZJeToM&6r^7z?qxYRZVWnmg3W>g`fY#d?(#t?Vd8|goopxSs9nupR+ z^2!g1ucF~KQ-`lI3$f&(DOMF&KymFhCWjmaI%gnMFA{RQY&hmE#iWe8u(Qj@V(lOz zmy03qT})-c)}(2BLpt+8>hrgt2lMJ^K)nOj7M2L|T!-z-bjVBdd4W=&#U8uZq}GS^ zc0Xr>>YY4gFowU_62fF1$?h%zY_EI94wsj(%f%x037yJo*^SfUUvsYI*IZmu!`b_K zcuU?l>@|?Y=0Y3KmHf%!zUw(xvXSq5&X*Y)>B|iCdbve1ku%j19Hb6oGrJge`rDU7 zE~Rje{lDD#W0%bAaiYw^_zHJ;r}F-78us5H=g)HAvTfiqc5(fO1Fg?W;FJax8e3O|?ZYDMTAj4qbCdqC7^S2V&?%R3mk03#oh4er#{6 zgt2WbWu`@uq`F_wNg4%R!Z~udu$z+R6jO~ll3MPJQRP@ADXS_dHL{elC2OeogE{4z zSJS~wNz~}52ET~MlirtfBrbq{tJz6KmBXZ&?N86G7E-g=go>0zmxmWYdMyjB`+lVy zKc;h!GiWr`9@4phcd`}44Y#PL^)z)$&%*Ux5YFe_ptG8l^r~npgn<_9*{}oI`tK2* z*Nmyn7wJPqFlNnJje_Nc^eC_g)Adw{FIFQ=NH^O9 z{b~UBu2IzUmf3QGgWVRFA8 z7585y1$L8Lz9psJ{uWkFeKcxZO{4lDFc{I&z{oN>;xUb!r*9MPbi@fwH;2e}i$Haz zZ>TRZj;gAnNxik5_8NAQSG%F`#5qvN3Jw)A=Uo#z#0M#M%{qFT;7-4{1s6>F|5^V5CU^_p literal 432 zcmV;h0Z;w_000m}PfkQ2ARr(B003lCML|pe000mG00EFc2MFdq=9fV}%blY>y6g8o zx-$ws)T9AF523?9VB%9hyzu2f7_WXmMdN@!Da*q@8gHgQ6uj|28MJplEj1-SRvHdJ zjq_fz@F@b6 zC+IprMQ%kvS|2^&a1&Lr+YB-D98Cjn$YIjfyOVctVPi@8ETookXn zl?N$6Y>q8JC})R1>XRox6*y2p9~&w_JLjfAb2eH)pAbDjy0B(Iv=a?LjtcQWMMj`N z1%%i?*ilPA@$qIr7cQGXPc^YXk9|BqvOlRnwB8Cpld@evPr^(<3?-63gy79Tnv^m> z%8L|05&}a&R!3Ywj(0pjn>U?6hFEn#Lg?v01Ml%a7jw)%H6%qpcG%fJyBl~w5@*Oj aQeRa-cyL-kWtBxhEKb8e>1aFv00EGe=&ZH? diff --git a/test-data/ert/heat_equation/cond_3.bgrdecl b/test-data/ert/heat_equation/cond_3.bgrdecl index 870fa1c26c9c007228a6a72740547708ad5b0508..c0f8689e13efdfa6ded5f2572243cab99eadece8 100644 GIT binary patch literal 1232 zcmWmE|2NeK9LMp`ba%P9H+`W=<8~#AiE=gCeZM}px>{un>5Fk<9ew{Ybg881`Z|?1 zLR+DjW4Q9|wvc40a8{$~%rNRmuB*7^hN#Zk^T)>@@MIXqWR17iTH%Kn<|7ARnbec{ zU<|`4XO-_bZ1<{Uw&dMB)^KkPme^-ePH;HoJ%|BMQ;5U!U!uT$xzvComKu8%v1J)i zPU6!}SurQg&!NyUckY`K>!x`b}v2BlHrk(m_d*GhMsd06Z?hFuoNq*g)erA*Ol zHon>#cP?bX+@yv|Bfg-E9ztp!)`EX=GwcsEvt={BWY4TQ#V$2-M{&S7T+6fQZDS;< zH@$}5;)O8l)WF>9A?v0JU`m|7w8F{oswI#tBF(i$b=^V}w}BVfk|t z_}){nx$X!*6I&eISxSlZf5NzV4z@dd{FWdvOSxlssg*KZQ~ki2BCsxU2VGa_MZ9VO zHtzSZn130*tIcrQNgt)wF_Oz;J0;B(8zjBk_DkMZw~(X2mlUCibnEzD7#%zUKe-l} zThB=*wH0LSmP_2u65>{dlU-~ug;#h}38SOY1zM~)(SrDO3Dn2wfw_wtQoOsNzAb0x zxBIb{Gt4nQvJ&Y|&M=z{qsr6>YW*pKp0GSPbh{vF>Tgu(KgUh~VdN`Q@NLFh81`k; zt(T>wQmCkG{|y=v9faL@Keje|V(+76*cxF22a_w%Gf1cYy8BeC)u;UIOVqIAAx)bN z!6Kj-_NrLeC7NRHbOZE;o`UPsK|@*tx>-<1cbbxExaxBVOj99>e+s+8Xe>BN;Jao+ zpy9$HY6@JxR4@Tq;4AOJrZ5+{_6i$*^MP9{4;F<7pdTqhfA*dB&?ch=y6mp zM&tn)2+Ki_t^+r7M95le3i-kj_-Z^MKD{2ZWZl%&CSwhI23Z5^B24S09 XQDy~OffnYP=iog{qi0LH{(shg|D6eQ literal 432 zcmV;h0Z;w_000m}PfkQ2ARr(B003lCML|pe000mG00EFc-?-gB;*aG&yay0Jq{#a} zokILSlL5CshX@5fib4oKs+2W9@3pZ%)Ep8&wJOy=kP8k!gsa3qh`YZ(j2$*Vkovbj zq>DK}%Z7wM`wVVB-;JU_wA+wBo;t!mqx<_muA?eHtbJEMtuzKd!)A9s=Fu=e^^PS! z=W#ke)76nb>Bw3@3p<@a3oU~`;*C;2z7=pk!lZ~l*bZJl%X4l&&rsk$?o7r&D;pj_ zU(~KZKxPO(?5HI_ouAY{lUfizqmQjWl+|TFpOOSW;&}T&L?w|xg$TYtMpYs|!&X~A zUGOA7OP&}%bNE<4XpMY7WB_nKwXWYlDMar;XpJI3Cq!aDo6V*_E8rbJBW#R6RFJtp zRk}q#C8K#igv5bA?yO5dBEr`{`h+V#f%zFf9Sw9p9pf}VQxhUTRW3C?{rzY^J+{q1 zmO^bmzrck*pwQ?)Off@074io^C3fpST4)(RQ-V@H!%#jy1q5+FFS{K-LcJ_MDy)k? a35kL~2CpnXFO)_EyI;W#y_v9g89@AH0V88lK#ryHf{A~U5wE^ zVN1Gb(;ON#jTyF%B}zGEwHlWrxos)ya@6iwx3+!%eExl&^9lq4`$d5Pi(SSh5O5yB z3c0^vj0pr5T2w?Y#L3zF@%^r9*jskcjcH-@b_YY8|~sc6%5Y}FxcqOVi?7V zViD%}ZKCV#X>|FP2Ph&GALV{*-H?LGC&!`T(r#Sc(g4l!S|}r8=*|Tvs#gf%G;jis z-2P@60Wy|5=z?~)Omy#z#yMFq!rrW+*QR~cyy_+ zg8l(!+xLd;dYyxcL$=6{cK}IzV6#<2qv46LtrEe_DHCBc)1lky!eqbQ$J9V)a6?iW zxZ6hk!7^ARl)%w<9Gto=;Sk9|o;nTJuEmh%=`=c-pF{?q7J8W+0vFv=AZQV0jg*7S z;9y=H4V5sHPH{d|Gq;iMxl19|sIbm_EpkKVBQe$o&hyv8x~>~bd^dyhl~AoiCe?jz z4)=h)%&c}Y)1~LIPmhUJm3c8|O(c5zCQ`HW9V%~HK`lepklwIDlQf8VckN+OJt@r9 z(I5RgF5=HyKT&GlG0F`yQR9>{*v%3{yQWLa!0Ne_lM_ zu(6AOI73S5&F*k4X~%AFYZS^OvA<5fft z9!&?dF(oJz)KI@fLq~@7l&ec>oFkqD+9tRXdnJpGX}`0;xqEM=y+N z7_a{p0?}BB$|$x_zlW2D=OL@K7fy*N|ou&&cV_P({k1xX6q%Al=z_BOIINsQZ znBEvz2Yw{ITF(w|>|lz@`xst-0L7cuL-lVDRM&4Ke$B5~aN8BaRw*XEKf^@Ycj(R^ z!oE{N%sA1k4p-G=Xs5@^Q7qqwgI5z5`LJ*uPDKm}b1kzyPdgk{rL zBd>ZHdgdfD{>65%(pE?=htY#6OR1>CpGsGL0ZYMgq*hJ9HE)hNmrP-Kt9gj~1Xx*g z8^YQdWW2eTE*@!v>+l)WT-nL2r{86i5YMuW?exJa8{7Wr#D?g%5T_+U>|cxAf^cS5 UZp#+-{KAxto7tjQga3cle`7fFXaE2J literal 432 zcmV;h0Z;w_000m}PfkQ2ARr(B003lCML|pe000mG00EFc8}P`)a9H&NK+#~plKmM$W@O(trrhKNaBV+u>M3o z0)SLLaFSv^=TgK!S8QEB#|h9tI_(lbo93}VvC%_7aB<#0++t8ZKb9yyeV^?sjTk>ap6r@G zcDDvVH8z+)0&BuQe(NJH(_wQ(S?hvg$ askkCOt7fD=(ZxqT{J0lC2`-)h00EE$C#yXG diff --git a/test-data/ert/heat_equation/cond_5.bgrdecl b/test-data/ert/heat_equation/cond_5.bgrdecl index 5800dc35046e17459e9635c83bc8e2d2e75ef432..f8e7f6fc8aefc15a3d714b99a29eb1de55710ec6 100644 GIT binary patch literal 1232 zcmWlZeKZwz9EUIBmfYgxRzk$0R1`|vxxdf%cgtN~uDn#I%$g3(%aLLg<`xT$$T_vN z$V>0sP$QOhiRcz>2#ul>NeG#>(J8a6J%2v`KaW5l(BJ5}+1dOf0)fU#ADL7x_~-XnaB%7#2L*NP%Hn}>8vGLMF*H*ot?GVVN~!!T*X?PRWyw#xbp(1V-^`1Mde83G(KBL}B3u;nsqNeY3>4r@=?U^m&y7{NL;Y9^E zdmGDjlT4|>$bv35dC*OdX!^r4h^7~=BUMo%7d)P(_9s4c8w)8%@j1ob8>ep8S3IF+oF`cXpm~QqBFfY7spU1e7waO^+KEKb zIh3Jt;^Ja$zI#NE2hKl)w33sM3@KpRR0T)>CLB-eA))7CO7--n$;*fNa>XWYx>&{% zo0Hky3ORHOBOtDoL9pN&>k5cq{dw-N_z;6rht`lziZg2!o4{=vVz=c>xcW80 zIpqW*>l{&*G(ZON$H~8F9cIPX!#_U;`OxkILuJsnO5??^^PRyygoA0?03 zD!S7xwyNM1q!&}H4${0Ht zkq!MZP25a5L5aqZd`-8A*FP+f+U18!YHNlib+)lg7;MKBaEHP55Y%otPl;_yxQ*Tg zUjN=sD$_HP^t5)_&z$9Q)1Q>n@KHrRQ$6)q`% zL1L1GjjtQvV|)&7rS`C6Pq28b5H|ih;7J+i(6NHjGY&`FCUMX*08uCW5p4WBB>OZV z9_)qAKng@%K9tozhc@fAlcq?By0Doj*=dUlK|N6Hm1C864g1$t%ARfO;LOj8p5JPw z;Hm+dqvwcMaRq2g-;Hx|e}e`GSzm26E9m&Z74HRHG;o`eBJ0WEj2th8@#3Au%sYprDI2dWvON~rQpAqAym zV_={V$tH#f9qmM{s{wXAXk}B%cy?s)EOQ#aN?sv9lAcw(U3$CcnaJty0LkuOT%`hAg{v_)>TtS|;<@ubID*R`nEA lXSO2HOa;d=IYN3GpgMmPBmZ`xHqRMH);D0Avh4q7{Re}p|6c$A literal 432 zcmV;h0Z;w_000m}PfkQ2ARr(B003lCML|pe000mG00EFdN1UlZel24_q%8M9$JVz% z+^#u5-cwUR%~}RPu7`F&k7^V^ciT`vVQ4l$lXE>l#IP_x@&`gd{|S~r;-zLlt^UnG zbD9A_D?g_|28WbDZ=6#=qxAVe;TkPL3R}iO3Z1(^+?`E8k*g&@FY9GL-Uf6(rFI2C zYCuvzsidDk?i0pA5L1ak2~R~p$Mk?eZLc&y1QS$0p_;fqcP;opP>)(bp%=+O=GP)Y z2_Zy4_ZSmErWi;-HV@xF!UHKkbT14)O~>9qGC}3ByGw)_Vm6nG<%&A*I%e2!#jAE8R4F@hibpN0}?hdFvqf#_Jt9(L0YHrm)wbgP! z;e38T$SB%Cd1X&O?AWwFO>DS6&K}V|kb$*6l6rhVp18F@-l26s_F@S@#nDVaX!349 a-n}Y6O?e1D-h8+|p*QtDnkZ8M00EG&+qLQd diff --git a/test-data/ert/heat_equation/cond_6.bgrdecl b/test-data/ert/heat_equation/cond_6.bgrdecl index 0f2f74d76d434e895931a170b23d7b8a24017e95..79b671913e94e8c1223362135b70f03fa28832f0 100644 GIT binary patch literal 1232 zcmWlZeKZvY9ENZ5m5*2@nYc(fq!6KQ{oda#r6QMZWeRE4)a`>x3~4K3xT0vS($z!? zr7tqNeW-NJiY22$Zd1)vWUJF?YkL2D{(8=N&Upm_f$?04pO@9p1cG6XOXi7v1w%|A z&^!m_v|2nBJ;jx#LIft{(Ju$fNOshZ{42C*Z{bS1Dx5^`H$)(1^>7?(JB*auQrKzz zL?tHoXra*on!Lu0d}RA5B|C>oZdD=nOfJ&bJ780RB}}`A(a9zid55>q_yS9^w#cJd zG9iU_Z$hzY04jn@k$F&oX#!nRU9X`ikJIFeT_hagNW#)ynmSy{Mv7THHsEtKt9K%1 zLJ&p{R8v(*CZ!4cDXb`xyd^^(oe~Z)-^go!u4L2bd=#rC_@ej~Cd$m9EAOMWgfJ@i zNTbptFFEn89VhL{Vf&gVP>mKN`=c1?LGO{gVI)>>oC=pMN(kTG;k^3I2XRGfDvtZRW4miVmIS4;+{uu`3tq71+ug{&WDoiD7UZs3j}tY7q>@Ik zxf-@h^tk9{Gsoqwy#wRHl#Gm7*flAg!H}$=QMJWq}Kgb_YFI`N%J zZfi4jH(0~m{2oHJQ<3-eHqN|{cK7=6mr8w>L9`7F6 z@TitbHXa+pfyTA0J3V};^F_qB@5FZNejG|kMcd6vwkRrM(W?xeIsX*b*O_ph&wgI6 zY0Cx=w9vRu2RBabKv()-Ja+g}c54^$3`Kz0cu#;>*XTUo7QE&y1!LGCrVlr}R^jqM zF(K{Rb?#u9LnsDvH1LDk4heJn@tuDI4tw|F(EVlHpkct5 zU4{J3!VDg_z!oL*k`U-P9!`#L;PP27+~tF?YcI#78Psz5}R+RAgGO|vy(!o<&QzcAMj+CF~xj(P6U@kIrFLp zecZVeg18kOFj(-Gs!MFCvCA0}^-R{d7sWBkeoj4J#>*mpg<^X(W)~``R*r6nDm z=!6kX6;M=Iv6*xndrAD6tX&XM`54CatEtfK4TZJ^)2bD%bTP6Xn4%5k-GA9odl5V6 z1ta3Oov;zfsmgacZ7h!_Y4t72QTJhF$70C!zQ;2gE4Kb{66ea>kYO?kHu2Z!@)moN bi$qk^a1(~HkFYymgl5?j7A7zI^jZG{ntl4n literal 432 zcmV;h0Z;w_000m}PfkQ2ARr(B003lCML|pe000mG00EFb$40|HHCd)V$zd8mO&Bvk zmZB;^lT3L)QB$ix0F}Hyp!AAAWdw&lnFRwr^7s@#c)9LB`BSApJx{7YL$LEe6Zr%` z!egO7f{?X8Mkh@^i537pxgFj=Cvvnuoqs6$pi0!M^DTha1LCsz<{=jcOP_QIjV>Ak?rw3sRUqzeVCcx->~X@2hh^ zEI!abVp2~(aKcSLQNoNrCZ;?;2kN>$^a$8L3=Abc^bZw30ofHl7{fI`FP#oQHEp#& zCrk-H5qn@h{~#Ye>YENfOSC;pHt62uRnf2=8$qf>SK66ykGu5iRbY@ aTZ@@LS%LFEi|ac-+3Zq4Fc*>l00EH3KBj^I diff --git a/test-data/ert/heat_equation/cond_7.bgrdecl b/test-data/ert/heat_equation/cond_7.bgrdecl index 34c5cddb3be5a0524e68e200a0ff5edef460f126..8f214f7cbbead10a6ee3b56f0fc0f2e0e2e66ed1 100644 GIT binary patch literal 1232 zcmWmE`Cklp9LMo7HIAfJdQ3~Qilqr<9jh69-rq`CI+U8n?C6l)Etb+Mn>@Nx>1L!u z2bBjKMVf5GY(h%Yp{=aa#VVOcqDM-y8`i#leEtD14u><_#?fKZ!q0IyQ5@C14D`bXyLN0Vd!(a`%7Ouwc8h0TT8`6{P2XrJy zN)}<(;8QL3nr%U{WE*nw{cuUP1ZO?;uy6S>7?hr&M-lyWrDTwbez1bRiyN%Wk3zi0 z0zraKoQ%pq#=tmIO8gL8a{&j3l_WWxLUrHH#!QtDjQ!GJ+p0jqwP4)37mGK1F4J{c z%BCJjA_q%Lsu)pY+O<>&mKs5nOL6R@CyHf!G|>d^X=vl@ja`U! zkVEYIkzO^AfoJW7MVxMIR&o#?um=U%9Vo2TKzMmIti+};XbFMR`7zpG*Q4;{b(nk- z)9LexWIpUldR1mLzfO}@iL%M~uno3?*ZON%Okeue& z(_ym=+`g#9UlJ8M%7$_2o(KoM1F*Ka2ZkFDfmb$_dJSJvm);?C$&xV;znW=^iWyJ$ zB}Tp}#9;Fjj7BQaA^(7!+5QMPwV3gARCt>;gXwhUv&91@Y{jA|wwasCLi%5@7)21X z6&N#a{Ao7-mq+NQOL%^!knwEPj2{}qHZ3+(D?1 z7m`|zqiom71RE;fMdNQig!zy=8{SF zRq!6B72$x|E^CAa%E7(Ag341A)NIiNbLo0yCr-!XzQ<^Ln~vOP!`MG(Bf^zg5RpH0 zR~EoP)d{I@Jc=7i(4DyrDs3lZ{$Yg(lT{cgkig@59aXO@rMNN~RStcPl|7Y+oIHm! zfo|xmFJfEH7vSAyHKHW?^zmUeH3@_;m8763at#LhcB04A2&3a^OgJkXuRHRQZj_5< zE2}UE4RGJbhvNAbJhW7yJe-HJ;0TOae}SO^Ym|;zz(>0g8xzbR9&bY!-va^D-QgT4 zfJaRh(mNy=+HH(>^$g_Y48j{XAr$don0OJ~JwMZEs5f+C_d~RO3SNp@n1;F$t^eFc z^ojQ{nx&=(b(iVvDMnfIgmgXIlDd8^XIf7+nP~uzamgNW(gom(k5YyPkKC)%$>FyV z@}E>w+Ff0?Yeg74U}w+fes78>`&jC^8%H5GQ%QKgiUg6l{g%tn%Jh`}f5Uc2;pvtZEw{(c*y&GYnB2V^Z$}FT@-UR)m9rUMG1zp%6 Sqmy<)B#+UBVD8)hpY!>S4cBI4|S+Mw(mwgn4(5Kw}`(!7ej|Wn8+4C7VIiNYO$3+gL`{F zU&p>bBEB0w;~o?~FI4zGKz=Shh%X~P;Lu$^Gq-m?Y&c#&bJtBjQsZMkC?-=s1s2dh z6^GG34_LlGB10EHO5^!Ib~cqif)KkuY#NR~MfO}jCvF`-7Pq880{EXl;2Ix4&ehjH z$6>!ex~5w{pS5{Ed}`l6NCc)oF8hu@G6cRrk7=7gYv95_L`We(B4+780U?V&z^(8< zi)BndSHS5%M{P_$XQ@~~lI&GLd!o5ORXD^zE$C%H1;3y_!UroqjI~5RW!(HfZNtq! zp!l*t9C5@z5wGn)2W$yH?=$K@#7Sa5m+sj=aL~j*U(VJ)hx1`S*B;nEd)-z)fA~5- zgM9Tre|2_0W%D;bMXHWJGU!P^Lt807i{N=b`jD|c-r~bP^utX*2SUz23t9|61yQ^{ a`WkjV|Em~3AUs+>fk%8l_lI%-00EG?Y_bag diff --git a/test-data/ert/heat_equation/cond_8.bgrdecl b/test-data/ert/heat_equation/cond_8.bgrdecl index 47548766e33ae36af8fcd1b662047382f8e3c935..e9d6f3daa2a0ca6cdcfc96e5f079b0705a1d079d 100644 GIT binary patch literal 1232 zcmWlZYcv!H97l&5?O2k{W0R1Ogf!_;^#A<_Jyuf5rl^BO?~>FyCGW|kp(j!~q!*?o zQj;F*QMQz_jbdXuZTm1$L!DGk(rMfK@qW8su0S9dqg<0YDBw)!alB@*ZP(6ZYx*L*ksPBs%0Fp zDVv=_9ME_A2+r&b#kwiRuydZn()c8n8wB&-X9`X+)ACA%f*s9r@L{$sl{?LjVoj4S`F5(6L#q8AG!=oiJcvmWf z`u;}TZydty1|jZgV$q>6!1KH5Jf^V}Pnuq#lujV~?I5HpULb4E4IDR|2c=gu)HC;4^-i~_V6H1g4%{K+G zpr`)OnVLfVvI=T#@1yc2UE2RKj=Y9!;9F~&kEIba!eDy zCB@7#PAe(ml0*rYmwe{j(c?JMNX*u`uhH3?54mz9?2M}E`ilY%N(|$e!0a;WMW=qX!ILw!-9=q`PJ$gK;LBlpWTK;B31@7)T3t2@J#E%kapxl*e zj1N(s>IbOy>7xImF6*ochW4pFDpmRj)9;1uF*TLWzf8NY#nYA%4M0ij^&NTI5%L4O9vW|ztRqCPfQ1k Ptl_!Y9|5~E{(shgnk@yo literal 432 zcmV;h0Z;w_000m}PfkQ2ARr(B003lCML|pe000mG00EFcgAG4Fuw{2Y>Og})8LwnO zLtB_YX~Skffp5Y#PEPZXL!P3&SnVXNRjt`W6B5$h#D zXPePLlU-s!i`Yy+TaRo&F=1LjEOCNBLdD2GMq#!;l)DZ;^ngo1JLXP6W-TE=RgXSE zDFTx~4@4$F85RyeL(zIaAQ5{%TXe8LtlDuv0^e>xA_u-e9TICm1=z$t_`*0q6ETrM zP)8L%2c~I19U417VgyV-r#ins)#@ET;F;$?)l&{X-4G=}4=0yEShEj52S~6!`Bct7 z8Vc7xReSkAia+E(oN1vyrL!nMzM9iO1X=+=Pmei2C&jNm^(^&1`BCUU8Jej-K^AX6 aWI-}NgOE!15C@mgmm4(_;O4i;#-~Zl!UV%VhDDzpn-0}kg!6Zk25AG%S z-~0??S#LUu*LdR6L=|rR;eg(iMi`OzV@!Jjah)be8W1AUHXTWe z`jCD+2IXlg^kkUOG{IAHDm5lq#|)T87QM19C606sQv1WxedmcZI`HwX?YEX@5_uFYjz zTwS73?H@%8agK6tm(f7&bFQCN$Mt=i+37`j>~h#EOu5$vMe-feb1bG4-MaK*R~xss z4d4qKz|GuL?7DIX8yvKOEKG)0VJUqPHBJu-OS#kOA@2L$oAZoNZgeXFlUo8{_mc$a z8v@B#=OmqfF6E}iG9Hwe!6V;AaL*14uIv05&cc7Nz10nMCZj}_8>xv5`KSM8^0?Go zp0am@2adRLeXIM}eeh4D^)%su#|U}n2U7FbQZ7CImM70#!gD3oT(M_>+ZhkBBJC>H zF3o~vi~|zfZP1`tOo+mP3eL zng~VUJY>e0<6^G{>ijfZi58(aZ3LO#p*V6i3*{ee!TI#>Q1CVbCC$I$l4l=E`Wum2 z(F}i^CzxZ}#wJ3#p-#%g^}r0&B}d?9p$c^`W1uv;i%7|8%xZ~cO+Gy=MSKuf7HiP9 z$r`=Kgc#oDfx%a)XdG`ueAjCjh$mRKmOWb#v=qvqB9Pj3xBhy)r$jYpkgp`D$ zST*LzKWE3E>M6lQyk&MJK=v#+0A7DVBPy#)}K%w}N`BGf*s#BlTh646zfQkadd{t)DT z><+)XXJMr1VC}}!Sytz7B-m+8GbK~WKD>q;w){;duTEiDeFv4J5=7-S!d@qy_4pFm z?b<=ouhx>Qmpi%o*OHU!3C;M>{@8UCh2jlZe?SWTigNO-3Lu%-f}B^KB*#`AvNF6t zqUt_$ewKx^TmyNeH)gXXv{|@^WcK^XR;DDwb`Ojztkz=q^gnH4J$XjE9gj1uCn-oGebOF-2Gs*W+6^Y9eNm$;5mfe$)d+r3H zHGT+mSHs6_E_@yygr9C6(c=4LX|NS9hQ+wNvJuHOnFy}Ajg2Nb*ydJ*eHs_U?Q|jg zvUJkxHN(BaXyk4k^?|vFU zAuKsSY}Uj;rxYzf#6>Vbu|AhTd{+5DFJyv16h&J<^*!Q0{>Py}HmIdQn}W-4tp+xT|VE z#om)Z3dIFLSfUF+mMiQ)p?6+Df$R-H9o||$#p9?ynjd06hf0P&k5HOFuyap8=eOEG z76u4FGPuA%G3LcU1{E$pg_f5;RZa#!Mx@_ARF-W&Ya^IHfz5G0mxDq-z3l8i;=)Nk z*WtK7Dp0LI6kJ(98r@kxGb_SBK!YxnD>J|+A_30;2*v} z3VC}!Hm5p2OxHp`IcxksAzA)EAQUY>Gy_LJNqQGPq48fn%iEhj6&bxhTf;v;fo`Ec aWuYrSH0WeM7#&PM5TlDf6jw?B00EG#im6Zl diff --git a/test-data/ert/heat_equation/definition.py b/test-data/ert/heat_equation/definition.py index 8249e73471b..f6377b5cd85 100644 --- a/test-data/ert/heat_equation/definition.py +++ b/test-data/ert/heat_equation/definition.py @@ -5,6 +5,9 @@ # Number of grid-cells in x and y direction nx = 10 +# Number of grid-cells in z direction (depth layers) +nz = 3 + # time steps k_start = 0 k_end = 500 @@ -12,8 +15,10 @@ # Define initial condition, i.e., the initial temperature distribution. # How you define initial conditions will effect the spread of results, # i.e., how similar different realisations are. -u_init = np.zeros((k_end, nx, nx)) -u_init[:, 5:7, 5:7] = 100 +# Heat source is placed only in the middle z-layer(s) so that +# z-diffusion creates genuine layer differentiation. +u_init = np.zeros((k_end, nx, nx, nz)) +u_init[:, 5:7, 5:7, nz // 2] = 100 # Resolution in the x-direction (nothing to worry about really) dx = 1 @@ -33,6 +38,8 @@ class Coordinate(NamedTuple): Coordinate(7, 2), ] -summary_names = [f"HEAT_{coord.x}_{coord.y}" for coord in obs_coordinates] +summary_names = [ + f"HEAT_{coord.x}_{coord.y}_{z}" for coord in obs_coordinates for z in range(nz) +] obs_times = np.linspace(10, k_end, 8, endpoint=False, dtype=int) diff --git a/test-data/ert/heat_equation/generate_files.py b/test-data/ert/heat_equation/generate_files.py index 3795e3eeac1..bd7d9766f7c 100644 --- a/test-data/ert/heat_equation/generate_files.py +++ b/test-data/ert/heat_equation/generate_files.py @@ -11,7 +11,7 @@ import pandas as pd import resfo import xtgeo -from definition import Coordinate, obs_coordinates, obs_times +from definition import Coordinate, nz, obs_coordinates, obs_times, u_init from heat_equation import heat_equation, sample_prior_conductivity # Some seeds produce priors that yield poor results. @@ -20,7 +20,7 @@ NCOL = 10 NROW = 10 -NLAY = 1 +NLAY = nz def create_egrid_file(): @@ -47,6 +47,7 @@ def make_observations( "k": pd.Series(dtype=int), "x": pd.Series(dtype=int), "y": pd.Series(dtype=int), + "z": pd.Series(dtype=int), "value": pd.Series(dtype=float), "sd": pd.Series(dtype=float), } @@ -55,22 +56,25 @@ def make_observations( # Create dataframe with observations and necessary meta data. for coordinate in coordinates: for k in times: - # The reason for u[k, y, x] instead of the perhaps more natural u[k, x, y], - # is due to a convention followed by matplotlib's `pcolormesh` - # See documentation for details. - value = field[k, coordinate.x, coordinate.y] - sd = error(value) - df_ = pd.DataFrame( - { - "k": [k], - "x": [coordinate.x], - "y": [coordinate.y], - "value": [value + rng.normal(loc=0.0, scale=sd)], - "sd": [sd], - } - ) - d = pd.concat([d, df_]) - d = d.set_index(["k", "x", "y"], verify_integrity=True) + for z in range(nz): + # The reason for u[k, y, x] instead of the perhaps more + # natural u[k, x, y], + # is due to a convention followed by matplotlib's `pcolormesh` + # See documentation for details. + value = field[k, coordinate.x, coordinate.y, z] + sd = error(value) + df_ = pd.DataFrame( + { + "k": [k], + "x": [coordinate.x], + "y": [coordinate.y], + "z": [z], + "value": [value + rng.normal(loc=0.0, scale=sd)], + "sd": [sd], + } + ) + d = pd.concat([d, df_]) + d = d.set_index(["k", "x", "y", "z"], verify_integrity=True) return d @@ -86,7 +90,7 @@ def generate_priors(): corr_lengths = rng.normal(loc=0.8, scale=0.1, size=10) for i in range(10): cond = sample_prior_conductivity( - ensemble_size=1, nx=nx, rng=rng, corr_length=corr_lengths[i] + ensemble_size=1, nx=nx, nz=nz, rng=rng, corr_length=corr_lengths[i] ) resfo.write( f"cond_{i}.bgrdecl", @@ -110,18 +114,19 @@ def create_summary_observations(df_obs: pd.DataFrame): obs_date = START_DATE + datetime.timedelta(days=int(t)) for coord in obs_coordinates: - idx = (int(t), int(coord.x), int(coord.y)) - row = df_obs.loc[idx] - value = float(row["value"]) - error = float(row["sd"]) - - f.write( - f"""SUMMARY_OBSERVATION HEAT_{coord.x}_{coord.y}_{t} + for z in range(nz): + idx = (int(t), int(coord.x), int(coord.y), int(z)) + row = df_obs.loc[idx] + value = float(row["value"]) + error = float(row["sd"]) + + f.write( + f"""SUMMARY_OBSERVATION HEAT_{coord.x}_{coord.y}_{z}_{t} {{ VALUE = {value:.16e}; ERROR = {error:.16e}; DATE = {obs_date:%Y-%m-%d}; - KEY = HEAT_{coord.x}_{coord.y}; + KEY = HEAT_{coord.x}_{coord.y}_{z}; LOCALIZATION {{ EAST = {coord.x + 0.5}; NORTH = {coord.y + 0.5}; @@ -130,7 +135,7 @@ def create_summary_observations(df_obs: pd.DataFrame): }}; """ - ) + ) if __name__ == "__main__": @@ -143,15 +148,9 @@ def create_summary_observations(df_obs: pd.DataFrame): k_start = 0 k_end = 500 - # Define initial condition, i.e., the initial temperature distribution. - # How you define initial conditions will effect the spread of results, - # i.e., how similar different realisations are. - u_init = np.zeros((k_end, nx, nx)) - u_init[:, 5:7, 5:7] = 100 - cond_truth = sample_prior_conductivity( - ensemble_size=1, nx=nx, rng=rng, corr_length=0.8 - ).reshape(nx, nx) + ensemble_size=1, nx=nx, nz=nz, rng=rng, corr_length=0.8 + ).reshape(nx, nx, nz) # Resolution in the x-direction (nothing to worry about really) dx = 1 @@ -159,7 +158,8 @@ def create_summary_observations(df_obs: pd.DataFrame): # Calculate maximum `dt`. # If higher values are used, the numerical solution will become unstable. # Note that this could be avoided if we used an implicit solver. - dt = dx**2 / (4 * np.max(cond_truth)) + neighbors = 6 if nz > 1 else 4 + dt = dx**2 / (neighbors * np.max(cond_truth)) u_t = heat_equation(u_init, cond_truth, dx, dt, k_start, k_end, rng=rng) diff --git a/test-data/ert/heat_equation/heat_equation.py b/test-data/ert/heat_equation/heat_equation.py index 7a219be9f93..f3602e0c2e6 100755 --- a/test-data/ert/heat_equation/heat_equation.py +++ b/test-data/ert/heat_equation/heat_equation.py @@ -15,6 +15,7 @@ k_end, k_start, nx, + nz, obs_coordinates, obs_times, summary_names, @@ -60,7 +61,7 @@ def create_summary_smspec_unsmry( smspec = Smspec( nx=nx, ny=nx, - nz=1, + nz=nz, restarted_from_step=0, num_keywords=1 + len(summary_keys), restart=" ", @@ -88,45 +89,81 @@ def heat_equation( rng: np.random.Generator, scale: float | None = None, ) -> npt.NDArray[np.float64]: - """2D heat equation that suppoheat_erts field of heat coefficients. + """3D heat equation that supports a field of heat coefficients. + + Solves the heat equation on a (nx, nx, nz) grid using explicit + finite differences. When nz == 1 the z-stencil terms vanish and + the solver reduces to the classic 2D formulation. Based on: https://levelup.gitconnected.com/solving-2d-heat-equation-numerically-using-python-3334004aa01a """ u_ = u.copy() - nx = u.shape[1] # number of grid cells - assert cond.shape == (nx, nx) + nx = u.shape[1] # number of grid cells in x and y + n_z = u.shape[3] # number of grid cells in z + assert cond.shape == (nx, nx, n_z) gamma = (cond * dt) / (dx**2) # Pre-sample all noise at once if scale is not None: num_steps = k_end - k_start - 1 - noise_all = rng.normal(0, scale, size=(num_steps, nx - 2, nx - 2)) + noise_all = rng.normal(0, scale, size=(num_steps, nx - 2, nx - 2, n_z)) for k in range(k_start, k_end - 1): - # Vectorized finite difference - u_[k + 1, 1:-1, 1:-1] = ( - gamma[1:-1, 1:-1] + # Vectorized finite difference in x and y (interior cells) + xy_stencil = ( + gamma[1:-1, 1:-1, :] * ( - u_[k, 2:, 1:-1] # i+1 - + u_[k, :-2, 1:-1] # i-1 - + u_[k, 1:-1, 2:] # j+1 - + u_[k, 1:-1, :-2] # j-1 - - 4 * u_[k, 1:-1, 1:-1] + u_[k, 2:, 1:-1, :] # i+1 + + u_[k, :-2, 1:-1, :] # i-1 + + u_[k, 1:-1, 2:, :] # j+1 + + u_[k, 1:-1, :-2, :] # j-1 + - 4 * u_[k, 1:-1, 1:-1, :] ) - + u_[k, 1:-1, 1:-1] + + u_[k, 1:-1, 1:-1, :] ) + + if n_z > 1: + # z-direction stencil for interior z-layers + z_contrib = np.zeros_like(xy_stencil) + z_contrib[:, :, 1:-1] = ( + gamma[1:-1, 1:-1, 1:-1] + * ( + u_[k, 1:-1, 1:-1, 2:] # l+1 + + u_[k, 1:-1, 1:-1, :-2] # l-1 + - 2 * u_[k, 1:-1, 1:-1, 1:-1] + ) + ) + # z-boundary layers: zero Dirichlet (u=0 at ghost cell) + z_contrib[:, :, 0] = gamma[1:-1, 1:-1, 0] * ( + u_[k, 1:-1, 1:-1, 1] - 2 * u_[k, 1:-1, 1:-1, 0] + ) + z_contrib[:, :, -1] = gamma[1:-1, 1:-1, -1] * ( + u_[k, 1:-1, 1:-1, -2] - 2 * u_[k, 1:-1, 1:-1, -1] + ) + xy_stencil += z_contrib + + u_[k + 1, 1:-1, 1:-1, :] = xy_stencil + # Add pre-sampled noise if scale is not None: noise_idx = k - k_start - u_[k + 1, 1:-1, 1:-1] += noise_all[noise_idx] + u_[k + 1, 1:-1, 1:-1, :] += noise_all[noise_idx] return u_ -def sample_prior_conductivity(ensemble_size, nx, rng, corr_length): +def sample_prior_conductivity(ensemble_size, nx, nz, rng, corr_length): mesh = np.meshgrid(np.linspace(0, 1, nx), np.linspace(0, 1, nx)) - return np.exp(geostat.gaussian_fields(mesh, rng, ensemble_size, r=corr_length)) + # Generate an independent 2D conductivity field for each z-layer so + # that the prior has genuine z-variation. This is necessary for the + # EnKF to produce layer-differentiated posteriors and for the + # localization z-ordering to matter. + layers = [ + np.exp(geostat.gaussian_fields(mesh, rng, ensemble_size, r=corr_length)) + for _ in range(nz) + ] + return np.stack(layers, axis=-1) def load_parameters(filename): @@ -143,14 +180,18 @@ def load_parameters(filename): if iteration == 0: cond = sample_prior_conductivity( - ensemble_size=1, nx=nx, rng=rng, corr_length=float(parameters["x"]["value"]) - ).reshape(nx, nx) + ensemble_size=1, + nx=nx, + nz=nz, + rng=rng, + corr_length=float(parameters["x"]["value"]), + ).reshape(nx, nx, nz) resfo.write( "cond.bgrdecl", [("COND ", cond.flatten(order="F").astype(np.float32))] ) else: - cond = resfo.read("cond.bgrdecl")[0][1].reshape(nx, nx) + cond = resfo.read("cond.bgrdecl")[0][1].reshape(nx, nx, nz, order="F") # The update may give non-physical parameter values, which here means # negative heat conductivity. Setting negative values to a small positive @@ -160,30 +201,35 @@ def load_parameters(filename): # Calculate maximum `dt`. # If higher values are used, the numerical solution will become unstable. # Note that this could be avoided if we used an implicit solver. - dt = dx**2 / (4 * np.max(cond)) + # The stability bound for a 3D explicit scheme is dx^2 / (6 * max(cond)), + # but when nz == 1 the z-stencil vanishes so dx^2 / (4 * max(cond)) suffices. + neighbors = 6 if nz > 1 else 4 + dt = dx**2 / (neighbors * np.max(cond)) scaled_u_init = u_init * float(parameters["t"]["value"]) response = heat_equation(scaled_u_init, cond, dx, dt, k_start, k_end, rng) + # Observations are extracted per z-layer index = sorted((obs.x, obs.y) for obs in obs_coordinates) for time_step in obs_times: with Path(f"gen_data_{time_step}.out").open("w", encoding="utf-8") as f: - f.writelines(f"{response[time_step][i]}\n" for i in index) + for i in index: + f.writelines(f"{response[time_step][i][z]}\n" for z in range(nz)) time_map = [] start_date = datetime.date(2010, 1, 1) summary_values = {name: [] for name in summary_names} - # for time_step in obs_times: for time_step in range(k_start, k_end): time_map.append( (start_date + datetime.timedelta(days=float(time_step))).isoformat() ) for obs in obs_coordinates: - summary_values[f"HEAT_{obs.x}_{obs.y}"].append( - response[time_step][obs.x, obs.y] - ) + for z in range(nz): + summary_values[f"HEAT_{obs.x}_{obs.y}_{z}"].append( + response[time_step][obs.x, obs.y, z] + ) smspec, unsmry = create_summary_smspec_unsmry( summary_vectors=summary_values, diff --git a/test-data/ert/heat_equation/observations_loc.txt b/test-data/ert/heat_equation/observations_loc.txt index 4384c9c4846..11487952f8c 100644 --- a/test-data/ert/heat_equation/observations_loc.txt +++ b/test-data/ert/heat_equation/observations_loc.txt @@ -1,9 +1,9 @@ -SUMMARY_OBSERVATION HEAT_5_3_10 +SUMMARY_OBSERVATION HEAT_5_3_0_10 { - VALUE = 3.6679650465102660e+00; - ERROR = 1.6482328267562937e-01; + VALUE = 1.5076656778635819e-01; + ERROR = 8.0129332507500317e-03; DATE = 2010-01-11; - KEY = HEAT_5_3; + KEY = HEAT_5_3_0; LOCALIZATION { EAST = 5.5; NORTH = 3.5; @@ -11,12 +11,974 @@ SUMMARY_OBSERVATION HEAT_5_3_10 }; }; -SUMMARY_OBSERVATION HEAT_3_5_10 +SUMMARY_OBSERVATION HEAT_5_3_1_10 { - VALUE = 4.1410349139279456e-01; - ERROR = 2.0194884393600881e-02; + VALUE = 3.2362594456091642e-01; + ERROR = 1.6473299669805389e-02; DATE = 2010-01-11; - KEY = HEAT_3_5; + KEY = HEAT_5_3_1; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_2_10 +{ + VALUE = 3.1927697843769699e-03; + ERROR = 1.4942308812743117e-04; + DATE = 2010-01-11; + KEY = HEAT_5_3_2; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_0_10 +{ + VALUE = 2.5027480603072787e-02; + ERROR = 1.2875216797659274e-03; + DATE = 2010-01-11; + KEY = HEAT_3_5_0; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_1_10 +{ + VALUE = 5.5681037565386249e-01; + ERROR = 2.6559507966822545e-02; + DATE = 2010-01-11; + KEY = HEAT_3_5_1; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_2_10 +{ + VALUE = 4.9749918427829968e-03; + ERROR = 2.3133534578019481e-04; + DATE = 2010-01-11; + KEY = HEAT_3_5_2; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_0_10 +{ + VALUE = 1.7196695325923670e+00; + ERROR = 8.1390323928338740e-02; + DATE = 2010-01-11; + KEY = HEAT_5_7_0; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_1_10 +{ + VALUE = 6.8248195918968930e+00; + ERROR = 3.7223669913329177e-01; + DATE = 2010-01-11; + KEY = HEAT_5_7_1; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_2_10 +{ + VALUE = 1.0057118810049479e+00; + ERROR = 4.8778503238756800e-02; + DATE = 2010-01-11; + KEY = HEAT_5_7_2; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_0_10 +{ + VALUE = 4.7409740237153484e+00; + ERROR = 2.1732722411041566e-01; + DATE = 2010-01-11; + KEY = HEAT_7_5_0; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_1_10 +{ + VALUE = 3.0963954053199378e+00; + ERROR = 1.5984842257139029e-01; + DATE = 2010-01-11; + KEY = HEAT_7_5_1; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_2_10 +{ + VALUE = 3.1243876887428540e-01; + ERROR = 1.5464408961827776e-02; + DATE = 2010-01-11; + KEY = HEAT_7_5_2; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_0_10 +{ + VALUE = 1.5652890631798616e-08; + ERROR = 7.5708515225302029e-10; + DATE = 2010-01-11; + KEY = HEAT_2_2_0; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_1_10 +{ + VALUE = 1.1879108041092798e-07; + ERROR = 6.4348952401999619e-09; + DATE = 2010-01-11; + KEY = HEAT_2_2_1; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_2_10 +{ + VALUE = 4.0047441329288123e-10; + ERROR = 2.0219985780436963e-11; + DATE = 2010-01-11; + KEY = HEAT_2_2_2; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_0_10 +{ + VALUE = 3.6839350619657416e-02; + ERROR = 1.8700555276827725e-03; + DATE = 2010-01-11; + KEY = HEAT_7_2_0; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_1_10 +{ + VALUE = 3.9515403919893654e-03; + ERROR = 1.9892918706032787e-04; + DATE = 2010-01-11; + KEY = HEAT_7_2_1; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_2_10 +{ + VALUE = 5.5706284049592202e-05; + ERROR = 2.7064320680132585e-06; + DATE = 2010-01-11; + KEY = HEAT_7_2_2; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_0_71 +{ + VALUE = 1.9638281081613438e+00; + ERROR = 9.0498482109648171e-02; + DATE = 2010-03-13; + KEY = HEAT_5_3_0; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_1_71 +{ + VALUE = 2.3230110691538814e+00; + ERROR = 1.2819858466656209e-01; + DATE = 2010-03-13; + KEY = HEAT_5_3_1; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_2_71 +{ + VALUE = 3.2552299809784885e-01; + ERROR = 1.6511782114643225e-02; + DATE = 2010-03-13; + KEY = HEAT_5_3_2; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_0_71 +{ + VALUE = 1.2393131878952870e+00; + ERROR = 5.9962859885760139e-02; + DATE = 2010-03-13; + KEY = HEAT_3_5_0; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_1_71 +{ + VALUE = 2.4306146864220612e+00; + ERROR = 1.1971365377454180e-01; + DATE = 2010-03-13; + KEY = HEAT_3_5_1; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_2_71 +{ + VALUE = 3.5582717180420120e-01; + ERROR = 1.8261062691325592e-02; + DATE = 2010-03-13; + KEY = HEAT_3_5_2; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_0_71 +{ + VALUE = 4.7350761744601826e+00; + ERROR = 2.5314687263252561e-01; + DATE = 2010-03-13; + KEY = HEAT_5_7_0; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_1_71 +{ + VALUE = 8.7960827327627484e+00; + ERROR = 4.5582553687551891e-01; + DATE = 2010-03-13; + KEY = HEAT_5_7_1; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_2_71 +{ + VALUE = 4.8479990468332153e+00; + ERROR = 2.3404073877622242e-01; + DATE = 2010-03-13; + KEY = HEAT_5_7_2; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_0_71 +{ + VALUE = 4.9153197832631861e+00; + ERROR = 2.3909608932725576e-01; + DATE = 2010-03-13; + KEY = HEAT_7_5_0; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_1_71 +{ + VALUE = 9.3397628936695885e+00; + ERROR = 4.4355482974259347e-01; + DATE = 2010-03-13; + KEY = HEAT_7_5_1; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_2_71 +{ + VALUE = 4.1623696522876648e+00; + ERROR = 1.9761426783820249e-01; + DATE = 2010-03-13; + KEY = HEAT_7_5_2; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_0_71 +{ + VALUE = 6.0482758193967133e-03; + ERROR = 3.0724516808556683e-04; + DATE = 2010-03-13; + KEY = HEAT_2_2_0; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_1_71 +{ + VALUE = 7.8909583786319678e-03; + ERROR = 3.8053171548094552e-04; + DATE = 2010-03-13; + KEY = HEAT_2_2_1; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_2_71 +{ + VALUE = 4.9591943295748664e-04; + ERROR = 2.4873656807986133e-05; + DATE = 2010-03-13; + KEY = HEAT_2_2_2; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_0_71 +{ + VALUE = 4.5326833639956049e-01; + ERROR = 2.1785702527121725e-02; + DATE = 2010-03-13; + KEY = HEAT_7_2_0; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_1_71 +{ + VALUE = 5.0390913381040148e-01; + ERROR = 2.4437815682238011e-02; + DATE = 2010-03-13; + KEY = HEAT_7_2_1; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_2_71 +{ + VALUE = 1.2427161156097526e-01; + ERROR = 6.2716164044674021e-03; + DATE = 2010-03-13; + KEY = HEAT_7_2_2; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_0_132 +{ + VALUE = 1.3492528239180770e+00; + ERROR = 6.8697273431661612e-02; + DATE = 2010-05-13; + KEY = HEAT_5_3_0; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_1_132 +{ + VALUE = 2.1300889101074594e+00; + ERROR = 1.0480350758923651e-01; + DATE = 2010-05-13; + KEY = HEAT_5_3_1; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_2_132 +{ + VALUE = 7.3507372168621521e-01; + ERROR = 3.5416134937798133e-02; + DATE = 2010-05-13; + KEY = HEAT_5_3_2; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_0_132 +{ + VALUE = 1.3856292911239643e+00; + ERROR = 6.7296902262856978e-02; + DATE = 2010-05-13; + KEY = HEAT_3_5_0; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_1_132 +{ + VALUE = 1.9520048518170920e+00; + ERROR = 9.0583094857226654e-02; + DATE = 2010-05-13; + KEY = HEAT_3_5_1; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_2_132 +{ + VALUE = 7.5799229752290631e-01; + ERROR = 3.4691684541687542e-02; + DATE = 2010-05-13; + KEY = HEAT_3_5_2; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_0_132 +{ + VALUE = 3.2539772611722344e+00; + ERROR = 1.5582896603211302e-01; + DATE = 2010-05-13; + KEY = HEAT_5_7_0; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_1_132 +{ + VALUE = 5.6432287413980893e+00; + ERROR = 2.7845398163907570e-01; + DATE = 2010-05-13; + KEY = HEAT_5_7_1; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_2_132 +{ + VALUE = 3.4153788323490066e+00; + ERROR = 1.6653591455846692e-01; + DATE = 2010-05-13; + KEY = HEAT_5_7_2; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_0_132 +{ + VALUE = 3.3092455124921885e+00; + ERROR = 1.6222751120266307e-01; + DATE = 2010-05-13; + KEY = HEAT_7_5_0; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_1_132 +{ + VALUE = 6.9470126878793828e+00; + ERROR = 3.6776803249091383e-01; + DATE = 2010-05-13; + KEY = HEAT_7_5_1; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_2_132 +{ + VALUE = 3.8209191406992473e+00; + ERROR = 1.9641939951536758e-01; + DATE = 2010-05-13; + KEY = HEAT_7_5_2; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_0_132 +{ + VALUE = 3.9567372756834300e-02; + ERROR = 2.0194679932739185e-03; + DATE = 2010-05-13; + KEY = HEAT_2_2_0; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_1_132 +{ + VALUE = 4.8449390904535400e-02; + ERROR = 2.2674883524925935e-03; + DATE = 2010-05-13; + KEY = HEAT_2_2_1; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_2_132 +{ + VALUE = 6.7447128084020709e-03; + ERROR = 3.4776768369341066e-04; + DATE = 2010-05-13; + KEY = HEAT_2_2_2; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_0_132 +{ + VALUE = 4.4084618805974468e-01; + ERROR = 2.1436767045727598e-02; + DATE = 2010-05-13; + KEY = HEAT_7_2_0; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_1_132 +{ + VALUE = 6.0648912381769071e-01; + ERROR = 3.0860308075438193e-02; + DATE = 2010-05-13; + KEY = HEAT_7_2_1; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_2_132 +{ + VALUE = 3.2774886806564524e-01; + ERROR = 1.5860693482573365e-02; + DATE = 2010-05-13; + KEY = HEAT_7_2_2; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_0_193 +{ + VALUE = 9.5510656279408224e-01; + ERROR = 4.6906134927721610e-02; + DATE = 2010-07-13; + KEY = HEAT_5_3_0; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_1_193 +{ + VALUE = 1.5132869588399744e+00; + ERROR = 7.5462708238300535e-02; + DATE = 2010-07-13; + KEY = HEAT_5_3_1; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_2_193 +{ + VALUE = 8.0957448423548106e-01; + ERROR = 4.3828134767545934e-02; + DATE = 2010-07-13; + KEY = HEAT_5_3_2; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_0_193 +{ + VALUE = 9.8284392152623845e-01; + ERROR = 5.2725577097935288e-02; + DATE = 2010-07-13; + KEY = HEAT_3_5_0; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_1_193 +{ + VALUE = 1.2755396052345240e+00; + ERROR = 6.6924447800052175e-02; + DATE = 2010-07-13; + KEY = HEAT_3_5_1; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_2_193 +{ + VALUE = 9.2583984987613899e-01; + ERROR = 4.1269837142026783e-02; + DATE = 2010-07-13; + KEY = HEAT_3_5_2; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_0_193 +{ + VALUE = 1.8560116652036913e+00; + ERROR = 9.3502318628672892e-02; + DATE = 2010-07-13; + KEY = HEAT_5_7_0; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_1_193 +{ + VALUE = 3.1432129200576422e+00; + ERROR = 1.6712807745453528e-01; + DATE = 2010-07-13; + KEY = HEAT_5_7_1; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_2_193 +{ + VALUE = 2.0501379941793236e+00; + ERROR = 1.0584722875815550e-01; + DATE = 2010-07-13; + KEY = HEAT_5_7_2; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_0_193 +{ + VALUE = 2.1118472516664712e+00; + ERROR = 1.0922569677131942e-01; + DATE = 2010-07-13; + KEY = HEAT_7_5_0; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_1_193 +{ + VALUE = 5.1657481265815504e+00; + ERROR = 2.6349090927751107e-01; + DATE = 2010-07-13; + KEY = HEAT_7_5_1; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_2_193 +{ + VALUE = 2.8054043430745419e+00; + ERROR = 1.4735090844374307e-01; + DATE = 2010-07-13; + KEY = HEAT_7_5_2; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_0_193 +{ + VALUE = 7.1343724006693601e-02; + ERROR = 3.5765396140303289e-03; + DATE = 2010-07-13; + KEY = HEAT_2_2_0; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_1_193 +{ + VALUE = 8.1982682112832148e-02; + ERROR = 4.0792169078783672e-03; + DATE = 2010-07-13; + KEY = HEAT_2_2_1; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_2_193 +{ + VALUE = 2.0776650399235916e-02; + ERROR = 1.0673502290114883e-03; + DATE = 2010-07-13; + KEY = HEAT_2_2_2; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_0_193 +{ + VALUE = 3.3044607787782820e-01; + ERROR = 1.6893039113435922e-02; + DATE = 2010-07-13; + KEY = HEAT_7_2_0; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_1_193 +{ + VALUE = 5.4856097481003252e-01; + ERROR = 2.6787242939995348e-02; + DATE = 2010-07-13; + KEY = HEAT_7_2_1; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_2_193 +{ + VALUE = 3.6743043553883409e-01; + ERROR = 1.8490572064549411e-02; + DATE = 2010-07-13; + KEY = HEAT_7_2_2; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_0_255 +{ + VALUE = 6.2002757522528873e-01; + ERROR = 3.2517405624933778e-02; + DATE = 2010-09-13; + KEY = HEAT_5_3_0; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_1_255 +{ + VALUE = 1.0788067765173677e+00; + ERROR = 5.5102729025270296e-02; + DATE = 2010-09-13; + KEY = HEAT_5_3_1; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_2_255 +{ + VALUE = 8.5372487618739445e-01; + ERROR = 4.4072614124543164e-02; + DATE = 2010-09-13; + KEY = HEAT_5_3_2; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_0_255 +{ + VALUE = 7.5034366912679040e-01; + ERROR = 3.8102459731880180e-02; + DATE = 2010-09-13; + KEY = HEAT_3_5_0; LOCALIZATION { EAST = 3.5; NORTH = 5.5; @@ -24,90 +986,298 @@ SUMMARY_OBSERVATION HEAT_3_5_10 }; }; -SUMMARY_OBSERVATION HEAT_5_7_10 +SUMMARY_OBSERVATION HEAT_3_5_1_255 +{ + VALUE = 1.0496590001245421e+00; + ERROR = 4.9652864345857368e-02; + DATE = 2010-09-13; + KEY = HEAT_3_5_1; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_2_255 +{ + VALUE = 7.8991259450598372e-01; + ERROR = 4.0712355164276605e-02; + DATE = 2010-09-13; + KEY = HEAT_3_5_2; + LOCALIZATION { + EAST = 3.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_0_255 +{ + VALUE = 1.1722425107906063e+00; + ERROR = 5.7243541352517274e-02; + DATE = 2010-09-13; + KEY = HEAT_5_7_0; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_1_255 +{ + VALUE = 1.9342299855114133e+00; + ERROR = 1.0196109332367020e-01; + DATE = 2010-09-13; + KEY = HEAT_5_7_1; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_7_2_255 +{ + VALUE = 1.2728170498732303e+00; + ERROR = 6.6824172435771587e-02; + DATE = 2010-09-13; + KEY = HEAT_5_7_2; + LOCALIZATION { + EAST = 5.5; + NORTH = 7.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_0_255 +{ + VALUE = 1.4716591545169750e+00; + ERROR = 7.3562162034007825e-02; + DATE = 2010-09-13; + KEY = HEAT_7_5_0; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_1_255 +{ + VALUE = 3.2428494414979778e+00; + ERROR = 1.8098330671912538e-01; + DATE = 2010-09-13; + KEY = HEAT_7_5_1; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_2_255 +{ + VALUE = 2.0322347156350280e+00; + ERROR = 1.0284116926113883e-01; + DATE = 2010-09-13; + KEY = HEAT_7_5_2; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_0_255 +{ + VALUE = 8.6895338268428365e-02; + ERROR = 4.0747861996016507e-03; + DATE = 2010-09-13; + KEY = HEAT_2_2_0; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_1_255 +{ + VALUE = 1.1056424293171085e-01; + ERROR = 4.9013497427764854e-03; + DATE = 2010-09-13; + KEY = HEAT_2_2_1; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_2_255 +{ + VALUE = 3.4491673630836432e-02; + ERROR = 1.8726328207189988e-03; + DATE = 2010-09-13; + KEY = HEAT_2_2_2; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_0_255 +{ + VALUE = 2.7149075178722515e-01; + ERROR = 1.2551670198112770e-02; + DATE = 2010-09-13; + KEY = HEAT_7_2_0; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_1_255 +{ + VALUE = 4.2904980347374211e-01; + ERROR = 2.0903483684591290e-02; + DATE = 2010-09-13; + KEY = HEAT_7_2_1; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_2_255 +{ + VALUE = 3.6187189992707497e-01; + ERROR = 1.6577903078265864e-02; + DATE = 2010-09-13; + KEY = HEAT_7_2_2; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_0_316 +{ + VALUE = 4.3074011136189327e-01; + ERROR = 2.3386333164095961e-02; + DATE = 2010-11-13; + KEY = HEAT_5_3_0; + LOCALIZATION { + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_5_3_1_316 { - VALUE = 1.6248260776255606e+01; - ERROR = 7.7119866895224454e-01; - DATE = 2010-01-11; - KEY = HEAT_5_7; + VALUE = 7.7602050080109819e-01; + ERROR = 4.1395789785883146e-02; + DATE = 2010-11-13; + KEY = HEAT_5_3_1; LOCALIZATION { EAST = 5.5; - NORTH = 7.5; + NORTH = 3.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_7_5_10 +SUMMARY_OBSERVATION HEAT_5_3_2_316 { - VALUE = 2.2164467871159012e+01; - ERROR = 1.1721378322073848e+00; - DATE = 2010-01-11; - KEY = HEAT_7_5; + VALUE = 8.2841447929018064e-01; + ERROR = 3.9992159206291976e-02; + DATE = 2010-11-13; + KEY = HEAT_5_3_2; LOCALIZATION { - EAST = 7.5; + EAST = 5.5; + NORTH = 3.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_3_5_0_316 +{ + VALUE = 5.7793484513208648e-01; + ERROR = 2.7421006725420305e-02; + DATE = 2010-11-13; + KEY = HEAT_3_5_0; + LOCALIZATION { + EAST = 3.5; NORTH = 5.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_2_2_10 +SUMMARY_OBSERVATION HEAT_3_5_1_316 { - VALUE = 5.6442828911359863e-06; - ERROR = 3.0797309737272180e-07; - DATE = 2010-01-11; - KEY = HEAT_2_2; + VALUE = 7.9829514303228188e-01; + ERROR = 3.7400397753908840e-02; + DATE = 2010-11-13; + KEY = HEAT_3_5_1; LOCALIZATION { - EAST = 2.5; - NORTH = 2.5; + EAST = 3.5; + NORTH = 5.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_7_2_10 +SUMMARY_OBSERVATION HEAT_3_5_2_316 { - VALUE = 1.7635921858082477e+00; - ERROR = 8.7033494799282421e-02; - DATE = 2010-01-11; - KEY = HEAT_7_2; + VALUE = 6.7489655672457383e-01; + ERROR = 3.6507577869592189e-02; + DATE = 2010-11-13; + KEY = HEAT_3_5_2; LOCALIZATION { - EAST = 7.5; - NORTH = 2.5; + EAST = 3.5; + NORTH = 5.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_5_3_71 +SUMMARY_OBSERVATION HEAT_5_7_0_316 { - VALUE = 4.7514742061795374e+00; - ERROR = 2.3566933481375579e-01; - DATE = 2010-03-13; - KEY = HEAT_5_3; + VALUE = 6.7669479790477649e-01; + ERROR = 3.6612110621635788e-02; + DATE = 2010-11-13; + KEY = HEAT_5_7_0; LOCALIZATION { EAST = 5.5; - NORTH = 3.5; + NORTH = 7.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_3_5_71 +SUMMARY_OBSERVATION HEAT_5_7_1_316 { - VALUE = 3.4099513666573764e+00; - ERROR = 1.6236736528249898e-01; - DATE = 2010-03-13; - KEY = HEAT_3_5; + VALUE = 1.2300275341607960e+00; + ERROR = 6.4929639294334762e-02; + DATE = 2010-11-13; + KEY = HEAT_5_7_1; LOCALIZATION { - EAST = 3.5; - NORTH = 5.5; + EAST = 5.5; + NORTH = 7.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_5_7_71 +SUMMARY_OBSERVATION HEAT_5_7_2_316 { - VALUE = 7.7930579503176274e+00; - ERROR = 3.6514142637393660e-01; - DATE = 2010-03-13; - KEY = HEAT_5_7; + VALUE = 8.6129736529028789e-01; + ERROR = 4.3521263079543057e-02; + DATE = 2010-11-13; + KEY = HEAT_5_7_2; LOCALIZATION { EAST = 5.5; NORTH = 7.5; @@ -115,12 +1285,12 @@ SUMMARY_OBSERVATION HEAT_5_7_71 }; }; -SUMMARY_OBSERVATION HEAT_7_5_71 +SUMMARY_OBSERVATION HEAT_7_5_0_316 { - VALUE = 4.5148165902039805e+00; - ERROR = 2.4168886165619799e-01; - DATE = 2010-03-13; - KEY = HEAT_7_5; + VALUE = 9.9522791479846806e-01; + ERROR = 5.0327198381327480e-02; + DATE = 2010-11-13; + KEY = HEAT_7_5_0; LOCALIZATION { EAST = 7.5; NORTH = 5.5; @@ -128,103 +1298,103 @@ SUMMARY_OBSERVATION HEAT_7_5_71 }; }; -SUMMARY_OBSERVATION HEAT_2_2_71 +SUMMARY_OBSERVATION HEAT_7_5_1_316 { - VALUE = 1.2972441045640493e-01; - ERROR = 6.4594680531086168e-03; - DATE = 2010-03-13; - KEY = HEAT_2_2; + VALUE = 2.4873575894000055e+00; + ERROR = 1.2427214009013572e-01; + DATE = 2010-11-13; + KEY = HEAT_7_5_1; LOCALIZATION { - EAST = 2.5; - NORTH = 2.5; + EAST = 7.5; + NORTH = 5.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_7_2_71 +SUMMARY_OBSERVATION HEAT_7_5_2_316 { - VALUE = 2.0595838022128152e+00; - ERROR = 9.8258188254564560e-02; - DATE = 2010-03-13; - KEY = HEAT_7_2; + VALUE = 1.4478465050557867e+00; + ERROR = 7.1155314101870926e-02; + DATE = 2010-11-13; + KEY = HEAT_7_5_2; LOCALIZATION { EAST = 7.5; - NORTH = 2.5; + NORTH = 5.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_5_3_132 +SUMMARY_OBSERVATION HEAT_2_2_0_316 { - VALUE = 2.7605044703627408e+00; - ERROR = 1.3250138129273847e-01; - DATE = 2010-05-13; - KEY = HEAT_5_3; + VALUE = 7.7317438331403157e-02; + ERROR = 3.8813216617028579e-03; + DATE = 2010-11-13; + KEY = HEAT_2_2_0; LOCALIZATION { - EAST = 5.5; - NORTH = 3.5; + EAST = 2.5; + NORTH = 2.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_3_5_132 +SUMMARY_OBSERVATION HEAT_2_2_1_316 { - VALUE = 3.2485754515861460e+00; - ERROR = 1.5681634616330167e-01; - DATE = 2010-05-13; - KEY = HEAT_3_5; + VALUE = 1.0623429082661333e-01; + ERROR = 4.9683126988487245e-03; + DATE = 2010-11-13; + KEY = HEAT_2_2_1; LOCALIZATION { - EAST = 3.5; - NORTH = 5.5; + EAST = 2.5; + NORTH = 2.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_5_7_132 +SUMMARY_OBSERVATION HEAT_2_2_2_316 { - VALUE = 3.3842521444230935e+00; - ERROR = 1.6395530223185706e-01; - DATE = 2010-05-13; - KEY = HEAT_5_7; + VALUE = 4.9378384551612177e-02; + ERROR = 2.4798038096727395e-03; + DATE = 2010-11-13; + KEY = HEAT_2_2_2; LOCALIZATION { - EAST = 5.5; - NORTH = 7.5; + EAST = 2.5; + NORTH = 2.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_7_5_132 +SUMMARY_OBSERVATION HEAT_7_2_0_316 { - VALUE = 2.0614711878876326e+00; - ERROR = 9.8925364294717377e-02; - DATE = 2010-05-13; - KEY = HEAT_7_5; + VALUE = 1.8501449313471813e-01; + ERROR = 9.2072713590274687e-03; + DATE = 2010-11-13; + KEY = HEAT_7_2_0; LOCALIZATION { EAST = 7.5; - NORTH = 5.5; + NORTH = 2.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_2_2_132 +SUMMARY_OBSERVATION HEAT_7_2_1_316 { - VALUE = 4.4779702576801955e-01; - ERROR = 2.2178937646389424e-02; - DATE = 2010-05-13; - KEY = HEAT_2_2; + VALUE = 3.1111352143175230e-01; + ERROR = 1.5727593117016058e-02; + DATE = 2010-11-13; + KEY = HEAT_7_2_1; LOCALIZATION { - EAST = 2.5; + EAST = 7.5; NORTH = 2.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_7_2_132 +SUMMARY_OBSERVATION HEAT_7_2_2_316 { - VALUE = 9.6959850990936591e-01; - ERROR = 4.8023268662738129e-02; - DATE = 2010-05-13; - KEY = HEAT_7_2; + VALUE = 2.8934689336654390e-01; + ERROR = 1.3357177263346662e-02; + DATE = 2010-11-13; + KEY = HEAT_7_2_2; LOCALIZATION { EAST = 7.5; NORTH = 2.5; @@ -232,12 +1402,12 @@ SUMMARY_OBSERVATION HEAT_7_2_132 }; }; -SUMMARY_OBSERVATION HEAT_5_3_193 +SUMMARY_OBSERVATION HEAT_5_3_0_377 { - VALUE = 1.5710086331967876e+00; - ERROR = 8.5288706295565800e-02; - DATE = 2010-07-13; - KEY = HEAT_5_3; + VALUE = 3.2468817301324915e-01; + ERROR = 1.7210415785954784e-02; + DATE = 2011-01-13; + KEY = HEAT_5_3_0; LOCALIZATION { EAST = 5.5; NORTH = 3.5; @@ -245,103 +1415,103 @@ SUMMARY_OBSERVATION HEAT_5_3_193 }; }; -SUMMARY_OBSERVATION HEAT_3_5_193 +SUMMARY_OBSERVATION HEAT_5_3_1_377 { - VALUE = 2.4593591602914868e+00; - ERROR = 1.2647358189561586e-01; - DATE = 2010-07-13; - KEY = HEAT_3_5; + VALUE = 6.1618947286922954e-01; + ERROR = 3.1529222263227213e-02; + DATE = 2011-01-13; + KEY = HEAT_5_3_1; LOCALIZATION { - EAST = 3.5; - NORTH = 5.5; + EAST = 5.5; + NORTH = 3.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_5_7_193 +SUMMARY_OBSERVATION HEAT_5_3_2_377 { - VALUE = 1.6568063802480519e+00; - ERROR = 9.1293628986154007e-02; - DATE = 2010-07-13; - KEY = HEAT_5_7; + VALUE = 6.6381882712539508e-01; + ERROR = 3.4291768982073798e-02; + DATE = 2011-01-13; + KEY = HEAT_5_3_2; LOCALIZATION { EAST = 5.5; - NORTH = 7.5; + NORTH = 3.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_7_5_193 +SUMMARY_OBSERVATION HEAT_3_5_0_377 { - VALUE = 1.2126053149163205e+00; - ERROR = 5.4819993681636647e-02; - DATE = 2010-07-13; - KEY = HEAT_7_5; + VALUE = 3.5368829430761456e-01; + ERROR = 1.9921838920606370e-02; + DATE = 2011-01-13; + KEY = HEAT_3_5_0; LOCALIZATION { - EAST = 7.5; + EAST = 3.5; NORTH = 5.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_2_2_193 +SUMMARY_OBSERVATION HEAT_3_5_1_377 { - VALUE = 5.9581342946131322e-01; - ERROR = 3.0256941757332480e-02; - DATE = 2010-07-13; - KEY = HEAT_2_2; + VALUE = 5.7145330227757496e-01; + ERROR = 2.8435491104650212e-02; + DATE = 2011-01-13; + KEY = HEAT_3_5_1; LOCALIZATION { - EAST = 2.5; - NORTH = 2.5; + EAST = 3.5; + NORTH = 5.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_7_2_193 +SUMMARY_OBSERVATION HEAT_3_5_2_377 { - VALUE = 5.9324083948650996e-01; - ERROR = 2.9074626753866163e-02; - DATE = 2010-07-13; - KEY = HEAT_7_2; + VALUE = 5.8602709656927654e-01; + ERROR = 3.1058110225083087e-02; + DATE = 2011-01-13; + KEY = HEAT_3_5_2; LOCALIZATION { - EAST = 7.5; - NORTH = 2.5; + EAST = 3.5; + NORTH = 5.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_5_3_255 +SUMMARY_OBSERVATION HEAT_5_7_0_377 { - VALUE = 1.2544246607794849e+00; - ERROR = 5.9704412976213254e-02; - DATE = 2010-09-13; - KEY = HEAT_5_3; + VALUE = 4.7931439192604908e-01; + ERROR = 2.4191528074402415e-02; + DATE = 2011-01-13; + KEY = HEAT_5_7_0; LOCALIZATION { EAST = 5.5; - NORTH = 3.5; + NORTH = 7.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_3_5_255 +SUMMARY_OBSERVATION HEAT_5_7_1_377 { - VALUE = 1.9783727461876865e+00; - ERROR = 9.8647945021979141e-02; - DATE = 2010-09-13; - KEY = HEAT_3_5; + VALUE = 9.3183216553604209e-01; + ERROR = 4.2737320177395142e-02; + DATE = 2011-01-13; + KEY = HEAT_5_7_1; LOCALIZATION { - EAST = 3.5; - NORTH = 5.5; + EAST = 5.5; + NORTH = 7.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_5_7_255 +SUMMARY_OBSERVATION HEAT_5_7_2_377 { - VALUE = 1.1879846427927687e+00; - ERROR = 5.7891275400710200e-02; - DATE = 2010-09-13; - KEY = HEAT_5_7; + VALUE = 6.2208726981585871e-01; + ERROR = 2.9099109852602834e-02; + DATE = 2011-01-13; + KEY = HEAT_5_7_2; LOCALIZATION { EAST = 5.5; NORTH = 7.5; @@ -349,12 +1519,12 @@ SUMMARY_OBSERVATION HEAT_5_7_255 }; }; -SUMMARY_OBSERVATION HEAT_7_5_255 +SUMMARY_OBSERVATION HEAT_7_5_0_377 { - VALUE = 7.0093432411261458e-01; - ERROR = 3.5133799609682777e-02; - DATE = 2010-09-13; - KEY = HEAT_7_5; + VALUE = 7.1362615697823573e-01; + ERROR = 3.4748258597471472e-02; + DATE = 2011-01-13; + KEY = HEAT_7_5_0; LOCALIZATION { EAST = 7.5; NORTH = 5.5; @@ -362,103 +1532,103 @@ SUMMARY_OBSERVATION HEAT_7_5_255 }; }; -SUMMARY_OBSERVATION HEAT_2_2_255 +SUMMARY_OBSERVATION HEAT_7_5_1_377 { - VALUE = 6.2273073743434182e-01; - ERROR = 3.0970706785202192e-02; - DATE = 2010-09-13; - KEY = HEAT_2_2; + VALUE = 1.7077073302661316e+00; + ERROR = 8.5595889891332849e-02; + DATE = 2011-01-13; + KEY = HEAT_7_5_1; LOCALIZATION { - EAST = 2.5; - NORTH = 2.5; + EAST = 7.5; + NORTH = 5.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_7_2_255 +SUMMARY_OBSERVATION HEAT_7_5_2_377 { - VALUE = 3.5755049481122259e-01; - ERROR = 1.9673050794904112e-02; - DATE = 2010-09-13; - KEY = HEAT_7_2; + VALUE = 9.4635171210193358e-01; + ERROR = 4.9282262245511584e-02; + DATE = 2011-01-13; + KEY = HEAT_7_5_2; LOCALIZATION { EAST = 7.5; - NORTH = 2.5; + NORTH = 5.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_5_3_316 +SUMMARY_OBSERVATION HEAT_2_2_0_377 { - VALUE = 9.1993072779365348e-01; - ERROR = 4.4394199109937332e-02; - DATE = 2010-11-13; - KEY = HEAT_5_3; + VALUE = 7.0961016098340296e-02; + ERROR = 3.4403023731369221e-03; + DATE = 2011-01-13; + KEY = HEAT_2_2_0; LOCALIZATION { - EAST = 5.5; - NORTH = 3.5; + EAST = 2.5; + NORTH = 2.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_3_5_316 +SUMMARY_OBSERVATION HEAT_2_2_1_377 { - VALUE = 1.4124126377258328e+00; - ERROR = 7.7175312205477020e-02; - DATE = 2010-11-13; - KEY = HEAT_3_5; + VALUE = 9.0743060158972974e-02; + ERROR = 4.6770798049268481e-03; + DATE = 2011-01-13; + KEY = HEAT_2_2_1; LOCALIZATION { - EAST = 3.5; - NORTH = 5.5; + EAST = 2.5; + NORTH = 2.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_5_7_316 +SUMMARY_OBSERVATION HEAT_2_2_2_377 { - VALUE = 7.6041100435886388e-01; - ERROR = 4.0243854528891482e-02; - DATE = 2010-11-13; - KEY = HEAT_5_7; + VALUE = 5.6853565618356382e-02; + ERROR = 2.8339189766911736e-03; + DATE = 2011-01-13; + KEY = HEAT_2_2_2; LOCALIZATION { - EAST = 5.5; - NORTH = 7.5; + EAST = 2.5; + NORTH = 2.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_7_5_316 +SUMMARY_OBSERVATION HEAT_7_2_0_377 { - VALUE = 5.0294660846051431e-01; - ERROR = 2.4744371001428050e-02; - DATE = 2010-11-13; - KEY = HEAT_7_5; + VALUE = 1.3667021028256551e-01; + ERROR = 6.7220221645839656e-03; + DATE = 2011-01-13; + KEY = HEAT_7_2_0; LOCALIZATION { EAST = 7.5; - NORTH = 5.5; + NORTH = 2.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_2_2_316 +SUMMARY_OBSERVATION HEAT_7_2_1_377 { - VALUE = 5.5246143505395084e-01; - ERROR = 2.8125076404487734e-02; - DATE = 2010-11-13; - KEY = HEAT_2_2; + VALUE = 2.2744333053211319e-01; + ERROR = 1.1640778801193742e-02; + DATE = 2011-01-13; + KEY = HEAT_7_2_1; LOCALIZATION { - EAST = 2.5; + EAST = 7.5; NORTH = 2.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_7_2_316 +SUMMARY_OBSERVATION HEAT_7_2_2_377 { - VALUE = 2.8338478245355730e-01; - ERROR = 1.4347799635254097e-02; - DATE = 2010-11-13; - KEY = HEAT_7_2; + VALUE = 2.2415035838240754e-01; + ERROR = 1.0260905708072761e-02; + DATE = 2011-01-13; + KEY = HEAT_7_2_2; LOCALIZATION { EAST = 7.5; NORTH = 2.5; @@ -466,12 +1636,12 @@ SUMMARY_OBSERVATION HEAT_7_2_316 }; }; -SUMMARY_OBSERVATION HEAT_5_3_377 +SUMMARY_OBSERVATION HEAT_5_3_0_438 { - VALUE = 6.6124655551221356e-01; - ERROR = 3.4056140511841845e-02; - DATE = 2011-01-13; - KEY = HEAT_5_3; + VALUE = 2.6171509942828219e-01; + ERROR = 1.2870803882890186e-02; + DATE = 2011-03-15; + KEY = HEAT_5_3_0; LOCALIZATION { EAST = 5.5; NORTH = 3.5; @@ -479,103 +1649,103 @@ SUMMARY_OBSERVATION HEAT_5_3_377 }; }; -SUMMARY_OBSERVATION HEAT_3_5_377 +SUMMARY_OBSERVATION HEAT_5_3_1_438 { - VALUE = 1.2130120794617432e+00; - ERROR = 6.0585586612015310e-02; - DATE = 2011-01-13; - KEY = HEAT_3_5; + VALUE = 4.7068112615859509e-01; + ERROR = 2.4205303386065233e-02; + DATE = 2011-03-15; + KEY = HEAT_5_3_1; LOCALIZATION { - EAST = 3.5; - NORTH = 5.5; + EAST = 5.5; + NORTH = 3.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_5_7_377 +SUMMARY_OBSERVATION HEAT_5_3_2_438 { - VALUE = 6.0181317831222669e-01; - ERROR = 2.9445994399171317e-02; - DATE = 2011-01-13; - KEY = HEAT_5_7; + VALUE = 5.3664756953284254e-01; + ERROR = 2.8442904714421721e-02; + DATE = 2011-03-15; + KEY = HEAT_5_3_2; LOCALIZATION { EAST = 5.5; - NORTH = 7.5; + NORTH = 3.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_7_5_377 +SUMMARY_OBSERVATION HEAT_3_5_0_438 { - VALUE = 3.5652866444609060e-01; - ERROR = 1.8328942601053527e-02; - DATE = 2011-01-13; - KEY = HEAT_7_5; + VALUE = 2.9018839689596487e-01; + ERROR = 1.4680777387646560e-02; + DATE = 2011-03-15; + KEY = HEAT_3_5_0; LOCALIZATION { - EAST = 7.5; + EAST = 3.5; NORTH = 5.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_2_2_377 +SUMMARY_OBSERVATION HEAT_3_5_1_438 { - VALUE = 5.1459133716815741e-01; - ERROR = 2.4116728326928134e-02; - DATE = 2011-01-13; - KEY = HEAT_2_2; + VALUE = 4.6004145746261549e-01; + ERROR = 2.1796452083193928e-02; + DATE = 2011-03-15; + KEY = HEAT_3_5_1; LOCALIZATION { - EAST = 2.5; - NORTH = 2.5; + EAST = 3.5; + NORTH = 5.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_7_2_377 +SUMMARY_OBSERVATION HEAT_3_5_2_438 { - VALUE = 2.3849281865457969e-01; - ERROR = 1.0882878724937851e-02; - DATE = 2011-01-13; - KEY = HEAT_7_2; + VALUE = 5.3835774561954608e-01; + ERROR = 2.5639911235489421e-02; + DATE = 2011-03-15; + KEY = HEAT_3_5_2; LOCALIZATION { - EAST = 7.5; - NORTH = 2.5; + EAST = 3.5; + NORTH = 5.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_5_3_438 +SUMMARY_OBSERVATION HEAT_5_7_0_438 { - VALUE = 5.4970943845939646e-01; - ERROR = 2.6578037415319125e-02; + VALUE = 3.0635130668084010e-01; + ERROR = 1.6413036809198062e-02; DATE = 2011-03-15; - KEY = HEAT_5_3; + KEY = HEAT_5_7_0; LOCALIZATION { EAST = 5.5; - NORTH = 3.5; + NORTH = 7.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_3_5_438 +SUMMARY_OBSERVATION HEAT_5_7_1_438 { - VALUE = 9.2958986968124691e-01; - ERROR = 4.7709727921139727e-02; + VALUE = 6.1921826944539493e-01; + ERROR = 2.8906248018736244e-02; DATE = 2011-03-15; - KEY = HEAT_3_5; + KEY = HEAT_5_7_1; LOCALIZATION { - EAST = 3.5; - NORTH = 5.5; + EAST = 5.5; + NORTH = 7.5; RADIUS = 15; }; }; -SUMMARY_OBSERVATION HEAT_5_7_438 +SUMMARY_OBSERVATION HEAT_5_7_2_438 { - VALUE = 4.4804794152498839e-01; - ERROR = 2.2226512074936630e-02; + VALUE = 3.9142013017849880e-01; + ERROR = 1.9910119225829023e-02; DATE = 2011-03-15; - KEY = HEAT_5_7; + KEY = HEAT_5_7_2; LOCALIZATION { EAST = 5.5; NORTH = 7.5; @@ -583,12 +1753,38 @@ SUMMARY_OBSERVATION HEAT_5_7_438 }; }; -SUMMARY_OBSERVATION HEAT_7_5_438 +SUMMARY_OBSERVATION HEAT_7_5_0_438 +{ + VALUE = 5.4260381867125407e-01; + ERROR = 2.4194470563718883e-02; + DATE = 2011-03-15; + KEY = HEAT_7_5_0; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_1_438 +{ + VALUE = 1.2065794103906369e+00; + ERROR = 5.9312847101158632e-02; + DATE = 2011-03-15; + KEY = HEAT_7_5_1; + LOCALIZATION { + EAST = 7.5; + NORTH = 5.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_5_2_438 { - VALUE = 2.7582807044216134e-01; - ERROR = 1.3980361433931335e-02; + VALUE = 7.3895355480689728e-01; + ERROR = 3.4330924506601607e-02; DATE = 2011-03-15; - KEY = HEAT_7_5; + KEY = HEAT_7_5_2; LOCALIZATION { EAST = 7.5; NORTH = 5.5; @@ -596,12 +1792,38 @@ SUMMARY_OBSERVATION HEAT_7_5_438 }; }; -SUMMARY_OBSERVATION HEAT_2_2_438 +SUMMARY_OBSERVATION HEAT_2_2_0_438 +{ + VALUE = 6.0429218319116490e-02; + ERROR = 2.9628210439273158e-03; + DATE = 2011-03-15; + KEY = HEAT_2_2_0; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_1_438 +{ + VALUE = 8.5881477045269022e-02; + ERROR = 4.2481936208067792e-03; + DATE = 2011-03-15; + KEY = HEAT_2_2_1; + LOCALIZATION { + EAST = 2.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_2_2_2_438 { - VALUE = 3.9953767755372999e-01; - ERROR = 2.0053305020356939e-02; + VALUE = 5.7558104710875350e-02; + ERROR = 2.9653348934060909e-03; DATE = 2011-03-15; - KEY = HEAT_2_2; + KEY = HEAT_2_2_2; LOCALIZATION { EAST = 2.5; NORTH = 2.5; @@ -609,12 +1831,38 @@ SUMMARY_OBSERVATION HEAT_2_2_438 }; }; -SUMMARY_OBSERVATION HEAT_7_2_438 +SUMMARY_OBSERVATION HEAT_7_2_0_438 +{ + VALUE = 9.8287048971491736e-02; + ERROR = 4.9137888800816123e-03; + DATE = 2011-03-15; + KEY = HEAT_7_2_0; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_1_438 +{ + VALUE = 1.5889772953575820e-01; + ERROR = 8.5733110976177300e-03; + DATE = 2011-03-15; + KEY = HEAT_7_2_1; + LOCALIZATION { + EAST = 7.5; + NORTH = 2.5; + RADIUS = 15; + }; +}; + +SUMMARY_OBSERVATION HEAT_7_2_2_438 { - VALUE = 1.7204797615034187e-01; - ERROR = 8.4376087520336620e-03; + VALUE = 1.5541371698520634e-01; + ERROR = 7.7217527212172276e-03; DATE = 2011-03-15; - KEY = HEAT_7_2; + KEY = HEAT_7_2_2; LOCALIZATION { EAST = 7.5; NORTH = 2.5;