24小时热门版块排行榜    

查看: 1484  |  回复: 15
当前主题已经存档。

小鱼儿1013

金虫 (正式写手)

[交流] 【求助】寻找软件:分析高斯输出的分子轨道得到轨道成分的数字结果

寻找软件:
析高斯输出的分子轨道得到轨道成分的数字结果
回复此楼
世上有两件事不能等,一是行善,一是尽孝.莫等失去了才懂得珍惜
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yjcmwgk

禁虫 (文坛精英)

密度泛函·小卒

优秀版主


erylingjet(金币+1,VIP+0):感谢交流 10-20 12:01
2楼2009-10-20 10:52:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhou2009

版主 (著名写手)

★ ★
lei0736(金币+2,VIP+0):谢谢 10-23 10:29
见本论坛maomao6972的“轨道成分分析程序”:

http://muchong.com/html/200811/1078422.html
3楼2009-10-20 19:23:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yytsnake

至尊木虫 (职业作家)

试了一下,结论是:
本论坛maomao6972的“轨道成分分析程序”不存在。
4楼2009-10-20 20:08:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhou2009

版主 (著名写手)

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
小鱼儿1013(金币+3,VIP+0): 10-22 19:34
小鱼儿1013(金币+5,VIP+0):已经收到,谢谢了 10-23 08:34
lei0736(金币+2,VIP+0):谢谢 10-23 10:30
本论坛maomao6972的“轨道成分分析程序”不存在?!

我曾经在当时下载过,但并没有去用它,留在机子上,如果需要可留下电邮地址,我传给你。

这么久了,可能有新的改进,请联系原创者。
5楼2009-10-21 08:05:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhou2009

版主 (著名写手)

yytsnake:

“轨道成分分析程序”已发。
6楼2009-10-21 10:00:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jjf_sxnu

铜虫 (正式写手)

