<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px"><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr"><span id="yui_3_16_0_1_1427853979485_6000">Thanks Matt. I'm still getting the malloc error </span></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr"><span><br></span></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style="">[0]PETSC ERROR: Argument out of range!</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr"></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style="">[0]PETSC ERROR: New nonzero at (2,18) caused a malloc!</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr"><span><br></span></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr"><span id="yui_3_16_0_1_1427853979485_6692">and </span></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr"><span><br></span></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr"><span id="yui_3_16_0_1_1427853979485_6690">a new incorrect matrix file error:</span></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr"><span><br></span></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style="">[0]PETSC ERROR: Unexpected data in file!</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr"></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style="">[0]PETSC ERROR: not matrix object!</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><br></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style="">Maybe the order of calls is mixed up. This is the code snippet:</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><br></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>if (rank ==0)</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>{</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span> PetscPrintf (PETSC_COMM_WORLD,"\n On rank %d ", rank);</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span> </div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>CHKERRQ(MatSetSizes(A, 15, PETSC_DETERMINE, 20, 20));</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>CHKERRQ(MatSetType(A, MATMPIBAIJ));</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>CHKERRQ( MatMPIBAIJSetPreallocation(A,1,1,NULL,1,NULL));</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>CHKERRQ( MatLoad(A,fd)); </div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span> CHKERRQ(MatSetOption(A,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_FALSE));</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>}</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>else</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>{</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>PetscPrintf (PETSC_COMM_WORLD,"\n On rank %d ", rank);</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>CHKERRQ( MatSetSizes(A, 5, PETSC_DETERMINE, 20, 20) );</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>CHKERRQ(MatSetType(A, MATMPIBAIJ));</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>CHKERRQ( MatMPIBAIJSetPreallocation(A,1,1,NULL,1,NULL));</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>CHKERRQ(MatLoad(A,fd));</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span>CHKERRQ(MatSetOption(A,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_FALSE));</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span><span class="" style="white-space: pre;"> </span>}</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><br></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style="">Is there something I'm missing? </div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><br></div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style="">Thanks,</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style="">Steena</div><div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style="white-space:pre"> </span></div> <div id="yui_3_16_0_1_1427853979485_5384" dir="ltr" class="" style=""><span class="" style=""><br class="" style=""></span></div><br><div class="qtdSeparateBR"><br><br></div><div class="yahoo_quoted" style="display: block;"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;"> <div dir="ltr"> <font size="2" face="Arial"> On Tuesday, March 31, 2015 6:10 PM, Matthew Knepley <knepley@gmail.com> wrote:<br> </font> </div> <br><br> <div class="y_msg_container"><div id="yiv9667199313"><div><div dir="ltr"><div class="yiv9667199313gmail_extra"><div class="yiv9667199313gmail_quote">On Tue, Mar 31, 2015 at 6:51 PM, Steena M <span dir="ltr"><<a rel="nofollow" shape="rect" ymailto="mailto:stm8086@yahoo.com" target="_blank" href="mailto:stm8086@yahoo.com">stm8086@yahoo.com</a>></span> wrote:<br clear="none"><blockquote class="yiv9667199313gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex;">Thanks Barry. I'm still getting the malloc error with NULL. Is there a way to distribute the matrix without explicit preallocation? Different matrices will be loaded during runtime and assigning preallocation parameters would mean an additional preprocessing step.<br clear="none"></blockquote><div><br clear="none"></div><div>1) MatSetOption(<span style="color:rgb(0,0,0);font-family:Times;font-size:medium;">MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE)</span></div><div> </div><div>2) Note that this is never ever ever more efficient than making another pass and preallocating</div><div><br clear="none"></div><div> Thanks,</div><div><br clear="none"></div><div> Matt</div><blockquote class="yiv9667199313gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex;">
--------------------------------------------<br clear="none">
On Sun, 3/29/15, Barry Smith <<a rel="nofollow" shape="rect" ymailto="mailto:bsmith@mcs.anl.gov" target="_blank" href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br clear="none">
<br clear="none">
Subject: Re: [petsc-users] Unequal sparse matrix row distribution for MPI MatMult<br clear="none">
To: "Steena M" <<a rel="nofollow" shape="rect" ymailto="mailto:stm8086@yahoo.com" target="_blank" href="mailto:stm8086@yahoo.com">stm8086@yahoo.com</a>><br clear="none">
Cc: "Matthew Knepley" <<a rel="nofollow" shape="rect" ymailto="mailto:knepley@gmail.com" target="_blank" href="mailto:knepley@gmail.com">knepley@gmail.com</a>>, <a rel="nofollow" shape="rect" ymailto="mailto:petsc-users@mcs.anl.gov" target="_blank" href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a><br clear="none">
Date: Sunday, March 29, 2015, 9:26 PM<br clear="none">
<br clear="none">
<br clear="none">
> On<br clear="none">
Mar 29, 2015, at 11:05 PM, Steena M <<a rel="nofollow" shape="rect" ymailto="mailto:stm8086@yahoo.com" target="_blank" href="mailto:stm8086@yahoo.com">stm8086@yahoo.com</a>><br clear="none">
wrote:<br clear="none">
><br clear="none">
> Thanks<br clear="none">
Matt. I used PETSC_DETERMINE but I'm now getting an<br clear="none">
allocation-based error:<br clear="none">
><br clear="none">
> [0]PETSC ERROR: ---------------------<br clear="none">
Error Message ------------------------------------<br clear="none">
> [0]PETSC ERROR: Argument out of range!<br clear="none">
> [0]PETSC ERROR: New nonzero at (2,18)<br clear="none">
caused a malloc!<br clear="none">
> [0]PETSC ERROR:<br clear="none">
------------------------------------------------------------------------<br clear="none">
><br clear="none">
> I tried<br clear="none">
preallocating on each rank for the diagonal and off diagonal<br clear="none">
section of the matrix as the next step My current<br clear="none">
approximations for preallocation<br clear="none">
><br clear="none">
> CHKERRQ(<br clear="none">
MatMPIBAIJSetPreallocation(A,1,5,PETSC_DEFAULT,5,PETSC_DEFAULT)); <br clear="none">
<br clear="none">
<br clear="none">
These<br clear="none">
arguments where you pass PETSC_DEFAULT are expecting a<br clear="none">
pointer not an integer. You can pass NULL in those<br clear="none">
locations. Though it is better to provide the correct<br clear="none">
preallocation rather than some defaults.<br clear="none">
<br clear="none">
Barry<br clear="none">
<br clear="none">
><br clear="none">
> are throwing segmentation errors.<br clear="none">
><br clear="none">
> [0]PETSC ERROR: <br clear="none">
Caught signal number 11 SEGV: Segmentation Violation,<br clear="none">
probably memory access out of range<br clear="none">
><br clear="none">
> Any insights into what I'm doing<br clear="none">
wrong?<br clear="none">
><br clear="none">
> Thanks,<br clear="none">
> Steena<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> On Sun, 3/29/15, Matthew Knepley <<a rel="nofollow" shape="rect" ymailto="mailto:knepley@gmail.com" target="_blank" href="mailto:knepley@gmail.com">knepley@gmail.com</a>><br clear="none">
wrote:<br clear="none">
><br clear="none">
> Subject:<br clear="none">
Re: [petsc-users] Unequal sparse matrix row distribution for<br clear="none">
MPI MatMult<br clear="none">
> To: "Steena M"<br clear="none">
<<a rel="nofollow" shape="rect" ymailto="mailto:stm8086@yahoo.com" target="_blank" href="mailto:stm8086@yahoo.com">stm8086@yahoo.com</a>><br clear="none">
> Cc: "Barry Smith" <<a rel="nofollow" shape="rect" ymailto="mailto:bsmith@mcs.anl.gov" target="_blank" href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>>,<br clear="none">
<a rel="nofollow" shape="rect" ymailto="mailto:petsc-users@mcs.anl.gov" target="_blank" href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a><br clear="none">
> Date: Sunday, March 29, 2015, 10:02 PM<br clear="none">
><br clear="none">
> On Sun, Mar 29, 2015<br clear="none">
at<br clear="none">
> 9:56 PM, Steena M <<a rel="nofollow" shape="rect" ymailto="mailto:stm8086@yahoo.com" target="_blank" href="mailto:stm8086@yahoo.com">stm8086@yahoo.com</a>><br clear="none">
> wrote:<br clear="none">
> Hi<br clear="none">
> Barry,<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> I am trying to partition a 20 row and 20<br clear="none">
col sparse matrix<br clear="none">
> between two procs<br clear="none">
such that proc 0 has 15 rows and 20 cols<br clear="none">
> and proc 1 has 5 rows and 20 cols. The<br clear="none">
code snippet:<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> <br clear="none">
CHKERRQ(MatCreate(PETSC_COMM_WORLD,&A));<br clear="none">
//<br clear="none">
> at runtime: -matload_block_size 1<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> <br clear="none">
if (rank ==0)<br clear="none">
><br clear="none">
> {<br clear="none">
><br clear="none">
> <br clear="none">
CHKERRQ( MatSetSizes(A, 15, 20, 20,<br clear="none">
> 20) ); //rank 0 gets 75% of the rows<br clear="none">
><br clear="none">
> <br clear="none">
CHKERRQ( MatSetType(A, MATMPIBAIJ)<br clear="none">
> );<br clear="none">
><br clear="none">
> CHKERRQ(<br clear="none">
MatLoad(A,fd) );<br clear="none">
><br clear="none">
> }<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> else<br clear="none">
><br clear="none">
> <br clear="none">
{<br clear="none">
><br clear="none">
> <br clear="none">
CHKERRQ( MatSetSizes(A, 5,<br clear="none">
20, 20,<br clear="none">
> 20) ); //rank 1 gets 25% of the<br clear="none">
rows<br clear="none">
><br clear="none">
> <br clear="none">
CHKERRQ( MatSetType(A, MATMPIBAIJ)<br clear="none">
> );<br clear="none">
><br clear="none">
> CHKERRQ(<br clear="none">
MatLoad(A,fd) );<br clear="none">
><br clear="none">
> }<br clear="none">
><br clear="none">
<br clear="none">
><br clear="none">
><br clear="none">
> This throws the following error (probably<br clear="none">
from psplit.c):<br clear="none">
><br clear="none">
><br clear="none">
[1]PETSC ERROR: --------------------- Error Message<br clear="none">
> ------------------------------------<br clear="none">
><br clear="none">
> [1]PETSC ERROR:<br clear="none">
Nonconforming object sizes!<br clear="none">
><br clear="none">
> [1]PETSC ERROR: Sum of local lengths 40<br clear="none">
does not equal<br clear="none">
> global length 20, my<br clear="none">
local length 20<br clear="none">
><br clear="none">
> likely a call to<br clear="none">
VecSetSizes() or MatSetSizes() is<br clear="none">
><br clear="none">
wrong.<br clear="none">
><br clear="none">
> See<br clear="none">
<a rel="nofollow" shape="rect" target="_blank" href="http://www.mcs.anl.gov/petsc/documentation/faq.html#split">http://www.mcs.anl.gov/petsc/documentation/faq.html#split</a>!<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> This error printout<br clear="none">
doesn't quite make sense to me.<br clear="none">
><br clear="none">
I'm trying to specify a total matrix size of 20x20...<br clear="none">
I<br clear="none">
> haven't yet figured out where the<br clear="none">
'40' comes<br clear="none">
> from in the error<br clear="none">
message.<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> Any thoughts on what<br clear="none">
might be going wrong?<br clear="none">
><br clear="none">
> Its the column specification. Just<br clear="none">
> use PETSC_DETERMINE for the local columns<br clear="none">
since all our<br clear="none">
> sparse matrixformats are<br clear="none">
row divisions<br clear="none">
> anyway.<br clear="none">
> <br clear="none">
> Thanks,<br clear="none">
> <br clear="none">
> Matt<br clear="none">
> Thanks in advance,<br clear="none">
><br clear="none">
<br clear="none">
> Steena<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
--------------------------------------------<br clear="none">
><br clear="none">
> On Sun, 3/22/15,<br clear="none">
Barry Smith <<a rel="nofollow" shape="rect" ymailto="mailto:bsmith@mcs.anl.gov" target="_blank" href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>><br clear="none">
> wrote:<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> Subject: Re: [petsc-users] Unequal<br clear="none">
sparse matrix row<br clear="none">
> distribution for MPI<br clear="none">
MatMult<br clear="none">
><br clear="none">
> To:<br clear="none">
"Steena M" <<a rel="nofollow" shape="rect" ymailto="mailto:stm8086@yahoo.com" target="_blank" href="mailto:stm8086@yahoo.com">stm8086@yahoo.com</a>><br clear="none">
><br clear="none">
> Cc: <a rel="nofollow" shape="rect" ymailto="mailto:petsc-users@mcs.anl.gov" target="_blank" href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a><br clear="none">
><br clear="none">
> Date: Sunday,<br clear="none">
March 22, 2015, 3:58 PM<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> <br clear="none">
><br clear="none">
> Steena,<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> I am<br clear="none">
><br clear="none">
<br clear="none">
> a little unsure of your question.<br clear="none">
<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> 1)<br clear="none">
you can create a MPIBAIJ<br clear="none">
><br clear="none">
> matrix with any distribution of block<br clear="none">
rows per process<br clear="none">
> you<br clear="none">
><br clear="none">
> want, just set the<br clear="none">
local row size for each process to<br clear="none">
><br clear="none">
be<br clear="none">
><br clear="none">
> what you<br clear="none">
like. Use MatCreateVecs() to get<br clear="none">
><br clear="none">
correspondingly<br clear="none">
><br clear="none">
> <br clear="none">
laid out vectors.<br clear="none">
><br clear="none">
><br clear="none">
<br clear="none">
><br clear="none">
> <br clear="none">
or 2) if you have a MPIBAIJ<br clear="none">
><br clear="none">
> matrix with<br clear="none">
"equal" row layout and you want a<br clear="none">
> new<br clear="none">
><br clear="none">
> one with uneven row layout you can<br clear="none">
simply use<br clear="none">
><br clear="none">
> <br clear="none">
MatGetSubMatrix() to create that new matrix.<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> Barry<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> Unless you have<br clear="none">
another reason to have the<br clear="none">
><br clear="none">
> matrix with an equal number row layout I<br clear="none">
would just<br clear="none">
> generate<br clear="none">
><br clear="none">
> the matrix with<br clear="none">
the layout you want.<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> > On Mar 22, 2015, at 5:50 PM, Steena<br clear="none">
M<br clear="none">
><br clear="none">
> <<a rel="nofollow" shape="rect" ymailto="mailto:stm8086@yahoo.com" target="_blank" href="mailto:stm8086@yahoo.com">stm8086@yahoo.com</a>><br clear="none">
><br clear="none">
> wrote:<br clear="none">
><br clear="none">
> ><br clear="none">
><br clear="none">
> > Hello,<br clear="none">
><br clear="none">
> ><br clear="none">
><br clear="none">
> > I need to<br clear="none">
distribute<br clear="none">
><br clear="none">
> a<br clear="none">
sparse matrix such that each proc owns an unequal<br clear="none">
> number<br clear="none">
><br clear="none">
> of blocked rows before I proceed with<br clear="none">
MPI MatMult. My<br clear="none">
><br clear="none">
> <br clear="none">
initial thoughts on doing this:<br clear="none">
><br clear="none">
> ><br clear="none">
><br clear="none">
> > 1) Use MatGetSubMatrices() on the<br clear="none">
test<br clear="none">
><br clear="none">
> MATMPIBAIJ<br clear="none">
matrix to produce a new matrix where each<br clear="none">
> proc<br clear="none">
><br clear="none">
> has an unequal number of rows.<br clear="none">
><br clear="none">
> ><br clear="none">
><br clear="none">
> > 2) Provide<br clear="none">
scatter context for vector X<br clear="none">
><br clear="none">
> (for MatMult )using IS iscol from<br clear="none">
MatGetSubMatrices()<br clear="none">
> while<br clear="none">
><br clear="none">
> creating the<br clear="none">
vector X.<br clear="none">
><br clear="none">
> <br clear="none">
><br clear="none">
><br clear="none">
> > 3)<br clear="none">
Call MatMult()<br clear="none">
><br clear="none">
> <br clear="none">
><br clear="none">
><br clear="none">
> > Will<br clear="none">
MatMult_MPIBAIJ continue to scatter<br clear="none">
><br clear="none">
> this matrix and vector such that each<br clear="none">
proc will own an<br clear="none">
> equal<br clear="none">
><br clear="none">
> number of matrix<br clear="none">
rows and corresponding diagonal vector<br clear="none">
><br clear="none">
<br clear="none">
> elements? Should I write my own<br clear="none">
MPIMatMult function to<br clear="none">
><br clear="none">
> retain my redistribution of the matrix<br clear="none">
and vector?<br clear="none">
><br clear="none">
> <br clear="none">
><br clear="none">
><br clear="none">
> ><br clear="none">
Thanks in<br clear="none">
><br clear="none">
> <br clear="none">
advance,<br clear="none">
><br clear="none">
> ><br clear="none">
Steena<br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
><br clear="none">
> --<br clear="none">
> What most<br clear="none">
experimenters<br clear="none">
> take for granted before<br clear="none">
they begin their experiments is<br clear="none">
><br clear="none">
infinitely more interesting than any results to which<br clear="none">
their<br clear="none">
> experiments lead.<br clear="none">
> -- Norbert<br clear="none">
> Wiener<div class="yiv9667199313yqt5990301542" id="yiv9667199313yqtfd15474"><br clear="none">
><br clear="none">
<br clear="none">
</div></blockquote></div><div class="yiv9667199313yqt5990301542" id="yiv9667199313yqtfd75027"><br clear="none"><br clear="all"><div><br clear="none"></div>-- <br clear="none"><div class="yiv9667199313gmail_signature">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br clear="none">-- Norbert Wiener</div>
</div></div></div></div></div><br><br></div> </div> </div> </div></div></body></html>