²é¿´: 1909  |  »Ø¸´: 5

ÄÇÄêµÄС°¬

½ð³æ (³õÈëÎÄ̳)

[ÇóÖú] F¹ìµÀµç×ÓÔÆ·Ö²¼ ÒÑÓÐ1È˲ÎÓë

F¹ìµÀµÄµç×ÓÔÆ·Ö²¼Ó¦¸ÃÔõô»­£¬ÓÃһЩ¼òµ¥µÄÈí¼þ¿ÉÒÔ×öô£¿ÎÒÏë»­³ö·Ç¹²ÏßÇé¿öϵÄF¹ìµÀµÄµç×ÓÔÆ·Ö²¼£¬ÓÐûÓдóÏÀ»áµÄ£¬ÍûÖ¸½ÌÒ»¶þ¡£»¹ÓÐÏëÎÊÏÂÍøÂçÉϵÄһЩ¹ìµÀµç×ÓÔÆ²ÊͼÖжԳƽṹÖÐÓõÄÁ½ÖÖÑÕÉ«ÊDz»ÊÇÇø±ð×ÔÐýÏòÉÏÏòϵģ¿
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

» ±¾Ö÷ÌâÏà¹Ø¼ÛÖµÌùÍÆ¼ö£¬¶ÔÄúͬÑùÓаïÖú:

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

ÁãÏÂ1¡æ

Ìú³æ (ÕýʽдÊÖ)

¶¥Ò»Ï£¬Í¬Çó°¡£¡
2Â¥2014-01-07 14:22:00
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

liqizuiyang

ľ³æ (ÖøÃûдÊÖ)

¡¾´ð°¸¡¿Ó¦Öú»ØÌû

¡ï ¡ï ¡ï ¡ï ¡ï ¡ï ¡ï ¡ï ¡ï ¡ï ¡ï ¡ï ¡ï
¸Ðл²ÎÓ룬ӦÖúÖ¸Êý +1
identation: ½ð±Ò+3, лл½»Á÷ 2014-01-07 15:08:49
ÄÇÄêµÄС°¬: ½ð±Ò+10, ¡ï¡ï¡ïºÜÓаïÖú 2014-01-07 18:53:21
F¹ìµÀʵ¼ÊÉÏÊǽǶ¯Á¿Ä£·½Ëã·ûL^2¶ÔÓ¦µÄl=3µÄ±¾Õ÷̬²¨º¯Êý¡£ÔÚÖÐÐÄÊÆ³¡£¨±ÈÈçÇâÔ­×Ó£©ÖУ¬L^2Óë¹þÃܶÙÁ¿¶ÔÒ×£¬¶øÔÚ¹ÌÌå»ò·Ö×ÓÖУ¬L^2Óë¹þÃܶÙÁ¿²»Ò»¶¨¶ÔÒס£Ò»°ã³ÌÐòÊä³öµÄÊǹþÃܶÙÁ¿Óëij¸öËã·ûµÄ±¾Õ÷̬£¨¶Ô¹ÌÌåÎªÆ½ÒÆËã·û£©£¬¶ÔÕâЩ±¾Õ÷̬ÎÞ·¨¶Ï¶¨lµÄȡֵ¡£

Èç¹ûÊǵ¥Ô­×Ó£¬¿ÉÒÔ¸ù¾ÝÇâÔ­×ÓѦ¶¨ÚÌ·½³Ì½âÎö½âÇó³öÔÚһϵÁиñµãÉϵIJ¨º¯ÊýֵдÈëcubeÎļþ£¬È»ºó¾Í¿ÉÒÔÓÃvestaÖ®ÀàµÄÈí¼þ´ò¿ª¿´ÁË¡£

ÍøÉϵijÌÐò¸ø³öµÄµç×ÓÔÆÍ¼ÓÐÁ½ÖÖ£ºÒ»ÖÖÖ±½ÓÊä³ö|n,l,m>£¬ÁíÒ»ÖÖÊä³ö|n,l,m>µÄÏßÐÔ×éºÏ¡£µÚÒ»ÖÖ²¨º¯ÊýÖµÊǸ´Êý£¬×÷ͼʱ¸ø³öµÄÊÇʵ²¿»òÐ鲿£»µÚ¶þÖÖ²¨º¯ÊýÖµÊÇʵÊý£¬³£ËµµÄpx,py,pz¾ÍÊÇÕâÖÖ¡£ÕâÁ½ÖÖÇé¿öÏÂÑÕɫһ°ãÓÃÀ´Çø·Ö²¨º¯ÊýÖµµÄÕý¸º¡£²»ÊÇ×ÔÐý¡£
3Â¥2014-01-07 15:07:22
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

