diff --git a/src/p3m.c b/src/p3m.c index 418352b22dc..b2aedb716e7 100644 --- a/src/p3m.c +++ b/src/p3m.c @@ -389,7 +389,7 @@ void p3m_set_tune_params(double r_cut, int mesh, int cao, /*@}*/ -int p3m_set_params(double r_cut, int mesh, int cao, +int p3m_set_params(double r_cut, int *mesh, int cao, double alpha, double accuracy) { if (coulomb.method != COULOMB_P3M && coulomb.method != COULOMB_ELC_P3M) @@ -398,15 +398,17 @@ int p3m_set_params(double r_cut, int mesh, int cao, if(r_cut < 0) return -1; - if(mesh < 0) + if((mesh[0] < 0) || (mesh[1] < 0) || (mesh[2] < 0)) return -2; - if(cao < 1 || cao > 7 || cao > mesh) + if(cao < 1 || cao > 7 || cao > mesh[0] || cao > mesh[1] || cao > mesh[2] ) return -3; p3m.params.r_cut = r_cut; p3m.params.r_cut_iL = r_cut*box_l_i[0]; - p3m.params.mesh[2] = p3m.params.mesh[1] = p3m.params.mesh[0] = mesh; + p3m.params.mesh[2] = mesh[2]; + p3m.params.mesh[1] = mesh[1]; + p3m.params.mesh[0] = mesh[0]; p3m.params.cao = cao; if (alpha > 0) { diff --git a/src/p3m.h b/src/p3m.h index 146317f04b3..4e99eaa0a80 100644 --- a/src/p3m.h +++ b/src/p3m.h @@ -240,7 +240,7 @@ MDINLINE double p3m_add_pair_force(double chgfac, double *d,double dist2,double void p3m_set_tune_params(double r_cut, int mesh, int cao, double alpha, double accuracy, int n_interpol); -int p3m_set_params(double r_cut, int mesh, int cao, +int p3m_set_params(double r_cut, int *mesh, int cao, double alpha, double accuracy); int p3m_set_mesh_offset(double x, double y, double z); diff --git a/src/tcl/p3m_tcl.c b/src/tcl/p3m_tcl.c index ad9c3d9ea06..6f008f38cf3 100644 --- a/src/tcl/p3m_tcl.c +++ b/src/tcl/p3m_tcl.c @@ -99,7 +99,9 @@ int tclcommand_inter_coulomb_parse_p3m_tune(Tcl_Interp * interp, int argc, char int tclcommand_inter_coulomb_parse_p3m(Tcl_Interp * interp, int argc, char ** argv) { double r_cut, alpha, accuracy = -1.0; - int mesh, cao, i; + int mesh[3], cao, i; + IntList il; + init_intlist(&il); if (argc < 1) { Tcl_AppendResult(interp, "expected: inter coulomb p3m tune | [ []]", @@ -117,12 +119,25 @@ int tclcommand_inter_coulomb_parse_p3m(Tcl_Interp * interp, int argc, char ** ar return TCL_ERROR; if(argc < 3 || argc > 5) { - Tcl_AppendResult(interp, "wrong # arguments: inter coulomb p3m [ []]", + Tcl_AppendResult(interp, "wrong # arguments: inter coulomb p3m { | \\{ \\} } [ []]", (char *) NULL); return TCL_ERROR; } - if((! ARG_IS_I(1, mesh)) || (! ARG_IS_I(2, cao))) { + if(! ARG_IS_I(1, mesh[0])) { + if( ! ARG_IS_INTLIST(1, il) || !(il.n == 3) ) { + Tcl_AppendResult(interp, "integer or interger list of length 3 expected", (char *) NULL); + return TCL_ERROR; + } else { + mesh[0] = il.e[0]; + mesh[1] = il.e[1]; + mesh[2] = il.e[2]; + } + } else { + mesh[1] = mesh[2] = mesh[0]; + } + + if(! ARG_IS_I(2, cao)) { Tcl_AppendResult(interp, "integer expected", (char *) NULL); return TCL_ERROR; }