Unverified Commit 40a05300 authored by Axel Kohlmeyer's avatar Axel Kohlmeyer
Browse files

update output formatting of info command

parent e0200cf3
Loading
Loading
Loading
Loading
+152 −149
Original line number Diff line number Diff line
@@ -265,7 +265,7 @@ void Info::command(int narg, char **arg)

  fputs("\nInfo-Info-Info-Info-Info-Info-Info-Info-Info-Info-Info\n",out);
  time_t now = time(NULL);
  fprintf(out,"Printed on %s\n",ctime(&now));
  fmt::print(out,"Printed on {}\n",ctime(&now));

  if (flags & CONFIG) {
    fmt::print(out,"\nLAMMPS version: {} / {}\n",
@@ -302,17 +302,15 @@ void Info::command(int narg, char **arg)
    fputs("-DLAMMPS_SMALLSMALL\n",out);
#endif

    const char *pkg;
    int ncword, ncline = 0;

    fputs("\nInstalled packages:\n\n",out);
    for (int i = 0; NULL != (pkg = lmp->installed_packages[i]); ++i) {
      ncword = strlen(pkg);
    for (const char **pkg = lmp->installed_packages; *pkg != nullptr; ++pkg) {
      ncword = strlen(*pkg);
      if (ncline + ncword > 78) {
        ncline = 0;
        fputs("\n",out);
      }
      fprintf(out,"%s ",pkg);
      fmt::print(out,"{} ",*pkg);
      ncline += ncword + 1;
    }
    fputs("\n",out);
@@ -320,7 +318,7 @@ void Info::command(int narg, char **arg)

  if (flags & MEMORY) {

    fprintf(out,"\nMemory allocation information (MPI rank 0):\n\n");
    fputs("\nMemory allocation information (MPI rank 0):\n\n",out);

    bigint bytes = 0;
    bytes += atom->memory_usage();
@@ -332,26 +330,26 @@ void Info::command(int narg, char **arg)
    for (int i = 0; i < output->ndump; i++)
      bytes += output->dump[i]->memory_usage();
    double mbytes = bytes/1024.0/1024.0;
    fprintf(out,"Total dynamically allocated memory: %.4g Mbyte\n",mbytes);
    fmt::print(out,"Total dynamically allocated memory: {:.4} Mbyte\n",mbytes);

#if defined(_WIN32)
    HANDLE phandle = GetCurrentProcess();
    PROCESS_MEMORY_COUNTERS_EX pmc;
    GetProcessMemoryInfo(phandle,(PROCESS_MEMORY_COUNTERS *)&pmc,sizeof(pmc));
    fprintf(out,"Non-shared memory use: %.4g Mbyte\n",
    fmt::print(out,"Non-shared memory use: {:.4} Mbyte\n",
               (double)pmc.PrivateUsage/1048576.0);
    fprintf(out,"Maximum working set size: %.4g Mbyte\n",
    fmt::print(out,"Maximum working set size: {:.4} Mbyte\n",
               (double)pmc.PeakWorkingSetSize/1048576.0);
#else
#if defined(__linux__)
    struct mallinfo mi;
    mi = mallinfo();
    fprintf(out,"Current reserved memory pool size: %.4g Mbyte\n",
    fmt::print(out,"Current reserved memory pool size: {:.4} Mbyte\n",
               (double)mi.uordblks/1048576.0+(double)mi.hblkhd/1048576.0);
#endif
    struct rusage ru;
    if (getrusage(RUSAGE_SELF, &ru) == 0) {
      fprintf(out,"Maximum resident set size: %.4g Mbyte\n",
      fmt::print(out,"Maximum resident set size: {:.4} Mbyte\n",
                 (double)ru.ru_maxrss/1024.0);
    }
#endif
@@ -376,85 +374,84 @@ void Info::command(int narg, char **arg)
                 comm->get_comm_cutoff());

    if (comm->mode == 1) {
      fprintf(out,"Communication mode = multi\n");
      fputs("Communication mode = multi\n",out);
      double cut;
      for (int i=1; i <= atom->ntypes && neighbor->cuttype; ++i) {
        cut = neighbor->cuttype[i];
        if (comm->cutusermulti) cut = MAX(cut,comm->cutusermulti[i]);
        fprintf(out,"Communication cutoff for type %d = %g\n", i, cut);
        fmt::print(out,"Communication cutoff for type {} = {:.8}\n", i, cut);
      }
    }
    fprintf(out,"Nprocs = %d,   Nthreads = %d\n",
            comm->nprocs, comm->nthreads);
    fmt::print(out,"Nprocs = {},   Nthreads = {}\n",comm->nprocs,comm->nthreads);
    if (domain->box_exist)
      fprintf(out,"Processor grid = %d x %d x %d\n",comm->procgrid[0],
      fmt::print(out,"Processor grid = {} x {} x {}\n",comm->procgrid[0],
                 comm->procgrid[1], comm->procgrid[2]);
  }

  if (flags & SYSTEM) {
    fprintf(out,"\nSystem information:\n");
    fprintf(out,"Units      = %s\n", update->unit_style);
    fprintf(out,"Atom style = %s\n", atom->atom_style);
    fprintf(out,"Atom map   = %s\n", mapstyles[atom->map_style]);
    fputs("\nSystem information:\n",out);
    fmt::print(out,"Units         = {}\n", update->unit_style);
    fmt::print(out,"Atom style    = {}\n", atom->atom_style);
    fmt::print(out,"Atom map      = {}\n", mapstyles[atom->map_style]);
    if (atom->molecular > 0) {
      const char *msg;
      msg = (atom->molecular == 2) ? "template" : "standard";
      fprintf(out,"Molecule type = %s\n",msg);
      fmt::print(out,"Molecule type = {}\n",msg);
    }
    fprintf(out,"Atoms = " BIGINT_FORMAT ",  types = %d,  style = %s\n",
    fmt::print(out,"Atoms     = {:12},  types = {:8d},  style = {}\n",
               atom->natoms, atom->ntypes, force->pair_style);

    if (force->pair && utils::strmatch(force->pair_style,"^hybrid")) {
      PairHybrid *hybrid = (PairHybrid *)force->pair;
      fprintf(out,"Hybrid sub-styles:");
      fmt::print(out,"Hybrid sub-styles:");
      for (int i=0; i < hybrid->nstyles; ++i)
        fprintf(out," %s", hybrid->keywords[i]);
        fmt::print(out," {}", hybrid->keywords[i]);
      fputc('\n',out);
    }
    if (atom->molecular > 0) {
      const char *msg;
      msg = force->bond_style ? force->bond_style : "none";
      fprintf(out,"Bonds = " BIGINT_FORMAT ",  types = %d,  style = %s\n",
      fmt::print(out,"Bonds    =  {:12},  types = {:8},  style = {}\n",
                 atom->nbonds, atom->nbondtypes, msg);

      msg = force->angle_style ? force->angle_style : "none";
      fprintf(out,"Angles = " BIGINT_FORMAT ",  types = %d,  style = %s\n",
      fmt::print(out,"Angles    = {:12},  types = {:8},  style = {}\n",
                 atom->nangles, atom->nangletypes, msg);

      msg = force->dihedral_style ? force->dihedral_style : "none";
      fprintf(out,"Dihedrals = " BIGINT_FORMAT ",  types = %d,  style = %s\n",
      fmt::print(out,"Dihedrals = {:12},  types = {:8},  style = {}\n",
                 atom->ndihedrals, atom->ndihedraltypes, msg);

      msg = force->improper_style ? force->improper_style : "none";
      fprintf(out,"Impropers = " BIGINT_FORMAT ",  types = %d,  style = %s\n",
      fmt::print(out,"Impropers = {:12},  types = {:8},  style = {}\n",
                 atom->nimpropers, atom->nimpropertypes, msg);

      const double * const special_lj   = force->special_lj;
      const double * const special_coul = force->special_coul;

      fprintf(out,"Special bond factors lj =   %-10g %-10g %-10g\n"
              "Special bond factors coul = %-10g %-10g %-10g\n",
      fmt::print(out,"Special bond factors lj =    {:<8} {:<8} {:<8}\n"
                 "Special bond factors coul =  {:<8} {:<8} {:<8}\n",
                 special_lj[1],special_lj[2],special_lj[3],
                 special_coul[1],special_coul[2],special_coul[3]);
    }

    fprintf(out,"Kspace style = %s\n",
    fmt::print(out,"Kspace style = {}\n",
               force->kspace ? force->kspace_style : "none");

    if (domain->box_exist) {
      fprintf(out,"\nDimensions = %d\n",domain->dimension);
      fprintf(out,"%s box = %g x %g x %g\n",
      fmt::print(out,"\nDimensions = {}\n",domain->dimension);
      fmt::print(out,"{} box = {:.8} x {:.8} x {:.8}\n",
                 domain->triclinic ? "Triclinic" : "Orthogonal",
                 domain->xprd, domain->yprd, domain->zprd);
      fprintf(out,"Boundaries = %c,%c %c,%c %c,%c\n",
      fmt::print(out,"Boundaries = {},{} {},{} {},{}\n",
                 bstyles[domain->boundary[0][0]],bstyles[domain->boundary[0][1]],
                 bstyles[domain->boundary[1][0]],bstyles[domain->boundary[1][1]],
                 bstyles[domain->boundary[2][0]],bstyles[domain->boundary[2][1]]);
      fprintf(out,"xlo, xhi = %g, %g\n", domain->boxlo[0], domain->boxhi[0]);
      fprintf(out,"ylo, yhi = %g, %g\n", domain->boxlo[1], domain->boxhi[1]);
      fprintf(out,"zlo, zhi = %g, %g\n", domain->boxlo[2], domain->boxhi[2]);
      fmt::print(out,"xlo, xhi = {:.8}, {:.8}\n", domain->boxlo[0], domain->boxhi[0]);
      fmt::print(out,"ylo, yhi = {:.8}, {:.8}\n", domain->boxlo[1], domain->boxhi[1]);
      fmt::print(out,"zlo, zhi = {:.8}, {:.8}\n", domain->boxlo[2], domain->boxhi[2]);
      if (domain->triclinic)
          fprintf(out,"Xy, xz, yz = %g, %g, %g\n",
        fmt::print(out,"Xy, xz, yz = {:.8}, {:.8}, {:.8}\n",
                   domain->xy, domain->xz, domain->yz);
    } else {
      fputs("\nBox has not yet been created\n",out);
@@ -464,12 +461,12 @@ void Info::command(int narg, char **arg)
  if (domain->box_exist && (flags & COEFFS)) {
    Pair *pair=force->pair;

    fprintf(out,"\nCoeff information:\n");
    fputs("\nCoeff status information:\n",out);
    if (pair) {
      fprintf(out,"Pair Coeffs:\n");
      fputs("\nPair Coeffs:\n",out);
      for (int i=1; i <= atom->ntypes; ++i)
        for (int j=i; j <= atom->ntypes; ++j) {
          fprintf(out,"%3d %3d :",i,j);
          fmt::print(out,"{:6d} {:6d}:",i,j);
          if (pair->allocated && pair->setflag[i][j]) fputs(" is set\n",out);
          else fputs(" is not set\n",out);
        }
@@ -478,9 +475,9 @@ void Info::command(int narg, char **arg)
      Bond *bond=force->bond;

      if (bond) {
        fprintf(out,"Bond Coeffs:\n");
        fputs("\nBond Coeffs:\n",out);
        for (int i=1; i <= atom->nbondtypes; ++i) {
          fprintf(out,"%3d :",i);
          fmt::print(out,"{:6d}:",i);
          if (bond->allocated && bond->setflag[i]) fputs(" is set\n",out);
          else fputs (" is not set\n",out);
        }
@@ -490,9 +487,9 @@ void Info::command(int narg, char **arg)
      Angle *angle=force->angle;

      if (angle) {
        fprintf(out,"Angle Coeffs:\n");
        fputs("\nAngle Coeffs:\n",out);
        for (int i=1; i <= atom->nangletypes; ++i) {
          fprintf(out,"%3d :",i);
          fmt::print(out,"{:6d}:",i);
          if (angle->allocated && angle->setflag[i]) fputs(" is set\n",out);
          else fputs (" is not set\n",out);
        }
@@ -502,9 +499,9 @@ void Info::command(int narg, char **arg)
      Dihedral *dihedral=force->dihedral;

      if (dihedral) {
        fprintf(out,"Dihedral Coeffs:\n");
        fputs("\nDihedral Coeffs:\n",out);
        for (int i=1; i <= atom->ndihedraltypes; ++i) {
          fprintf(out,"%3d :",i);
          fmt::print(out,"{:6d}:",i);
          if (dihedral->allocated && dihedral->setflag[i]) fputs(" is set\n",out);
          else fputs (" is not set\n",out);
        }
@@ -514,9 +511,9 @@ void Info::command(int narg, char **arg)
      Improper *b=force->improper;

      if (b) {
        fprintf(out,"Improper Coeffs:\n");
        fputs("\nImproper Coeffs:\n",out);
        for (int i=1; i <= atom->nimpropertypes; ++i) {
          fprintf(out,"%3d :",i);
          fmt::print(out,"{:6d}:",i);
          if (b->allocated && b->setflag[i]) fputs(" is set\n",out);
          else fputs (" is not set\n",out);
        }
@@ -528,10 +525,10 @@ void Info::command(int narg, char **arg)
    int ngroup = group->ngroup;
    char **names = group->names;
    int *dynamic = group->dynamic;
    fprintf(out,"\nGroup information:\n");
    fputs("\nGroup information:\n",out);
    for (int i=0; i < ngroup; ++i) {
      if (names[i])
        fprintf(out,"Group[%2d]: %s (%s)\n",
        fmt::print(out,"Group[{:2d}]:     {:16} ({})\n",
                   i, names[i], dynamic[i] ? "dynamic" : "static");
    }
  }
@@ -539,17 +536,18 @@ void Info::command(int narg, char **arg)
  if (flags & REGIONS) {
    int nreg = domain->nregion;
    Region **regs = domain->regions;
    fprintf(out,"\nRegion information:\n");
    fputs("\nRegion information:\n",out);
    for (int i=0; i < nreg; ++i) {
      fprintf(out,"Region[%3d]: %s,  style = %s,  side = %s\n",
              i, regs[i]->id, regs[i]->style,
      fmt::print(out,"Region[{:3d}]:  {:16}  style = {:16}  side = {}\n",
                 i, std::string(regs[i]->id)+',',
                 std::string(regs[i]->style)+',',
                 regs[i]->interior ? "in" : "out");
      if (regs[i]->bboxflag)
        fprintf(out,"     Boundary: lo %g %g %g  hi %g %g %g\n",
        fmt::print(out,"   Boundary:  lo {:.8} {:.8} {:.8}  hi {:.8} {:.8} {:.8}\n",
                   regs[i]->extent_xlo, regs[i]->extent_ylo,
                   regs[i]->extent_zlo, regs[i]->extent_xhi,
                   regs[i]->extent_yhi, regs[i]->extent_zhi);
      else fprintf(out,"     No Boundary\n");
      else fputs("   No Boundary\n",out);
    }
  }

@@ -557,10 +555,11 @@ void Info::command(int narg, char **arg)
    int ncompute = modify->ncompute;
    Compute **compute = modify->compute;
    char **names = group->names;
    fprintf(out,"\nCompute information:\n");
    fputs("\nCompute information:\n",out);
    for (int i=0; i < ncompute; ++i) {
      fprintf(out,"Compute[%3d]: %s,  style = %s,  group = %s\n",
              i, compute[i]->id, compute[i]->style,
      fmt::print(out,"Compute[{:3d}]:  {:16}  style = {:16}  group = {}\n",
                 i, std::string(compute[i]->id)+',',
                 std::string(compute[i]->style)+',',
                 names[compute[i]->igroup]);
    }
  }
@@ -571,15 +570,17 @@ void Info::command(int narg, char **arg)
    int *nevery = output->every_dump;           \
    char **vnames = output->var_dump;
    char **names = group->names;
    fprintf(out,"\nDump information:\n");
    fputs("\nDump information:\n",out);
    for (int i=0; i < ndump; ++i) {
      fprintf(out,"Dump[%3d]: %s,  file = %s,  style = %s,  group = %s,  ",
              i, dump[i]->id, dump[i]->filename,
              dump[i]->style, names[dump[i]->igroup]);
      fmt::print(out,"Dump[{:3d}]:     {:16}  file = {:16}  style = {:16}  group = {:16}  ",
                 i, std::string(dump[i]->id)+',',
                 std::string(dump[i]->filename)+',',
                 std::string(dump[i]->style)+',',
                 std::string(names[dump[i]->igroup])+',');
      if (nevery[i]) {
        fprintf(out,"every = %d\n", nevery[i]);
        fmt::print(out,"every = {}\n", nevery[i]);
      } else {
        fprintf(out,"every = %s\n", vnames[i]);
        fmt::print(out,"every = {}\n", vnames[i]);
      }
    }
  }
@@ -588,10 +589,12 @@ void Info::command(int narg, char **arg)
    int nfix = modify->nfix;
    Fix **fix = modify->fix;
    char **names = group->names;
    fprintf(out,"\nFix information:\n");
    fputs("\nFix information:\n",out);
    for (int i=0; i < nfix; ++i) {
      fprintf(out,"Fix[%3d]: %s,  style = %s,  group = %s\n",
              i, fix[i]->id, fix[i]->style, names[fix[i]->igroup]);
      fmt::print(out, "Fix[{:3d}]:      {:16}  style = {:16}  group = {}\n",
                 i,std::string(fix[i]->id)+',',
                 std::string(fix[i]->style)+',',
                 names[fix[i]->igroup]);
    }
  }

@@ -600,19 +603,20 @@ void Info::command(int narg, char **arg)
    int *style = input->variable->style;
    char **names = input->variable->names;
    char ***data = input->variable->data;
    fprintf(out,"\nVariable information:\n");
    fputs("\nVariable information:\n",out);
    for (int i=0; i < nvar; ++i) {
      int ndata = 1;
      fprintf(out,"Variable[%3d]: %-10s,  style = %-10s,  def =",
              i,names[i],varstyles[style[i]]);
      fmt::print(out,"Variable[{:3d}]: {:16}  style = {:16}  def =",
                 i,std::string(names[i])+',',
                 std::string(varstyles[style[i]])+',');
      if (style[i] == INTERNAL) {
        fprintf(out,"%g\n",input->variable->dvalue[i]);
        fmt::print(out,"{:.8}\n",input->variable->dvalue[i]);
        continue;
      }
      if ((style[i] != LOOP) && (style[i] != ULOOP))
        ndata = input->variable->num[i];
      for (int j=0; j < ndata; ++j)
        fprintf(out," %s",data[i][j]);
        fmt::print(out," {}",data[i][j]);
      fputs("\n",out);
    }
  }
@@ -646,9 +650,9 @@ void Info::command(int narg, char **arg)
    wallclock = (wallclock - walls) / 60.0;
    wallm = fmod(wallclock,60.0);
    wallh = (wallclock - wallm) / 60.0;
    fprintf(out,"\nTotal time information (MPI rank 0):\n"
            "  CPU time: %4d:%02d:%02d\n"
            " Wall time: %4d:%02d:%02d\n",
    fmt::print(out,"\nTotal time information (MPI rank 0):\n"
               "  CPU time: {:4d}:{:02d}:{:02d}\n"
               " Wall time: {:4d}:{:02d}:{:02d}\n",
               cpuh,cpum,cpus,wallh,wallm,walls);
  }

@@ -663,11 +667,10 @@ void Info::command(int narg, char **arg)
    fclose(out);
}


void Info::available_styles(FILE * out, int flags)
{

  fprintf(out,"\nStyles information:\n");
  fputs("\nStyles information:\n",out);

  if(flags & ATOM_STYLES)      atom_styles(out);
  if(flags & INTEGRATE_STYLES) integrate_styles(out);
@@ -687,100 +690,100 @@ void Info::available_styles(FILE * out, int flags)

void Info::atom_styles(FILE *out)
{
  fprintf(out, "\nAtom styles:\n");
  fputs("\nAtom styles:\n",out);
  print_columns(out, atom->avec_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}

void Info::integrate_styles(FILE *out)
{
  fprintf(out, "\nIntegrate styles:\n");
  fputs("\nIntegrate styles:\n",out);
  print_columns(out, update->integrate_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}

void Info::minimize_styles(FILE *out)
{
  fprintf(out, "\nMinimize styles:\n");
  fputs("\nMinimize styles:\n",out);
  print_columns(out, update->minimize_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}

void Info::pair_styles(FILE *out)
{
  fprintf(out, "\nPair styles:\n");
  fputs("\nPair styles:\n",out);
  print_columns(out, force->pair_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}

void Info::bond_styles(FILE *out)
{
  fprintf(out, "\nBond styles:\n");
  fputs("\nBond styles:\n",out);
  print_columns(out, force->bond_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}

void Info::angle_styles(FILE *out)
{
  fprintf(out, "\nAngle styles:\n");
  fputs("\nAngle styles:\n",out);
  print_columns(out, force->angle_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}

void Info::dihedral_styles(FILE *out)
{
  fprintf(out, "\nDihedral styles:\n");
  fputs("\nDihedral styles:\n",out);
  print_columns(out, force->dihedral_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}

void Info::improper_styles(FILE *out)
{
  fprintf(out, "\nImproper styles:\n");
  fputs("\nImproper styles:\n",out);
  print_columns(out, force->improper_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}

void Info::kspace_styles(FILE *out)
{
  fprintf(out, "\nKSpace styles:\n");
  fputs("\nKSpace styles:\n",out);
  print_columns(out, force->kspace_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}

void Info::fix_styles(FILE *out)
{
  fprintf(out, "\nFix styles:\n");
  fputs("\nFix styles:\n",out);
  print_columns(out, modify->fix_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}

void Info::compute_styles(FILE *out)
{
  fprintf(out, "\nCompute styles:\n");
  fputs("\nCompute styles:\n",out);
  print_columns(out, modify->compute_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}

void Info::region_styles(FILE *out)
{
  fprintf(out, "\nRegion styles:\n");
  fputs("\nRegion styles:\n",out);
  print_columns(out, domain->region_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}

void Info::dump_styles(FILE *out)
{
  fprintf(out, "\nDump styles:\n");
  fputs("\nDump styles:\n",out);
  print_columns(out,output->dump_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}

void Info::command_styles(FILE *out)
{
  fprintf(out, "\nCommand styles (add-on input script commands):\n");
  fputs("\nCommand styles (add-on input script commands):\n",out);
  print_columns(out, input->command_map);
  fprintf(out, "\n\n\n");
  fputs("\n\n\n",out);
}