liqizuiyang

ľ³æ (ÖøÃûдÊÖ)

¡¾´ð°¸¡¿Ó¦Öú»ØÌû

ÕâÊÇ֮ǰдµÄÒ»¸öÊä³öcube¸ñʽµÄ³ÌÐòÔ´´úÂ룺

/******************************************************************************
  This program generates wavefunction for hydrogen-like atoms using analytical
  solution to Shrodinger's equation.
  
  This program requires no command-line parameters, but an input file called
  orb.inp. This input file must be in the form:
  ---------------------------------------------
    H4f2.real.cube  //  output filename
    1               //  which part to output, 1 for real, -1 for imaginary
    1               //  Zval of the nuclea
    4 3 2           //  n l m
    20.0 20.0 20.0  //  size of the box, which will be multiplied by 2
    0.20 0.20 0.20  //  resolution
  ----------------------------------------------

******************************************************************************/

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

double factor( int );
double ReNormFactor( int, int, int );
double KummerFunc( int, int, double );
double RadialFunc( int, int, int, double );
double RealSphereHarm( int, int, double, double );
double ImagSphereHarm( int, int, double, double );
int checkinp( int, int, int );

double factor( int n )
{
    if ( n == 0 )
        return 1.0;
    else{
        double y;
        int i;
        y = 1.0;
        for( i = 1; i < n + 1; i ++ )
            y = y * (double)(i);
        return y;
    }
}

double ReNormFactor( int Z, int n, int l )
{
    double A, B, C;
    A = 2.0 / ( (double)(n*n) * factor(2*l+1));
    B = sqrt( factor(n+l) / factor(n-l-1) );
    C = sqrt( (double)(Z*Z*Z) );
    return A * B * C;
}

double KummerFunc( int alpha, int gamma, double ita )
{
    double sum, ck;
    int k;
    sum = 1.0;
    ck = 1.0;
    for( k = 1; k < -alpha+1; k ++ )
    {
        ck = ck * (double)(alpha+k-1) / (double)(gamma+k-1) * (1.0/(double)(k));
        sum = sum+ ck * pow( ita, (double)(k) );
    }
    return sum;
}

double RadialFunc( int Z, int n, int l, double r )
{
    double ita, NormFactor, A, B, C;
    ita = 2.0 * (double)(Z) / (double)(n) * r;
    NormFactor = ReNormFactor( Z, n, l );
    A = exp( -0.5 * ita  );
    B = pow( ita, (double)(l) );
    C = KummerFunc( -n+l+1, 2*l+2, ita );
    return NormFactor * A * B * C;
}

double RealSphereHarm( int l, int m, double theta, double phi )
{
    if (l == 0)
        return 2.820947917738782e-1;
    else if (l == 1)
        switch(m)
        {
            case -1: return  3.454941494713355e-1 * cos(m*phi) * sin(theta); break;
            case  0: return  4.886025119029199e-1 * cos(m*phi) * cos(theta); break;
            case  1: return -3.454941494713355e-1 * cos(m*phi) * sin(theta); break;
            default: return 0.0; break;
        }
    else if (l == 2)
        switch(m)
        {
            case -2: return  3.862742020231896e-1 * cos(m*phi) * sin(theta) * sin(theta); break;
            case -1: return  7.725484040463792e-1 * cos(m*phi) * sin(theta) * cos(theta); break;
            case  0: return  3.153915652525200e-1 * cos(m*phi) * ( 3.0*cos(theta)*cos(theta) - 1.0 ); break;
            case  1: return -7.725484040463792e-1 * cos(m*phi) * sin(theta) * cos(theta); break;
            case  2: return  3.862742020231896e-1 * cos(m*phi) * sin(theta) * sin(theta); break;
            default: return 0.0; break;
        }
    else if (l == 3)
        switch(m)
        {
            case -3: return  4.172238236327841e-1 * cos(m*phi) * sin(theta) * sin(theta) * sin(theta); break;
            case -2: return  1.021985476433282    * cos(m*phi) * sin(theta) * sin(theta) * cos(theta); break;
            case -1: return  3.231801841141507e-1 * cos(m*phi) * sin(theta) * ( 5.0*cos(theta)*cos(theta) - 1.0 ); break;
            case  0: return  3.731763325901154e-1 * cos(m*phi) * cos(theta) * ( 5.0*cos(theta)*cos(theta) - 3.0 ); break;
            case  1: return -3.231801841141507e-1 * cos(m*phi) * sin(theta) * ( 5.0*cos(theta)*cos(theta) - 1.0 ); break;
            case  2: return  1.021985476433282    * cos(m*phi) * sin(theta) * sin(theta) * cos(theta); break;
            case  3: return -4.172238236327841e-1 * cos(m*phi) * sin(theta) * sin(theta) * sin(theta); break;
            default: return 0.0; break;
        }
    else
        return 0.0;
}

