コード例 #1
0
ファイル: WMConstraints.cpp プロジェクト: digideskio/qmcpack
  void WMConstraints::addBasisGroup(xmlNodePtr cur) {
    string sourceOpt("e");
    string elementType("e");
    OhmmsAttributeSet aAttrib;
    aAttrib.add(sourceOpt,"source");
    aAttrib.add(elementType,"elementType");
    aAttrib.put(cur);

    RealType rcut(myGrid->rmax());
    map<string,BasisSetType*>::iterator it(myBasisSet.find(elementType));
    if(it == myBasisSet.end()) {
       BasisSetType* newBasis=new BasisSetType;
       cur=cur->children;
       while(cur != NULL) {
         string cname((const char*)(cur->name));
         if(cname == "parameter") {
           //BasisType* a=new BasisType(1.0,rcut);
           WMFunctor<RealType>* a = new WMFunctor<RealType>(1.0,rcut);
           a->put(cur);
           newBasis->push_back(a);
         }
         cur=cur->next;
       }
       //add a new BasisSet
       myBasisSet[elementType]=newBasis;
    }
  }
コード例 #2
0
  bool TwoBodyJastrowBuilder::put(xmlNodePtr cur) {

    string functionOpt("pade");
    string transformOpt("no");
    string sourceOpt("9NONE");
    string spinOpt("yes");
    OhmmsAttributeSet oAttrib;
    oAttrib.add(functionOpt,"function");
    oAttrib.add(transformOpt,"transform");
    oAttrib.add(sourceOpt,"source");
    oAttrib.add(spinOpt,"spin");
    oAttrib.put(cur);

    IgnoreSpin = (spinOpt == "no");

    if(sourceOpt[0] != '9') {
      map<string,ParticleSet*>::iterator pa_it(ptclPool.find(sourceOpt));
      if(pa_it != ptclPool.end()) {
        sourcePtcl=(*pa_it).second;
      }
    }

    bool success=false;
    OrbitalConstraintsBase* control=0;

    //@todo automatically set it to yes with PBC
    bool useSpline= (transformOpt == "yes");

    app_log() << "  TwoBodyJastrowBuilder for " << functionOpt << endl;

    if(functionOpt == "pade") {
      //control = new PadeConstraints(IgnoreSpin);
      //Transform is ignored. Cutoff function is not too good
      if(useSpline) {
        control = new PadeOnGridConstraints(IgnoreSpin);
      } else {
        control = new PadeConstraints(IgnoreSpin);
      }
    } else if(functionOpt == "scaledpade") {
      control = new ScaledPadeConstraints(IgnoreSpin);
    } else if(functionOpt == "rpa") {
      if(useSpline) {
        control = new RPAPBCConstraints(IgnoreSpin);
      } else {
        control = new RPAConstraints(IgnoreSpin);
      }
    } else if(functionOpt == "WM") {
      control = new WMConstraints(IgnoreSpin);
    }

     if(control==0) { //try generic JAABuilder and NJAABuilder
      OrbitalBuilderBase* jbuilder=0;
      if(useSpline) {
        jbuilder = new NJAABuilder(targetPtcl,targetPsi);
      } else {
        jbuilder = new JAABuilder(targetPtcl,targetPsi);
      }
      return jbuilder->put(cur);
    }

    success=control->put(cur);
    if(!control->put(cur)) {
      delete control;
      return false;
    }

    ComboOrbital* jcombo=new ComboOrbital(control);

    control->addTwoBodyPart(targetPtcl, jcombo);

    if(sourcePtcl) { // add one-body term using Zeff and e-e B
      OrbitalBase* j1=control->createOneBody(targetPtcl,*sourcePtcl);
      if(j1) jcombo->Psi.push_back(j1);
    }

    control->addOptimizables(targetPsi.VarList);
    targetPsi.addOrbital(jcombo);
    return success;
  }
コード例 #3
0
ファイル: TwoBodyJastrowBuilder.cpp プロジェクト: jyamu/qmc
bool TwoBodyJastrowBuilder::put(xmlNodePtr cur)
{
  myNode=cur;
  string functionOpt("pade");
  string transformOpt("no");
  string sourceOpt(targetPtcl.getName());
  string spinOpt("yes");
  OhmmsAttributeSet oAttrib;
  oAttrib.add(functionOpt,"function");
  oAttrib.add(transformOpt,"transform");
  oAttrib.add(sourceOpt,"source");
  oAttrib.add(spinOpt,"spin");
  oAttrib.put(cur);
  bool IgnoreSpin = (spinOpt == "no");
  bool success=false;
  OrbitalConstraintsBase* control=0;
  //@todo automatically set it to yes with PBC
  bool useSpline= (transformOpt == "yes");
  app_log() << "  TwoBodyJastrowBuilder for " << functionOpt << endl;
  if(functionOpt == "pade")
  {
    app_log() << "    Using analytic Pade Jastrow Functor " <<endl;
    control = new PadeConstraints(targetPtcl,targetPsi,IgnoreSpin);
  }
  else
    if(functionOpt == "scaledpade")
    {
      app_log() << "    Using analytic Scaled Pade Jastrow Functor " <<endl;
      control = new ScaledPadeConstraints(targetPtcl,targetPsi,IgnoreSpin);
    }
    else
      if(functionOpt == "rpa")
      {
        if(useSpline)
          control = new RPAPBCConstraints(targetPtcl,targetPsi,IgnoreSpin);
        else
          control = new RPAConstraints(targetPtcl,targetPsi,IgnoreSpin);
      }
      else //known analytic function
      {
        OrbitalBuilderBase* jbuilder=0;
        jbuilder = new JAABuilder(targetPtcl,targetPsi);
        Children.push_back(jbuilder);
        return jbuilder->put(cur);
      }
  success=control->put(cur);
  if(!success)
  {
    delete control;
    return false;
  }
  ComboOrbital* jcombo=new ComboOrbital(control);
  control->addTwoBodyPart(jcombo);
  if(sourceOpt != targetPtcl.getName())
  {
    app_log() << "    Adding one-body Jastrow function dependent upon two-body " << functionOpt << endl;
    map<string,ParticleSet*>::iterator pa_it(ptclPool.find(sourceOpt));
    if(pa_it == ptclPool.end())
    {
      return false;
    }
    ParticleSet* sourcePtcl= sourcePtcl=(*pa_it).second;
    OrbitalBase* j1=control->createOneBody(*sourcePtcl);
    if(j1)
      jcombo->Psi.push_back(j1);
  }
  control->addOptimizables(targetPsi.VarList);
  targetPsi.addOrbital(jcombo);
  return success;
}