Commit a69a99a9 authored by cjknight's avatar cjknight Committed by GitHub
Browse files

added triclinic support

parent 4a8146ad
Loading
Loading
Loading
Loading
+60 −18
Original line number Diff line number Diff line
@@ -356,6 +356,15 @@ void Replicate::command(int narg, char **arg)
    // bounding box of original unwrapped system

    double _orig_lo[3], _orig_hi[3];
    if(triclinic) {
      _orig_lo[0] = domain->boxlo[0] + _imagelo[0] * old_xprd + _imagelo[1] * old_xy + _imagelo[2] * old_xz;
      _orig_lo[1] = domain->boxlo[1] + _imagelo[1] * old_yprd + _imagelo[2] * old_yz;
      _orig_lo[2] = domain->boxlo[2] + _imagelo[2] * old_zprd;
      
      _orig_hi[0] = domain->boxlo[0] + (_imagehi[0]+1) * old_xprd + (_imagehi[1]+1) * old_xy + (_imagehi[2]+1) * old_xz;
      _orig_hi[1] = domain->boxlo[1] + (_imagehi[1]+1) * old_yprd + (_imagehi[2]+1) * old_yz;
      _orig_hi[2] = domain->boxlo[2] + (_imagehi[2]+1) * old_zprd;
    } else {
      _orig_lo[0] = domain->boxlo[0] + _imagelo[0] * old_xprd;
      _orig_lo[1] = domain->boxlo[1] + _imagelo[1] * old_yprd;
      _orig_lo[2] = domain->boxlo[2] + _imagelo[2] * old_zprd;
@@ -363,6 +372,7 @@ void Replicate::command(int narg, char **arg)
      _orig_hi[0] = domain->boxlo[0] + (_imagehi[0]+1) * old_xprd;
      _orig_hi[1] = domain->boxlo[1] + (_imagehi[1]+1) * old_yprd;
      _orig_hi[2] = domain->boxlo[2] + (_imagehi[2]+1) * old_zprd;
    }

    double _lo[3], _hi[3];

@@ -374,6 +384,16 @@ void Replicate::command(int narg, char **arg)

          // domain->remap() overwrites coordinates, so always recompute here

	  if(triclinic) {
	    _lo[0] = _orig_lo[0] + ix * old_xprd + iy * old_xy + iz * old_xz;
	    _hi[0] = _orig_hi[0] + ix * old_xprd + iy * old_xy + iz * old_xz;
	    
	    _lo[1] = _orig_lo[1] + iy * old_yprd + iz * old_yz;
	    _hi[1] = _orig_hi[1] + iy * old_yprd + iz * old_yz;
	    
	    _lo[2] = _orig_lo[2] + iz * old_zprd;
	    _hi[2] = _orig_hi[2] + iz * old_zprd;
	  } else {
	    _lo[0] = _orig_lo[0] + ix * old_xprd;
	    _hi[0] = _orig_hi[0] + ix * old_xprd;
	    
@@ -382,6 +402,7 @@ void Replicate::command(int narg, char **arg)
	    
	    _lo[2] = _orig_lo[2] + iz * old_zprd;
	    _hi[2] = _orig_hi[2] + iz * old_zprd;
	  }

          // test if bounding box of shifted replica overlaps sub-domain of proc
          // if not, then skip testing atoms
@@ -389,9 +410,20 @@ void Replicate::command(int narg, char **arg)
          int xoverlap = 1;
          int yoverlap = 1;
          int zoverlap = 1;
	  if (triclinic) {
	    double _llo[3];
	    domain->x2lamda(_lo,_llo);
	    double _lhi[3];
	    domain->x2lamda(_hi,_lhi);

	    if( _llo[0] > (subhi[0] - EPSILON) || _lhi[0] < (sublo[0] + EPSILON) ) xoverlap = 0;
	    if( _llo[1] > (subhi[1] - EPSILON) || _lhi[1] < (sublo[1] + EPSILON) ) yoverlap = 0;
	    if( _llo[2] > (subhi[2] - EPSILON) || _lhi[2] < (sublo[2] + EPSILON) ) zoverlap = 0;
	  } else {
	    if( _lo[0] > (subhi[0] - EPSILON) || _hi[0] < (sublo[0] + EPSILON) ) xoverlap = 0;
	    if( _lo[1] > (subhi[1] - EPSILON) || _hi[1] < (sublo[1] + EPSILON) ) yoverlap = 0;
	    if( _lo[2] > (subhi[2] - EPSILON) || _hi[2] < (sublo[2] + EPSILON) ) zoverlap = 0;
	  }

          int overlap = 0;
          if(xoverlap && yoverlap && zoverlap) overlap = 1;
@@ -416,6 +448,16 @@ void Replicate::command(int narg, char **arg)
            int yboxhi = (imagehi >> IMGBITS & IMGMASK) - IMGMAX;
            int zboxhi = (imagehi >> IMG2BITS) - IMGMAX;

	    if(triclinic) {
	      double _llo[3];
	      _llo[0] = _lo[0]; _llo[1] = _lo[1];  _llo[2] = _lo[2];
	      domain->x2lamda(_llo,_lo);

	      double _lhi[3];
	      _lhi[0] = _hi[0]; _lhi[1] = _hi[1];  _lhi[2] = _hi[2];
	      domain->x2lamda(_lhi,_hi);
	    }

            // test all fragments for any overlap; ok to include false positives

            int _xoverlap1 = 0;