double ImagSphereHarm( int l, int m, double theta, double phi )
{
    if (l == 0)
        return 0.0;
    else if (l == 1)
        switch(m)
        {
            case -1: return  3.454941494713355e-1 * sin(m*phi) * sin(theta); break;
            case  0: return  4.886025119029199e-1 * sin(m*phi) * cos(theta); break;
            case  1: return -3.454941494713355e-1 * sin(m*phi) * sin(theta); break;
            default: return 0.0; break;
        }
    else if (l == 2)
        switch(m)
        {
            case -2: return  3.862742020231896e-1 * sin(m*phi) * sin(theta) * sin(theta); break;
            case -1: return  7.725484040463792e-1 * sin(m*phi) * sin(theta) * cos(theta); break;
            case  0: return  3.153915652525200e-1 * sin(m*phi) * ( 3.0*cos(theta)*cos(theta) - 1.0 ); break;
            case  1: return -7.725484040463792e-1 * sin(m*phi) * sin(theta) * cos(theta); break;
            case  2: return  3.862742020231896e-1 * sin(m*phi) * sin(theta) * sin(theta); break;
            default: return 0.0; break;
        }
    else if (l == 3)
        switch(m)
        {
            case -3: return  4.172238236327841e-1 * sin(m*phi) * sin(theta) * sin(theta) * sin(theta); break;
            case -2: return  1.021985476433282    * sin(m*phi) * sin(theta) * sin(theta) * cos(theta); break;
            case -1: return  3.231801841141507e-1 * sin(m*phi) * sin(theta) * ( 5.0*cos(theta)*cos(theta) - 1.0 ); break;
            case  0: return  3.731763325901154e-1 * sin(m*phi) * cos(theta) * ( 5.0*cos(theta)*cos(theta) - 3.0 ); break;
            case  1: return -3.231801841141507e-1 * sin(m*phi) * sin(theta) * ( 5.0*cos(theta)*cos(theta) - 1.0 ); break;
            case  2: return  1.021985476433282    * sin(m*phi) * sin(theta) * sin(theta) * cos(theta); break;
            case  3: return -4.172238236327841e-1 * sin(m*phi) * sin(theta) * sin(theta) * sin(theta); break;
            default: return 0.0; break;
        }
    else
        return 0.0;
}

int checkinp( int l, int m, int flavor )
{
    if ( l < 0 )
        return -1;
    else if ( l > 3 )
        return -2;
    else if ( m < 0 && -m > l )
        return -3;
    else if ( m >= 0 && m > l )
        return -3;
    else if ( flavor != -1 && flavor != 1 )
        return -4;
    else
        return 0;
}

