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; }
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; }