[Users] Boundary thorn

Erik Schnetter schnetter at cct.lsu.edu
Wed Mar 14 08:14:23 CDT 2018


Miguel

Yes, this looks like an error in the code.

We will also need to have a look at the other files in the same directory,
as they might contain the same error.

-erik


On Wed, Mar 14, 2018 at 6:10 AM, Miguel Zilhão <
miguel.zilhao.nogueira at tecnico.ulisboa.pt> wrote:

> hi all,
>
> i was trying to do a (unigrid) run with "scalar" boundary conditions on
> some variables but with uneven boundary width, ie width of 2 grid points on
> the x and y axis and 0 on the z axis. in the documentation of the Boundary
> thorn it states that one should create a table passing this information in
> an array called "BOUNDARY_WIDTH":
>
> "The table handle identifies a table which holds extra arguments for the
> particular boundary condition that is requested. For example, if a negative
> value is passed for the boundary width, then the boundary condition will
> look in this table for a 2d-element integer array, which holds the width of
> each face of the boundary (for a d dimensional grid variable). (The first
> element of the array holds the width of the ‘-x’ face, the second the ‘+x’
> face, the third the ‘-y’ face, etc.)"
>
> so i've accordingly created the following table
>
>  call Util_TableCreateFromString(param_table_handle, "BOUNDARY_WIDTH = {
> 2 2 2 2 0 0 }")
>
> and then registered the variables with
>
>   ierr = Boundary_SelectGroupForBC(cctkGH, CCTK_ALL_FACES, -one,         &
>        param_table_handle, "ScalarBase::phi", "scalar")
>
> however, i was getting errors like the following:
>
>  Boundary/src/Check.c:130: BndSanityCheckWidths: Assertion `dim <
> (int)sizeof(dims)' failed.
>
> inspecting that file, this is only triggered if (boundary_widths[i] > 100
> || boundary_widths[i] < 0) which meant that my BOUNDARY_WIDTH array was
> likely not being parsed correctly. digging a little bit deeper, i've found
> the following in ScalarBoundary.c:138 (and analogous for the other files
> under CactusBase/Boundary/src):
>
>     /* Determine boundary width on all faces */
>     /* allocate memory for buffer */
>     gdim = CCTK_GroupDimI(gi);
>     if (gdim > max_gdim) {
>       width_alldirs =
>           (CCTK_INT *)realloc(width_alldirs, 2 * gdim * sizeof(CCTK_INT));
>       max_gdim = gdim;
>     }
>
>     /* fill it with values, either from table or the boundary_width
>        parameter */
>     if (widths[i] < 0) {
>       err = Util_TableGetIntArray(tables[i], gdim, width_alldirs,
>                                   "BOUNDARY_WIDTH");
>
> it seems to me that this last line should be instead
>
>       err = Util_TableGetIntArray(tables[i], 2 * gdim, width_alldirs,
>                                   "BOUNDARY_WIDTH");
>
> for consistency with the rest of the file and with the documentation,
> right? indeed, with this change the errors disappeared. i've attached a
> simple patch that applies this on this file, but i guess an equivalent
> change would be needed also for the rest of the Boundary files...
>
> if this patch is correct, could this be ported to the current release? and
> if it's not correct, is there anything i'm missing, in order to register
> the boundary conditions?
>
> thanks,
> Miguel
>
> _______________________________________________
> Users mailing list
> Users at einsteintoolkit.org
> http://lists.einsteintoolkit.org/mailman/listinfo/users
>
>


-- 
Erik Schnetter <schnetter at cct.lsu.edu>
http://www.perimeterinstitute.ca/personal/eschnetter/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.einsteintoolkit.org/pipermail/users/attachments/20180314/ac4e0b02/attachment.html 


More information about the Users mailing list