Revision | 1819 (tree) |
---|---|
Time | 2016-07-16 21:57:34 |
Author | mikiya_fujii |
mullikens input for many and sequential excited states. #36466
@@ -572,8 +572,14 @@ | ||
572 | 572 | Note that "mulliken 0" is ignored because 0th excited state is the ground state. |
573 | 573 | The default setting of this "mulliken" option is nothing. |
574 | 574 | |
575 | + "mullikens" is a set of indeces of the mulliken population analysis in the excites states. | |
576 | + To calculate mulliken population for many and sequencial excited states, | |
577 | + this "mullikens" is prepared as | |
578 | + "mullikens first_elec_index last_elec_index". | |
579 | + The default value of the "mullikens" is also not set | |
580 | + | |
575 | 581 | "unpaired_electron_population" is an option of unpaired electron population(UEP) analysis of the excited state. |
576 | - When "unpaired electron population yes" and "mulliken x" are included in CIS-directive, | |
582 | + When "unpaired electron population yes" and "mulliken x" (amd/or "mullikens x y") are included in CIS-directive, | |
577 | 583 | the UEP of xth excited state is calculated. |
578 | 584 | By multiple indication of these mulliken option, the UEP on multiple excited states are possible. |
579 | 585 | Note that the UEP on ground state is ignored. |
@@ -602,6 +608,7 @@ | ||
602 | 608 | norm_tol 0.000001 |
603 | 609 | mulliken 1 |
604 | 610 | mulliken 2 |
611 | + mullikens 1 3 | |
605 | 612 | unpaired_electron_population yes |
606 | 613 | sum_charges 0 4 |
607 | 614 | sum_charges 3 7 |
@@ -393,6 +393,7 @@ | ||
393 | 393 | this->stringCISAllTransitionDipoleMoments = "all_transition_dipole_moments"; |
394 | 394 | this->stringCISNumPrintCoefficients = "num_print_coefficients"; |
395 | 395 | this->stringCISMulliken = "mulliken"; |
396 | + this->stringCISMullikens = "mullikens"; | |
396 | 397 | this->stringCISUnpairedPop = "unpaired_electron_population"; |
397 | 398 | this->stringCISSumCharges = "sum_charges"; |
398 | 399 | this->stringCISScaLapack = "scalapack"; |
@@ -1059,6 +1060,17 @@ | ||
1059 | 1060 | } |
1060 | 1061 | parseIndex++; |
1061 | 1062 | } |
1063 | + // mullikens indeces | |
1064 | + if((*inputTerms)[parseIndex].compare(this->stringCISMullikens) == 0){ | |
1065 | + int groundStateIndex = 0; | |
1066 | + int firstElecIndex = atoi((*inputTerms)[parseIndex+1].c_str()); | |
1067 | + int lastElecIndex = atoi((*inputTerms)[parseIndex+2].c_str()); | |
1068 | + if(firstElecIndex == groundStateIndex){ | |
1069 | + firstElecIndex = 1; | |
1070 | + } | |
1071 | + Parameters::GetInstance()->AddElectronicStateIndecesMullikenCIS(firstElecIndex, lastElecIndex); | |
1072 | + parseIndex += 2; | |
1073 | + } | |
1062 | 1074 | // unpaired electron population |
1063 | 1075 | if((*inputTerms)[parseIndex].compare(this->stringCISUnpairedPop) == 0){ |
1064 | 1076 | if((*inputTerms)[parseIndex+1].compare(this->stringYES) == 0){ |
@@ -153,7 +153,8 @@ | ||
153 | 153 | inline bool RequiresAllTransitionDipoleMomentsCIS() const {return this->requiresAllTransitionDipoleMomentsCIS;} |
154 | 154 | inline void SetRequiresAllTransitionDipoleMomentsCIS(bool requires){this->requiresAllTransitionDipoleMomentsCIS = requires;} |
155 | 155 | std::vector<int>* GetElectronicStateIndecesMullikenCIS() const; |
156 | - void AddElectronicStateIndexMullikenCIS(int electronicStateIndex); | |
156 | + void AddElectronicStateIndexMullikenCIS(int elecIndex); | |
157 | + void AddElectronicStateIndecesMullikenCIS(int firstElecIndex, int lastElecIndex); | |
157 | 158 | bool RequiresMullikenCIS() const; |
158 | 159 | inline bool RequiresUnpairedPopCIS() const {return this->requiresUnpairedPopCIS;} |
159 | 160 | bool RequiresSumChargesCIS() const; |
@@ -299,6 +299,7 @@ | ||
299 | 299 | std::string stringCISAllTransitionDipoleMoments; |
300 | 300 | std::string stringCISNumPrintCoefficients; |
301 | 301 | std::string stringCISMulliken; |
302 | + std::string stringCISMullikens; | |
302 | 303 | std::string stringCISUnpairedPop; |
303 | 304 | std::string stringCISSumCharges; |
304 | 305 | std::string stringCISScaLapack; |
@@ -435,13 +435,22 @@ | ||
435 | 435 | return this->electronicStateIndecesMullikenCIS; |
436 | 436 | } |
437 | 437 | |
438 | -void Parameters::AddElectronicStateIndexMullikenCIS(int electronicStateIndex){ | |
438 | +void Parameters::AddElectronicStateIndexMullikenCIS(int elecIndex){ | |
439 | 439 | if(this->electronicStateIndecesMullikenCIS==NULL){ |
440 | 440 | this->electronicStateIndecesMullikenCIS = new vector<int>; |
441 | 441 | } |
442 | - this->electronicStateIndecesMullikenCIS->push_back(electronicStateIndex); | |
442 | + this->electronicStateIndecesMullikenCIS->push_back(elecIndex); | |
443 | 443 | } |
444 | 444 | |
445 | +void Parameters::AddElectronicStateIndecesMullikenCIS(int firstElecIndex, int lastElecIndex){ | |
446 | + if(this->electronicStateIndecesMullikenCIS==NULL){ | |
447 | + this->electronicStateIndecesMullikenCIS = new vector<int>; | |
448 | + } | |
449 | + for(int elecIndex=firstElecIndex; elecIndex<=lastElecIndex; elecIndex++){ | |
450 | + this->electronicStateIndecesMullikenCIS->push_back(elecIndex); | |
451 | + } | |
452 | +} | |
453 | + | |
445 | 454 | bool Parameters::RequiresMullikenCIS() const{ |
446 | 455 | return (this->electronicStateIndecesMullikenCIS!=NULL && |
447 | 456 | 0<this->electronicStateIndecesMullikenCIS->size()); |