diff options
Diffstat (limited to 'src/multipole.cc')
-rw-r--r-- | src/multipole.cc | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/src/multipole.cc b/src/multipole.cc index e0e51e0..975d589 100644 --- a/src/multipole.cc +++ b/src/multipole.cc @@ -1,6 +1,8 @@ #include <stdio.h> #include <string.h> #include <assert.h> +#include <string> +#include <iomanip> #include "cctk.h" #include "cctk_Arguments.h" @@ -12,6 +14,8 @@ #include "utils.hh" #include "sphericalharmonic.hh" +using namespace std; + static const int var_name_length = 30; static const int max_vars = 10; @@ -24,7 +28,7 @@ typedef struct int index; int imag_index; int spin_weight; - char name[var_name_length]; + string name; } variable_desc; @@ -51,7 +55,7 @@ static void fill_variable(int idx, const char *optstring, void *callback_arg) // not present v->imag_index = -1; v->spin_weight = 0; - strcpy(v->name, CCTK_VarName(v->index)); + v->name = string(CCTK_VarName(v->index)); if (optstring != 0) { @@ -60,30 +64,31 @@ static void fill_variable(int idx, const char *optstring, void *callback_arg) if (table >= 0) { const int buffer_length = 256; - char imag_name[buffer_length]; + char buffer[buffer_length]; Util_TableGetInt(table, &v->spin_weight , "sw"); ///////////////////////////////////////////////////////////// CCTK_VInfo(CCTK_THORNSTRING,"spinweight %d", v->spin_weight); ///////////////////////////////////////////////////////////// - if (Util_TableGetString(table, buffer_length, imag_name , "cmplx") >= 0) + if (Util_TableGetString(table, buffer_length, buffer , "cmplx") >= 0) { - v->imag_index = CCTK_VarIndex(imag_name); + v->imag_index = CCTK_VarIndex(buffer); } - Util_TableGetString(table, var_name_length, v->name , "name"); + Util_TableGetString(table, buffer_length, buffer , "name"); + v->name = string(buffer); } } vs->n_vars++; } -static void parse_variables_string(const char *var_string, variable_desc v[max_vars], int *n_variables) +static void parse_variables_string(const string &var_string, variable_desc v[max_vars], int *n_variables) { variables_desc vars; vars.n_vars = 0; vars.vars = v; - int ierr = CCTK_TraverseString(var_string, fill_variable, &vars, CCTK_GROUP_OR_VAR); + int ierr = CCTK_TraverseString(var_string.c_str(), fill_variable, &vars, CCTK_GROUP_OR_VAR); assert(ierr > 0); *n_variables = vars.n_vars; @@ -95,12 +100,12 @@ static void output_mode(CCTK_ARGUMENTS, const variable_desc *v, CCTK_REAL rad, DECLARE_CCTK_ARGUMENTS DECLARE_CCTK_PARAMETERS - char name_tmp[1000]; - if (CCTK_MyProc(cctkGH) == 0) { - sprintf(name_tmp, "mp_%s_l%d_m%d_r%1.2f.asc", v->name, l, m, rad); - Multipole_OutputComplexToFile(CCTK_PASS_CTOC, name_tmp, real_lm, imag_lm); + ostringstream name; + name << "mp_" << v->name << "_l" << l << "_m" << m << + "_r" << setiosflags(ios::fixed) << setprecision(2) << rad << ".asc"; + Multipole_OutputComplexToFile(CCTK_PASS_CTOC, name.str(), real_lm, imag_lm); } } @@ -111,26 +116,21 @@ static void output_1D(CCTK_ARGUMENTS, const variable_desc *v, CCTK_REAL rad, DECLARE_CCTK_ARGUMENTS DECLARE_CCTK_PARAMETERS - char name_tmp[1000]; - if (CCTK_MyProc(cctkGH) == 0) { if (out_1d_every != 0 && cctk_iteration % out_1d_every == 0) { - const char *real_name = CCTK_VarName(v->index); - sprintf(name_tmp, "mp_%s_r%1.2f.th.asc", real_name, rad); - Multipole_Output1D(CCTK_PASS_CTOC, name_tmp, array_size, th, ph, mp_theta, real); - sprintf(name_tmp, "mp_%s_r%1.2f.ph.asc", real_name, rad); - Multipole_Output1D(CCTK_PASS_CTOC, name_tmp, array_size, th, ph, mp_phi, real); + ostringstream real_base; + real_base << "mp_" << string(CCTK_VarName(v->index)) << "_r" << setiosflags(ios::fixed) << setprecision(2) << rad; + Multipole_Output1D(CCTK_PASS_CTOC, real_base.str()+string(".th.asc"), array_size, th, ph, mp_theta, real); + Multipole_Output1D(CCTK_PASS_CTOC, real_base.str()+string(".ph.asc"), array_size, th, ph, mp_phi, real); if (v->imag_index != -1) { - const char *imag_name = CCTK_VarName(v->imag_index); - sprintf(name_tmp, "mp_%s_r%1.2f.th.asc", imag_name, rad); - Multipole_Output1D(CCTK_PASS_CTOC, name_tmp, array_size, th, ph, mp_theta, imag); - - sprintf(name_tmp, "mp_%s_r%1.2f.ph.asc", imag_name, rad); - Multipole_Output1D(CCTK_PASS_CTOC, name_tmp, array_size, th, ph, mp_phi, imag); + ostringstream imag_base; + imag_base << "mp_" << string(CCTK_VarName(v->imag_index)) << "_r" << setiosflags(ios::fixed) << setprecision(2) << rad; + Multipole_Output1D(CCTK_PASS_CTOC, imag_base.str()+string(".th.asc"), array_size, th, ph, mp_theta, imag); + Multipole_Output1D(CCTK_PASS_CTOC, imag_base.str()+string(".ph.asc"), array_size, th, ph, mp_phi, imag); } } } @@ -285,7 +285,7 @@ extern "C" void Multipole_Calc(CCTK_ARGUMENTS) yhat = new CCTK_REAL[array_size]; zhat = new CCTK_REAL[array_size]; - parse_variables_string(variables, vars, &n_variables); + parse_variables_string(string(variables), vars, &n_variables); get_spin_weights(vars, n_variables, spin_weights, &n_spin_weights); Multipole_CoordSetup(ntheta, nphi, xhat, yhat, zhat, th, ph); setup_harmonics(spin_weights, n_spin_weights, lmax, th, ph, |