## File: Hamiltonian_Band.c

package info (click to toggle)
openmx 3.7.6-1
 `123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221` ``````/********************************************************************** Hamiltonian_Band.c: Hamiltonian_Band.c is a subroutine to make a Hamiltonian matrix for a periodic boundary system using Bloch theorem. Log of Hamiltonian_Band.c: 22/Nov/2001 Released by T.Ozaki ***********************************************************************/ #include #include #include #include "openmx_common.h" #include "mpi.h" void Hamiltonian_Band(int Host_ID1, double ****RH, dcomplex **H, int *MP, double k1, double k2, double k3) { static int firsttime=1; int i,j,k,wanA,wanB,tnoA,tnoB,Anum,Bnum; int NUM,MA_AN,GA_AN,LB_AN,GB_AN; int l1,l2,l3,Rn,n2; double **H1,**H2; double *tmp_array1,*tmp_array2; double kRn,si,co,rh,ih; int ID,myid,numprocs,tag=999; MPI_Status stat; MPI_Request request; /* MPI */ MPI_Comm_size(mpi_comm_level1,&numprocs); MPI_Comm_rank(mpi_comm_level1,&myid); MPI_Barrier(mpi_comm_level1); /* set MP */ Anum = 1; for (i=1; i<=atomnum; i++){ MP[i] = Anum; wanA = WhatSpecies[i]; tnoA = Spe_Total_CNO[wanA]; Anum = Anum + tnoA; } NUM = Anum - 1; /**************************************************** Allocation ****************************************************/ n2 = NUM + 2; H1 = (double**)malloc(sizeof(double*)*n2); for (i=0; i