Merge pull request #256 from ye-luo/guard-too-large-rcut

Print error when Rcut > WS radius in Jastrow.
This commit is contained in:
Paul R. C. Kent 2017-06-08 09:58:44 -04:00 committed by GitHub
commit 7b9a9753ca
3 changed files with 29 additions and 45 deletions

View File

@ -369,17 +369,19 @@ struct BsplineFunctor: public OptimizableFunctorBase
rAttrib.add(radius, "cutoff"); rAttrib.add(radius, "cutoff");
rAttrib.put(cur); rAttrib.put(cur);
if (radius < 0.0) if (radius < 0.0)
if(periodic) if (periodic)
{ app_log() << " Jastrow cutoff unspecified. Setting to Wigner-Seitz radius = " << cutoff_radius << ".\n";
app_log() << " Jastrow cutoff unspecified. Setting to Wigner-Seitz radius = "
<< cutoff_radius << ".\n";
}
else else
{ {
APP_ABORT(" Jastrow cutoff unspecified. Cutoff must be given when not using periodic boundary conditions"); APP_ABORT(" Jastrow cutoff unspecified. Cutoff must be given when using open boundary conditions");
} }
else else
cutoff_radius = radius; if (periodic && radius > cutoff_radius)
{
APP_ABORT(" The Jastrow cutoff specified should not be larger than Wigner-Seitz radius.");
}
else
cutoff_radius = radius;
if (NumParams == 0) if (NumParams == 0)
{ {
PRE.error("You must specify a positive number of parameters for the Bspline jastrow function.",true); PRE.error("You must specify a positive number of parameters for the Bspline jastrow function.",true);

View File

@ -73,7 +73,7 @@ bool BsplineJastrowBuilder::createOneBodyJastrow(xmlNodePtr cur)
BsplineFunctor<RealType> *functor = new BsplineFunctor<RealType>(cusp); BsplineFunctor<RealType> *functor = new BsplineFunctor<RealType>(cusp);
functor->elementType = speciesA; functor->elementType = speciesA;
int ig = sSet.findSpecies (speciesA); int ig = sSet.findSpecies (speciesA);
functor->periodic = sourcePtcl->Lattice.SuperCellEnum == SUPERCELL_BULK; functor->periodic = sourcePtcl->Lattice.SuperCellEnum != SUPERCELL_OPEN;
functor->cutoff_radius = sourcePtcl->Lattice.WignerSeitzRadius; functor->cutoff_radius = sourcePtcl->Lattice.WignerSeitzRadius;
int jg=-1; int jg=-1;
if(speciesB.size()) if(speciesB.size())
@ -82,21 +82,6 @@ bool BsplineJastrowBuilder::createOneBodyJastrow(xmlNodePtr cur)
{ {
//ignore //ignore
functor->put (kids); functor->put (kids);
if (functor->cutoff_radius < 1.0e-6)
{
if(sourcePtcl->Lattice.SuperCellEnum == SUPERCELL_BULK)
{
app_log() << " BsplineFunction rcut is currently zero.\n"
<< " Setting to Wigner-Seitz radius = "
<< sourcePtcl->Lattice.WignerSeitzRadius << std::endl;
functor->cutoff_radius = sourcePtcl->Lattice.WignerSeitzRadius;
functor->reset();
}
else
{
APP_ABORT("BsplineJastrowBuilder::put rcut must be provided for one body jastrow since boundary conditions are not periodic");
}
}
J1->addFunc (ig,functor,jg); J1->addFunc (ig,functor,jg);
success = true; success = true;
dJ1->addFunc(ig,functor,jg); dJ1->addFunc(ig,functor,jg);
@ -282,25 +267,10 @@ bool BsplineJastrowBuilder::put(xmlNodePtr cur)
} }
app_log() << " BsplineJastrowBuilder adds a functor with cusp = " << cusp << std::endl; app_log() << " BsplineJastrowBuilder adds a functor with cusp = " << cusp << std::endl;
RadFuncType *functor = new RadFuncType(cusp); RadFuncType *functor = new RadFuncType(cusp);
functor->periodic = targetPtcl.Lattice.SuperCellEnum == SUPERCELL_BULK; functor->periodic = targetPtcl.Lattice.SuperCellEnum != SUPERCELL_OPEN;
functor->cutoff_radius = targetPtcl.Lattice.WignerSeitzRadius; functor->cutoff_radius = targetPtcl.Lattice.WignerSeitzRadius;
bool initialized_p=functor->put(kids); bool initialized_p=functor->put(kids);
functor->elementType=pairType; functor->elementType=pairType;
if (functor->cutoff_radius < 1.0e-6)
{
if(targetPtcl.Lattice.SuperCellEnum == SUPERCELL_BULK)
{
app_log() << " BsplineFunction rcut is currently zero.\n"
<< " Setting to Wigner-Seitz radius = "
<< targetPtcl.Lattice.WignerSeitzRadius << std::endl;
functor->cutoff_radius = targetPtcl.Lattice.WignerSeitzRadius;
functor->reset();
}
else
{
APP_ABORT("BsplineJastrowBuilder::put rcut must be provided for two body jastrow since boundary conditions are not periodic");
}
}
//RPA INIT //RPA INIT
if(!initialized_p && init_mode =="rpa") if(!initialized_p && init_mode =="rpa")
{ {

View File

@ -61,14 +61,26 @@ bool eeI_JastrowBuilder::putkids (xmlNodePtr kids, J3type &J3)
int eNum1 = eSet.findSpecies (eSpecies1); int eNum1 = eSet.findSpecies (eSpecies1);
int eNum2 = eSet.findSpecies (eSpecies2); int eNum2 = eSet.findSpecies (eSpecies2);
functor->put (kids); functor->put (kids);
if (functor->cutoff_radius < 1.0e-6) if (sourcePtcl->Lattice.SuperCellEnum != SUPERCELL_OPEN)
{ {
app_log() << " eeI functor rcut is currently zero.\n" if (functor->cutoff_radius > sourcePtcl->Lattice.WignerSeitzRadius)
<< " Setting to Wigner-Seitz radius = " {
<< sourcePtcl->Lattice.WignerSeitzRadius << std::endl; APP_ABORT(" The eeI Jastrow cutoff specified should not be larger than Wigner-Seitz radius.");
functor->cutoff_radius = sourcePtcl->Lattice.WignerSeitzRadius; }
functor->reset(); if (functor->cutoff_radius < 1.0e-6)
{
app_log() << " eeI functor rcut is currently zero.\n"
<< " Setting to Wigner-Seitz radius = "
<< sourcePtcl->Lattice.WignerSeitzRadius << std::endl;
functor->cutoff_radius = sourcePtcl->Lattice.WignerSeitzRadius;
functor->reset();
}
} }
else
if (functor->cutoff_radius < 1.0e-6)
{
APP_ABORT(" eeI Jastrow cutoff unspecified. Cutoff must be given when using open boundary conditions");
}
J3.addFunc(iNum, eNum1, eNum2, functor); J3.addFunc(iNum, eNum1, eNum2, functor);
} }
kids = kids->next; kids = kids->next;