[FLASH-USERS] Grid_bcApplyToRegionSpecialized
Klaus Weide
klaus at flash.uchicago.edu
Mon Aug 24 14:35:23 EDT 2009
On Thu, 20 Aug 2009, turcotte wrote:
Hello Sylvain,
I think that the problems with your Grid_bcApplyToRegionSpecialized
implementation are a result of neglecting an index offset for the y
direction. I have inserted changes to fix this below (untested), as well
as some other coments. For a more general template, I suggest you look at
Grid/GridBoundaryConditions/OneRow/Grid_bcApplyToRegionSpecialized.F90;
that version is basically an adapter from the
Grid_bcApplyToRegionSpecialized to the Grid_applyBCEdge interface.
> For a 2D box in cylindrical coordinates, applying the BC on the x=0 boundary,
> I loop thusly:
> applied=.true.
>
> sizeX=regionSize(BC_DIR)
> allocate(xCoord(sizeX))
>
> sizeY=regionSize(2)
> allocate(yCoord(sizeY))
>
> call Grid_getCellCoords(IAXIS,blockID,CENTER,.true.,xCoord,sizeX)
> call Grid_getCellCoords(JAXIS,blockID,CENTER,.true.,yCoord,sizeY)
You should use gr_extendedGetCellCoords instead of Grid_getCellCoords, as
pointed out in Dongwook's response.
Also declare an INTEGER variable jOffset, and use it like this:
jOffset = endPoints(LOW,secondDir) - 1
> do j = 1,sizeY
Note change in the index range in next line...
> do i = 1,guard !was: sizeX
> regionData(i,j,:,VELY_VAR) = value
Note changed comment in next line...
> ! where value will be a function of xCoord(i) and yCoord(j+jOffset)
> enddo
> enddo
>
I hope these changes fix your problems. As written, this will only be
correct for the lower boundary in the x direction, and only for
cell-centered variables (i.e., gridDataStruct==CENTER), so make sure
your Grid_bcApplyToRegionSpecialized.F90 immediately returns (with applied
= .FALSE.) when that is not the case.
Klaus
More information about the flash-users
mailing list