<p dir="ltr">Klaus,</p>
<p dir="ltr">    Thanks for the clarification. Indeed, I tend to be a bit paranoid at this point and do both Eos_wrapped and fill guard cells when I do these type of changes. Also, thanks for catching my bad syntax on the guard cell filling, I confess I was responding at the airport on my phone.</p>
<p dir="ltr">Cordially,</p>
<p dir="ltr">Josh</p>
<br><div class="gmail_quote"><div dir="ltr">On Wed, May 31, 2017, 12:01 AM Klaus Weide <<a href="mailto:klaus@flash.uchicago.edu">klaus@flash.uchicago.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Fri, 26 May 2017, Joshua Wall wrote:<br>
<br>
> Hello Jon,<br>
><br>
>      There's two ways to do the EOS update. One is to call Eos_wrapped at<br>
> the end of the block loop on each block you update as you go through the<br>
> loop. Make sure you pass which mode you want based on the variables you<br>
> updated, which here sounds like pressure and internal energy.<br>
<br>
That's usually the way to do it.<br>
<br>
> So that would<br>
> look something like:<br>
><br>
><br>
> do blk=1, numBlocks<br>
><br>
> blockID = blockList(blk)<br>
><br>
> call Grid_getBlkLimits(blockID, blkLimits, blkLimitsGC)<br>
><br>
> call Grid_getBlkPtr(blockID, solnData)<br>
>    do i<br>
>      do j<br>
>        do k<br>
><br>
>           solnData(DENS_VAR,i,j,k) = stuff<br>
>           solnData(EINT_VAR,i,j,k) = stuff<br>
<br>
To make sure the Eos_wrapped call below does not get confused,<br>
one should also modify ENER_VAR when modifying EINT_VAR.<br>
Usually by adding the same amount to both variables.<br>
(Even more variables should be modified if using 3T Hydro<br>
and Eos.)<br>
<br>
><br>
>          end do<br>
>       end do<br>
>     end do<br>
><br>
>     call Eos_wrapped(MODE_DENS_EI, blkLimits, blockID)<br>
><br>
> end do<br>
><br>
> The other way to do it is to:<br>
><br>
>  call Grid_fillGuardCells(CENTER, ALL_DIR, LEAF, doEos=.true.,<br>
> eosMode=MODE_DENS_EI)<br>
<br>
1. This call is not valid as written, or at least extremely confusing.<br>
I assume the "LEAF" is meant as a value for the (optional)<br>
"selectBlockType" dummy argument; if that is true, the call should be<br>
written as<br>
<br>
|  call Grid_fillGuardCells(CENTER, ALL_DIR, selectBlockType=LEAF,<br>
|   doEos=.true.,eosMode=MODE_DENS_EI)<br>
<br>
Otherwise the compiler will interpret it as ...,minLayers=LEAF,...,<br>
which is probably not intended.<br>
<br>
1. This call does *not* apply the Eos to interior cells, but only to<br>
(some) guard cells. In some previous version of FLASH, the doEos may have<br>
applied to all cells (interior+guard), but that has not been the case<br>
for several releases. Now the Eos is only applied to guard cells that<br>
correspond to neighboring blocks at a different refinement.<br>
<br>
> This method ensures that whatever happens next, not only is the EOS updated<br>
> all values for each cell, *but also those values are valid in guard cells<br>
> on other processors*. I mention this method because using the Eos_wrapped<br>
> and forgetting to fill guard cells after has been a "gotcha" moment for me<br>
> in the past, and was a very tricky error to track down. But guard cell<br>
> filling is also expensive, so if you know its safe to not do it,<br>
> Eos_wrapped is the way to go.<br>
<br>
The general rule should be:<br>
<br>
 * call Eos_wrapped at the end of your code, if you have modified any<br>
   variables that could make the thermodynamic state inconsistent;<br>
 * call Grid_fillGuardCells at the beginning of your code if you need<br>
   to refer to any variables in guard cells - with or without doEos<br>
   depending on the needs of your code.<br>
<br>
unless you *really* understand the consequences of deviating from this<br>
convention.<br>
<br>
Klaus<br>
</blockquote></div><div dir="ltr">-- <br></div><div data-smartmail="gmail_signature"><div dir="ltr"><div><div><div><div><div>Joshua Wall<br></div>Doctoral Candidate<br></div>Department of Physics<br></div>Drexel University<br></div>3141 Chestnut Street<br></div>Philadelphia, PA 19104<br></div></div>