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 JastrowBuilder::addOneBody(xmlNodePtr cur) { app_log() << " JastrowBuilder::addOneBody "<< endl; if(sourceOpt == targetPtcl.getName()) { app_warning() << " One-Body Jastrow Function needs a source different from " << targetPtcl.getName() << endl; app_warning() << " Exit JastrowBuilder::addOneBody." << endl; return false; } map<string,ParticleSet*>::iterator pa_it(ptclPool.find(sourceOpt)); if(pa_it == ptclPool.end()) { app_warning() << " JastrowBuilder::addOneBody failed. " << sourceOpt << " does not exist" << endl; return false; } ParticleSet* sourcePtcl= (*pa_it).second; if(funcOpt == "any" || funcOpt == "poly") { OrbitalConstraintsBase* control=0; if(funcOpt == "any") control = new AnyConstraints(targetPtcl,targetPsi); else control = new PolyConstraints(targetPtcl,targetPsi,true); control->put(cur); OrbitalBase* j=control->createOneBody(*sourcePtcl); if(j) { control->addOptimizables(targetPsi.VarList); targetPsi.addOrbital(j); Children.push_back(control); return true; } else { delete control; return false; } } else { app_log() << "\n Using JABBuilder for one-body jatrow with analytic functions" << endl; OrbitalBuilderBase* jb = new JABBuilder(targetPtcl,targetPsi,ptclPool); Children.push_back(jb); return jb->put(cur); } }
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; }