CASSCF -- продолжение. Что делать дальше
Nov. 18th, 2013 05:39 amИтак, CASSCF сошелся. У нас есть чудненькие орбитальки, отлично согласующиеся с нашим представлением о системе. Ну или не очень согласующиеся, но не вызывающие резкого отторжения. Давайте посмотрим на энергии состояний, к-рые мы включали в усреднение. Нравятся? скорее всего, не очень. Иногда -- просто ни к черту. А что б вы хотели? это только начало!
Как я раньше уже говорила, ХФ не включает в себя электронную корреляцию вовсе, а МКССП включает только ее статическую часть. Динамическая корреляция (та, что связана с попытками электронов держаться друг от друга подальше) учитывается либо с помощью дополнительного КВ (уже над полученной многоконфигурационной волновой функцией), либо с помощью теории возмущений. На настоящий момент даже ограниченное (Singles, Singles+Doubles) КВ над CASSCF -- это дорого (хотя в отдельных случаях, на маленьких системах, его можно использовать в качестве бенчмарка), а теория возмущений 2 порядка -- вполне доступна.
В первую очередь, варианты делятся на single-state и multi-state, т.е., дающие поправки к состояниям по отдельности или ко всей совокупности состояний вместе. В первом случае применяется т.н. diagonalize-then-perturb подход, т.е., вычисляются поправки (perturb) к собственным состояниям эффективного гамильтониана CASSCF (сначала diagonalize). Чтобы это сработало, поправки ТВ должны быть небольшими и не должны сильно возмущать исходные CAS-овские состояния. В частности, при "включении" эл. корреляции CAS-овские состояния не должны, например, смешиваться между собой. Такие ситуации -- скорее исключение, чем правило, поэтому результаты простого CASPT2 обычно получаются так себе.
Наиболее естественный способ учесть это смешивание -- использовать multi-state (MS) вариант ТВ. Все эти варианты основаны на т.н. эффективном гамильтониане, действующем в модельном пространстве (за подробностями сюда). Здесь применяется подход diagonalize-perturb-diagonalize: получили CAS-овские состояния (diagonalize), затем применили возмущение к некоторым выбранным состояниям эфффективного гамильтониана (perturb), потом диагонализовали то, что получилось (diagonalize). То, что возмущают не весь эффективный гамильтониан, а только выбранный набор его состояний, называют "частичной контрактацией" в пространстве коэффициентов КВ. Почему так называют -- не спрашивайте, не знаю. Если возмущают полный эффективный гамильтониан, такой вариант называют "неконтрактированным".
Но и в случае MS-MR-PT мы не избавлены от произвола. Произвол в способе выбора гамильтониана нулевого порядка и perturbers -- состояний нулевого порядка, к-рым позволено взаимодействовать по ТВ с состояниями нулевого порядка из эффективного гамильтониана. В обычном MCQDPT (Multi-Configuration Quasi-Degenerate Perturbation Theory) им. Накано (той, что реализована в GAMESS-US) perturbers -- это просто все возможные детерминанты, однократно или двукратно возбужденные по отношению к конфигурациям из акт. пространства. В MS-CASPT2 и QD-NEVPT2 perturbers устроены более сложно и зависят от возмущаемого состояния.
XMCQDPT, реализованная в FireFly, представляет собой улучшение теории Накано, обладающее некоторыми полезными свойствами: (1) явная нетривиальная зависимость эффективного гамильтониана от размера модельного пространства в любом порядке ТВ; (2) сходимость энергий и др. свойств по отношению к расширению модельного пространства в каждом фиксированном порядке ТВ; (3) эффективный гамильтониан должен зависеть от всего подпространства, натянутого на на выбранные вектора CASCI, а не от конкретного выбора базиса в этом подпространстве; (4) полученные энергии должны быть однозначными, непрерывными и гладкими функциями от атомных координат и др. внешних параметров, с возможными исключениями в виде точек конических пересечений и др. областей случайного вырождения.
Как перейти от CASSCF к XMCQDPT? Во-первых, нужно оставить весь инпут от CASSCF, но в качестве группы $VEC взять OPTIMIZED ORBITALS от сошедшегося CASSCF расчета. Во-вторых, добавить ключ MPLEVL=2 в группу $CONTRL. В третьих, добавить следующие строчки:
$XMCQDPT INORB=1 nstate=<кол-во состояний в эффективном гамильтониане>
edshft=0.02 wstate(1)=<кол-во единичек, совпадающее с wstate в $DET или $GUGDM2>,-0 avecoe(1)=<кол-во единичек, совпадающее с wstate в $DET или $GUGDM2>,-0 $end
$mcqfit $end
INORB=1 означает "не пересчитывать CASSCF, взять орбитали из $VEC и все настройки CASSCF из $MCSCF и $DET/$DRT, но проверить орбитали на ортогональность".
edshft -- величина т.н. сдвига энергетических знаменателей. Эта техника применяется для избавления от вторгающихся состояний. Вообще говоря, величина этого сдвига влияет на вычисляемые энергии, поэтому чем она меньше, тем лучше. Прелесть XMCQDPT в том, что для этого метода edshft=0.02 вполне достаточно, и трогать это значение не надо, тогда как в CASPT2, например, применяют значения ~0.3-0.4, и это как бы еще один способ "подрулить" энергии (т.е., еще один источник произвола). Присутствие группы $mcqfit $end включает некие полезные численные алгоритмы, значительно облегчающие жизнь.
Теперь существенные вещи касательно железа: QDPT работает только на одной ноде, но в несколько потоков. Это означает, что пускать его на нескольких нодах кластера бессмысленно, практически все время все ноды кроме одной будут простаивать. Поэтому QDPT мы будем пускать на одной ноде со следующими настройками:
В группу $SYSTEM добавим MWORDS=50 masmem=<намного больше>. Надо так распределить память, чтобы почти вся оперативная память досталась мастер-процессу (masmem), понемногу (50 мегаслов) получили бы остальные процессы, и сколько-то осталось бы системе. Понадобятся также строчки
$system mklnp=<кол-во процессоров на ноде> np=<кол-во процессоров на ноде> $end
$smp smppar=.t. $end
Остальные настройки -- такие же, как были в исходном CASSCF.
Продолжение следует. Анализируем результаты.