Source: http://www.psicode.org/doc/progman/
T. Daniel Crawford,
C. David Sherrill,
Edward F. Valeev,
Justin T. Fermann,
şi C. Brian Kellogg![]()
Departamentul de Chimie, Virginia Tech, Blacksburg, Virginia 24061
Centrul pentru Ştiinţă şi Tehnologie Computational Moleculara, Institutul de Tehnologie din Georgia, Atlanta, Georgia 30332-0400
Centrul pentru Computaţională Quantum Chimie, Universitatea din Georgia, Atena, Georgia 30602-2525
PSI3 Version: 3.4.0
Creat pe: 16 februarie 2009
Raport de bug-uri: psicode@users.sourceforge.net
Suita de PSI ab initio cuantice programele de chimie este rezultatul o încercare în curs de desfăşurare de către un cadru de studenti absolventi, asociaţi post-doctoral, şi profesori pentru a produce cod care să fie eficientă, dar, de asemenea, uşor să se extindă la noi metode teoretice. Efort semnificativ a fost dedicată de dezvoltare a bibliotecilor, care sunt robuste si usor de utilizat. Unele dintre cele mai timpurii contribuţiilor la ceea ce acum este mentionat ca `` PSI''include o interacţiune directă de configurare (CI) program (Robert Lucchese, 1976, acum la Texas A & M), bine-cunoscut grup de programe grafice unitar CI (Bernie Brooks, 1977-1978, acum la NIH), cum şi originalul integralele codul (Russ Pitzer, 1978, acum de la Ohio State). Din 1978-1987, pachetul a fost, stiu ca BERKELEY suita, şi după grupul Schaefer sa mutat la Centrul de Chimie Computational Quantum de la Universitatea din Georgia, un pachet a fost redenumit PSI. Vă mulţumim în primul rând la eforturile de Curt Janssen (Sandia Labs, Livermore) şi Ed Seidl (LLNL), pachetul a fost portat la sistemele UNIX, şi în mod substanţial îmbunătăţit cu noi formate de intrare şi un C pe bază de I / O de sistem.
Început în 1999, un efort de extins a fost început să se dezvolte PSI3 - o PSI apartament cu o faţă complet nouă. Ca urmare a acestui efort, toate din moştenirea codul Fortran a fost eliminat, si totul a fost rescris în C şi C + +, inclusiv integrantă din nou integrantă / derivate, cuplate cu dispersie, şi codurile CI. În plus, noi I / O, bibliotecile au fost adăugate, cum şi un punct de control îmbunătăţit structura de fişiere şi automatizarea mai mare a sarcinilor tipice, cum ar fi optimizarea geometrie si analiza de frecvenţă. Pachetul are capacitatea de a determina wavefunctions, energii, degradeuri analitic, şi diverse proprietăţi moleculare bazate pe o varietate de teorii, inclusiv de spin-restrânse, spin-nerestricţionat, şi a restricţionat deschis-shell Hartree-Fock (RHF, UHF, şi ROHF) ; interacţiune de configurare (CI) (inclusiv o varietate de multireference CI şi completă CI); cuplate-cluster (CC), inclusiv CC, cu orbite variationaly optimizate în al doilea rând, pentru Møller-Plesset teoria perturbatiilor (MPPT), inclusiv în mod explicit corelat de ordinul doi Møller- Plesset energie (MP2-R12), şi completă-activ-spaţiu de auto-consistent câmp (CASSCF) teoria. Până în luna ianuarie 2008, toate de cod C în PSI3 a fost convertit la C + + pentru a permite o cale s mai orientat-obiect de design şi a unui cadru unic-excecutable care va facilita reutilizarea codului şi uşurinţa în eforturile de paralelizare. În acest moment acelaşi, toate din moştenirea I / O de la rutinele PSI2 au fost eliminate, raţionalizarea foarte mult libciomr.a bibliotecă.
Scopul acestui manual este de a oferi o privire de ansamblu rezonabil detaliată a codului sursă şi filozofia de programare a PSI3, astfel ca programatorii interesaţi şi de a contribui la codul va avea o sarcină mai uşoară.Secţiunea 2 oferă o explicaţie succint cu privire la măsurile necesare pentru a obţine codul sursă din depozitul principal de la Virginia Tech. (Instrucţiunile de instalare sunt zentate separat în manualul de instalare sau în $ PSI3/INSTALL.) Secţiunea 3 discută elementele esenţiale ale unui C-limbaj PSI3 programului, cu accent pe parsarea de intrare şi de I / O funcţii. Secţiunea 4 furnizează documente de o serie de alte biblioteci importante, inclusiv biblioteca de functii pentru citirea din dosar punctul de control, libchkpt.a, biblioteca Trio Quantum funcţia de diverse, libqt.a, libiwl.a pentru citirea şi scrierea cu una şi doi electroni integrale în integralele `` cu etichete''format. Secţiunea 5 oferă consiliere cu privire la stil de programare adecvate pentru PSI3 cod, şi pct. 6 descrie structura pachetului Makefile s. Secţiunea 6.3 oferă o scurtă zentare a măsurile necesare pentru adăugarea unui nou modul de a PSI3, pct. 7 oferă câteva sugestii depanarea la ea, şi secţiunea 8 explică convenţii pentru documentarea ea. Anexe furniza materialul de referinţă importante, inclusiv în zent Acceptăm PSI3 citare şi de informaţii format pentru unele dintre cele mai importante fişiere text folosite de PSI3 module.
Sistemul de control Subversion (SVN) ( subversion.tigris.org ) oferă un mijloc convenabil prin care programatorii pot obţine cel mai recent (sau orice anterioară) versiune a PSI3 sursă din depozit principal sau o versiune sucursală, adăuga cod nou la sursa de copac sau modifica existente PSI3 module, şi apoi a face modificări şi completări la dispoziţia altor programatori prin verificarea modificărilor înapoi în depozit principal. SVN oferă de asemenea un''`` plasă de siguranţă în faptul că orice modificare eronată a codului poate fi uşor eliminate de îndată ce acestea au fost identificate. Această secţiune descrie modul de utilizare SVN pentru a accesa şi modifica PSI3 codul sursă. (Reţineţi că instrucţiunile de compilare şi instalare sunt zentate într-un document separat.)
Depozit principal pentru PSI3 Codul sursa este menţinută în zent de grupul Crawford de la Virginia Tech. Pentru a vedea codul, trebuie să obţină mai întâi un cont SVN prin e-mail crawdad@vt.edu. După ce au nume de utilizator şi parola-id, acum sunteţi gata pentru a accesa prin intermediul unui depozit securizat, SSL bazate pe conexiune WebDAV, dar mai întâi trebuie să decideţi ce versiune a codului care aveţi nevoie.
Depozitul SVN PSI3 conţine trei top-nivel de directoare:
https://sirius.chem.vt.edu/svn/psi3/
PSI3 depozit este format dintr-un trunchi principal şi mai multe ramuri de să. Ramurii pe care ar trebui să utilizaţi depinde de tipul de munca pe plan pentru codurile:
Fig. 1 vede o schemă de revizuire SVN-Structura de control şi etichetare ramură. Două ramuri de să sunt zentate, ramura stabilă curentă, numit psi-3-4, şi o versiune viitoare planificate, pentru a fi numit psi-3-5. Etichetele de pe ramuri indică shapshots de să, în cazul în care bug-uri au fost imobilizate si codul a fost sau va fi exportate pentru distribuţie publică. Linii punctate în figura indică îmbinare puncte: chiar înainte de fiecare lansare publică, modificările aduse codului de pe ramura de să stabilă va fi îmbinate în trunchiul principal.
O problemă des întâlnită este de ce să fac cu privire la repararea bug-urilor, care sunt necesare pentru dezvoltarea neîntreruptă a codului de cod de pe trunchiul principal. Deoarece articolul 1 al politicii statelor de mai sus, toate bug stabileşte de cod deja în versiune stabilă recentă trebuie să meargă pe ramura corespunzătoare, nu pe trunchi principal. Următorul pas depinde de severitatea bug-ul:
Următoarele sunt câteva dintre comenzile cel mai frecvent utilizate SVN pentru verificarea şi actualizarea copiile de lucru ale PSI3 codului sursă.
Pentru a Plateste o copie de lucru a capului de trunchi principal:
svn co https://sirius.chem.vt.edu/svn/psi3/trunk/ psi3
Pentru a vedea o copie de lucru a şefului unei sucursale de să specifice, de exemplu, ramura etichetate psi-3-4 :
svn co https://sirius.chem.vt.edu/svn/psi3/branches/psi-3-4 psi3
Reţineţi că ulterior actualizare svn comenzile din această copie de lucru va oferi actualizări doar pe ramura aleasă. Reţineţi, de asemenea, că după ce au verificat o copie proaspătă de lucru a codului trebuie să executaţiautoconf comandă pentru a genera un configura script pentru construirea codul. (A se vedea manualul de instalare pentru instrucţiuni de configurare, compilare, şi testare.)
Pentru fiecare dintre comenzile de mai sus, copia de lucru a codului va fi plasat în directorul psi3, indiferent de alegerea ta de sucursale. In acest manual, ne vom referi la acest director de pe acum ca $ PSI3. Comenzi ulterioare SVN sunt, de obicei, va rula în acest director, şi de nivel superior.
Pentru a actualiza copia dumneavoastră curent de lucru pentru a include cele mai recente revizuiri:
svn update
Note: (a) Aceasta va actualiza doar reviziile sucursala dvs. curent; (b) vechi -d si -P steaguri cerute de CVS nu sunt necesare cu SVN.
Pentru a converti copia dvs. de lucru la cap de o ramură specifice:
svn comutator https://sirius.chem.vt.edu/svn/psi3/branches/psi-3-4
Pentru a converti copia dvs. de lucru la cap a trunchiului principale:
svn comutator https://sirius.chem.vt.edu/svn/psi3/trunk/
Pentru a afla ce ramură de copie de lucru este, în această rula dumneavoastră de top-nivel PSI3 directorul sursa:
informatiile meciului svn | grep URL
Aceasta va reveni directorul SVN de la care copia dvs. de lucru a fost luată, de exemplu,
URL: https://sirius.chem.vt.edu/svn/psi3/branches/psi-3-4
Câteva cuvinte de consiliere:
Dacă aveţi modificări Psi binare sau biblioteci care există deja, una din cele două serii de etape este necesar pentru a verifica aceste modificări pentru a depozit principal. Prima serie poate fi urmată în cazul în care toate modificările au fost făcute numai pentru fişiere care există deja în versiunea curentă. A doua serie ar trebui să fie urmată în cazul în care fişiere noi trebuie să fie adăugate la codul în depozit.
The svn ci comandă în ambele aceste secvenţe va examina toate din cod în actualul libciomr directorul împotriva versiunea curentă a codului din depozit principal. Toate fişierele care au fost modificate (şi pentru care nu intră în conflict cu versiunile mai noi exista!) Vor fi identificate şi verificate, în principal la depozit (ca şi fişier nou în a doua situaţie).
SVN vă cere să includă un comentariu la modificările. Cu toate acestea, s deosebire de CVS, SVN feră ca ai pus comentariile dumneavoastră cu privire la linia de comandă, mai degrabă decât editarea unui fişier text.Eu fer modul în CVS, dar aceasta este o durere minore în comparaţie cu toate avantajele de SVN, în opinia mea.
În cazul în care programator este adaugarea unui modul executabil nou sau bibliotecă pentru a PSI3 depozit, o serie de convenţii importante ar trebui să fie urmate:
Să supunem că noul cod este un modul executabil şi este numit great_code. Directorul ce conţine noul cod trebuie să conţină numai acele fişiere care urmează a fi verificate pentru a depozitul! Apoi, următorii paşi va verifica într-o nouă piesă de cod pentru a depozitului principal:
În cazul în care codul din depozitul principal a fost modificat, copii altor utilizatori de lucru nu va fi, desigur, actualizate automat. În general, este necesar doar pentru a executa următorii paşi în vederea actualizării complet copia dumneavoastră de lucru de cod:
Acest lucru va examina fiecare intrare în copia dvs. de lucru şi comparaţi-o cu cea mai recentă versiune în depozitul principal. Când fişierul în depozit principal este mai recentă, versiunea dvs. de cod va fi actualizat. Dacă aţi făcut modificări la versiunea dvs., dar versiunea în depozitul principal nu sa schimbat, codul modificate vor fi identificate la tine cu un M ``''. Dacă aţi făcut modificări la versiunea dvs. a codului, şi una sau mai multe versiuni mai noi au fost actualizate în depozit principal, SVN va examina cele două versiuni şi încercarea de a le îmbina - acest proces dezvăluie adesea conflicte, cu toate acestea, şi este, uneori, tenţii. Veţi fi notificat cu privire la orice conflicte care apar (etichetate cu un `` C''), şi trebuie să le rezolve manual.
Dacă directoare noi au fost adăugate la depozitul, actualizarea de mai sus se va adăuga în mod automat le pentru a copia dvs. de lucru. Cu toate acestea, este posibil să trebuiască să re-rula autoconf şi configurarea ( $ objdir / config.status-verificaţi din nou este o comandă convenabil) pentru a putea construi noul cod.
Următorii paşi se va elimina un fişier cod sursă numit bad_code.F dintr-un modul binar denumit great_code :
Aceasta va verifica depozitul principal şi a vă oferi codul asa cum era exact pe 17 februarie 2002.
Copia dvs. de lucru a PSI3 codul sursă include o serie de subdirectoare importante:
După compilare şi instalare, $ fixul directorul conţine codurile executabile şi alte fişiere necesare. NB: fişiere în acest domeniu nu ar trebui să fie modificată în mod direct, ci mai degrabă, copie de lucru ar trebui să fie modificate şi PSI3 Makefile ierarhie ar trebui să se ocupe de instalare de orice modificări. Structura din zona de instalare este:
Pentru a funcţiona ca parte a pachetului PSI, un program trebuie să includă anumite elemente necesare. Această secţiune va discuta des fişierele antet, variabile globale, şi funcţiile necesare pentru a integra un nou modul de C + + în PSI3. Aici este un minim PSI3 program, ale cărui elemente sunt descrise mai jos. Reţineţi că suntem folosind C + +, pentru a evita namespaces nume contradictorii între module, cum ne mişcăm s un design single-executabil. Cu toate acestea, din motive de moştenire globals anumite gprgid () funcţie trebuie să aibă C-legatura.
<> # Include <cstdio> # include <cstdlib> # include <libipv1/ip_lib.h> # include <psifiles.h> # include <libqt/qt.h> # include <libciomr/libciomr.h> # include <libchkpt / chkpt h>. # include <libpsio/psio.h> extern "C" { FILE * infile, * outfile; char * psi_file_fix; } / / începe modul specific namespace spaţiu de nume psi {spaţiu de nume MODULE_NAME { / / variabile globale, declaraţiile funcţiilor, şi / / # define situaţiile aici }} / psi Spaţiu de nume / închide:: MODULE_NAME / / principal trebuie să fie în spaţiul de nume la nivel mondial / / dar dau acces la PSI:: namespace MODULE_NAME folosind psi Spaţiu de nume:: MODULE_NAME int main (int argc, char * argv []) { psi_start (& infile, şi outfile, şi psi_file_fix, argc-1, argv +1, 0); ip_cwk_add (": MODULE_NAME"); / / MODULE_NAME toate capace aici psio_init (); psio_ipv1_config (); / * pentru a începe cronometrarea, tstart (outfile); * / / * Cod Introdu aici * / / * să se încheie cu calendarul, tstop (outfile); * / psio_done (); psi_stop (infile, outfile, psi_file_fix); } / / acest trebuie să fie spaţiul de nume la nivel mondial, de asemenea, extern "C" { char * gprgid (void) { char * prgid = "MODULE_NAME"; retur (prgid); } } / / toate celelalte lucruri sunt într-un spaţiu de nume special psi spaţiul de nume {{MODULE_NAME spaţiu de nume / / alte chestii de mai jos some_function dublu (int x) { / / codul } }} / / psi Spaţiu de nume aproape:: MODULE_NAME >În exemplul de mai sus, am inclus tipic C + + şi fişierele PSI antet, deşi pentru modul dumneavoastră specifice ar putea să nu nevoie de toate acestea, sau poate aveţi nevoie de cele suplimentare (cum ar fi string.h saumath.h ). ISP includ fişierelor utilizate în acest exemplu sunt libipv1/ip_lib.h (parser-ul de intrare, descrisă la punctul 3.2 ), psifiles.h (definiţiile din toate numerele de fişier PSI pentru I / O), libqt / qt.h(pachetul ` `cuantic trio-ul''biblioteca, care conţin matematica diverse şi funcţii utilitare), libciomr / libciomr.h (PSI vechi I / O si matematica rutine de bibliotecă - deşi nu conţine nici I / O mai), libchkpt / chkpt.h (într-o bibliotecă pentru accesarea fişierului punctul de control pentru a obţine cantităţi, cum ar fi CSA sau energia nucleară repulsie), şi libpsio / psio.h (PSI I / O bibliotecă, vezi pct. 3.3 ). Acestea includ fişiere conţin declaraţiile funcţiilor pentru toate funcţiile cuprinse în aceste biblioteci.
Reţineţi că toate modulele ISP necesită trei variabile globale cu C legătură (de exemplu, in interiorul unei extern C declaraţie): infile, outfile, şi psi_file_fix. Fiecare modul PSI trebuie să aibă, de asemenea, o funcţie de legătura C-numita gprgid () definite după cum se arată. The main () funcţia trebuie să fie în domeniul de aplicare la nivel mondial, şi alte funcţii ar trebui să fie în interiorul un spaţiu de nume cu numele modulului (care este mai departe, conţinute în interior un psi namespace). Consultati un C + + carte dacă nu sunteţi familiarizat cu spaţii de nume.
Funcţia întreg main () trebuie să fie capabil să se ocupe de linie de comandă argumentele cerute de PSI3 biblioteci. În special, toate PSI3 modulele trebuie să fie în măsură să treacă la funcţia psi_start () pentru argumentele de intrare de utilizator şi numele de fişiere de ieşire, cum şi un fix fişier la nivel mondial pentru a fi utilizate pentru a numi binar standard şi fişiere de date de text. (NB: nume implicite pentru intrare şi de ieşire sunt ghidul de input.dat şi output.dat., respectiv, deşi orice nume poate fi folosit) standardul actual pentru argumente de linie de comandă este pentru toate argumentele module specifice ( de exemplu, -liniştită, utilizate în detci ) înainte de intrare, ieşire, şi valorile fix. Psi_start () funcţia se aşteaptă pentru a găsi doar aceste ultime trei argumente la cele mai multe, astfel încât programator ar trebui să treacă caargv [] pointer la primul non-modulul specifice argument. Exemplul de mai sus este adecvat pentru o PSI3 modul care nu necesită în linia de comandă argumente în afară de globals de intrare / ieşire / fix. A se vedeaPSI3 module de intrare şi detci pentru mai multe exemple sofisticate. Argumentul final psi_start () este un număr întreg a căror valoare indică dacă fişierul de ieşire ar trebui să fie overwitten (1) sau anexate (0).Cele mai multe PSI3 module ar trebui să alegeţi să le adăugaţi.
The psi_start () initializeaza functia de intrare de utilizator şi fişierele de ieşire şi stabileşte variabile globale infile, outfile, şi psi_file_fix, bazate pe (în ordinea priorităţii) de mai sus de linie de comandă argumente sau variabilele de mediu PSI_INPUT, PSI_OUTPUT, şi PSI_FIX. Valoarea fix fişier la nivel mondial poate fi, de asemenea, specificate în fişierul de intrare al utilizatorului. Psi_start () Funcţia va iniţializa, de asemenea, analizorul de intrare şi să instituie un copac cuvânt cheie implicit (descris în detaliu în secţiunea 3.2 ). Acest pas este necesar, chiar dacă programul nu va face nici o parsare de intrare, deoarece unele dintre funcţionalitatea parser-ul de intrare este asumată de către libciomr.a şi libpsio.a. De exemplu, deschiderea unui fişier binar prin psio_open () (a se vedea pct. 3.3 ) impune parsarea fişierelor secţiunea de intrare al utilizatorului, astfel încât un număr de unităţi (de exemplu, 52) poate fi tradus intr-un nume de fişier. Psi_stop () funcţia inchide parser de intrare şi închide ghidul de intrare şi de ieşire fişiere.
Informaţii de sincronizare (atunci când programul porneşte şi oşte, şi cât de mult de utilizare, de sistem, şi de perete, ceas de timp o cere), pot fi imprimate pe fişierul de ieşire prin adăugarea de apeluri la tstart () şitstop () (de la libciomr.a ).
Unicul scop al funcţiei simplu gprgid () este de a oferi parser de intrare un mijloc de a determina numele a programului actual. Acest lucru permite parser-ul de intrare pentru a adăuga numele programului la copac cuvinte cheie de intrare parsarea. Această funcţie este folosită de libpsio.a, deşi funcţionalitate le oferă este foarte rar folosit.
În toate, dar cele mai triviale de module, va trebui probabil să împartă codul în mai multe fişiere. PSI3 convenţie este de a pune main () funcţia, gprgid (), cum şi alocarea de infile, outfile, şipsi_file_fix într-un fişier cu acelaşi nume ca cel al modulului (şi o extensie. cc). Alte C + + fişierele sursă ar trebui să aibă tot învelite în cadrul PSI:: MODULE_NAME namespace. Orice fişierele module specifice antet ar trebui să arate acest lucru:
<># Ifndef _psi_src_bin_MODULE_NAME_h # define _psi_src_bin_MODULE_NAME_h / / dacă aveţi nevoie de infile, outfile, şi psi_file_fix în antet, / / le includ ca aceasta: extern "C" { FILE * infile extern, * outfile; extern char * psi_file_fix; } psi spaţiul de nume { namespace MODULE_NAME { / * chestii antet merge aici * / }} / psi / Spaţiu de nume:: MODULE_NAME # endif / / header de paza >Dacă adăugaţi infile, etc, într-un fişier antet, asiguraţi-vă că acestea sunt într-o extern "C", declaraţia şi în spaţiul de nume la nivel mondial. Deoarece aceste variabile sunt definite în MODULE_NAME.cc, ar trebui să ceadă, de asemenea, aceste variabile cu externi pentru a spune compilatorului care le-au fost alocate în alt modul (de exemplu, FILE * infile extern ). Cu toate acestea, înseamnă că tu, atunci nu ar fi în măsură să includă, în care fişierul header MODULE_NAME.cc, pentru că atunci ai fi spune compilatorului că ambele infile, etc, sunt alocate în altă parte (în conformitate cu FILE extern * infile în fişierul header ) şi, de asemenea, că este alocată în fişierul curent ( FILE * infile în MODULE_NAME.cc), un contradition evident. Cele mai multe dintre oficiale PSI3 modulele folosi un truc sau undefining definirea unei variabile numiteEXTERN pentru a evita acest paradox aparent şi pentru a permite utilizarea a fişierului acelaşi antet care conţin variabilele globale (adesea numit globals.h ) în MODULE_NAME.cc şi toate celelalte C + + fişierele sursă.
Ca întotdeauna, vă sunt încurajate, pentru a evita utilizarea variabilelor globale atunci când este posibil, la toate. Se obişnuieşte să se încheie variabile care altfel ar fi la nivel mondial în structuri de date, cum ar fi MOInfo (pentru lucruri cum ar fi numărul de orbitali) şi Params (pentru parametrii specificate de utilizator). În următoarea etapă de dezvoltare a PSI, aceste structuri frecvent utilizate de date vor fi standardizate ca noul C + + obiecte pentru codul de maximă re-utilizare şi flexibilitatea.
Formatul de input.dat urmează anumite norme care ar trebui, probabil, menţionate în continuare PSI gramatica de intrare. Există o descriere de cele mai multe dintre aceste norme în PSI3 manualul de utilizare. O definiţie completă a gramaticii de intrare PSI este codat în parse.y (vezi mai jos). Pentru a citi o gramatica avem nevoie de un parser - prima componentă a libipv1.a. Apoi a identificat elemente lexicale ale input.dat (cuvinte cheie şi valori de cuvânt cheie) trebuie să fie scanate pentru zenţa `` interzise''caractere (de exemplu, un spaţiu nu poate fi o parte dintr-un şir cu excepţia cazului în şir este plasat între paranteze). Această sarcină este efectuată de către scanner lexical - a doua componentă a libipv1.a. În cele din urmă, scanate în perechi de cuvinte cheie-valoare (e) sunt stocate într-o structură ierarhică de date (un copac). Atunci când o astfel de opţiune este necesară, set de cuvinte cheie şi valori stocate este cautat pentru o întrebă şi valoarea returnată. În acest fel, opţiunile de tip diferite pot fi atribuite, adică, mai degrabă decât având o linie de numere întregi, fiecare corespunzând unei variabile program, mnemonic variabile sir de caractere poate fi analizat şi intertat în variabile program. Este, de asemenea, mai uşor să pună în aplicare opţiunile implicite, permiţând o punte de intrare mai spartan. Setul de intrare-parsare rutine în libipv1.a nu este foarte complicat de folosit, dar modul în care sunt stocate datele este oarecum dureros să înţeleagă la început.
Următoarea este o listă a numelor de fişierele sursă individuale în libipv1 şi un rezumat al conţinutului acestora. După ce că este o listă de sintaxa de funcţii specifice şi utilizarea acestora. Ultima este o ilustrare simplă de utilizare a acestei biblioteci, luat cea mai mare parte din cscf.
ip_cwk_clear nule ();
Şterge cuvântul cheie curent de lucru. Utilizat atunci când iniţializarea de intrare sau de trecerea de la o secţiune la alta (: DEFAULT şi: CSCF la: INTCO, de exemplu).
void ip_cwk_add (char * KWD);
Adaugă KWD la lista de cuvinte cheie curente de lucru. Permite parsarea de variabile în cadrul acelui cuvânt cheie din fişierul de intrare (fişierele), care a (au) fost citit sau vor fi citite în viitor cu ajutorul ip_append. Cuvântul cheie KWD poate fi doar scos din lista de cuvinte cheie curent de lucru prin purjarea intreaga lista folosind ip_cwk_clear. Trebuie să se asigure că acestea şiruri de cuvinte cheie încep cu un colon.
int ip_count (char * KWD, int count *, int n);
Numără elementele în elementul n'th al matricei KWD.
int ip_boolean (char * KWD, int * bool, int n);
Parcurge elementul n'th de KWD ca boolean (true, 1, da, false, 0, nu) în 1 sau 0 returnate în bool.
int ip_exist (char * KWD, int n);
Returnează 1 dacă elementul n'th de KWD există. Din păcate, n trebuie sa fie 0.
int ip_data (char * KWD, char * conv, void * valoare, int n [, int O1,..., int pe]);
aşteaptă pentru cuvinte cheie KWD, găseşte valoarea asociate cu acesta, îl converteşte în conformitate cu caietul de sarcini format dat în conv, şi stochează rezultatul în valoare. Reţineţi că valoarea este un void * astfel încât această rutină se poate ocupa orice tip de date, dar este responsabilitatea programatorului de a se asigura că indicatorul a trecut la această rutină este de tip pointer corespunzătoare pentru datele. Valoarea găsită de către parser de intrare depinde de valoarea n, cum şi orice argumente suplimentare opţionale. n este numărul de argumente suplimentare. Dacă n este 0, atunci nu există argumente suplimentare, şi cuvânt cheie are numai o singură valoare asociate cu aceasta. În cazul în care cuvântul cheie are o matrice asociat cu ea, atunci n este 1, iar argumentul care este o altă componentă a matrice pentru a alege. Dacă KWD specifică o serie de tablouri, atunci n este de 2, primul argument suplimentar este numărul de matrice în primul rând, şi al doilea argument este numărul elementului în cadrul acestei matrice, etc adâncime în aici, codul numeşte sscanf (a se citi, conv, valoare);, asa ca asta e adevaratul sens al variabilelor.
int ip_string (char * KWD, char ** valoare, int n, [int O1,..., int pe]);
analizează şirul asociate cu KWD îl stochează în valoare. Rolul de n argumente şi opţionale este acelaşi cu cel descris mai sus pentru ip_data ().
int ip_value (char * KWD, ip_value_t ** ip_val, int n);
Grabs secţiunea de copac cuvinte cheie la KWD şi îl stochează în ip_val pentru utilizarea programatorului - acest lucru nu este de obicei folosit, din moment ce aveţi nevoie pentru a înţelege structura de ip_value_t.
int ip_int_array (char * KWD, int * ARR, int n);
Citeşte întregi n în matrice ARR.
void ip_set_uppercase (int uc);
Seturi parsarea sensibile la caz dacă uc == 0, cred.
nule ip_initialize (FILE * in, FILE * out);
solicită yyparse (); urmate de ip_cwk_clear (); urmate de ip_internal_values ();. Aceasta rutina citeste pachetul de intrare întregul şi îl stochează în structura de cuvinte cheie pentru acces mai târziu.
nule ip_append (FILE * in, * out FILE);
acelasi lucru ca ip_initialize ();, cu excepţia acest lucru nu şterge cwk primul. Utilizate pentru parsarea-un alt fişier de intrare, cum ar fi intco.dat.
ip_done nule ();
elibereaza copac cuvinte cheie.
nule ip_print_tree (FILE * stele, ip_keyword_tree_t * copac);
afiseaza copac la stele. Dacă pomul este setat la NULL, apoi copac curent cuvântul cheie de lucru vor fi imprimate. Această funcţie este utilă pentru depanarea problemelor cu parsarea.
De la cscf.cc :
<># Include <libipv1/ip_lib.h> # include <libpsio/psio.h> int main (int argc, char * argv []) { folosind PSI Spaţiu de nume:: cscf;... psi_start (& infile, şi outfile, şi psi_file_fix, argc -1, argv +1, 0); ip_cwk_add (": CSA"); >De la scf_input.cc :
<> errcod = ip_string ("LABEL", & alabel, 0); dacă (errcod == IPE_OK) fprintf (outfile, "label =% s \ n", alabel); reordr = 0; / * aceasta setează implicit care vor fi utilizate în cazul în care utilizatorul nu a specificat acest cuvânt cheie * / errcod = ip_boolean ("reordona", & reordr, 0); dacă (reordr) { errcod = ip_count ("MOORDER", si dimensiune, 0); pentru (i = 0; i <size; i + +) { errcod = ip_data ("MOORDER", "% d", & iOrder [i], 1, i); errchk (errcod, "MOORDER"); } } second_root = 0; dacă (twocon) { errcod = ip_boolean ("SECOND_ROOT", & second_root, 0); } dacă (iopen) { errcod = ip_count ("SOCC", si dimensiune, 0); if (! errcod == IPE_OK & & size = num_ir) { fprintf (outfile, "\ matrice n SOCC este dimensiunea greşită \ n "); fprintf (outfile, "este% d, ar trebui să fie% d \ n", dimensiune, num_ir); exit (1); } ! dacă (errcod = IPE_OK) { fprintf ( outfile, "\ n încercaţi să adăugaţi câteva prietene de electroni \ n"); fprintf (outfile, "nevoie de SOCC \ n"); ip_print_tree (outfile, NULL); exit (1); } >Aproape toate PSI3 modulele trebuie să facă schimb de date cu binare brute (numite, de asemenea, `` acces direct'') fişiere. Cu toate acestea, mai degrabă decât folosind low-level C, Fortran sau funcţii, cum ar fi read ()sau a scrie (), PSI3 utilizează un sistem flexibil, dar sistemul rapid I / O, care oferă control programator si ghidul de peste organizarea şi stocarea datelor. Unele dintre caracteristicile PSI I / O de sistem, libpsio, includ:
Structura TOC de fişiere binare PSI provdes mai multe avantaje de peste mari I / O sisteme. De exemplu, poziţiile de date din cuprins sunt identificate prin şiruri de cuvinte cheie (de exemplu, "Energie nucleară Repulsion" ) şi la nivel mondial a adresa o intrare este cunoscut doar de cuprins în sine, nu la programator. Prin urmare, în cazul în care programatorul doreşte să citească sau să scrie o intrare cuprins întreg, el / ea este obligată să furnizeze numai cuvinte cheie TOC şi mărimea de intrare (în bytes) pentru a obţine date. În plus, TOC face posibilă citirea doar bucăţi de intrări TOC (spun un singur tampon de o listă mare de doi electroni integralele), prin furnizarea corespunzătoare de cuvinte cheie TOC, o dimensiune, şi o adresă de pornire în raport cu începutul TOC de intrare. Pe scurt, design-TOC ascunde toate informaţiile des structura globală a fişierului acces direct de la programator şi permite el / ea să fie ocupat doar cu structura de intrările individuale. Curentul TOC este scris la sfârşitul fişierului atunci când este închis.
Astfel, fişierul de acces direct în sine este privit ca o serie de pagini, fiecare dintre care conţine un număr identic de octeţi. Adresa la nivel mondial de la începutul anului o intrare dat este stocat pe TOC ca o pereche pagină / compensa compus din pagina de pornire şi de octet de compensare pe acea pagină în cazul în care datele reşedinţa. Pagina de intrare-relativă / compensare adrese pe care programatorul trebuie să ofere de lucru, în exact acelaşi mod, dar poziţia 0 / 0 este considerată a fi începutul intrării cuprins, mai degrabă decât la începutul fişierului.
psio_init int (void) : Înainte de orice fişiere pot fi deschise sau de bază de scriere / citire funcţiile de libpsio pot fi utilizate, datele globale necesare de către funcţii de bibliotecă trebuie să fie iniţializat folosind această funcţie.
psio_ipv1_config int (void) : Pentru biblioteca să funcţioneze în mod corespunzător, configuraţia acestuia trebuie să fie citit din fisierul de intrare sau de la utilizator psirc. fişier. Acest apel trebuie să urmeze imediatpsio_init int ();.
psio_done int (void) : Atunci când toate interacţiune cu fişierele de acces direct este completă, această funcţie este utilizată pentru a elibera memoria bibliotecii globale.
int psio_open (ULI unitate, statutul de int) : Deschide fişierul accesul direct identificate de către unitate. Starea de pavilion este un boolean utilizată pentru a indica dacă fişierul este nou (0) sau în cazul în care există deja şi este în curs de re-deschis (1). Daca este specificat in fisierul de intrare utilizatorului, fisierul va fi deschis automat ca un multi-(dungi) fişier, şi fiecare pagină de date va fi citit de la sau în scris la fiecare volum în succesiune.
int psio_close (ULI unitate, int păstra) : închide un fişier de acces direct identificate de către unitate. Drapelul păstra este un boolean utilizată pentru a indica dacă volumele fişierul ar trebui să fie eliminat (0) sau reţinute (1) după ce a fost închis.
int psio_read_entry (ULI unitate, char * cheie, char * buffer, ULI dimensiune) : Folosit pentru a citi întregul cuprins o intrare identificate de către şir tasta de unitate în matrice tampon.Numărul de octeţi care urmează să fie citit este dat de marimea, dar această valoare este utilizat numai pentru a se asigura că cererea citeşte să nu depăşească sfârşitul intrării. Dacă intrarea nu există, o eroare este tipărită pe masura, iar programul va ieşi.
int psio_write_entry (ULI unitate, char * cheie, char * buffer, ULI dimensiune) : Folosit pentru a scrie o intrare întregul cuprins idenitified de şirul tasta pentru unitate în matrice tampon.Numărul de octeţi care urmează să fie scrise este dat de marimea. În cazul în care există deja de intrare şi datele sale se suprascrise, valoarea de dimensiune este utilizată pentru a se asigura că cererea a scrie să nu depăşească sfârşitul intrării.
int psio_read (ULI unitate, char * cheie, char * buffer, ULI dimensiune, psio_address Sadd, psio_address * eadd) : Folosit pentru a citi un fragment de dimensiuni bytes de o intrare de cuprins dat identificate de cheie de la unitate în matrice tampon. Adresa de pornire este dat de Sadd şi adresa final (care este, adresa de intrare-relativă a octet următoare în fişierul) este returnat în * eadd.
psio_write int (ULI unitate, char * cheie, char * buffer, ULI dimensiune, psio_address Sadd, psio_address * eadd) : Folosit pentru a scrie un fragment de dimensiuni bytes de o intrare de cuprins dat identificate de -cheie pentru unitate în matrice tampon. Adresa de pornire este dat de Sadd şi adresa final (care este, adresa de intrare-relativă a octet următoare în fişierul) este returnat în * eadd.
Pagina de / diferenţa de perechi adresa cerute de citire cedent şi a scrie funcţiile sunt furnizate prin intermediul variabile de tipul de date psio_address, definite prin:
<> typedef struct { ULI pagina; ULI de compensare; } psio_address; > The PSIO_ZERO definit într-o macrocomandă oferă o intrare convenabil pentru pagina 0 / 0 / offset.int psio_tocprint (ULI unitate, FILE * outfile) : imprimă TOC a unităţii într-o formă uşor de citit la outfile, inclusiv cuvintele cheie de intrare şi de adrese globale de pornire / sfârşit. ( tocprint este, de asemenea, numele unei PSI3 modul de utilitate, care imprimă un fişier de cuprins la iesirea standard.)
int psio_toclen (ULI unitate, FILE * outfile) : Întoarce numărul de intrări în cuprins de unitate.
int psio_tocdel (ULI unitate, char * cheie) : Şterge intrarea cuprins corespunzătoare cheie. NB că această funcţie va şterge numai de referinţă de la intrarea de la cuprins în sine şi nu elimină datele corespunzătoare din fişierul. Prin urmare, este posibil să se introducă date "găuri" în fişierul.
int psio_tocclean (ULI unitate, char * cheie) : Şterge intrarea cuprins corespunzătoare cheie şi toate intrările ulterioare. Ca şi în cazul psio_tocdel (), această funcţie numai Sterge trimiterile de la intrarea cuprins în sine şi nu elimină datele corespunzătoare din fişierul. Această funcţie este încă în construcţie.
Interfaţa la PSI3 I / O Sistemul a fost proiectat pentru a imita că din vechiul wreadw () şi wwritw () rutine de libciomr (a se vedea următoarea secţiune a acestui manual). Tabelul de sistem introduce un cuprins cateva complicatii care utilizatorii bibliotecii trebuie să fie conştienţi de:
În această secţiune vom lua în considerare aceste biblioteci mai în detaliu.
Libchkpt.a Biblioteca este o colecţie de funcţii utilizate pentru accesarea PSI3 dosar punctul de control ( file32 ) - fişier care conţine toate informaţiile utilizate cel mai frecvent cu privire la calcul, cum ar fi geometria moleculară, set baza, factor determinant HF, etc Anterior, punctul de control Fişierul a fost un fisier in format fix, care este accesat utilizând vechiul PSI3 I / O de sistem. Cu toate acestea, acest lucru sa schimbat în primăvara anului 2002 pentru a utiliza noul libpsio.a I / O de sistem pentru a accesa fişierul punctul de control, şi este acum format liber. Aceasta este, orice programator poate adăuga conţinut la dosar la va. Vechea fişier Interfata punct de control a fost actualizat pentru a accesa noul sistem de suport I / O. Este obligatoriu ca fişierul de punctul de control este accesat prin intermediul libchkpt.a funcţiile numai.
| Argumente: | libpsio markerul statutul PSIO_OPEN_OLD; impune de asemenea ca parser-ul de intrare să fie iniţializate, astfel încât să poată deschide fişierul punct de control. |
| Returnează: | zero. Poate că acest lucru se va schimba într-o zi. |
int chkpt_close ()
închide dosarul punctul de control, eliberează memorie, etc
| Argumente: | nici unul, dar chkpt_init trebuie să fi fost deja solicitat ca aceasta să funcţioneze. |
| Returnează: | zero. Poate aceasta, de asemenea, se va schimba o zi. |
| Argumente: | nu ia argumente. |
| Returnează: | un şir de caractere, cum ar fi "CISD", sau "MCSCF" sau un denumire alte undă. |
char * chkpt_rd_label ()
Citeşte principalele eticheta fişier punctul de control.
| Argumente: | nu ia argumente. |
| Returnează: | calcul etichetă. |
char * chkpt_rd_sym_label ()
Citeşte eticheta pentru grupul de puncte.
| Argumente: | nu ia argumente. |
| Returnează: | grup de puncte de etichetă. |
| Argumente: | nu ia argumente. |
| Returnează: | o serie de etichete (siruri de caractere), care indica irreps pentru grupul de puncte, în care molecula este considerată, de _regardless_ dacă există orice orbite simetrie care transforma ca irrep. |
char ** chkpt_rd_hfsym_labs ()
Citiţi în etichetele simetrie numai pentru acele irreps care au funcţii de bază.
| Argumente: | nu ia argumente. |
| Returnează: | o serie de etichete (siruri de caractere), care indica irreps care au funcţii de bază (în bumbac comanda). Pentru apa DZ sau STO-3G, de exemplu, în |
| Argumente: | nu ia argumente. |
| Returnează: | + / - dimensionalitatea ALPHA şi a vectorilor BETA a coeficienţilor de cuplare pentru scoici deschise. |
chkpt_rd_max_am int ()
Citeşte în numărul maxim cuantic orbital de AOS în baza.
| Argumente: | nu ia argumente. |
| Returnează: | maxim de numărul cuantic orbital de AOS în baza. |
int chkpt_rd_mxcoef ()
Citeşte valoarea constantei mxcoef.
| Argumente: | nu ia argumente. |
| Returnează: | suma pătratelor a numărului de orbite simetrie pentru fiecare irrep. Acest lucru dă numărul de elemente din blocuri de simetrie non-zero SCF eigenvector. Pentru STO-3G apă mxcoef |
int chkpt_rd_nao ()
Citeşte în numărul total de orbite atomice (a se citi: funcţii carteziană Gaussian).
| Argumente: | nu ia argumente. |
| Returnează: | numărul total de orbitali atomice. |
chkpt_rd_natom int ()
Citeşte în numărul total de atomi.
| Argumente: | nu ia argumente. |
| Returnează: | numărul total de atomi. |
chkpt_rd_ncalcs int ()
Citeşte în numărul total al calculelor în dosarul checkpoint (a fost întotdeauna 1 din vechea libfile30.a, probabil încă mai este pentru moment).
| Argumente: | nu ia argumente. |
| Returnează: | numărul total de calcule în fişierul punctul de control. |
chkpt_rd_nirreps int ()
Citeşte în numărul total de rezentări ireductibile în grupul punctul în care molecula este luată în considerare.
| Argumente: | nu ia argumente. |
| Returnează: | numărul total de rezentări ireductibile. |
int chkpt_rd_nmo ()
Citeşte în numărul total de orbite moleculare (poate fi diferit de numărul de funcţii de bază).
| Argumente: | nu ia argumente. |
| Returnează: | numărul total de orbitali moleculare. |
chkpt_rd_nprim int ()
Citeşte în numărul total de funcţii primitive gaussiene (primitivele numai de atomi de independent_ _symmetry sunt numărate!).
| Argumente: | nu ia argumente. |
| Returnează: | numărul total de funcţii primitive Gaussian. |
chkpt_rd_nshell int ()
Citeşte în numărul total de scoici. De exemplu, baza DZP stabilite pentru atom de carbon (schema de contractie ) are un total de funcţii de bază 15, 15 primitive, şi 7 scoici. Cochilii de atomi de _all_ sunt numărate (nu numai din simetrie independente; compara chkpt_rd_nprim ). ![]()
| Argumente: | nu ia argumente. |
| Returnează: | numărul total de scoici. |
int chkpt_rd_nso ()
Citeşte în numărul total de simetrie-adaptată funcţii bază (a se citi: Gaussians carteziene sau sferice armonice).
| Argumente: | nu ia argumente. |
| Returnează: | numărul total de SOS. |
int chkpt_rd_nsymhf ()
Citeşte în numărul total de irreps în grupul punctul în care molecula este luată în considerare, care au non-zero, numărul de funcţii de bază. Pentru STO-3G sau apă DZ, de exemplu, aceasta este de trei, chiar dacă nirrepseste 4 (a se compara chkpt_rd_nirreps int () ).
| Argumente: | nu ia argumente. |
| Returnează: | numărul total de rezentări ireductibile cu un număr de non-zero, a funcţiilor de bază. |
chkpt_rd_num_unique_atom int ()
Citeşte în numărul de atomi de simetrie unic.
| Argumente: | nu ia argumente. |
| Returnează: | număr de atomi de simetrie unic. |
chkpt_rd_num_unique_shell int ()
Citeşte în numărul de scoici simetrie unic.
| Argumente: | nu ia argumente. |
| Returnează: | numarul de cartuse simetrie unic. |
chkpt_rd_phase_check int ()
Citeşte faza de pavilion, care este 1 în cazul în care fazele orbitale au fost verificate şi este 0 în caz contrar (doar faza de verificare ajută la asigurarea fazele arbitrară a orbite sunt consecvente de la o geometrie la alta, care ajută la ghicitul diferite sau extrapolarea scheme).
| Argumente: | nu ia argumente. |
| Returnează: | pavilion. |
int chkpt_rd_ref ()
Citeşte tipul de referinţă de pavilion în fişierul punctul de control. 0 = RHF, 1 = UHF, 2 = ROHF, 3 = TCSCF.
| Argumente: | nu ia argumente. |
| Returnează: | pavilion indicând de referinţă. |
int chkpt_rd_rottype ()
Citeşte tipul de rotor rigid molecula rezintă. 0 = asimetric, 1 = simetrice, 2 = sferice, 3 = liniare, 6 = atom.
| Argumente: | nu ia argumente. |
| Returnează: | rotor de tip rigid. |
| Argumente: | nu ia argumente. |
| Returnează: | o matrice nshell lung, care coji de hărţi de pe angmom-a ordonat să canonice (în ordinea apariţiei) ordine. |
chkpt_rd_atom_position ()
Citeşte în poziţiile de atomi de simetrie. Valorile permise sunt după cum urmează:
| Argumente: | nu ia argumente. |
| Returnează: | o serie de posturi de atomi de simetrie. |
int * chkpt_rd_clsdpi ()
Citeşte într-o matrice care are un element pentru fiecare irrep din grupul de puncte de a moleculei (nb nu doar pe cele cu un număr de non-zero, a funcţiilor de bază). Fiecare element conţine numărul de dublu ocupate MOS pentru că irrep.
| Argumente: | nu ia argumente. |
| Returnează: | numărul de MOS de două ori pe irrep ocupate. |
int * chkpt_rd_openpi ()
Citeşte într-o matrice care are un element pentru fiecare irrep din grupul de puncte de a moleculei (nb nu doar pe cele cu un număr de non-zero, a funcţiilor de bază). Fiecare element conţine numărul de MOS individual ocupate pentru că irrep.
| Argumente: | nu ia argumente. |
| Returnează: | numărul de MOS individual ocupate pe irrep. |
int * chkpt_rd_orbspi ()
Citeşte în numărul de MOS în fiecare irrep.
| Argumente: | nu ia argumente. |
| Returnează: | numărul de MOS în fiecare irrep. |
int * chkpt_rd_shells_per_am ()
Citeşte în numărul de scoici în fiecare bloc angmom.
| Argumente: | nu ia argumente. |
| Returnează: | numărul de scoici în fiecare bloc angmom. |
chkpt_rd_sloc ()
Citeşte într-o matrice de pointeri la AO primul din fiecare coajă.
| Argumente: | nu ia argumente. |
| Returnează: | Citeşte într-o serie nshell lung de pointeri la AO primul din fiecare coajă. |
chkpt_rd_sloc_new ()
Citeşte într-o matrice de pointeri la funcţia de baza prima (nu ca AO chkpt_rd_sloc nu) de la fiecare coajă.
| Argumente: | nu ia argumente. |
| Returnează: | o serie nshell lungă de pointeri la funcţia de bază de la prima fiecare coajă. |
int * chkpt_rd_snuc ()
Citeşte într-o matrice de indicatori către nucleele pe care cochilii sunt centrate.
| Argumente: | nu ia argumente. |
| Returnează: | o serie nshell lungă de indicatori către nucleele pe care cochilii sunt centrate. |
int chkpt_rd_snumg * ()
Citeşte în matrice de numere de Gaussians primitive în scoici.
| Argumente: | nu ia argumente. |
| Returnează: | o serie nshell lung a numărului de Gaussians primitive în cochilii. |
int chkpt_rd_sprim * ()
Citeşte în pointeri la primul primitive din fiecare coajă.
| Argumente: | nu ia argumente. |
| Returnează: | o serie nshell lung de pointeri la primul primitive din fiecare scoici. |
chkpt_rd_sopi ()
Citiţi în numărul de simetrie-adaptată funcţiilor de bază în fiecare bloc simetrie.
| Argumente: | nu ia argumente. |
| Returnează: | o serie nirreps lung a numărului de orbite simetrie în blocuri de simetrie. |
int * chkpt_rd_stype ()
Citeşte în număr de moment cinetic de scoici.
| Argumente: | nu ia argumente. |
| Returnează: | Returnează un tablou nshell lungă de numere momentului cinetic de scoici. |
int * chkpt_rd_symoper ()
Citiţi în matrice de cartografiere între "canonice", prin care se dispune operaţiunilor simetrie al grupului punct, iar cel definit în symmetry.h.
| Argumente: | nu ia argumente. |
| Returnează: | o matrice de cartografiere nirrep lung |
int * chkpt_rd_ua2a ()
Citiţi în matrice de cartografiere de la simetria-unic listă atom la atom lista completă.
| Argumente: | nu ia argumente. |
| Returnează: | o matrice de cartografiere num_unique_atom lung |
int * chkpt_rd_us2s ()
Citiţi în matrice de cartografiere din lista de shell-simetria unic la lista de coajă completă.
| Argumente: | nu ia argumente. |
| Returnează: | o matrice de cartografiere num_unique_shell lung |
| Argumente: | nu ia argumente. |
| Returnează: | o matrice de numere întregi. Fiecare rând corespunde la o operaţiune de simetrie special, în timp ce fiecare coloană corespunde unui anumit atom. Valoarea de TIC [2] [1], atunci, ar trebui să fie intertată în felul următor: în aplicare a operaţiunii simetrie al treilea grup de puncte de relavant, al doilea atom este plasat în locul iniţial ocupate de numărul de atom TIC [2 ] [1]. |
chkpt_rd_shell_transm int ** ()
Citeşte în matricea de transformare pentru scoici. Fiecare rând al matricei este orbita de coajă în cadrul operaţiunilor de simetrie al grupului punct.
| Argumente: | nu ia argumente. |
| Returnează: | o matrice de nshell * nirreps numere întregi. |
| Argumente: | nu ia argumente. |
| Returnează: | corelaţie de energie. |
dublu chkpt_rd_enuc ()
Citeşte în energia nucleară repulsia
| Argumente: | nu ia argumente. |
| Returnează: | centrala nucleară de la repulsia de energie. |
chkpt_rd_eref dublu ()
Citeşte în energie de referinţă (poate fi diferit de energie HF).
| Argumente: | nu ia argumente. |
| Returnează: | de referinţă de energie. |
dublu chkpt_rd_escf ()
Citeşte în HF SCF de energie.
| Argumente: | nu ia argumente. |
| Returnează: | CSA a HF de energie. |
dublu chkpt_rd_etot ()
energia totală, fie că este vorba HF, CISD, CCSD, sau orice altceva! Aceasta este funcţia de ferat să o utilizaţi pentru optimizarea geometriei prin energii, energii de imprimare în analiză, etc, deoarece această valoare este valabilă indiferent de tipul de calcul.
| Argumente: | nu ia argumente. |
| Returnează: | Total de energie. |
| Argumente: | să ia nici un argument. |
| Returnează: | o serie de _all_ de valori proprii CSA, ordonate după irrep, şi prin creşterea de energie în cadrul fiecărui irrep. (De exemplu, pentru STO-3G de apă, cele patru |
* dublu chkpt_rd_exps ()
Citeşte în exponenţi ai funcţiilor primitive Gaussian.
| Argumente: | nu ia argumente. |
| Returnează: | o serie de camere duble. |
dublu chkpt_rd_zvals * ()
Citeşte în taxe nucleare.
| Argumente: | nu ia argumente. |
| Returnează: | o matrice natom lungi de taxe nucleare (ca dublu). |
| Argumente: | int irrep, desemnează bloc simetrie dorit |
| Returnează: | o matrice pătrată a orbspi [irrep] rânduri. Vectorilor proprii sunt stocate cu indicele de coloana care indică MOS şi indicele de rând care denotă SOS: acest lucru înseamnă că scf_vector [i] [j]este contribuţia |
dublă ** chkpt_rd_ccvecs ()
Citeşte într-o matrice de rânduri care sunt ALPHA (ccvecs [0]) şi BETA (ccvecs [1]), matrici de coeficienţi de cuplare pentru scoici deschise stocate în forma triunghiulara mai mici. Coeficienţii de cuplare sunt definite NU ca în CCJRoothaan Mod Rev. Phys. 32, 179 (1960), astfel cum este menţionată în paginile manualului pentru CSCF, dar în conformitate cu Pitzer (nr de referinţă încă), şi sunt diferite ** ** de cele din Yamaguchi, Osamura, Goddard, si rezervati in Schaefer lui "derivate analitice. Metode în Initio Teoria Ab moleculară structură electronică "
Raportul dintre lui Pitzer şi convenţiilor Yamaguchi este, după cum urmează: ALPHA = 1-2 * o, BETA = 1 +4 * b, unde a şi b sunt alfa şi a lui beta pentru scoici deschise definite la pp. 69-70 de carte doctorului lui Yamaguchi.
| Argumente: | nu ia argumente. |
| Returnează: | duble ** ccvecs, într-o matrice 2 de abs (iopen) rânduri de care sunt de cuplare matrice coeficient pentru open-scoici în formă ambalate. Pentru definiţia iopen vedea chkpt_rd_iopen (). |
chkpt_rd_contr_full ()
Citeşte în coeficienţii de contracţie normalizat.
| Argumente: | nu ia argumente. |
| Returnează: | într-o matrice MAXANGMOM de numărul total de primitive (o constantă definită în???) nprim ; fiecare Gaussian primitive contribuie la numai o coajă (şi o funcţie baza, desigur), astfel încât cele mai multe dintre aceste valori sunt zero. |
dublă ** chkpt_rd_geom ()
Citeşte în geometria carteziană.
| Argumente: | nu ia argumente. |
| Returnează: | Geometria carteziană este returnat ca o matrice de dublu. Indicele rând este indicele atomică, iar coloana de direcţie este indicele cartezian (x = 0, y = 1, z = 2). Prin urmare, Geom [2] [0] ar fi x-coordonata treilea atom. |
chkpt_rd_lagr ()
chkpt_rd_alpha_lagr ()
chkpt_rd_beta_lagr ()
Citeşte într-un (RHF,
UHF,
UHF) Lagrangiana matricea în baza MO.
| Argumente: | nu ia argumente. |
| Returnează: | într-o matrice NMO de NMO. |
dublă ** chkpt_rd_scf ()
dublu ** chkpt_rd_alpha_scf ()
dublu ** chkpt_rd_beta_scf ()
Citeşte în (RHF,
UHF,
eigenvector UHF).
| Argumente: | nu ia argumente. |
| Returnează: | o matrice pătrată cu dimensiunile de NMO de NMO (a se vedea: chkpt_rd_nmo () ). Blocurile de simetrie al vectorului SCF apar pe diagonala de această matrice. |
chkpt_rd_schwartz ()
Citeşte în tabelul de maximele din Schwartz integrale (ij | ij) pentru fiecare dublet coajă.
| Argumente: | nu ia argumente. |
| Returnează: | NULL dacă nu tabel este zentă în fişierul punctul de control, într-o matrice nshell de nshell altfel. |
chkpt_rd_usotao_new ()
Citeşte într-o matrice de transformare a AO CO.
| Argumente: | nu ia argumente. |
| Returnează: | o NSO prin ONC matrice de camere duble. |
chkpt_rd_usotbf ()
Citeşte într-o funcţie de bază a matricei de transformare CO.
| Argumente: | nu ia argumente. |
| Returnează: | o NSO de NSO matrice de camere duble. |
chkpt_rd_zmat ()
Citeşte în z-matrice
| Argumente: | nu ia argumente. |
| Returnează: | struct * z_entry natom lung. |
Funcţiile anterior documentate în acest manual au fost eliminate pentru că documentaţia este acum de actualitate. Documentare al bibliotecii este acum create direct din codul sursă folosind doxygen program şi este disponibil la http://www.psicode.org/doc/libs/doxygen/html.
În contextul de programare, stil se poate referi la multe lucruri. În primul rând, se referă la formatul de cod sursa: cum să folosiţi indentarea, atunci când a adăuga comentarii, cum se nume variabile, etc se poate referi, de asemenea, la multe alte probleme, organizarea astfel de cod, modularitate, şi eficienţa. Desigur, se referă la stilistice sunt frecvent probleme individuale de gust, dar de multe ori valabilitatea şi portabilitate a codului va depinde în ultimă instanţă asupra deciziilor stilistice făcute în procesul de dezvoltare a codului. De aceea unele alegeri stilistice sunt privite ca universal rau (de exemplu, nu de prototipuri orice funcţie doar pentru că `` codul compileaza si ruleaza fin ca este'', etc.) Desigur, este uşor să nu aibă nici un stil, dar este nevoie de ani pentru a afla ceea ce face unul bun. Un stil de programare bun poate reduce timpul de depanare şi întreţinere dramatic.Pentru un pachet mare, cum ar fi PSI3, este foarte important să se adopte un stil care face codul de uşor de înţeles şi de modificarea de către alţii. Această secţiune va oferi câteva indicii pe scurt ceea ce noi considerăm a fi un stil bun în programare.
Desigur, pentru design foarte simplu de programe şi punerea în aplicare pot fi combinate şi documentaţia poate consta din o linie. Cu toate acestea, pentru programe mai complexe, se recomandă ca cele cinci etape sunt urmate. Acest lucru înseamnă că ar trebui să petreacă doar aproximativ 20-40% din codul sursă scris de timp! Experienţa noastră ne arată că, în urma acestui rezultat sistem în abordarea cea mai eficientă de programare pe termen lung.
Pentru a afla mai multe des fiecare etapă a procesului de scriere software-ul, poate doriţi să se refere la lui Stroustrup `` C + + Programming Language''carte (a 3-nn.) Ca sursă de referinţă cele mai comune, nu dedicat exclusiv pentru un singur subiect înguste. Pe langa faptul ca o descriere excelenta a C + +, acesta este, de asemenea, o introducere a scris software-ul, de asemenea. O atenţie deosebită este acordată la problemaprogramului de proiectare.
În programele C, considerăm, de asemenea, o idee bună pentru a plasa toate # include declaraţiile într-un fişier, cum ar fi includes.h, care este ulterior inclus în fiecare fişier sursă C relevante. Acest lucru este util, deoarece dacă un fişier antet nou trebuie sa fie adaugata, acesta poate fi pur şi simplu adăugate la includes.h. În plus, dacă un fişier sursă dintr-o dată trebuie să aibă acces la o variabilă globală sau prototip functie, care este deja zent într-unul dintre fişierele antet, atunci nici o schimbare trebuie să fie efectuate; fişierul header este deja inclusă. Un dezavantaj la această abordare este că fiecare fişier header este inclus în fiecare fişier sursă, care include includes.h, indiferent dacă un fişier header special, este, de fapt nevoie de faptul că fişierul sursă; acest lucru ar putea conduce la mai compila ori, dar ea nu e " probabil pentru a face o diferenţă sesizabilă, cel puţin în C. t 2
În mod similar, este util să se definească toate variabilele globale într-o singură locaţie (în fişierul programul principal, sau altceva în cadrul globals.c ), iar acestea ar trebui să fie declarat în termen de o altă locaţie standard (probabil globals.h, sau common.h ). 3 În mod similar, în cazul în care funcţiile sunt utilizate în mai multe fişiere diferite codul sursă, programator poate dorinţa de a plasa toate declaraţiile prototip funcţia într-un fişier antet singur, cu acelaşi nume ca programul sau de bibliotecă, sau, poate, numit protos.h.
Este foarte frecvente situaţiile în care buclele sunt indentate. Buclele în cadrul buclele sunt indentate încă o dată, şi aşa mai departe. Această practică este aproape universal şi de foarte mare ajutor. Programe de chimie computaţională necesită adesea mai multe bucle imbricate. Consecinţa acestui fapt este că liniile pot fi destul de lunga, ca urmare a tuturor celor spaţiile înainte de fiecare linie în bucle cel mai intim. În cazul în care liniile devin mai mult de 80 de caractere, ele sunt greu de citit într-o singură fereastră, vă rugăm să încercaţi să păstraţi liniile de la 80 de caractere sau mai puţin. Acest lucru înseamnă că ar trebui să utilizaţi aproximativ 2-4 locuri de pe nivelul de indentare.
De potrivire de bretele, şi aşa mai departe, este mai mult variabil, şi vă recomandăm să urmaţi convenţia a limbajului de programare C, prin Kernighan si Ritchie, sau poate stilul găsite în alte PSI3 module.
PSI3 programe au anumite convenţii în loc de nume de cele mai multe variabile comune, după cum se arată în tabelul 1.
| Cantitate | Variabila (e) |
| Număr de atomi de | na, natom, num_atoms |
| Numărul de atomi * 3 | natom3, num_atoms3 |
| Repulsie nucleară de energie | enuc, repnuc |
| SCF de energie | escf |
| Numărul de orbite atomice | nbfao, num_ao, NAO |
| Numărul de orbite simetrie | nbfso, num_so, NSO |
| Dimensiunea triunghiului inferior | |
| al lui AO, SO lui | nbatri, nbstri; ntri |
| Fişierul de intrare indicatorul | infile |
| Fişier de ieşire indicatorul | outfile |
| Offset matrice | ioff |
| Numărul de irreps | num_ir, nirreps |
| Open-coajă de pavilion | iopen |
| Numărul de orbite pe irrep | orbs_per_irrep, orbspi, mopi |
| Numărul de închis-cochilii | |
| pe irrep | DOCC, clsd_per_irrep, clsdpi |
| Numărul de open-cochilii | |
| pe irrep | socc, open_per_irrep, openpi |
| Orbital simetrie matrice | orbsym |
O practică care este, probabil, de ferat este de a avea un semnalizator de imprimare diferit (boolean) pentru fiecare dintre intermediarii majore folosite de un program, şi de a avea o opţiune de imprimare globală (zecimal), a căror valoare determină cantitatea de informatii afisate de imprimare pentru cantităţile specifice de imprimare fără o opţiune. Opţiunea de imprimare globală ar trebui să fie specificate de un cuvânt cheiePRINT_LVL, şi acţiunea sa ar trebui să fie ca în tabelul 2.
| 0 | Aproape nici de imprimare; care urmează să fie utilizate de către programe de conducător auto |
| cu-liniştită opţiune | |
| 1 | Imprimare obişnuită (implicit) |
| 2 | Verbose tipărire |
| 3 | Unele informaţii de depanare |
| 4 | Substanţiale informaţii de depanare |
| 5 | Tipăreşte aproape toate produsele intermediare cu excepţia cazului în matrice a mare |
| 6 | Print totul |
Acestea fiind spuse, vom argumenta împotriva comentarea excesive: nu a adauga un comentariu de fiecare data cand faceti i + + ! Acesta va face de fapt codul mai greu de citit. Fii sensibil.
Ca din primăvara anului 2002, am adoptat doxygen programului pentru a genera automat codul sursă documentare. Acest program scaneaza codul sursa si cauta coduri speciale care se spune pentru a adăuga blocul în comentariu dat la lista de documente. Programul este foarte fancy si poate genera documentaţie în om, html, latex, şi formate rtf. Fişierul psi3.dox este doxygen fişierul de configurare. Codul sursă ar trebui să fie comentat în felul următor pentru a lucra cu doxygen.
Pe primul fişier de fiecare bibliotecă defineşte un modul ``''printr-o linie de comentariu de construcţii:
<>/ *! \ Defgroup PSIO libpsio: PSI I / O Biblioteca * / > Notă semn de exclamare de mai sus - este necesar de doxygen. Linia de mai sus defineste PSIO cheie si asociatii cu titlul `` PSI I / O Biblioteca''Fiecare fişier din această grupă va avea un comentariu deosebit de formularul de mai jos.: <>/ *! ** \ fişier ** \ ingroup PSIO ** \ O scurtă descriptor scurtă a fişierului ar trebui să meargă aici ** ** O descriere mai detaliată a dosarului poate merge aici * / > Acest lucru spune doxygen ca si acest fisier ar trebui să fie documentate, ar trebui să fie adăugat la lista de fişiere documentate, şi face parte din PSIO grup. A nu se pune numele fişierului real după fişierul directivă, deoarece versiunile actuale de doxygen au probleme atunci când apar nume de fişiere duplicat în module diferite. Necompletarea filename după fişierul directivă permite doxygen a crea un nume de fişier unic utilizând o parte din calea de fişier.Toate funcţiile trebuie să fie comentat ca în următorul text:
<>/ *! ** PSIO_CLOSE ():. închide un fişier PSI acces direct multi- ** ** \ unitate param = unitate de numărul PSI utilizate pentru a identifica fişierul pe toate citească. ** şi a scrie funcţiile ** \ param păstra = booleene pentru a indica dacă fişierul ar trebui să fie eliminat (0) sau ** reţinute (1). ** ** Întoarce: returnează întotdeauna 0 ** ** \ ingroup PSIO * / int psio_close (ULI unitate, int păstreze)... > Aceasta va adăuga funcţia psio_close la lista, se asociază cu PSIO modulul, şi să definească diferite argumente.Vă rugăm să reţineţi: În plus faţă de lista cu toţi parametrii şi valorile returnate, este foarte valoros pentru a explica ceea ce funcţia de fapt, nu. Adaugă această explicaţie imediat după numele funcţiei (a se vedea mai sus).Această explicaţie ar putea fi câteva cuvinte, sau un întreg paragraf, după cum este necesar.
Este posibil să includă formule în documentaţia doxygen şi pentru a le în mod corespunzător atunci când formatat de ieşire pentru a HTML sau LaTeX. În cazul în care formula apare în textul de funcţionare a unui comentariu doxygen, încadraţi în termen de o pereche de
f $ comenzi, şi formataţi-l în conformitate cu normele LaTeX. Pentru a face formula centrată pe o linie nouă, încadraţi în cadrul
f [ şi
f]. În cazul în care formula este să fie într-un alt mediu decât modul matematice simple (de exemplu, un eqnarray, apoi începe cu mediul
f} {mediului şi se încheie cu
f}, în cazul în care mediul este ceva de genul * eqnarray. Conform documentaţiei doxygen, programul poate avea probleme de recuperare de la tastare în formlas, şi pentru a scăpa de o greşeală de scriere într-o formulă poate fi necesară pentru a elimina fişierul formula.repository din directorul HTML.
Makefiles constau din norme, care descrie modul de a efectua comenzi. De exemplu, o regulă s-ar putea explica cum de a compila un fişier sursă singur, sau cum să legătură într-toate fişierele obiect în executabil, sau, poate, cum pentru a curăţa toate fişierele obiect. O regulă are forma următoare
<>ţintă: dependenţe comanda comanda... > Ţintă este numele de regulă, de exemplu, numele de program sau fişier care urmează să fie elaborate. Prima regula dată în Makefile este implicit. Dependenţele sunt numele de fişiere (de multe ori nume de alte obiective, cum şi) pe care construcţia obiectivului depinde. Un obiectiv special, nu trebuie neapărat să aibă dependenţe. Comenzile sunt comenzile efective care urmează să fie executat momentul în care toate dependenţele sunt complete. Reţineţi că un <Tab> trebuie să fie utilizate pentru a liniuţă comenzile sub numele ţintă; dacă utilizaţi spaţii sau nu liniuţă veţi primi un mesaj (nu este pe deplin clar) de eroare. Makefile e poate conţine, de asemenea, definiţiile variabilă pentru a face fişierul poate mai simplu.Ca un exemplu, luaţi în considerare Makefile în. fişierul asociat cu cscf :
<>SRCDIR = @ @ SRCDIR VPATH = @ @ SRCDIR includ.. / MakeVars PSILIBS =-lPSI_file30-lPSI_chkpt-lPSI_iwl-lPSI_psio-lPSI_ciomr-lPSI_ipv1 TRUESRC = \ cscf.c cleanup.c dft_inputs.c diis.c dmat.c \ dmat_2. c ecalc.c errchk.c findit.c \ formg2.c formgc.c formgo.c form_vec.c gprgid.c init_scf.c \ packit_c.c packit_o.c rdone.c rdtwo.c rotate_vector.c scf_input.c \ scf_iter c scf_iter_2.c schmit.c sdot.c shalf.c check_rot.c phases.c \. guess.c sortev.c occ_fun.c init_uhf.c cmatsplit.c dmatuhf.c \ findit_uhf.c uhf_iter.c schmit_uhf.c diis2_uhf c formg_direct.c \. orb_mix.c BINOBJ = $ (TRUESRC:% c =% o..) alloc = includ.. / MakeRules ifneq ($ (DODEPEND), nr) $ (BINOBJ:..% o =% d ): $ (DEPENDINCLUDE) includ $ (BINOBJ: o% =% d).. endif install_man:: cscf.1 $ (MKDIRS) $ (Mandir) / man1 $ (INSTALL_INCLUDE) $ ^ $ (Mandir) / man1 >@ @ String directivele spune configura script în cazul în care pentru a insera anumite variabile este a determinat din sistem. Acest Makefile de intrare include, de asemenea, două externe Makefile s, MakeVars şiMakeRules, ambele care sunt în directorul părinte. Aceste fişiere conţin (nu în mod surprinzător) variabile numeroase necesar (de exemplu, numele compilatorului C locale) şi de norme (de exemplu, cum de a genera modulul propriu-zis) pentru compilarea şi instalarea de cscf. Fisiere similare există pentru bibliotecile PSI, de asemenea. Vă recomandăm să programatorului petrece ceva timp studiind PSI Makefile structura.
Acum sunteţi gata pentru a lucra la cod. Modificări la fişierele sursă (inclusiv Makefile ar trebui să fie făcute la fişierele din $ PSI3/src/bin/great_code şi toate compilaţii trebuie să se desfăşoare în $ fix / src / bin / great_code.
Cele mai multe depanatoare interactive permit programator pentru a specifica mai multe directoare codul sursă căutare folosind simplu de linie de comandă de opţiuni. De exemplu, dacă cineva ar fi depanarea cscfprogramului şi aveau nevoie de acces la libciomr.a codul biblioteca sursă în plus faţă de faptul că de cscf, se poate folosi gdb e `` dir comandă''pentru a căuta mai multe directoare de cod sursă:
<>dir \ $ PSI / src / lib / libciomr > În plus, comenzile pot fi plasate în ghidul de $ HOME /.gdbinit fişier. În dbx, `` utilizarea''comanda specifică directoare multiple sursă.Reţineţi, de asemenea, faptul că documentaţia completă ar trebui să includă, de asemenea, referiri la orice publicaţii relevante la care codul se poate baza.
Dacă aţi adăugat doar un nou modul pentru efectuarea de, să zicem cu dispersie multireference cuplate, şi doriţi să adăugaţi un caz test pentru suita de teste curent, aici este ceea ce trebuie să faceţi.
Vă rugăm să contactaţi unul dintre autorii de PSI3 înainte de a face orice modificări majore sau dacă aveţi o problemă la adăugarea unui caz nou test. Amintiţi-vă, dacă tot nu, citiţi codul sursă.
Ceea ce urmează este o listă de elemente de construcţii, care ar trebui să fie păstrate în minte în timp ce în curs de dezvoltare cod PSI.
Psi utilizează mai multe fişiere text pentru a stoca anumite tipuri de informaţii. Stocare a informaţiilor în fişiere de text face mult mai uşor pentru utilizatori să inspecteze şi să manipuleze aceste informaţii, cu condiţia ca ghidul de înţelege formatul de fişier pe care. În următoarele descrieri format de fişier, voi folosi notaţia
şi
pentru a indica x, y şi z coordonatele de nucleu i, respectiv,
va indica
coordona interne, şi E se va indica suma de energie electronice şi energia nucleară repulsie.
Un format vectorized care este adecvată pentru rutine în libipv1 iomr sau este angajat în geom.dat În general, prima linie de geom.dat este
<>%% > Deşi acest lucru nu afectează rutine parsarea în libipv1, sau la oricare dintre programele comune care citeşte geom.dat (de exemplu rgeom sau ugeom ), unele PSI2 module ( bmat, etc) de aşteptat această linie şi ar încurca până geom.dat în cazul în care nu este zent. geom.dat au în mod frecvent mai multe intrări, cu cel mai de sus fiind adăugarea cea mai recentă de către bmat.Format: n = numărul de atomi.
![]() |
(1) |
Acest fişier conţine matricea de forţă constantă produsă de optking sau intder95. Deoarece matricea este simetrică forţă constantă, doar diagonală mai mică este stocat aici. Matricea forţă constantă poate fi rezentat în coordonate carteziene, fie interne sau, în funcţie de ce opţiuni au fost utilizate atunci când intder95 fost executaţi pentru a produce fconst.dat. optking este programul care foloseste fconst.dat cel mai frecvent, şi se supune că matricea forţă constantă va fi, în termeni de coordonate interne, astfel cum sunt definite în input.dat sau intco.dat. Din acest motiv, este cel mai bine este de a avea intder95 produce o fconst.datîn coordonate interne. Ordinea de coordonate interne este determinată de ordinea stabilită în input.dat sau intco.dat. Simetrică în totalitate coordonatele sunt pe primul loc, urmat de toate coordonatele asimetrice.
În următorul format,
este forta constanta pentru coordonarea internă
şi este forta constanta pentru deplasarea mixt de coordonate interne i şi j. ![]()
Format: n = numărul total de coordonate interne în intco.dat sau input.dat.
![]() |
(2) |
![]() |
(3) |
Numărul de atomi ( N ), energia totală astfel cum a zis de undă finală, geometrie carteziene, degradeuri carteziene, taxele atomice ( Z
) şi o etichetă sunt toate cuprinse în file11. Natura exactă a etichetei depinde de tipul de undă pentru care gradientul a fost calculată. Prima parte a etichetei este determinată de cuvântul cheie etichetă în input.dat. Dacă un gradient de CSA se execută, apoi tipul de calcul ( calctype ), şi tipul de instrumente financiare derivate ( dertype ) va apărea, de asemenea. Dacă un gradient corelat a fost rulat, calctype [CI, CCSD, sau CCSD (T)] şi tipul de instrumente financiare derivate (FIRST) apar. file11 au în mod frecvent mai multe intrări, cu intrarea ultima fiind cele mai recente plus de cints-deriv1.
Format:
![]() |
(4) |
Valorile interne coordoneze şi gradienţi, numărul de atomi ( n ), iar energia totală ( E ), poate fi găsit în file12. file12 este produsă de intder95, care poate converti degradeuri carteziene în degradeuri interne. În general, file12 va avea mai multe înregistrări, cu fiecare intrare corespunde o intrare în file11 de interes.
Format:
![]() |
(5) |
Format:
![]() |
(6) |
Matricea Hessian carteziene se găseşte în file15. Prima linie a acestui fişier dă numărul de atomi ( n ) şi, în cazul în care sunteţi curioşi, de şase ori numărul de atomi ( sixtimesn ).
Format:
![]() |
(7) |
Format:
![]() |
(8) |
Format:
![]() |
(9) |
Format:
![]() |
(10) |
Acest document a fost generat folosind LaTeX 2 HTML versiunilor traducator 2002-2-1 (1.71)
Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, unitate de învăţare pe calculator, Universitatea din Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Departamentul de Matematică, Universitatea Macquarie, Sydney.
Argumentele au fost în linie de comandă: latex2html -tmp / tmp-dir / home/users/crawdad/src/psi-3-4/objdir-diadem-gcc/doc/progman/html-external_file / home / users / crawdad / src / psi-3-4/objdir-diadem-gcc/doc/progman/progman-mkdir-local_icons-split 0 / home/users/crawdad/src/psi-3-4/doc/progman/progman.tex
Traducere a fost iniţiată de către T. Daniel Crawford pe 2009-02-16