bool singleRPAJastrowBuilder::put(xmlNodePtr cur, int addOrbital)
    {
    MyName="Jep";
    string rpafunc="RPA";
    OhmmsAttributeSet a;
    a.add(MyName,"name");
    a.add(rpafunc,"function");
    a.put(cur);

    ParameterSet params;
    RealType Rs(-1.0);
    RealType Kc(-1.0);
    params.add(Rs,"rs","double");
    params.add(Kc,"kc","double");

    params.put(cur);
        
    if(Rs<0) {
        Rs=tlen;
    }

    if(Kc<0){ 
      Kc = 1e-6 ;
    };


    if (rpafunc=="RPA"){ 
      myHandler= new LRRPAHandlerTemp<EPRPABreakup<RealType>,LPQHIBasis>(targetPtcl,Kc);
      app_log()<<"  using e-p RPA"<<endl;
    }
    else if (rpafunc=="dRPA") {
      myHandler= new LRRPAHandlerTemp<derivEPRPABreakup<RealType>,LPQHIBasis>(targetPtcl,Kc);
      app_log()<<"  using e-p derivRPA"<<endl;
    }
    myHandler->Breakup(targetPtcl,Rs);
    
//     app_log() << "  Maximum K shell " << myHandler->MaxKshell << endl;
//     app_log() << "  Number of k vectors " << myHandler->Fk.size() << endl;
    
    
    //Add short range part
    Rcut = myHandler->get_rc()-0.1;
    GridType* myGrid = new GridType;
    int npts=static_cast<int>(Rcut/0.01)+1;
    myGrid->set(0,Rcut,npts);

      //create the numerical functor
    nfunc = new FuncType;
    SRA = new ShortRangePartAdapter<RealType>(myHandler);
    SRA->setRmax(Rcut);
    nfunc->initialize(SRA, myGrid);
    J1s = new JneType (*sourcePtcl,targetPtcl);
    for(int ig=0; ig<ng; ig++) {
      J1s->addFunc(ig,nfunc);
    }

    app_log()<<" Only Short range part of E-I RPA is implemented"<<endl;
    if (addOrbital) targetPsi.addOrbital(J1s,MyName);
    return true;
  }
Пример #2
0
/** main functio to optimize multiple contracted S orbitals
 */
  void GTO2Slater::optimize() {

    //construct one-dim grid
    double ri = 1e-5;
    double rf = 10.0;
    int npts = 101;
    string gridType("log");
    if(gridPtr) {
      OhmmsAttributeSet radAttrib;
      radAttrib.add(gridType,"type"); 
      radAttrib.add(npts,"npts"); 
      radAttrib.add(ri,"ri"); radAttrib.add(rf,"rf");
      radAttrib.put(gridPtr);
    }
    myGrid.set(ri,rf,npts);

    //create a numerical grid funtor
    typedef OneDimCubicSpline<double> RadialOrbitalType;
    RadialOrbitalType radorb(&myGrid);

    int L= 0;
    //Loop over all the constracted S orbitals
    map<string,xmlNodePtr>::iterator it(sPtr.begin()),it_end(sPtr.end());
    while(it != it_end) {

      //create contracted gaussian
      GTOType gset(L,Normalized); 
      //read the radfunc's of basisGroup
      gset.putBasisGroup((*it).second);

      //convert to a radial functor
      Transform2GridFunctor<GTOType,RadialOrbitalType> transform(gset, radorb);
      transform.generate(myGrid.rmin(),myGrid.rmax(),myGrid.size());

      //optimize it with the radial functor
      Any2Slater gto2slater(radorb);
      gto2slater.optimize();
      ++it;
    }
    sPtr.clear();
  }