forked from lijiext/lammps
git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@11155 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
parent
7292ac7402
commit
e6d008ef39
|
@ -23,8 +23,6 @@
|
||||||
#include "molecule.h"
|
#include "molecule.h"
|
||||||
#include "modify.h"
|
#include "modify.h"
|
||||||
#include "fix_gravity.h"
|
#include "fix_gravity.h"
|
||||||
#include "fix_rigid_small.h"
|
|
||||||
#include "fix_shake.h"
|
|
||||||
#include "domain.h"
|
#include "domain.h"
|
||||||
#include "region.h"
|
#include "region.h"
|
||||||
#include "region_block.h"
|
#include "region_block.h"
|
||||||
|
@ -325,8 +323,9 @@ void FixPour::init()
|
||||||
if (rigidflag) {
|
if (rigidflag) {
|
||||||
int ifix = modify->find_fix(idrigid);
|
int ifix = modify->find_fix(idrigid);
|
||||||
if (ifix < 0) error->all(FLERR,"Fix pour rigid fix does not exist");
|
if (ifix < 0) error->all(FLERR,"Fix pour rigid fix does not exist");
|
||||||
fixrigid = (FixRigidSmall *) modify->fix[ifix];
|
fixrigid = modify->fix[ifix];
|
||||||
if (onemol != fixrigid->onemol)
|
int tmp;
|
||||||
|
if (onemol != (Molecule *) fixrigid->extract("onemol",tmp))
|
||||||
error->all(FLERR,
|
error->all(FLERR,
|
||||||
"Fix pour and fix rigid/small not using same molecule ID");
|
"Fix pour and fix rigid/small not using same molecule ID");
|
||||||
}
|
}
|
||||||
|
@ -338,10 +337,10 @@ void FixPour::init()
|
||||||
if (shakeflag) {
|
if (shakeflag) {
|
||||||
int ifix = modify->find_fix(idshake);
|
int ifix = modify->find_fix(idshake);
|
||||||
if (ifix < 0) error->all(FLERR,"Fix pour shake fix does not exist");
|
if (ifix < 0) error->all(FLERR,"Fix pour shake fix does not exist");
|
||||||
fixshake = (FixShake *) modify->fix[ifix];
|
fixshake = modify->fix[ifix];
|
||||||
if (onemol != fixshake->onemol)
|
int tmp;
|
||||||
error->all(FLERR,
|
if (onemol != (Molecule *) fixshake->extract("onemol",tmp))
|
||||||
"Fix pour and fix shake not using same molecule ID");
|
error->all(FLERR,"Fix pour and fix shake not using same molecule ID");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,8 +492,8 @@ void FixPour::pre_exchange()
|
||||||
coords[i][2] += coord[2];
|
coords[i][2] += coord[2];
|
||||||
|
|
||||||
// coords[3] = particle radius
|
// coords[3] = particle radius
|
||||||
// default to 0.5, if not defined in Molecule
|
// default to 0.5, if radii not defined in Molecule
|
||||||
// same as atom->avec->create_atom() when invoked below
|
// same as atom->avec->create_atom(), invoked below
|
||||||
|
|
||||||
if (onemol->radiusflag) coords[i][3] = onemol->radius[i];
|
if (onemol->radiusflag) coords[i][3] = onemol->radius[i];
|
||||||
else coords[i][3] = 0.5;
|
else coords[i][3] = 0.5;
|
||||||
|
@ -942,3 +941,34 @@ void FixPour::reset_dt()
|
||||||
error->all(FLERR,"Cannot change timestep with fix pour");
|
error->all(FLERR,"Cannot change timestep with fix pour");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
extract particle radius for atom type = itype
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void *FixPour::extract(const char *str, int &itype)
|
||||||
|
{
|
||||||
|
if (strcmp(str,"radius") == 0) {
|
||||||
|
if (mode == ATOM) {
|
||||||
|
if (itype == ntype) oneradius = radius_max;
|
||||||
|
else oneradius = 0.0;
|
||||||
|
} else {
|
||||||
|
double *radius = onemol->radius;
|
||||||
|
int *type = onemol->type;
|
||||||
|
int natoms = onemol->natoms;
|
||||||
|
|
||||||
|
// check radii of matching types in Molecule
|
||||||
|
// default to 0.5, if radii not defined in Molecule
|
||||||
|
// same as atom->avec->create_atom(), invoked in pre_exchange()
|
||||||
|
|
||||||
|
oneradius = 0.0;
|
||||||
|
for (int i = 0; i < natoms; i++)
|
||||||
|
if (type[i] == itype-ntype) {
|
||||||
|
if (radius) oneradius = MAX(oneradius,radius[i]);
|
||||||
|
else oneradius = 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
itype = 0;
|
||||||
|
return &oneradius;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
|
@ -25,15 +25,6 @@ FixStyle(pour,FixPour)
|
||||||
namespace LAMMPS_NS {
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
class FixPour : public Fix {
|
class FixPour : public Fix {
|
||||||
friend class PairGranHertzHistory;
|
|
||||||
friend class PairGranHertzHistoryOMP;
|
|
||||||
friend class PairGranHooke;
|
|
||||||
friend class PairGranHookeOMP;
|
|
||||||
friend class PairGranHookeHistory;
|
|
||||||
friend class PairGranHookeHistory2;
|
|
||||||
friend class PairGranHookeHistoryOMP;
|
|
||||||
friend class PairGranHookeCuda;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FixPour(class LAMMPS *, int, char **);
|
FixPour(class LAMMPS *, int, char **);
|
||||||
~FixPour();
|
~FixPour();
|
||||||
|
@ -41,6 +32,7 @@ class FixPour : public Fix {
|
||||||
void init();
|
void init();
|
||||||
void pre_exchange();
|
void pre_exchange();
|
||||||
void reset_dt();
|
void reset_dt();
|
||||||
|
void *extract(const char *, int &);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int ninsert,ntype,seed;
|
int ninsert,ntype,seed;
|
||||||
|
@ -63,8 +55,8 @@ class FixPour : public Fix {
|
||||||
int natom;
|
int natom;
|
||||||
double **coords;
|
double **coords;
|
||||||
int *imageflags;
|
int *imageflags;
|
||||||
class FixRigidSmall *fixrigid;
|
class Fix *fixrigid,*fixshake;
|
||||||
class FixShake *fixshake;
|
double oneradius;
|
||||||
|
|
||||||
int me,nprocs;
|
int me,nprocs;
|
||||||
int *recvcounts,*displs;
|
int *recvcounts,*displs;
|
||||||
|
|
|
@ -27,8 +27,6 @@
|
||||||
#include "update.h"
|
#include "update.h"
|
||||||
#include "modify.h"
|
#include "modify.h"
|
||||||
#include "fix.h"
|
#include "fix.h"
|
||||||
#include "fix_pour.h"
|
|
||||||
#include "fix_deposit.h"
|
|
||||||
#include "fix_shear_history.h"
|
#include "fix_shear_history.h"
|
||||||
#include "comm.h"
|
#include "comm.h"
|
||||||
#include "neighbor.h"
|
#include "neighbor.h"
|
||||||
|
@ -451,43 +449,38 @@ void PairGranHookeHistory::init_style()
|
||||||
if (i < modify->nfix) freeze_group_bit = modify->fix[i]->groupbit;
|
if (i < modify->nfix) freeze_group_bit = modify->fix[i]->groupbit;
|
||||||
else freeze_group_bit = 0;
|
else freeze_group_bit = 0;
|
||||||
|
|
||||||
// check for FixPour and set pour_type and pour_maxrad
|
// check for FixRigid so can extract rigid body masses
|
||||||
|
|
||||||
int pour_type = 0;
|
|
||||||
double pour_maxrad = 0.0;
|
|
||||||
for (i = 0; i < modify->nfix; i++)
|
|
||||||
if (strcmp(modify->fix[i]->style,"pour") == 0) break;
|
|
||||||
if (i < modify->nfix) {
|
|
||||||
pour_type = ((FixPour *) modify->fix[i])->ntype;
|
|
||||||
pour_maxrad = ((FixPour *) modify->fix[i])->radius_max;
|
|
||||||
}
|
|
||||||
|
|
||||||
// check for FixDeposit and set deposit_type and deposit_maxrad
|
|
||||||
|
|
||||||
int deposit_type = 0;
|
|
||||||
double deposit_maxrad = 0.0;
|
|
||||||
for (i = 0; i < modify->nfix; i++)
|
|
||||||
if (strcmp(modify->fix[i]->style,"deposit") == 0) break;
|
|
||||||
if (i < modify->nfix) {
|
|
||||||
deposit_type = ((FixDeposit *) modify->fix[i])->ntype;
|
|
||||||
deposit_maxrad = 0.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
// check for FixRigid
|
|
||||||
|
|
||||||
fix_rigid = NULL;
|
fix_rigid = NULL;
|
||||||
for (i = 0; i < modify->nfix; i++)
|
for (i = 0; i < modify->nfix; i++)
|
||||||
if (modify->fix[i]->rigid_flag) break;
|
if (modify->fix[i]->rigid_flag) break;
|
||||||
if (i < modify->nfix) fix_rigid = modify->fix[i];
|
if (i < modify->nfix) fix_rigid = modify->fix[i];
|
||||||
|
|
||||||
|
// check for FixPour and FixDeposit so can extract particle radii
|
||||||
|
|
||||||
|
int ipour;
|
||||||
|
for (ipour = 0; ipour < modify->nfix; ipour++)
|
||||||
|
if (strcmp(modify->fix[ipour]->style,"pour") == 0) break;
|
||||||
|
if (ipour == modify->nfix) ipour = -1;
|
||||||
|
|
||||||
|
int idep;
|
||||||
|
for (idep = 0; idep < modify->nfix; idep++)
|
||||||
|
if (strcmp(modify->fix[idep]->style,"deposit") == 0) break;
|
||||||
|
if (idep == modify->nfix) idep = -1;
|
||||||
|
|
||||||
// set maxrad_dynamic and maxrad_frozen for each type
|
// set maxrad_dynamic and maxrad_frozen for each type
|
||||||
// include future FixPour and FixDeposit particles as dynamic
|
// include future FixPour and FixDeposit particles as dynamic
|
||||||
|
|
||||||
for (i = 1; i <= atom->ntypes; i++)
|
int itype;
|
||||||
|
for (i = 1; i <= atom->ntypes; i++) {
|
||||||
onerad_dynamic[i] = onerad_frozen[i] = 0.0;
|
onerad_dynamic[i] = onerad_frozen[i] = 0.0;
|
||||||
if (pour_type) onerad_dynamic[pour_type] = pour_maxrad;
|
if (ipour >= 0)
|
||||||
if (deposit_type) onerad_dynamic[deposit_type] =
|
onerad_dynamic[i] =
|
||||||
MAX(onerad_dynamic[deposit_type],deposit_maxrad);
|
*((double *) modify->fix[ipour]->extract("radius",itype));
|
||||||
|
if (idep >= 0)
|
||||||
|
onerad_dynamic[i] =
|
||||||
|
*((double *) modify->fix[idep]->extract("radius",itype));
|
||||||
|
}
|
||||||
|
|
||||||
double *radius = atom->radius;
|
double *radius = atom->radius;
|
||||||
int *mask = atom->mask;
|
int *mask = atom->mask;
|
||||||
|
|
|
@ -3019,6 +3019,11 @@ void *FixRigidSmall::extract(const char *str, int &dim)
|
||||||
return atom2body;
|
return atom2body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strcmp(str,"onemol") == 0) {
|
||||||
|
dim = 0;
|
||||||
|
return onemol;
|
||||||
|
}
|
||||||
|
|
||||||
// return vector of rigid body masses, for owned+ghost bodies
|
// return vector of rigid body masses, for owned+ghost bodies
|
||||||
// used by granular pair styles, indexed by atom2body
|
// used by granular pair styles, indexed by atom2body
|
||||||
|
|
||||||
|
|
|
@ -33,10 +33,6 @@ class FixRigidSmall : public Fix {
|
||||||
|
|
||||||
static FixRigidSmall *frsptr;
|
static FixRigidSmall *frsptr;
|
||||||
|
|
||||||
// molecules being added on-the-fly as rigid bodies
|
|
||||||
|
|
||||||
class Molecule *onemol;
|
|
||||||
|
|
||||||
FixRigidSmall(class LAMMPS *, int, char **);
|
FixRigidSmall(class LAMMPS *, int, char **);
|
||||||
virtual ~FixRigidSmall();
|
virtual ~FixRigidSmall();
|
||||||
virtual int setmask();
|
virtual int setmask();
|
||||||
|
@ -52,6 +48,8 @@ class FixRigidSmall : public Fix {
|
||||||
void grow_arrays(int);
|
void grow_arrays(int);
|
||||||
void copy_arrays(int, int, int);
|
void copy_arrays(int, int, int);
|
||||||
void set_arrays(int);
|
void set_arrays(int);
|
||||||
|
void set_molecule(int, int, double *, double *, double *);
|
||||||
|
|
||||||
int pack_exchange(int, double *);
|
int pack_exchange(int, double *);
|
||||||
int unpack_exchange(int, double *);
|
int unpack_exchange(int, double *);
|
||||||
int pack_comm(int, int *, double *, int, int *);
|
int pack_comm(int, int *, double *, int, int *);
|
||||||
|
@ -72,8 +70,6 @@ class FixRigidSmall : public Fix {
|
||||||
double compute_scalar();
|
double compute_scalar();
|
||||||
double memory_usage();
|
double memory_usage();
|
||||||
|
|
||||||
void set_molecule(int, int, double *, double *, double *);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int me,nprocs;
|
int me,nprocs;
|
||||||
double dtv,dtf,dtq;
|
double dtv,dtf,dtq;
|
||||||
|
@ -155,6 +151,10 @@ class FixRigidSmall : public Fix {
|
||||||
int maxlang; // max size of langextra
|
int maxlang; // max size of langextra
|
||||||
class RanMars *random; // RNG
|
class RanMars *random; // RNG
|
||||||
|
|
||||||
|
// molecules added on-the-fly as rigid bodies
|
||||||
|
|
||||||
|
class Molecule *onemol;
|
||||||
|
|
||||||
// class data used by ring communication callbacks
|
// class data used by ring communication callbacks
|
||||||
|
|
||||||
std::map<int,int> *hash;
|
std::map<int,int> *hash;
|
||||||
|
|
Loading…
Reference in New Issue