Exemplo n.º 1
0
/**
 * @brief Find the largest interval of projection coordinates
          if the interval is large then VAC_SPACE.
          If we can find any one are satified in the i dierction, 
          then
             vac[i][0]= 0   
             vac[i][1]= 0   
 * @param pos
 * @param vac (Direct Coordinates)
 */
void FindVac( POSCAR* pos, double vac[3][2])
{
    int i,j,v;
    double post;
    double len[3];
    double *interval=NULL;
    double max_interval=-1;
    POSCAR* posTmp=NULL;

    /*Init*/
    for (i=0; i<3; i++)
        for (j=0; j<2; j++)
            vac[i][j]=0;

    POSCAR_Copy(pos, posTmp);
    POSCAR_C2D(posTmp);
    POSCAR_Confined(posTmp);

    for (i=0; i<3; i++)
    {
        len[i]= dot3D(posTmp->lat->a[i], posTmp->lat->a[i]);
        len[i]= sqrt(len[i]);
    }

    interval= malloc(sizeof(double)*posTmp->natom); 
    if (interval==NULL)
    {
        fprintf(stderr, "POSCAR_FindVac: Memory Allocate Error.\n");
        exit(1);
    }

    for (v=0; v<3; v++)
    {
        insort(&(posTmp->atom_pos[0][0]), posTmp->natom, 3, v, false);
        for (i=0; i<posTmp->natom; i++)
        {
            if (i==posTmp->natom-1)
                post= posTmp->atom_pos[0][v]+1.0; 
            else
                post= posTmp->atom_pos[i+1][v]; 
            interval[i]=(post-posTmp->atom_pos[i][v])*len[v];

            if (interval[i]>max_interval &&  interval[i]>VAC_SPACE)
            {
                vac[v][0]= posTmp->atom_pos[i][v];
                vac[v][1]= post; 
            }
        }
    }

    free(interval);
    POSCAR_Free(posTmp);
}
Exemplo n.º 2
0
Arquivo: ut_beta.c Projeto: qomo/vaspC
void check_beta_cubic()
{
    int i,j;
    FILE *pf=NULL;
    FILE *pfE=NULL;
    POSCAR *pos=NULL;
    POSCAR *posE=NULL;
    SCALAR3D *sca=NULL;
    SCALAR3D *scaE=NULL;
    double beta_value;
    double skip[3][2];
    double vac[3][2];
    double max_pos[3];
    double max_vec[3];

    /*Init*/
    POSCAR_Init(pos);
    POSCAR_Init(posE);
    SCALAR3D_Init(sca);
    SCALAR3D_Init(scaE);

    for (i=0; i<3; i++)
        for (j=0; j<2; j++)
        {
            vac[i][j]=0;
           skip[i][j]=0;
        }

    /*Read*/
    if ((pf=fopen("data/beta/Cubic_E0.0","r"))==NULL)
    {
        g_assert(false);
    }
    else if ((pfE=fopen("data/beta/Cubic_E0.5","r"))==NULL)
    {
        g_assert(false);
    }

    g_assert_cmpint(SCALAR3D_READ(sca,pos,pf),==,0);
    g_assert_cmpint(SCALAR3D_READ(scaE,posE,pfE),==,0);

    beta_value=beta(sca, scaE, 0.5, 2, vac, max_pos, max_vec, 2);
    g_assert_cmpfloat(beta_value,==,3);

    for (i=0; i<3; i++)
        for (j=0; j<2; j++)
        {
            g_assert_cmpfloat(skip[i][j],==,0);
        }

    g_assert_cmpfloat(max_pos[0],==,1./3.);
    g_assert_cmpfloat(max_pos[1],==,1./3.);
    g_assert_cmpfloat(max_pos[2],==,1./3.);

    g_assert_cmpfloat(max_vec[0],==,0);
    g_assert_cmpfloat(max_vec[1],==,0);
    g_assert_cmpfloat(max_vec[2],==,1.5);

    fclose(pf);
    fclose(pfE);

    /*Free*/
    POSCAR_Free(pos);
    SCALAR3D_Free(sca);
    POSCAR_Free(posE);
    SCALAR3D_Free(scaE);
}
Exemplo n.º 3
0
Arquivo: ut_beta.c Projeto: qomo/vaspC
void check_beta_hex()
{
    int i,j;
    double d;
    FILE *pf=NULL;
    FILE *pfE=NULL;
    POSCAR *pos=NULL;
    POSCAR *posE=NULL;
    SCALAR3D *sca=NULL;
    SCALAR3D *scaE=NULL;
    double beta_value;
    double vac[3][2];
    double skip[3][2];
    double max_pos[3];
    double max_vec[3];

    /*Init*/
    POSCAR_Init(pos);
    POSCAR_Init(posE);
    SCALAR3D_Init(sca);
    SCALAR3D_Init(scaE);

    for (i=0; i<3; i++)
        for (j=0; j<2; j++)
        {
            vac[i][j]=0;
           skip[i][j]=0;
        }

    /*Read*/
    if ((pf=fopen("data/beta/Hex_E0.0","r"))==NULL)
    {
        g_assert(false);
    }
    else if ((pfE=fopen("data/beta/Hex_E1.0","r"))==NULL)
    {
        g_assert(false);
    }

    g_assert_cmpint(SCALAR3D_READ(sca,pos,pf),==,0);
    g_assert_cmpint(SCALAR3D_READ(scaE,posE,pfE),==,0);

    beta_value=beta(sca, scaE, 1.0, 2, vac, max_pos, max_vec, 2);
    d= pow(1.5*cos(PI/3.),2)+pow(6.+1.5*sin(PI/3.),2)+pow(3.,2);
    g_assert_cmpfloat(beta_value,==,sqrt(d));

    for (i=0; i<3; i++)
        for (j=0; j<2; j++)
            g_assert_cmpfloat(skip[i][j],==,0);

    g_assert_cmpfloat(max_pos[0],==,1/3.);
    g_assert_cmpfloat(max_pos[1],==,0/3.);
    g_assert_cmpfloat(max_pos[2],==,0/3.);

    g_assert_cmpfloat(max_vec[0],==,1.5/2.);
    g_assert_cmpfloat(max_vec[1],==,6.0+1.5*sin(PI/3.));
    g_assert_cmpfloat(max_vec[2],==,3.);


    fclose(pf);
    fclose(pfE);

    /*Free*/
    POSCAR_Free(pos);
    SCALAR3D_Free(sca);
    POSCAR_Free(posE);
    SCALAR3D_Free(scaE);
}
Exemplo n.º 4
0
Arquivo: ut_beta.c Projeto: qomo/vaspC
void check_beta_vac()
{
    int i,j;
    double d;
    FILE *pf=NULL;
    FILE *pfE=NULL;
    POSCAR *pos=NULL;
    POSCAR *posE=NULL;
    SCALAR3D *sca=NULL;
    SCALAR3D *scaE=NULL;
    double beta_value;
    double vac[3][2];
    double skip[3][2];
    double max_pos[3];
    double max_vec[3];

    /*Init*/
    POSCAR_Init(pos);
    POSCAR_Init(posE);
    SCALAR3D_Init(sca);
    SCALAR3D_Init(scaE);

    /*Read*/
    if ((pf=fopen("data/beta/Vac_E0.0","r"))==NULL)
    {
        g_assert(false);
    }
    else if ((pfE=fopen("data/beta/Vac_E1.0_Z","r"))==NULL)
    {
        g_assert(false);
    }
    else
    {
        g_assert_cmpint(SCALAR3D_READ(sca,pos,pf),==,0);
        g_assert_cmpint(SCALAR3D_READ(scaE,posE,pfE),==,0);
    }

    fclose(pf);
    fclose(pfE);

    /* No Vaccumm*/
    for (i=0; i<3; i++)
        for (j=0; j<2; j++)
        {
            vac[i][j]=0;
           skip[i][j]=0;
        }

    beta_value=beta(sca, scaE, 1.0, 1, vac, max_pos, max_vec, 2);
    for (i=0; i<3; i++)
        for (j=0; j<2; j++)
        {
            g_assert_cmpfloat(skip[i][j],==,0);
        }
    g_assert_cmpfloat(max_pos[0],==,0);
    g_assert_cmpfloat(max_pos[1],==,5./6.);
    g_assert_cmpfloat(max_pos[2],==,0./6.);

    g_assert_cmpfloat(max_vec[0],==,0); /*-2187*/
    g_assert_cmpfloat(max_vec[1],==,(-9+729)/8.);
    g_assert_cmpfloat(max_vec[2],==,(-128-2187)/8.);

    d= sqrt(pow((-9+729)/8.,2)+pow((-128-2187)/8.,2));
    g_assert_cmpfloat(beta_value,==,d);

    /* Vaccumm*/
    skip[2][0]= -1./12.;
    skip[2][1]=  1./12.;

    beta_value=beta(sca, scaE, 1.0, 0, vac, max_pos, max_vec, 2);

    g_assert_cmpfloat(max_pos[0],==,0./6.);
    g_assert_cmpfloat(max_pos[1],==,5./6.);
    g_assert_cmpfloat(max_pos[2],==,5./6.);

    g_assert_cmpfloat(max_vec[0],==,0);    /*2187*/
    g_assert_cmpfloat(max_vec[1],==,(9-729)/8.);
    g_assert_cmpfloat(max_vec[2],==,(-2187-128)/8.);

    /* Vaccumm*/
    skip[2][0]= -3./12.;
    skip[2][1]=  1./12.;

    beta_value=beta(sca, scaE, 1.0, 0, vac, max_pos, max_vec, 2);

    g_assert_cmpfloat(max_pos[0],==,0);
    g_assert_cmpfloat(max_pos[1],==,5./6.);
    g_assert_cmpfloat(max_pos[2],==,1./6.);

    g_assert_cmpfloat(max_vec[0],==,0);    /*-128*/
    g_assert_cmpfloat(max_vec[1],==,(-4+64)/8.);
    g_assert_cmpfloat(max_vec[2],==,(-1+2187)/8.);

    /* Vaccumm*/
    skip[2][0]= -3./12.;
    skip[2][1]=  3./12.;

    beta_value=beta(sca, scaE, 1.0, 1, vac, max_pos, max_vec, 2);

    g_assert_cmpfloat(max_pos[0],==,0);
    g_assert_cmpfloat(max_pos[1],==,5./6.);
    g_assert_cmpfloat(max_pos[2],==,4./6.);

    g_assert_cmpfloat(max_vec[0],==,0);    /*128*/
    g_assert_cmpfloat(max_vec[1],==,(4-64)/8.);
    g_assert_cmpfloat(max_vec[2],==,(2187-1)/8.);

    /* Vaccumm*/
    skip[2][0]= -5./12.;
    skip[2][1]=  3./12.;

    beta_value=beta(sca, scaE, 1.0, 2, vac, max_pos, max_vec, 2);

    g_assert_cmpfloat(max_pos[0],==,0);
    g_assert_cmpfloat(max_pos[1],==,5./6.);
    g_assert_cmpfloat(max_pos[2],==,2./6.);

    g_assert_cmpfloat(max_vec[0],==,0);    /*-1*/
    g_assert_cmpfloat(max_vec[1],==,0);
    g_assert_cmpfloat(max_vec[2],==,(1+128)/8.);

    /* Vaccumm*/
    skip[2][0]= -5./12.;
    skip[2][1]=  5./12.;

    beta_value=beta(sca, scaE, 1.0, 2, vac, max_pos, max_vec, 2);

    g_assert_cmpfloat(max_pos[0],==,0);
    g_assert_cmpfloat(max_pos[1],==,5./6.);
    g_assert_cmpfloat(max_pos[2],==,3./6.);

    g_assert_cmpfloat(max_vec[0],==,0);    /*1*/
    g_assert_cmpfloat(max_vec[1],==,0);
    g_assert_cmpfloat(max_vec[2],==,(1+128)/8.);

    /* Vaccumm*/
    skip[2][0]= -7./12.;
    skip[2][1]=  5./12.;

    beta_value=beta(sca, scaE, 1.0, 0, vac, max_pos, max_vec, 2);

    g_assert_cmpfloat(max_pos[0],==,-1);
    g_assert_cmpfloat(max_pos[1],==,-1);
    g_assert_cmpfloat(max_pos[2],==,-1);

    g_assert_cmpfloat(max_vec[0],==,0);    /*1*/
    g_assert_cmpfloat(max_vec[1],==,0);
    g_assert_cmpfloat(max_vec[2],==,0);

    /* Vaccumm*/
    skip[1][0]= 9./12.;
    skip[1][1]= 11./12.;
    skip[2][0]= 0;
    skip[2][1]= 0;

    beta_value=beta(sca, scaE, 1.0, 0, vac, max_pos, max_vec, 2);

    g_assert_cmpfloat(max_pos[0],==,0);
    g_assert_cmpfloat(max_pos[1],==,0);
    g_assert_cmpfloat(max_pos[2],==,0.);

    g_assert_cmpfloat(max_vec[0],==,0);    /* -9 */
    g_assert_cmpfloat(max_vec[1],==,(-27+2187)/8.);
    g_assert_cmpfloat(max_vec[2],==,(-4-9)/8.);

    /*Free*/
    POSCAR_Free(pos);
    SCALAR3D_Free(sca);
    POSCAR_Free(posE);
    SCALAR3D_Free(scaE);
}