File: TRAN_Check_Region_Lead.c

package info (click to toggle)
openmx 3.2.4.dfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: lenny, squeeze
  • size: 62,572 kB
  • ctags: 2,684
  • sloc: ansic: 130,666; python: 876; makefile: 560; xml: 63; perl: 18; sh: 4
file content (85 lines) | stat: -rw-r--r-- 1,758 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "tran_variables.h"


/*  output: none
    return value:  1 = OK
                   0 = NG

   purpose:
   to confirm that ...|L0|L1|L2|L3|... has overlapping PAO only between  L1 and L2.

*/
int TRAN_Check_Region_Lead(
  int atomnum,
  int *WhatSpecies, 
  double *Spe_Atom_Cut1,
  double **Gxyz,
  double tv[4][4]
)
{

   int ct_AN;
   int wanA;
   double rcutA;

   int ct_BN;
   int wanB;
   double rcutB;

   double rcutAB;

   int ix,iy,iz;
   int nz=3,ny=3;

   double A[4], B[4], diff[4];
   double len;

   int i;


   /* this routine only in the case of TRAN_output_hks!=0 */
   if ( TRAN_output_hks ==0 ) {
          return 1;
   }


   for (ct_AN=1;ct_AN<=atomnum;ct_AN++) {
     wanA = WhatSpecies[ct_AN];
     rcutA = Spe_Atom_Cut1[wanA];
     for (i=1;i<=3;i++) { A[i]= Gxyz[ct_AN][i]; }
     for (ct_BN=1;ct_BN<=atomnum;ct_BN++) {
       wanB = WhatSpecies[ct_BN];
       rcutB = Spe_Atom_Cut1[wanB];
       
       rcutAB = rcutA+rcutB;

       for (ix=-2;ix<=2; ix+=4) {
	 for (iy=-ny;iy<=ny;iy++) {
	   for (iz=-nz;iz<=nz;iz++) {
	     for (i=1;i<=3;i++) { B[i] = Gxyz[ct_BN][i]+ tv[1][i]*ix + tv[2][i]*iy+tv[3][i]*iz; } 
	     for (i=1;i<=3;i++) { diff[i] = A[i]-B[i]; }
	     len = sqrt( diff[1]*diff[1]+diff[2]*diff[2]+diff[3]*diff[3] );
	     if ( len <= rcutAB ) { 
                printf("\n\nTRAN_Check_Region_Lead()\n");
	        printf("\nThe length between atomA=%d and atomB=%d is too short for the transport calculation.\n",ct_AN, ct_BN); 
		printf("distance=%lf rcutA=%lf rcutB=%lf\n",len,rcutA,rcutB);
	        return 0; 
	     }
	     
	   } /* ix */
	 } /* iy */
       } /* iz */

     } /* ct_BN */

   } /* ct_AN */

   return 1;
}