File: TRAN_Check_Region_Lead.c

package info (click to toggle)
openmx 3.7.6-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd, stretch
  • size: 325,856 kB
  • ctags: 3,575
  • sloc: ansic: 152,655; f90: 2,080; python: 876; makefile: 675; sh: 25; perl: 18
file content (81 lines) | stat: -rw-r--r-- 1,822 bytes parent folder | download | duplicates (2)
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
/**********************************************************************
  TRAN_Check_Region_Lead.c:

  TRAN_Check_Region_Lead.c is a subroutine to check whether the lead
  is set up properly or not.

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

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

  Log of TRAN_Check_Region_Lead.o

     11/Dec/2005   Released by H.Kino

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

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "tran_variables.h"


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;
  double len,dx,dy,dz;
  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 (ct_BN=1; ct_BN<=atomnum; ct_BN++) {

      wanB = WhatSpecies[ct_BN];
      rcutB = Spe_Atom_Cut1[wanB];
      rcutAB = rcutA + rcutB;

      dx = Gxyz[ct_AN][1] - (Gxyz[ct_BN][1] + 2.0*tv[1][1]);
      dy = Gxyz[ct_AN][2] - (Gxyz[ct_BN][2] + 2.0*tv[1][2]);
      dz = Gxyz[ct_AN][3] - (Gxyz[ct_BN][3] + 2.0*tv[1][3]);

      len = sqrt( dx*dx + dy*dy + dz*dz );

      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; 
      }

    } /* ct_BN */
  } /* ct_AN */

  return 1;
}