Esempio n. 1
0
void
Bead_ParticleSet::CopyToBead(Bead& b,vector<TrialWaveFunction*> &Psi)
{
  assert(R.size()==b.R.size());
  assert(b.Drift.size()==Drift.size());
  assert(BeadSignWgt.size()==b.BeadSignWgt.size());
  assert(Gradients.size()==b.Gradients.size());
  assert(Laplacians.size()==b.Laplacians.size());
  assert(b.Action.size()==Action.size());
  
  copy(BeadSignWgt.begin(),BeadSignWgt.end(),b.BeadSignWgt.begin());
  for(int i=0; i<Gradients.size(); i++) *(b.Gradients[i]) = *Gradients[i];
  for(int i=0; i<Laplacians.size(); i++) *(b.Laplacians[i])=*Laplacians[i];
  for(int i=0; i<DriftVectors.size(); i++) *(b.DriftVectors[i]) = *DriftVectors[i];
  b.TransProb[0]=TransProb[0];
  b.TransProb[1]=TransProb[1];
  
    for (int ipsi=0;ipsi<nPsi;ipsi++)
      for (int i=0;i<3;i++)
	b.Action(ipsi,i)=Action(ipsi,i);
    //    b.Action=Action;
    b.Drift=Drift;
    b.R=R;
    b.Properties=Properties;
    b.Tau_eff = Tau_eff;
    b.ScaleDrift = ScaleDrift;

}
Esempio n. 2
0
void
 Bead_ParticleSet::CopyFromBead(Bead& b,vector<TrialWaveFunction*> &Psi)
 {
   
  assert(R.size()==b.R.size());
  assert(BeadSignWgt.size()==b.BeadSignWgt.size());
  assert(Gradients.size()==b.Gradients.size());
  assert(Laplacians.size()==b.Laplacians.size());
  assert(b.Action.size()==Action.size());
  assert(b.Drift.size()==Drift.size());
  R=b.R;
  copy(b.BeadSignWgt.begin(),b.BeadSignWgt.end(),BeadSignWgt.begin());
  for(int i=0; i<b.Gradients.size(); i++) *Gradients[i] = *(b.Gradients[i]);
  for(int i=0; i<b.Laplacians.size(); i++) *Laplacians[i] = *(b.Laplacians[i]);
  for(int i=0; i<b.DriftVectors.size(); i++) *DriftVectors[i] = *(b.DriftVectors[i]);
  TransProb[0]=b.TransProb[0];
  TransProb[1]=b.TransProb[1];
    for (int ipsi=0;ipsi<nPsi;ipsi++)
      for (int i=0;i<3;i++)
	Action(ipsi,i)=b.Action(ipsi,i);

    //  Action=b.Action;
  Drift=b.Drift;
  Tau_eff=b.Tau_eff;
  ScaleDrift = b.ScaleDrift;
  Properties=b.Properties;

 }
Esempio n. 3
0
void
Face::putBead(const Bead& bead)
{
  NS_LOG_INFO (">> Bead: " << bead.getName());

  shared_ptr<const Bead> beadPtr;
  try {
    beadPtr = bead.shared_from_this();
  }
  catch (const bad_weak_ptr& e) {
    NS_LOG_INFO("Face::put WARNING: the supplied Data should be created using make_shared<Data>()");
    beadPtr = make_shared<Bead>(bead);
  }

  m_impl->m_scheduler.scheduleEvent(time::seconds(0), [=] {
      m_impl->asyncPutBead(beadPtr);
    });
}
Esempio n. 4
0
void
AppFace::sendBead(const Bead& bead)
{
  NS_LOG_FUNCTION(this << &bead);

  this->emitSignal(onSendBead, bead);

  // to decouple callbacks
  Simulator::ScheduleNow(&App::OnBead, m_app, bead.shared_from_this());
}
int main(int argc, char** argv){

	
  double T;
  int R;
  double dt;
  int steps;

  double J;
  double Q;
  double Q2;
  
  double phi0;
  double tau0;
  double omega0;
  
  bool fail = 0;


  /* ----------------------------------------
  /  Robust variable sized input (start)
  /---------------------------------------- */
  try{

  if (argc < 2 || 
      sscanf(argv[1],"%d",&steps) != 1){
    fail = 1;
  }
  if (argc >= 3 && !fail){
    if (sscanf(argv[2], "%lf", &dt) != 1){
      fail = 1;
    }
  }


  else dt = .01;
  if (argc >= 4 && !fail){
    if (sscanf(argv[3], "%lf", &J) != 1){
      fail = 1;
    }
  }
  else J = 1.0;
  if (argc >= 5 && !fail){
    if (sscanf(argv[4], "%lf", &Q) != 1){
      fail = 1;
    }
  }
  else Q = 12.5;
  if (argc >= 6 && !fail){
    if (sscanf(argv[5], "%lf", &Q2)!= 1){
      fail = 1;
    }
  }
  else Q2 = 20.0;



  if (argc >= 7 && !fail){
    if (sscanf(argv[6], "%lf", &T) != 1){
      fail = 1;
    }
  }
  else T = 1.0;
  if (argc >= 8 && !fail){
    if (sscanf(argv[7], "%d", &R)  != 1){
      fail = 1;
    }
  }
  else R = 32;


  if (argc >= 9 && !fail){
    if (sscanf(argv[8], "%lf", &phi0)  != 1){
      fail = 1;
    }
  }
  else phi0 = .001;
  if (argc >= 10 && !fail){
    if (sscanf(argv[9], "%lf", &tau0)  != 1){
      fail = 1;
    }
  }
  else tau0 = .001;
  if (argc >= 11&& !fail){
    if (sscanf(argv[10], "%lf", &omega0)  != 1){
      fail = 1;
    }
  }
  else omega0 = .001;

  if (fail){
    cout << printf("Use the following format: ./beads.o steps (dt) (J) (Q) (Q2) (T) (R) (phi0) (tau0) (omega0)\n **Note: the arguments in parentheses are optional.\n");
    exit(1);
  }
    
  /* ----------------------------------------
  /  Robust variable sized input (end)
  /---------------------------------------- */




  Bead b (phi0, tau0, omega0, dt);

  b.changeTrackSet(T,R,J,Q,Q2);

  for (int i = 0 ; i < steps ; i++){
    b.heun_step(T,R,J,Q,Q2);
  }

  b.cout_phase(b.decide_phase());
  return 0;

}