★ ★ ★ ★ ★ ★
yjcmwgk(金币+2,VIP+0):转载?原创? 10-21 13:20
小鱼儿1013(金币+3,VIP+0):xie xie 10-22 19:31
小鱼儿1013(金币+1,VIP+0):虽然不会 编程 但还是要谢谢你 10-23 08:36
如下是从fchk计算轨道成份的程序,你看一下,这里用的基组是6-311++g**你根据自己的需要改一改。
# include
#include
#include
#include
#include
#include
#include
using namespace std;
void clear(stringstream & buf)
{
char tmp[256];
    while(!(buf.eof()))
    {buf>>tmp; }
    buf.clear();
}
int main(int argc,char *argv[])  
{
        ifstream myfile;
    int NUM_UNMO=atoi(argv[2]);
        myfile.open(argv[1]);
        if(!myfile)
        {
                cout<<"文件读错误";
                system("pause";
                exit(1);
        }
        char buf[256];
    stringstream stream;
        for(int i=0;i<3;i++)
    myfile.getline(buf,256);
    stream<     for(int i=0;i<4;i++)
    stream>>buf;
    int numberofatom;
    stream>>numberofatom;
    clear(stream);
    //cout<     for(int i=0;i<4;i++)
    myfile.getline(buf,256);
    stream<     for(int i=0;i<5;i++)
    stream>>buf;
   
    int numberofaelectron;
    stream>>numberofaelectron;
    myfile.getline(buf,256);
    clear(stream);
    stream<     for(int i=0;i<5;i++)
    stream>>buf;
    int numberofbelectron;
    stream>>numberofbelectron;
         //cout<     while(!myfile.eof())
    {
        myfile.getline(buf,256);
        string tmp(buf);
        //cout<         if(tmp.find("Atomic numbers"!=-1)
        break;
    }
    clear(stream);
    for(int i=0;i<(numberofatom/6+((numberofatom%6)?1:0));i++)
    {myfile.getline(buf,256);
    stream<     }
    vector atomlist;
    for(int i=0;i     {
    int tmp;
    stream>>tmp;
//    cout<     atomlist.push_back(tmp);
    }
//    cout<
    while(!myfile.eof())
    {
        myfile.getline(buf,256);
        string tmp(buf);
        //cout<         if(tmp.find("Alpha Orbital Energies"!=-1)
        break;
    }
    vector > alphaenergies;
    clear(stream);
    for(int i=0;i<((numberofaelectron+NUM_UNMO)/5+(((numberofaelectron+NUM_UNMO)%5)?1:0));i++)
    {myfile.getline(buf,256);
    stream<     }
    for(int i=0;i     {
    double tmp;
    stream>>tmp;
    //convert to eV from hartree.
    tmp=tmp*27.21165;
    //cout<     vector tmpvec;
    tmpvec.push_back(tmp);  tmpvec.push_back(0.0); tmpvec.push_back(0.0); tmpvec.push_back(0.0);
    alphaenergies.push_back(tmpvec);
    }
    /////////////////////////////////////////
    while(!myfile.eof())
    {
        myfile.getline(buf,256);
        string tmp(buf);
        //cout<         if(tmp.find("Beta Orbital Energies"!=-1)
        break;
    }
    vector > betaenergies;
    clear(stream);
    for(int i=0;i<((numberofbelectron+NUM_UNMO)/5+(((numberofbelectron+NUM_UNMO)%5)?1:0));i++)
    {myfile.getline(buf,256);
    //cout<     stream<     }
    for(int i=0;i     {
    double tmp;
    stream>>tmp;
    tmp*=27.21165;
    //cout<     vector tmpvec;
    tmpvec.push_back(tmp);  tmpvec.push_back(0.0); tmpvec.push_back(0.0); tmpvec.push_back(0.0);
    betaenergies.push_back(tmpvec);
    }
    ////////////////////////////////////////////////////////////////////
    while(!myfile.eof())
    {
        myfile.getline(buf,256);
        string tmp(buf);
        //cout<         if(tmp.find("Alpha MO coefficients"!=-1)
        break;
    }
    ////////////////////////////////////////////////////////////////////////////
    //6-311++g** basis sets
    //C: s s p p p s p p p s p p p s p p p d d d d d
    //F: s s p p p s p p p s p p p s p p p d d d d d
    // H: s s s s p p p
    ////////////////////////////////////////////////////////////////////////////
    vector < pair < pair ,pair > > coefficientlist;
    // the vecotr < pair , pair
    for(int i=0;i     {
        int numofatom=i+1;
        if(atomlist<3)
        {
        coefficientlist.push_back(make_pair(make_pair(atomlist,0),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,0),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,0),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,0),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));   
        }
        else if((atomlist>2)||(atomlist<10))
        {
        coefficientlist.push_back(make_pair(make_pair(atomlist,0),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,0),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,0),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,0),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,0),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,1),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,2),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,2),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,2),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,2),make_pair(numofatom,0.0)));
        coefficientlist.push_back(make_pair(make_pair(atomlist,2),make_pair(numofatom,0.0)));                                                
        }            
    }
    for(int i=0;i     {
        cout<.first.first<<"\t"<.first.second<<"\t"<.second.first<<"\t"<.second.second<     }
    for(int j=0;j     {    //cout<         for(int i=0;i         {
        double tmp;
        myfile>>tmp;
        coefficientlist.second.second=tmp*tmp;
        } //read one orbital.
        
        double  s=0.0;
        double  p=0.0;
        double d=0.0;
        double s_iwant=0.0;
        double p_iwant=0.0;
        double d_iwant=0.0;
        for(int i=0;i         {
            if(coefficientlist.first.first==7)
            {
                if(coefficientlist.first.second==0) s_iwant+=coefficientlist.second.second;
                else if (coefficientlist.first.second==1) p_iwant+=coefficientlist.second.second;
                else if(coefficientlist.first.second==2) d_iwant+=coefficientlist.second.second;
            }
        //cout<.first<<" "<.second<             if(coefficientlist.first.second==0) s+=coefficientlist.second.second;
            else if (coefficientlist.first.second==1) p+=coefficientlist.second.second;
            else if(coefficientlist.first.second==2) d+=coefficientlist.second.second;
        }
        /////////////////////////////////////////////////////////////////////////////////////////////////
        //刚在小木虫上看到有虫友们在问怎么样得到各个原子轨道成分,也有人给出答案
        //,就是用每个原子轨道系数相平方和相加除以所有原子轨道系数平方和
        /////////////////////////////////////////////////////////////////////////////////////////////////
        alphaenergies[j][1]=s_iwant/(s+p+d);
        alphaenergies[j][2]=p_iwant/(s+p+d);
        alphaenergies[j][3]=d_iwant/(s+p+d);
    }
   
    cout<<"For Alpha:"<     cout<     for(int j=0;j     {
        cout<     }
   
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
   
    while(!myfile.eof())
    {
        myfile.getline(buf,256);
        string tmp(buf);
        //cout<         if(tmp.find("Beta MO coefficients"!=-1)
        break;
    }
   
    for(int j=0;j     {    //cout<         for(int i=0;i         {
        double tmp;
        myfile>>tmp;
        coefficientlist.second.second=tmp*tmp;
        }
        double  s=0.0;
        double  p=0.0;
        double d=0.0;
        double s_iwant=0.0;
        double p_iwant=0.0;
        double d_iwant=0.0;
        for(int i=0;i         {
        if(coefficientlist.first.first==7)
        {
            if(coefficientlist.first.second==0) s_iwant+=coefficientlist.second.second;
            else if (coefficientlist.first.second==1) p_iwant+=coefficientlist.second.second;
            else if(coefficientlist.first.second==2) d_iwant+=coefficientlist.second.second;
        }
        //cout<.first<<" "<.second<         if(coefficientlist.first.second==0) s+=coefficientlist.second.second;
        else if (coefficientlist.first.second==1) p+=coefficientlist.second.second;
        else if(coefficientlist.first.second==2) d+=coefficientlist.second.second;
        }
        /////////////////////////////////////////////////////////////////////////////////////////////////
        //刚在小木虫上看到有虫友们在问怎么样得到各个原子轨道成分,也有人给出答案
        //,就是用每个原子轨道系数相平方和相加除以所有原子轨道系数平方和
        /////////////////////////////////////////////////////////////////////////////////////////////////
        betaenergies[j][1]=s_iwant/(s+p+d);
        betaenergies[j][2]=p_iwant/(s+p+d);
        betaenergies[j][3]=d_iwant/(s+p+d);
    }
    cout<<"For Beta:"<     cout<     for(int j=0;j     {
        cout<     }
}
7楼2009-10-21 10:14:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yytsnake

至尊木虫 (职业作家)

一是感谢ZHOU2009大侠,发送的文件已收到,有了一个学习使用的机会。
二是要感谢jjf_sxnu大侠提供的程序原码。看了就感到惭愧,N年前学的ALGOL和BASIC早就抛到了九霄云外。这下可以对照编码,先看看C++之类的语言,对今后的学习有很大的帮助。
想问一下,上面的程序是C还是FORTRAN?原来学的FORTRAN77也早扔了。

[ Last edited by yytsnake on 2009-10-21 at 11:11 ]
8楼2009-10-21 11:06:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yytsnake

至尊木虫 (职业作家)

只看了一下说明,还没试用,不过想问一下,该程序分析的结果与CHEMCRAFT的轨道分析结果有何差异?
9楼2009-10-21 14:45:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小鱼儿1013

金虫 (正式写手)

引用回帖:
Originally posted by zhou2009 at 2009-10-21 08:05:
本论坛maomao6972的“轨道成分分析程序”不存在?!

我曾经在当时下载过,但并没有去用它,留在机子上,如果需要可留下电邮地址,我传给你。

这么久了,可能有新的改进,请联系原创者。

My Email address:

hjjtbq@163.com

thank you
世上有两件事不能等,一是行善,一是尽孝.莫等失去了才懂得珍惜
10楼2009-10-22 19:29:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 小鱼儿1013 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见