int main( void )
{
    //  these variables are related to orb.inp
    char cubename[32];
    int flavor;
    int Z;
    int n, l, m;
    double xmax, ymax, zmax;
    double hx, hy, hz;
   
    //  these variables are related to mesh-info
    int NGX, NGY, NGZ, NX, NY, NZ;
    int i, j, k;
    double orgx, orgy, orgz;
    double x, y, z, r, theta, phi, gridval;
   
    // files used through the program
    FILE *cube, *inp;
   
    // program status
    int status;
   
    // global constant
    const double PI = 3.14159265358979;
   
    // read in 'orb.inp'
    inp = fopen("orb.inp","r";
    fscanf( inp, "%s\n", &cubename );
    fscanf( inp, "%d\n", &flavor );
    fscanf( inp, "%d\n", &Z );
    fscanf( inp, "%d%d%d\n", &n, &l, &m );
    fscanf( inp, "%lf%lf%lf\n", &xmax, &ymax, &zmax );
    fscanf( inp, "%lf%lf%lf\n", &hx, &hy, &hz );
    fclose( inp );
   
    // check input parameters
    status = checkinp( l, m, flavor );
    if ( status != 0 )
    {
        printf( "\nProgram exited with error code:" );
        printf( "%4d\n", status );
        printf( "Check your input" );
        printf("\n";
        return status;
    }
    else
    {
        // calculate NGX, NGY, NGZ
        NGX = (int)(xmax/hx);
        NGY = (int)(ymax/hy);
        NGZ = (int)(zmax/hz);
        
        // origin of grid
        orgx = -hx * (NGX - 1) + hx * 0.5;
        orgy = -hy * (NGY - 1) + hy * 0.5;
        orgz = -hz * (NGZ - 1) + hz * 0.5;
        
        // size of grid
        NX = 2 * NGX;
        NY = 2 * NGY;
        NZ = 2 * NGZ;
        
        // open cube file
        cube = fopen(cubename,"w";
        
        // write first 2 lines to cube
        if ( flavor == 1)
            fprintf( cube, "Real part of atomic orbitals of H-like atoms\n";
        else
            fprintf( cube, "Imag part of atomic orbitals of H-like atoms\n";
        fprintf( cube, "Generated by programm orb.x\n";
        
        // write natom and origin of data
        fprintf( cube, "%5d%12.6f%12.6f%12.6f\n", 1, orgx, orgy, orgz  );
        
        // write mesh info
        fprintf( cube, "%5d%12.6f%12.6f%12.6f\n", NX,  hx, 0.0, 0.0 );
        fprintf( cube, "%5d%12.6f%12.6f%12.6f\n", NY, 0.0,  hy, 0.0 );
        fprintf( cube, "%5d%12.6f%12.6f%12.6f\n", NZ, 0.0, 0.0,  hz );
        
        // write atoms info
        fprintf( cube, "%5d%12.6f%12.6f%12.6f%12.6f\n", Z, 1.0*Z, 0.0, 0.0, 0.0 );
        
        // entering main loop
        if ( flavor == 1 )
        {
            for ( i = 1; i <= NX; i ++ )
                for ( j = 1; j <= NY; j ++ )
                    for( k = 1; k <= NZ; k ++ )
                    {
                        x = orgx + hx * ( i - 1 );
                        y = orgy + hy * ( j - 1 );
                        z = orgz + hz * ( k - 1 );
                        r = sqrt( x*x + y*y + z*z );
                        theta = acos( z/r );
                        if ( y >= 0.0 )
                            phi = acos( x / sqrt(x*x+y*y) );
                        else
                            phi = 2.0 * PI - acos( x / sqrt(x*x+y*y) );
                        gridval = RadialFunc( Z, n, l, r ) * RealSphereHarm( l, m, theta, phi );
                        fprintf( cube, "%13.5e", gridval );
                        if ( k == NZ || k%6==0 )
                            fprintf( cube, "\n" );
                    }
        }
        else
        {
            for ( i = 1; i <= NX; i ++ )
                for ( j = 1; j <= NY; j ++ )
                    for( k = 1; k <= NZ; k ++ )
                    {
                        x = orgx + hx * ( i - 1 );
                        y = orgy + hy * ( j - 1 );
                        z = orgz + hz * ( k - 1 );
                        r = sqrt( x*x + y*y + z*z );
                        theta = acos( z/r );
                        if ( y >= 0.0 )
                            phi = acos( x / sqrt(x*x+y*y) );
                        else
                            phi = 2.0 * PI - acos( x / sqrt(x*x+y*y) );
                        gridval = RadialFunc( Z, n, l, r ) * ImagSphereHarm( l, m, theta, phi );
                        fprintf( cube, "%13.5e", gridval );
                        if ( k == NZ || k%6==0 )
                            fprintf( cube, "\n" );
                    }
        }
            
        fclose(cube);
        return 0;
    }
}
4Â¥2014-01-07 17:38:54
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

liqizuiyang

ľ³æ (ÖøÃûдÊÖ)

ºÃЩ´úÂë±ä±íÇéÁË£¬Â¥Ö÷ÈôÐèÒªÁô¸öÓÊÏä°É¡£
5Â¥2014-01-07 17:43:00
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

ÄÇÄêµÄС°¬

½ð³æ (³õÈëÎÄ̳)

ÒýÓûØÌû:
5Â¥: Originally posted by liqizuiyang at 2014-01-07 17:43:00
ºÃЩ´úÂë±ä±íÇéÁË£¬Â¥Ö÷ÈôÐèÒªÁô¸öÓÊÏä°É¡£

lichengdi23@163.com£¬Ð»Ð»Á˰¡
6Â¥2014-01-07 18:55:30
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ ÄÇÄêµÄС°¬ µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 0703 ÎïÀí»¯Ñ§µ÷¼Á +3 ÎÒ¿ÉÒÔÉϰ¶µÄ¶Ô 2026-03-13 5/250 2026-03-16 10:50 by ÎÒ¿ÉÒÔÉϰ¶µÄ¶ÔÂ
[¿¼ÑÐ] 344Çóµ÷¼Á +3 knight344 2026-03-16 3/150 2026-03-16 09:42 by Î޼ʵIJÝÔ­
[¿¼ÑÐ] 321Çóµ÷¼Á +4 ´óÃ×·¹£¡ 2026-03-15 4/200 2026-03-16 08:41 by Linda Hu
[»ù½ðÉêÇë] NSFCÉ걨ÊéÀïÉêÇëÈ˼òÀúÖдú±íÐÔÂÛÖø»¹ÐèÒªÔÚÉ걨Êé×îºóµÄ¸½¼þÀïÃæÔÙÉÏ´«Ò»±éÂð 20+5 NSFC2026ÎÒÀ´ÁË 2026-03-10 14/700 2026-03-15 23:53 by ²»¸ºÉØ»ªµÄ»¢
[¿¼ÑÐ] 0703»¯Ñ§µ÷¼Á£¬Çó¸÷λÀÏʦÊÕÁô +7 ÇïÓÐľ±± 2026-03-14 7/350 2026-03-15 17:30 by СÎïÀí»¯Ñ§
[»ù½ðÉêÇë] ÏÖÔÚÈçºÎ»Ø±ÜÈ¥ÄêµÄijһ¸öר¼Ò£¬²»ÖªµÀÃû×Ö +3 zk200107 2026-03-12 6/300 2026-03-14 17:13 by zk200107
[¿¼ÑÐ] ²ÄÁÏ080500µ÷¼ÁÇóÊÕÁô +3 Ò»¿Åmeteor 2026-03-13 3/150 2026-03-14 10:54 by peike
[¿¼ÑÐ] 288Çóµ÷¼Á +14 ÍõÏþÑô- 2026-03-09 19/950 2026-03-14 02:05 by JourneyLucky
[¿¼ÑÐ] ÕÐÊÕ0805£¨²ÄÁÏ£©µ÷¼Á +3 18595523086 2026-03-13 3/150 2026-03-14 00:33 by 123%¡¢
[¿¼ÑÐ] 321Çóµ÷¼Á +3 CUcat 2026-03-10 3/150 2026-03-14 00:25 by JourneyLucky
[¿¼ÑÐ] 337Ò»Ö¾Ô¸»ªÄÏÀí¹¤0805²ÄÁÏÇóµ÷¼Á +7 mysdl 2026-03-11 9/450 2026-03-13 22:43 by JourneyLucky
[¿¼ÑÐ] 0856²ÄÁÏÓ뻯¹¤301Çóµ÷¼Á +5 ÞÈÊø¹â 2026-03-13 5/250 2026-03-13 22:00 by ÐÇ¿ÕÐÇÔÂ
[¿¼ÑÐ] 26µ÷¼Á/²ÄÁÏ¿ÆÑ§Ó빤³Ì/×Ü·Ö295/ÇóÊÕÁô +9 2026µ÷¼ÁÏÀ 2026-03-12 9/450 2026-03-13 20:46 by 18595523086
[¿¼ÑÐ] ¡¾¿¼Ñе÷¼ÁÇóÊÕÁô¡¿ +3 Ceciilia 2026-03-11 3/150 2026-03-13 20:18 by JourneyLucky
[¿¼ÑÐ] ¿¼Ñе÷¼Á +4 ·Ò´ï46 2026-03-12 4/200 2026-03-13 16:04 by ruiyingmiao
[¿¼ÑÐ] ²ÄÁÏר˶350 Çóµ÷¼Á +4 Íõ½ð¿Æ 2026-03-12 4/200 2026-03-13 16:02 by ruiyingmiao
[¿¼ÑÐ] ¹¤¿Æµ÷¼Á +4 Jiang191123£¡ 2026-03-11 4/200 2026-03-13 15:15 by Miko19
[¿¼ÑÐ] 08ʳƷ»òÇṤÇóµ÷¼Á£¬±¾¿Æ·¢±í3ƪsciÒ»ÇøtopÂÛÎÄ£¬Ò»Ö¾Ô¸ÄÏʦ´óʳƷ¿ÆÑ§Ó빤³Ì +3 ÎÒÊÇÒ»¸ö±ø£¬ 2026-03-10 3/150 2026-03-13 10:21 by Yuyi.
[¿¼²©] 26¶Á²© +4 Rui135246 2026-03-12 10/500 2026-03-13 07:15 by gaobiao
[»ù½ðÉêÇë] Ìá½»ºóµÄ»ù½ð±¾×Ó£¬ÒÑÈÃѧУ³·»ØÁË£¬¿É·ñ»»¿Ú×ÓÌá½» +3 dut_pfx 2026-03-10 3/150 2026-03-11 08:38 by kudofaye
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û