[FLASH-USERS] Filling Guard Cells in Burn

James Guillochon jfg at ucolick.org
Tue Oct 28 15:12:53 EDT 2008


I upgraded my Burn unit to 3.1 (and SimulationComposition), and things 
are running much faster now (10 times faster)! Considering 
fillGuardCells is still being called, I guess the issue must have been 
unrelated to my initial guess...

-- 
James Guillochon
Department of Astronomy & Astrophysics
University of California, Santa Cruz
jfg at ucolick.org


Klaus Weide wrote:
> On Tue, 28 Oct 2008, James Guillochon wrote:
>> So I'm using the nuclearBurn unit (FLASH 3.0), and the 
>> Grid_fillGuardCells routine at the top of Burn.F90 seems to be taking 
>> an inordinate amount of time to run. My simulation has sporadic 
>> burning and thus does not need the network to run at every time step, 
>> but the fillGuardCells routine is taking most of the processing time 
>> even with T << nuclearTempMin!
> 
> James,
> 
> First of all, I am surprised this takes an "inordinate amount of time".
> I would expect that the Grid_fillGuardCells calls in other places, 
> predominantly in Hydro, use more time, just because they would be
> called more often (at least when NDIM > 1).  I am thinking of a "normal"
> FLASH simulation that uses Hydro, and Burn, and probably some other 
> physics units.
> 
> If you just mean that the Grid_fillGuardCells in Burn dominates the 
> total time spent in Burn - that may well be, but see below.
> 
>> The question is: Do I have to fill the guard cells if the temperature 
>> criteria for burning isn't met? Is there some reason the 
>> fillGuardCells routine is taking so long in this context?
> 
> I am assuming you are referring to this source file:
>    source/physics/sourceTerms/Burn/BurnMain/nuclearBurn/Burn.F90 ,
> let me know if I'm wrong!
> 
> There has been a code change in this file from FLASH 3.0 to 3.1,
> associated with this comment:
> 
> ========================================================================================================= 
> 
> Filename: 
> trunk/source/physics/sourceTerms/Burn/BurnMain/nuclearBurn/Burn.F90
> Revision 8763
> Modified Fri Mar 21 13:28:56 2008 CDT (7 months, 1 week ago) by townsley
> File length: 9383 byte(s)
> Diff to previous 7876
> 
> [...]
> Also limited nuclear Burn calculations to only interior cells,
> no need to do the guard cells.
> ========================================================================================================= 
> 
> 
> Here is the diff:
> 
> ========================================================================================================= 
> 
> *** 
> trunk/source/physics/sourceTerms/Burn/BurnMain/nuclearBurn/Burn.F90    
> 2008/01/07 16:23:52    7876
> --- 
> trunk/source/physics/sourceTerms/Burn/BurnMain/nuclearBurn/Burn.F90    
> 2008/03/21 18:28:56    8763
> ***************
> *** 150,158 ****
> 
> 
>        ! now guaranteed that tmp, rho, etc. exist
> !      do k = blkLimitsGC(LOW,KAXIS), blkLimitsGC(HIGH,KAXIS)
> !         do j = blkLimitsGC(LOW,JAXIS), blkLimitsGC(HIGH,JAXIS)
> !            do i = blkLimitsGC(LOW,IAXIS), blkLimitsGC(HIGH,IAXIS)
>                 okBurnTemp = .FALSE.
>                 okBurnDens = .FALSE.
>                 okBurnShock = .FALSE.
> --- 150,158 ----
> 
> 
>        ! now guaranteed that tmp, rho, etc. exist
> !      do k = blkLimits(LOW,KAXIS), blkLimits(HIGH,KAXIS)
> !         do j = blkLimits(LOW,JAXIS), blkLimits(HIGH,JAXIS)
> !            do i = blkLimits(LOW,IAXIS), blkLimits(HIGH,IAXIS)
>                 okBurnTemp = .FALSE.
>                 okBurnDens = .FALSE.
>                 okBurnShock = .FALSE.
> ========================================================================================================= 
> 
> 
> (There were also changes in that update related to enabling 
> Burn_computeDt. If you use
> Burn_computeDt, it probably should have the same kind of blkLimitsGC -> 
> blkLimits change.)
> 
> I believe that with the FLASH 3.1 version, the only reason for having a 
> Grid_fillGuardCells call
> at the top of Burn.F90 is to provide valid data for Hydro_detectShock.  
> (That's why Grid_fillGuardCells
> is only called 'if (.NOT. bn_useShockBurn)').
> 
> If you look at the code of Hydro_detectShock.F90, you will find that it 
> requires only a limited number of guard cell layers (1 or 2?) for its 
> stencil, and it refers only to
> a small number of UNK variables (VEL{X,Y,Z}_VAR and PRES_VAR).  You 
> could therefore
> try to speed up the Grid_fillGuardCells calls somewhat by limiting the 
> number of
> cell layers and/or variables that are exchanged - see 
> Grid_fillGuardCells.F90 for
> the various OPTIONAL arguments that may apply.  To restrict the set of 
> variables
> that are exchanged, also make sure the runtime parameter
>   enableMaskedGcFill
> is TRUE.
> 
> 
> There is currently no way to limit guard cell exchanges only to some 
> blocks or processors that may need them - it's an all-or-nothing thing 
> in that way.  But if you know of some criteria to determine globally 
> that in a given invocation of Burn, there is no need to call 
> Hydro_detectShock on ANY block in the simulation (for example, because 
> you can determine positively that the Burn variables okBurnTemp .AND. 
> okBurnDens will be FALSE in all cells in all leaf blocks) - then you can 
> of course skip the call in that invocation of Burn.
> 
> 
> 
> Klaus
> 
> !DSPAM:10135,49073eed148013225631196!
> 



More information about the flash-users mailing list