Commit 5ce8860d authored by Yaser Afshar's avatar Yaser Afshar
Browse files

Updating the 'kim_query' default behavior and adding the 'list' setting

Adding the 'list' setting of {formatarg} (default behavior or if
{formatarg} is not specified), the result is returned as a
space-separated list of values in {variable}.
parent c8c92189
Loading
Loading
Loading
Loading
+28 −10
Original line number Original line Diff line number Diff line
@@ -13,7 +13,8 @@


/* ----------------------------------------------------------------------
/* ----------------------------------------------------------------------
   Contributing authors: Axel Kohlmeyer (Temple U),
   Contributing authors: Axel Kohlmeyer (Temple U),
                         Ryan S. Elliott (UMN)
                         Ryan S. Elliott (UMN),
                         Yaser Afshar (UMN)
------------------------------------------------------------------------- */
------------------------------------------------------------------------- */


/* ----------------------------------------------------------------------
/* ----------------------------------------------------------------------
@@ -105,15 +106,25 @@ void KimQuery::command(int narg, char **arg)
    model_name = (char *)fix_store->getptr("model_name");
    model_name = (char *)fix_store->getptr("model_name");
  } else error->all(FLERR,"Must use 'kim_init' before 'kim_query'");
  } else error->all(FLERR,"Must use 'kim_init' before 'kim_query'");



  varname = arg[0];
  varname = arg[0];
  bool split = false;
  bool split = false;
  if (0 == strcmp("split",arg[1])) {
  if (0 == strcmp("split",arg[1])) {
    if (narg == 2) error->all(FLERR,"Illegal kim_query command");
    if (narg == 2) error->all(FLERR,"Illegal kim_query command");
    if (0 == strcmp("list",arg[2]))
      error->all(FLERR,"Illegal kim_query command");
    split = true;
    split = true;
    arg++;
    arg++;
    narg--;
    narg--;
  }
  }

  // The “list” is the default setting
  // the result is returned as a space-separated list of values in variable
  if (0 == strcmp("list",arg[1])) {
    if (narg == 2) error->all(FLERR,"Illegal kim_query command");
    if (split) error->all(FLERR,"Illegal kim_query command");
    arg++;
    narg--;
  }
  function = arg[1];
  function = arg[1];
  for (int i = 2; i < narg; ++i)
  for (int i = 2; i < narg; ++i)
  {
  {
@@ -143,12 +154,13 @@ void KimQuery::command(int narg, char **arg)


  kim_query_log_delimiter("begin");
  kim_query_log_delimiter("begin");
  char **varcmd = new char*[3];
  char **varcmd = new char*[3];
  if (split) {
  varcmd[1] = (char *) "string";
    int counter = 1;

  std::stringstream ss(value);
  std::stringstream ss(value);
  std::string token;
  std::string token;
    varcmd[1] = (char *) "string";


  if (split) {
    int counter = 1;
    while(std::getline(ss, token, ',')) {
    while(std::getline(ss, token, ',')) {
      token.erase(0,token.find_first_not_of(" \n\r\t"));  // ltrim
      token.erase(0,token.find_first_not_of(" \n\r\t"));  // ltrim
      token.erase(token.find_last_not_of(" \n\r\t") + 1);  // rtrim
      token.erase(token.find_last_not_of(" \n\r\t") + 1);  // rtrim
@@ -161,11 +173,17 @@ void KimQuery::command(int narg, char **arg)
    }
    }
  } else {
  } else {
    varcmd[0] = varname;
    varcmd[0] = varname;
    varcmd[1] = (char *) "string";
    std::string value_string;
    varcmd[2] = value;
    while(std::getline(ss, token, ',')) {
      token.erase(0,token.find_first_not_of(" \n\r\t"));  // ltrim
      token.erase(token.find_last_not_of(" \n\r\t") + 1);  // rtrim
      if (value_string.size() && token.size())
        value_string += " ";
      value_string += token;
    }
    varcmd[2] = const_cast<char *>(value_string.c_str());;
    input->variable->set(3,varcmd);
    input->variable->set(3,varcmd);

    echo_var_assign(varname, value_string);
    echo_var_assign(varname, value);
  }
  }
  kim_query_log_delimiter("end");
  kim_query_log_delimiter("end");