SwitchingFunction::SwitchingFunction(const SwitchingFunction&sf): init(sf.init), type(sf.type), invr0(sf.invr0), d0(sf.d0), dmax(sf.dmax), nn(sf.nn), mm(sf.mm), a(sf.a), b(sf.b), c(sf.c), d(sf.d), lambda(sf.lambda), beta(sf.beta), ref(sf.ref), invr0_2(sf.invr0_2), dmax_2(sf.dmax_2), stretch(sf.stretch), shift(sf.shift), evaluator(NULL), evaluator_deriv(NULL) { #ifdef __PLUMED_HAS_MATHEVAL if(sf.evaluator) evaluator=evaluator_create(evaluator_get_string(sf.evaluator)); if(sf.evaluator_deriv) evaluator_deriv=evaluator_create(evaluator_get_string(sf.evaluator_deriv)); #endif }
gchar * gs_function_plot_get_formula (GsFunctionPlot *plot) { g_return_val_if_fail (GS_IS_FUNCTION_PLOT (plot), NULL); if (plot->priv->matheval_c == NULL) { return NULL; } return g_strdup ((gchar *) evaluator_get_string (plot->priv->matheval_c)); }
std::string SwitchingFunction::description() const { std::ostringstream ostr; ostr<<1./invr0<<". Using "; if(type==rational){ ostr<<"rational"; } else if(type==exponential){ ostr<<"exponential"; } else if(type==nativeq){ ostr<<"nativeq"; } else if(type==gaussian){ ostr<<"gaussian"; } else if(type==smap){ ostr<<"smap"; } else if(type==cubic){ ostr<<"cubic"; } else if(type==tanh){ ostr<<"tanh"; #ifdef __PLUMED_HAS_MATHEVAL } else if(type==matheval){ ostr<<"matheval"; #endif } else{ plumed_merror("Unknown switching function type"); } ostr<<" swiching function with parameters d0="<<d0; if(type==rational){ ostr<<" nn="<<nn<<" mm="<<mm; } else if(type==nativeq){ ostr<<" beta="<<beta<<" lambda="<<lambda<<" ref="<<ref; } else if(type==smap){ ostr<<" a="<<a<<" b="<<b; } else if(type==cubic){ ostr<<" dmax="<<dmax; #ifdef __PLUMED_HAS_MATHEVAL } else if(type==matheval){ ostr<<" func="<<evaluator_get_string(evaluator); #endif } return ostr.str(); }
/* lcpi_parse_file */ int lcpi_parse_file(const char *file) { char buffer[BUFFER_SIZE]; FILE *lcpi_FP = NULL; lcpi_t *lcpi = NULL; int line = 0; OUTPUT_VERBOSE((4, "%s", _BLUE("Loading LCPI metrics"))); if (NULL == (lcpi_FP = fopen(file, "r"))) { OUTPUT(("%s (%s)", _ERROR("Error: unable to open LCPI file"), file)); return PERFEXPERT_ERROR; } bzero(buffer, BUFFER_SIZE); while (NULL != fgets(buffer, BUFFER_SIZE - 1, lcpi_FP)) { char *token = NULL; line++; /* Ignore comments and blank lines */ if ((0 == strncmp("#", buffer, 1)) || (strspn(buffer, " \t\r\n") == strlen(buffer))) { continue; } /* Remove the end \n character */ buffer[strlen(buffer) - 1] = '\0'; /* Replace some characters just to provide a safe expression */ perfexpert_string_replace_char(buffer, ':', '_'); /* Allocate and set LCPI data */ PERFEXPERT_ALLOC(lcpi_t, lcpi, sizeof(lcpi_t)); lcpi->value = 0.0; token = strtok(buffer, "="); PERFEXPERT_ALLOC(char, lcpi->name, strlen(token) + 1); strcpy(lcpi->name, perfexpert_string_remove_char(token, ' ')); strcpy(lcpi->name_md5, perfexpert_md5_string(lcpi->name)); token = strtok(NULL, "="); lcpi->expression = evaluator_create(token); if (NULL == lcpi->expression) { OUTPUT(("%s (%s)", _ERROR("Error: invalid expression at line"), line)); return PERFEXPERT_ERROR; } /* Add LCPI to global hash of LCPIs */ perfexpert_hash_add_str(globals.lcpi_by_name, name_md5, lcpi); OUTPUT_VERBOSE((7, " [%s]=[%s] (%s)", lcpi->name, evaluator_get_string(lcpi->expression), lcpi->name_md5)); } OUTPUT_VERBOSE((4, " (%d) %s", perfexpert_hash_count_str(globals.lcpi_by_name), _MAGENTA("LCPI metric(s) found"))); return PERFEXPERT_SUCCESS; }
char *me_change_string(char *string, int opt, me_t * me) { void *f = NULL, *f_prim = NULL; char *sep_ptr; char *str = NULL; char **names = NULL; int count = 0; char *f_prim_str = NULL; char *vars_str = NULL; double res = 0, res_prim = 0; debug(NULL, "me_change_string: Entered: %s\n", string); if (!me || !string) return NULL; sep_ptr = str_find_sep(string); if (sep_ptr) string = sep_ptr; if (!strlen(string)) return NULL; f = evaluator_create(string); if (!f) return NULL; evaluator_get_variables(f, &names, &count); if (!names) goto cleanup; vars_str = array_to_str((void **)names, count, (char *(*)(void *))strdup); if (!vars_str) goto cleanup; f_prim = evaluator_derivative_x(f); if (!f_prim) goto cleanup; f_prim_str = evaluator_get_string(f_prim); res = evaluator_evaluate_x_y_z(f, me->x, me->y, me->z); res_prim = evaluator_evaluate_x_y_z(f_prim, me->x, me->y, me->z); str = str_unite("f(x,y,z)=%f ... vars={%s} ::: f'(x)=%s=%f", res, vars_str, f_prim_str, res_prim); cleanup: if (f_prim) evaluator_destroy(f_prim); if (f) evaluator_destroy(f); if (vars_str) free(vars_str); return str; }
std::string Polynomial::equation() const { return std::string( evaluator_get_string( m_e ) ); }