41 2, 2, 2, 2, 2, 2, 2, 10,
42 10, 10, 10, 10, 10, 10, 10, 18,
43 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
44 28, 28, 28, 28, 28, 36,
45 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
46 46, 46, 46, 46, 46, 54,
47 60, 60, 60, 60, 60, 60, 60, 60, 60,
48 60, 60, 60, 60, 60, 60, 60, 60, 60,
49 60, 60, 60, 60, 60, 60, 60, 60, 60,
50 78, 78, 78, 78, 78, 78,
54 : multideterminant(false),
57 SpinRestricted(false),
63 orderByExcitation(false),
65 addJastrow3Body(false),
96 basisType(
"Gaussian"),
101 angular_type(
"spherical"),
107 IonSystem(simulation_cell),
119 : multideterminant(false),
122 SpinRestricted(false),
128 orderByExcitation(false),
130 addJastrow3Body(false),
161 basisType(
"Gaussian"),
162 basisName(
"generic"),
166 angular_type(
"spherical"),
172 IonSystem(simulation_cell),
185 std::cout <<
"Index of ion charge " <<
IonChargeIndex << std::endl;
303 for (
int i = 4, l = 2; i <
gShellID.size(); ++i, ++l)
323 std::multimap<value_type, int>
e;
324 for (
int i = 0; i <
numMO; i++)
326 for (
int i = 0; i <
numMO; i++)
327 e.insert(std::pair<value_type, int>(
EigVal_beta[i], 1));
329 std::multimap<value_type, int>::iterator it(
e.begin());
330 LOGMSG(
"Unrestricted HF. Sorted eigen values")
333 LOGMSG(
n <<
" " << (*it).first <<
" " << (*it).second)
356 std::vector<int> nel(2);
368 std::vector<int> nel(1);
377 xmlNodePtr cur = xmlNewNode(NULL, (
const xmlChar*)
"particleset");
378 xmlNewProp(cur, (
const xmlChar*)
"name", (
const xmlChar*)els.
getName().c_str());
379 xmlNewProp(cur, (
const xmlChar*)
"random", (
const xmlChar*)
"yes");
380 xmlNewProp(cur, (
const xmlChar*)
"randomsrc", (
const xmlChar*)ion_tag.c_str());
382 xmlNewProp(cur, (
const xmlChar*)
"spinor", (
const xmlChar*)
"yes");
387 std::ostringstream ng;
389 xmlNodePtr g = xmlNewNode(NULL, (
const xmlChar*)
"group");
390 xmlNewProp(g, (
const xmlChar*)
"name", (
const xmlChar*)
"u");
391 xmlNewProp(g, (
const xmlChar*)
"size", (
const xmlChar*)ng.str().c_str());
392 xmlNodePtr p = xmlNewTextChild(g, NULL, (
const xmlChar*)
"parameter", (
const xmlChar*)
"-1");
393 xmlNewProp(p, (
const xmlChar*)
"name", (
const xmlChar*)
"charge");
399 std::ostringstream ng;
401 xmlNodePtr g = xmlNewNode(NULL, (
const xmlChar*)
"group");
402 xmlNewProp(g, (
const xmlChar*)
"name", (
const xmlChar*)
"d");
403 xmlNewProp(g, (
const xmlChar*)
"size", (
const xmlChar*)ng.str().c_str());
404 xmlNodePtr p = xmlNewTextChild(g, NULL, (
const xmlChar*)
"parameter", (
const xmlChar*)
"-1");
405 xmlNewProp(p, (
const xmlChar*)
"name", (
const xmlChar*)
"charge");
414 xmlNodePtr cur = xmlNewNode(NULL, (
const xmlChar*)
"simulationcell");
415 std::ostringstream vec;
416 vec.setf(std::ios::scientific, std::ios::floatfield);
417 vec.setf(std::ios::right, std::ios::adjustfield);
420 vec << std::setw(22) <<
X[0] << std::setw(22) <<
X[1] << std::setw(22) <<
X[2] << std::setw(22) <<
"\n";
421 vec << std::setw(22) <<
Y[0] << std::setw(22) <<
Y[1] << std::setw(22) <<
Y[2] << std::setw(22) <<
"\n";
422 vec << std::setw(22) <<
Z[0] << std::setw(22) <<
Z[1] << std::setw(22) <<
Z[2] << std::setw(22) <<
"\n";
424 xmlNodePtr LatVec = xmlNewTextChild(cur, NULL, (
const xmlChar*)
"parameter", (
const xmlChar*)vec.str().c_str());
425 xmlNewProp(LatVec, (
const xmlChar*)
"name", (
const xmlChar*)
"lattice");
426 xmlAddChild(cur, LatVec);
428 xmlNodePtr bconds = xmlNewTextChild(cur, NULL, (
const xmlChar*)
"parameter", (
const xmlChar*)
"p p p");
429 xmlNewProp(bconds, (
const xmlChar*)
"name", (
const xmlChar*)
"bconds");
430 xmlAddChild(cur, bconds);
432 xmlNodePtr LRDim = xmlNewTextChild(cur, NULL, (
const xmlChar*)
"parameter", (
const xmlChar*)
"15");
433 xmlNewProp(LRDim, (
const xmlChar*)
"name", (
const xmlChar*)
"LR_dim_cutoff");
434 xmlAddChild(cur, LRDim);
440 const double ang_to_bohr = 1.889725989;
465 hout.
push(
"atoms",
true);
468 hout.
write(nbspecies,
"number_of_species");
470 std::vector<int> speciesID;
480 hout.
write(speciesID,
"species_ids");
481 hout.
write(Position,
"positions");
483 for (
auto i = 0; i < nbspecies; i++)
485 std::ostringstream SpecieID;
486 SpecieID <<
"species_" << i;
487 hout.
push(SpecieID.str().c_str(),
true);
497 hout.
write(z,
"charge");
498 hout.
write(z,
"atomic_number");
499 hout.
write(valence,
"core");
512 xmlNodePtr bset = xmlNewNode(NULL, (
const xmlChar*)
"basisset");
513 xmlNewProp(bset, (
const xmlChar*)
"name", (
const xmlChar*)
"LCAOBSet");
514 xmlNodePtr cur = NULL;
515 std::map<int, int> species;
522 std::map<int, int>::iterator it = species.find(itype);
523 if (it == species.end())
553 xmlNodePtr bset = xmlNewNode(NULL, (
const xmlChar*)
"basisset");
556 hout.
push(
"basisset",
true);
557 std::string BasisSetName(
"LCAOBSet");
558 hout.
write(BasisSetName,
"name");
560 std::map<int, int> species;
566 std::map<int, int>::iterator it = species.find(itype);
567 if (it == species.end())
583 hout.
write(counter,
"NbElements");
592 xmlNodePtr slaterdet = xmlNewNode(NULL, (
const xmlChar*)
"slaterdeterminant");
593 std::ostringstream up_size, down_size, b_size;
598 xmlNodePtr udet = xmlNewNode(NULL, (
const xmlChar*)
"determinant");
599 xmlNewProp(udet, (
const xmlChar*)
"id", (
const xmlChar*)
"updet");
600 xmlNewProp(udet, (
const xmlChar*)
"size", (
const xmlChar*)up_size.str().c_str());
602 xmlNewProp(udet, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../updet.cuspInfo.xml");
605 xmlNodePtr occ_data = xmlNewNode(NULL, (
const xmlChar*)
"occupation");
606 xmlNewProp(occ_data, (
const xmlChar*)
"mode", (
const xmlChar*)
"ground");
607 xmlAddChild(udet, occ_data);
609 xmlNodePtr coeff_data = xmlNewNode(NULL, (
const xmlChar*)
"coefficient");
610 xmlNewProp(coeff_data, (
const xmlChar*)
"size", (
const xmlChar*)b_size.str().c_str());
611 xmlNewProp(coeff_data, (
const xmlChar*)
"spindataset", (
const xmlChar*)
"0");
612 xmlAddChild(udet, coeff_data);
614 xmlNodePtr cur = xmlAddChild(slaterdet, udet);
618 hout.
push(
"Super_Twist",
true);
623 for (
int i = 0; i <
numMO; i++)
630 hout.
write(Ctemp,
"eigenset_0");
636 for (
int i = 0; i <
numMO; i++)
644 hout.
write(Ctemp,
"eigenset_1");
646 for (
int i = 0; i <
numMO; i++)
654 hout.
write(Ctemp,
"eigenset_0_imag");
656 for (
int i = 0; i <
numMO; i++)
664 hout.
write(Ctemp,
"eigenset_1_imag");
672 ddet = xmlCopyNode(udet, 1);
673 xmlSetProp(ddet, (
const xmlChar*)
"id", (
const xmlChar*)
"downdet");
674 xmlSetProp(ddet, (
const xmlChar*)
"size", (
const xmlChar*)down_size.str().c_str());
676 xmlSetProp(ddet, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../downdet.cuspInfo.xml");
680 ddet = xmlCopyNode(udet, 2);
681 xmlSetProp(ddet, (
const xmlChar*)
"id", (
const xmlChar*)
"downdet");
682 xmlSetProp(ddet, (
const xmlChar*)
"size", (
const xmlChar*)down_size.str().c_str());
684 xmlSetProp(ddet, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../downdet.cuspInfo.xml");
685 xmlNodePtr o = xmlAddChild(ddet, xmlCopyNode(occ_data, 1));
686 xmlNodePtr c = xmlCopyNode(coeff_data, 1);
687 xmlSetProp(c, (
const xmlChar*)
"spindataset", (
const xmlChar*)
"1");
688 o = xmlAddSibling(o, c);
691 for (
int i = 0; i <
numMO; i++)
698 hout.
write(Ctemp,
"eigenset_1");
700 cur = xmlAddSibling(cur, ddet);
711 xmlNodePtr slaterdet = xmlNewNode(NULL, (
const xmlChar*)
"slaterdeterminant");
712 std::ostringstream up_size, down_size, b_size;
717 xmlNodePtr udet = xmlNewNode(NULL, (
const xmlChar*)
"determinant");
718 xmlNewProp(udet, (
const xmlChar*)
"id", (
const xmlChar*)
"updet");
719 xmlNewProp(udet, (
const xmlChar*)
"size", (
const xmlChar*)up_size.str().c_str());
721 xmlNewProp(udet, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../updet.cuspInfo.xml");
724 xmlNodePtr occ_data = xmlNewNode(NULL, (
const xmlChar*)
"occupation");
725 xmlNewProp(occ_data, (
const xmlChar*)
"mode", (
const xmlChar*)
"ground");
726 xmlAddChild(udet, occ_data);
728 xmlNodePtr coeff_data = xmlNewNode(NULL, (
const xmlChar*)
"coefficient");
729 xmlNewProp(coeff_data, (
const xmlChar*)
"size", (
const xmlChar*)b_size.str().c_str());
730 xmlNewProp(coeff_data, (
const xmlChar*)
"spindataset", (
const xmlChar*)
"0");
731 xmlAddChild(udet, coeff_data);
733 xmlNodePtr cur = xmlAddChild(slaterdet, udet);
738 ddet = xmlCopyNode(udet, 1);
739 xmlSetProp(ddet, (
const xmlChar*)
"id", (
const xmlChar*)
"downdet");
740 xmlSetProp(ddet, (
const xmlChar*)
"size", (
const xmlChar*)down_size.str().c_str());
742 xmlSetProp(ddet, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../downdet.cuspInfo.xml");
746 ddet = xmlCopyNode(udet, 2);
747 xmlSetProp(ddet, (
const xmlChar*)
"id", (
const xmlChar*)
"downdet");
748 xmlSetProp(ddet, (
const xmlChar*)
"size", (
const xmlChar*)down_size.str().c_str());
750 xmlSetProp(ddet, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../downdet.cuspInfo.xml");
751 xmlNodePtr o = xmlAddChild(ddet, xmlCopyNode(occ_data, 1));
752 xmlNodePtr c = xmlCopyNode(coeff_data, 1);
753 xmlSetProp(c, (
const xmlChar*)
"spindataset", (
const xmlChar*)
"1");
754 o = xmlAddSibling(o, c);
756 cur = xmlAddSibling(cur, ddet);
763 xmlNodePtr slaterdet = xmlNewNode(NULL, (
const xmlChar*)
"slaterdeterminant");
765 std::ostringstream up_size, down_size, b_size, occ;
770 xmlNodePtr adet = xmlNewNode(NULL, (
const xmlChar*)
"determinant");
771 xmlNewProp(adet, (
const xmlChar*)
"id", (
const xmlChar*)
"updet");
772 xmlNewProp(adet, (
const xmlChar*)
"size", (
const xmlChar*)up_size.str().c_str());
774 xmlNewProp(adet, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../updet.cuspInfo.xml");
776 xmlNodePtr occ_data = xmlNewNode(NULL, (
const xmlChar*)
"occupation");
777 xmlNewProp(occ_data, (
const xmlChar*)
"mode", (
const xmlChar*)
"ground");
778 xmlAddChild(adet, occ_data);
780 int n = btot / 4, b = 0;
781 int dn = btot -
n * 4;
782 std::ostringstream eig;
783 eig.setf(std::ios::scientific, std::ios::floatfield);
784 eig.setf(std::ios::right, std::ios::adjustfield);
787 for (
int k = 0; k <
n; k++)
789 eig << std::setw(22) <<
EigVec[b] << std::setw(22) <<
EigVec[b + 1] << std::setw(22) <<
EigVec[b + 2]
790 << std::setw(22) <<
EigVec[b + 3] <<
"\n";
793 for (
int k = 0; k < dn; k++)
795 eig << std::setw(22) <<
EigVec[b++];
799 xmlNodePtr det_data = xmlNewTextChild(adet, NULL, (
const xmlChar*)
"coefficient", (
const xmlChar*)eig.str().c_str());
800 xmlNewProp(det_data, (
const xmlChar*)
"size", (
const xmlChar*)b_size.str().c_str());
801 xmlNewProp(det_data, (
const xmlChar*)
"id", (
const xmlChar*)
"updetC");
802 xmlNodePtr cur = xmlAddChild(slaterdet, adet);
803 adet = xmlNewNode(NULL, (
const xmlChar*)
"determinant");
804 xmlNewProp(adet, (
const xmlChar*)
"id", (
const xmlChar*)
"downdet");
805 xmlNewProp(adet, (
const xmlChar*)
"size", (
const xmlChar*)down_size.str().c_str());
807 xmlNewProp(adet, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../downdet.cuspInfo.xml");
810 occ_data = xmlNewNode(NULL, (
const xmlChar*)
"occupation");
811 xmlNewProp(occ_data, (
const xmlChar*)
"mode", (
const xmlChar*)
"ground");
812 xmlAddChild(adet, occ_data);
813 std::ostringstream eigD;
814 eigD.setf(std::ios::scientific, std::ios::floatfield);
815 eigD.setf(std::ios::right, std::ios::adjustfield);
819 for (
int k = 0; k <
n; k++)
821 eigD << std::setw(22) <<
EigVec[b] << std::setw(22) <<
EigVec[b + 1] << std::setw(22) <<
EigVec[b + 2]
822 << std::setw(22) <<
EigVec[b + 3] <<
"\n";
825 for (
int k = 0; k < dn; k++)
827 eigD << std::setw(22) <<
EigVec[b++];
832 det_data = xmlNewTextChild(adet, NULL, (
const xmlChar*)
"coefficient", (
const xmlChar*)eig.str().c_str());
834 det_data = xmlNewTextChild(adet, NULL, (
const xmlChar*)
"coefficient", (
const xmlChar*)eigD.str().c_str());
835 xmlNewProp(det_data, (
const xmlChar*)
"size", (
const xmlChar*)b_size.str().c_str());
836 xmlNewProp(det_data, (
const xmlChar*)
"id", (
const xmlChar*)
"downdetC");
838 cur = xmlAddSibling(cur, adet);
845 std::ostringstream up_size, down_size, b_size, occ, nstates_alpha, nstates_beta;
852 xmlNewProp(spoUP, (
const xmlChar*)
"name", (
const xmlChar*)
"spo-up");
853 xmlNewProp(spoDN, (
const xmlChar*)
"name", (
const xmlChar*)
"spo-dn");
854 xmlNewProp(spoUP, (
const xmlChar*)
"size", (
const xmlChar*)nstates_alpha.str().c_str());
855 xmlNewProp(spoDN, (
const xmlChar*)
"size", (
const xmlChar*)nstates_beta.str().c_str());
858 xmlNewProp(spoUP, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../spo-up.cuspInfo.xml");
859 xmlNewProp(spoDN, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../spo-dn.cuspInfo.xml");
861 xmlNodePtr occ_data = xmlNewNode(NULL, (
const xmlChar*)
"occupation");
862 xmlNewProp(occ_data, (
const xmlChar*)
"mode", (
const xmlChar*)
"ground");
863 xmlAddChild(spoUP, occ_data);
865 int n = btot / 4, b = 0;
866 int dn = btot -
n * 4;
867 std::ostringstream eig;
868 eig.setf(std::ios::scientific, std::ios::floatfield);
869 eig.setf(std::ios::right, std::ios::adjustfield);
872 for (
int k = 0; k <
n; k++)
874 eig << std::setw(22) <<
EigVec[b] << std::setw(22) <<
EigVec[b + 1] << std::setw(22) <<
EigVec[b + 2]
875 << std::setw(22) <<
EigVec[b + 3] <<
"\n";
878 for (
int k = 0; k < dn; k++)
880 eig << std::setw(22) <<
EigVec[b++];
884 xmlNodePtr det_data = xmlNewTextChild(spoUP, NULL, (
const xmlChar*)
"coefficient", (
const xmlChar*)eig.str().c_str());
885 xmlNewProp(det_data, (
const xmlChar*)
"size", (
const xmlChar*)b_size.str().c_str());
886 xmlNewProp(det_data, (
const xmlChar*)
"id", (
const xmlChar*)
"updetC");
888 occ_data = xmlNewNode(NULL, (
const xmlChar*)
"occupation");
889 xmlNewProp(occ_data, (
const xmlChar*)
"mode", (
const xmlChar*)
"ground");
890 xmlAddChild(spoDN, occ_data);
891 std::ostringstream eigD;
892 eigD.setf(std::ios::scientific, std::ios::floatfield);
893 eigD.setf(std::ios::right, std::ios::adjustfield);
897 for (
int k = 0; k <
n; k++)
899 eigD << std::setw(22) <<
EigVec[b] << std::setw(22) <<
EigVec[b + 1] << std::setw(22) <<
EigVec[b + 2]
900 << std::setw(22) <<
EigVec[b + 3] <<
"\n";
903 for (
int k = 0; k < dn; k++)
905 eigD << std::setw(22) <<
EigVec[b++];
910 det_data = xmlNewTextChild(spoDN, NULL, (
const xmlChar*)
"coefficient", (
const xmlChar*)eig.str().c_str());
912 det_data = xmlNewTextChild(spoDN, NULL, (
const xmlChar*)
"coefficient", (
const xmlChar*)eigD.str().c_str());
913 xmlNewProp(det_data, (
const xmlChar*)
"size", (
const xmlChar*)b_size.str().c_str());
914 xmlNewProp(det_data, (
const xmlChar*)
"id", (
const xmlChar*)
"downdetC");
925 hout.
push(
"Super_Twist",
true);
927 std::ostringstream up_size, down_size, b_size, occ, nstates_alpha, nstates_beta;
936 xmlNewProp(spoUP, (
const xmlChar*)
"name", (
const xmlChar*)
"spo-up");
937 xmlNewProp(spoUP, (
const xmlChar*)
"size", (
const xmlChar*)nstates_alpha.str().c_str());
942 xmlNewProp(spoDN, (
const xmlChar*)
"name", (
const xmlChar*)
"spo-dn");
943 xmlNewProp(spoDN, (
const xmlChar*)
"size", (
const xmlChar*)nstates_beta.str().c_str());
949 xmlNewProp(spoUP, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../spo-up.cuspInfo.xml");
951 xmlNewProp(spoDN, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../spo-dn.cuspInfo.xml");
956 xmlNodePtr occ_data = xmlNewNode(NULL, (
const xmlChar*)
"occupation");
957 xmlNewProp(occ_data, (
const xmlChar*)
"mode", (
const xmlChar*)
"ground");
958 xmlAddChild(spoUP, occ_data);
962 xmlNodePtr coeff_data = xmlNewNode(NULL, (
const xmlChar*)
"coefficient");
963 xmlNewProp(coeff_data, (
const xmlChar*)
"size", (
const xmlChar*)b_size.str().c_str());
964 xmlNewProp(coeff_data, (
const xmlChar*)
"spindataset", (
const xmlChar*)
"0");
965 xmlAddChild(spoUP, coeff_data);
968 for (
int i = 0; i <
numMO; i++)
975 hout.
write(Ctemp,
"eigenset_0");
980 for (
int i = 0; i <
numMO; i++)
988 hout.
write(Ctemp,
"eigenset_1");
990 for (
int i = 0; i <
numMO; i++)
998 hout.
write(Ctemp,
"eigenset_0_imag");
1000 for (
int i = 0; i <
numMO; i++)
1008 hout.
write(Ctemp,
"eigenset_1_imag");
1015 occ_data = xmlNewNode(NULL, (
const xmlChar*)
"occupation");
1016 xmlNewProp(occ_data, (
const xmlChar*)
"mode", (
const xmlChar*)
"ground");
1017 xmlAddChild(spoDN, occ_data);
1019 coeff_data = xmlNewNode(NULL, (
const xmlChar*)
"coefficient");
1020 xmlNewProp(coeff_data, (
const xmlChar*)
"size", (
const xmlChar*)b_size.str().c_str());
1022 xmlNewProp(coeff_data, (
const xmlChar*)
"spindataset", (
const xmlChar*)
"0");
1025 xmlNewProp(coeff_data, (
const xmlChar*)
"spindataset", (
const xmlChar*)
"1");
1027 for (
int i = 0; i <
numMO; i++)
1033 hout.
write(Ctemp,
"eigenset_1");
1035 xmlAddChild(spoDN, coeff_data);
1043 xmlNodePtr multislaterdet = xmlNewNode(NULL, (
const xmlChar*)
"multideterminant");
1045 xmlNewProp(multislaterdet, (
const xmlChar*)
"optimize", (
const xmlChar*)
"yes");
1047 xmlNewProp(multislaterdet, (
const xmlChar*)
"optimize", (
const xmlChar*)
"no");
1049 xmlNewProp(multislaterdet, (
const xmlChar*)
"spo_0", (
const xmlChar*)
"spo-up");
1052 xmlNewProp(multislaterdet, (
const xmlChar*)
"spo_up", (
const xmlChar*)
"spo-up");
1053 xmlNewProp(multislaterdet, (
const xmlChar*)
"spo_dn", (
const xmlChar*)
"spo-dn");
1055 xmlNodePtr detlist = xmlNewNode(NULL, (
const xmlChar*)
"detlist");
1056 std::ostringstream nstates, cisize, cinca, cincb, cinea, cineb, ci_thr;
1064 xmlNewProp(detlist, (
const xmlChar*)
"size", (
const xmlChar*)cisize.str().c_str());
1065 xmlNewProp(detlist, (
const xmlChar*)
"type", (
const xmlChar*)
"DETS");
1068 xmlNewProp(detlist, (
const xmlChar*)
"nc0", (
const xmlChar*)cinca.str().c_str());
1069 xmlNewProp(detlist, (
const xmlChar*)
"ne0", (
const xmlChar*)cinea.str().c_str());
1073 xmlNewProp(detlist, (
const xmlChar*)
"nca", (
const xmlChar*)cinca.str().c_str());
1074 xmlNewProp(detlist, (
const xmlChar*)
"ncb", (
const xmlChar*)cincb.str().c_str());
1075 xmlNewProp(detlist, (
const xmlChar*)
"nea", (
const xmlChar*)cinea.str().c_str());
1076 xmlNewProp(detlist, (
const xmlChar*)
"neb", (
const xmlChar*)cineb.str().c_str());
1078 xmlNewProp(detlist, (
const xmlChar*)
"nstates", (
const xmlChar*)nstates.str().c_str());
1079 xmlNewProp(detlist, (
const xmlChar*)
"cutoff", (
const xmlChar*)ci_thr.str().c_str());
1080 xmlNewProp(detlist, (
const xmlChar*)
"href", (
const xmlChar*)
h5file.c_str());
1083 std::cerr <<
" CI configuration list is empty. \n";
1088 std::cerr <<
" Problem with CI configuration lists. \n";
1093 std::cerr <<
" Problem with CI configuration lists. \n";
1097 const unsigned bit_kind = 64;
1098 static_assert(bit_kind ==
sizeof(uint64_t) * 8,
"Must be 64 bit fixed width integer");
1099 static_assert(bit_kind ==
sizeof(
unsigned long long) * 8,
"Must be 64 bit fixed width integer");
1108 hout.
push(
"MultiDet",
true);
1112 hout.
write(N_int,
"Nbits");
1117 for (
int i = 0; i <
CIcoeff.size(); i++)
1121 std::string BiteSizeStringAlpha;
1122 std::string BiteSizeStringBeta;
1123 BiteSizeStringAlpha.resize(N_int * bit_kind);
1124 BiteSizeStringBeta.resize(N_int * bit_kind);
1126 for (std::size_t
n = 0;
n < (N_int * bit_kind);
n++)
1128 BiteSizeStringAlpha[
n] =
'0';
1129 BiteSizeStringBeta[
n] =
'0';
1134 BiteSizeStringAlpha[
n] = loc_alpha[
n];
1135 BiteSizeStringBeta[
n] = loc_beta[
n];
1138 std::size_t offset = 0;
1139 for (std::size_t l = 0; l < N_int; l++)
1141 offset = bit_kind * l;
1143 std::string Var_alpha, Var_beta;
1144 Var_alpha.resize(bit_kind);
1145 Var_beta.resize(bit_kind);
1147 for (
auto j = 0; j < bit_kind; j++)
1149 Var_alpha[j] = BiteSizeStringAlpha[j + offset];
1150 Var_beta[j] = BiteSizeStringBeta[j + offset];
1152 std::reverse(Var_alpha.begin(), Var_alpha.end());
1153 std::reverse(Var_beta.begin(), Var_beta.end());
1154 std::bitset<bit_kind> bit_alpha(Var_alpha);
1155 std::bitset<bit_kind> bit_beta(Var_beta);
1156 tempAlpha[i][l] = bit_alpha.to_ullong();
1157 tempBeta[i][l] = bit_beta.to_ullong();
1160 hout.
write(tempAlpha,
"CI_Alpha");
1162 hout.
write(tempBeta,
"CI_Beta");
1165 xmlAddChild(multislaterdet, detlist);
1167 return multislaterdet;
1172 xmlNodePtr multislaterdet = xmlNewNode(NULL, (
const xmlChar*)
"multideterminant");
1174 xmlNewProp(multislaterdet, (
const xmlChar*)
"optimize", (
const xmlChar*)
"yes");
1176 xmlNewProp(multislaterdet, (
const xmlChar*)
"optimize", (
const xmlChar*)
"no");
1177 xmlNewProp(multislaterdet, (
const xmlChar*)
"spo_up", (
const xmlChar*)
"spo-up");
1178 xmlNewProp(multislaterdet, (
const xmlChar*)
"spo_dn", (
const xmlChar*)
"spo-dn");
1181 xmlNodePtr detlist = xmlNewNode(NULL, (
const xmlChar*)
"detlist");
1182 std::ostringstream nstates, cisize, cinca, cincb, cinea, cineb, ci_thr;
1190 xmlNewProp(detlist, (
const xmlChar*)
"size", (
const xmlChar*)cisize.str().c_str());
1191 xmlNewProp(detlist, (
const xmlChar*)
"type", (
const xmlChar*)
"CSF");
1192 xmlNewProp(detlist, (
const xmlChar*)
"nca", (
const xmlChar*)cinca.str().c_str());
1193 xmlNewProp(detlist, (
const xmlChar*)
"ncb", (
const xmlChar*)cincb.str().c_str());
1194 xmlNewProp(detlist, (
const xmlChar*)
"nea", (
const xmlChar*)cinea.str().c_str());
1195 xmlNewProp(detlist, (
const xmlChar*)
"neb", (
const xmlChar*)cineb.str().c_str());
1196 xmlNewProp(detlist, (
const xmlChar*)
"nstates", (
const xmlChar*)nstates.str().c_str());
1197 xmlNewProp(detlist, (
const xmlChar*)
"cutoff", (
const xmlChar*)ci_thr.str().c_str());
1199 for (
int i = 0; i <
CSFocc.size(); i++)
1205 std::vector<std::pair<double, int>> order;
1208 std::cout <<
"Ordering csfs by excitation level. \n";
1210 std::vector<int> pos(maxE);
1211 int ip1, ip2, cnt = 0, cnt2;
1214 for (
int i = maxE; i >= 0; i--)
1223 order.push_back(cic);
1229 sort(order.begin() + ip1, order.end());
1234 for (
int i = 0; i <
coeff2csf.size(); i++)
1237 order.push_back(cic);
1239 sort(order.begin(), order.end());
1241 std::vector<std::pair<double, int>>::reverse_iterator it(order.rbegin());
1242 std::vector<std::pair<double, int>>::reverse_iterator last(order.rend());
1246 int nq = (*it).second;
1247 xmlNodePtr csf = xmlNewNode(NULL, (
const xmlChar*)
"csf");
1248 std::ostringstream qc_coeff;
1250 std::ostringstream coeff;
1251 std::ostringstream exct;
1257 else if (
zeroCI && iv > 0)
1265 std::ostringstream tag;
1266 tag <<
"CSFcoeff_" << iv;
1267 xmlNewProp(csf, (
const xmlChar*)
"id", (
const xmlChar*)tag.str().c_str());
1268 xmlNewProp(csf, (
const xmlChar*)
"exctLvl", (
const xmlChar*)exct.str().c_str());
1269 xmlNewProp(csf, (
const xmlChar*)
"coeff", (
const xmlChar*)coeff.str().c_str());
1270 xmlNewProp(csf, (
const xmlChar*)
"qchem_coeff", (
const xmlChar*)qc_coeff.str().c_str());
1271 xmlNewProp(csf, (
const xmlChar*)
"occ", (
const xmlChar*)
CSFocc[nq].substr(0,
ci_nstates).c_str());
1274 xmlNodePtr ci = xmlNewNode(NULL, (
const xmlChar*)
"det");
1275 std::ostringstream coeff0;
1277 std::ostringstream tag0;
1278 tag0 <<
"csf_" << iv <<
"-" << i;
1279 xmlNewProp(ci, (
const xmlChar*)
"id", (
const xmlChar*)tag0.str().c_str());
1280 xmlNewProp(ci, (
const xmlChar*)
"coeff", (
const xmlChar*)coeff0.str().c_str());
1281 xmlNewProp(ci, (
const xmlChar*)
"alpha", (
const xmlChar*)
CSFalpha[nq][i].substr(0,
ci_nstates).c_str());
1282 xmlNewProp(ci, (
const xmlChar*)
"beta", (
const xmlChar*)
CSFbeta[nq][i].substr(0,
ci_nstates).c_str());
1283 xmlAddChild(csf, ci);
1285 xmlAddChild(detlist, csf);
1289 xmlAddChild(multislaterdet, detlist);
1294 xmlNodePtr detlist = xmlNewNode(NULL, (
const xmlChar*)
"detlist");
1296 for (
int i = 0; i <
CIcoeff.size(); i++)
1299 std::ostringstream nstates, cisize, cinca, cincb, cinea, cineb, ci_thr;
1307 xmlNewProp(detlist, (
const xmlChar*)
"size", (
const xmlChar*)cisize.str().c_str());
1308 xmlNewProp(detlist, (
const xmlChar*)
"type", (
const xmlChar*)
"DETS");
1309 xmlNewProp(detlist, (
const xmlChar*)
"nca", (
const xmlChar*)cinca.str().c_str());
1310 xmlNewProp(detlist, (
const xmlChar*)
"ncb", (
const xmlChar*)cincb.str().c_str());
1311 xmlNewProp(detlist, (
const xmlChar*)
"nea", (
const xmlChar*)cinea.str().c_str());
1312 xmlNewProp(detlist, (
const xmlChar*)
"neb", (
const xmlChar*)cineb.str().c_str());
1313 xmlNewProp(detlist, (
const xmlChar*)
"nstates", (
const xmlChar*)nstates.str().c_str());
1314 xmlNewProp(detlist, (
const xmlChar*)
"cutoff", (
const xmlChar*)ci_thr.str().c_str());
1317 std::cerr <<
" CI configuration list is empty. \n";
1322 std::cerr <<
" Problem with CI configuration lists. \n";
1326 for (
int i = 0; i <
CIcoeff.size(); i++)
1330 xmlNodePtr ci = xmlNewNode(NULL, (
const xmlChar*)
"ci");
1331 std::ostringstream coeff;
1332 std::ostringstream qc_coeff;
1338 else if (
zeroCI && i > 0)
1346 std::ostringstream tag;
1347 tag <<
"CIcoeff_" << iv++;
1348 xmlNewProp(ci, (
const xmlChar*)
"id", (
const xmlChar*)tag.str().c_str());
1349 xmlNewProp(ci, (
const xmlChar*)
"coeff", (
const xmlChar*)coeff.str().c_str());
1350 xmlNewProp(ci, (
const xmlChar*)
"qc_coeff", (
const xmlChar*)qc_coeff.str().c_str());
1351 xmlNewProp(ci, (
const xmlChar*)
"alpha", (
const xmlChar*)
CIalpha[i].substr(0,
ci_nstates).c_str());
1352 xmlNewProp(ci, (
const xmlChar*)
"beta", (
const xmlChar*)
CIbeta[i].substr(0,
ci_nstates).c_str());
1353 xmlAddChild(detlist, ci);
1356 xmlAddChild(multislaterdet, detlist);
1358 return multislaterdet;
1364 int numbasisgroups(0);
1365 std::stringstream tempcenter;
1366 std::string CenterID;
1368 CenterID = tempcenter.str();
1369 std::stringstream tempElem;
1370 std::string ElemID0 =
"atomicBasisSet", ElemID;
1371 tempElem << ElemID0 << numelem;
1372 ElemID = tempElem.str();
1376 hout.
push(
"basisset");
1377 hout.
push(ElemID.c_str(),
true);
1380 hout.
write(CenterID,
"elementType");
1384 double ValgridFirst(1.
e-6), ValgridLast(1.e2);
1386 std::string gridType(
"log");
1387 double gridFirst(ValgridFirst);
1388 double gridLast(ValgridLast);
1389 int gridSize(Valnpts);
1391 hout.
write(gridType,
"grid_type");
1392 hout.
write(gridFirst,
"grid_ri");
1393 hout.
write(gridLast,
"grid_rf");
1394 hout.
write(gridSize,
"grid_npts");
1396 for (
int ig =
gBound[iat],
n = 0; ig <
gBound[iat + 1]; ig++,
n++)
1400 numbasisgroups =
n + 1;
1403 hout.
write(numbasisgroups,
"NbBasisGroups");
1412 xmlNodePtr abasis = xmlNewNode(NULL, (
const xmlChar*)
"atomicBasisSet");
1413 xmlNewProp(abasis, (
const xmlChar*)
"name", (
const xmlChar*)
basisName.c_str());
1415 xmlNewProp(abasis, (
const xmlChar*)
"angular", (
const xmlChar*)
angular_type.c_str());
1416 xmlNewProp(abasis, (
const xmlChar*)
"type", (
const xmlChar*)
basisType.c_str());
1417 xmlNewProp(abasis, (
const xmlChar*)
"elementType", (
const xmlChar*)
CurrentCenter.c_str());
1418 xmlNewProp(abasis, (
const xmlChar*)
"normalized", (
const xmlChar*)
Normalized.c_str());
1419 xmlAddChild(abasis, xmlCopyNode(
gridPtr.get(), 1));
1420 for (
int ig =
gBound[iat],
n = 0; ig <
gBound[iat + 1]; ig++,
n++)
1434 std::array<char, 4> l_name;
1435 int l_len = std::snprintf(l_name.data(), l_name.size(),
"%d",
gShellID[gid]);
1437 throw std::runtime_error(
"Error generating l_name");
1438 std::string al_name(l_name.data(), l_len);
1440 std::array<char, 4> n_name;
1441 int n_len = std::snprintf(n_name.data(), n_name.size(),
"%d",
n);
1443 throw std::runtime_error(
"Error generating n_name");
1444 std::string an_name(n_name.data(), n_len);
1447 aa_name.append(an_name).append(al_name);
1449 std::string at_name(
"Gaussian");
1450 std::string basisGroupID =
"basisGroup" + an_name;
1452 std::stringstream tempElem;
1453 std::string ElemID0 =
"atomicBasisSet";
1454 tempElem << ElemID0 << numelem;
1455 std::string ElemID = tempElem.str();
1459 hout.
push(
"basisset");
1461 hout.
push(basisGroupID,
true);
1462 hout.
write(aa_name,
"rid");
1465 hout.
write(at_name,
"type");
1466 hout.
write(ng,
"NbRadFunc");
1468 hout.
push(
"radfunctions",
true);
1472 std::string basisGroupID2 =
"basisGroup2" + aa_name;
1473 std::string valac(
"1");
1474 hout.
push(basisGroupID2.c_str(),
true);
1475 hout.
write(aa_name,
"rid");
1476 hout.
write(an_name,
"n");
1477 hout.
write(valac,
"l");
1478 hout.
write(at_name,
"type");
1479 hout.
write(ng,
"NbRadFunc");
1480 hout.
push(
"radfunctions2",
true);
1485 for (
int ig = 0, i = off_; ig < ng; ig++, i++)
1487 std::stringstream tempdata;
1488 std::string dataradID0 =
"DataRad", dataradID;
1489 tempdata << dataradID0 << ig;
1490 dataradID = tempdata.str();
1491 hout.
push(dataradID.c_str(),
true);
1497 std::string basisGroupID2 =
"basisGroup2" + aa_name;
1498 hout.
push(basisGroupID2.c_str());
1499 hout.
push(
"radfunctions2");
1500 std::stringstream tempdata2;
1501 std::string datarad2ID0 =
"DataRad2", datarad2ID;
1502 tempdata2 << datarad2ID0 << ig;
1503 datarad2ID = tempdata2.str();
1504 hout.
push(datarad2ID.c_str(),
true);
1519 xmlNodePtr ag = xmlNewNode(NULL, (
const xmlChar*)
"basisGroup");
1522 std::array<char, 4> l_name;
1523 int l_len = std::snprintf(l_name.data(), l_name.size(),
"%d",
gShellID[gid]);
1525 throw std::runtime_error(
"Error generating l_name");
1526 std::string al_name(l_name.data(), l_len);
1528 std::array<char, 4> n_name;
1529 int n_len = std::snprintf(n_name.data(), n_name.size(),
"%d",
n);
1531 throw std::runtime_error(
"Error generating n_name");
1532 std::string an_name(n_name.data(), n_len);
1535 aa_name.append(an_name).append(al_name);
1537 xmlNewProp(ag, (
const xmlChar*)
"rid", (
const xmlChar*)aa_name.c_str());
1538 xmlNewProp(ag, (
const xmlChar*)
"n", (
const xmlChar*)an_name.c_str());
1539 xmlNewProp(ag, (
const xmlChar*)
"l", (
const xmlChar*)al_name.c_str());
1540 xmlNewProp(ag, (
const xmlChar*)
"type", (
const xmlChar*)
"Gaussian");
1544 aa_name.append(an_name);
1545 ag1 = xmlNewNode(NULL, (
const xmlChar*)
"basisGroup");
1546 xmlNewProp(ag1, (
const xmlChar*)
"rid", (
const xmlChar*)aa_name.c_str());
1547 xmlNewProp(ag1, (
const xmlChar*)
"n", (
const xmlChar*)an_name.c_str());
1548 xmlNewProp(ag1, (
const xmlChar*)
"l", (
const xmlChar*)
"1");
1549 xmlNewProp(ag1, (
const xmlChar*)
"type", (
const xmlChar*)
"Gaussian");
1551 for (
int ig = 0, i = off_; ig < ng; ig++, i++)
1553 std::ostringstream a, b, c;
1554 a.setf(std::ios::scientific, std::ios::floatfield);
1555 b.setf(std::ios::scientific, std::ios::floatfield);
1560 xmlNodePtr anode = xmlNewNode(NULL, (
const xmlChar*)
"radfunc");
1561 xmlNewProp(anode, (
const xmlChar*)
"exponent", (
const xmlChar*)a.str().c_str());
1562 xmlNewProp(anode, (
const xmlChar*)
"contraction", (
const xmlChar*)b.str().c_str());
1563 xmlAddChild(ag, anode);
1566 c.setf(std::ios::scientific, std::ios::floatfield);
1569 anode = xmlNewNode(NULL, (
const xmlChar*)
"radfunc");
1570 xmlNewProp(anode, (
const xmlChar*)
"exponent", (
const xmlChar*)a.str().c_str());
1571 xmlNewProp(anode, (
const xmlChar*)
"contraction", (
const xmlChar*)c.str().c_str());
1572 xmlAddChild(ag1, anode);
1575 xmlAddChild(abasis, ag);
1577 xmlAddChild(abasis, ag1);
1583 xmlNodePtr j3 = xmlNewNode(NULL, (
const xmlChar*)
"jastrow");
1584 xmlNewProp(j3, (
const xmlChar*)
"name", (
const xmlChar*)
"J3");
1585 xmlNewProp(j3, (
const xmlChar*)
"type", (
const xmlChar*)
"eeI");
1586 xmlNewProp(j3, (
const xmlChar*)
"function", (
const xmlChar*)
"polynomial");
1587 xmlNewProp(j3, (
const xmlChar*)
"source", (
const xmlChar*)
"ion0");
1588 xmlNewProp(j3, (
const xmlChar*)
"print", (
const xmlChar*)
"yes");
1590 for (
int i = 0; i < ionSpecies.getTotalNum(); i++)
1592 xmlNodePtr uuc = xmlNewNode(NULL, (
const xmlChar*)
"correlation");
1593 xmlNewProp(uuc, (
const xmlChar*)
"ispecies", (
const xmlChar*)ionSpecies.speciesName[i].c_str());
1594 xmlNewProp(uuc, (
const xmlChar*)
"especies", (
const xmlChar*)
"u");
1595 xmlNewProp(uuc, (
const xmlChar*)
"isize", (
const xmlChar*)
"3");
1596 xmlNewProp(uuc, (
const xmlChar*)
"esize", (
const xmlChar*)
"3");
1598 xmlNewProp(uuc, (
const xmlChar*)
"rcut", (
const xmlChar*)
"5");
1600 xmlNodePtr a = xmlNewTextChild(uuc, NULL, (
const xmlChar*)
"coefficients", (
const xmlChar*)
"\n ");
1601 std::ostringstream o1;
1602 o1 <<
"uu" << ionSpecies.speciesName[i];
1603 xmlNewProp(a, (
const xmlChar*)
"id", (
const xmlChar*)o1.str().c_str());
1604 xmlNewProp(a, (
const xmlChar*)
"type", (
const xmlChar*)
"Array");
1605 xmlNewProp(a, (
const xmlChar*)
"optimize", (
const xmlChar*)
"yes");
1606 xmlAddChild(j3, uuc);
1610 xmlNodePtr udc = xmlNewNode(NULL, (
const xmlChar*)
"correlation");
1611 xmlNewProp(udc, (
const xmlChar*)
"ispecies", (
const xmlChar*)ionSpecies.speciesName[i].c_str());
1612 xmlNewProp(udc, (
const xmlChar*)
"especies1", (
const xmlChar*)
"u");
1613 xmlNewProp(udc, (
const xmlChar*)
"especies2", (
const xmlChar*)
"d");
1614 xmlNewProp(udc, (
const xmlChar*)
"isize", (
const xmlChar*)
"3");
1615 xmlNewProp(udc, (
const xmlChar*)
"esize", (
const xmlChar*)
"3");
1617 xmlNewProp(udc, (
const xmlChar*)
"rcut", (
const xmlChar*)
"5");
1619 xmlNodePtr b = xmlNewTextChild(udc, NULL, (
const xmlChar*)
"coefficients", (
const xmlChar*)
"\n ");
1620 std::ostringstream o2;
1621 o2 <<
"ud" << ionSpecies.speciesName[i];
1622 xmlNewProp(b, (
const xmlChar*)
"id", (
const xmlChar*)o2.str().c_str());
1623 xmlNewProp(b, (
const xmlChar*)
"type", (
const xmlChar*)
"Array");
1624 xmlNewProp(b, (
const xmlChar*)
"optimize", (
const xmlChar*)
"yes");
1625 xmlAddChild(j3, udc);
1633 xmlNodePtr j2 = xmlNewNode(NULL, (
const xmlChar*)
"jastrow");
1634 xmlNewProp(j2, (
const xmlChar*)
"name", (
const xmlChar*)
"J2");
1635 xmlNewProp(j2, (
const xmlChar*)
"type", (
const xmlChar*)
"Two-Body");
1636 xmlNewProp(j2, (
const xmlChar*)
"function", (
const xmlChar*)
"Bspline");
1637 xmlNewProp(j2, (
const xmlChar*)
"print", (
const xmlChar*)
"yes");
1640 xmlNodePtr uu = xmlNewNode(NULL, (
const xmlChar*)
"correlation");
1642 xmlNewProp(uu, (
const xmlChar*)
"rcut", (
const xmlChar*)
"10");
1643 xmlNewProp(uu, (
const xmlChar*)
"size", (
const xmlChar*)
"10");
1644 xmlNewProp(uu, (
const xmlChar*)
"speciesA", (
const xmlChar*)
"u");
1645 xmlNewProp(uu, (
const xmlChar*)
"speciesB", (
const xmlChar*)
"u");
1646 xmlNodePtr a = xmlNewTextChild(uu, NULL, (
const xmlChar*)
"coefficients",
1647 (
const xmlChar*)
"0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0");
1648 xmlNewProp(a, (
const xmlChar*)
"id", (
const xmlChar*)
"uu");
1649 xmlNewProp(a, (
const xmlChar*)
"type", (
const xmlChar*)
"Array");
1650 xmlAddChild(j2, uu);
1654 xmlNodePtr uu = xmlNewNode(NULL, (
const xmlChar*)
"correlation");
1656 xmlNewProp(uu, (
const xmlChar*)
"rcut", (
const xmlChar*)
"10");
1657 xmlNewProp(uu, (
const xmlChar*)
"size", (
const xmlChar*)
"10");
1658 xmlNewProp(uu, (
const xmlChar*)
"speciesA", (
const xmlChar*)
"u");
1659 xmlNewProp(uu, (
const xmlChar*)
"speciesB", (
const xmlChar*)
"d");
1661 xmlNodePtr a = xmlNewTextChild(uu, NULL, (
const xmlChar*)
"coefficients",
1662 (
const xmlChar*)
"0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0");
1663 xmlNewProp(a, (
const xmlChar*)
"id", (
const xmlChar*)
"ud");
1664 xmlNewProp(a, (
const xmlChar*)
"type", (
const xmlChar*)
"Array");
1666 xmlAddChild(j2, uu);
1673 xmlNodePtr j1 = xmlNewNode(NULL, (
const xmlChar*)
"jastrow");
1674 xmlNewProp(j1, (
const xmlChar*)
"name", (
const xmlChar*)
"J1");
1675 xmlNewProp(j1, (
const xmlChar*)
"type", (
const xmlChar*)
"One-Body");
1676 xmlNewProp(j1, (
const xmlChar*)
"function", (
const xmlChar*)
"Bspline");
1677 xmlNewProp(j1, (
const xmlChar*)
"source", (
const xmlChar*)
"ion0");
1678 xmlNewProp(j1, (
const xmlChar*)
"print", (
const xmlChar*)
"yes");
1680 for (
int i = 0; i < ionSpecies.getTotalNum(); i++)
1682 xmlNodePtr c = xmlNewNode(NULL, (
const xmlChar*)
"correlation");
1684 xmlNewProp(c, (
const xmlChar*)
"rcut", (
const xmlChar*)
"10");
1685 xmlNewProp(c, (
const xmlChar*)
"size", (
const xmlChar*)
"10");
1686 xmlNewProp(c, (
const xmlChar*)
"cusp", (
const xmlChar*)
"0");
1687 xmlNewProp(c, (
const xmlChar*)
"elementType", (
const xmlChar*)ionSpecies.speciesName[i].c_str());
1688 xmlNodePtr a = xmlNewTextChild(c, NULL, (
const xmlChar*)
"coefficients",
1689 (
const xmlChar*)
"0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0");
1690 std::ostringstream o;
1691 o <<
'e' << ionSpecies.speciesName[i];
1692 xmlNewProp(a, (
const xmlChar*)
"id", (
const xmlChar*)o.str().c_str());
1693 xmlNewProp(a, (
const xmlChar*)
"type", (
const xmlChar*)
"Array");
1701 gridPtr = std::unique_ptr<xmlNode, void (*)(xmlNodePtr)>(xmlNewNode(NULL, (
const xmlChar*)
"grid"), xmlFreeNode);
1702 std::string gridType(
"log");
1703 std::string gridFirst(
"1.e-6");
1704 std::string gridLast(
"1.e2");
1705 std::string gridSize(
"1001");
1707 while (iargc < argc)
1709 std::string a(argv[iargc]);
1710 if (a ==
"-gridtype")
1712 gridType = argv[++iargc];
1714 else if (a ==
"-frst")
1716 gridFirst = argv[++iargc];
1718 else if (a ==
"-last")
1720 gridLast = argv[++iargc];
1722 else if (a ==
"-size")
1724 gridSize = argv[++iargc];
1726 else if (a ==
"-numMO")
1732 xmlNewProp(
gridPtr.get(), (
const xmlChar*)
"type", (
const xmlChar*)gridType.c_str());
1733 xmlNewProp(
gridPtr.get(), (
const xmlChar*)
"ri", (
const xmlChar*)gridFirst.c_str());
1734 xmlNewProp(
gridPtr.get(), (
const xmlChar*)
"rf", (
const xmlChar*)gridLast.c_str());
1735 xmlNewProp(
gridPtr.get(), (
const xmlChar*)
"npts", (
const xmlChar*)gridSize.c_str());
1740 std::cout <<
" QMCGaussianParserBase::dump " << std::endl;
1749 hout.
push(
"PBC",
true);
1754 hout.
push(
"application",
true);
1757 hout.
push(
"parameters",
true);
1774 xmlDocPtr doc_p = xmlNewDoc((
const xmlChar*)
"1.0");
1775 xmlNodePtr qm_root_p = xmlNewNode(NULL, BAD_CAST
"qmcsystem");
1779 <<
"ABORT::THIS IS NOT SUPPOSED TO HAPPEN. PBC are ON but you are not in an HDF5 path. Contact developers" 1785 if (ionSet !=
nullptr)
1787 xmlAddChild(qm_root_p, ionSet);
1789 xmlDocSetRootElement(doc_p, qm_root_p);
1790 std::string fname =
Title +
".structure.xml";
1791 xmlSaveFormatFile(fname.c_str(), doc_p, 1);
1796 xmlFreeNode(qm_root_p);
1798 throw std::runtime_error(
"convert4qmc: IonSet creation failed in QMCGaussianParserBase::dump, check out of " 1799 "bounds for valence calculation\n");
1803 xmlDocPtr
doc = xmlNewDoc((
const xmlChar*)
"1.0");
1804 xmlNodePtr qm_root = xmlNewNode(NULL, BAD_CAST
"qmcsystem");
1807 xmlNodePtr wfPtr = xmlNewNode(NULL, (
const xmlChar*)
"wavefunction");
1808 xmlNewProp(wfPtr, (
const xmlChar*)
"name", (
const xmlChar*)psi_tag.c_str());
1809 xmlNewProp(wfPtr, (
const xmlChar*)
"target", (
const xmlChar*)
"e");
1811 xmlNodePtr detPtr = xmlNewNode(NULL, (
const xmlChar*)
"determinantset");
1812 xmlNewProp(detPtr, (
const xmlChar*)
"type", (
const xmlChar*)
"MolecularOrbital");
1813 xmlNewProp(detPtr, (
const xmlChar*)
"name", (
const xmlChar*)
"LCAOBSet");
1814 xmlNewProp(detPtr, (
const xmlChar*)
"source", (
const xmlChar*)ion_tag.c_str());
1815 xmlNewProp(detPtr, (
const xmlChar*)
"transform", (
const xmlChar*)
"yes");
1818 xmlNewProp(detPtr, (
const xmlChar*)
"cuspCorrection", (
const xmlChar*)
"yes");
1820 xmlNewProp(detPtr, (
const xmlChar*)
"href", (
const xmlChar*)
h5file.c_str());
1826 xmlFreeNode(bsetPtr);
1833 xmlAddChild(detPtr, bsetPtr);
1838 xmlNodePtr spoupPtr = xmlNewNode(NULL, (
const xmlChar*)
"sposet");
1839 xmlNewProp(spoupPtr, (
const xmlChar*)
"basisset", (
const xmlChar*)
"LCAOBSet");
1840 xmlNodePtr spodnPtr = xmlNewNode(NULL, (
const xmlChar*)
"sposet");
1841 xmlNewProp(spodnPtr, (
const xmlChar*)
"basisset", (
const xmlChar*)
"LCAOBSet");
1845 xmlAddChild(detPtr, spoupPtr);
1846 xmlAddChild(detPtr, spodnPtr);
1847 xmlNodePtr multislaterdetPtr = NULL;
1849 xmlAddChild(detPtr, multislaterdetPtr);
1856 xmlAddChild(detPtr, spoupPtr);
1859 xmlFreeNode(spodnPtr);
1861 xmlAddChild(detPtr, spodnPtr);
1862 xmlNodePtr multislaterdetPtr = NULL;
1865 app_log() <<
"Warning: CSF in HDF5 not implemented. Will attempt to revert multideterminant to xml. It " 1866 "is recommended to verify input for accuracy or avoid using -hdf5" 1872 xmlAddChild(detPtr, multislaterdetPtr);
1877 xmlAddChild(detPtr, spoupPtr);
1878 xmlAddChild(detPtr, spodnPtr);
1879 xmlNodePtr multislaterdetPtr = NULL;
1881 xmlAddChild(detPtr, multislaterdetPtr);
1887 xmlNodePtr slaterdetPtr = NULL;
1899 xmlAddChild(detPtr, slaterdetPtr);
1902 xmlAddChild(wfPtr, detPtr);
1905 std::cout << R
"(Adding Two-Body and One-Body jastrows with rcut="10" and size="10")" << std::endl; 1913 std::cout <<
"Adding Three-Body jastrows with rcut=\"5\"" << std::endl;
1918 xmlAddChild(qm_root, wfPtr);
1920 xmlDocSetRootElement(
doc, qm_root);
1922 xmlSaveFormatFile(fname.c_str(),
doc, 1);
1926 std::cout <<
"Consider using HDF5 via -hdf5 for higher performance and smaller wavefunction files" << std::endl;
1931 std::cout <<
" QMCGaussianParserBase::dumpPBC " << std::endl;
1934 xmlDocPtr doc_p = xmlNewDoc((
const xmlChar*)
"1.0");
1935 xmlNodePtr qm_root_p = xmlNewNode(NULL, BAD_CAST
"qmcsystem");
1940 if (ionSet !=
nullptr)
1942 xmlAddChild(qm_root_p, ionSet);
1944 xmlDocSetRootElement(doc_p, qm_root_p);
1945 std::string fname =
Title +
".structure.xml";
1946 xmlSaveFormatFile(fname.c_str(), doc_p, 1);
1951 xmlFreeNode(qm_root_p);
1953 throw std::runtime_error(
"convert4qmc: IonSet creation failed in QMCGaussianParserBase::dumpPBC, check out of " 1954 "bounds for valence calculation\n");
1958 xmlDocPtr
doc = xmlNewDoc((
const xmlChar*)
"1.0");
1959 xmlNodePtr qm_root = xmlNewNode(NULL, BAD_CAST
"qmcsystem");
1962 xmlNodePtr wfPtr = xmlNewNode(NULL, (
const xmlChar*)
"wavefunction");
1963 xmlNewProp(wfPtr, (
const xmlChar*)
"name", (
const xmlChar*)psi_tag.c_str());
1964 xmlNewProp(wfPtr, (
const xmlChar*)
"target", (
const xmlChar*)
"e");
1966 xmlNodePtr detPtr = xmlNewNode(NULL, (
const xmlChar*)
"determinantset");
1967 xmlNewProp(detPtr, (
const xmlChar*)
"type", (
const xmlChar*)
"MolecularOrbital");
1968 xmlNewProp(detPtr, (
const xmlChar*)
"name", (
const xmlChar*)
"LCAOBSet");
1969 xmlNewProp(detPtr, (
const xmlChar*)
"source", (
const xmlChar*)ion_tag.c_str());
1970 xmlNewProp(detPtr, (
const xmlChar*)
"transform", (
const xmlChar*)
"yes");
1972 std::stringstream ss;
1975 xmlNewProp(detPtr, (
const xmlChar*)
"twist", (
const xmlChar*)(ss.str()).c_str());
1978 xmlNewProp(detPtr, (
const xmlChar*)
"cuspCorrection", (
const xmlChar*)
"yes");
1980 xmlNewProp(detPtr, (
const xmlChar*)
"href", (
const xmlChar*)
h5file.c_str());
1982 std::stringstream sss;
1984 xmlNewProp(detPtr, (
const xmlChar*)
"PBCimages", (
const xmlChar*)(sss.str()).c_str());
1989 xmlNodePtr spoupPtr = xmlNewNode(NULL, (
const xmlChar*)
"sposet");
1990 xmlNodePtr spodnPtr = xmlNewNode(NULL, (
const xmlChar*)
"sposet");
1991 xmlNewProp(spoupPtr, (
const xmlChar*)
"basisset", (
const xmlChar*)
"LCAOBSet");
1992 xmlNewProp(spodnPtr, (
const xmlChar*)
"basisset", (
const xmlChar*)
"LCAOBSet");
1995 xmlAddChild(detPtr, spoupPtr);
1996 xmlAddChild(detPtr, spodnPtr);
1997 xmlNodePtr multislaterdetPtr = NULL;
2002 xmlAddChild(detPtr, multislaterdetPtr);
2006 xmlNodePtr slaterdetPtr = NULL;
2008 xmlAddChild(detPtr, slaterdetPtr);
2011 xmlAddChild(wfPtr, detPtr);
2014 std::cout << R
"(Adding Two-Body and One-Body jastrows with rcut="10" and size="10")" << std::endl; 2022 std::cout <<
"Adding Three-Body jastrows with rcut=\"5\"" << std::endl;
2027 xmlAddChild(qm_root, wfPtr);
2029 xmlDocSetRootElement(
doc, qm_root);
2031 xmlSaveFormatFile(fname.c_str(),
doc, 1);
2038 std::cout <<
" Generating production input file designed for large calculations." << std::endl;
2039 std::cout <<
" Modify according to the accuracy you would like to achieve. " << std::endl;
2041 std::string fname =
Title +
".qmc.in-wf" +
WFS_name +
".xml";
2043 xmlDocPtr doc_input = xmlNewDoc((
const xmlChar*)
"1.0");
2044 xmlNodePtr qm_root_input = xmlNewNode(NULL, BAD_CAST
"simulation");
2048 xmlNodePtr project = xmlNewNode(NULL, (
const xmlChar*)
"project");
2049 xmlNewProp(project, (
const xmlChar*)
"id", (
const xmlChar*)
Title.c_str());
2050 xmlNewProp(project, (
const xmlChar*)
"series", (
const xmlChar*)
"0");
2051 xmlAddChild(qm_root_input, project);
2056 std::string Ptclname =
Title +
".structure.xml";
2057 xmlNodePtr ptcl = xmlNewNode(NULL, (
const xmlChar*)
"include");
2058 xmlNewProp(ptcl, (
const xmlChar*)
"href", (
const xmlChar*)Ptclname.c_str());
2059 xmlAddChild(qm_root_input, ptcl);
2062 xmlNodePtr wfs = xmlNewNode(NULL, (
const xmlChar*)
"include");
2063 xmlNewProp(wfs, (
const xmlChar*)
"href", (
const xmlChar*)Wfsname.c_str());
2064 xmlAddChild(qm_root_input, wfs);
2075 xmlNodePtr initvmc = xmlNewNode(NULL, (
const xmlChar*)
"qmc");
2076 xmlNewProp(initvmc, (
const xmlChar*)
"method", (
const xmlChar*)
"vmc");
2077 xmlNewProp(initvmc, (
const xmlChar*)
"move", (
const xmlChar*)
"pbyp");
2078 xmlNewProp(initvmc, (
const xmlChar*)
"checkpoint", (
const xmlChar*)
"-1");
2081 xmlNodePtr estimator = xmlNewNode(NULL, (
const xmlChar*)
"estimator");
2082 xmlNewProp(estimator, (
const xmlChar*)
"name", (
const xmlChar*)
"LocalEnergy");
2083 xmlNewProp(estimator, (
const xmlChar*)
"hdf5", (
const xmlChar*)
"no");
2084 xmlAddChild(initvmc, estimator);
2086 xmlAddChild(initvmc,
parameter(initvmc,
"walkers",
"1"));
2087 xmlAddChild(initvmc,
parameter(initvmc,
"samplesperthread",
"1"));
2088 xmlAddChild(initvmc,
parameter(initvmc,
"stepsbetweensamples",
"10"));
2089 xmlAddChild(initvmc,
parameter(initvmc,
"substeps",
"5"));
2090 xmlAddChild(initvmc,
parameter(initvmc,
"warmupSteps",
"20"));
2091 xmlAddChild(initvmc,
parameter(initvmc,
"blocks",
"10"));
2092 xmlAddChild(initvmc,
parameter(initvmc,
"timestep",
"0.5"));
2093 xmlAddChild(initvmc,
parameter(initvmc,
"usedrift",
"no"));
2095 xmlAddChild(qm_root_input, initvmc);
2099 xmlNodePtr loopopt1 = xmlNewNode(NULL, (
const xmlChar*)
"loop");
2100 xmlNewProp(loopopt1, (
const xmlChar*)
"max", (
const xmlChar*)
"4");
2102 xmlNodePtr initopt = xmlNewNode(NULL, (
const xmlChar*)
"qmc");
2103 xmlNewProp(initopt, (
const xmlChar*)
"method", (
const xmlChar*)
"linear");
2104 xmlNewProp(initopt, (
const xmlChar*)
"move", (
const xmlChar*)
"pbyp");
2105 xmlNewProp(initopt, (
const xmlChar*)
"checkpoint", (
const xmlChar*)
"-1");
2108 xmlNodePtr estimator = xmlNewNode(NULL, (
const xmlChar*)
"estimator");
2109 xmlNewProp(estimator, (
const xmlChar*)
"name", (
const xmlChar*)
"LocalEnergy");
2110 xmlNewProp(estimator, (
const xmlChar*)
"hdf5", (
const xmlChar*)
"no");
2111 xmlAddChild(initopt, estimator);
2113 xmlAddChild(initopt,
parameter(initopt,
"blocks",
"20"));
2114 xmlAddChild(initopt,
parameter(initopt,
"warmupSteps",
"2"));
2115 xmlAddChild(initopt,
parameter(initopt,
"timestep",
"0.5"));
2116 xmlAddChild(initopt,
parameter(initopt,
"walkers",
"1"));
2117 xmlAddChild(initopt,
parameter(initopt,
"samples",
"80000"));
2118 xmlAddChild(initopt,
parameter(initopt,
"substeps",
"5"));
2119 xmlAddChild(initopt,
parameter(initopt,
"usedrift",
"no"));
2120 xmlAddChild(initopt,
parameter(initopt,
"MinMethod",
"OneShiftOnly"));
2121 xmlAddChild(initopt,
parameter(initopt,
"minwalkers",
"0.1"));
2123 xmlAddChild(loopopt1, initopt);
2125 xmlAddChild(qm_root_input, loopopt1);
2128 xmlNodePtr loopopt = xmlNewNode(NULL, (
const xmlChar*)
"loop");
2129 xmlNewProp(loopopt, (
const xmlChar*)
"max", (
const xmlChar*)
"10");
2131 xmlNodePtr initopt = xmlNewNode(NULL, (
const xmlChar*)
"qmc");
2132 xmlNewProp(initopt, (
const xmlChar*)
"method", (
const xmlChar*)
"linear");
2133 xmlNewProp(initopt, (
const xmlChar*)
"move", (
const xmlChar*)
"pbyp");
2134 xmlNewProp(initopt, (
const xmlChar*)
"checkpoint", (
const xmlChar*)
"-1");
2137 xmlNodePtr estimator = xmlNewNode(NULL, (
const xmlChar*)
"estimator");
2138 xmlNewProp(estimator, (
const xmlChar*)
"name", (
const xmlChar*)
"LocalEnergy");
2139 xmlNewProp(estimator, (
const xmlChar*)
"hdf5", (
const xmlChar*)
"no");
2140 xmlAddChild(initopt, estimator);
2142 xmlAddChild(initopt,
parameter(initopt,
"blocks",
"40"));
2143 xmlAddChild(initopt,
parameter(initopt,
"warmupSteps",
"5"));
2144 xmlAddChild(initopt,
parameter(initopt,
"timestep",
"0.5"));
2145 xmlAddChild(initopt,
parameter(initopt,
"walkers",
"1"));
2146 xmlAddChild(initopt,
parameter(initopt,
"samples",
"160000"));
2147 xmlAddChild(initopt,
parameter(initopt,
"substeps",
"5"));
2148 xmlAddChild(initopt,
parameter(initopt,
"usedrift",
"no"));
2149 xmlAddChild(initopt,
parameter(initopt,
"MinMethod",
"OneShiftOnly"));
2150 xmlAddChild(initopt,
parameter(initopt,
"minwalkers",
"0.5"));
2152 xmlAddChild(loopopt, initopt);
2154 xmlAddChild(qm_root_input, loopopt);
2159 xmlNodePtr vmc = xmlNewNode(NULL, (
const xmlChar*)
"qmc");
2160 xmlNewProp(vmc, (
const xmlChar*)
"method", (
const xmlChar*)
"vmc");
2161 xmlNewProp(vmc, (
const xmlChar*)
"move", (
const xmlChar*)
"pbyp");
2162 xmlNewProp(vmc, (
const xmlChar*)
"checkpoint", (
const xmlChar*)
"-1");
2165 xmlNodePtr estimator = xmlNewNode(NULL, (
const xmlChar*)
"estimator");
2166 xmlNewProp(estimator, (
const xmlChar*)
"name", (
const xmlChar*)
"LocalEnergy");
2167 xmlNewProp(estimator, (
const xmlChar*)
"hdf5", (
const xmlChar*)
"no");
2168 xmlAddChild(vmc, estimator);
2170 xmlAddChild(vmc,
parameter(vmc,
"walkers",
"1"));
2171 xmlAddChild(vmc,
parameter(vmc,
"samplesperthread",
"1"));
2172 xmlAddChild(vmc,
parameter(vmc,
"stepsbetweensamples",
"10"));
2173 xmlAddChild(vmc,
parameter(vmc,
"substeps",
"30"));
2174 xmlAddChild(vmc,
parameter(vmc,
"warmupSteps",
"100"));
2175 xmlAddChild(vmc,
parameter(vmc,
"blocks",
"200"));
2176 xmlAddChild(vmc,
parameter(vmc,
"timestep",
"0.1"));
2177 xmlAddChild(vmc,
parameter(vmc,
"usedrift",
"no"));
2179 xmlAddChild(qm_root_input, vmc);
2182 xmlNodePtr dmc = xmlNewNode(NULL, (
const xmlChar*)
"qmc");
2183 xmlNewProp(dmc, (
const xmlChar*)
"method", (
const xmlChar*)
"dmc");
2184 xmlNewProp(dmc, (
const xmlChar*)
"move", (
const xmlChar*)
"pbyp");
2185 xmlNewProp(dmc, (
const xmlChar*)
"checkpoint", (
const xmlChar*)
"20");
2188 xmlNodePtr estimator = xmlNewNode(NULL, (
const xmlChar*)
"estimator");
2189 xmlNewProp(estimator, (
const xmlChar*)
"name", (
const xmlChar*)
"LocalEnergy");
2190 xmlNewProp(estimator, (
const xmlChar*)
"hdf5", (
const xmlChar*)
"no");
2191 xmlAddChild(dmc, estimator);
2193 xmlAddChild(dmc,
parameter(dmc,
"targetwalkers",
"16000"));
2194 xmlAddChild(dmc,
parameter(dmc,
"reconfiguration",
"no"));
2195 xmlAddChild(dmc,
parameter(dmc,
"warmupSteps",
"100"));
2196 xmlAddChild(dmc,
parameter(dmc,
"timestep",
"0.0005"));
2197 xmlAddChild(dmc,
parameter(dmc,
"steps",
"30"));
2198 xmlAddChild(dmc,
parameter(dmc,
"blocks",
"1000"));
2199 xmlAddChild(dmc,
parameter(dmc,
"nonlocalmoves",
"v3"));
2201 xmlAddChild(qm_root_input, dmc);
2203 xmlDocSetRootElement(doc_input, qm_root_input);
2204 xmlSaveFormatFile(fname.c_str(), doc_input, 1);
2205 xmlFreeDoc(doc_input);
2210 std::cout <<
" Generating Standard Input file containing VMC, standard optmization, and DMC blocks." << std::endl;
2211 std::cout <<
" Modify according to the accuracy you would like to achieve. " << std::endl;
2213 std::string fname =
Title +
".qmc.in-wf" +
WFS_name +
".xml";
2215 xmlDocPtr doc_input = xmlNewDoc((
const xmlChar*)
"1.0");
2216 xmlNodePtr qm_root_input = xmlNewNode(NULL, BAD_CAST
"simulation");
2218 std::ostringstream Comment;
2223 Comment <<
"\n \nExample QMCPACK input file produced by convert4qmc\n \nIt is recommend to start with only the " 2224 "initial VMC block and adjust\nparameters based on the measured energies, variance, and statistics.\n\n";
2225 xmlNodePtr MyComment = xmlNewComment((
const xmlChar*)Comment.str().c_str());
2226 xmlAddChild(qm_root_input, MyComment);
2229 Comment <<
"Name and Series number of the project.";
2230 MyComment = xmlNewComment((
const xmlChar*)Comment.str().c_str());
2231 xmlAddChild(qm_root_input, MyComment);
2233 xmlNodePtr project = xmlNewNode(NULL, (
const xmlChar*)
"project");
2234 xmlNewProp(project, (
const xmlChar*)
"id", (
const xmlChar*)
Title.c_str());
2235 xmlNewProp(project, (
const xmlChar*)
"series", (
const xmlChar*)
"0");
2236 xmlAddChild(qm_root_input, project);
2243 Comment <<
"Link to the location of the Atomic Coordinates and the location of the Wavefunction.";
2244 xmlNodePtr MyComment = xmlNewComment((
const xmlChar*)Comment.str().c_str());
2245 xmlAddChild(qm_root_input, MyComment);
2246 std::string Ptclname =
Title +
".structure.xml";
2247 xmlNodePtr ptcl = xmlNewNode(NULL, (
const xmlChar*)
"include");
2248 xmlNewProp(ptcl, (
const xmlChar*)
"href", (
const xmlChar*)Ptclname.c_str());
2249 xmlAddChild(qm_root_input, ptcl);
2252 xmlNodePtr wfs = xmlNewNode(NULL, (
const xmlChar*)
"include");
2253 xmlNewProp(wfs, (
const xmlChar*)
"href", (
const xmlChar*)Wfsname.c_str());
2254 xmlAddChild(qm_root_input, wfs);
2262 Comment <<
"Hamiltonian of the system. Default ECP filenames are assumed.";
2264 Comment <<
"Hamiltonian of the system.\n";
2266 xmlNodePtr MyComment = xmlNewComment((
const xmlChar*)Comment.str().c_str());
2267 xmlAddChild(qm_root_input, MyComment);
2274 Comment <<
"\n \nExample initial VMC to measure initial energy and variance \n\n";
2275 xmlNodePtr MyComment = xmlNewComment((
const xmlChar*)Comment.str().c_str());
2276 xmlAddChild(qm_root_input, MyComment);
2278 xmlNodePtr initvmc = xmlNewNode(NULL, (
const xmlChar*)
"qmc");
2279 xmlNewProp(initvmc, (
const xmlChar*)
"method", (
const xmlChar*)
"vmc");
2280 xmlNewProp(initvmc, (
const xmlChar*)
"move", (
const xmlChar*)
"pbyp");
2281 xmlNewProp(initvmc, (
const xmlChar*)
"checkpoint", (
const xmlChar*)
"-1");
2284 xmlNodePtr estimator = xmlNewNode(NULL, (
const xmlChar*)
"estimator");
2285 xmlNewProp(estimator, (
const xmlChar*)
"name", (
const xmlChar*)
"LocalEnergy");
2286 xmlNewProp(estimator, (
const xmlChar*)
"hdf5", (
const xmlChar*)
"no");
2287 xmlAddChild(initvmc, estimator);
2289 xmlAddChild(initvmc,
parameter(initvmc,
"warmupSteps",
"100"));
2290 xmlAddChild(initvmc,
parameter(initvmc,
"blocks",
"20"));
2291 xmlAddChild(initvmc,
parameter(initvmc,
"steps",
"50"));
2292 xmlAddChild(initvmc,
parameter(initvmc,
"substeps",
"8"));
2293 xmlAddChild(initvmc,
parameter(initvmc,
"timestep",
"0.5"));
2294 xmlAddChild(initvmc,
parameter(initvmc,
"usedrift",
"no"));
2296 xmlAddChild(qm_root_input, initvmc);
2305 Comment <<
"\n \nExample initial VMC optimization \n \nNumber of steps required will be computed from total " 2306 "requested sample \ncount and total number of walkers \n\n";
2307 xmlNodePtr MyComment = xmlNewComment((
const xmlChar*)Comment.str().c_str());
2308 xmlAddChild(qm_root_input, MyComment);
2310 xmlNodePtr loopopt1 = xmlNewNode(NULL, (
const xmlChar*)
"loop");
2311 xmlNewProp(loopopt1, (
const xmlChar*)
"max", (
const xmlChar*)
"4");
2313 xmlNodePtr initopt = xmlNewNode(NULL, (
const xmlChar*)
"qmc");
2314 xmlNewProp(initopt, (
const xmlChar*)
"method", (
const xmlChar*)
"linear");
2315 xmlNewProp(initopt, (
const xmlChar*)
"move", (
const xmlChar*)
"pbyp");
2316 xmlNewProp(initopt, (
const xmlChar*)
"checkpoint", (
const xmlChar*)
"-1");
2318 xmlNodePtr estimator = xmlNewNode(NULL, (
const xmlChar*)
"estimator");
2319 xmlNewProp(estimator, (
const xmlChar*)
"name", (
const xmlChar*)
"LocalEnergy");
2320 xmlNewProp(estimator, (
const xmlChar*)
"hdf5", (
const xmlChar*)
"no");
2321 xmlAddChild(initopt, estimator);
2323 xmlAddChild(initopt,
parameter(initopt,
"warmupSteps",
"100"));
2324 xmlAddChild(initopt,
parameter(initopt,
"blocks",
"20"));
2325 xmlAddChild(initopt,
parameter(initopt,
"timestep",
"0.5"));
2326 xmlAddChild(initopt,
parameter(initopt,
"walkers",
"1"));
2327 xmlAddChild(initopt,
parameter(initopt,
"samples",
"16000"));
2328 xmlAddChild(initopt,
parameter(initopt,
"substeps",
"4"));
2329 xmlAddChild(initopt,
parameter(initopt,
"usedrift",
"no"));
2330 xmlAddChild(initopt,
parameter(initopt,
"MinMethod",
"OneShiftOnly"));
2331 xmlAddChild(initopt,
parameter(initopt,
"minwalkers",
"0.0001"));
2333 xmlAddChild(loopopt1, initopt);
2335 xmlAddChild(qm_root_input, loopopt1);
2341 Comment <<
"\n \nExample follow-up VMC optimization using more samples for greater accuracy\n\n";
2342 xmlNodePtr MyComment = xmlNewComment((
const xmlChar*)Comment.str().c_str());
2343 xmlAddChild(qm_root_input, MyComment);
2345 xmlNodePtr loopopt = xmlNewNode(NULL, (
const xmlChar*)
"loop");
2346 xmlNewProp(loopopt, (
const xmlChar*)
"max", (
const xmlChar*)
"10");
2348 xmlNodePtr initopt = xmlNewNode(NULL, (
const xmlChar*)
"qmc");
2349 xmlNewProp(initopt, (
const xmlChar*)
"method", (
const xmlChar*)
"linear");
2350 xmlNewProp(initopt, (
const xmlChar*)
"move", (
const xmlChar*)
"pbyp");
2351 xmlNewProp(initopt, (
const xmlChar*)
"checkpoint", (
const xmlChar*)
"-1");
2354 xmlNodePtr estimator = xmlNewNode(NULL, (
const xmlChar*)
"estimator");
2355 xmlNewProp(estimator, (
const xmlChar*)
"name", (
const xmlChar*)
"LocalEnergy");
2356 xmlNewProp(estimator, (
const xmlChar*)
"hdf5", (
const xmlChar*)
"no");
2357 xmlAddChild(initopt, estimator);
2359 xmlAddChild(initopt,
parameter(initopt,
"warmupSteps",
"100"));
2360 xmlAddChild(initopt,
parameter(initopt,
"blocks",
"20"));
2361 xmlAddChild(initopt,
parameter(initopt,
"timestep",
"0.5"));
2362 xmlAddChild(initopt,
parameter(initopt,
"walkers",
"1"));
2363 xmlAddChild(initopt,
parameter(initopt,
"samples",
"64000"));
2364 xmlAddChild(initopt,
parameter(initopt,
"substeps",
"4"));
2365 xmlAddChild(initopt,
parameter(initopt,
"usedrift",
"no"));
2366 xmlAddChild(initopt,
parameter(initopt,
"MinMethod",
"OneShiftOnly"));
2367 xmlAddChild(initopt,
parameter(initopt,
"minwalkers",
"0.3"));
2369 xmlAddChild(loopopt, initopt);
2371 xmlAddChild(qm_root_input, loopopt);
2379 <<
"\n\nProduction VMC and DMC\n\nExamine the results of the optimization before running these blocks.\ne.g. " 2380 "Choose the best optimized jastrow from all obtained, put in \nwavefunction file, do not reoptimize.\n\n";
2381 xmlNodePtr MyComment = xmlNewComment((
const xmlChar*)Comment.str().c_str());
2382 xmlAddChild(qm_root_input, MyComment);
2384 xmlNodePtr vmc = xmlNewNode(NULL, (
const xmlChar*)
"qmc");
2385 xmlNewProp(vmc, (
const xmlChar*)
"method", (
const xmlChar*)
"vmc");
2386 xmlNewProp(vmc, (
const xmlChar*)
"move", (
const xmlChar*)
"pbyp");
2387 xmlNewProp(vmc, (
const xmlChar*)
"checkpoint", (
const xmlChar*)
"-1");
2390 std::ostringstream Comment;
2391 xmlNodePtr estimator = xmlNewNode(NULL, (
const xmlChar*)
"estimator");
2392 xmlNewProp(estimator, (
const xmlChar*)
"name", (
const xmlChar*)
"LocalEnergy");
2393 xmlNewProp(estimator, (
const xmlChar*)
"hdf5", (
const xmlChar*)
"no");
2394 xmlAddChild(vmc, estimator);
2396 xmlAddChild(vmc,
parameter(vmc,
"warmupSteps",
"100"));
2397 xmlAddChild(vmc,
parameter(vmc,
"blocks",
"200"));
2398 xmlAddChild(vmc,
parameter(vmc,
"steps",
"50"));
2399 xmlAddChild(vmc,
parameter(vmc,
"substeps",
"8"));
2400 xmlAddChild(vmc,
parameter(vmc,
"timestep",
"0.5"));
2401 xmlAddChild(vmc,
parameter(vmc,
"usedrift",
"no"));
2404 Comment <<
"Sample count should match targetwalker count for DMC. Will be obtained from all nodes.";
2405 xmlNodePtr MyComment = xmlNewComment((
const xmlChar*)Comment.str().c_str());
2406 xmlAddChild(vmc, MyComment);
2407 xmlAddChild(vmc,
parameter(vmc,
"samples",
"16000"));
2409 xmlAddChild(qm_root_input, vmc);
2412 xmlNodePtr dmc = xmlNewNode(NULL, (
const xmlChar*)
"qmc");
2413 xmlNewProp(dmc, (
const xmlChar*)
"method", (
const xmlChar*)
"dmc");
2414 xmlNewProp(dmc, (
const xmlChar*)
"move", (
const xmlChar*)
"pbyp");
2415 xmlNewProp(dmc, (
const xmlChar*)
"checkpoint", (
const xmlChar*)
"20");
2418 xmlNodePtr estimator = xmlNewNode(NULL, (
const xmlChar*)
"estimator");
2419 xmlNewProp(estimator, (
const xmlChar*)
"name", (
const xmlChar*)
"LocalEnergy");
2420 xmlNewProp(estimator, (
const xmlChar*)
"hdf5", (
const xmlChar*)
"no");
2421 xmlAddChild(dmc, estimator);
2423 xmlAddChild(dmc,
parameter(dmc,
"targetwalkers",
"16000"));
2424 xmlAddChild(dmc,
parameter(dmc,
"reconfiguration",
"no"));
2425 xmlAddChild(dmc,
parameter(dmc,
"warmupSteps",
"100"));
2426 xmlAddChild(dmc,
parameter(dmc,
"timestep",
"0.0005"));
2427 xmlAddChild(dmc,
parameter(dmc,
"steps",
"30"));
2428 xmlAddChild(dmc,
parameter(dmc,
"blocks",
"1000"));
2429 xmlAddChild(dmc,
parameter(dmc,
"nonlocalmoves",
"v3"));
2431 xmlAddChild(qm_root_input, dmc);
2434 xmlDocSetRootElement(doc_input, qm_root_input);
2435 xmlSaveFormatFile(fname.c_str(), doc_input, 1);
2436 xmlFreeDoc(doc_input);
2441 xmlNodePtr hamPtr = xmlNewNode(NULL, (
const xmlChar*)
"hamiltonian");
2442 xmlNewProp(hamPtr, (
const xmlChar*)
"name", (
const xmlChar*)
"h0");
2443 xmlNewProp(hamPtr, (
const xmlChar*)
"type", (
const xmlChar*)
"generic");
2444 xmlNewProp(hamPtr, (
const xmlChar*)
"target", (
const xmlChar*)
"e");
2447 xmlNodePtr pairpot1 = xmlNewNode(NULL, (
const xmlChar*)
"pairpot");
2448 xmlNewProp(pairpot1, (
const xmlChar*)
"name", (
const xmlChar*)
"ElecElec");
2449 xmlNewProp(pairpot1, (
const xmlChar*)
"type", (
const xmlChar*)
"coulomb");
2450 xmlNewProp(pairpot1, (
const xmlChar*)
"source", (
const xmlChar*)
"e");
2451 xmlNewProp(pairpot1, (
const xmlChar*)
"target", (
const xmlChar*)
"e");
2452 xmlNewProp(pairpot1, (
const xmlChar*)
"physical", (
const xmlChar*)
"true");
2453 xmlAddChild(hamPtr, pairpot1);
2455 xmlNodePtr pairpot2 = xmlNewNode(NULL, (
const xmlChar*)
"pairpot");
2456 xmlNewProp(pairpot2, (
const xmlChar*)
"name", (
const xmlChar*)
"IonIon");
2457 xmlNewProp(pairpot2, (
const xmlChar*)
"type", (
const xmlChar*)
"coulomb");
2458 xmlNewProp(pairpot2, (
const xmlChar*)
"source", (
const xmlChar*)ion_tag.c_str());
2459 xmlNewProp(pairpot2, (
const xmlChar*)
"target", (
const xmlChar*)ion_tag.c_str());
2460 xmlAddChild(hamPtr, pairpot2);
2463 xmlNodePtr pairpot3 = xmlNewNode(NULL, (
const xmlChar*)
"pairpot");
2464 xmlNewProp(pairpot3, (
const xmlChar*)
"name", (
const xmlChar*)
"IonElec");
2465 xmlNewProp(pairpot3, (
const xmlChar*)
"type", (
const xmlChar*)
"coulomb");
2466 xmlNewProp(pairpot3, (
const xmlChar*)
"source", (
const xmlChar*)ion_tag.c_str());
2467 xmlNewProp(pairpot3, (
const xmlChar*)
"target", (
const xmlChar*)
"e");
2468 xmlAddChild(hamPtr, pairpot3);
2472 std::cout <<
"Hamiltonian using ECP for Electron Ion=" <<
ECP << std::endl;
2473 xmlNodePtr pairpot3 = xmlNewNode(NULL, (
const xmlChar*)
"pairpot");
2474 xmlNewProp(pairpot3, (
const xmlChar*)
"name", (
const xmlChar*)
"PseudoPot");
2475 xmlNewProp(pairpot3, (
const xmlChar*)
"type", (
const xmlChar*)
"pseudo");
2476 xmlNewProp(pairpot3, (
const xmlChar*)
"source", (
const xmlChar*)ion_tag.c_str());
2477 xmlNewProp(pairpot3, (
const xmlChar*)
"wavefunction", (
const xmlChar*)psi_tag.c_str());
2478 xmlNewProp(pairpot3, (
const xmlChar*)
"format", (
const xmlChar*)
"xml");
2480 std::vector<std::string> AtomNames(
GroupName);
2481 sort(AtomNames.begin(), AtomNames.end());
2482 AtomNames.erase(unique(AtomNames.begin(), AtomNames.end()), AtomNames.end());
2484 for (
int iat = 0; iat < AtomNames.size(); iat++)
2486 std::string PPname = AtomNames[iat] +
".qmcpp.xml";
2487 xmlNodePtr a = xmlNewNode(NULL, (
const xmlChar*)
"pseudo");
2488 xmlNewProp(a, (
const xmlChar*)
"elementType", (
const xmlChar*)AtomNames[iat].c_str());
2489 xmlNewProp(a, (
const xmlChar*)
"href", (
const xmlChar*)PPname.c_str());
2490 xmlAddChild(pairpot3, a);
2493 xmlAddChild(hamPtr, pairpot3);
2498 if (tmp_codename ==
"rmg")
2500 std::cout <<
"Adding MPC and Chiesa correction to Hamiltonian" << std::endl;
2501 xmlNodePtr pairpotMPC = xmlNewNode(NULL, (
const xmlChar*)
"pairpot");
2502 xmlNewProp(pairpotMPC, (
const xmlChar*)
"name", (
const xmlChar*)
"MPC");
2503 xmlNewProp(pairpotMPC, (
const xmlChar*)
"type", (
const xmlChar*)
"MPC");
2504 xmlNewProp(pairpotMPC, (
const xmlChar*)
"source", (
const xmlChar*)
"e");
2505 xmlNewProp(pairpotMPC, (
const xmlChar*)
"target", (
const xmlChar*)
"e");
2506 xmlNewProp(pairpotMPC, (
const xmlChar*)
"ecut", (
const xmlChar*)
"60.0");
2507 xmlNewProp(pairpotMPC, (
const xmlChar*)
"physical", (
const xmlChar*)
"false");
2508 xmlAddChild(hamPtr, pairpotMPC);
2510 xmlNodePtr chiesaPtr = xmlNewNode(NULL, (
const xmlChar*)
"estimator");
2511 xmlNewProp(chiesaPtr, (
const xmlChar*)
"name", (
const xmlChar*)
"KEcorr");
2512 xmlNewProp(chiesaPtr, (
const xmlChar*)
"type", (
const xmlChar*)
"chiesa");
2513 xmlNewProp(chiesaPtr, (
const xmlChar*)
"source", (
const xmlChar*)
"e");
2514 xmlNewProp(chiesaPtr, (
const xmlChar*)
"psi", (
const xmlChar*)psi_tag.c_str());
2515 xmlAddChild(hamPtr, chiesaPtr);
2526 if (i <
ci_nea && occ[i] ==
'2')
2534 else if (occ[i] ==
'2')
2544 xmlNodePtr
e = xmlNewTextChild(Parent, NULL, (
const xmlChar*)
"parameter", (
const xmlChar*)a.c_str());
2545 xmlNewProp(
e, (
const xmlChar*)
"name", (
const xmlChar*)Mypara.c_str());
2553 std::ostringstream up_size, down_size, b_size, occ, nstates_alpha, nstates_beta;
2562 xmlNewProp(spoUP, (
const xmlChar*)
"name", (
const xmlChar*)
"spo-up");
2563 xmlNewProp(spoUP, (
const xmlChar*)
"size", (
const xmlChar*)nstates_alpha.str().c_str());
2566 xmlNewProp(spoDN, (
const xmlChar*)
"name", (
const xmlChar*)
"spo-dn");
2567 xmlNewProp(spoDN, (
const xmlChar*)
"size", (
const xmlChar*)nstates_beta.str().c_str());
2572 xmlNewProp(spoUP, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../spo-up.cuspInfo.xml");
2573 xmlNewProp(spoDN, (
const xmlChar*)
"cuspInfo", (
const xmlChar*)
"../spo-dn.cuspInfo.xml");
2578 xmlNodePtr occ_data = xmlNewNode(NULL, (
const xmlChar*)
"occupation");
2579 xmlNewProp(occ_data, (
const xmlChar*)
"mode", (
const xmlChar*)
"ground");
2580 xmlAddChild(spoUP, occ_data);
2584 xmlNodePtr coeff_data = xmlNewNode(NULL, (
const xmlChar*)
"coefficient");
2585 xmlNewProp(coeff_data, (
const xmlChar*)
"size", (
const xmlChar*)b_size.str().c_str());
2586 xmlNewProp(coeff_data, (
const xmlChar*)
"spindataset", (
const xmlChar*)
"0");
2587 xmlAddChild(spoUP, coeff_data);
2591 occ_data = xmlNewNode(NULL, (
const xmlChar*)
"occupation");
2592 xmlNewProp(occ_data, (
const xmlChar*)
"mode", (
const xmlChar*)
"ground");
2593 xmlAddChild(spoDN, occ_data);
2595 coeff_data = xmlNewNode(NULL, (
const xmlChar*)
"coefficient");
2596 xmlNewProp(coeff_data, (
const xmlChar*)
"size", (
const xmlChar*)b_size.str().c_str());
2598 xmlNewProp(coeff_data, (
const xmlChar*)
"spindataset", (
const xmlChar*)
"0");
2600 xmlNewProp(coeff_data, (
const xmlChar*)
"spindataset", (
const xmlChar*)
"1");
2601 xmlAddChild(spoDN, coeff_data);
2605 xmlNodePtr multislaterdet = xmlNewNode(NULL, (
const xmlChar*)
"multideterminant");
2607 xmlNewProp(multislaterdet, (
const xmlChar*)
"optimize", (
const xmlChar*)
"yes");
2609 xmlNewProp(multislaterdet, (
const xmlChar*)
"optimize", (
const xmlChar*)
"no");
2610 xmlNewProp(multislaterdet, (
const xmlChar*)
"spo_up", (
const xmlChar*)
"spo-up");
2611 xmlNewProp(multislaterdet, (
const xmlChar*)
"spo_dn", (
const xmlChar*)
"spo-dn");
2612 xmlNodePtr detlist = xmlNewNode(NULL, (
const xmlChar*)
"detlist");
2613 std::ostringstream nstates, cisize, cinca, cincb, cinea, cineb, ci_thr;
2621 xmlNewProp(detlist, (
const xmlChar*)
"size", (
const xmlChar*)cisize.str().c_str());
2622 xmlNewProp(detlist, (
const xmlChar*)
"type", (
const xmlChar*)
"DETS");
2623 xmlNewProp(detlist, (
const xmlChar*)
"nca", (
const xmlChar*)cinca.str().c_str());
2624 xmlNewProp(detlist, (
const xmlChar*)
"ncb", (
const xmlChar*)cincb.str().c_str());
2625 xmlNewProp(detlist, (
const xmlChar*)
"nea", (
const xmlChar*)cinea.str().c_str());
2626 xmlNewProp(detlist, (
const xmlChar*)
"neb", (
const xmlChar*)cineb.str().c_str());
2627 xmlNewProp(detlist, (
const xmlChar*)
"nstates", (
const xmlChar*)nstates.str().c_str());
2628 xmlNewProp(detlist, (
const xmlChar*)
"cutoff", (
const xmlChar*)ci_thr.str().c_str());
2632 <<
". By default, the ground state coefficients will be loaded ( ext_level=0). If you want to evaluate " 2633 "an excited for which the coefficients are stored in the HDF5 file, modify the value of ext_level " 2636 xmlNewProp(detlist, (
const xmlChar*)
"ext_level", (
const xmlChar*)
"0");
2639 xmlNewProp(detlist, (
const xmlChar*)
"href", (
const xmlChar*)
multih5file.c_str());
2642 std::cerr <<
" CI configuration list is empty. \n";
2647 std::cerr <<
" Problem with CI configuration lists. \n";
2651 xmlAddChild(multislaterdet, detlist);
2652 return multislaterdet;
std::vector< std::vector< double > > CSFexpansion
void setName(const std::string &aname)
std::vector< value_type > EigVal_beta
xmlNodePtr createNode(bool addlattice)
create particleset node
const std::string & getName() const
return the name
void setOccupationNumbers()
xmlNodePtr createMultiDeterminantSetFromH5()
int addSpecies(const std::string &aname)
When a name species does not exist, add a new species.
void write(T &data, const std::string &aname)
write the data to the group aname and check status runtime error is issued on I/O error ...
bool open(const std::filesystem::path &fname, unsigned flags=H5F_ACC_RDWR)
open a file
xmlNodePtr createCenter(int iat, int _off)
xmlNodePtr createBasisSetWithHDF5()
xmlNodePtr parameter(xmlNodePtr Parent, std::string Mypara, std::string a)
static std::vector< int > gShellID
MakeReturn< UnaryNode< FnFabs, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t abs(const Vector< T1, C1 > &l)
xmlNodePtr createHamiltonian(const std::string &ion_tag, const std::string &psi_tag)
void close()
close all the open groups and file
xmlNodePtr createMultiDeterminantSet()
std::vector< double > CIcoeff
std::vector< int > Occ_beta
int first(int igroup) const
return the first index of a group i
void dumpStdInputProd(const std::string &psi_tag, const std::string &ion_tag)
int numberOfExcitationsCSF(std::string &)
int addAttribute(const std::string &aname)
for a new attribute, allocate the data, !More often used to get the index of a species ...
xmlNodePtr createIonSet()
std::vector< std::string > GroupName
ParticleIndex GroupID
Species ID.
std::vector< std::vector< std::string > > CSFbeta
int getTotalNum() const
return the number of species
std::vector< value_type > EigVal_alpha
std::enable_if_t< IsComplex_t< T >::value, bool > IsComplex
std::vector< std::string > CSFocc
std::vector< int > gBound
Specialized paritlce class for atomistic simulations.
const SimulationCell simulation_cell
std::vector< int > Occ_alpha
xmlNodePtr createDeterminantSet()
void createShell(int n, int ig, int off_, xmlNodePtr abasis)
std::unique_ptr< xmlNode, void(*)(xmlNodePtr)> gridPtr
std::vector< value_type > gC0
std::vector< double > STwist_Coord
void createShellH5(int n, int ig, int off_, int numelem)
static const int bufferSize
void createSPOSetsH5(xmlNodePtr, xmlNodePtr)
std::string lowerCase(const std::string_view s)
++17
std::vector< value_type > EigVec
xmlNodePtr PrepareDeterminantSetFromHDF5()
std::vector< value_type > gExp
int last(int igroup) const
return the last index of a group i
static std::map< int, std::string > IonName
xmlNodePtr createElectronSet(const std::string &ion_tag)
std::vector< int > CIexcitLVL
std::string CurrentCenter
virtual void dumpPBC(const std::string &psi_tag, const std::string &ion_tag)
SpeciesSet & getSpeciesSet()
retrun the SpeciesSet of this particle set
std::vector< std::string > CIalpha
void create(const std::vector< int > &agroup)
create grouped particles
void push(const std::string &gname, bool createit=true)
push a group to the group stack
std::vector< std::pair< int, double > > coeff2csf
xmlNodePtr createMultiDeterminantSetCIHDF5()
virtual void dump(const std::string &psi_tag, const std::string &ion_tag)
bool create(const std::filesystem::path &fname, unsigned flags=H5F_ACC_TRUNC)
create a file
static std::vector< std::string > gShellType
void createCenterH5(int iat, int _off, int numelem)
xmlNodePtr createBasisSet()
std::vector< int > gNumber
void PrepareSPOSetsFromH5(xmlNodePtr, xmlNodePtr)
Custom container for set of attributes for a set of species.
std::vector< std::string > CIbeta
std::vector< value_type > gC1
void createGridNode(int argc, char **argv)
void dumpStdInput(const std::string &psi_tag, const std::string &ion_tag)
static const std::vector< double > gCoreTable
void createSPOSets(xmlNodePtr, xmlNodePtr)
std::vector< int > gShell
std::vector< std::vector< std::string > > CSFalpha
xmlNodePtr createDeterminantSetWithHDF5()