int dipolar_set_Dbjerrum(double bjerrum) { if (bjerrum < 0.0) return ES_ERROR; coulomb.Dbjerrum = bjerrum; if (coulomb.Dbjerrum == 0.0) { switch (coulomb.Dmethod) { #ifdef DP3M case DIPOLAR_MDLC_P3M: // fall through case DIPOLAR_P3M: coulomb.Dbjerrum = bjerrum; dp3m_set_bjerrum(); break; #endif case DIPOLAR_SCAFACOS: ; // Fall through default: break; } mpi_bcast_coulomb_params(); set_dipolar_method_local(DIPOLAR_NONE); mpi_bcast_coulomb_params(); } return ES_OK; }
int mdlc_set_params(double maxPWerror, double gap_size, double far_cut) { MDLC_TRACE(fprintf(stderr, "%d: mdlc_set_params().\n", this_node)); dlc_params.maxPWerror = maxPWerror; dlc_params.gap_size = gap_size; dlc_params.h = box_l[2] - gap_size; switch (coulomb.Dmethod) { #ifdef DP3M case DIPOLAR_MDLC_P3M: case DIPOLAR_P3M: set_dipolar_method_local(DIPOLAR_MDLC_P3M); break; #endif case DIPOLAR_MDLC_DS: case DIPOLAR_DS: set_dipolar_method_local(DIPOLAR_MDLC_DS); break; default: return ES_ERROR; } dlc_params.far_cut = far_cut; if (far_cut != -1) { dlc_params.far_calculated = 0; } else { dlc_params.far_calculated = 1; if (mdlc_tune(dlc_params.maxPWerror) == ES_ERROR) { ostringstream msg; msg <<"mdlc tuning failed, gap size too small"; runtimeError(msg); } } mpi_bcast_coulomb_params(); return ES_OK; }
int tclcommand_inter_parse_magnetic(Tcl_Interp * interp, int argc, char ** argv) { double d1; Tcl_ResetResult(interp); if(argc == 0) { tclprint_to_result_DipolarIA(interp); return TCL_OK; } if (! ARG0_IS_D(d1)) { Tcl_ResetResult(interp); if (ARG0_IS_S("mdlc") && ((coulomb.Dmethod == DIPOLAR_DS) || (coulomb.Dmethod == DIPOLAR_MDLC_DS))) return tclcommand_inter_magnetic_parse_mdlc_params(interp, argc - 1, argv + 1); #ifdef DP3M if (ARG0_IS_S("mdlc") && ((coulomb.Dmethod == DIPOLAR_P3M) || (coulomb.Dmethod == DIPOLAR_MDLC_P3M))) return tclcommand_inter_magnetic_parse_mdlc_params(interp, argc - 1, argv + 1); if (coulomb.Dmethod == DIPOLAR_P3M) return tclcommand_inter_magnetic_parse_dp3m_opt_params(interp, argc, argv); else { Tcl_AppendResult(interp, "expect: inter magnetic <Dbjerrum>", (char *) NULL); return TCL_ERROR; } #else return TCL_ERROR; #endif } if (dipolar_set_Dbjerrum(d1) == TCL_ERROR) { Tcl_AppendResult(interp, argv[0], "Dbjerrum length must be positive", (char *) NULL); return TCL_ERROR; } argc -= 1; argv += 1; if (d1 == 0.0 && argc == 0) { mpi_bcast_coulomb_params(); return TCL_OK; } if(argc < 1) { Tcl_AppendResult(interp, "wrong # args for inter magnetic.", (char *) NULL); mpi_bcast_coulomb_params(); return TCL_ERROR; } /* check method */ #define REGISTER_DIPOLAR(name, parser) \ if(ARG0_IS_S(name)) \ return parser(interp, argc-1, argv+1); #ifdef DP3M REGISTER_DIPOLAR("p3m", tclcommand_inter_magnetic_parse_dp3m); #endif REGISTER_DIPOLAR("dawaanr", tclcommand_inter_magnetic_parse_dawaanr); REGISTER_DIPOLAR("mdds", tclcommand_inter_magnetic_parse_mdds); #ifdef DIPOLAR_DIRECT_SUM REGISTER_DIPOLAR("dds-gpu", tclcommand_inter_magnetic_parse_dds_gpu); #endif #ifdef SCAFACOS_DIPOLES REGISTER_DIPOLAR("scafacos", tclcommand_inter_parse_scafacos<true>); #endif /* fallback */ set_dipolar_method_local(DIPOLAR_NONE); coulomb.Dbjerrum = 0.0; mpi_bcast_coulomb_params(); Tcl_AppendResult(interp, "do not know magnetic method \"",argv[0], "\": magnetic switched off", (char *) NULL); return TCL_ERROR; }