/* $Header$ */ #include #include #include "cctk.h" #include "cctk_Arguments.h" #include "cctk_Parameters.h" void BHTracker_Adjust (CCTK_ARGUMENTS); static void setpar (char const * name, int index, char const * thorn, CCTK_REAL value); void BHTracker_Adjust (CCTK_ARGUMENTS) { DECLARE_CCTK_PARAMETERS; DECLARE_CCTK_ARGUMENTS; int n; int si, ri; char name[100], val[100]; int icnt, ierr; CCTK_REAL xpos,ypos,zpos; if ((cctk_iteration-1) < track_first) return; if ((cctk_iteration-1) % track_every != 0) return; CCTK_INFO ("Tracking..."); for (n=0; n=0 && si=0 && ri 0) { CCTK_VInfo (CCTK_THORNSTRING, " Object #%d has moved to [%g,%g,%g]", n, (double)sf_centroid_x[si], (double)sf_centroid_y[si], (double)sf_centroid_z[si]); /* calculate new positions */ xpos = (sf_centroid_x[si] - initial_x[si]); ypos = (sf_centroid_y[si] - initial_y[si]); zpos = (sf_centroid_z[si] - initial_z[si]); setpar ("offsetx", ri, "CarpetRegrid", xpos); setpar ("offsety", ri, "CarpetRegrid", ypos); setpar ("offsetz", ri, "CarpetRegrid", zpos); } else { CCTK_VInfo (CCTK_THORNSTRING, " Object #%d cannot be detected at this time", n); } } } static void setpar (char const * const name, int const index, char const * const thorn, CCTK_REAL const value) { char nambuf[100], valbuf[100]; int icnt, ierr; icnt = snprintf (nambuf, sizeof nambuf, "%s[%d]", name, index); assert (icnt>=0 && icnt=0 && icnt