#include "dump_cfg.h"
#include <cstring>
#include "atom.h"
#include "modify.h"
#include "fix.h"
#include "error.h"
#include "uef_utils.h"
#include "dump_cfg_uef.h"
#include "fix_nh_uef.h"
using namespace LAMMPS_NS;
#define UNWRAPEXPAND 10.0
#define ONEFIELD 32
#define DELTA 1048576
void DumpCFGUef::init_style()
{
DumpCFG::init_style();
int i=0;
for (i=0; i<modify->nfix; i++)
{
if (strcmp(modify->fix[i]->style,"nvt/uef")==0)
break;
if (strcmp(modify->fix[i]->style,"npt/uef")==0)
break;
}
if (i==modify->nfix)
error->all(FLERR,"Can't use dump cfg/uef without defining a fix nvt/npt/uef");
ifix_uef=i;
}
void DumpCFGUef::write_header(bigint n)
{
double box[3][3],rot[3][3];
((FixNHUef*) modify->fix[ifix_uef])->get_box(box);
((FixNHUef*) modify->fix[ifix_uef])->get_rot(rot);
for (int i=0;i<3;i++)
for(int j=i+1;j<3;j++)
{
double t=rot[i][j];
rot[i][j]=rot[j][i];
rot[j][i]=t;
}
UEF_utils::mul_m2(rot,box);
double scale = 1.0;
if (atom->peri_flag) scale = atom->pdscale;
else if (unwrapflag == 1) scale = UNWRAPEXPAND;
fprintf(fp,"Number of particles = " BIGINT_FORMAT "\n",n);
fprintf(fp,"A = %g Angstrom (basic length-scale)\n",scale);
fprintf(fp,"H0(1,1) = %g A\n",box[0][0]);
fprintf(fp,"H0(1,2) = %g A\n",box[1][0]);
fprintf(fp,"H0(1,3) = %g A\n",box[2][0]);
fprintf(fp,"H0(2,1) = %g A\n",box[0][1]);
fprintf(fp,"H0(2,2) = %g A\n",box[1][1]);
fprintf(fp,"H0(2,3) = %g A\n",box[2][1]);
fprintf(fp,"H0(3,1) = %g A\n",box[0][2]);
fprintf(fp,"H0(3,2) = %g A\n",box[1][2]);
fprintf(fp,"H0(3,3) = %g A\n",box[2][2]);
fprintf(fp,".NO_VELOCITY.\n");
fprintf(fp,"entry_count = %d\n",nfield-2);
for (int i = 0; i < nfield-5; i++)
fprintf(fp,"auxiliary[%d] = %s\n",i,auxname[i]);
}