forked from lijiext/lammps
add restart support to fix deform. only "initial" data is restored and some consistency check performed
This commit is contained in:
parent
dd44189d1f
commit
daa77176ad
|
@ -565,8 +565,10 @@ more instructions on how to use the accelerated styles effectively.
|
||||||
|
|
||||||
[Restart, fix_modify, output, run start/stop, minimize info:]
|
[Restart, fix_modify, output, run start/stop, minimize info:]
|
||||||
|
|
||||||
No information about this fix is written to "binary restart
|
This fix will restore the initial box settings from "binary restart
|
||||||
files"_restart.html. None of the "fix_modify"_fix_modify.html options
|
files"_restart.html, which allows the fix to be properly continue
|
||||||
|
deformation, when using the start/stop options of the "run"_run.html
|
||||||
|
command. None of the "fix_modify"_fix_modify.html options
|
||||||
are relevant to this fix. No global or per-atom quantities are stored
|
are relevant to this fix. No global or per-atom quantities are stored
|
||||||
by this fix for access by various "output
|
by this fix for access by various "output
|
||||||
commands"_Section_howto.html#howto_15.
|
commands"_Section_howto.html#howto_15.
|
||||||
|
|
|
@ -37,7 +37,7 @@ using namespace LAMMPS_NS;
|
||||||
using namespace FixConst;
|
using namespace FixConst;
|
||||||
using namespace MathConst;
|
using namespace MathConst;
|
||||||
|
|
||||||
enum{NONE,FINAL,DELTA,SCALE,VEL,ERATE,TRATE,VOLUME,WIGGLE,VARIABLE};
|
enum{NONE=0,FINAL,DELTA,SCALE,VEL,ERATE,TRATE,VOLUME,WIGGLE,VARIABLE};
|
||||||
enum{ONE_FROM_ONE,ONE_FROM_TWO,TWO_FROM_ONE};
|
enum{ONE_FROM_ONE,ONE_FROM_TWO,TWO_FROM_ONE};
|
||||||
|
|
||||||
// same as domain.cpp, fix_nvt_sllod.cpp, compute_temp_deform.cpp
|
// same as domain.cpp, fix_nvt_sllod.cpp, compute_temp_deform.cpp
|
||||||
|
@ -52,6 +52,7 @@ rfix(NULL), irregular(NULL), set(NULL)
|
||||||
if (narg < 4) error->all(FLERR,"Illegal fix deform command");
|
if (narg < 4) error->all(FLERR,"Illegal fix deform command");
|
||||||
|
|
||||||
no_change_box = 1;
|
no_change_box = 1;
|
||||||
|
restart_global = 1;
|
||||||
|
|
||||||
nevery = force->inumeric(FLERR,arg[3]);
|
nevery = force->inumeric(FLERR,arg[3]);
|
||||||
if (nevery <= 0) error->all(FLERR,"Illegal fix deform command");
|
if (nevery <= 0) error->all(FLERR,"Illegal fix deform command");
|
||||||
|
@ -59,12 +60,7 @@ rfix(NULL), irregular(NULL), set(NULL)
|
||||||
// set defaults
|
// set defaults
|
||||||
|
|
||||||
set = new Set[6];
|
set = new Set[6];
|
||||||
set[0].style = set[1].style = set[2].style =
|
memset(set,0,6*sizeof(Set));
|
||||||
set[3].style = set[4].style = set[5].style = NONE;
|
|
||||||
set[0].hstr = set[1].hstr = set[2].hstr =
|
|
||||||
set[3].hstr = set[4].hstr = set[5].hstr = NULL;
|
|
||||||
set[0].hratestr = set[1].hratestr = set[2].hratestr =
|
|
||||||
set[3].hratestr = set[4].hratestr = set[5].hratestr = NULL;
|
|
||||||
|
|
||||||
// parse arguments
|
// parse arguments
|
||||||
|
|
||||||
|
@ -343,11 +339,9 @@ rfix(NULL), irregular(NULL), set(NULL)
|
||||||
set[i].hi_initial = domain->boxhi[i];
|
set[i].hi_initial = domain->boxhi[i];
|
||||||
set[i].vol_initial = domain->xprd * domain->yprd * domain->zprd;
|
set[i].vol_initial = domain->xprd * domain->yprd * domain->zprd;
|
||||||
}
|
}
|
||||||
for (int i = 3; i < 6; i++) {
|
set[3].tilt_initial = domain->yz;
|
||||||
if (i == 5) set[i].tilt_initial = domain->xy;
|
set[4].tilt_initial = domain->xz;
|
||||||
else if (i == 4) set[i].tilt_initial = domain->xz;
|
set[5].tilt_initial = domain->xy;
|
||||||
else if (i == 3) set[i].tilt_initial = domain->yz;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reneighboring only forced if flips can occur due to shape changes
|
// reneighboring only forced if flips can occur due to shape changes
|
||||||
|
|
||||||
|
@ -955,6 +949,43 @@ void FixDeform::end_of_step()
|
||||||
if (kspace_flag) force->kspace->setup();
|
if (kspace_flag) force->kspace->setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
write Set data to restart file
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixDeform::write_restart(FILE *fp)
|
||||||
|
{
|
||||||
|
if (comm->me == 0) {
|
||||||
|
int size = 6*sizeof(Set);
|
||||||
|
fwrite(&size,sizeof(int),1,fp);
|
||||||
|
fwrite(set,sizeof(Set),6,fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
use selected state info from restart file to restart the Fix
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixDeform::restart(char *buf)
|
||||||
|
{
|
||||||
|
int samestyle = 1;
|
||||||
|
Set *set_restart = (Set *) buf;
|
||||||
|
for (int i=0; i<6; ++i) {
|
||||||
|
// restore data from initial state
|
||||||
|
set[i].lo_initial = set_restart[i].lo_initial;
|
||||||
|
set[i].hi_initial = set_restart[i].hi_initial;
|
||||||
|
set[i].vol_initial = set_restart[i].vol_initial;
|
||||||
|
set[i].tilt_initial = set_restart[i].tilt_initial;
|
||||||
|
// check if style settings are consitent (should do the whole set?)
|
||||||
|
if (set[i].style != set_restart[i].style)
|
||||||
|
samestyle = 0;
|
||||||
|
if (set[i].substyle != set_restart[i].substyle)
|
||||||
|
samestyle = 0;
|
||||||
|
}
|
||||||
|
if (!samestyle)
|
||||||
|
error->all(FLERR,"Fix deform settings not consistent with restart");
|
||||||
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void FixDeform::options(int narg, char **arg)
|
void FixDeform::options(int narg, char **arg)
|
||||||
|
|
|
@ -35,6 +35,8 @@ class FixDeform : public Fix {
|
||||||
void init();
|
void init();
|
||||||
virtual void pre_exchange();
|
virtual void pre_exchange();
|
||||||
virtual void end_of_step();
|
virtual void end_of_step();
|
||||||
|
virtual void write_restart(FILE *);
|
||||||
|
virtual void restart(char *buf);
|
||||||
double memory_usage();
|
double memory_usage();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
Loading…
Reference in New Issue