bool WaveFunctionFactory::build(xmlNodePtr cur, bool buildtree) {

    if(cur == NULL) return false;

    bool attach2Node=false;
    if(buildtree) {
      if(myNode == NULL) {
        myNode = xmlCopyNode(cur,1);
      } else {
        attach2Node=true;
      }
    }


    if(targetPsi==0) {//allocate targetPsi and set the name
      targetPsi  = new TrialWaveFunction;
      targetPsi->setName(myName);
      app_log() << "  Creating a trial wavefunction " << myName << endl;
    }

    cur = cur->children;
    bool success=true;
    while(cur != NULL) {
      string cname((const char*)(cur->name));
      if (cname == OrbitalBuilderBase::detset_tag) 
      {
        success = addFermionTerm(cur);
      } 
      else if (cname ==  OrbitalBuilderBase::jastrow_tag) 
      {
        OrbitalBuilderBase *jbuilder = new JastrowBuilder(*targetPtcl,*targetPsi,ptclPool);
        success = jbuilder->put(cur);
        addNode(jbuilder,cur);
      }
      else if(cname == "agp") 
      {
#if defined(QMC_COMPLEX)
        app_error() << "  AGPDeterminant cannot be used with QMC_COMPLEX=1" << endl;
        return false;
#else
        AGPDeterminantBuilder* agpbuilder = new AGPDeterminantBuilder(*targetPtcl,*targetPsi,ptclPool);
        success = agpbuilder->put(cur);
        addNode(agpbuilder,cur);
#endif
      } 
      if(attach2Node) xmlAddChild(myNode,xmlCopyNode(cur,1));
      cur = cur->next;
    }

    if(OrbitalBuilderBase::print_level>0)
    {
      app_log() << "  List of optimizable variables " << endl;
      targetPsi->VarList.print(app_log());

      //set to zero so that nothing is written again
      OrbitalBuilderBase::print_level=0;
    }

    return success;
  }
Example #2
0
bool WaveFunctionFactory::build(xmlNodePtr cur, bool buildtree) {

    ReportEngine PRE(ClassName,"build");

    if(cur == NULL) return false;

    bool attach2Node=false;
    if(buildtree) {
        if(myNode == NULL) {
            myNode = xmlCopyNode(cur,1);
        } else {
            attach2Node=true;
        }
    }

    if(targetPsi==0) //allocate targetPsi and set the name
    {
        targetPsi  = new TrialWaveFunction(myComm);
        targetPsi->setName(myName);
    }

    cur = cur->children;
    bool success=true;
    while(cur != NULL)
    {
        string cname((const char*)(cur->name));
        if (cname == OrbitalBuilderBase::detset_tag)
        {
            success = addFermionTerm(cur);
        }
        else if (cname ==  OrbitalBuilderBase::jastrow_tag)
        {
            OrbitalBuilderBase *jbuilder = new JastrowBuilder(*targetPtcl,*targetPsi,ptclPool);
            jbuilder->setReportLevel(ReportLevel);
            success = jbuilder->put(cur);
            addNode(jbuilder,cur);
        }
#if OHMMS_DIM==3
        else if(cname == "agp")
        {
#if defined(QMC_COMPLEX)
            sendError("AGPDeterminant cannot be used with QMC_COMPLEX=1");
            return false;
#else
            AGPDeterminantBuilder* agpbuilder = new AGPDeterminantBuilder(*targetPtcl,*targetPsi,ptclPool);
            success = agpbuilder->put(cur);
            addNode(agpbuilder,cur);
#endif
        }
#endif
        if(attach2Node) xmlAddChild(myNode,xmlCopyNode(cur,1));
        cur = cur->next;
    }

    //{
    //  ReportEngine PREA("TrialWaveFunction","print");
    //  targetPsi->VarList.print(app_log());
    //}

    return success;
}