CASSCF -- окончание. Анализ выдачи QDPT
Dec. 1st, 2013 12:25 amЧто такое эффективные операторы, можно почитать тут: http://www.chem.msu.ru/rus/teaching/zajzevskii/zaizev.pdf (лучше прочитать, чтобы понимать терминологию). Модельное пространство в MCQDPT натянуто на выбранные вектора КВ, полученные (обычно) в результате SA-CASSCF расчета (т.е., как раз те, что нас интересуют: они входили в wstate(1) в CASSCF и входят в wstate(1) и avecoe(1) в QDPT). Эти вектора -- только часть векторов CAS-CI, полное число к-рых равно числу конфигураций в CAS-CI. Если акт пространство небольшое, то полное кол-во конфигураций, соответствующих заданной мультиплетности, будет вполне обозримым. Так, в CAS(2,2) будет всего три синглетных конфигурации (ψA*ψA, ψB*ψB, (ψAα*ψBβ - ψBα*ψAβ)) и одна триплетная (ψA*ψB); в (CAS(4,4) синглетных конфигураций будет 20, а триплетных 15; а в CAS(6,7) септетных конфигураций будет 7. Конечно, в этом случае бессмысленно мудрить и брать размер модельного пространства меньше, чем полное число векторов CAS-CI. Но кол-во состояний в CAS-CI растет очень быстро, угнаться за ним в NSTATE невозможно. Поэтому для больших (>50 конфигураций) акт. пространств надо ограничивать размер эффективного гамильтониана каким-то разумным числом. Поскольку после всех преобразований (к-рые могут занять ооооочень долгое время) длительность дальнейшего QDPT расчета пропорциональна кол-ву состояний в NSTATE, то размер эффективного гамильтониана лимитируется либо таймлимитом Вашего кластера, либо разумным желанием не делать лишнюю работу.
Опыт показывает, что энергия первого возбужденного состояния (S1 в органическом красителе, без вырождения по симметрии) перестает заметно меняться при NSTATE=10. Если нужно больше состояний, то NSTATE надо увеличить пропорционально. Реально больше 40 состояний не берут, 20-30 -- вполне нормально.
Еще (по мотивам вопросов на Кемпорте) одно замечание. Если нам нужны состояния разной мультиплетности, и мы их изначально получили в детерминантном (cistep=aldet) CASSCF расчете с pures=.f. (собс-но, так и надо делать, если нам нужен общий набор орбиталей для состояний разной мультиплетности), в QDPT смешать разные мультиплетности не получится. Надо на одном и том же наборе $VEC делать отдельные QDPT расчеты для каждой мультиплетности. Для этого надо задать соответствующий MULT в $CONTRL и pures=.t. в $DET либо задать MULT в $XMCQDPT.
Итак, XMCQDPT расчет закончился. Ищем в выдаче строчку *** XMC-QDPT2 ENERGIES ***. В табличке после нее будут вполне понятные вещи: энергии (CAS-CI на векторах из $VEC) исходных состояний и их исправленные во втором порядке ТВ энергии. Также нам могут пригодиться моменты переходов (RADIATIVE TRANSITION MOMENT). Для обычного спектра поглощения нужны будут RADIATIVE TRANSITION MOMENT BETWEEN STATE # 1 AND STATE # (все остальные), но в выдаче также присуствуют моменты переходов между всеми состояниями (уж не знаю, насколько они могут пригодиться). Еще могут понадобиться ZERO-ORDER PROPERTIES FOR STATE # (т.е., натуральные орбитали и распределение заряда в нулевом порядке ТВ для каждого из состояний), в частности, TOTAL MULLIKEN AND LOWDIN ATOMIC POPULATIONS (малликеновские заселенности).
Кое в чем нам поможет ChemCraft. Открыв им выдачу, мы можем увидеть непосредственно электронный спектр, где энергии переходов выдаются в нм, см-1 или эВ, а силы осциллятора вычислены из моментов переходов по известной формуле. Очень удобно. Еще ChemCraft покажет нам, переход с каких орбиталей на какие доминирует в каждом из возбужденных состояний. Tools->Orbitals->Render molecular orbitals -- и мы увидим натуральные (активные) орбитали с заселенностями в каждом состоянии. Заселенности, сильно отличающиеся от 0 или 2, как раз и указывают на орбитали, доминирующие в переходе. А распределение зарядов в каждом состоянии придется вытаскивать руками из TOTAL MULLIKEN AND LOWDIN ATOMIC POPULATIONS, поскольку ChemCraft нам тут не помощник.
ChemCraft показывает форму натуральных орбиталей (Zero order QDPT natural orbitals) для каждого из состояний в NSTATE. То, что для каждого из состояний форма одной и той же орбитали оказывается разной, -- нормально. Это в SA-CASSCF (из-за усреднения) орбитали были общими для всех состояний. Теперь мы каждое состояние уточнили индивидуально -- и вид орбиталей для каждого из них может стать своим собственным.
Напомню еще раз, что State 1 в CASSCF и QDPT -- это основное состояние данной (в MULT в $CONTRL) мультиплетности. Поэтому если нам нужны энергии, скажем, триплетов относительно основного синглетного состояния, то в выдаче для триплетов на энергии переходов, выдаваемые ChemCraft-ом (и отсчитанные от State 1 в данной выдаче, т.е. T1), смотреть не надо, а надо вычислить их ручками -- вычесть из них энергию S0 из выдачи для синглетов.
Некоторые тонкости.
Если посмотреть по строчке EIGENVECTORS OF THE EFFECTIVE HAMILTONIAN, то можно увидеть матрицу эффективного гамильтониана в базисе собственных векторов CAS-CI. Это то, во что превращается CAS-овский гамильтониан (в базисе этих векторов он диагональный) после включения возмущения. А возмущением здесь служат 1- и 2-кратные возбуждения во внешнее пространство. Если вид этого эффективного гамильтониана не сильно отличается от диагонального (на диагонали числа, близкие к 1, вне диагонали -- близкие к 0), то у нас вообще идеальная ситуация -- CAS-овский гамильтониан почти не придется уточнять по ТВ. Такого, конечно, не бывает. Поэтому очень хорошей считается ситуация, когда на диагонали стоят числа ~0.8-0.9, а вне диагонали числа ~0.1 и меньше. Но и так бывает редко. В обычном MCQDPT им. Накано большие внедиагональные элементы приводят к Большой Лаже. В XMCQDPT это не страшно, если перемешивание векторов происходит в пределах массивов состояний, задаваемых wstate(1) и avecoe(1) (т.е., в пределах модельного пространства). Если заметно примешиваются состояния, лежащие за пределами wstate(1) и avecoe(1), это повод получше посмотреть на исходный CASSCF и, скорее всего, что-то в нем серьезно скорректировать и пересчитать.
Если посмотреть по строчке EIGENVALUES OF THE NON-SYMMETRIC EFFECTIVE HAMILTONIAN, то там будет массив (вообще говоря, комплексных) чисел. Если мнимая часть (второй столбец) маленькая (отличная от 0 в 6 или более знаке), то все ОК. Если отличие от 0 появляется в знаке 5-м или меньше -- тоже повод пересмотреть исходный CASSCF.
Ну вот, вроде бы все. За кадром остался вопрос, для чего нам нужны одновременно состояния разной мультиплетности. Собс-но, понятно для чего: чтобы посчитать для них константы переходов за счет спин-орбитального взаимодействия. Но этот рассказ я оставлю на потом.
CASSCF -- продолжение. Что делать дальше
Nov. 18th, 2013 05:39 amИтак, CASSCF сошелся. У нас есть чудненькие орбитальки, отлично согласующиеся с нашим представлением о системе. Ну или не очень согласующиеся, но не вызывающие резкого отторжения. Давайте посмотрим на энергии состояний, к-рые мы включали в усреднение. Нравятся? скорее всего, не очень. Иногда -- просто ни к черту. А что б вы хотели? это только начало!
Как я раньше уже говорила, ХФ не включает в себя электронную корреляцию вовсе, а МКССП включает только ее статическую часть. Динамическая корреляция (та, что связана с попытками электронов держаться друг от друга подальше) учитывается либо с помощью дополнительного КВ (уже над полученной многоконфигурационной волновой функцией), либо с помощью теории возмущений. На настоящий момент даже ограниченное (Singles, Singles+Doubles) КВ над CASSCF -- это дорого (хотя в отдельных случаях, на маленьких системах, его можно использовать в качестве бенчмарка), а теория возмущений 2 порядка -- вполне доступна.
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.
Продолжение следует. Анализируем результаты.
CASSCF -- продолжение. Анализ результатов
Nov. 18th, 2013 01:45 amИтак, после первого удачного запуска (т.е., когда программа не выкинула наш расчет с ошибкой сразу же, а честно смолотила все и открутила заданные в maxit 20 итераций) надо посмотреть, что получилось. Открываем выдачу в текстовом редакторе (никогда так не делали?) и ищем слово final. Если в строке FINAL MCSCF ENERGY IS стоят нули, а строчкой выше мы видим слова о том, что расчет не сошелся, и орбитали для рестарта живут в PUNCH файле -- это нормально, в первый раз редко бывает по-другому. Нам надо открыть эту же выдачу визуализатором (я предпочитаю ChemCraft) и смотреть одновременно на орбитали в визуализаторе и на конфигурационный состав состояний в выдаче.
В Кемкрафте идем: Tools->Orbitals->Render molecular orbitals. Там будет два набора орбиталей. Первый -- NATURAL (натуральные орбитали), где для остовных (неактивных) приводятся орбитальные энергии, для активных -- заселенности, а виртуальных (неактивных) не будет вовсе. Второй -- OPTIMIZED (оптимизированные, точнее, пока что недооптимизированные орбитали). Там у неактивных остовных и вакантных приводятся орбитальные энергии, а у активных -- нули. Сейчас будем смотреть на вид натуральных орбиталей и на их заселенности. Поскольку у нас было усреднение эл. плотности по набору состояний, то и заселенности тоже получатся усредненные по этому набору. Чем больше заселенность активной орбитали отличается от 2 или 0, тем активнее она задействована в усредняемых состояниях. Натуральные орбитали с заселенностями ~1.99 и 0.01 можно считать совсем неактивными при данном усреднении. Иногда их безболезненно можно выкинуть из акт. пространства и уменьшить его размер. Но если предполагается сканирование ППЭ, то может так получиться, что орбитали, неактивные в одной геометрии, станут очень даже активными в другой. Так что тут надо думать.
Обычно по виду натуральные и оптимизированные орбитали похожи. Конфигурации, выведенные в выдаче после -MCCI- BASED ON OPTIMIZED ORBITALS, относятся именно к оптимизированным орбиталям. Думаю, подробно объяснять, что написано в выдаче, не стоит, если что-то непонятно -- спрашивайте в комментах. Нам важно посмотреть на сами активные орбитали и усредняемые состояния: соответствует ли акт. пространство и орбитальный состав усредняемых состояний нашим ожиданиям. В любом случае, для дальнейшей работы нам понадобятся OPTIMIZED ORBITALS из *.dat файла. Мы вставим их вместо группы $VEC в инпут.
Если вдруг какие-то орбитали из акт. пространства убежали, впустив вместо себя другие, для начала попробуем побороться с этим тупой перестановкой орбиталей (массив iorder в $guess, не забываем включить перестановку ключом norder). Если какие-то состояния убежали из усреднения, можно попробовать опцию ntrack в $mcscf. Важно то, что на первых стадиях мы корректируем наш расчет, направляя его так, чтобы сходился куда нам нужно. При этом, скорее всего, будет достигнута и оптимальная энергия (вариационный принцип).
В чем тут дело: МКССП -- вариационная процедура, и самая низкая энергия отвечает самому правильному решению. Однако это нелинейная процедура, и минимизация может завести нас в неправильный минимум. Наша задача -- направить минимизацию в правильный минимум. Обычно химическая интуиция подсказывает, какой минимум должен быть более правильным. Но иногда мы ошибаемся, и то, что кажется нам правильным, по энергии упорно оказывается выше того, что получается "само собой". Значит, наши представления об этой системе в чем-то не верны, и надо конкретно разбираться.
Итак, для рестарта вставляем новые OPTIMIZED ORBITALS из *.dat файла вместо старой группы $VEC, вносим в инпут коррективы и стартуем заново. Результат анализируем. Если видим, что все хорошо, и итерации ведут себя прилично, сходятся без скачков, то можно увеличить maxit в $mcscf и довести дело до сходимости. И после каждого запуска анализируем орбитали.
Продолжение следует. Что нам делать с результатами?
CASSCF -- продолжение
Nov. 18th, 2013 12:59 amПереходим к практике.
В каких случаях нам может понадобиться МКССП? самый очевидный ответ: если мы нарвались на вырожденное основное состояние. Типа f^6 или f^8 в лантанидах. Но это не единственная ситуация. Чаще бывает, что основное состояние у нас вполне одноконфигурационное, но есть пачка квазивырожденных возбужденных (причем иногда -- разной мультиплетности). Или в равновесной геометрии основное состояние одноконфигурационное, а в переходном состоянии реакции -- существенно неодноконфигурационное, причем с вырождением триплета и синглета (бирадикал). Во всех таких случаях надо делать МКССП с усреднением по состояниям (State-Averaged, или SA).
Некоторые программы (злобный скрежет зубами) действуют в режиме "черного ящика" и "избавляют пользователя от несвойственных ему функций", в частности -- от функции думать, чтО он делает и зачем. В этих самых программах достаточно задать геометрию молекулы и ключевое слово CASSCF (а то и CASPT2, о чем поговорим позже) -- и программа все сделает сама, на свое усмотрение. Ах да, такую малость как выбор активного пространства ни одна программа за вас не сделает, об этом пользователю придется позаботиться самому. Так что по-любому без анализа стартовых орбиталей не обойдемся.
Про _те_самые_ программы я говорить больше не буду, т.к. пользуюсь главным образом программами семейства GAMESS: GAMESS-US и FireFly. Для МКССП идеально подходит FireFly, т.к. на настоящий момент только там работают максимально эффективные и лучше всего распараллеленные алгоритмы CASSCF и XMCQDPT (об этом тоже позже).
По дефолту стартовым приближением любого ССП метода в программах семейства GAMESS является GUESS=HUCKEL. Для обычного ХФ или DFT это вполне нормальное приближение, и в неосложненных случаях меньше чем за сотню итераций мы получим вполне хорошее одноконфигурационное решение. Но если с того же стартового приближения начать МКССП расчет -- проблемы гарантированы. Это так же верно, как то, что "раскаленной докрасна кочергой можно обжечься, если держать ее голой рукой слишком долго; или, что если слишком глубоко разрезать палец ножом, то обычно идет кровь; или ... что если выпить слишком много из пузырька с надписью "Яд", то почти наверняка, рано или поздно, почувствуешь недомогание." Поэтому для начала нам нужно получить приличные стартовые орбитали.
Но если у нас система с вырождением -- мы никак не сможем получить стартовые орбитали в нормальном спин-ограниченном ХФ расчете (ROHF, Restricted Open-shell HF). Значит, нам надо получить орбитали для похожей системы, но без вырождения. Например, для лантанида в конфигурации f^6 или f^8 надо посчитать тот же атом в конфигурации f^7 (полузаполненная f оболочка, вырождения нет, все однозначно), сообразно изменив заряд и мультиплетность. Таким образом мы получим некий плацдарм для размещения лишних электронов или дырок в оболочке. Посмотрим на орбитали в каком-нибудь визуализаторе, чтобы убедиться что получили именно то, что хотели.
Если основное состояние у нас вполне одноконфигурационное, а интересуют квазивырожденные возбужденные, то со стартовыми орбиталями все очевидно: их берут из обычного RHF расчета.
Теперь самое время сказать, что делать МКССП расчеты ограниченной кратности в акт. пространстве имеет смысл только тогда, когда оно ну оооооочень большое (больше 16 электронов на 16 орбиталях). Пока вписываемся в (16,16) -- лучше делать CASSCF, т.е. учитывать _все_ возбуждения. В GAMESS и FireFly это включается опцией FORS=.t. (FORS -- Fully Optimized Reaction Space, синоним CAS). Дефолтное значение этого ключа определяется довольно сложным образом, но если выбираете между КВ методами ALDET и GUGA, то по дефолту FORS=.t., а про другие варианты говорить будем исключительно по просьбе трудящихся (я пока не сталкивалась с необходимостью использовать другие варианты).
Теперь надо определиться с акт. пространством и усреднением по состояниям.
Если имеем дело с вырожденным основным состояниям, то все очевидно (в компенсацию за сложность генерации стартовых орбиталей): активное пространство -- это набор вырожденных орбиталей, а усреднять надо по всей пачке вырожденных состояний. Т.е., в массив wstate(1) нужно поставить столько единичек (усредняем всегда с равными весами! программа потом сама отнормирует все веса на 1), какова кратность вырождения. Так, в уже неоднократно упомянутых системах f^6 и f^8 кратность вырождения 7.
Если нас интересуют квазивырожденные возбужденные состояния, то в компенсацию за простоту генерации стартовых орбиталей нам придется повозиться с определением активных орбиталей и усредняемыми состояниями. Для этого делаем CIS или TDDFT расчет (в зависимости от того, каким методом делали стартовые орбитали, ХФ или DFT, соответственно) и смотрим, сколько возбужденных состояний нам нужно и с каких орбиталей на какие идут эти возбуждения (ес-но, нужны только доминирующие вклады). Возможно, понадобятся отдельные расчеты для триплетов и синглетов. Соответствующие орбитали включаем в акт. пространство (не забываем про ограничение (16,16)!), а в усреднение -- нужную нам пачку возбужденных + основное. Т.е., если делаем расчет только для синглетов, то включаем S0 + пачку Sn, если для триплетов, то пачку Tn, если без разбора спина (и так тоже бывает), то S0 + пачку Tn + пачку Sk (n вообще говоря не равно k).
Для усреднения по состояниям очень важно, чтобы не было перекосов. Так, если есть пачка (квази)вырожденных возбужденных состояний, то в усреднение надо включать ее целиком, ничего не потеряв и не добавив лишнего. Возможно, для этого придется проделать пробный расчет, проанализировать результат и скорректировать wstate. Если вдруг так получилось, что между верхним включенным в усреднение и нижним не включенным оказалась маленькая щель (~0.01 а.е.), это нехорошо. Надо либо верхнее усредняемое выкинуть (посмотрев на щель между ним и нижележащим), либо нижнее не попавшее включить (опять-таки посмотрев на щель).
В группе $MCSCF нам надо задать всякие вещи типа кол-ва итераций и инструмента управления сходимостью, а также задать тип КВ: ALDET (КВ на детерминантах, Ames Lab. DETerminant full CI) или GUGA (КВ на правильных по спину конфигурациях, Graphical Unitary Group Approach). У обоих методов есть свои достоинства и недостатки, можно будет об этом рассказать поподробнее, но не сейчас.
Итак, что нам нужно для CASSCF расчета:
1. Стартовые орбитали ($GUESS guess=moread norb=<полное кол-во орбиталей в $VEC> (возможно, понадобятся norder=1 iorder()) $END
2. Соответственно, группа $VEC, содержащая полный набор орбиталей (при рестарте это будут OPTIMIZED ORBITALS из *.dat файла)
3. Группа $MCSCF, в к-рой нужно указать cistep=aldet или guga, а также задать кол-во итераций МКССП maxit.
4. Группа $DRT для cistep=guga или группа $DET для cistep=aldet. Здесь задается акт. пространство и кол-во итераций КВ itermx. В $DET также задается кол-во состояний nstate, состояние iroot, для к-рого выводить свойства, и массив wstate(1) для усреднения. Для GUGA расчета понадобятся также группы $GUGDIA, $GUGDM и $GUGDM2, где задаются те же nstate, iroot и wstate(1) -- здесь они почему-то оказались в разных группах, так исторически сложилось :)
5. Крайне полезные опции, без к-рых CASSCF расчет будет безнадежно долгим и прожорливым:
$ciinp castrf=.t. $end
и
$gugem pack2=.t. $end
В общем-то все, остальное -- тонкости.
По моему опыту, расчеты МКССП не нужно сразу ставить на много итераций (maxit в $MCSCF), лучше сначала несколько раз прогнать с maxit=20, а в особо тяжелых случаях даже с maxit=15 или 10, и после каждого расчета внимательно изучать орбитали, возможно, переставлять что-то с помощью iorder в $GUESS и стартовать с $VEC от последнего МКССП расчета.
Инструменты управления сходимостью FOCAS и SOSCF в $MCSCF действуют альтернативно: или -- или. FOCAS более медленный, но более стабильный, что важно в тяжелых случаях, когда стартовые орбитали очень далеки от оптимальных. SOSCF сходится быстрее, но может пойти вразнос. Есть полезная опция NUMFO, задающая кол-во итераций FOCAS, к-рые нужно проделать прежде, чем перейти к SOSCF.
Продолжение следует. Дальше мы поговорим об анализе результатов CASSCF расчета и что с ними делать дальше.