2
/**********************************************************************************************************
3
Copyright (c) 2002-2012 Abdul-Rahman Allouche. All rights reserved
5
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
6
documentation files (the Gabedit), to deal in the Software without restriction, including without limitation
7
the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
8
and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
10
The above copyright notice and this permission notice shall be included in all copies or substantial portions
13
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
14
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
15
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
16
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17
DEALINGS IN THE SOFTWARE.
18
************************************************************************************************************/
20
#include "../../Config.h"
21
#include "GlobalOrb.h"
22
#include "../Utils/AtomsProp.h"
23
#include "../Utils/UtilsInterface.h"
24
#include "../Utils/Utils.h"
25
#include "../Utils/Zlm.h"
26
#include "../Utils/Constants.h"
27
#include "../Geometry/GeomGlobal.h"
32
#include "GeomOrbXYZ.h"
33
#include "AtomicOrbitals.h"
34
#include "StatusOrb.h"
37
#include "GeomOrbXYZ.h"
41
/********************************************************************************/
44
GABEDIT_ORBLOCALTYPE_BOYS=0,
45
GABEDIT_ORBLOCALTYPE_EDMISTON,
46
GABEDIT_ORBLOCALTYPE_PIPEK,
47
GABEDIT_ORBLOCALTYPE_UNKNOWN
48
} GabEditOrbLocalType;
52
GABEDIT_ORBTYPE_ALPHA = 0,
54
GABEDIT_ORBTYPE_MOLECULAR,
55
GABEDIT_ORBTYPE_MCSCF,
56
GABEDIT_ORBTYPE_EIGENVECTORS,
57
GABEDIT_ORBTYPE_BOYS_ALPHA,
58
GABEDIT_ORBTYPE_BOYS_BETA,
60
GABEDIT_ORBTYPE_EDMISTON_ALPHA,
61
GABEDIT_ORBTYPE_EDMISTON_BETA,
62
GABEDIT_ORBTYPE_EDMISTON,
63
GABEDIT_ORBTYPE_PIPEK_ALPHA,
64
GABEDIT_ORBTYPE_PIPEK_BETA,
65
GABEDIT_ORBTYPE_PIPEK,
67
/********************************************************************************/
68
static gboolean sphericalBasis = TRUE;
69
/********************************************************************************/
70
static void get_charges_from_nbo_output_file(FILE* file,gint nAtoms)
72
/* charges not available in a nbo file. I set it to 0.0 */
75
GeomOrb[i].partialCharge = 0.0;
77
/********************************************************************************/
78
static gboolean goToLine(FILE* file,char* nextString)
83
if(!fgets(t,BSIZE,file))break;
84
if (strstr(t,nextString)) return TRUE;
88
/********************************************************************************/
89
static void setTitle(FILE* file)
95
set_label_title("",0,0);
99
if(fgets(t,BSIZE,file))
100
if(fgets(t,BSIZE,file))
101
set_label_title(t,0,0);
103
/********************************************************************************/
104
static gboolean read_geomorb_nbo_file_geom(gchar *fileName)
113
static gchar t[BSIZE];
114
gint nAtoms, nShell, nExp;
116
if ((!fileName) || (strcmp(fileName,"") == 0))
118
Message(_("Sorry\n No file selected"),_("Error"),TRUE);
122
file = FOpen(fileName, "rb");
125
Message(_("Sorry\nI cannot open this file"),_("Error"),TRUE);
128
if(!goToLine(file,"--------")) return FALSE;
129
if(!fgets(t,BSIZE,file)) return FALSE;
130
sscanf(t,"%d %d %d",&nAtoms,&nShell,&nExp);
131
if(!goToLine(file,"--------")) return FALSE;
132
if(nAtoms<1) return FALSE;
134
GeomOrb=g_malloc(nAtoms*sizeof(TypeGeomOrb));
137
tmp = get_name_file(fileName);
138
set_status_label_info(_("File name"),tmp);
140
set_status_label_info(_("File type"),"NBO");
141
set_status_label_info(_("Geometry"),_("Reading"));
144
for(k=0;k<nAtoms;k++)
146
if(!fgets(t,BSIZE,file)) break;
147
sscanf(t,"%d %lf %lf %lf",&z, &GeomOrb[j].C[0], &GeomOrb[j].C[1], &GeomOrb[j].C[2]);
148
if(z<=0) GeomOrb[j].Symb=g_strdup("X");
149
else GeomOrb[j].Symb=get_symbol_using_z(z);
150
if(uni==1) for(i=0;i<3;i++) GeomOrb[j].C[i] *= ANG_TO_BOHR;
151
GeomOrb[j].Prop = prop_atom_get(GeomOrb[j].Symb);
152
GeomOrb[j].nuclearCharge = get_atomic_number_from_symbol(GeomOrb[j].Symb);
153
GeomOrb[j].variable = TRUE;
158
if(k==nAtoms) Ncenters = nAtoms;
159
if(Ncenters !=0) get_charges_from_nbo_output_file(file,Ncenters);
164
sprintf(t,_("Sorry, I can not read this format from '%s' file\n"),fileName);
165
Message(t,_("Error"),TRUE);
166
set_status_label_info(_("File name"),_("Nothing"));
167
set_status_label_info(_("File type"),_("Nothing"));
168
set_status_label_info(_("Mol. Orb."),_("Nothing"));
179
if(Type[i].Ao != NULL)
181
for(j=0;j<Type[i].Norb;j++)
183
if(Type[i].Ao[j].Ex != NULL) g_free(Type[i].Ao[j].Ex);
184
if(Type[i].Ao[j].Coef != NULL) g_free(Type[i].Ao[j].Coef);
189
if(Type) g_free(Type);
191
Type = g_malloc(Ntype*sizeof(TYPE));
192
for(i=0;i<Ncenters;i++)
194
GeomOrb[i].NumType = i;
195
Type[i].Symb=g_strdup(GeomOrb[i].Symb);
196
Type[i].N=GetNelectrons(GeomOrb[i].Symb);
206
/**********************************************/
207
static void DefineNBOSphericalBasis()
223
for(i=0;i<Ncenters;i++)
225
for(j=0;j<Type[GeomOrb[i].NumType].Norb;j++)
227
L=Type[GeomOrb[i].NumType].Ao[j].L;
232
temp = g_malloc(NOrb*sizeof(CGTF));
235
for(i=0;i<Ncenters;i++)
236
for(j=0;j<Type[GeomOrb[i].NumType].Norb;j++)
238
L =Type[GeomOrb[i].NumType].Ao[j].L;
239
/* Debug("L=%d \n",L);*/
241
/*Debug("L =%d \n",L);*/
254
for(kl = klbeg;(klbeg == 0 && kl<=klend) || (klbeg == L && kl>=klend);kl +=klinc)
256
if(kl!=0) inc = 2*kl;
258
for(M=kl;M>=-kl;M -=inc)
260
/*Debug("L =%d kl=%d M=%d \n",L,kl,M);*/
264
temp[k].numberOfFunctions=Stemp.numberOfCoefficients*Type[GeomOrb[i].NumType].Ao[j].N;
266
/* Debug("M=%d N=%d\n",M,temp[k].N);*/
267
temp[k].Gtf =g_malloc(temp[k].numberOfFunctions*sizeof(GTF));
269
for(N=0;N<Type[GeomOrb[i].NumType].Ao[j].N;N++)
270
for(n=0;n<Stemp.numberOfCoefficients;n++)
273
temp[k].Gtf[Nc].Ex = Type[GeomOrb[i].NumType].Ao[j].Ex[N];
274
temp[k].Gtf[Nc].Coef = Type[GeomOrb[i].NumType].Ao[j].Coef[N]*Stemp.lxyz[n].Coef;
277
temp[k].Gtf[Nc].C[c] = GeomOrb[i].C[c];
278
temp[k].Gtf[Nc].l[c] = Stemp.lxyz[n].l[c];
286
for(i=0;i<NAOrb;i++) g_free(AOrb[i].Gtf);
290
if(SAOrb) g_free(SAOrb);
292
DefineAtomicNumOrb();
295
/********************************************************************************/
296
static void DefineNBOCartBasis()
301
gint *l[3]={NULL,NULL,NULL};
305
for(i=0;i<Ncenters;i++)
307
for(j=0;j<Type[GeomOrb[i].NumType].Norb;j++)
309
L=Type[GeomOrb[i].NumType].Ao[j].L;
310
NAOrb += (L+1)*(L+2)/2;
314
AOrb = g_malloc(NAOrb*sizeof(CGTF));
315
if(SAOrb) g_free(SAOrb);
319
for(i=0;i<Ncenters;i++)
320
for(j=0;j<Type[GeomOrb[i].NumType].Norb;j++)
322
L = Type[GeomOrb[i].NumType].Ao[j].L;
328
l[m] = g_malloc((L+1)*(L+2)/2*sizeof(gint));
334
l[0][m] = 1;l[1][m] = 0;l[2][m] = 0; /* X */
336
l[0][m] = 0;l[1][m] = 1;l[2][m] = 0; /* Y */
338
l[0][m] = 0;l[1][m] = 0;l[2][m] = 1; /* Z */
342
l[0][m] = 2;l[1][m] = 0;l[2][m] = 0; /* XX */
344
l[0][m] = 0;l[1][m] = 2;l[2][m] = 0; /* YY */
346
l[0][m] = 0;l[1][m] = 0;l[2][m] = 2; /* ZZ */
348
l[0][m] = 1;l[1][m] = 1;l[2][m] = 0; /* XY */
350
l[0][m] = 1;l[1][m] = 0;l[2][m] = 1; /* XZ */
352
l[0][m] = 0;l[1][m] = 1;l[2][m] = 1; /* YZ */
356
l[0][m] = 3;l[1][m] = 0;l[2][m] = 0; /* XXX */
358
l[0][m] = 0;l[1][m] = 3;l[2][m] = 0; /* YYY */
360
l[0][m] = 0;l[1][m] = 0;l[2][m] = 3; /* ZZZ */
362
l[0][m] = 2;l[1][m] = 1;l[2][m] = 0; /* XXY */
364
l[0][m] = 2;l[1][m] = 0;l[2][m] = 1; /* XXZ */
366
l[0][m] = 1;l[1][m] = 2;l[2][m] = 0; /* YYX */
368
l[0][m] = 0;l[1][m] = 2;l[2][m] = 1; /* YYZ */
370
l[0][m] = 1;l[1][m] = 0;l[2][m] = 2; /* ZZX */
372
l[0][m] = 0;l[1][m] = 1;l[2][m] = 2; /* ZZY */
374
l[0][m] = 1;l[1][m] = 1;l[2][m] = 1; /* XYZ */
377
m=0; l[0][m] = 4;l[1][m] = 0;l[2][m] = 0; /* XXXX */
378
m++; l[0][m] = 0;l[1][m] = 4;l[2][m] = 0; /* YYYY */
379
m++; l[0][m] = 0;l[1][m] = 0;l[2][m] = 4; /* ZZZZ */
380
m++; l[0][m] = 3;l[1][m] = 1;l[2][m] = 0; /* XXXY */
381
m++; l[0][m] = 3;l[1][m] = 0;l[2][m] = 1; /* XXXZ */
382
m++; l[0][m] = 1;l[1][m] = 3;l[2][m] = 0; /* YYYX */
383
m++; l[0][m] = 0;l[1][m] = 3;l[2][m] = 1; /* YYYZ */
384
m++; l[0][m] = 1;l[1][m] = 0;l[2][m] = 3; /* ZZZX */
385
m++; l[0][m] = 0;l[1][m] = 1;l[2][m] = 3; /* ZZZY */
386
m++; l[0][m] = 2;l[1][m] = 2;l[2][m] = 0; /* XXYY */
387
m++; l[0][m] = 2;l[1][m] = 0;l[2][m] = 2; /* XXZZ */
388
m++; l[0][m] = 0;l[1][m] = 2;l[2][m] = 2; /* YYZZ */
389
m++; l[0][m] = 2;l[1][m] = 1;l[2][m] = 1; /* XXYZ */
390
m++; l[0][m] = 1;l[1][m] = 2;l[2][m] = 1; /* YYXZ */
391
m++; l[0][m] = 1;l[1][m] = 1;l[2][m] = 2; /* ZZXY */
395
for(l3=Type[GeomOrb[i].NumType].Ao[j].L;l3>=0;l3--)
396
for(l2=Type[GeomOrb[i].NumType].Ao[j].L-l3;l2>=0;l2--)
398
l1 = Type[GeomOrb[i].NumType].Ao[j].L-l2-l3;
405
for(m=0;m<(L+1)*(L+2)/2;m++)
411
AOrb[k].numberOfFunctions=Type[GeomOrb[i].NumType].Ao[j].N;
412
AOrb[k].NumCenter = i;
413
AOrb[k].Gtf =g_malloc(AOrb[k].numberOfFunctions*sizeof(GTF));
414
for(n=0;n<AOrb[k].numberOfFunctions;n++)
416
AOrb[k].Gtf[n].Ex = Type[GeomOrb[i].NumType].Ao[j].Ex[n];
417
AOrb[k].Gtf[n].Coef = Type[GeomOrb[i].NumType].Ao[j].Coef[n];
418
AOrb[k].Gtf[n].C[0] = GeomOrb[i].C[0];
419
AOrb[k].Gtf[n].C[1] = GeomOrb[i].C[1];
420
AOrb[k].Gtf[n].C[2] = GeomOrb[i].C[2];
421
AOrb[k].Gtf[n].l[0] = l1;
422
AOrb[k].Gtf[n].l[1] = l2;
423
AOrb[k].Gtf[n].l[2] = l3;
430
DefineAtomicNumOrb();
433
/********************************************************************************/
434
static gboolean read_basis_from_a_nbo_output_file(gchar *fileName)
436
static gchar t[BSIZE];
438
gint nAtoms = 0, nShell = 0, nExp = 0;
439
gdouble* expo = NULL;
440
gdouble** coefs = NULL;
441
gint* numCenters = NULL;
443
gint** numTypes = NULL;
444
gint* iPointers = NULL;
455
if ((!fileName) || (strcmp(fileName,"") == 0))
457
Message(_("Sorry No file selected\n"),_("Error"),TRUE);
461
file = FOpen(fileName, "rb");
465
sprintf(buffer,_("Sorry, I can not open '%s' file\n"),fileName);
466
Message(buffer,_("Error"),TRUE);
469
if(!goToLine(file,"--------")) return FALSE;
470
if(!fgets(t,BSIZE,file)) return FALSE;
471
sscanf(t,"%d %d %d",&nAtoms,&nShell,&nExp);
472
if(nAtoms!=Ncenters || nAtoms <= 0 || nShell <= 0 || nExp <= 0) return FALSE;
473
if(!goToLine(file,"--------")) return FALSE;
474
if(!goToLine(file,"--------")) return FALSE;
476
numCenters = g_malloc(nShell*sizeof(gint));
477
nOrbs = g_malloc(nShell*sizeof(gint));
478
numTypes = g_malloc(nShell*sizeof(gint*));
479
for(j=0;j<nShell;j++) numTypes[j] = g_malloc(nShell*sizeof(gint));
480
iPointers = g_malloc(nShell*sizeof(gint));
481
nGauss = g_malloc(nShell*sizeof(gint));
484
for(is = 0; is<nShell; is++)
486
//fgets(t,BSIZE,file);
488
if(1!=fscanf(file,"%d",&numCenters[is])) break;
490
if(1!=fscanf(file,"%d",&nOrbs[is])) break;
491
if(1!=fscanf(file,"%d",&iPointers[is])) break;
492
if(1!=fscanf(file,"%d",&nGauss[is])) break;
493
for(k=0;k<nOrbs[is];k++)
495
if(1!=fscanf(file,"%d",&numTypes[is][k]))break;
496
gint l = numTypes[is][k]/100;
499
if(k!=nOrbs[is]) break;
503
if(numCenters) g_free(numCenters);
504
if(nOrbs) g_free(nOrbs);
505
if(numTypes) for(j=0;j<nShell;j++) if(numTypes[j]) g_free(numTypes[j]);
506
if(numTypes) g_free(numTypes);
507
if(iPointers) g_free(iPointers);
508
if(nGauss) g_free(nGauss);
511
if(!goToLine(file,"--------"))
513
if(numCenters) g_free(numCenters);
514
if(nOrbs) g_free(nOrbs);
515
if(numTypes) for(j=0;j<nShell;j++) if(numTypes[j]) g_free(numTypes[j]);
516
if(numTypes) g_free(numTypes);
517
if(iPointers) g_free(iPointers);
518
if(nGauss) g_free(nGauss);
522
expo = g_malloc(nExp*sizeof(gdouble));
523
coefs = g_malloc((lmax+1)*sizeof(gdouble*));
526
coefs[i] = g_malloc(nExp*sizeof(gdouble));
527
for(j=0;j<nExp;j++) coefs[i][j] = 0.0;
529
for(ie = 0; ie<nExp; ie++)
531
fscanf(file,"%lf",&expo[ie]);
533
if(!fgets(t,BSIZE,file))
535
if(numCenters) g_free(numCenters);
536
if(nOrbs) g_free(nOrbs);
537
if(numTypes) for(j=0;j<nShell;j++) if(numTypes[j]) g_free(numTypes[j]);
538
if(numTypes) g_free(numTypes);
539
if(iPointers) g_free(iPointers);
540
if(nGauss) g_free(nGauss);
541
if(expo) g_free(expo);
544
for(i=0;i<=lmax;i++) if(coefs[i]) g_free(coefs[i]);
552
for(ie = 0; ie<nExp; ie++)
553
if(1!=fscanf(file,"%lf",&coefs[i][ie])) break;
554
if(!fgets(t,BSIZE,file)) break; /* f orb is not always available */
556
for(i=0;i<Ncenters;i++)
561
for(is = 0; is<nShell; is++)
566
for(k=1;k<nOrbs[is];k++)
567
if(numTypes[is][k]/100 != numTypes[is][k-1]/100) Type[i].Norb++;
570
for(i=0;i<Ncenters;i++)
572
Type[i].Ao=g_malloc(Type[i].Norb*sizeof(AO));
573
for(j=0;j< Type[i].Norb;j++)
575
Type[i].Ao[j].Ex = NULL;
576
Type[i].Ao[j].Coef = NULL;
579
for(is = 0; is<nShell; is++)
581
gint ncont = nGauss[is];
582
if(i != numCenters[is]) continue;
583
for(k=0;k<nOrbs[is];k++)
585
gint l = numTypes[is][k]/100;
586
if(k>0 && numTypes[is][k]/100 == numTypes[is][k-1]/100) continue;
588
Type[i].Ao[j].N = ncont;
589
Type[i].Ao[j].Ex=g_malloc(Type[i].Ao[j].N*sizeof(gdouble));
590
Type[i].Ao[j].Coef=g_malloc(Type[i].Ao[j].N*sizeof(gdouble));
591
for(jj=0;jj<Type[i].Ao[j].N;jj++)
593
gint jjP = iPointers[is] - 1 + jj;
594
Type[i].Ao[j].Ex[jj] = expo[jjP];
595
Type[i].Ao[j].Coef[jj] = coefs[l][jjP];
603
if(numCenters) g_free(numCenters);
604
if(nOrbs) g_free(nOrbs);
605
if(expo) g_free(expo);
608
for(i=0;i<=lmax;i++) if(coefs[i]) g_free(coefs[i]);
613
for(j=0;j<nShell;j++) if(numTypes[j]) g_free(numTypes[j]);
614
if(numTypes) g_free(numTypes);
615
if(iPointers) g_free(iPointers);
616
if(nGauss) g_free(nGauss);
621
/********************************************************************************/
622
/* typeobr = ALPHA or BETA */
623
static gboolean read_orbitals_in_nbo_file_alpha_or_beta(gchar *fileName,gint nAlpha, gint nBeta, gchar* typeOrb)
629
gdouble **CoefOrbitals;
630
gdouble *EnerOrbitals;
635
if ((!fileName) || (strcmp(fileName,"") == 0))
637
Message(_("Sorry No file selected\n"),_("Error"),TRUE);
641
file = FOpen(fileName, "rb");
645
sprintf(buffer,_("Sorry, I can not open '%s' file\n"),fileName);
646
Message(buffer,_("Error"),TRUE);
653
if(strstr(t," MOs ")) om = TRUE;
656
if(!goToLine(file,"--------")) return FALSE;
657
if(!goToLine(file,typeOrb)) return FALSE;
660
CoefOrbitals = CreateTable2(NOrb);
661
EnerOrbitals = g_malloc(NOrb*sizeof(gdouble));
662
SymOrbitals = g_malloc(NOrb*sizeof(gchar*));
669
if(1!=fscanf(file,"%lf",&dum))break;
670
if(om) CoefOrbitals[i][j] = dum;
671
else CoefOrbitals[j][i] = dum;
675
for(k=j;k<NOrb;k++) SymOrbitals[k] = g_strdup("DELETED");
678
SymOrbitals[j] = g_strdup("UNK");
681
printf("norb read=%d\n",j);
683
if(strstr(typeOrb,"ALPHA"))
685
CoefAlphaOrbitals = CoefOrbitals;
686
EnerAlphaOrbitals = EnerOrbitals;
687
SymAlphaOrbitals = SymOrbitals;
688
OccAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble));
689
for(i=0;i<nAlpha;i++) OccAlphaOrbitals[i] = 1.0;
690
for(i=nAlpha;i<NOrb;i++) OccAlphaOrbitals[i] = 0.0;
693
CoefBetaOrbitals = CoefOrbitals;
694
EnerBetaOrbitals = EnerOrbitals;
695
OccBetaOrbitals = OccAlphaOrbitals;
696
SymBetaOrbitals = SymOrbitals;
707
/********************************************************************************/
708
static gboolean read_orbitals_in_nbo_file_all(gchar *fileName,gint nAlpha, gint nBeta)
714
gdouble **CoefOrbitals;
715
gdouble *EnerOrbitals;
720
if ((!fileName) || (strcmp(fileName,"") == 0))
722
Message(_("Sorry No file selected\n"),_("Error"),TRUE);
726
file = FOpen(fileName, "rb");
730
sprintf(buffer,_("Sorry, I can not open '%s' file\n"),fileName);
731
Message(buffer,_("Error"),TRUE);
738
if(strstr(t," MOs ")) om = TRUE;
740
if(!goToLine(file,"--------")) return FALSE;
743
CoefOrbitals = CreateTable2(NOrb);
744
EnerOrbitals = g_malloc(NOrb*sizeof(gdouble));
745
SymOrbitals = g_malloc(NOrb*sizeof(gchar*));
752
if(1!=fscanf(file,"%lf",&dum))break;
753
if(om) CoefOrbitals[i][j] = dum;
754
else CoefOrbitals[j][i] = dum;
758
for(k=j;k<NOrb;k++) SymOrbitals[k] = g_strdup("DELETED");
761
SymOrbitals[j] = g_strdup("UNK");
764
printf("norb read=%d\n",j);
766
CoefAlphaOrbitals = CoefOrbitals;
767
EnerAlphaOrbitals = EnerOrbitals;
768
SymAlphaOrbitals = SymOrbitals;
769
OccAlphaOrbitals = g_malloc(NOrb*sizeof(gdouble));
771
for(i=0;i<nAlpha;i++) OccAlphaOrbitals[i] = 1.0;
772
for(i=nAlpha;i<NOrb;i++) OccAlphaOrbitals[i] = 0.0;
774
CoefBetaOrbitals = CoefOrbitals;
775
EnerBetaOrbitals = EnerOrbitals;
776
OccBetaOrbitals = OccAlphaOrbitals;
777
SymBetaOrbitals = SymOrbitals;
787
/********************************************************************************/
788
static gboolean read_orbitals_in_nbo_file(gchar *fileName,gint nAlpha, gint nBeta)
790
if(read_orbitals_in_nbo_file_alpha_or_beta(fileName, nAlpha, nBeta, "ALPHA"))
792
return read_orbitals_in_nbo_file_alpha_or_beta(fileName, nAlpha, nBeta, "BETA");
795
return read_orbitals_in_nbo_file_all(fileName, nAlpha, nBeta);
799
/********************************************************************************/
800
void read_nbo_orbitals(gchar* fileName)
803
/* gint typebasis=1;*/ /* NBO print OM in cartezian presentation even ISPHER=0 or 1 or -1 */
810
gchar* fileName31 = NULL;
813
typefile =get_type_file_orb(fileName);
814
if(typefile==GABEDIT_TYPEFILE_UNKNOWN) return;
817
if(typefile != GABEDIT_TYPEFILE_NBO)
820
sprintf(buffer,_("Sorry, I can not read this format from '%s' file\n"),fileName);
821
Message(buffer,_("Error"),TRUE);
824
fileName31 = g_strdup_printf("%s.31",get_suffix_name_file(fileName));
827
t = get_name_file(fileName31);
828
set_status_label_info(_("File name"),t);
830
set_status_label_info(_("File type"),"NBO");
831
set_status_label_info(_("Mol. Orb."),_("Reading"));
835
/* typebasis =get_type_basis_in_nbo_file(fileName);
840
"Sorry, Gabedit does not support spherical basis with contaminant cartezian function\n\n"
841
"Use ISPHER=-1 or ISPHER=1 in CONTROL block"
843
Message(buffer,_("Error"),TRUE);
844
set_status_label_info(_("File name"),_("Nothing"));
845
set_status_label_info(_("File type"),_("Nothing"));
846
set_status_label_info(_("Mol. Orb."),_("Nothing"));
851
if(!read_geomorb_nbo_file_geom(fileName31))
854
set_status_label_info(_("File name"),_("Nothing"));
855
set_status_label_info(_("File type"),_("Nothing"));
856
set_status_label_info(_("Mol. Orb."),_("Nothing"));
859
set_status_label_info(_("Geometry"),_("Ok"));
860
glarea_rafresh(GLArea); /* for geometry*/
861
init_atomic_orbitals();
862
if(!read_basis_from_a_nbo_output_file(fileName31))
865
sprintf(buffer,_("Sorry, I cannot read basis from '%s' file\n"),fileName31);
866
Message(buffer,_("Error"),TRUE);
869
init_atomic_orbitals();
870
for(i=0;i<Ncenters;i++) GeomOrb[i].Prop = prop_atom_get("H");
873
set_status_label_info(_("File name"),_("Nothing"));
874
set_status_label_info(_("File type"),_("Nothing"));
875
set_status_label_info(_("Mol. Orb."),_("Nothing"));
881
t = get_name_file(fileName);
882
set_status_label_info(_("File name"),t);
884
set_status_label_info(_("Mol. Orb."),_("Reading"));
889
init_atomic_orbitals();
894
DefineNBOSphericalBasis();
895
sphericalBasis = TRUE;
899
DefineNBOCartBasis();
900
sphericalBasis = FALSE;
904
printf("Not normalized basis\n");
907
/* NormaliseAllBasis();*/
908
NormaliseAllNoRadBasis();
910
printf("Normalized basis\n");
921
printf("Number of ALPHA occ = %d\n",nAlpha);
922
printf("Number of BETA occ = %d\n",nBeta);
923
printf("NOrb = %d\n",NOrb);
925
Ok = read_orbitals_in_nbo_file(fileName,nAlpha,nBeta);
929
/*PrintAllOrb(CoefAlphaOrbitals);*/
930
set_status_label_info(_("Mol. Orb."),_("Ok"));
931
glarea_rafresh(GLArea); /* for geometry*/
932
NumSelOrb = NAlphaOcc-1;
933
create_list_orbitals();
938
set_status_label_info(_("File name"),_("Nothing"));
939
set_status_label_info(_("File type"),_("Nothing"));
940
set_status_label_info(_("Mol. Orb."),_("Nothing"));