User: rhaas Date: 2012/05/03 01:29 PM
Modified: /Outflow/ interface.ccl, param.ccl /Outflow/src/ outflow.c /Outflow/test/ moving_tov.par
Log: Outflow: add support for named surfaces, fix some compiler warnings
File Changes:
Directory: /Outflow/ ====================
File [modified]: interface.ccl Delta lines: +5 -0 =================================================================== --- Outflow/interface.ccl 2012-05-03 18:08:13 UTC (rev 66) +++ Outflow/interface.ccl 2012-05-03 18:29:09 UTC (rev 67) @@ -9,6 +9,11 @@
REQUIRES FUNCTION IO_TruncateOutputFiles
+# translate SphericalSurface name into ID +CCTK_INT \ +FUNCTION sf_IdFromName (CCTK_INT IN id, CCTK_POINTER_TO_CONST IN name) +USES FUNCTION sf_IdFromName + REAL outflow_flux[num_detectors] TYPE=scalar tags='checkpoint="no"' "flux of mass through the detectors"
REAL fluxdens_projected[num_detectors] TYPE=ARRAY DIM=2 SIZE=SphericalSurface::maxntheta,SphericalSurface::maxnphi DISTRIB=CONSTANT tags='checkpoint="no"' "2D (theta,phi) grid arrays for flux density"
File [modified]: param.ccl Delta lines: +6 -0 =================================================================== --- Outflow/param.ccl 2012-05-03 18:08:13 UTC (rev 66) +++ Outflow/param.ccl 2012-05-03 18:29:09 UTC (rev 67) @@ -25,6 +25,12 @@ 0:* :: "valid surface" } -1
+CCTK_STRING surface_name[100] "the indices of the sphericalsurfaces from which we take the surfaces to compute the outflow on" STEERABLE=always +{ + "" :: "use surface_index" + ".*" :: "any string" +} "" + BOOLEAN override_radius[100] "do not take radius values from spherical surface" STEERABLE = ALWAYS { } "no"
Directory: /Outflow/src/ ========================
File [modified]: outflow.c Delta lines: +9 -7 =================================================================== --- Outflow/src/outflow.c 2012-05-03 18:08:13 UTC (rev 66) +++ Outflow/src/outflow.c 2012-05-03 18:29:09 UTC (rev 67) @@ -7,6 +7,7 @@ #include "cctk.h" #include "cctk_Arguments.h" #include "cctk_Parameters.h" +#include "cctk_Functions.h" #include "util_Table.h" #include "util_String.h"
@@ -83,7 +84,7 @@ static CCTK_REAL *outflow_allocate_array(CCTK_INT npoints, const char *name);
/* replace '/' by '' in file name to have Util_TableSet* accept it as a key */ -static const char *sanitize_filename(const char *fn); +static char *sanitize_filename(const char *fn); /* write results to disk */ static int Outflow_write_output(CCTK_ARGUMENTS, CCTK_INT det, CCTK_REAL flux, CCTK_REAL w_lorentz, const CCTK_REAL *threshold_fluxes); @@ -100,7 +101,7 @@ /**********************************************************************/ /*** IO ***/ /**********************************************************************/ -static const char *sanitize_filename(const char *fn) +static char *sanitize_filename(const char *fn) { char *sfn = Util_Strdup(fn); if (sfn == NULL) { @@ -143,7 +144,6 @@ "warn: det=%d, but MAX_NUMBER_DETECTORS=%d, increase", det,MAX_NUMBER_DETECTORS); } - assert(surface_index[det] >= 0);
// filename Util_asprintf (&filename, "%s/outflow_surface_det_%d_%s.asc", out_dir, det, varname); @@ -173,9 +173,10 @@
// write header on startup if (!file_created) { - const CCTK_INT sn = surface_index[det]; + const CCTK_INT sn = sf_IdFromName(surface_index[det], surface_name[det]); const CCTK_INT ntheta=sf_ntheta[sn]-2*nghoststheta[sn]; const CCTK_INT nphi=sf_nphi[sn]-2*nghostsphi[sn]; + assert(sn >= 0); fprintf(file,"# 2d Outflow\n"); fprintf(file,"# detector no.=%d ntheta=%d nphi=%d\n",det,ntheta,nphi); fprintf(file,"# gnuplot column index:\n"); @@ -196,7 +197,7 @@ "\t%%%s", out_format); assert(len_written < sizeof(format_str_extras)/sizeof(format_str_extras[0]));
- const CCTK_INT sn = surface_index[det]; + const CCTK_INT sn = sf_IdFromName(surface_index[det], surface_name[det]); const CCTK_INT ntheta=sf_ntheta[sn]-2*nghoststheta[sn]; const CCTK_INT imin=nghoststheta[sn], imax=sf_ntheta[sn]-nghoststheta[sn]-1; const CCTK_INT jmin=nghostsphi[sn], jmax=sf_nphi[sn]-nghostsphi[sn]-1; @@ -204,6 +205,7 @@ const CCTK_REAL oph=sf_origin_phi[sn]; const CCTK_REAL dth=sf_delta_theta[sn]; const CCTK_REAL dph=sf_delta_phi[sn]; + assert(sn >= 0);
CCTK_REAL th, ph, ct,st, cp,sp,rp; CCTK_REAL det_x, det_y, det_z; @@ -438,7 +440,7 @@ for (int i=0; i<num_extras; i++) assert(extras[i]);
- sn = surface_index[det]; + sn = sf_IdFromName(surface_index[det], surface_name[det]); assert(sn>=0);
ntheta=sf_ntheta[sn]-2*nghoststheta[sn]; @@ -911,7 +913,7 @@ continue; }
- sn=surface_index[det]; + sn = sf_IdFromName(surface_index[det], surface_name[det]); if (sn < 0) { CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING, "surface number sn=%d is invalid for detector %d", sn,det);
Directory: /Outflow/test/ =========================
File [modified]: moving_tov.par Delta lines: +2 -1 =================================================================== --- Outflow/test/moving_tov.par 2012-05-03 18:08:13 UTC (rev 66) +++ Outflow/test/moving_tov.par 2012-05-03 18:29:09 UTC (rev 67) @@ -122,6 +122,7 @@ SphericalSurface::radius_x[1] = 6. SphericalSurface::radius_y[1] = 6. SphericalSurface::radius_z[1] = 5. +SphericalSurface::name[1] = "ellipsoid"
SphericalSurface::ntheta[0] = 10 SphericalSurface::nphi [0] = 8 @@ -135,7 +136,7 @@ Outflow::compute_every = 2 Outflow::num_detectors = 2 Outflow::surface_index[0] = 0 -Outflow::surface_index[1] = 1 +Outflow::surface_name[1] = "ellipsoid" Outflow::extra_variables = "grid::x grid::y" Outflow::interpolator_name = "Lagrange polynomial interpolation" Outflow::interpolator_pars = "order=4"