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