-
-
Save Ncmexp2717/4a669c843f5a118ca87c65a2a98b5357 to your computer and use it in GitHub Desktop.
A correction about sawtooth potential for electric fields
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/********************************************************************** | |
Force.c: | |
Force.c is a subroutine to calculate force on atoms. | |
Log of Force.c: | |
22/Nov/2001 Released by T. Ozaki | |
18/Apr/2013 Force3() modified by A.M. Ito | |
2/Nov./2020 Modified by N. Yamaguchi for a correction | |
about sawtooth potential for electric fields | |
***********************************************************************/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <math.h> | |
#include <time.h> | |
#include "openmx_common.h" | |
#include "mpi.h" | |
#include <omp.h> | |
#define measure_time 0 | |
static void dH_U_full(int Mc_AN, int h_AN, int q_AN, | |
double *****OLP, double ****v_eff, | |
double ***Hx, double ***Hy, double ***Hz); | |
static void dH_U_NC_full(int Mc_AN, int h_AN, int q_AN, | |
double *****OLP, dcomplex *****NC_v_eff, | |
dcomplex ****Hx, dcomplex ****Hy, dcomplex ****Hz); | |
static void dHNL(int where_flag, | |
int Mc_AN, int h_AN, int q_AN, | |
double ******DS_NL1, | |
dcomplex ***Hx, dcomplex ***Hy, dcomplex ***Hz); | |
static void dHVNA(int where_flag, int Mc_AN, int h_AN, int q_AN, | |
Type_DS_VNA *****DS_VNA1, | |
double *****TmpHVNA2, double *****TmpHVNA3, | |
double **Hx, double **Hy, double **Hz); | |
static void dHNL_SO( | |
double *sumx0r, | |
double *sumy0r, | |
double *sumz0r, | |
double *sumx1r, | |
double *sumy1r, | |
double *sumz1r, | |
double *sumx2r, | |
double *sumy2r, | |
double *sumz2r, | |
double *sumx0i, | |
double *sumy0i, | |
double *sumz0i, | |
double *sumx1i, | |
double *sumy1i, | |
double *sumz1i, | |
double *sumx2i, | |
double *sumy2i, | |
double *sumz2i, | |
double fugou, | |
double PFp, | |
double PFm, | |
double ene_p, | |
double ene_m, | |
int l2, int *l, | |
int Mc_AN, int k, int m, | |
int Mj_AN, int kl, int n, | |
double ******DS_NL1); | |
static void dHCH(int where_flag, | |
int Mc_AN, int h_AN, int q_AN, | |
double *****OLP1, | |
dcomplex ***Hx, dcomplex ***Hy, dcomplex ***Hz); | |
static void dHCH_SO(double *sumx0r, double *sumx0i, double *sumy0r, double *sumy0i, double *sumz0r, double *sumz0i, | |
double *sumx1r, double *sumx1i, double *sumy1r, double *sumy1i, double *sumz1r, double *sumz1i, | |
double *sumx2r, double *sumx2i, double *sumy2r, double *sumy2i, double *sumz2r, double *sumz2i, | |
double fugou, | |
int Mc_AN, int k, int m, | |
int Mj_AN, int kl, int n, | |
int kg, int wakg, | |
double penalty_value, | |
double *****OLP1); | |
static void MPI_OLP(double *****OLP1); | |
static void Force3(); | |
static void Force4(); | |
static void Force4B(double *****CDM0); | |
static void Force_HNL(double *****CDM0, double *****iDM0); | |
static void Force_CoreHole(double *****CDM0, double *****iDM0); | |
double Force(double *****H0, | |
double ******DS_NL, | |
double *****OLP, | |
double *****CDM, | |
double *****EDM) | |
{ | |
static int firsttime=1; | |
int Nc,GNc,GRc,Cwan,s1,s2,BN_AB; | |
int Mc_AN,Gc_AN,MNc,start_q_AN; | |
double x,y,z,dx,dy,dz,tmp0,tmp1,tmp2,tmp3; | |
double xx,r2,tot_den; | |
double sumx,sumy,sumz,r,dege,pref; | |
int i,j,k,l,Hwan,Qwan,so,p0,q,q0; | |
int h_AN,Gh_AN,q_AN,Gq_AN; | |
int ian,jan,kl,spin,spinmax,al,be,p,size_CDM0,size_iDM0; | |
int tno0,tno1,tno2,Mh_AN,Mq_AN,n,num,size1,size2; | |
int wanA,wanB,Gc_BN; | |
int XC_P_switch; | |
double time0; | |
double dum,dge; | |
double dEx,dEy,dEz; | |
double Cxyz[4]; | |
double *Fx,*Fy,*Fz; | |
dcomplex ***Hx; | |
dcomplex ***Hy; | |
dcomplex ***Hz; | |
double ***HUx; | |
double ***HUy; | |
double ***HUz; | |
dcomplex ****NC_HUx; | |
dcomplex ****NC_HUy; | |
dcomplex ****NC_HUz; | |
double **HVNAx; | |
double **HVNAy; | |
double **HVNAz; | |
double *****CDM0; | |
double *****iDM0; | |
double *tmp_array; | |
double *tmp_array2; | |
double Re00x,Re00y,Re00z; | |
double Re11x,Re11y,Re11z; | |
double Re01x,Re01y,Re01z; | |
double Im00x,Im00y,Im00z; | |
double Im11x,Im11y,Im11z; | |
double Im01x,Im01y,Im01z; | |
int *Snd_CDM0_Size,*Rcv_CDM0_Size; | |
int *Snd_iDM0_Size,*Rcv_iDM0_Size; | |
double TStime,TEtime; | |
int numprocs,myid,tag=999,ID,IDS,IDR; | |
double Stime_atom, Etime_atom; | |
/* for OpenMP */ | |
int OMPID,Nthrds,Nprocs; | |
double stime,etime; | |
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); | |
dtime(&TStime); | |
/**************************************************** | |
allocation of arrays: | |
****************************************************/ | |
Fx = (double*)malloc(sizeof(double)*(Matomnum+1)); | |
Fy = (double*)malloc(sizeof(double)*(Matomnum+1)); | |
Fz = (double*)malloc(sizeof(double)*(Matomnum+1)); | |
HVNAx = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HVNAx[j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
HVNAy = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HVNAy[j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
HVNAz = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HVNAz[j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
/* CDM0 */ | |
size_CDM0 = 0; | |
CDM0 = (double*****)malloc(sizeof(double****)*(SpinP_switch+1)); | |
for (k=0; k<=SpinP_switch; k++){ | |
CDM0[k] = (double****)malloc(sizeof(double***)*(Matomnum+MatomnumF+1)); | |
FNAN[0] = 0; | |
for (Mc_AN=0; Mc_AN<=(Matomnum+MatomnumF); Mc_AN++){ | |
if (Mc_AN==0){ | |
Gc_AN = 0; | |
tno0 = 1; | |
} | |
else{ | |
Gc_AN = F_M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno0 = Spe_Total_CNO[Cwan]; | |
} | |
CDM0[k][Mc_AN] = (double***)malloc(sizeof(double**)*(FNAN[Gc_AN]+1)); | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
if (Mc_AN==0){ | |
tno1 = 1; | |
} | |
else{ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno1 = Spe_Total_CNO[Hwan]; | |
} | |
CDM0[k][Mc_AN][h_AN] = (double**)malloc(sizeof(double*)*tno0); | |
for (i=0; i<tno0; i++){ | |
CDM0[k][Mc_AN][h_AN][i] = (double*)malloc(sizeof(double)*tno1); | |
size_CDM0 += tno1; | |
} | |
} | |
} | |
} | |
Snd_CDM0_Size = (int*)malloc(sizeof(int)*numprocs); | |
Rcv_CDM0_Size = (int*)malloc(sizeof(int)*numprocs); | |
/* iDM0 */ | |
if ( SO_switch==1 || (Hub_U_switch==1 && SpinP_switch==3) || 1<=Constraint_NCS_switch | |
|| Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1 ){ | |
size_iDM0 = 0; | |
iDM0 = (double*****)malloc(sizeof(double****)*2); | |
for (k=0; k<2; k++){ | |
iDM0[k] = (double****)malloc(sizeof(double***)*(Matomnum+MatomnumF+1)); | |
FNAN[0] = 0; | |
for (Mc_AN=0; Mc_AN<=(Matomnum+MatomnumF); Mc_AN++){ | |
if (Mc_AN==0){ | |
Gc_AN = 0; | |
tno0 = 1; | |
} | |
else{ | |
Gc_AN = F_M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno0 = Spe_Total_CNO[Cwan]; | |
} | |
iDM0[k][Mc_AN] = (double***)malloc(sizeof(double**)*(FNAN[Gc_AN]+1)); | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
if (Mc_AN==0){ | |
tno1 = 1; | |
} | |
else{ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno1 = Spe_Total_CNO[Hwan]; | |
} | |
iDM0[k][Mc_AN][h_AN] = (double**)malloc(sizeof(double*)*tno0); | |
for (i=0; i<tno0; i++){ | |
iDM0[k][Mc_AN][h_AN][i] = (double*)malloc(sizeof(double)*tno1); | |
size_iDM0 += tno1; | |
} | |
} | |
} | |
} | |
Snd_iDM0_Size = (int*)malloc(sizeof(int)*numprocs); | |
Rcv_iDM0_Size = (int*)malloc(sizeof(int)*numprocs); | |
} | |
/**************************************************** | |
PrintMemory | |
****************************************************/ | |
if (firsttime) { | |
PrintMemory("Force: Hx",sizeof(dcomplex)*List_YOUSO[7]*List_YOUSO[7],NULL); | |
PrintMemory("Force: Hy",sizeof(dcomplex)*List_YOUSO[7]*List_YOUSO[7],NULL); | |
PrintMemory("Force: Hz",sizeof(dcomplex)*List_YOUSO[7]*List_YOUSO[7],NULL); | |
PrintMemory("Force: CDM0",sizeof(double)*size_CDM0,NULL); | |
if ( SO_switch==1 || (Hub_U_switch==1 && SpinP_switch==3) || 1<=Constraint_NCS_switch | |
|| Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1){ | |
PrintMemory("Force: iDM0",sizeof(double)*size_iDM0,NULL); | |
} | |
firsttime=0; | |
} | |
/**************************************************** | |
CDM to CDM0 | |
****************************************************/ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_CNO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_CNO[Hwan]; | |
for (spin=0; spin<=SpinP_switch; spin++){ | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
CDM0[spin][Mc_AN][h_AN][i][j] = CDM[spin][Mc_AN][h_AN][i][j]; | |
} | |
} | |
} | |
} | |
} | |
/**************************************************** | |
iDM to iDM0 | |
****************************************************/ | |
if ( SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1 && SpinP_switch==3) || 1<=Constraint_NCS_switch | |
|| Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1){ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_CNO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_CNO[Hwan]; | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
iDM0[0][Mc_AN][h_AN][i][j] = iDM[0][0][Mc_AN][h_AN][i][j]; | |
iDM0[1][Mc_AN][h_AN][i][j] = iDM[0][1][Mc_AN][h_AN][i][j]; | |
} | |
} | |
} | |
} | |
} | |
/**************************************************** | |
MPI: | |
CDM0 | |
****************************************************/ | |
/*********************************** | |
set data size | |
************************************/ | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
if (ID!=0){ | |
tag = 999; | |
/* find data size to send block data */ | |
if (F_Snd_Num[IDS]!=0){ | |
size1 = 0; | |
for (spin=0; spin<=SpinP_switch; spin++){ | |
for (n=0; n<F_Snd_Num[IDS]; n++){ | |
Mc_AN = Snd_MAN[IDS][n]; | |
Gc_AN = Snd_GAN[IDS][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_CNO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_CNO[Hwan]; | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
size1++; | |
} | |
} | |
} | |
} | |
} | |
Snd_CDM0_Size[IDS] = size1; | |
MPI_Isend(&size1, 1, MPI_INT, IDS, tag, mpi_comm_level1, &request); | |
} | |
else{ | |
Snd_CDM0_Size[IDS] = 0; | |
} | |
/* receiving of size of data */ | |
if (F_Rcv_Num[IDR]!=0){ | |
MPI_Recv(&size2, 1, MPI_INT, IDR, tag, mpi_comm_level1, &stat); | |
Rcv_CDM0_Size[IDR] = size2; | |
} | |
else{ | |
Rcv_CDM0_Size[IDR] = 0; | |
} | |
if (F_Snd_Num[IDS]!=0) MPI_Wait(&request,&stat); | |
} | |
else{ | |
Snd_CDM0_Size[IDS] = 0; | |
Rcv_CDM0_Size[IDR] = 0; | |
} | |
} | |
/*********************************** | |
data transfer | |
************************************/ | |
tag = 999; | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
if (ID!=0){ | |
/***************************** | |
sending of data | |
*****************************/ | |
if (F_Snd_Num[IDS]!=0){ | |
size1 = Snd_CDM0_Size[IDS]; | |
/* allocation of array */ | |
tmp_array = (double*)malloc(sizeof(double)*size1); | |
/* multidimentional array to vector array */ | |
num = 0; | |
for (spin=0; spin<=SpinP_switch; spin++){ | |
for (n=0; n<F_Snd_Num[IDS]; n++){ | |
Mc_AN = Snd_MAN[IDS][n]; | |
Gc_AN = Snd_GAN[IDS][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_CNO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_CNO[Hwan]; | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
tmp_array[num] = CDM[spin][Mc_AN][h_AN][i][j]; | |
num++; | |
} | |
} | |
} | |
} | |
} | |
MPI_Isend(&tmp_array[0], size1, MPI_DOUBLE, IDS, tag, mpi_comm_level1, &request); | |
} | |
/***************************** | |
receiving of block data | |
*****************************/ | |
if (F_Rcv_Num[IDR]!=0){ | |
size2 = Rcv_CDM0_Size[IDR]; | |
/* allocation of array */ | |
tmp_array2 = (double*)malloc(sizeof(double)*size2); | |
MPI_Recv(&tmp_array2[0], size2, MPI_DOUBLE, IDR, tag, mpi_comm_level1, &stat); | |
num = 0; | |
for (spin=0; spin<=SpinP_switch; spin++){ | |
Mc_AN = F_TopMAN[IDR] - 1; | |
for (n=0; n<F_Rcv_Num[IDR]; n++){ | |
Mc_AN++; | |
Gc_AN = Rcv_GAN[IDR][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_CNO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_CNO[Hwan]; | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
CDM0[spin][Mc_AN][h_AN][i][j] = tmp_array2[num]; | |
num++; | |
} | |
} | |
} | |
} | |
} | |
/* freeing of array */ | |
free(tmp_array2); | |
} | |
if (F_Snd_Num[IDS]!=0){ | |
MPI_Wait(&request,&stat); | |
free(tmp_array); /* freeing of array */ | |
} | |
} | |
} | |
/**************************************************** | |
MPI: | |
iDM0 | |
****************************************************/ | |
if ( SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1 && SpinP_switch==3) || 1<=Constraint_NCS_switch | |
|| Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1){ | |
/*********************************** | |
set data size | |
************************************/ | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
if (ID!=0){ | |
tag = 999; | |
/* find data size to send block data */ | |
if (F_Snd_Num[IDS]!=0){ | |
size1 = 0; | |
for (so=0; so<2; so++){ | |
for (n=0; n<F_Snd_Num[IDS]; n++){ | |
Mc_AN = Snd_MAN[IDS][n]; | |
Gc_AN = Snd_GAN[IDS][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_CNO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_CNO[Hwan]; | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
size1++; | |
} | |
} | |
} | |
} | |
} | |
Snd_iDM0_Size[IDS] = size1; | |
MPI_Isend(&size1, 1, MPI_INT, IDS, tag, mpi_comm_level1, &request); | |
} | |
else{ | |
Snd_iDM0_Size[IDS] = 0; | |
} | |
/* receiving of size of data */ | |
if (F_Rcv_Num[IDR]!=0){ | |
MPI_Recv(&size2, 1, MPI_INT, IDR, tag, mpi_comm_level1, &stat); | |
Rcv_iDM0_Size[IDR] = size2; | |
} | |
else{ | |
Rcv_iDM0_Size[IDR] = 0; | |
} | |
if (F_Snd_Num[IDS]!=0) MPI_Wait(&request,&stat); | |
} | |
else{ | |
Snd_iDM0_Size[IDS] = 0; | |
Rcv_iDM0_Size[IDR] = 0; | |
} | |
} | |
/*********************************** | |
data transfer | |
************************************/ | |
tag = 999; | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
if (ID!=0){ | |
/***************************** | |
sending of data | |
*****************************/ | |
if (F_Snd_Num[IDS]!=0){ | |
size1 = Snd_iDM0_Size[IDS]; | |
/* allocation of array */ | |
tmp_array = (double*)malloc(sizeof(double)*size1); | |
/* multidimentional array to vector array */ | |
num = 0; | |
for (so=0; so<2; so++){ | |
for (n=0; n<F_Snd_Num[IDS]; n++){ | |
Mc_AN = Snd_MAN[IDS][n]; | |
Gc_AN = Snd_GAN[IDS][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_CNO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_CNO[Hwan]; | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
tmp_array[num] = iDM[0][so][Mc_AN][h_AN][i][j]; | |
num++; | |
} | |
} | |
} | |
} | |
} | |
MPI_Isend(&tmp_array[0], size1, MPI_DOUBLE, IDS, tag, mpi_comm_level1, &request); | |
} | |
/***************************** | |
receiving of block data | |
*****************************/ | |
if (F_Rcv_Num[IDR]!=0){ | |
size2 = Rcv_iDM0_Size[IDR]; | |
/* allocation of array */ | |
tmp_array2 = (double*)malloc(sizeof(double)*size2); | |
MPI_Recv(&tmp_array2[0], size2, MPI_DOUBLE, IDR, tag, mpi_comm_level1, &stat); | |
num = 0; | |
for (so=0; so<2; so++){ | |
Mc_AN = F_TopMAN[IDR] - 1; | |
for (n=0; n<F_Rcv_Num[IDR]; n++){ | |
Mc_AN++; | |
Gc_AN = Rcv_GAN[IDR][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_CNO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_CNO[Hwan]; | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
iDM0[so][Mc_AN][h_AN][i][j] = tmp_array2[num]; | |
num++; | |
} | |
} | |
} | |
} | |
} | |
/* freeing of array */ | |
free(tmp_array2); | |
} | |
if (F_Snd_Num[IDS]!=0){ | |
MPI_Wait(&request,&stat); | |
free(tmp_array); /* freeing of array */ | |
} | |
} | |
} | |
} /* if ( SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1 && SpinP_switch==3) | |
|| 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1) */ | |
/**************************************************** | |
#1 of force | |
-\int \delta V_H drho_a/dx dr | |
and | |
force induced from PCC | |
+\int V_XC drho_pcc/dx dr | |
****************************************************/ | |
if (myid==Host_ID && 0<level_stdout){ | |
printf(" Force calculation #1\n");fflush(stdout); | |
} | |
dtime(&stime); | |
/********************************************************* | |
set RefVxc_Grid, where the CA-LDA exchange-correlation | |
functional is alway used. | |
*********************************************************/ | |
XC_P_switch = 1; | |
for (BN_AB=0; BN_AB<My_NumGridB_AB; BN_AB++){ | |
tot_den = ADensity_Grid_B[BN_AB] + ADensity_Grid_B[BN_AB]; | |
if (PCC_switch==1) { | |
tot_den += PCCDensity_Grid_B[0][BN_AB] + PCCDensity_Grid_B[1][BN_AB]; | |
} | |
RefVxc_Grid_B[BN_AB] = XC_Ceperly_Alder(tot_den,XC_P_switch); | |
} | |
Data_Grid_Copy_B2C_1( RefVxc_Grid_B, RefVxc_Grid ); | |
Data_Grid_Copy_B2C_1( dVHart_Grid_B, dVHart_Grid ); | |
Data_Grid_Copy_B2C_2( Vxc_Grid_B, Vxc_Grid ); | |
Data_Grid_Copy_B2C_2( Density_Grid_B, Density_Grid ); | |
#pragma omp parallel shared(myid,Spe_OpenCore_flag,Spe_Atomic_PCC,Spe_VPS_RV,Spe_VPS_XV,Spe_Num_Mesh_VPS,Spe_PAO_RV,Spe_Atomic_Den,Spe_PAO_XV,Spe_Num_Mesh_PAO,time_per_atom,level_stdout,GridVol,Vxc_Grid,RefVxc_Grid,SpinP_switch,F_Vxc_flag,PCC_switch,dVHart_Grid,F_dVHart_flag,Gxyz,atv,MGridListAtom,CellListAtom,GridListAtom,GridN_Atom,WhatSpecies,M2G,Matomnum) private(OMPID,Nthrds,Nprocs,Mc_AN,Stime_atom,Etime_atom,Gc_AN,Cwan,sumx,sumy,sumz,Nc,GNc,GRc,MNc,Cxyz,x,y,z,dx,dy,dz,r,r2,tmp0,tmp1,tmp2,xx) | |
{ | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (Mc_AN=(OMPID*Matomnum/Nthrds+1); Mc_AN<((OMPID+1)*Matomnum/Nthrds+1); Mc_AN++){ | |
dtime(&Stime_atom); | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
for (Nc=0; Nc<GridN_Atom[Gc_AN]; Nc++){ | |
GNc = GridListAtom[Mc_AN][Nc]; | |
GRc = CellListAtom[Mc_AN][Nc]; | |
MNc = MGridListAtom[Mc_AN][Nc]; | |
Get_Grid_XYZ(GNc,Cxyz); | |
x = Cxyz[1] + atv[GRc][1]; | |
y = Cxyz[2] + atv[GRc][2]; | |
z = Cxyz[3] + atv[GRc][3]; | |
dx = Gxyz[Gc_AN][1] - x; | |
dy = Gxyz[Gc_AN][2] - y; | |
dz = Gxyz[Gc_AN][3] - z; | |
r2 = dx*dx + dy*dy + dz*dz; | |
r = sqrt(r2); | |
xx = 0.5*log(r2); | |
/* for empty atoms */ | |
if (r<1.0e-10) r = 1.0e-10; | |
if (1.0e-14<r){ | |
tmp0 = Dr_KumoF( Spe_Num_Mesh_PAO[Cwan], xx, r, | |
Spe_PAO_XV[Cwan], Spe_PAO_RV[Cwan], Spe_Atomic_Den[Cwan]); | |
tmp1 = dVHart_Grid[MNc]*tmp0/r*F_dVHart_flag; | |
sumx += tmp1*dx; | |
sumy += tmp1*dy; | |
sumz += tmp1*dz; | |
/* contribution of Exc^(0) */ | |
tmp1 = RefVxc_Grid[MNc]*tmp0/r*F_Vxc_flag; | |
sumx += tmp1*dx; | |
sumy += tmp1*dy; | |
sumz += tmp1*dz; | |
/* Added by N. Yamaguchi ***/ | |
if (E_Field_switch==1){ | |
tmp1=VEF_Grid[MNc]*tmp0/r*F_VEF_flag; | |
sumx+=tmp1*dx; | |
sumy+=tmp1*dy; | |
sumz+=tmp1*dz; | |
} | |
/* ***/ | |
/* partial core correction */ | |
if (PCC_switch==1){ | |
tmp0 = 0.5*F_Vxc_flag*Dr_KumoF( Spe_Num_Mesh_VPS[Cwan], xx, r, | |
Spe_VPS_XV[Cwan], Spe_VPS_RV[Cwan], Spe_Atomic_PCC[Cwan]); | |
if (SpinP_switch==0){ | |
tmp2 = 2.0*Vxc_Grid[0][MNc]; | |
} | |
else { | |
if (Spe_OpenCore_flag[Cwan]==0){ | |
tmp2 = Vxc_Grid[0][MNc] + Vxc_Grid[1][MNc]; | |
} | |
else if (Spe_OpenCore_flag[Cwan]==1){ | |
tmp2 = 2.0*Vxc_Grid[0][MNc]; | |
} | |
else if (Spe_OpenCore_flag[Cwan]==-1){ | |
tmp2 = 2.0*Vxc_Grid[1][MNc]; | |
} | |
} | |
tmp1 = tmp2*tmp0/r; | |
sumx -= tmp1*dx; | |
sumy -= tmp1*dy; | |
sumz -= tmp1*dz; | |
/* contribution of Exc^(0) */ | |
tmp2 = 2.0*RefVxc_Grid[MNc]; | |
tmp1 = tmp2*tmp0/r; | |
sumx += tmp1*dx; | |
sumy += tmp1*dy; | |
sumz += tmp1*dz; | |
} | |
} | |
} | |
Gxyz[Gc_AN][17] = -sumx*GridVol; | |
Gxyz[Gc_AN][18] = -sumy*GridVol; | |
Gxyz[Gc_AN][19] = -sumz*GridVol; | |
if (2<=level_stdout){ | |
printf("<Force> force(1) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,-sumx*GridVol,-sumy*GridVol,-sumz*GridVol);fflush(stdout); | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} | |
} /* #pragma omp parallel */ | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for force#1=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/**************************************************** | |
added by T.Ohwaki | |
#1' of force | |
contribution from an artificial wall applied | |
in the ESM method so that atoms cannot go beyond | |
the boundary of the unit cell along the a-axis. | |
****************************************************/ | |
if (ESM_switch!=0){ | |
double fx,xb,x0,x,a; | |
/* modified by AdvanceSoft */ | |
xb = Grid_Origin[ESM_direction] + tv[1][ESM_direction]; | |
a = ESM_wall_height/pow(1.89,3.0); | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
x = Gxyz[Gc_AN][ESM_direction]; | |
x0 = xb - ESM_wall_position; | |
dx = x - x0; | |
if (0.0<dx){ | |
fx = 3.0*a*dx*dx; | |
} | |
else { | |
fx = 0.0; | |
} | |
Gxyz[Gc_AN][16+ESM_direction] += fx; | |
/* | |
printf("Gc_AN=%2d fx=%15.12f\n",Gc_AN,fx);fflush(stdout); | |
*/ | |
/* add an artifical force if required. */ | |
if(Arti_Force==1){ | |
if(Gc_AN==1) Gxyz[1][16+ESM_direction] += Arti_Grad; | |
if(myid==0) printf(" adding force at the proc. 'Force #1' \n"); | |
} | |
} | |
} | |
/**************************************************** | |
contraction | |
H0 | |
OLP | |
****************************************************/ | |
MPI_Barrier(mpi_comm_level1); | |
if (Cnt_switch==1){ | |
Cont_Matrix0(H0[0],CntH0[0]); | |
Cont_Matrix0(H0[1],CntH0[1]); | |
Cont_Matrix0(H0[2],CntH0[2]); | |
Cont_Matrix0(H0[3],CntH0[3]); | |
Cont_Matrix0(OLP[0],CntOLP[0]); | |
Cont_Matrix0(OLP[1],CntOLP[1]); | |
Cont_Matrix0(OLP[2],CntOLP[2]); | |
Cont_Matrix0(OLP[3],CntOLP[3]); | |
} | |
if ( Hub_U_switch==1 && Hub_U_occupation==1 ){ | |
MPI_OLP(OLP); | |
} | |
MPI_Barrier(mpi_comm_level1); | |
/**************************************************** | |
#2 of force | |
kinetic operator and contribution from the Hubbard | |
term with the full representation in calculating | |
the occupation number | |
****************************************************/ | |
dtime(&stime); | |
if (myid==Host_ID && 0<level_stdout){ | |
printf(" Force calculation #2\n");fflush(stdout); | |
} | |
#pragma omp parallel shared(time_per_atom,Gxyz,myid,level_stdout,iDM0,CDM0,CntH0,H0,F_Kin_flag,NC_v_eff,v_eff,OLP,Hub_U_occupation,Cnt_switch,F_NL_flag,List_YOUSO,RMI1,Zeeman_NCO_switch,Zeeman_NCS_switch,Constraint_NCS_switch,F_U_flag,Hub_U_switch,SO_switch,SpinP_switch,Spe_Total_CNO,F_G2M,natn,FNAN,WhatSpecies,M2G,Matomnum) private(OMPID,Nthrds,Nprocs,Mc_AN,Stime_atom,Etime_atom,Gc_AN,Cwan,dEx,dEy,dEz,h_AN,Gh_AN,Mh_AN,Hwan,ian,start_q_AN,q_AN,Gq_AN,Mq_AN,Qwan,jan,kl,so,i,j,k,Hx,Hy,Hz,HUx,HUy,HUz,NC_HUx,NC_HUy,NC_HUz,s1,s2,pref,spinmax,spin) | |
{ | |
/* allocation of arrays */ | |
Hx = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hx[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hy = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hy[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hy[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hz = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hz[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hz[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
if ( (Hub_U_switch==1 || 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1) | |
&& (Hub_U_occupation==1 || Hub_U_occupation==2) | |
&& SpinP_switch!=3 ){ | |
HUx = (double***)malloc(sizeof(double**)*3); | |
for (i=0; i<3; i++){ | |
HUx[i] = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HUx[i][j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
} | |
HUy = (double***)malloc(sizeof(double**)*3); | |
for (i=0; i<3; i++){ | |
HUy[i] = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HUy[i][j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
} | |
HUz = (double***)malloc(sizeof(double**)*3); | |
for (i=0; i<3; i++){ | |
HUz[i] = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HUz[i][j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
} | |
} | |
if ( (Hub_U_switch==1 || 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1) | |
&& (Hub_U_occupation==1 || Hub_U_occupation==2) | |
&& SpinP_switch==3 ){ | |
NC_HUx = (dcomplex****)malloc(sizeof(dcomplex***)*2); | |
for (i=0; i<2; i++){ | |
NC_HUx[i] = (dcomplex***)malloc(sizeof(dcomplex**)*2); | |
for (j=0; j<2; j++){ | |
NC_HUx[i][j] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (k=0; k<List_YOUSO[7]; k++){ | |
NC_HUx[i][j][k] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
} | |
NC_HUy = (dcomplex****)malloc(sizeof(dcomplex***)*2); | |
for (i=0; i<2; i++){ | |
NC_HUy[i] = (dcomplex***)malloc(sizeof(dcomplex**)*2); | |
for (j=0; j<2; j++){ | |
NC_HUy[i][j] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (k=0; k<List_YOUSO[7]; k++){ | |
NC_HUy[i][j][k] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
} | |
NC_HUz = (dcomplex****)malloc(sizeof(dcomplex***)*2); | |
for (i=0; i<2; i++){ | |
NC_HUz[i] = (dcomplex***)malloc(sizeof(dcomplex**)*2); | |
for (j=0; j<2; j++){ | |
NC_HUz[i][j] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (k=0; k<List_YOUSO[7]; k++){ | |
NC_HUz[i][j][k] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
} | |
} | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (Mc_AN=(OMPID*Matomnum/Nthrds+1); Mc_AN<((OMPID+1)*Matomnum/Nthrds+1); Mc_AN++){ | |
dtime(&Stime_atom); | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Mh_AN = F_G2M[Gh_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
ian = Spe_Total_CNO[Hwan]; | |
if ( SpinP_switch==3 && (SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1) | |
|| 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1) ) | |
start_q_AN = 0; | |
else | |
start_q_AN = h_AN; | |
for (q_AN=start_q_AN; q_AN<=FNAN[Gc_AN]; q_AN++){ | |
Gq_AN = natn[Gc_AN][q_AN]; | |
Mq_AN = F_G2M[Gq_AN]; | |
Qwan = WhatSpecies[Gq_AN]; | |
jan = Spe_Total_CNO[Qwan]; | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
if (0<=kl){ | |
for (so=0; so<3; so++){ | |
for (i=0; i<List_YOUSO[7]; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx[so][i][j] = Complex(0.0,0.0); | |
Hy[so][i][j] = Complex(0.0,0.0); | |
Hz[so][i][j] = Complex(0.0,0.0); | |
} | |
} | |
} | |
/**************************************************** | |
Contribution from LDA+U with 'full'treatment for | |
counting the occupation number | |
****************************************************/ | |
if ( (Hub_U_switch==1 && F_U_flag==1) || 1<=Constraint_NCS_switch | |
|| Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1 ){ | |
/* full treatment and collinear case */ | |
if (Hub_U_occupation==1 && SpinP_switch!=3){ | |
/* initialize HUx, HUy, and HUz */ | |
for (so=0; so<3; so++){ | |
for (i=0; i<List_YOUSO[7]; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HUx[so][i][j] = 0.0; | |
HUy[so][i][j] = 0.0; | |
HUz[so][i][j] = 0.0; | |
} | |
} | |
} | |
dH_U_full(Mc_AN,h_AN,q_AN,OLP,v_eff,HUx,HUy,HUz); | |
/* add the contribution to Hx, Hy, and Hz */ | |
if (SpinP_switch==0) spinmax = 0; | |
else spinmax = 1; | |
for (spin=0; spin<=spinmax; spin++){ | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
Hx[spin][i][j].r += HUx[spin][i][j]; | |
Hy[spin][i][j].r += HUy[spin][i][j]; | |
Hz[spin][i][j].r += HUz[spin][i][j]; | |
} | |
} | |
} | |
} | |
/* full treatment and non-collinear case */ | |
else if (Hub_U_occupation==1 && SpinP_switch==3){ | |
/* initialize NC_HUx, NC_HUy, and NC_HUz */ | |
for (s1=0; s1<2; s1++){ | |
for (s2=0; s2<2; s2++){ | |
for (i=0; i<List_YOUSO[7]; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
NC_HUx[s1][s2][i][j] = Complex(0.0,0.0); | |
NC_HUy[s1][s2][i][j] = Complex(0.0,0.0); | |
NC_HUz[s1][s2][i][j] = Complex(0.0,0.0); | |
} | |
} | |
} | |
} | |
dH_U_NC_full(Mc_AN,h_AN,q_AN,OLP,NC_v_eff,NC_HUx,NC_HUy,NC_HUz); | |
/****************************************************** | |
add the contribution to Hx, Hy, and Hz | |
Hx[0] 00 | |
Hx[1] 11 | |
Hx[2] 01 | |
******************************************************/ | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
Hx[0][i][j].r += NC_HUx[0][0][i][j].r; | |
Hy[0][i][j].r += NC_HUy[0][0][i][j].r; | |
Hz[0][i][j].r += NC_HUz[0][0][i][j].r; | |
Hx[1][i][j].r += NC_HUx[1][1][i][j].r; | |
Hy[1][i][j].r += NC_HUy[1][1][i][j].r; | |
Hz[1][i][j].r += NC_HUz[1][1][i][j].r; | |
Hx[2][i][j].r += NC_HUx[0][1][i][j].r; | |
Hy[2][i][j].r += NC_HUy[0][1][i][j].r; | |
Hz[2][i][j].r += NC_HUz[0][1][i][j].r; | |
Hx[0][i][j].i += NC_HUx[0][0][i][j].i; | |
Hy[0][i][j].i += NC_HUy[0][0][i][j].i; | |
Hz[0][i][j].i += NC_HUz[0][0][i][j].i; | |
Hx[1][i][j].i += NC_HUx[1][1][i][j].i; | |
Hy[1][i][j].i += NC_HUy[1][1][i][j].i; | |
Hz[1][i][j].i += NC_HUz[1][1][i][j].i; | |
Hx[2][i][j].i += NC_HUx[0][1][i][j].i; | |
Hy[2][i][j].i += NC_HUy[0][1][i][j].i; | |
Hz[2][i][j].i += NC_HUz[0][1][i][j].i; | |
} | |
} | |
} | |
} | |
/**************************************************** | |
H0 = dKinetic | |
****************************************************/ | |
if (F_Kin_flag==1){ | |
/* in case of no obital optimization */ | |
if (Cnt_switch==0){ | |
if (h_AN==0){ | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
Hx[0][i][j].r += H0[1][Mc_AN][q_AN][i][j]; | |
Hy[0][i][j].r += H0[2][Mc_AN][q_AN][i][j]; | |
Hz[0][i][j].r += H0[3][Mc_AN][q_AN][i][j]; | |
Hx[1][i][j].r += H0[1][Mc_AN][q_AN][i][j]; | |
Hy[1][i][j].r += H0[2][Mc_AN][q_AN][i][j]; | |
Hz[1][i][j].r += H0[3][Mc_AN][q_AN][i][j]; | |
} | |
} | |
} | |
else if (h_AN!=0 && q_AN==0){ | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
Hx[0][i][j].r += H0[1][Mc_AN][h_AN][j][i]; | |
Hy[0][i][j].r += H0[2][Mc_AN][h_AN][j][i]; | |
Hz[0][i][j].r += H0[3][Mc_AN][h_AN][j][i]; | |
Hx[1][i][j].r += H0[1][Mc_AN][h_AN][j][i]; | |
Hy[1][i][j].r += H0[2][Mc_AN][h_AN][j][i]; | |
Hz[1][i][j].r += H0[3][Mc_AN][h_AN][j][i]; | |
} | |
} | |
} | |
} | |
/* in case of obital optimization */ | |
else{ | |
if (h_AN==0){ | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
Hx[0][i][j].r += CntH0[1][Mc_AN][q_AN][i][j]; | |
Hy[0][i][j].r += CntH0[2][Mc_AN][q_AN][i][j]; | |
Hz[0][i][j].r += CntH0[3][Mc_AN][q_AN][i][j]; | |
Hx[1][i][j].r += CntH0[1][Mc_AN][q_AN][i][j]; | |
Hy[1][i][j].r += CntH0[2][Mc_AN][q_AN][i][j]; | |
Hz[1][i][j].r += CntH0[3][Mc_AN][q_AN][i][j]; | |
} | |
} | |
} | |
else if (h_AN!=0 && q_AN==0){ | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
Hx[0][i][j].r += CntH0[1][Mc_AN][h_AN][j][i]; | |
Hy[0][i][j].r += CntH0[2][Mc_AN][h_AN][j][i]; | |
Hz[0][i][j].r += CntH0[3][Mc_AN][h_AN][j][i]; | |
Hx[1][i][j].r += CntH0[1][Mc_AN][h_AN][j][i]; | |
Hy[1][i][j].r += CntH0[2][Mc_AN][h_AN][j][i]; | |
Hz[1][i][j].r += CntH0[3][Mc_AN][h_AN][j][i]; | |
} | |
} | |
} | |
} | |
} /* if F_Kin_flag */ | |
/**************************************************** | |
\sum rho*dH | |
****************************************************/ | |
/* non-spin polarization */ | |
if (SpinP_switch==0){ | |
if (q_AN==h_AN) pref = 2.0; | |
else pref = 4.0; | |
for (i=0; i<Spe_Total_CNO[Hwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Qwan]; j++){ | |
dEx += pref*CDM0[0][Mh_AN][kl][i][j]*Hx[0][i][j].r; | |
dEy += pref*CDM0[0][Mh_AN][kl][i][j]*Hy[0][i][j].r; | |
dEz += pref*CDM0[0][Mh_AN][kl][i][j]*Hz[0][i][j].r; | |
} | |
} | |
} | |
/* collinear spin polarized or non-colliear without SO and LDA+U */ | |
else if (SpinP_switch==1 || (SpinP_switch==3 && SO_switch==0 && Hub_U_switch==0 | |
&& Constraint_NCS_switch==0 && Zeeman_NCS_switch==0 && Zeeman_NCO_switch==0)){ | |
if (q_AN==h_AN) pref = 1.0; | |
else pref = 2.0; | |
for (i=0; i<Spe_Total_CNO[Hwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Qwan]; j++){ | |
dEx += pref*( CDM0[0][Mh_AN][kl][i][j]*Hx[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx[1][i][j].r); | |
dEy += pref*( CDM0[0][Mh_AN][kl][i][j]*Hy[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy[1][i][j].r); | |
dEz += pref*( CDM0[0][Mh_AN][kl][i][j]*Hz[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz[1][i][j].r); | |
} | |
} | |
} | |
/* spin collinear with spin-orbit coupling */ | |
else if ( SpinP_switch==1 && SO_switch==1 ){ | |
printf("Spin-orbit coupling is not supported for collinear DFT calculations.\n");fflush(stdout); | |
MPI_Finalize(); | |
exit(0); | |
} | |
/* spin non-collinear with spin-orbit coupling or with LDA+U */ | |
else if ( SpinP_switch==3 && (SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1) | |
|| 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1) ){ | |
for (i=0; i<Spe_Total_CNO[Hwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Qwan]; j++){ | |
dEx += CDM0[0][Mh_AN][kl][i][j]*Hx[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hx[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hx[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hx[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hx[2][i][j].i; | |
dEy += CDM0[0][Mh_AN][kl][i][j]*Hy[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hy[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hy[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hy[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hy[2][i][j].i; | |
dEz += CDM0[0][Mh_AN][kl][i][j]*Hz[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hz[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hz[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hz[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hz[2][i][j].i; | |
} | |
} | |
} | |
} /* if (0<=kl) */ | |
} /* q_AN */ | |
} /* h_AN */ | |
/**************************************************** | |
#2 of Force | |
****************************************************/ | |
if (2<=level_stdout){ | |
printf("<Force> force(2) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,dEx,dEy,dEz);fflush(stdout); | |
} | |
Gxyz[Gc_AN][17] += dEx; | |
Gxyz[Gc_AN][18] += dEy; | |
Gxyz[Gc_AN][19] += dEz; | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} /* Mc_AN */ | |
/* freeing of arrays */ | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hx[i][j]); | |
} | |
free(Hx[i]); | |
} | |
free(Hx); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hy[i][j]); | |
} | |
free(Hy[i]); | |
} | |
free(Hy); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hz[i][j]); | |
} | |
free(Hz[i]); | |
} | |
free(Hz); | |
if ( (Hub_U_switch==1 || 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1) | |
&& (Hub_U_occupation==1 || Hub_U_occupation==2) | |
&& SpinP_switch!=3 ){ | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HUx[i][j]); | |
} | |
free(HUx[i]); | |
} | |
free(HUx); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HUy[i][j]); | |
} | |
free(HUy[i]); | |
} | |
free(HUy); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HUz[i][j]); | |
} | |
free(HUz[i]); | |
} | |
free(HUz); | |
} | |
if ( (Hub_U_switch==1 || 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1) | |
&& (Hub_U_occupation==1 || Hub_U_occupation==2) | |
&& SpinP_switch==3 ){ | |
for (i=0; i<2; i++){ | |
for (j=0; j<2; j++){ | |
for (k=0; k<List_YOUSO[7]; k++){ | |
free(NC_HUx[i][j][k]); | |
} | |
free(NC_HUx[i][j]); | |
} | |
free(NC_HUx[i]); | |
} | |
free(NC_HUx); | |
for (i=0; i<2; i++){ | |
for (j=0; j<2; j++){ | |
for (k=0; k<List_YOUSO[7]; k++){ | |
free(NC_HUy[i][j][k]); | |
} | |
free(NC_HUy[i][j]); | |
} | |
free(NC_HUy[i]); | |
} | |
free(NC_HUy); | |
for (i=0; i<2; i++){ | |
for (j=0; j<2; j++){ | |
for (k=0; k<List_YOUSO[7]; k++){ | |
free(NC_HUz[i][j][k]); | |
} | |
free(NC_HUz[i][j]); | |
} | |
free(NC_HUz[i]); | |
} | |
free(NC_HUz); | |
} | |
} /* #pragma omp parallel */ | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for force#2=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/**************************************************** | |
#3 of Force | |
dn/dx * (VNA + dVH + Vxc) | |
or | |
dn/dx * (dVH + Vxc) | |
****************************************************/ | |
dtime(&stime); | |
if (myid==Host_ID && 0<level_stdout){ | |
printf(" Force calculation #3\n");fflush(stdout); | |
} | |
Force3(); | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for force#3=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/**************************************************** | |
#4 of Force | |
Force4: n * dVNA/dx | |
Force4B: from separable VNA projectors | |
****************************************************/ | |
dtime(&stime); | |
if (myid==Host_ID && 0<level_stdout){ | |
printf(" Force calculation #4\n");fflush(stdout); | |
} | |
if (ProExpn_VNA==0 && F_VNA_flag==1){ | |
Force4(); | |
} | |
else if (ProExpn_VNA==1 && F_VNA_flag==1){ | |
Force4B(CDM0); | |
} | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for force#4=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/**************************************************** | |
#5 of Force | |
Contribution from overlap | |
****************************************************/ | |
dtime(&stime); | |
if (myid==Host_ID && 0<level_stdout){ | |
printf(" Force calculation #5\n");fflush(stdout); | |
} | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Fx[Mc_AN] = 0.0; | |
Fy[Mc_AN] = 0.0; | |
Fz[Mc_AN] = 0.0; | |
} | |
#pragma omp parallel shared(time_per_atom,Fx,Fy,Fz,CntOLP,OLP,Cnt_switch,EDM,SpinP_switch,Spe_Total_CNO,natn,FNAN,WhatSpecies,M2G,Matomnum) private(OMPID,Nthrds,Nprocs,Mc_AN,Stime_atom,Etime_atom,Gc_AN,Cwan,h_AN,Gh_AN,Hwan,i,j,dum,dx,dy,dz) | |
{ | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (Mc_AN=(OMPID*Matomnum/Nthrds+1); Mc_AN<((OMPID+1)*Matomnum/Nthrds+1); Mc_AN++){ | |
dtime(&Stime_atom); | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
for (h_AN=1; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
for (i=0; i<Spe_Total_CNO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ | |
if (SpinP_switch==0){ | |
dum = 2.0*EDM[0][Mc_AN][h_AN][i][j]; | |
} | |
else if (SpinP_switch==1 || SpinP_switch==3){ | |
dum = EDM[0][Mc_AN][h_AN][i][j] + EDM[1][Mc_AN][h_AN][i][j]; | |
} | |
if (Cnt_switch==0){ | |
dx = dum*OLP[1][Mc_AN][h_AN][i][j]; | |
dy = dum*OLP[2][Mc_AN][h_AN][i][j]; | |
dz = dum*OLP[3][Mc_AN][h_AN][i][j]; | |
} | |
else{ | |
dx = dum*CntOLP[1][Mc_AN][h_AN][i][j]; | |
dy = dum*CntOLP[2][Mc_AN][h_AN][i][j]; | |
dz = dum*CntOLP[3][Mc_AN][h_AN][i][j]; | |
} | |
Fx[Mc_AN] = Fx[Mc_AN] - 2.0*dx; | |
Fy[Mc_AN] = Fy[Mc_AN] - 2.0*dy; | |
Fz[Mc_AN] = Fz[Mc_AN] - 2.0*dz; | |
} | |
} | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} | |
} /* #pragma omp parallel */ | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for force#5=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/**************************************************** | |
add #5 of Force | |
****************************************************/ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
Gxyz[Gc_AN][17] += Fx[Mc_AN]; | |
Gxyz[Gc_AN][18] += Fy[Mc_AN]; | |
Gxyz[Gc_AN][19] += Fz[Mc_AN]; | |
if (2<=level_stdout){ | |
printf("<Force> force(5) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,Fx[Mc_AN],Fy[Mc_AN],Fz[Mc_AN]);fflush(stdout); | |
} | |
} | |
/**************************************************************** | |
In case that the dual representation is used for evaluation of | |
the occupation number in the LDA+U method, the following force | |
term is added. | |
****************************************************************/ | |
if ( (Hub_U_switch==1 || 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1) | |
&& (Hub_U_occupation==1 || Hub_U_occupation==2) | |
&& SpinP_switch!=3 ){ | |
HUx = (double***)malloc(sizeof(double**)*3); | |
for (i=0; i<3; i++){ | |
HUx[i] = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HUx[i][j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
} | |
HUy = (double***)malloc(sizeof(double**)*3); | |
for (i=0; i<3; i++){ | |
HUy[i] = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HUy[i][j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
} | |
HUz = (double***)malloc(sizeof(double**)*3); | |
for (i=0; i<3; i++){ | |
HUz[i] = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HUz[i][j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
} | |
} | |
if ( (Hub_U_switch==1 || 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1) | |
&& F_U_flag==1 && Hub_U_occupation==2){ | |
if (myid==Host_ID) printf(" Force calculation for LDA_U with dual\n");fflush(stdout); | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Fx[Mc_AN] = 0.0; | |
Fy[Mc_AN] = 0.0; | |
Fz[Mc_AN] = 0.0; | |
} | |
/**************************************************** | |
if (SpinP_switch!=3) | |
collinear case | |
****************************************************/ | |
if (SpinP_switch!=3){ | |
if (SpinP_switch==0){ | |
spinmax = 0; | |
dege = 2.0; | |
} | |
else{ | |
spinmax = 1; | |
dege = 1.0; | |
} | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
dtime(&Stime_atom); | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
for (spin=0; spin<=spinmax; spin++){ | |
for (h_AN=1; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Mh_AN = F_G2M[Gh_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
/* non-orbital optimization */ | |
if (Cnt_switch==0){ | |
for (i=0; i<Spe_Total_NO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_NO[Hwan]; j++){ | |
tmp1 = 0.0; | |
tmp2 = 0.0; | |
tmp3 = 0.0; | |
for (k=0; k<Spe_Total_NO[Cwan]; k++){ | |
tmp1 += v_eff[spin][Mc_AN][i][k]*OLP[1][Mc_AN][h_AN][k][j]; | |
tmp2 += v_eff[spin][Mc_AN][i][k]*OLP[2][Mc_AN][h_AN][k][j]; | |
tmp3 += v_eff[spin][Mc_AN][i][k]*OLP[3][Mc_AN][h_AN][k][j]; | |
} | |
for (k=0; k<Spe_Total_NO[Hwan]; k++){ | |
tmp1 += v_eff[spin][Mh_AN][k][j]*OLP[1][Mc_AN][h_AN][i][k]; | |
tmp2 += v_eff[spin][Mh_AN][k][j]*OLP[2][Mc_AN][h_AN][i][k]; | |
tmp3 += v_eff[spin][Mh_AN][k][j]*OLP[3][Mc_AN][h_AN][i][k]; | |
} | |
dx = tmp1*dege*CDM[spin][Mc_AN][h_AN][i][j]; | |
dy = tmp2*dege*CDM[spin][Mc_AN][h_AN][i][j]; | |
dz = tmp3*dege*CDM[spin][Mc_AN][h_AN][i][j]; | |
Fx[Mc_AN] += dx; | |
Fy[Mc_AN] += dy; | |
Fz[Mc_AN] += dz; | |
} | |
} | |
} | |
/* orbital optimization */ | |
else if (Cnt_switch==1){ | |
/* HUx, HUy, HUz for primitive orbital */ | |
for (i=0; i<Spe_Total_NO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_NO[Hwan]; j++){ | |
tmp1 = 0.0; | |
tmp2 = 0.0; | |
tmp3 = 0.0; | |
for (k=0; k<Spe_Total_NO[Cwan]; k++){ | |
tmp1 += v_eff[spin][Mc_AN][i][k]*OLP[1][Mc_AN][h_AN][k][j]; | |
tmp2 += v_eff[spin][Mc_AN][i][k]*OLP[2][Mc_AN][h_AN][k][j]; | |
tmp3 += v_eff[spin][Mc_AN][i][k]*OLP[3][Mc_AN][h_AN][k][j]; | |
} | |
for (k=0; k<Spe_Total_NO[Hwan]; k++){ | |
tmp1 += v_eff[spin][Mh_AN][k][j]*OLP[1][Mc_AN][h_AN][i][k]; | |
tmp2 += v_eff[spin][Mh_AN][k][j]*OLP[2][Mc_AN][h_AN][i][k]; | |
tmp3 += v_eff[spin][Mh_AN][k][j]*OLP[3][Mc_AN][h_AN][i][k]; | |
} | |
HUx[0][i][j] = tmp1; | |
HUy[0][i][j] = tmp2; | |
HUz[0][i][j] = tmp3; | |
} | |
} | |
/* contract HUx, HUy, HUz */ | |
for (al=0; al<Spe_Total_CNO[Cwan]; al++){ | |
for (be=0; be<Spe_Total_CNO[Hwan]; be++){ | |
tmp1 = 0.0; | |
tmp2 = 0.0; | |
tmp3 = 0.0; | |
for (p=0; p<Spe_Specified_Num[Cwan][al]; p++){ | |
p0 = Spe_Trans_Orbital[Cwan][al][p]; | |
for (q=0; q<Spe_Specified_Num[Hwan][be]; q++){ | |
q0 = Spe_Trans_Orbital[Hwan][be][q]; | |
tmp0 = CntCoes[Mc_AN][al][p]*CntCoes[Mh_AN][be][q]; | |
tmp1 += tmp0*HUx[0][p0][q0]; | |
tmp2 += tmp0*HUy[0][p0][q0]; | |
tmp3 += tmp0*HUz[0][p0][q0]; | |
} | |
} | |
dx = tmp1*dege*CDM[spin][Mc_AN][h_AN][al][be]; | |
dy = tmp2*dege*CDM[spin][Mc_AN][h_AN][al][be]; | |
dz = tmp3*dege*CDM[spin][Mc_AN][h_AN][al][be]; | |
Fx[Mc_AN] += dx; | |
Fy[Mc_AN] += dy; | |
Fz[Mc_AN] += dz; | |
} | |
} | |
} | |
} | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} | |
} | |
/**************************************************** | |
if (SpinP_switch==3) | |
spin non-collinear | |
****************************************************/ | |
else { | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
dtime(&Stime_atom); | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
for (h_AN=1; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Mh_AN = F_G2M[Gh_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
kl = RMI1[Mc_AN][h_AN][0]; | |
for (i=0; i<Spe_Total_NO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_NO[Hwan]; j++){ | |
Re00x = 0.0; Re00y = 0.0; Re00z = 0.0; | |
Re11x = 0.0; Re11y = 0.0; Re11z = 0.0; | |
Re01x = 0.0; Re01y = 0.0; Re01z = 0.0; | |
Im00x = 0.0; Im00y = 0.0; Im00z = 0.0; | |
Im11x = 0.0; Im11y = 0.0; Im11z = 0.0; | |
Im01x = 0.0; Im01y = 0.0; Im01z = 0.0; | |
for (k=0; k<Spe_Total_NO[Cwan]; k++){ | |
Re00x += NC_v_eff[0][0][Mc_AN][i][k].r * OLP[1][Mc_AN][h_AN][k][j]; | |
Re00y += NC_v_eff[0][0][Mc_AN][i][k].r * OLP[2][Mc_AN][h_AN][k][j]; | |
Re00z += NC_v_eff[0][0][Mc_AN][i][k].r * OLP[3][Mc_AN][h_AN][k][j]; | |
Re11x += NC_v_eff[1][1][Mc_AN][i][k].r * OLP[1][Mc_AN][h_AN][k][j]; | |
Re11y += NC_v_eff[1][1][Mc_AN][i][k].r * OLP[2][Mc_AN][h_AN][k][j]; | |
Re11z += NC_v_eff[1][1][Mc_AN][i][k].r * OLP[3][Mc_AN][h_AN][k][j]; | |
Re01x += NC_v_eff[0][1][Mc_AN][i][k].r * OLP[1][Mc_AN][h_AN][k][j]; | |
Re01y += NC_v_eff[0][1][Mc_AN][i][k].r * OLP[2][Mc_AN][h_AN][k][j]; | |
Re01z += NC_v_eff[0][1][Mc_AN][i][k].r * OLP[3][Mc_AN][h_AN][k][j]; | |
Im00x += NC_v_eff[0][0][Mc_AN][i][k].i * OLP[1][Mc_AN][h_AN][k][j]; | |
Im00y += NC_v_eff[0][0][Mc_AN][i][k].i * OLP[2][Mc_AN][h_AN][k][j]; | |
Im00z += NC_v_eff[0][0][Mc_AN][i][k].i * OLP[3][Mc_AN][h_AN][k][j]; | |
Im11x += NC_v_eff[1][1][Mc_AN][i][k].i * OLP[1][Mc_AN][h_AN][k][j]; | |
Im11y += NC_v_eff[1][1][Mc_AN][i][k].i * OLP[2][Mc_AN][h_AN][k][j]; | |
Im11z += NC_v_eff[1][1][Mc_AN][i][k].i * OLP[3][Mc_AN][h_AN][k][j]; | |
Im01x += NC_v_eff[0][1][Mc_AN][i][k].i * OLP[1][Mc_AN][h_AN][k][j]; | |
Im01y += NC_v_eff[0][1][Mc_AN][i][k].i * OLP[2][Mc_AN][h_AN][k][j]; | |
Im01z += NC_v_eff[0][1][Mc_AN][i][k].i * OLP[3][Mc_AN][h_AN][k][j]; | |
} | |
for (k=0; k<Spe_Total_NO[Hwan]; k++){ | |
Re00x += NC_v_eff[0][0][Mh_AN][k][j].r * OLP[1][Mc_AN][h_AN][i][k]; | |
Re00y += NC_v_eff[0][0][Mh_AN][k][j].r * OLP[2][Mc_AN][h_AN][i][k]; | |
Re00z += NC_v_eff[0][0][Mh_AN][k][j].r * OLP[3][Mc_AN][h_AN][i][k]; | |
Re11x += NC_v_eff[1][1][Mh_AN][k][j].r * OLP[1][Mc_AN][h_AN][i][k]; | |
Re11y += NC_v_eff[1][1][Mh_AN][k][j].r * OLP[2][Mc_AN][h_AN][i][k]; | |
Re11z += NC_v_eff[1][1][Mh_AN][k][j].r * OLP[3][Mc_AN][h_AN][i][k]; | |
Re01x += NC_v_eff[0][1][Mh_AN][k][j].r * OLP[1][Mc_AN][h_AN][i][k]; | |
Re01y += NC_v_eff[0][1][Mh_AN][k][j].r * OLP[2][Mc_AN][h_AN][i][k]; | |
Re01z += NC_v_eff[0][1][Mh_AN][k][j].r * OLP[3][Mc_AN][h_AN][i][k]; | |
Im00x += NC_v_eff[0][0][Mh_AN][k][j].i * OLP[1][Mc_AN][h_AN][i][k]; | |
Im00y += NC_v_eff[0][0][Mh_AN][k][j].i * OLP[2][Mc_AN][h_AN][i][k]; | |
Im00z += NC_v_eff[0][0][Mh_AN][k][j].i * OLP[3][Mc_AN][h_AN][i][k]; | |
Im11x += NC_v_eff[1][1][Mh_AN][k][j].i * OLP[1][Mc_AN][h_AN][i][k]; | |
Im11y += NC_v_eff[1][1][Mh_AN][k][j].i * OLP[2][Mc_AN][h_AN][i][k]; | |
Im11z += NC_v_eff[1][1][Mh_AN][k][j].i * OLP[3][Mc_AN][h_AN][i][k]; | |
Im01x += NC_v_eff[0][1][Mh_AN][k][j].i * OLP[1][Mc_AN][h_AN][i][k]; | |
Im01y += NC_v_eff[0][1][Mh_AN][k][j].i * OLP[2][Mc_AN][h_AN][i][k]; | |
Im01z += NC_v_eff[0][1][Mh_AN][k][j].i * OLP[3][Mc_AN][h_AN][i][k]; | |
} | |
dx = Re00x*CDM0[0][Mc_AN][h_AN][i][j] | |
+ Re11x*CDM0[1][Mc_AN][h_AN][i][j] | |
+ 2.0*Re01x*CDM0[2][Mc_AN][h_AN][i][j] | |
- Im00x*iDM0[0][Mc_AN][h_AN][i][j] | |
- Im11x*iDM0[1][Mc_AN][h_AN][i][j] | |
- 2.0*Im01x*CDM0[3][Mc_AN][h_AN][i][j]; | |
dy = Re00y*CDM0[0][Mc_AN][h_AN][i][j] | |
+ Re11y*CDM0[1][Mc_AN][h_AN][i][j] | |
+ 2.0*Re01y*CDM0[2][Mc_AN][h_AN][i][j] | |
- Im00y*iDM0[0][Mc_AN][h_AN][i][j] | |
- Im11y*iDM0[1][Mc_AN][h_AN][i][j] | |
- 2.0*Im01y*CDM0[3][Mc_AN][h_AN][i][j]; | |
dz = Re00z*CDM0[0][Mc_AN][h_AN][i][j] | |
+ Re11z*CDM0[1][Mc_AN][h_AN][i][j] | |
+ 2.0*Re01z*CDM0[2][Mc_AN][h_AN][i][j] | |
- Im00z*iDM0[0][Mc_AN][h_AN][i][j] | |
- Im11z*iDM0[1][Mc_AN][h_AN][i][j] | |
- 2.0*Im01z*CDM0[3][Mc_AN][h_AN][i][j]; | |
Fx[Mc_AN] += 0.5*dx; | |
Fy[Mc_AN] += 0.5*dy; | |
Fz[Mc_AN] += 0.5*dz; | |
Re00x = 0.0; Re00y = 0.0; Re00z = 0.0; | |
Re11x = 0.0; Re11y = 0.0; Re11z = 0.0; | |
Re01x = 0.0; Re01y = 0.0; Re01z = 0.0; | |
Im00x = 0.0; Im00y = 0.0; Im00z = 0.0; | |
Im11x = 0.0; Im11y = 0.0; Im11z = 0.0; | |
Im01x = 0.0; Im01y = 0.0; Im01z = 0.0; | |
for (k=0; k<Spe_Total_NO[Hwan]; k++){ | |
Re00x += NC_v_eff[0][0][Mh_AN][j][k].r * OLP[1][Mc_AN][h_AN][i][k]; | |
Re00y += NC_v_eff[0][0][Mh_AN][j][k].r * OLP[2][Mc_AN][h_AN][i][k]; | |
Re00z += NC_v_eff[0][0][Mh_AN][j][k].r * OLP[3][Mc_AN][h_AN][i][k]; | |
Re11x += NC_v_eff[1][1][Mh_AN][j][k].r * OLP[1][Mc_AN][h_AN][i][k]; | |
Re11y += NC_v_eff[1][1][Mh_AN][j][k].r * OLP[2][Mc_AN][h_AN][i][k]; | |
Re11z += NC_v_eff[1][1][Mh_AN][j][k].r * OLP[3][Mc_AN][h_AN][i][k]; | |
Re01x += NC_v_eff[0][1][Mh_AN][j][k].r * OLP[1][Mc_AN][h_AN][i][k]; | |
Re01y += NC_v_eff[0][1][Mh_AN][j][k].r * OLP[2][Mc_AN][h_AN][i][k]; | |
Re01z += NC_v_eff[0][1][Mh_AN][j][k].r * OLP[3][Mc_AN][h_AN][i][k]; | |
Im00x += NC_v_eff[0][0][Mh_AN][j][k].i * OLP[1][Mc_AN][h_AN][i][k]; | |
Im00y += NC_v_eff[0][0][Mh_AN][j][k].i * OLP[2][Mc_AN][h_AN][i][k]; | |
Im00z += NC_v_eff[0][0][Mh_AN][j][k].i * OLP[3][Mc_AN][h_AN][i][k]; | |
Im11x += NC_v_eff[1][1][Mh_AN][j][k].i * OLP[1][Mc_AN][h_AN][i][k]; | |
Im11y += NC_v_eff[1][1][Mh_AN][j][k].i * OLP[2][Mc_AN][h_AN][i][k]; | |
Im11z += NC_v_eff[1][1][Mh_AN][j][k].i * OLP[3][Mc_AN][h_AN][i][k]; | |
Im01x += NC_v_eff[0][1][Mh_AN][j][k].i * OLP[1][Mc_AN][h_AN][i][k]; | |
Im01y += NC_v_eff[0][1][Mh_AN][j][k].i * OLP[2][Mc_AN][h_AN][i][k]; | |
Im01z += NC_v_eff[0][1][Mh_AN][j][k].i * OLP[3][Mc_AN][h_AN][i][k]; | |
} | |
for (k=0; k<Spe_Total_NO[Cwan]; k++){ | |
Re00x += NC_v_eff[0][0][Mc_AN][k][i].r * OLP[1][Mc_AN][h_AN][k][j]; | |
Re00y += NC_v_eff[0][0][Mc_AN][k][i].r * OLP[2][Mc_AN][h_AN][k][j]; | |
Re00z += NC_v_eff[0][0][Mc_AN][k][i].r * OLP[3][Mc_AN][h_AN][k][j]; | |
Re11x += NC_v_eff[1][1][Mc_AN][k][i].r * OLP[1][Mc_AN][h_AN][k][j]; | |
Re11y += NC_v_eff[1][1][Mc_AN][k][i].r * OLP[2][Mc_AN][h_AN][k][j]; | |
Re11z += NC_v_eff[1][1][Mc_AN][k][i].r * OLP[3][Mc_AN][h_AN][k][j]; | |
Re01x += NC_v_eff[0][1][Mc_AN][k][i].r * OLP[1][Mc_AN][h_AN][k][j]; | |
Re01y += NC_v_eff[0][1][Mc_AN][k][i].r * OLP[2][Mc_AN][h_AN][k][j]; | |
Re01z += NC_v_eff[0][1][Mc_AN][k][i].r * OLP[3][Mc_AN][h_AN][k][j]; | |
Im00x += NC_v_eff[0][0][Mc_AN][k][i].i * OLP[1][Mc_AN][h_AN][k][j]; | |
Im00y += NC_v_eff[0][0][Mc_AN][k][i].i * OLP[2][Mc_AN][h_AN][k][j]; | |
Im00z += NC_v_eff[0][0][Mc_AN][k][i].i * OLP[3][Mc_AN][h_AN][k][j]; | |
Im11x += NC_v_eff[1][1][Mc_AN][k][i].i * OLP[1][Mc_AN][h_AN][k][j]; | |
Im11y += NC_v_eff[1][1][Mc_AN][k][i].i * OLP[2][Mc_AN][h_AN][k][j]; | |
Im11z += NC_v_eff[1][1][Mc_AN][k][i].i * OLP[3][Mc_AN][h_AN][k][j]; | |
Im01x += NC_v_eff[0][1][Mc_AN][k][i].i * OLP[1][Mc_AN][h_AN][k][j]; | |
Im01y += NC_v_eff[0][1][Mc_AN][k][i].i * OLP[2][Mc_AN][h_AN][k][j]; | |
Im01z += NC_v_eff[0][1][Mc_AN][k][i].i * OLP[3][Mc_AN][h_AN][k][j]; | |
} | |
dx = Re00x*CDM0[0][Mh_AN][kl][j][i] | |
+ Re11x*CDM0[1][Mh_AN][kl][j][i] | |
+ 2.0*Re01x*CDM0[2][Mh_AN][kl][j][i] | |
- Im00x*iDM0[0][Mh_AN][kl][j][i] | |
- Im11x*iDM0[1][Mh_AN][kl][j][i] | |
- 2.0*Im01x*CDM0[3][Mh_AN][kl][j][i]; | |
dy = Re00y*CDM0[0][Mh_AN][kl][j][i] | |
+ Re11y*CDM0[1][Mh_AN][kl][j][i] | |
+ 2.0*Re01y*CDM0[2][Mh_AN][kl][j][i] | |
- Im00y*iDM0[0][Mh_AN][kl][j][i] | |
- Im11y*iDM0[1][Mh_AN][kl][j][i] | |
- 2.0*Im01y*CDM0[3][Mh_AN][kl][j][i]; | |
dz = Re00z*CDM0[0][Mh_AN][kl][j][i] | |
+ Re11z*CDM0[1][Mh_AN][kl][j][i] | |
+ 2.0*Re01z*CDM0[2][Mh_AN][kl][j][i] | |
- Im00z*iDM0[0][Mh_AN][kl][j][i] | |
- Im11z*iDM0[1][Mh_AN][kl][j][i] | |
- 2.0*Im01z*CDM0[3][Mh_AN][kl][j][i]; | |
Fx[Mc_AN] += 0.5*dx; | |
Fy[Mc_AN] += 0.5*dy; | |
Fz[Mc_AN] += 0.5*dz; | |
} | |
} | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} | |
} | |
/**************************************************** | |
add the contribution | |
****************************************************/ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
Gxyz[Gc_AN][17] += Fx[Mc_AN]; | |
Gxyz[Gc_AN][18] += Fy[Mc_AN]; | |
Gxyz[Gc_AN][19] += Fz[Mc_AN]; | |
if (2<=level_stdout){ | |
printf("<Force> force(LDA_U_dual) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,Fx[Mc_AN],Fy[Mc_AN],Fz[Mc_AN]);fflush(stdout); | |
} | |
} | |
} /* if ( (Hub_U_switch==1 || 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1) | |
&& F_U_flag==1 && Hub_U_occupation==2) */ | |
/**************************************************** | |
Force arising from HNL | |
****************************************************/ | |
Force_HNL(CDM0, iDM0); | |
/**************************************************** | |
Force arising from the penalty functional | |
to create a core hole | |
****************************************************/ | |
if (core_hole_state_flag==1){ | |
Force_CoreHole(CDM0, iDM0); | |
} | |
/**************************************************** | |
freeing of arrays: | |
****************************************************/ | |
if ( (Hub_U_switch==1 || 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1) | |
&& (Hub_U_occupation==1 || Hub_U_occupation==2) | |
&& SpinP_switch!=3 ){ | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HUx[i][j]); | |
} | |
free(HUx[i]); | |
} | |
free(HUx); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HUy[i][j]); | |
} | |
free(HUy[i]); | |
} | |
free(HUy); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HUz[i][j]); | |
} | |
free(HUz[i]); | |
} | |
free(HUz); | |
} | |
free(Fx); | |
free(Fy); | |
free(Fz); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HVNAx[j]); | |
} | |
free(HVNAx); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HVNAy[j]); | |
} | |
free(HVNAy); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HVNAz[j]); | |
} | |
free(HVNAz); | |
/* CDM0 */ | |
for (k=0; k<=SpinP_switch; k++){ | |
FNAN[0] = 0; | |
for (Mc_AN=0; Mc_AN<=(Matomnum+MatomnumF); Mc_AN++){ | |
if (Mc_AN==0){ | |
Gc_AN = 0; | |
tno0 = 1; | |
} | |
else{ | |
Gc_AN = F_M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno0 = Spe_Total_CNO[Cwan]; | |
} | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
if (Mc_AN==0){ | |
tno1 = 1; | |
} | |
else{ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno1 = Spe_Total_CNO[Hwan]; | |
} | |
for (i=0; i<tno0; i++){ | |
free(CDM0[k][Mc_AN][h_AN][i]); | |
} | |
free(CDM0[k][Mc_AN][h_AN]); | |
} | |
free(CDM0[k][Mc_AN]); | |
} | |
free(CDM0[k]); | |
} | |
free(CDM0); | |
free(Snd_CDM0_Size); | |
free(Rcv_CDM0_Size); | |
/* iDM0 */ | |
if ( SO_switch==1 || (Hub_U_switch==1 && SpinP_switch==3) || 1<=Constraint_NCS_switch | |
|| Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1 ){ | |
for (k=0; k<2; k++){ | |
FNAN[0] = 0; | |
for (Mc_AN=0; Mc_AN<=(Matomnum+MatomnumF); Mc_AN++){ | |
if (Mc_AN==0){ | |
Gc_AN = 0; | |
tno0 = 1; | |
} | |
else{ | |
Gc_AN = F_M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno0 = Spe_Total_CNO[Cwan]; | |
} | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
if (Mc_AN==0){ | |
tno1 = 1; | |
} | |
else{ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno1 = Spe_Total_CNO[Hwan]; | |
} | |
for (i=0; i<tno0; i++){ | |
free(iDM0[k][Mc_AN][h_AN][i]); | |
} | |
free(iDM0[k][Mc_AN][h_AN]); | |
} | |
free(iDM0[k][Mc_AN]); | |
} | |
free(iDM0[k]); | |
} | |
free(iDM0); | |
free(Snd_iDM0_Size); | |
free(Rcv_iDM0_Size); | |
} | |
/* for time */ | |
MPI_Barrier(mpi_comm_level1); | |
dtime(&TEtime); | |
time0 = TEtime - TStime; | |
return time0; | |
} | |
void Force3() | |
{ | |
/**************************************************** | |
#3 of Force | |
dn/dx * (VNA + dVH + Vxc) | |
or | |
dn/dx * (dVH + Vxc) | |
****************************************************/ | |
/* for OpenMP */ | |
/* MPI */ | |
int numprocs, myid; | |
MPI_Comm_size(mpi_comm_level1, &numprocs); | |
MPI_Comm_rank(mpi_comm_level1, &myid); | |
/********************************************************** | |
main loop for calculation of force #3 | |
**********************************************************/ | |
/* shared memory for force */ | |
double** Vpot_grid = (double**)malloc(sizeof(double*)*(SpinP_switch + 1)); | |
{ | |
double* p2 = (double*)malloc(sizeof(double)*(SpinP_switch + 1)*Max_GridN_Atom); | |
int spin; | |
for (spin = 0; spin<(SpinP_switch + 1); spin++) { | |
Vpot_grid[spin] = p2; | |
p2 += Max_GridN_Atom; | |
} | |
} | |
double*** dChi0 = (double***)malloc(sizeof(double**)*Max_GridN_Atom); | |
{ | |
double** p2 = (double**)malloc(sizeof(double*)*Max_GridN_Atom*List_YOUSO[7]); | |
double* p = (double*)malloc(sizeof(double)*Max_GridN_Atom*List_YOUSO[7] * 3); | |
int Nc; | |
for (Nc = 0; Nc<Max_GridN_Atom; Nc++) { | |
dChi0[Nc] = p2; | |
p2 += List_YOUSO[7]; | |
int i; | |
for (i = 0; i<List_YOUSO[7]; i++) { | |
dChi0[Nc][i] = p; | |
p += 3; | |
} | |
} | |
} | |
double sumx = 0.0; /* this must be defined out of parallel pragma */ | |
double sumy = 0.0; | |
double sumz = 0.0; | |
#pragma omp parallel | |
{ | |
/* allocation of arrays */ | |
double** dorbs0 = (double**)malloc(sizeof(double*) * 4); | |
{ | |
int i; | |
for (i = 0; i<4; i++) { | |
dorbs0[i] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
} | |
double* orbs1 = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
struct WORK_DORBITAL work_dObs; | |
Get_dOrbitals_init(&work_dObs); | |
double time1 = 0.0; | |
double time2 = 0.0; | |
double last_time; | |
double current_time; | |
int Mc_AN; | |
for (Mc_AN = 1; Mc_AN <= Matomnum; Mc_AN++) { | |
int Gc_AN = M2G[Mc_AN]; | |
int Cwan = WhatSpecies[Gc_AN]; | |
int NO0 = Spe_Total_CNO[Cwan]; | |
/*********************************** | |
calc dOrb0 | |
***********************************/ | |
#pragma omp barrier /* this barrier is necessary to wait (1)clearing sumx, sumy, sumz, and (2)initializing work_dObs */ | |
dtime(&last_time); | |
int Nc; | |
#pragma omp for | |
for (Nc=0; Nc<GridN_Atom[Gc_AN]; Nc++) { | |
int GNc = GridListAtom[Mc_AN][Nc]; | |
int GRc = CellListAtom[Mc_AN][Nc]; | |
int MNc = MGridListAtom[Mc_AN][Nc]; | |
double Cxyz[4]; | |
Get_Grid_XYZ(GNc, Cxyz); | |
double x = Cxyz[1] + atv[GRc][1]; | |
double y = Cxyz[2] + atv[GRc][2]; | |
double z = Cxyz[3] + atv[GRc][3]; | |
double dx = x - Gxyz[Gc_AN][1]; | |
double dy = y - Gxyz[Gc_AN][2]; | |
double dz = z - Gxyz[Gc_AN][3]; | |
if (Cnt_switch == 0) { | |
/* AITUNE201704 : Get_dOrbitals(Cwan, dx, dy, dz, dorbs0); */ | |
/* Get_dOrbitals_work(Cwan, dx, dy, dz, dorbs0, work_dObs); */ | |
/* start: direct inlining of Get_dOrbitals_work */ | |
int wan=Cwan; | |
double x=dx,y=dy,z=dz; | |
int i, i1, i2, i3, i4, j, l, l1; | |
int po, L0, Mul0, M0; | |
int mp_min, mp_max, m; | |
double dum, dum1, dum2, dum3, dum4; | |
double siQ, coQ, siP, coP, a, b, c; | |
double dx, rm, tmp0, tmp1, id, d; | |
double drx, dry, drz, R, Q, P, Rmin; | |
double S_coordinate[3]; | |
double **RF = work_dObs.RF; | |
double **dRF = work_dObs.dRF; | |
double **AF = work_dObs.AF; | |
double **dAFQ = work_dObs.dAFQ; | |
double **dAFP = work_dObs.dAFP; | |
double h1, h2, h3, f1, f2, f3, f4, dfx, dfx2; | |
double g1, g2, x1, x2, y1, y2, y12, y22, f, df, df2; | |
double dRx, dRy, dRz, dQx, dQy, dQz, dPx, dPy, dPz; | |
double dChiR, dChiQ, dChiP, h, sum0, sum1; | |
double SH[Supported_MaxL * 2 + 1][2]; | |
double dSHt[Supported_MaxL * 2 + 1][2]; | |
double dSHp[Supported_MaxL * 2 + 1][2]; | |
/* start calc. */ | |
Rmin = 10e-14; | |
xyz2spherical(x, y, z, 0.0, 0.0, 0.0, S_coordinate); | |
R = S_coordinate[0]; | |
Q = S_coordinate[1]; | |
P = S_coordinate[2]; | |
if (R < Rmin) { | |
x = x + Rmin; | |
y = y + Rmin; | |
z = z + Rmin; | |
xyz2spherical(x, y, z, 0.0, 0.0, 0.0, S_coordinate); | |
R = S_coordinate[0]; | |
Q = S_coordinate[1]; | |
P = S_coordinate[2]; | |
} | |
po = 0; | |
mp_min = 0; | |
mp_max = Spe_Num_Mesh_PAO[wan] - 1; | |
if (Spe_PAO_RV[wan][Spe_Num_Mesh_PAO[wan] - 1] < R) { | |
for (L0 = 0; L0 <= Spe_MaxL_Basis[wan]; L0++) { | |
for (Mul0 = 0; Mul0 < Spe_Num_Basis[wan][L0]; Mul0++) { | |
RF[L0][Mul0] = 0.0; | |
dRF[L0][Mul0] = 0.0; | |
} | |
} | |
po = 1; | |
} | |
else if (R < Spe_PAO_RV[wan][0]) { | |
m = 4; | |
rm = Spe_PAO_RV[wan][m]; | |
h1 = Spe_PAO_RV[wan][m - 1] - Spe_PAO_RV[wan][m - 2]; | |
h2 = Spe_PAO_RV[wan][m] - Spe_PAO_RV[wan][m - 1]; | |
h3 = Spe_PAO_RV[wan][m + 1] - Spe_PAO_RV[wan][m]; | |
x1 = rm - Spe_PAO_RV[wan][m - 1]; | |
x2 = rm - Spe_PAO_RV[wan][m]; | |
y1 = x1 / h2; | |
y2 = x2 / h2; | |
y12 = y1*y1; | |
y22 = y2*y2; | |
dum = h1 + h2; | |
dum1 = h1 / h2 / dum; | |
dum2 = h2 / h1 / dum; | |
dum = h2 + h3; | |
dum3 = h2 / h3 / dum; | |
dum4 = h3 / h2 / dum; | |
for (L0 = 0; L0 <= Spe_MaxL_Basis[wan]; L0++) { | |
for (Mul0 = 0; Mul0 < Spe_Num_Basis[wan][L0]; Mul0++) { | |
f1 = Spe_PAO_RWF[wan][L0][Mul0][m - 2]; | |
f2 = Spe_PAO_RWF[wan][L0][Mul0][m - 1]; | |
f3 = Spe_PAO_RWF[wan][L0][Mul0][m]; | |
f4 = Spe_PAO_RWF[wan][L0][Mul0][m + 1]; | |
if (m == 1) { | |
h1 = -(h2 + h3); | |
f1 = f4; | |
} else if (m == (Spe_Num_Mesh_PAO[wan] - 1)) { | |
h3 = -(h1 + h2); | |
f4 = f1; | |
} | |
dum = f3 - f2; | |
g1 = dum*dum1 + (f2 - f1)*dum2; | |
g2 = (f4 - f3)*dum3 + dum*dum4; | |
f = y22*(3.0*f2 + h2*g1 + (2.0*f2 + h2*g1)*y2) | |
+ y12*(3.0*f3 - h2*g2 - (2.0*f3 - h2*g2)*y1); | |
df = 2.0*y2 / h2*(3.0*f2 + h2*g1 + (2.0*f2 + h2*g1)*y2) | |
+ y22*(2.0*f2 + h2*g1) / h2 | |
+ 2.0*y1 / h2*(3.0*f3 - h2*g2 - (2.0*f3 - h2*g2)*y1) | |
- y12*(2.0*f3 - h2*g2) / h2; | |
if (L0 == 0) { | |
a = 0.0; | |
b = 0.5*df / rm; | |
c = 0.0; | |
d = f - b*rm*rm; | |
} | |
else if (L0 == 1) { | |
a = (rm*df - f) / (2.0*rm*rm*rm); | |
b = 0.0; | |
c = df - 3.0*a*rm*rm; | |
d = 0.0; | |
} | |
else { | |
b = (3.0*f - rm*df) / (rm*rm); | |
a = (f - b*rm*rm) / (rm*rm*rm); | |
c = 0.0; | |
d = 0.0; | |
} | |
RF[L0][Mul0] = a*R*R*R + b*R*R + c*R + d; | |
dRF[L0][Mul0] = 3.0*a*R*R + 2.0*b*R + c; | |
} | |
} | |
} | |
else { | |
do { | |
m = (mp_min + mp_max) / 2; | |
if (Spe_PAO_RV[wan][m] < R) | |
mp_min = m; | |
else | |
mp_max = m; | |
} while ((mp_max - mp_min) != 1); | |
m = mp_max; | |
h1 = Spe_PAO_RV[wan][m - 1] - Spe_PAO_RV[wan][m - 2]; | |
h2 = Spe_PAO_RV[wan][m] - Spe_PAO_RV[wan][m - 1]; | |
h3 = Spe_PAO_RV[wan][m + 1] - Spe_PAO_RV[wan][m]; | |
x1 = R - Spe_PAO_RV[wan][m - 1]; | |
x2 = R - Spe_PAO_RV[wan][m]; | |
y1 = x1 / h2; | |
y2 = x2 / h2; | |
y12 = y1*y1; | |
y22 = y2*y2; | |
dum = h1 + h2; | |
dum1 = h1 / h2 / dum; | |
dum2 = h2 / h1 / dum; | |
dum = h2 + h3; | |
dum3 = h2 / h3 / dum; | |
dum4 = h3 / h2 / dum; | |
for (L0 = 0; L0 <= Spe_MaxL_Basis[wan]; L0++) { | |
for (Mul0 = 0; Mul0 < Spe_Num_Basis[wan][L0]; Mul0++) { | |
f1 = Spe_PAO_RWF[wan][L0][Mul0][m - 2]; | |
f2 = Spe_PAO_RWF[wan][L0][Mul0][m - 1]; | |
f3 = Spe_PAO_RWF[wan][L0][Mul0][m]; | |
f4 = Spe_PAO_RWF[wan][L0][Mul0][m + 1]; | |
if (m == 1) { | |
h1 = -(h2 + h3); | |
f1 = f4; | |
} else if (m == (Spe_Num_Mesh_PAO[wan] - 1)) { | |
h3 = -(h1 + h2); | |
f4 = f1; | |
} | |
dum = f3 - f2; | |
g1 = dum*dum1 + (f2 - f1)*dum2; | |
g2 = (f4 - f3)*dum3 + dum*dum4; | |
f = y22*(3.0*f2 + h2*g1 + (2.0*f2 + h2*g1)*y2) | |
+ y12*(3.0*f3 - h2*g2 - (2.0*f3 - h2*g2)*y1); | |
df = 2.0*y2 / h2*(3.0*f2 + h2*g1 + (2.0*f2 + h2*g1)*y2) | |
+ y2*y2*(2.0*f2 + h2*g1) / h2 | |
+ 2.0*y1 / h2*(3.0*f3 - h2*g2 - (2.0*f3 - h2*g2)*y1) | |
- y1*y1*(2.0*f3 - h2*g2) / h2; | |
RF[L0][Mul0] = f; | |
dRF[L0][Mul0] = df; | |
} | |
} | |
} | |
/* dr/dx,y,z, dQ/dx,y,z, dP/dx,y,z and dAngular */ | |
if (po == 0) { | |
/* Angular */ | |
siQ = sin(Q); | |
coQ = cos(Q); | |
siP = sin(P); | |
coP = cos(P); | |
dRx = siQ*coP; | |
dRy = siQ*siP; | |
dRz = coQ; | |
if (Rmin < R) { | |
dQx = coQ*coP / R; | |
dQy = coQ*siP / R; | |
dQz = -siQ / R; | |
} else { | |
dQx = 0.0; | |
dQy = 0.0; | |
dQz = 0.0; | |
} | |
/* RICS note 72P */ | |
if (Rmin < R) { | |
dPx = -siP / R; | |
dPy = coP / R; | |
dPz = 0.0; | |
} else { | |
dPx = 0.0; | |
dPy = 0.0; | |
dPz = 0.0; | |
} | |
for (L0 = 0; L0 <= Spe_MaxL_Basis[wan]; L0++) { | |
if (L0 == 0) { | |
AF[0][0] = 0.282094791773878; | |
dAFQ[0][0] = 0.0; | |
dAFP[0][0] = 0.0; | |
} else if (L0 == 1) { | |
dum = 0.48860251190292*siQ; | |
AF[1][0] = dum*coP; | |
AF[1][1] = dum*siP; | |
AF[1][2] = 0.48860251190292*coQ; | |
dAFQ[1][0] = 0.48860251190292*coQ*coP; | |
dAFQ[1][1] = 0.48860251190292*coQ*siP; | |
dAFQ[1][2] = -0.48860251190292*siQ; | |
dAFP[1][0] = -0.48860251190292*siP; | |
dAFP[1][1] = 0.48860251190292*coP; | |
dAFP[1][2] = 0.0; | |
} else if (L0 == 2) { | |
dum1 = siQ*siQ; | |
dum2 = 1.09254843059208*siQ*coQ; | |
AF[2][0] = 0.94617469575756*coQ*coQ - 0.31539156525252; | |
AF[2][1] = 0.54627421529604*dum1*(1.0 - 2.0*siP*siP); | |
AF[2][2] = 1.09254843059208*dum1*siP*coP; | |
AF[2][3] = dum2*coP; | |
AF[2][4] = dum2*siP; | |
dAFQ[2][0] = -1.89234939151512*siQ*coQ; | |
dAFQ[2][1] = 1.09254843059208*siQ*coQ*(1.0 - 2.0*siP*siP); | |
dAFQ[2][2] = 2.18509686118416*siQ*coQ*siP*coP; | |
dAFQ[2][3] = 1.09254843059208*(1.0 - 2.0*siQ*siQ)*coP; | |
dAFQ[2][4] = 1.09254843059208*(1.0 - 2.0*siQ*siQ)*siP; | |
/* RICS note 72P */ | |
dAFP[2][0] = 0.0; | |
dAFP[2][1] = -2.18509686118416*siQ*siP*coP; | |
dAFP[2][2] = 1.09254843059208*siQ*(1.0 - 2.0*siP*siP); | |
dAFP[2][3] = -1.09254843059208*coQ*siP; | |
dAFP[2][4] = 1.09254843059208*coQ*coP; | |
} | |
else if (L0 == 3) { | |
AF[3][0] = 0.373176332590116*(5.0*coQ*coQ*coQ - 3.0*coQ); | |
AF[3][1] = 0.457045799464466*coP*siQ*(5.0*coQ*coQ - 1.0); | |
AF[3][2] = 0.457045799464466*siP*siQ*(5.0*coQ*coQ - 1.0); | |
AF[3][3] = 1.44530572132028*siQ*siQ*coQ*(coP*coP - siP*siP); | |
AF[3][4] = 2.89061144264055*siQ*siQ*coQ*siP*coP; | |
AF[3][5] = 0.590043589926644*siQ*siQ*siQ*(4.0*coP*coP*coP - 3.0*coP); | |
AF[3][6] = 0.590043589926644*siQ*siQ*siQ*(3.0*siP - 4.0*siP*siP*siP); | |
dAFQ[3][0] = 0.373176332590116*siQ*(-15.0*coQ*coQ + 3.0); | |
dAFQ[3][1] = 0.457045799464466*coP*coQ*(15.0*coQ*coQ - 11.0); | |
dAFQ[3][2] = 0.457045799464466*siP*coQ*(15.0*coQ*coQ - 11.0); | |
dAFQ[3][3] = 1.44530572132028*(coP*coP - siP*siP)*siQ*(2.0*coQ*coQ - siQ*siQ); | |
dAFQ[3][4] = 2.89061144264055*coP*siP*siQ*(2.0*coQ*coQ - siQ*siQ); | |
dAFQ[3][5] = 1.770130769779932*coP*coQ*siQ*siQ*(-3.0 + 4.0*coP*coP); | |
dAFQ[3][6] = 1.770130769779932*coQ*siP*siQ*siQ*(3.0 - 4.0*siP*siP); | |
/* RICS note 72P */ | |
dAFP[3][0] = 0.0; | |
dAFP[3][1] = 0.457045799464466*siP*(-5.0*coQ*coQ + 1.0); | |
dAFP[3][2] = 0.457045799464466*coP*(5.0*coQ*coQ - 1.0); | |
dAFP[3][3] = -5.781222885281120*coP*coQ*siP*siQ; | |
dAFP[3][4] = 2.89061144264055*coQ*siQ*(coP*coP - siP*siP); | |
dAFP[3][5] = 1.770130769779932*siP*siQ*siQ*(1.0 - 4.0*coP*coP); | |
dAFP[3][6] = 1.770130769779932*coP*siQ*siQ*(1.0 - 4.0*siP*siP); | |
} | |
else if (4 <= L0) { | |
/* calculation of complex spherical harmonics functions */ | |
for (m = -L0; m <= L0; m++) { | |
ComplexSH(L0, m, Q, P, SH[L0 + m], dSHt[L0 + m], dSHp[L0 + m]); | |
} | |
/* transformation of complex to real */ | |
for (i = 0; i < (L0 * 2 + 1); i++) { | |
sum0 = 0.0; | |
sum1 = 0.0; | |
for (j = 0; j < (L0 * 2 + 1); j++) { | |
sum0 += Comp2Real[L0][i][j].r*SH[j][0] - Comp2Real[L0][i][j].i*SH[j][1]; | |
sum1 += Comp2Real[L0][i][j].r*SH[j][1] + Comp2Real[L0][i][j].i*SH[j][0]; | |
} | |
AF[L0][i] = sum0 + sum1; | |
sum0 = 0.0; | |
sum1 = 0.0; | |
for (j = 0; j < (L0 * 2 + 1); j++) { | |
sum0 += Comp2Real[L0][i][j].r*dSHt[j][0] - Comp2Real[L0][i][j].i*dSHt[j][1]; | |
sum1 += Comp2Real[L0][i][j].r*dSHt[j][1] + Comp2Real[L0][i][j].i*dSHt[j][0]; | |
} | |
dAFQ[L0][i] = sum0 + sum1; | |
sum0 = 0.0; | |
sum1 = 0.0; | |
for (j = 0; j < (L0 * 2 + 1); j++) { | |
sum0 += Comp2Real[L0][i][j].r*dSHp[j][0] - Comp2Real[L0][i][j].i*dSHp[j][1]; | |
sum1 += Comp2Real[L0][i][j].r*dSHp[j][1] + Comp2Real[L0][i][j].i*dSHp[j][0]; | |
} | |
dAFP[L0][i] = sum0 + sum1; | |
} | |
} | |
} | |
} | |
/* Chi */ | |
i1 = -1; | |
for (L0 = 0; L0 <= Spe_MaxL_Basis[wan]; L0++) { | |
for (Mul0 = 0; Mul0 < Spe_Num_Basis[wan][L0]; Mul0++) { | |
for (M0 = 0; M0 <= 2 * L0; M0++) { | |
i1++; | |
dChiR = dRF[L0][Mul0] * AF[L0][M0]; | |
dChiQ = RF[L0][Mul0] * dAFQ[L0][M0]; | |
dChiP = RF[L0][Mul0] * dAFP[L0][M0]; | |
dorbs0[0][i1] = RF[L0][Mul0] * AF[L0][M0]; | |
dorbs0[1][i1] = -dRx*dChiR - dQx*dChiQ - dPx*dChiP; | |
dorbs0[2][i1] = -dRy*dChiR - dQy*dChiQ - dPy*dChiP; | |
dorbs0[3][i1] = -dRz*dChiR - dQz*dChiQ - dPz*dChiP; | |
} | |
} | |
} | |
/* end: direct inlining of Get_dOrbitals_work */ | |
} | |
else { | |
Get_Cnt_dOrbitals(Mc_AN, dx, dy, dz, dorbs0); | |
} | |
int k; | |
for (k = 0; k<3; k++) { | |
int i; | |
for (i = 0; i<NO0; i++) { | |
dChi0[Nc][i][k] = dorbs0[k + 1][i]; | |
} | |
} | |
if (SpinP_switch == 0 || SpinP_switch == 1) { | |
int spin; | |
for (spin = 0; spin <= SpinP_switch; spin++) { | |
double Vpt; | |
if (0 <= MNc) { | |
if (E_Field_switch == 1) { | |
if (ProExpn_VNA == 0) { | |
Vpt = F_dVHart_flag*dVHart_Grid[MNc] | |
+ F_Vxc_flag*Vxc_Grid[spin][MNc] | |
+ F_VNA_flag*VNA_Grid[MNc] | |
+ F_VEF_flag*VEF_Grid[MNc]; | |
} else { | |
Vpt = F_dVHart_flag*dVHart_Grid[MNc] | |
+ F_Vxc_flag*Vxc_Grid[spin][MNc] | |
+ F_VEF_flag*VEF_Grid[MNc]; | |
} | |
} else { | |
if (ProExpn_VNA == 0) { | |
Vpt = F_dVHart_flag*dVHart_Grid[MNc] | |
+ F_Vxc_flag*Vxc_Grid[spin][MNc] | |
+ F_VNA_flag*VNA_Grid[MNc]; | |
} else { | |
Vpt = F_dVHart_flag*dVHart_Grid[MNc] | |
+ F_Vxc_flag*Vxc_Grid[spin][MNc]; | |
} | |
} | |
} else { | |
Vpt = 0.0; | |
} | |
if (SpinP_switch == 0) { | |
Vpot_grid[0][Nc] = 4.0 * Vpt; | |
} else if (SpinP_switch == 1) { | |
Vpot_grid[spin][Nc] = 2.0 * Vpt; | |
} | |
} | |
} | |
else if (SpinP_switch == 3) { | |
/* spin non-collinear */ | |
double ReVpt11; | |
double ReVpt22; | |
double ReVpt21; | |
double ImVpt21; | |
if (0 <= MNc) { | |
if (E_Field_switch == 1) { | |
if (ProExpn_VNA == 0) { | |
ReVpt11 = F_dVHart_flag*dVHart_Grid[MNc] | |
+ F_Vxc_flag*Vxc_Grid[0][MNc] | |
+ F_VNA_flag*VNA_Grid[MNc] | |
+ F_VEF_flag*VEF_Grid[MNc]; | |
ReVpt22 = F_dVHart_flag*dVHart_Grid[MNc] | |
+ F_Vxc_flag*Vxc_Grid[1][MNc] | |
+ F_VNA_flag*VNA_Grid[MNc] | |
+ F_VEF_flag*VEF_Grid[MNc]; | |
ReVpt21 = F_Vxc_flag*Vxc_Grid[2][MNc]; | |
ImVpt21 = -F_Vxc_flag*Vxc_Grid[3][MNc]; | |
} else { | |
ReVpt11 = F_dVHart_flag*dVHart_Grid[MNc] | |
+ F_Vxc_flag*Vxc_Grid[0][MNc] | |
+ F_VEF_flag*VEF_Grid[MNc]; | |
ReVpt22 = F_dVHart_flag*dVHart_Grid[MNc] | |
+ F_Vxc_flag*Vxc_Grid[1][MNc] | |
+ F_VEF_flag*VEF_Grid[MNc]; | |
ReVpt21 = F_Vxc_flag*Vxc_Grid[2][MNc]; | |
ImVpt21 = -F_Vxc_flag*Vxc_Grid[3][MNc]; | |
} | |
} else { | |
if (ProExpn_VNA == 0) { | |
ReVpt11 = F_dVHart_flag*dVHart_Grid[MNc] | |
+ F_Vxc_flag*Vxc_Grid[0][MNc] | |
+ F_VNA_flag*VNA_Grid[MNc]; | |
ReVpt22 = F_dVHart_flag*dVHart_Grid[MNc] | |
+ F_Vxc_flag*Vxc_Grid[1][MNc] | |
+ F_VNA_flag*VNA_Grid[MNc]; | |
ReVpt21 = F_Vxc_flag*Vxc_Grid[2][MNc]; | |
ImVpt21 = -F_Vxc_flag*Vxc_Grid[3][MNc]; | |
} else { | |
ReVpt11 = F_dVHart_flag*dVHart_Grid[MNc] + F_Vxc_flag*Vxc_Grid[0][MNc]; | |
ReVpt22 = F_dVHart_flag*dVHart_Grid[MNc] + F_Vxc_flag*Vxc_Grid[1][MNc]; | |
ReVpt21 = F_Vxc_flag*Vxc_Grid[2][MNc]; | |
ImVpt21 = -F_Vxc_flag*Vxc_Grid[3][MNc]; | |
} | |
} | |
} else { | |
ReVpt11 = 0.0; | |
ReVpt22 = 0.0; | |
ReVpt21 = 0.0; | |
ImVpt21 = 0.0; | |
} | |
Vpot_grid[0][Nc] = 2.0 * ReVpt11; | |
Vpot_grid[1][Nc] = 2.0 * ReVpt22; | |
Vpot_grid[2][Nc] = 4.0 * ReVpt21; | |
Vpot_grid[3][Nc] = 4.0 * ImVpt21; | |
} | |
}/* Nc, here omp barrier is called implicitly because of end of for loop */ | |
dtime(¤t_time); | |
time1 += current_time - last_time; | |
last_time = current_time; | |
int h_AN; | |
for (h_AN = 0; h_AN <= FNAN[Gc_AN]; h_AN++) { | |
int Gh_AN = natn[Gc_AN][h_AN]; | |
int Mh_AN = F_G2M[Gh_AN]; | |
int Rnh = ncn[Gc_AN][h_AN]; | |
int Hwan = WhatSpecies[Gh_AN]; | |
int NO1 = Spe_Total_CNO[Hwan]; | |
int Nog; | |
#pragma omp for reduction (+:sumx, sumy, sumz) | |
for (Nog = 0; Nog<NumOLG[Mc_AN][h_AN]; Nog++) { | |
int Nc = GListTAtoms1[Mc_AN][h_AN][Nog]; | |
int Nh = GListTAtoms2[Mc_AN][h_AN][Nog]; | |
double** const ai_dorbs0 = dChi0[Nc]; | |
/* set orbs1 */ | |
if (G2ID[Gh_AN] == myid) { | |
int j; | |
for (j = 0; j<NO1; j++) { | |
orbs1[j] = Orbs_Grid[Mh_AN][Nh][j]; | |
} | |
} else { | |
int j; | |
for (j = 0; j<NO1; j++) { | |
orbs1[j] = Orbs_Grid_FNAN[Mc_AN][h_AN][Nog][j]; | |
} | |
} | |
int spin; | |
for (spin = 0; spin <= SpinP_switch; spin++) { | |
double tmpx = 0.0; | |
double tmpy = 0.0; | |
double tmpz = 0.0; | |
int i; | |
for (i = 0; i<NO0; i++) { | |
double tmp0 = 0.0; | |
int j; | |
for (j = 0; j<NO1; j++) { | |
tmp0 += orbs1[j] * DM[0][spin][Mc_AN][h_AN][i][j]; | |
} | |
tmpx += ai_dorbs0[i][0] * tmp0; | |
tmpy += ai_dorbs0[i][1] * tmp0; | |
tmpz += ai_dorbs0[i][2] * tmp0; | |
} | |
/* due to difference in the definition between density matrix and density */ | |
double Vpt = Vpot_grid[spin][Nc]; | |
sumx += tmpx * Vpt; | |
sumy += tmpy * Vpt; | |
sumz += tmpz * Vpt; | |
}/* spin */ | |
}/* Nog */ | |
}/* h_AN, here omp barrier is called implicitly because of end of for loop */ | |
/*********************************** | |
calc force #3 | |
***********************************/ | |
#pragma omp master | |
{ | |
Gxyz[Gc_AN][17] += sumx*GridVol; | |
Gxyz[Gc_AN][18] += sumy*GridVol; | |
Gxyz[Gc_AN][19] += sumz*GridVol; | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
} | |
dtime(¤t_time); | |
time2 += current_time - last_time; | |
last_time = current_time; | |
#pragma omp master | |
if (2 <= level_stdout) { | |
printf("<Force> force(3) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid, Mc_AN, Gc_AN, sumx*GridVol, sumy*GridVol, sumz*GridVol); fflush(stdout); | |
printf("<Force> force(3) myid=%2d GridN_Atom[Gc_AN] = %d, FNAN[Gc_AN] = %d\n", | |
myid, GridN_Atom[Gc_AN], FNAN[Gc_AN]); | |
} | |
} /* Mc_AN */ | |
#if measure_time | |
#pragma omp master | |
printf("<Force> force(3) myid=%2d time1, 2 = %lf [s], %lf [s]\n", myid, time1, time2); | |
#endif | |
/* freeing of arrays */ | |
free(orbs1); | |
int i; | |
for (i = 0; i<4; i++) { | |
free(dorbs0[i]); | |
} | |
free(dorbs0); | |
Get_dOrbitals_free(work_dObs); | |
} /* #pragma omp parallel */ | |
/* free */ | |
free(dChi0[0][0]); | |
free(dChi0[0]); | |
free(dChi0); | |
free(Vpot_grid[0]); | |
free(Vpot_grid); | |
} | |
void Force4() | |
{ | |
/**************************************************** | |
#4 of Force | |
n * dVNA/dx | |
****************************************************/ | |
int Mc_AN,Gc_AN,Cwan,Hwan,NO0,NO1; | |
int i,j,k,Nc,Nh,GNc,GRc,MNc; | |
int h_AN,Gh_AN,Mh_AN,Rnh,spin,Nog; | |
double sum,tmp0,r,dx,dy,dz; | |
double dvx,dvy,dvz; | |
double sumx,sumy,sumz; | |
double x,y,z,den; | |
double Cxyz[4]; | |
/********************************************************** | |
main loop for calculation of force #4 | |
**********************************************************/ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
NO0 = Spe_Total_CNO[Cwan]; | |
/*********************************** | |
summation | |
***********************************/ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
for (Nc=0; Nc<GridN_Atom[Gc_AN]; Nc++){ | |
GNc = GridListAtom[Mc_AN][Nc]; | |
GRc = CellListAtom[Mc_AN][Nc]; | |
MNc = MGridListAtom[Mc_AN][Nc]; | |
Get_Grid_XYZ(GNc,Cxyz); | |
x = Cxyz[1] + atv[GRc][1]; | |
y = Cxyz[2] + atv[GRc][2]; | |
z = Cxyz[3] + atv[GRc][3]; | |
dx = Gxyz[Gc_AN][1] - x; | |
dy = Gxyz[Gc_AN][2] - y; | |
dz = Gxyz[Gc_AN][3] - z; | |
r = sqrt(dx*dx + dy*dy + dz*dz); | |
/* for empty atoms or finite elemens basis */ | |
if (r<1.0e-10) r = 1.0e-10; | |
if (1.0e-14<r){ | |
tmp0 = Dr_VNAF(Cwan,r); | |
dvx = tmp0*dx/r; | |
dvy = tmp0*dy/r; | |
dvz = tmp0*dz/r; | |
} | |
else{ | |
dvx = 0.0; | |
dvy = 0.0; | |
dvz = 0.0; | |
} | |
den = Density_Grid[0][MNc] + Density_Grid[1][MNc]; | |
sumx += den*dvx; | |
sumy += den*dvy; | |
sumz += den*dvz; | |
} | |
Gxyz[Gc_AN][17] += sumx*GridVol; | |
Gxyz[Gc_AN][18] += sumy*GridVol; | |
Gxyz[Gc_AN][19] += sumz*GridVol; | |
/* | |
if (2<=level_stdout){ | |
printf("<Force> force(4) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,sumx*GridVol,sumy*GridVol,sumz*GridVol);fflush(stdout); | |
} | |
*/ | |
} | |
} | |
void Force_HNL(double *****CDM0, double *****iDM0) | |
{ | |
/**************************************************** | |
Force arising from HNL | |
****************************************************/ | |
int Mc_AN,Gc_AN,Cwan,i,j,h_AN,q_AN,Mq_AN,start_q_AN; | |
int jan,kl,km,kl1,Qwan,Gq_AN,Gh_AN,Mh_AN,Hwan,ian; | |
int l1,l2,l3,l,LL,Mul1,tno0,ncp,so; | |
int tno1,tno2,size1,size2,n,kk,num,po,po1,po2; | |
int numprocs,myid,tag=999,ID,IDS,IDR; | |
int **S_array,**R_array; | |
int S_comm_flag,R_comm_flag; | |
int SA_num,q,Sc_AN,GSc_AN,smul; | |
int Sc_wan,Sh_AN,GSh_AN,Sh_wan; | |
int Sh_AN2,fan,jg,j0,jg0,Mj_AN0; | |
int Original_Mc_AN; | |
double rcutA,rcutB,rcut; | |
double dEx,dEy,dEz,ene,pref; | |
double Stime_atom, Etime_atom; | |
dcomplex ***Hx,***Hy,***Hz; | |
dcomplex ***Hx0,***Hy0,***Hz0; | |
dcomplex ***Hx1,***Hy1,***Hz1; | |
int *Snd_DS_NL_Size,*Rcv_DS_NL_Size; | |
int *Indicator; | |
double *tmp_array; | |
double *tmp_array2; | |
/* for OpenMP */ | |
int OMPID,Nthrds,Nthrds0,Nprocs,Nloop,ODNloop; | |
int *OneD2h_AN,*OneD2q_AN; | |
double *dEx_threads; | |
double *dEy_threads; | |
double *dEz_threads; | |
double stime,etime; | |
double stime1,etime1; | |
MPI_Status stat; | |
MPI_Request request; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
dtime(&stime); | |
/**************************** | |
allocation of arrays | |
*****************************/ | |
Indicator = (int*)malloc(sizeof(int)*numprocs); | |
S_array = (int**)malloc(sizeof(int*)*numprocs); | |
for (ID=0; ID<numprocs; ID++){ | |
S_array[ID] = (int*)malloc(sizeof(int)*3); | |
} | |
R_array = (int**)malloc(sizeof(int*)*numprocs); | |
for (ID=0; ID<numprocs; ID++){ | |
R_array[ID] = (int*)malloc(sizeof(int)*3); | |
} | |
Snd_DS_NL_Size = (int*)malloc(sizeof(int)*numprocs); | |
Rcv_DS_NL_Size = (int*)malloc(sizeof(int)*numprocs); | |
/* initialize the temporal array storing the force contribution */ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = F_M2G[Mc_AN]; | |
Gxyz[Gc_AN][41] = 0.0; | |
Gxyz[Gc_AN][42] = 0.0; | |
Gxyz[Gc_AN][43] = 0.0; | |
} | |
/************************************************************* | |
contraction of DS_NL | |
Note: DS_NL is overwritten by CntDS_NL in Cont_Matrix1(). | |
*************************************************************/ | |
if (Cnt_switch==1){ | |
for (so=0; so<(SO_switch+1); so++){ | |
Cont_Matrix1(DS_NL[so][0],CntDS_NL[so][0]); | |
Cont_Matrix1(DS_NL[so][1],CntDS_NL[so][1]); | |
Cont_Matrix1(DS_NL[so][2],CntDS_NL[so][2]); | |
Cont_Matrix1(DS_NL[so][3],CntDS_NL[so][3]); | |
} | |
} | |
/*****************************************}********************** | |
THE FIRST CASE: | |
In case of I=i or I=j | |
for d [ \sum_k <i|k>ek<k|j> ]/dRI | |
****************************************************************/ | |
/******************************************************* | |
******************************************************* | |
multiplying overlap integrals WITH COMMUNICATION | |
In case of I=i or I=j | |
for d [ \sum_k <i|k>ek<k|j> ]/dRI | |
******************************************************* | |
*******************************************************/ | |
MPI_Barrier(mpi_comm_level1); | |
dtime(&stime); | |
Hx0 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hx0[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx0[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hy0 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hy0[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hy0[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hz0 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hz0[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hz0[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hx1 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hx1[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx1[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hy1 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hy1[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hy1[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hz1 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hz1[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hz1[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
for (ID=0; ID<numprocs; ID++){ | |
F_Snd_Num_WK[ID] = 0; | |
F_Rcv_Num_WK[ID] = 0; | |
} | |
do { | |
/*********************************** | |
set the size of data | |
************************************/ | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
/* find the data size to send the block data */ | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ){ | |
size1 = 0; | |
n = F_Snd_Num_WK[IDS]; | |
Mc_AN = Snd_MAN[IDS][n]; | |
Gc_AN = Snd_GAN[IDS][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_NO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_VPS_Pro[Hwan]; | |
size1 += (VPS_j_dependency[Hwan]+1)*tno1*tno2; | |
} | |
Snd_DS_NL_Size[IDS] = size1; | |
MPI_Isend(&size1, 1, MPI_INT, IDS, tag, mpi_comm_level1, &request); | |
} | |
else{ | |
Snd_DS_NL_Size[IDS] = 0; | |
} | |
/* receiving of the size of the data */ | |
if ( 0<(F_Rcv_Num[IDR]-F_Rcv_Num_WK[IDR]) ){ | |
MPI_Recv(&size2, 1, MPI_INT, IDR, tag, mpi_comm_level1, &stat); | |
Rcv_DS_NL_Size[IDR] = size2; | |
} | |
else{ | |
Rcv_DS_NL_Size[IDR] = 0; | |
} | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ) MPI_Wait(&request,&stat); | |
} /* ID */ | |
/*********************************** | |
data transfer | |
************************************/ | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
/****************************** | |
sending of the data | |
******************************/ | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ){ | |
size1 = Snd_DS_NL_Size[IDS]; | |
/* allocation of the array */ | |
tmp_array = (double*)malloc(sizeof(double)*size1); | |
/* multidimentional array to the vector array */ | |
num = 0; | |
n = F_Snd_Num_WK[IDS]; | |
Mc_AN = Snd_MAN[IDS][n]; | |
Gc_AN = Snd_GAN[IDS][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_NO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_VPS_Pro[Hwan]; | |
for (so=0; so<=VPS_j_dependency[Hwan]; so++){ | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
tmp_array[num] = DS_NL[so][0][Mc_AN][h_AN][i][j]; | |
num++; | |
} | |
} | |
} | |
} | |
MPI_Isend(&tmp_array[0], size1, MPI_DOUBLE, IDS, tag, mpi_comm_level1, &request); | |
} | |
/****************************** | |
receiving of the block data | |
******************************/ | |
if ( 0<(F_Rcv_Num[IDR]-F_Rcv_Num_WK[IDR]) ){ | |
size2 = Rcv_DS_NL_Size[IDR]; | |
tmp_array2 = (double*)malloc(sizeof(double)*size2); | |
MPI_Recv(&tmp_array2[0], size2, MPI_DOUBLE, IDR, tag, mpi_comm_level1, &stat); | |
/* store */ | |
num = 0; | |
n = F_Rcv_Num_WK[IDR]; | |
Original_Mc_AN = F_TopMAN[IDR] + n; | |
Gc_AN = Rcv_GAN[IDR][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_NO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_VPS_Pro[Hwan]; | |
for (so=0; so<=VPS_j_dependency[Hwan]; so++){ | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
DS_NL[so][0][Matomnum+1][h_AN][i][j] = tmp_array2[num]; | |
num++; | |
} | |
} | |
} | |
} | |
/* free tmp_array2 */ | |
free(tmp_array2); | |
/***************************************************************** | |
multiplying overlap integrals | |
*****************************************************************/ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
dtime(&Stime_atom); | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
fan = FNAN[Gc_AN]; | |
h_AN = 0; | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Mh_AN = F_G2M[Gh_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
ian = Spe_Total_CNO[Hwan]; | |
n = F_Rcv_Num_WK[IDR]; | |
jg = Rcv_GAN[IDR][n]; | |
for (j0=0; j0<=fan; j0++){ | |
jg0 = natn[Gc_AN][j0]; | |
Mj_AN0 = F_G2M[jg0]; | |
po2 = 0; | |
if (Original_Mc_AN==Mj_AN0){ | |
po2 = 1; | |
q_AN = j0; | |
} | |
if (po2==1){ | |
Gq_AN = natn[Gc_AN][q_AN]; | |
Mq_AN = F_G2M[Gq_AN]; | |
Qwan = WhatSpecies[Gq_AN]; | |
jan = Spe_Total_CNO[Qwan]; | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
dHNL(0,Mc_AN,h_AN,q_AN,DS_NL,Hx0,Hy0,Hz0); | |
/* contribution of force = Trace(CDM0*dH) */ | |
/* spin non-polarization */ | |
if (SpinP_switch==0){ | |
if (q_AN==h_AN) pref = 2.0; | |
else pref = 4.0; | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx += pref*CDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].r; | |
dEy += pref*CDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].r; | |
dEz += pref*CDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].r; | |
} | |
} | |
} | |
/* collinear spin polarized or non-colliear without SO and LDA+U */ | |
else if (SpinP_switch==1 || (SpinP_switch==3 && SO_switch==0 && Hub_U_switch==0 | |
&& Constraint_NCS_switch==0 && Zeeman_NCS_switch==0 && Zeeman_NCO_switch==0)){ | |
if (q_AN==h_AN) pref = 1.0; | |
else pref = 2.0; | |
for (i=0; i<Spe_Total_CNO[Hwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Qwan]; j++){ | |
dEx += pref*( CDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx0[1][i][j].r); | |
dEy += pref*( CDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy0[1][i][j].r); | |
dEz += pref*( CDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz0[1][i][j].r); | |
} | |
} | |
} | |
/* spin non-collinear with spin-orbit coupling or with LDA+U */ | |
else if ( SpinP_switch==3 && (SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1) | |
|| 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1)){ | |
if (q_AN==h_AN){ | |
for (i=0; i<Spe_Total_CNO[Hwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Qwan]; j++){ | |
dEx += | |
CDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx0[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hx0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hx0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hx0[2][i][j].i; | |
dEy += | |
CDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy0[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hy0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hy0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hy0[2][i][j].i; | |
dEz += | |
CDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz0[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hz0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hz0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hz0[2][i][j].i; | |
} | |
} | |
} | |
else { | |
for (i=0; i<Spe_Total_CNO[Hwan]; i++){ /* Hwan */ | |
for (j=0; j<Spe_Total_CNO[Qwan]; j++){ /* Qwan */ | |
dEx += | |
CDM0[0][Mh_AN][kl ][i][j]*Hx0[0][i][j].r | |
- iDM0[0][Mh_AN][kl ][i][j]*Hx0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl ][i][j]*Hx0[1][i][j].r | |
- iDM0[1][Mh_AN][kl ][i][j]*Hx0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl ][i][j]*Hx0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl ][i][j]*Hx0[2][i][j].i; | |
dEy += | |
CDM0[0][Mh_AN][kl ][i][j]*Hy0[0][i][j].r | |
- iDM0[0][Mh_AN][kl ][i][j]*Hy0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl ][i][j]*Hy0[1][i][j].r | |
- iDM0[1][Mh_AN][kl ][i][j]*Hy0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl ][i][j]*Hy0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl ][i][j]*Hy0[2][i][j].i; | |
dEz += | |
CDM0[0][Mh_AN][kl ][i][j]*Hz0[0][i][j].r | |
- iDM0[0][Mh_AN][kl ][i][j]*Hz0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl ][i][j]*Hz0[1][i][j].r | |
- iDM0[1][Mh_AN][kl ][i][j]*Hz0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl ][i][j]*Hz0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl ][i][j]*Hz0[2][i][j].i; | |
} /* j */ | |
} /* i */ | |
dHNL(0,Mc_AN,q_AN,h_AN,DS_NL,Hx1,Hy1,Hz1); | |
kl1 = RMI1[Mc_AN][q_AN][h_AN]; | |
for (i=0; i<Spe_Total_CNO[Qwan]; i++){ /* Qwan */ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ /* Hwan */ | |
dEx += | |
CDM0[0][Mq_AN][kl1][i][j]*Hx1[0][i][j].r | |
- iDM0[0][Mq_AN][kl1][i][j]*Hx1[0][i][j].i | |
+ CDM0[1][Mq_AN][kl1][i][j]*Hx1[1][i][j].r | |
- iDM0[1][Mq_AN][kl1][i][j]*Hx1[1][i][j].i | |
+ 2.0*CDM0[2][Mq_AN][kl1][i][j]*Hx1[2][i][j].r | |
- 2.0*CDM0[3][Mq_AN][kl1][i][j]*Hx1[2][i][j].i; | |
dEy += | |
CDM0[0][Mq_AN][kl1][i][j]*Hy1[0][i][j].r | |
- iDM0[0][Mq_AN][kl1][i][j]*Hy1[0][i][j].i | |
+ CDM0[1][Mq_AN][kl1][i][j]*Hy1[1][i][j].r | |
- iDM0[1][Mq_AN][kl1][i][j]*Hy1[1][i][j].i | |
+ 2.0*CDM0[2][Mq_AN][kl1][i][j]*Hy1[2][i][j].r | |
- 2.0*CDM0[3][Mq_AN][kl1][i][j]*Hy1[2][i][j].i; | |
dEz += | |
CDM0[0][Mq_AN][kl1][i][j]*Hz1[0][i][j].r | |
- iDM0[0][Mq_AN][kl1][i][j]*Hz1[0][i][j].i | |
+ CDM0[1][Mq_AN][kl1][i][j]*Hz1[1][i][j].r | |
- iDM0[1][Mq_AN][kl1][i][j]*Hz1[1][i][j].i | |
+ 2.0*CDM0[2][Mq_AN][kl1][i][j]*Hz1[2][i][j].r | |
- 2.0*CDM0[3][Mq_AN][kl1][i][j]*Hz1[2][i][j].i; | |
} /* j */ | |
} /* i */ | |
} | |
} | |
} /* if (po2==1) */ | |
} /* j0 */ | |
/* force from #4B */ | |
Gxyz[Gc_AN][41] += dEx; | |
Gxyz[Gc_AN][42] += dEy; | |
Gxyz[Gc_AN][43] += dEz; | |
/* timing */ | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} /* Mc_AN */ | |
/******************************************** | |
increment of F_Rcv_Num_WK[IDR] | |
********************************************/ | |
F_Rcv_Num_WK[IDR]++; | |
} /* if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ) */ | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ) { | |
MPI_Wait(&request,&stat); | |
free(tmp_array); /* freeing of array */ | |
/******************************************** | |
increment of F_Snd_Num_WK[IDS] | |
********************************************/ | |
F_Snd_Num_WK[IDS]++; | |
} | |
} /* ID */ | |
/***************************************************** | |
check whether all the communications have finished | |
*****************************************************/ | |
po = 0; | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ) po += F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]; | |
if ( 0<(F_Rcv_Num[IDR]-F_Rcv_Num_WK[IDR]) ) po += F_Rcv_Num[IDR]-F_Rcv_Num_WK[IDR]; | |
} | |
} while (po!=0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hx0[i][j]); | |
} | |
free(Hx0[i]); | |
} | |
free(Hx0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hy0[i][j]); | |
} | |
free(Hy0[i]); | |
} | |
free(Hy0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hz0[i][j]); | |
} | |
free(Hz0[i]); | |
} | |
free(Hz0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hx1[i][j]); | |
} | |
free(Hx1[i]); | |
} | |
free(Hx1); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hy1[i][j]); | |
} | |
free(Hy1[i]); | |
} | |
free(Hy1); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hz1[i][j]); | |
} | |
free(Hz1[i]); | |
} | |
free(Hz1); | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for part1 of force_NL=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
if (2<=level_stdout){ | |
printf("<Force> force(HNL1) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,Gxyz[Gc_AN][41],Gxyz[Gc_AN][42],Gxyz[Gc_AN][43]);fflush(stdout); | |
} | |
} | |
/******************************************************* | |
******************************************************* | |
THE FIRST CASE: | |
multiplying overlap integrals WITHOUT COMMUNICATION | |
In case of I=i or I=j | |
for d [ \sum_k <i|k>ek<k|j> ]/dRI | |
******************************************************* | |
*******************************************************/ | |
dtime(&stime); | |
#pragma omp parallel shared(time_per_atom,Gxyz,CDM0,SpinP_switch,SO_switch,Hub_U_switch,F_U_flag,Constraint_NCS_switch,Zeeman_NCS_switch,Zeeman_NCO_switch,DS_NL,RMI1,FNAN,Spe_Total_CNO,WhatSpecies,F_G2M,natn,M2G,Matomnum,List_YOUSO,F_NL_flag) private(Hx0,Hy0,Hz0,Hx1,Hy1,Hz1,OMPID,Nthrds,Nprocs,Mc_AN,Stime_atom,Etime_atom,dEx,dEy,dEz,Gc_AN,h_AN,Gh_AN,Mh_AN,Hwan,ian,q_AN,Gq_AN,Mq_AN,Qwan,jan,kl,kl1,i,j,kk,pref) | |
{ | |
/* allocation of array */ | |
Hx0 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hx0[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx0[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hy0 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hy0[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hy0[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hz0 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hz0[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hz0[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hx1 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hx1[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx1[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hy1 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hy1[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hy1[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hz1 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hz1[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hz1[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (Mc_AN=(OMPID*Matomnum/Nthrds+1); Mc_AN<((OMPID+1)*Matomnum/Nthrds+1); Mc_AN++){ | |
dtime(&Stime_atom); | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
Gc_AN = M2G[Mc_AN]; | |
h_AN = 0; | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Mh_AN = F_G2M[Gh_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
ian = Spe_Total_CNO[Hwan]; | |
for (q_AN=0; q_AN<=FNAN[Gc_AN]; q_AN++){ | |
Gq_AN = natn[Gc_AN][q_AN]; | |
Mq_AN = F_G2M[Gq_AN]; | |
if (Mq_AN<=Matomnum){ | |
Qwan = WhatSpecies[Gq_AN]; | |
jan = Spe_Total_CNO[Qwan]; | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
dHNL(0,Mc_AN,h_AN,q_AN,DS_NL,Hx0,Hy0,Hz0); | |
if (SpinP_switch==0){ | |
if (q_AN==h_AN) pref = 2.0; | |
else pref = 4.0; | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx += pref*CDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].r; | |
dEy += pref*CDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].r; | |
dEz += pref*CDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].r; | |
} | |
} | |
} | |
/* collinear spin polarized or non-colliear without SO and LDA+U */ | |
else if (SpinP_switch==1 || (SpinP_switch==3 && SO_switch==0 && Hub_U_switch==0 | |
&& Constraint_NCS_switch==0 && Zeeman_NCS_switch==0 && Zeeman_NCO_switch==0)){ | |
if (q_AN==h_AN) pref = 1.0; | |
else pref = 2.0; | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx += pref*( CDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx0[1][i][j].r); | |
dEy += pref*( CDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy0[1][i][j].r); | |
dEz += pref*( CDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz0[1][i][j].r); | |
} | |
} | |
} | |
/* spin non-collinear with spin-orbit coupling or with LDA+U */ | |
else if ( SpinP_switch==3 && (SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1) | |
|| 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1)){ | |
if (q_AN==h_AN){ | |
for (i=0; i<Spe_Total_CNO[Hwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Qwan]; j++){ | |
dEx += | |
CDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx0[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hx0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hx0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hx0[2][i][j].i; | |
dEy += | |
CDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy0[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hy0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hy0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hy0[2][i][j].i; | |
dEz += | |
CDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz0[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hz0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hz0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hz0[2][i][j].i; | |
} | |
} | |
} | |
else{ | |
for (i=0; i<Spe_Total_CNO[Hwan]; i++){ /* Hwan */ | |
for (j=0; j<Spe_Total_CNO[Qwan]; j++){ /* Qwan */ | |
dEx += | |
CDM0[0][Mh_AN][kl ][i][j]*Hx0[0][i][j].r | |
- iDM0[0][Mh_AN][kl ][i][j]*Hx0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl ][i][j]*Hx0[1][i][j].r | |
- iDM0[1][Mh_AN][kl ][i][j]*Hx0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl ][i][j]*Hx0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl ][i][j]*Hx0[2][i][j].i; | |
dEy += | |
CDM0[0][Mh_AN][kl ][i][j]*Hy0[0][i][j].r | |
- iDM0[0][Mh_AN][kl ][i][j]*Hy0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl ][i][j]*Hy0[1][i][j].r | |
- iDM0[1][Mh_AN][kl ][i][j]*Hy0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl ][i][j]*Hy0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl ][i][j]*Hy0[2][i][j].i; | |
dEz += | |
CDM0[0][Mh_AN][kl ][i][j]*Hz0[0][i][j].r | |
- iDM0[0][Mh_AN][kl ][i][j]*Hz0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl ][i][j]*Hz0[1][i][j].r | |
- iDM0[1][Mh_AN][kl ][i][j]*Hz0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl ][i][j]*Hz0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl ][i][j]*Hz0[2][i][j].i; | |
} /* j */ | |
} /* i */ | |
dHNL(0,Mc_AN,q_AN,h_AN,DS_NL,Hx1,Hy1,Hz1); | |
kl1 = RMI1[Mc_AN][q_AN][h_AN]; | |
for (i=0; i<Spe_Total_CNO[Qwan]; i++){ /* Qwan */ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ /* Hwan */ | |
dEx += | |
CDM0[0][Mq_AN][kl1][i][j]*Hx1[0][i][j].r | |
- iDM0[0][Mq_AN][kl1][i][j]*Hx1[0][i][j].i | |
+ CDM0[1][Mq_AN][kl1][i][j]*Hx1[1][i][j].r | |
- iDM0[1][Mq_AN][kl1][i][j]*Hx1[1][i][j].i | |
+ 2.0*CDM0[2][Mq_AN][kl1][i][j]*Hx1[2][i][j].r | |
- 2.0*CDM0[3][Mq_AN][kl1][i][j]*Hx1[2][i][j].i; | |
dEy += | |
CDM0[0][Mq_AN][kl1][i][j]*Hy1[0][i][j].r | |
- iDM0[0][Mq_AN][kl1][i][j]*Hy1[0][i][j].i | |
+ CDM0[1][Mq_AN][kl1][i][j]*Hy1[1][i][j].r | |
- iDM0[1][Mq_AN][kl1][i][j]*Hy1[1][i][j].i | |
+ 2.0*CDM0[2][Mq_AN][kl1][i][j]*Hy1[2][i][j].r | |
- 2.0*CDM0[3][Mq_AN][kl1][i][j]*Hy1[2][i][j].i; | |
dEz += | |
CDM0[0][Mq_AN][kl1][i][j]*Hz1[0][i][j].r | |
- iDM0[0][Mq_AN][kl1][i][j]*Hz1[0][i][j].i | |
+ CDM0[1][Mq_AN][kl1][i][j]*Hz1[1][i][j].r | |
- iDM0[1][Mq_AN][kl1][i][j]*Hz1[1][i][j].i | |
+ 2.0*CDM0[2][Mq_AN][kl1][i][j]*Hz1[2][i][j].r | |
- 2.0*CDM0[3][Mq_AN][kl1][i][j]*Hz1[2][i][j].i; | |
} /* j */ | |
} /* i */ | |
} | |
} | |
} | |
} | |
/* force from #4B */ | |
if (F_NL_flag==1){ | |
Gxyz[Gc_AN][41] += dEx; | |
Gxyz[Gc_AN][42] += dEy; | |
Gxyz[Gc_AN][43] += dEz; | |
} | |
/* timing */ | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} /* Mc_AN */ | |
/* freeing of array */ | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hx0[i][j]); | |
} | |
free(Hx0[i]); | |
} | |
free(Hx0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hy0[i][j]); | |
} | |
free(Hy0[i]); | |
} | |
free(Hy0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hz0[i][j]); | |
} | |
free(Hz0[i]); | |
} | |
free(Hz0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hx1[i][j]); | |
} | |
free(Hx1[i]); | |
} | |
free(Hx1); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hy1[i][j]); | |
} | |
free(Hy1[i]); | |
} | |
free(Hy1); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hz1[i][j]); | |
} | |
free(Hz1[i]); | |
} | |
free(Hz1); | |
} /* #pragma omp parallel */ | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for part2 of force_NL=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
if (2<=level_stdout){ | |
printf("<Force> force(HNL2) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,Gxyz[Gc_AN][41],Gxyz[Gc_AN][42],Gxyz[Gc_AN][43]);fflush(stdout); | |
} | |
} | |
/************************************************************* | |
THE SECOND CASE: | |
In case of I=k with I!=i and I!=j | |
d [ \sum_k <i|k>ek<k|j> ]/dRI | |
*************************************************************/ | |
/************************************************************ | |
MPI communication of DS_NL whose basis part is not located | |
on own site but projector part is located on own site. | |
************************************************************/ | |
MPI_Barrier(mpi_comm_level1); | |
dtime(&stime); | |
for (ID=0; ID<numprocs; ID++) Indicator[ID] = 0; | |
for (Mc_AN=1; Mc_AN<=Max_Matomnum; Mc_AN++){ | |
if (Mc_AN<=Matomnum) Gc_AN = M2G[Mc_AN]; | |
else Gc_AN = 0; | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
i = Indicator[IDS]; | |
po = 0; | |
Gh_AN = Pro_Snd_GAtom[IDS][i]; | |
if (Gh_AN!=0){ | |
/* find the range with the same global atomic number */ | |
do { | |
i++; | |
if (Gh_AN!=Pro_Snd_GAtom[IDS][i]) po = 1; | |
} while(po==0); | |
i--; | |
SA_num = i - Indicator[IDS] + 1; | |
/* find the data size to send the block data */ | |
size1 = 0; | |
for (q=Indicator[IDS]; q<=(Indicator[IDS]+SA_num-1); q++){ | |
Sc_AN = Pro_Snd_MAtom[IDS][q]; | |
GSc_AN = F_M2G[Sc_AN]; | |
Sc_wan = WhatSpecies[GSc_AN]; | |
tno1 = Spe_Total_CNO[Sc_wan]; | |
Sh_AN = Pro_Snd_LAtom[IDS][q]; | |
GSh_AN = natn[GSc_AN][Sh_AN]; | |
Sh_wan = WhatSpecies[GSh_AN]; | |
tno2 = Spe_Total_VPS_Pro[Sh_wan]; | |
smul = (VPS_j_dependency[Sh_wan]+1); | |
size1 += smul*4*tno1*tno2; | |
size1 += 3; | |
} | |
} /* if (Gh_AN!=0) */ | |
else { | |
SA_num = 0; | |
size1 = 0; | |
} | |
S_array[IDS][0] = Gh_AN; | |
S_array[IDS][1] = SA_num; | |
S_array[IDS][2] = size1; | |
if (ID!=0){ | |
MPI_Isend(&S_array[IDS][0], 3, MPI_INT, IDS, tag, mpi_comm_level1, &request); | |
MPI_Recv( &R_array[IDR][0], 3, MPI_INT, IDR, tag, mpi_comm_level1, &stat); | |
MPI_Wait(&request,&stat); | |
} | |
else { | |
R_array[myid][0] = S_array[myid][0]; | |
R_array[myid][1] = S_array[myid][1]; | |
R_array[myid][2] = S_array[myid][2]; | |
} | |
if (R_array[IDR][0]==Gc_AN) R_comm_flag = 1; | |
else R_comm_flag = 0; | |
if (ID!=0){ | |
MPI_Isend(&R_comm_flag, 1, MPI_INT, IDR, tag, mpi_comm_level1, &request); | |
MPI_Recv( &S_comm_flag, 1, MPI_INT, IDS, tag, mpi_comm_level1, &stat); | |
MPI_Wait(&request,&stat); | |
} | |
else{ | |
S_comm_flag = R_comm_flag; | |
} | |
/***************************************** | |
send the data | |
*****************************************/ | |
/* if (S_comm_flag==1) then, send data to IDS */ | |
if (S_comm_flag==1){ | |
/* allocate tmp_array */ | |
tmp_array = (double*)malloc(sizeof(double)*size1); | |
/* multidimentional array to vector array */ | |
num = 0; | |
for (q=Indicator[IDS]; q<=(Indicator[IDS]+SA_num-1); q++){ | |
Sc_AN = Pro_Snd_MAtom[IDS][q]; | |
GSc_AN = F_M2G[Sc_AN]; | |
Sc_wan = WhatSpecies[GSc_AN]; | |
tno1 = Spe_Total_CNO[Sc_wan]; | |
Sh_AN = Pro_Snd_LAtom[IDS][q]; | |
GSh_AN = natn[GSc_AN][Sh_AN]; | |
Sh_wan = WhatSpecies[GSh_AN]; | |
tno2 = Spe_Total_VPS_Pro[Sh_wan]; | |
Sh_AN2 = Pro_Snd_LAtom2[IDS][q]; | |
tmp_array[num] = (double)Sc_AN; num++; | |
tmp_array[num] = (double)Sh_AN; num++; | |
tmp_array[num] = (double)Sh_AN2; num++; | |
for (so=0; so<=VPS_j_dependency[Sh_wan]; so++){ | |
for (kk=0; kk<=3; kk++){ | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
tmp_array[num] = DS_NL[so][kk][Sc_AN][Sh_AN][i][j]; | |
num++; | |
} | |
} | |
} | |
} | |
} | |
if (ID!=0){ | |
MPI_Isend(&tmp_array[0], size1, MPI_DOUBLE, IDS, tag, mpi_comm_level1, &request); | |
} | |
/* update Indicator[IDS] */ | |
Indicator[IDS] += SA_num; | |
} /* if (S_comm_flag==1) */ | |
/***************************************** | |
receive the data | |
*****************************************/ | |
/* if (R_comm_flag==1) then, receive the data from IDR */ | |
if (R_comm_flag==1){ | |
size2 = R_array[IDR][2]; | |
tmp_array2 = (double*)malloc(sizeof(double)*size2); | |
if (ID!=0){ | |
MPI_Recv(&tmp_array2[0], size2, MPI_DOUBLE, IDR, tag, mpi_comm_level1, &stat); | |
} | |
else{ | |
for (i=0; i<size2; i++) tmp_array2[i] = tmp_array[i]; | |
} | |
/* store */ | |
num = 0; | |
for (n=0; n<R_array[IDR][1]; n++){ | |
Sc_AN = (int)tmp_array2[num]; num++; | |
Sh_AN = (int)tmp_array2[num]; num++; | |
Sh_AN2 = (int)tmp_array2[num]; num++; | |
GSc_AN = natn[Gc_AN][Sh_AN2]; | |
Sc_wan = WhatSpecies[GSc_AN]; | |
tno1 = Spe_Total_CNO[Sc_wan]; | |
GSh_AN = natn[GSc_AN][Sh_AN]; | |
Sh_wan = WhatSpecies[GSh_AN]; | |
tno2 = Spe_Total_VPS_Pro[Sh_wan]; | |
for (so=0; so<=VPS_j_dependency[Sh_wan]; so++){ | |
for (kk=0; kk<=3; kk++){ | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
DS_NL[so][kk][Matomnum+1][Sh_AN2][i][j] = tmp_array2[num]; | |
num++; | |
} | |
} | |
} | |
} | |
} | |
/* free tmp_array2 */ | |
free(tmp_array2); | |
} /* if (R_comm_flag==1) */ | |
if (S_comm_flag==1){ | |
if (ID!=0) MPI_Wait(&request,&stat); | |
free(tmp_array); /* freeing of array */ | |
} | |
} /* ID */ | |
if (Mc_AN<=Matomnum){ | |
/* get Nthrds0 */ | |
#pragma omp parallel shared(Nthrds0) | |
{ | |
Nthrds0 = omp_get_num_threads(); | |
} | |
/* allocation of arrays */ | |
dEx_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
dEy_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
dEz_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
dEx_threads[Nloop] = 0.0; | |
dEy_threads[Nloop] = 0.0; | |
dEz_threads[Nloop] = 0.0; | |
} | |
/* one-dimensionalize the h_AN and q_AN loops */ | |
OneD2h_AN = (int*)malloc(sizeof(int)*(FNAN[Gc_AN]+1)*(FNAN[Gc_AN]+2)); | |
OneD2q_AN = (int*)malloc(sizeof(int)*(FNAN[Gc_AN]+1)*(FNAN[Gc_AN]+2)); | |
ODNloop = 0; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
if ( SpinP_switch==3 && (SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1) | |
|| 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1) | |
|| (Solver==5 || Solver==8 || Solver==11) ) | |
start_q_AN = 0; | |
else | |
start_q_AN = h_AN; | |
for (q_AN=start_q_AN; q_AN<=FNAN[Gc_AN]; q_AN++){ | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
if (0<=kl){ | |
OneD2h_AN[ODNloop] = h_AN; | |
OneD2q_AN[ODNloop] = q_AN; | |
ODNloop++; | |
} | |
} | |
} | |
#pragma omp parallel shared(ODNloop,OneD2h_AN,OneD2q_AN,Mc_AN,Gc_AN,dEx_threads,dEy_threads,dEz_threads,CDM0,SpinP_switch,SO_switch,Hub_U_switch,Constraint_NCS_switch,Zeeman_NCS_switch,Zeeman_NCO_switch,DS_NL,RMI1,Spe_Total_CNO,WhatSpecies,F_G2M,natn,FNAN,List_YOUSO,Solver,F_NL_flag,F_U_flag) private(OMPID,Nthrds,Nprocs,Hx,Hy,Hz,i,j,h_AN,Gh_AN,Mh_AN,Hwan,ian,q_AN,Gq_AN,Mq_AN,Qwan,jan,kl,km,Nloop,pref) | |
{ | |
/* allocation of arrays */ | |
Hx = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hx[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hy = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hy[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hy[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hz = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hz[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hz[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (Nloop=OMPID*ODNloop/Nthrds; Nloop<(OMPID+1)*ODNloop/Nthrds; Nloop++){ | |
/* get h_AN and q_AN */ | |
h_AN = OneD2h_AN[Nloop]; | |
q_AN = OneD2q_AN[Nloop]; | |
/* set informations on h_AN */ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Mh_AN = F_G2M[Gh_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
ian = Spe_Total_CNO[Hwan]; | |
/* set informations on q_AN */ | |
Gq_AN = natn[Gc_AN][q_AN]; | |
Mq_AN = F_G2M[Gq_AN]; | |
Qwan = WhatSpecies[Gq_AN]; | |
jan = Spe_Total_CNO[Qwan]; | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
km = RMI1[Mc_AN][q_AN][h_AN]; | |
if (0<=kl){ | |
dHNL(1,Mc_AN,h_AN,q_AN,DS_NL,Hx,Hy,Hz); | |
/* contribution of force = Trace(CDM0*dH) */ | |
/* spin non-polarization */ | |
if (SpinP_switch==0){ | |
if (Solver==5 || Solver==8 || Solver==11){ | |
pref = 2.0; | |
} | |
else { | |
if (q_AN==h_AN) pref = 2.0; | |
else pref = 4.0; | |
} | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx_threads[OMPID] += pref*CDM0[0][Mh_AN][kl][i][j]*Hx[0][i][j].r; | |
dEy_threads[OMPID] += pref*CDM0[0][Mh_AN][kl][i][j]*Hy[0][i][j].r; | |
dEz_threads[OMPID] += pref*CDM0[0][Mh_AN][kl][i][j]*Hz[0][i][j].r; | |
} | |
} | |
} | |
/* collinear spin polarized or non-colliear without SO and LDA+U */ | |
else if (SpinP_switch==1 || (SpinP_switch==3 && SO_switch==0 && Hub_U_switch==0 | |
&& Constraint_NCS_switch==0 && Zeeman_NCS_switch==0 && Zeeman_NCO_switch==0)){ | |
if (Solver==5 || Solver==8 || Solver==11){ | |
pref = 1.0; | |
} | |
else { | |
if (q_AN==h_AN) pref = 1.0; | |
else pref = 2.0; | |
} | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx_threads[OMPID] += pref*( CDM0[0][Mh_AN][kl][i][j]*Hx[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx[1][i][j].r); | |
dEy_threads[OMPID] += pref*( CDM0[0][Mh_AN][kl][i][j]*Hy[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy[1][i][j].r); | |
dEz_threads[OMPID] += pref*( CDM0[0][Mh_AN][kl][i][j]*Hz[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz[1][i][j].r); | |
} | |
} | |
} | |
/* spin non-collinear with spin-orbit coupling or with LDA+U */ | |
else if ( SpinP_switch==3 && (SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1) | |
|| 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1)){ | |
pref = 1.0; | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx_threads[OMPID] += | |
pref*(CDM0[0][Mh_AN][kl][i][j]*Hx[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hx[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hx[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hx[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hx[2][i][j].i); | |
dEy_threads[OMPID] += | |
pref*(CDM0[0][Mh_AN][kl][i][j]*Hy[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hy[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hy[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hy[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hy[2][i][j].i); | |
dEz_threads[OMPID] += | |
pref*(CDM0[0][Mh_AN][kl][i][j]*Hz[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hz[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hz[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hz[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hz[2][i][j].i); | |
} | |
} | |
} | |
} /* if (0<=kl) */ | |
} /* Nloop */ | |
/* freeing of arrays */ | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hx[i][j]); | |
} | |
free(Hx[i]); | |
} | |
free(Hx); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hy[i][j]); | |
} | |
free(Hy[i]); | |
} | |
free(Hy); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hz[i][j]); | |
} | |
free(Hz[i]); | |
} | |
free(Hz); | |
} /* #pragma omp parallel */ | |
/* sum of dEx_threads */ | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
if (F_NL_flag==1){ | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
dEx += dEx_threads[Nloop]; | |
dEy += dEy_threads[Nloop]; | |
dEz += dEz_threads[Nloop]; | |
} | |
/* force from #4B */ | |
Gxyz[Gc_AN][41] += dEx; | |
Gxyz[Gc_AN][42] += dEy; | |
Gxyz[Gc_AN][43] += dEz; | |
} | |
if (2<=level_stdout){ | |
printf("<Force> force(HNL3) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,dEx,dEy,dEz);fflush(stdout); | |
} | |
/* freeing of array */ | |
free(OneD2q_AN); | |
free(OneD2h_AN); | |
free(dEx_threads); | |
free(dEy_threads); | |
free(dEz_threads); | |
} /* if (Mc_AN<=Matomnum) */ | |
} /* Mc_AN */ | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for part3 of force_NL=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/******************************************************** | |
adding Gxyz[Gc_AN][41,42,43] to Gxyz[Gc_AN][17,18,19] | |
********************************************************/ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
if (2<=level_stdout){ | |
printf("<Force> force(HNL) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,Gxyz[Gc_AN][41],Gxyz[Gc_AN][42],Gxyz[Gc_AN][43]);fflush(stdout); | |
} | |
Gxyz[Gc_AN][17] += Gxyz[Gc_AN][41]; | |
Gxyz[Gc_AN][18] += Gxyz[Gc_AN][42]; | |
Gxyz[Gc_AN][19] += Gxyz[Gc_AN][43]; | |
} | |
/*********************************** | |
freeing of arrays | |
************************************/ | |
free(Indicator); | |
for (ID=0; ID<numprocs; ID++){ | |
free(S_array[ID]); | |
} | |
free(S_array); | |
for (ID=0; ID<numprocs; ID++){ | |
free(R_array[ID]); | |
} | |
free(R_array); | |
free(Snd_DS_NL_Size); | |
free(Rcv_DS_NL_Size); | |
} | |
void Force4B(double *****CDM0) | |
{ | |
/**************************************************** | |
#4 of Force | |
by the projector expansion of VNA | |
****************************************************/ | |
int Mc_AN,Gc_AN,Cwan,i,j,h_AN,q_AN,start_q_AN,Mq_AN; | |
int jan,kl,Qwan,Gq_AN,Gh_AN,Mh_AN,Hwan,ian; | |
int l1,l2,l3,l,LL,Mul1,Num_RVNA,tno0,ncp; | |
int tno1,tno2,size1,size2,n,kk,num,po,po1,po2; | |
int numprocs,myid,tag=999,ID,IDS,IDR; | |
int **S_array,**R_array; | |
int S_comm_flag,R_comm_flag; | |
int SA_num,q,Sc_AN,GSc_AN; | |
int Sc_wan,Sh_AN,GSh_AN,Sh_wan; | |
int Sh_AN2,fan,jg,j0,jg0,Mj_AN0; | |
int Original_Mc_AN; | |
double rcutA,rcutB,rcut; | |
double dEx,dEy,dEz,ene,pref; | |
double Stime_atom, Etime_atom; | |
double **HVNAx,**HVNAy,**HVNAz; | |
int *VNA_List; | |
int *VNA_List2; | |
int *Snd_DS_VNA_Size,*Rcv_DS_VNA_Size; | |
int *Indicator; | |
Type_DS_VNA *tmp_array; | |
Type_DS_VNA *tmp_array2; | |
/* for OpenMP */ | |
int OMPID,Nthrds,Nthrds0,Nprocs,Nloop,ODNloop; | |
int *OneD2h_AN,*OneD2q_AN; | |
double *dEx_threads; | |
double *dEy_threads; | |
double *dEz_threads; | |
double stime,etime; | |
double stime1,etime1; | |
MPI_Status stat; | |
MPI_Request request; | |
static int counter=0; | |
counter++; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
dtime(&stime); | |
/**************************** | |
allocation of arrays | |
*****************************/ | |
Indicator = (int*)malloc(sizeof(int)*numprocs); | |
S_array = (int**)malloc(sizeof(int*)*numprocs); | |
for (ID=0; ID<numprocs; ID++){ | |
S_array[ID] = (int*)malloc(sizeof(int)*3); | |
} | |
R_array = (int**)malloc(sizeof(int*)*numprocs); | |
for (ID=0; ID<numprocs; ID++){ | |
R_array[ID] = (int*)malloc(sizeof(int)*3); | |
} | |
Snd_DS_VNA_Size = (int*)malloc(sizeof(int)*numprocs); | |
Rcv_DS_VNA_Size = (int*)malloc(sizeof(int)*numprocs); | |
VNA_List = (int*)malloc(sizeof(int)*(List_YOUSO[34]*(List_YOUSO[35] + 1)+2) ); | |
VNA_List2 = (int*)malloc(sizeof(int)*(List_YOUSO[34]*(List_YOUSO[35] + 1)+2) ); | |
/* initialize the temporal array storing the force contribution */ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = F_M2G[Mc_AN]; | |
Gxyz[Gc_AN][41] = 0.0; | |
Gxyz[Gc_AN][42] = 0.0; | |
Gxyz[Gc_AN][43] = 0.0; | |
} | |
/************************************************************* | |
contraction of DS_VNA and HVNA2 | |
*************************************************************/ | |
if (Cnt_switch==1 && ProExpn_VNA==1){ | |
Cont_Matrix2(DS_VNA[0],CntDS_VNA[0]); | |
Cont_Matrix2(DS_VNA[1],CntDS_VNA[1]); | |
Cont_Matrix2(DS_VNA[2],CntDS_VNA[2]); | |
Cont_Matrix2(DS_VNA[3],CntDS_VNA[3]); | |
Cont_Matrix3(HVNA2[1],CntHVNA2[1]); | |
Cont_Matrix3(HVNA2[2],CntHVNA2[2]); | |
Cont_Matrix3(HVNA2[3],CntHVNA2[3]); | |
Cont_Matrix4(HVNA3[1],CntHVNA3[1]); | |
Cont_Matrix4(HVNA3[2],CntHVNA3[2]); | |
Cont_Matrix4(HVNA3[3],CntHVNA3[3]); | |
} | |
/************************************************************* | |
make VNA_List and VNA_List2 | |
*************************************************************/ | |
l = 0; | |
for (i=0; i<=List_YOUSO[35]; i++){ /* max L */ | |
for (j=0; j<List_YOUSO[34]; j++){ /* # of radial projectors */ | |
VNA_List[l] = i; | |
VNA_List2[l] = j; | |
l++; | |
} | |
} | |
Num_RVNA = List_YOUSO[34]*(List_YOUSO[35] + 1); | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for part1 of force#4=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/***************************************************** | |
if orbital optimization | |
copy CntDS_VNA[0] into DS_VNA[0] | |
*****************************************************/ | |
if (Cnt_switch==1){ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = F_M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno0 = Spe_Total_CNO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
for (i=0; i<tno0; i++){ | |
l = 0; | |
for (l1=0; l1<Num_RVNA; l1++){ | |
l2 = 2*VNA_List[l1]; | |
for (l3=0; l3<=l2; l3++){ | |
DS_VNA[0][Mc_AN][h_AN][i][l] = CntDS_VNA[0][Mc_AN][h_AN][i][l]; | |
l++; | |
} | |
} | |
} | |
} | |
} | |
} | |
/***************************************************** | |
(1) pre-multiplying DS_VNA[kk] with ene | |
(2) copy DS_VNA[kk] or CntDS_VNA[kk] into DS_VNA[kk] | |
*****************************************************/ | |
dtime(&stime); | |
#pragma omp parallel shared(CntDS_VNA,DS_VNA,Cnt_switch,VNA_proj_ene,VNA_List2,VNA_List,Num_RVNA,natn,FNAN,Spe_Total_CNO,WhatSpecies,F_M2G,Matomnum) private(kk,OMPID,Nthrds,Nprocs,Gc_AN,Cwan,tno0,Mc_AN,h_AN,Gh_AN,Hwan,i,l,l1,LL,Mul1,ene,l2,l3) | |
{ | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (kk=1; kk<=3; kk++){ | |
for (Mc_AN=(OMPID*Matomnum/Nthrds+1); Mc_AN<((OMPID+1)*Matomnum/Nthrds+1); Mc_AN++){ | |
Gc_AN = F_M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno0 = Spe_Total_CNO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
for (i=0; i<tno0; i++){ | |
l = 0; | |
for (l1=0; l1<Num_RVNA; l1++){ | |
LL = VNA_List[l1]; | |
Mul1 = VNA_List2[l1]; | |
ene = VNA_proj_ene[Hwan][LL][Mul1]; | |
l2 = 2*VNA_List[l1]; | |
if (Cnt_switch==0){ | |
for (l3=0; l3<=l2; l3++){ | |
DS_VNA[kk][Mc_AN][h_AN][i][l] = ene*DS_VNA[kk][Mc_AN][h_AN][i][l]; | |
l++; | |
} | |
} | |
else{ | |
for (l3=0; l3<=l2; l3++){ | |
DS_VNA[kk][Mc_AN][h_AN][i][l] = ene*CntDS_VNA[kk][Mc_AN][h_AN][i][l]; | |
l++; | |
} | |
} | |
} | |
} | |
} /* h_AN */ | |
} /* Mc_AN */ | |
} /* kk */ | |
} /* #pragma omp parallel */ | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for part2 of force#4=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/*****************************************}********************** | |
THE FIRST CASE: | |
In case of I=i or I=j | |
for d [ \sum_k <i|k>ek<k|j> ]/dRI | |
****************************************************************/ | |
/******************************************************* | |
******************************************************* | |
multiplying overlap integrals WITH COMMUNICATION | |
******************************************************* | |
*******************************************************/ | |
MPI_Barrier(mpi_comm_level1); | |
dtime(&stime); | |
for (ID=0; ID<numprocs; ID++){ | |
F_Snd_Num_WK[ID] = 0; | |
F_Rcv_Num_WK[ID] = 0; | |
} | |
do { | |
/*********************************** | |
set the size of data | |
************************************/ | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
/* find the data size to send the block data */ | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ){ | |
size1 = 0; | |
n = F_Snd_Num_WK[IDS]; | |
Mc_AN = Snd_MAN[IDS][n]; | |
Gc_AN = Snd_GAN[IDS][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_NO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = (List_YOUSO[35]+1)*(List_YOUSO[35]+1)*List_YOUSO[34]; | |
size1 += tno1*tno2; | |
} | |
Snd_DS_VNA_Size[IDS] = size1; | |
MPI_Isend(&size1, 1, MPI_INT, IDS, tag, mpi_comm_level1, &request); | |
} | |
else{ | |
Snd_DS_VNA_Size[IDS] = 0; | |
} | |
/* receiving of the size of the data */ | |
if ( 0<(F_Rcv_Num[IDR]-F_Rcv_Num_WK[IDR]) ){ | |
MPI_Recv(&size2, 1, MPI_INT, IDR, tag, mpi_comm_level1, &stat); | |
Rcv_DS_VNA_Size[IDR] = size2; | |
} | |
else{ | |
Rcv_DS_VNA_Size[IDR] = 0; | |
} | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ) MPI_Wait(&request,&stat); | |
} /* ID */ | |
/*********************************** | |
data transfer | |
************************************/ | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
/****************************** | |
sending of the data | |
******************************/ | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ){ | |
size1 = Snd_DS_VNA_Size[IDS]; | |
/* allocation of the array */ | |
tmp_array = (Type_DS_VNA*)malloc(sizeof(Type_DS_VNA)*size1); | |
/* multidimentional array to the vector array */ | |
num = 0; | |
n = F_Snd_Num_WK[IDS]; | |
Mc_AN = Snd_MAN[IDS][n]; | |
Gc_AN = Snd_GAN[IDS][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_NO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = (List_YOUSO[35]+1)*(List_YOUSO[35]+1)*List_YOUSO[34]; | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
tmp_array[num] = DS_VNA[0][Mc_AN][h_AN][i][j]; | |
num++; | |
} | |
} | |
} | |
MPI_Isend(&tmp_array[0], size1, MPI_Type_DS_VNA, IDS, tag, mpi_comm_level1, &request); | |
} | |
/****************************** | |
receiving of the block data | |
******************************/ | |
if ( 0<(F_Rcv_Num[IDR]-F_Rcv_Num_WK[IDR]) ){ | |
size2 = Rcv_DS_VNA_Size[IDR]; | |
tmp_array2 = (Type_DS_VNA*)malloc(sizeof(Type_DS_VNA)*size2); | |
MPI_Recv(&tmp_array2[0], size2, MPI_Type_DS_VNA, IDR, tag, mpi_comm_level1, &stat); | |
/* store */ | |
num = 0; | |
n = F_Rcv_Num_WK[IDR]; | |
Original_Mc_AN = F_TopMAN[IDR] + n; | |
Gc_AN = Rcv_GAN[IDR][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_NO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = (List_YOUSO[35]+1)*(List_YOUSO[35]+1)*List_YOUSO[34]; | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
DS_VNA[0][Matomnum+1][h_AN][i][j] = tmp_array2[num]; | |
num++; | |
} | |
} | |
} | |
/* free tmp_array2 */ | |
free(tmp_array2); | |
/***************************************** | |
multiplying overlap integrals | |
*****************************************/ | |
#pragma omp parallel shared(List_YOUSO,time_per_atom,Gxyz,CDM0,SpinP_switch,CntHVNA2,HVNA2,DS_VNA,Cnt_switch,RMI1,Original_Mc_AN,IDR,Rcv_GAN,F_Rcv_Num_WK,Spe_Total_CNO,F_G2M,natn,FNAN,WhatSpecies,M2G,Matomnum) private(OMPID,Nthrds,Nprocs,Stime_atom,Etime_atom,dEx,dEy,dEz,Gc_AN,Mc_AN,Cwan,fan,h_AN,Gh_AN,Mh_AN,Hwan,ian,n,jg,j0,jg0,Mj_AN0,po2,q_AN,Gq_AN,Mq_AN,Qwan,jan,kl,HVNAx,HVNAy,HVNAz,i,j) | |
{ | |
/* allocation of array */ | |
HVNAx = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HVNAx[j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
HVNAy = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HVNAy[j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
HVNAz = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HVNAz[j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (Mc_AN=(OMPID*Matomnum/Nthrds+1); Mc_AN<((OMPID+1)*Matomnum/Nthrds+1); Mc_AN++){ | |
dtime(&Stime_atom); | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
fan = FNAN[Gc_AN]; | |
h_AN = 0; | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Mh_AN = F_G2M[Gh_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
ian = Spe_Total_CNO[Hwan]; | |
n = F_Rcv_Num_WK[IDR]; | |
jg = Rcv_GAN[IDR][n]; | |
for (j0=0; j0<=fan; j0++){ | |
jg0 = natn[Gc_AN][j0]; | |
Mj_AN0 = F_G2M[jg0]; | |
po2 = 0; | |
if (Original_Mc_AN==Mj_AN0){ | |
po2 = 1; | |
q_AN = j0; | |
} | |
if (po2==1){ | |
Gq_AN = natn[Gc_AN][q_AN]; | |
Mq_AN = F_G2M[Gq_AN]; | |
Qwan = WhatSpecies[Gq_AN]; | |
jan = Spe_Total_CNO[Qwan]; | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
if (Cnt_switch==0) { | |
dHVNA(0,Mc_AN,h_AN,q_AN,DS_VNA,HVNA2,HVNA3,HVNAx,HVNAy,HVNAz); | |
} | |
else { | |
dHVNA(0,Mc_AN,h_AN,q_AN,DS_VNA,CntHVNA2,CntHVNA3,HVNAx,HVNAy,HVNAz); | |
} | |
/* contribution of force = Trace(CDM0*dH) */ | |
/* spin non-polarization */ | |
if (SpinP_switch==0){ | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
if (q_AN==h_AN){ | |
dEx += 2.0*CDM0[0][Mh_AN][kl][i][j]*HVNAx[i][j]; | |
dEy += 2.0*CDM0[0][Mh_AN][kl][i][j]*HVNAy[i][j]; | |
dEz += 2.0*CDM0[0][Mh_AN][kl][i][j]*HVNAz[i][j]; | |
} | |
else{ | |
dEx += 4.0*CDM0[0][Mh_AN][kl][i][j]*HVNAx[i][j]; | |
dEy += 4.0*CDM0[0][Mh_AN][kl][i][j]*HVNAy[i][j]; | |
dEz += 4.0*CDM0[0][Mh_AN][kl][i][j]*HVNAz[i][j]; | |
} | |
} | |
} | |
} | |
/* else */ | |
else{ | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
if (q_AN==h_AN){ | |
dEx += ( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAx[i][j]; | |
dEy += ( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAy[i][j]; | |
dEz += ( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAz[i][j]; | |
} | |
else{ | |
dEx += 2.0*( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAx[i][j]; | |
dEy += 2.0*( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAy[i][j]; | |
dEz += 2.0*( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAz[i][j]; | |
} | |
} | |
} | |
} | |
} /* if (po2==1) */ | |
} /* j0 */ | |
/* force from #4B */ | |
Gxyz[Gc_AN][41] += dEx; | |
Gxyz[Gc_AN][42] += dEy; | |
Gxyz[Gc_AN][43] += dEz; | |
/* timing */ | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} /* Mc_AN */ | |
/* freeing of array */ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HVNAx[j]); | |
} | |
free(HVNAx); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HVNAy[j]); | |
} | |
free(HVNAy); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HVNAz[j]); | |
} | |
free(HVNAz); | |
} /* #pragma omp parallel */ | |
/******************************************** | |
increment of F_Rcv_Num_WK[IDR] | |
********************************************/ | |
F_Rcv_Num_WK[IDR]++; | |
} /* if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ) */ | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ) { | |
MPI_Wait(&request,&stat); | |
free(tmp_array); /* freeing of array */ | |
/******************************************** | |
increment of F_Snd_Num_WK[IDS] | |
********************************************/ | |
F_Snd_Num_WK[IDS]++; | |
} | |
} /* ID */ | |
/***************************************************** | |
check whether all the communications have finished | |
*****************************************************/ | |
po = 0; | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ) po += F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]; | |
if ( 0<(F_Rcv_Num[IDR]-F_Rcv_Num_WK[IDR]) ) po += F_Rcv_Num[IDR]-F_Rcv_Num_WK[IDR]; | |
} | |
} while (po!=0); | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for part3 of force#4=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/******************************************************* | |
******************************************************* | |
THE FIRST CASE: | |
multiplying overlap integrals WITHOUT COMMUNICATION | |
******************************************************* | |
*******************************************************/ | |
dtime(&stime); | |
#pragma omp parallel shared(time_per_atom,Gxyz,CDM0,SpinP_switch,CntHVNA2,HVNA2,DS_VNA,Cnt_switch,RMI1,FNAN,Spe_Total_CNO,WhatSpecies,F_G2M,natn,M2G,Matomnum,List_YOUSO) private(HVNAx,HVNAy,HVNAz,OMPID,Nthrds,Nprocs,Mc_AN,Stime_atom,Etime_atom,dEx,dEy,dEz,Gc_AN,h_AN,Gh_AN,Mh_AN,Hwan,ian,q_AN,Gq_AN,Mq_AN,Qwan,jan,kl,i,j,kk) | |
{ | |
/* allocation of array */ | |
HVNAx = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HVNAx[j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
HVNAy = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HVNAy[j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
HVNAz = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HVNAz[j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (Mc_AN=(OMPID*Matomnum/Nthrds+1); Mc_AN<((OMPID+1)*Matomnum/Nthrds+1); Mc_AN++){ | |
dtime(&Stime_atom); | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
Gc_AN = M2G[Mc_AN]; | |
h_AN = 0; | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Mh_AN = F_G2M[Gh_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
ian = Spe_Total_CNO[Hwan]; | |
for (q_AN=h_AN; q_AN<=FNAN[Gc_AN]; q_AN++){ | |
Gq_AN = natn[Gc_AN][q_AN]; | |
Mq_AN = F_G2M[Gq_AN]; | |
if (Mq_AN<=Matomnum){ | |
Qwan = WhatSpecies[Gq_AN]; | |
jan = Spe_Total_CNO[Qwan]; | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
if (Cnt_switch==0) { | |
dHVNA(0,Mc_AN,h_AN,q_AN,DS_VNA,HVNA2,HVNA3,HVNAx,HVNAy,HVNAz); | |
} | |
else { | |
dHVNA(0,Mc_AN,h_AN,q_AN,DS_VNA,CntHVNA2,CntHVNA3,HVNAx,HVNAy,HVNAz); | |
} | |
if (SpinP_switch==0){ | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
if (q_AN==h_AN){ | |
dEx += 2.0*CDM0[0][Mh_AN][kl][i][j]*HVNAx[i][j]; | |
dEy += 2.0*CDM0[0][Mh_AN][kl][i][j]*HVNAy[i][j]; | |
dEz += 2.0*CDM0[0][Mh_AN][kl][i][j]*HVNAz[i][j]; | |
} | |
else{ | |
dEx += 4.0*CDM0[0][Mh_AN][kl][i][j]*HVNAx[i][j]; | |
dEy += 4.0*CDM0[0][Mh_AN][kl][i][j]*HVNAy[i][j]; | |
dEz += 4.0*CDM0[0][Mh_AN][kl][i][j]*HVNAz[i][j]; | |
} | |
} | |
} | |
} | |
/* else */ | |
else{ | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
if (q_AN==h_AN){ | |
dEx += ( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAx[i][j]; | |
dEy += ( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAy[i][j]; | |
dEz += ( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAz[i][j]; | |
} | |
else{ | |
dEx += 2.0*( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAx[i][j]; | |
dEy += 2.0*( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAy[i][j]; | |
dEz += 2.0*( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAz[i][j]; | |
} | |
} | |
} | |
} | |
} | |
} | |
/* force from #4B */ | |
Gxyz[Gc_AN][41] += dEx; | |
Gxyz[Gc_AN][42] += dEy; | |
Gxyz[Gc_AN][43] += dEz; | |
/* timing */ | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} /* Mc_AN */ | |
/* freeing of array */ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HVNAx[j]); | |
} | |
free(HVNAx); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HVNAy[j]); | |
} | |
free(HVNAy); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HVNAz[j]); | |
} | |
free(HVNAz); | |
} /* #pragma omp parallel */ | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for part4 of force#4=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/************************************************************* | |
THE SECOND CASE: | |
In case of I=k with I!=i and I!=j | |
d [ \sum_k <i|k>ek<k|j> ]/dRI | |
*************************************************************/ | |
/************************************************************ | |
MPI communication of DS_VNA whose basis part is not located | |
on own site but projector part is located on own site. | |
************************************************************/ | |
MPI_Barrier(mpi_comm_level1); | |
dtime(&stime); | |
for (ID=0; ID<numprocs; ID++) Indicator[ID] = 0; | |
for (Mc_AN=1; Mc_AN<=Max_Matomnum; Mc_AN++){ | |
dtime(&Stime_atom); | |
dtime(&stime1); | |
if (Mc_AN<=Matomnum) Gc_AN = M2G[Mc_AN]; | |
else Gc_AN = 0; | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
i = Indicator[IDS]; | |
po = 0; | |
Gh_AN = Pro_Snd_GAtom[IDS][i]; | |
if (Gh_AN!=0){ | |
/* find the range with the same global atomic number */ | |
do { | |
i++; | |
if (Gh_AN!=Pro_Snd_GAtom[IDS][i]) po = 1; | |
} while(po==0); | |
i--; | |
SA_num = i - Indicator[IDS] + 1; | |
/* find the data size to send the block data */ | |
size1 = 0; | |
for (q=Indicator[IDS]; q<=(Indicator[IDS]+SA_num-1); q++){ | |
Sc_AN = Pro_Snd_MAtom[IDS][q]; | |
GSc_AN = F_M2G[Sc_AN]; | |
Sc_wan = WhatSpecies[GSc_AN]; | |
tno1 = Spe_Total_CNO[Sc_wan]; | |
tno2 = (List_YOUSO[35]+1)*(List_YOUSO[35]+1)*List_YOUSO[34]; | |
size1 += 4*tno1*tno2; | |
size1 += 3; | |
} | |
} /* if (Gh_AN!=0) */ | |
else { | |
SA_num = 0; | |
size1 = 0; | |
} | |
S_array[IDS][0] = Gh_AN; | |
S_array[IDS][1] = SA_num; | |
S_array[IDS][2] = size1; | |
if (ID!=0){ | |
MPI_Isend(&S_array[IDS][0], 3, MPI_INT, IDS, tag, mpi_comm_level1, &request); | |
MPI_Recv( &R_array[IDR][0], 3, MPI_INT, IDR, tag, mpi_comm_level1, &stat); | |
MPI_Wait(&request,&stat); | |
} | |
else { | |
R_array[myid][0] = S_array[myid][0]; | |
R_array[myid][1] = S_array[myid][1]; | |
R_array[myid][2] = S_array[myid][2]; | |
} | |
if (R_array[IDR][0]==Gc_AN) R_comm_flag = 1; | |
else R_comm_flag = 0; | |
if (ID!=0){ | |
MPI_Isend(&R_comm_flag, 1, MPI_INT, IDR, tag, mpi_comm_level1, &request); | |
MPI_Recv( &S_comm_flag, 1, MPI_INT, IDS, tag, mpi_comm_level1, &stat); | |
MPI_Wait(&request,&stat); | |
} | |
else{ | |
S_comm_flag = R_comm_flag; | |
} | |
/* | |
if (counter==2 && ID==8){ | |
printf("QQQ4 myid=%2d\n",myid);fflush(stdout); | |
MPI_Finalize(); | |
exit(0); | |
} | |
*/ | |
/***************************************** | |
send the data | |
*****************************************/ | |
/* if (S_comm_flag==1) then, send data to IDS */ | |
if (S_comm_flag==1){ | |
/* allocate tmp_array */ | |
tmp_array = (Type_DS_VNA*)malloc(sizeof(Type_DS_VNA)*size1); | |
/* multidimentional array to vector array */ | |
num = 0; | |
for (q=Indicator[IDS]; q<=(Indicator[IDS]+SA_num-1); q++){ | |
Sc_AN = Pro_Snd_MAtom[IDS][q]; | |
GSc_AN = F_M2G[Sc_AN]; | |
Sc_wan = WhatSpecies[GSc_AN]; | |
tno1 = Spe_Total_CNO[Sc_wan]; | |
Sh_AN = Pro_Snd_LAtom[IDS][q]; | |
GSh_AN = natn[GSc_AN][Sh_AN]; | |
Sh_wan = WhatSpecies[GSh_AN]; | |
tno2 = (List_YOUSO[35]+1)*(List_YOUSO[35]+1)*List_YOUSO[34]; | |
Sh_AN2 = Pro_Snd_LAtom2[IDS][q]; | |
tmp_array[num] = (Type_DS_VNA)Sc_AN; num++; | |
tmp_array[num] = (Type_DS_VNA)Sh_AN; num++; | |
tmp_array[num] = (Type_DS_VNA)Sh_AN2; num++; | |
for (kk=0; kk<=3; kk++){ | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
tmp_array[num] = DS_VNA[kk][Sc_AN][Sh_AN][i][j]; | |
num++; | |
} | |
} | |
} | |
} | |
if (ID!=0){ | |
MPI_Isend(&tmp_array[0], size1, MPI_Type_DS_VNA, IDS, tag, mpi_comm_level1, &request); | |
} | |
/* update Indicator[IDS] */ | |
Indicator[IDS] += SA_num; | |
} /* if (S_comm_flag==1) */ | |
/***************************************** | |
receive the data | |
*****************************************/ | |
/* if (R_comm_flag==1) then, receive the data from IDR */ | |
if (R_comm_flag==1){ | |
size2 = R_array[IDR][2]; | |
tmp_array2 = (Type_DS_VNA*)malloc(sizeof(Type_DS_VNA)*size2); | |
if (ID!=0){ | |
MPI_Recv(&tmp_array2[0], size2, MPI_Type_DS_VNA, IDR, tag, mpi_comm_level1, &stat); | |
} | |
else{ | |
for (i=0; i<size2; i++) tmp_array2[i] = tmp_array[i]; | |
} | |
/* store */ | |
num = 0; | |
for (n=0; n<R_array[IDR][1]; n++){ | |
Sc_AN = (int)tmp_array2[num]; num++; | |
Sh_AN = (int)tmp_array2[num]; num++; | |
Sh_AN2 = (int)tmp_array2[num]; num++; | |
GSc_AN = natn[Gc_AN][Sh_AN2]; | |
Sc_wan = WhatSpecies[GSc_AN]; | |
tno1 = Spe_Total_CNO[Sc_wan]; | |
tno2 = (List_YOUSO[35]+1)*(List_YOUSO[35]+1)*List_YOUSO[34]; | |
for (kk=0; kk<=3; kk++){ | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
DS_VNA[kk][Matomnum+1][Sh_AN2][i][j] = tmp_array2[num]; | |
num++; | |
} | |
} | |
} | |
} | |
/* free tmp_array2 */ | |
free(tmp_array2); | |
} /* if (R_comm_flag==1) */ | |
if (S_comm_flag==1){ | |
if (ID!=0) MPI_Wait(&request,&stat); | |
free(tmp_array); /* freeing of array */ | |
} | |
} /* ID */ | |
dtime(&etime1); | |
if(myid==0 && measure_time){ | |
printf("Time for part5A of force#4=%18.5f\n",etime1-stime1);fflush(stdout); | |
} | |
dtime(&stime1); | |
if (Mc_AN<=Matomnum){ | |
/* get Nthrds0 */ | |
#pragma omp parallel shared(Nthrds0) | |
{ | |
Nthrds0 = omp_get_num_threads(); | |
} | |
/* allocation of arrays */ | |
dEx_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
dEy_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
dEz_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
dEx_threads[Nloop] = 0.0; | |
dEy_threads[Nloop] = 0.0; | |
dEz_threads[Nloop] = 0.0; | |
} | |
/* one-dimensionalize the h_AN and q_AN loops */ | |
OneD2h_AN = (int*)malloc(sizeof(int)*(FNAN[Gc_AN]+1)*(FNAN[Gc_AN]+2)); | |
OneD2q_AN = (int*)malloc(sizeof(int)*(FNAN[Gc_AN]+1)*(FNAN[Gc_AN]+2)); | |
ODNloop = 0; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
if ( Solver==5 || Solver==8 || Solver==11) | |
start_q_AN = 0; | |
else | |
start_q_AN = h_AN; | |
for (q_AN=start_q_AN; q_AN<=FNAN[Gc_AN]; q_AN++){ | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
if (0<=kl){ | |
OneD2h_AN[ODNloop] = h_AN; | |
OneD2q_AN[ODNloop] = q_AN; | |
ODNloop++; | |
} | |
} | |
} | |
#pragma omp parallel shared(ODNloop,OneD2h_AN,OneD2q_AN,Mc_AN,Gc_AN,dEx_threads,dEy_threads,dEz_threads,CDM0,SpinP_switch,CntHVNA2,HVNA2,DS_VNA,Cnt_switch,RMI1,Spe_Total_CNO,WhatSpecies,F_G2M,natn,FNAN,List_YOUSO,Solver) private(OMPID,Nthrds,Nprocs,HVNAx,HVNAy,HVNAz,i,j,h_AN,Gh_AN,Mh_AN,Hwan,ian,q_AN,Gq_AN,Mq_AN,Qwan,jan,kl,Nloop,pref) | |
{ | |
/* allocation of arrays */ | |
HVNAx = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HVNAx[j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
HVNAy = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HVNAy[j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
HVNAz = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
HVNAz[j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (Nloop=OMPID*ODNloop/Nthrds; Nloop<(OMPID+1)*ODNloop/Nthrds; Nloop++){ | |
/* get h_AN and q_AN */ | |
h_AN = OneD2h_AN[Nloop]; | |
q_AN = OneD2q_AN[Nloop]; | |
/* set informations on h_AN */ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Mh_AN = F_G2M[Gh_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
ian = Spe_Total_CNO[Hwan]; | |
/* set informations on q_AN */ | |
Gq_AN = natn[Gc_AN][q_AN]; | |
Mq_AN = F_G2M[Gq_AN]; | |
Qwan = WhatSpecies[Gq_AN]; | |
jan = Spe_Total_CNO[Qwan]; | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
if (0<=kl){ | |
if (Cnt_switch==0) | |
dHVNA(1,Mc_AN,h_AN,q_AN,DS_VNA,HVNA2,HVNA3,HVNAx,HVNAy,HVNAz); | |
else | |
dHVNA(1,Mc_AN,h_AN,q_AN,DS_VNA,CntHVNA2,CntHVNA3,HVNAx,HVNAy,HVNAz); | |
/* contribution of force = Trace(CDM0*dH) */ | |
/* spin non-polarization */ | |
if (SpinP_switch==0){ | |
if (Solver==5 || Solver==8 || Solver==11){ | |
pref = 2.0; | |
} | |
else { | |
if (q_AN==h_AN) pref = 2.0; | |
else pref = 4.0; | |
} | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx_threads[OMPID] += pref*CDM0[0][Mh_AN][kl][i][j]*HVNAx[i][j]; | |
dEy_threads[OMPID] += pref*CDM0[0][Mh_AN][kl][i][j]*HVNAy[i][j]; | |
dEz_threads[OMPID] += pref*CDM0[0][Mh_AN][kl][i][j]*HVNAz[i][j]; | |
} | |
} | |
} | |
/* else */ | |
else{ | |
if (Solver==5 || Solver==8 || Solver==11){ | |
pref = 1.0; | |
} | |
else { | |
if (q_AN==h_AN) pref = 1.0; | |
else pref = 2.0; | |
} | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx_threads[OMPID] += pref*( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAx[i][j]; | |
dEy_threads[OMPID] += pref*( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAy[i][j]; | |
dEz_threads[OMPID] += pref*( CDM0[0][Mh_AN][kl][i][j] | |
+ CDM0[1][Mh_AN][kl][i][j] )*HVNAz[i][j]; | |
} | |
} | |
} | |
} /* if (0<=kl) */ | |
} /* Nloop */ | |
/* freeing of arrays */ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HVNAx[j]); | |
} | |
free(HVNAx); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HVNAy[j]); | |
} | |
free(HVNAy); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(HVNAz[j]); | |
} | |
free(HVNAz); | |
} /* #pragma omp parallel */ | |
/* sum of dEx_threads */ | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
dEx += dEx_threads[Nloop]; | |
dEy += dEy_threads[Nloop]; | |
dEz += dEz_threads[Nloop]; | |
} | |
/* force from #4B */ | |
Gxyz[Gc_AN][41] += dEx; | |
Gxyz[Gc_AN][42] += dEy; | |
Gxyz[Gc_AN][43] += dEz; | |
/* timing */ | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
/* freeing of array */ | |
free(OneD2q_AN); | |
free(OneD2h_AN); | |
free(dEx_threads); | |
free(dEy_threads); | |
free(dEz_threads); | |
} /* if (Mc_AN<=Matomnum) */ | |
dtime(&etime1); | |
if(myid==0 && measure_time){ | |
printf("Time for part5B of force#4=%18.5f\n",etime1-stime1);fflush(stdout); | |
} | |
} /* Mc_AN */ | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for part5 of force#4=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
if (2<=level_stdout){ | |
printf("<Force> force(4B) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,Gxyz[Gc_AN][41],Gxyz[Gc_AN][42],Gxyz[Gc_AN][43]);fflush(stdout); | |
} | |
Gxyz[Gc_AN][17] += Gxyz[Gc_AN][41]; | |
Gxyz[Gc_AN][18] += Gxyz[Gc_AN][42]; | |
Gxyz[Gc_AN][19] += Gxyz[Gc_AN][43]; | |
} | |
/*********************************** | |
freeing of arrays | |
************************************/ | |
free(Indicator); | |
for (ID=0; ID<numprocs; ID++){ | |
free(S_array[ID]); | |
} | |
free(S_array); | |
for (ID=0; ID<numprocs; ID++){ | |
free(R_array[ID]); | |
} | |
free(R_array); | |
free(Snd_DS_VNA_Size); | |
free(Rcv_DS_VNA_Size); | |
free(VNA_List); | |
free(VNA_List2); | |
} | |
void dHNL(int where_flag, | |
int Mc_AN, int h_AN, int q_AN, | |
double ******DS_NL1, | |
dcomplex ***Hx, dcomplex ***Hy, dcomplex ***Hz) | |
{ | |
int i,j,k,m,n,l,kg,kan,so,deri_kind; | |
int ig,ian,jg,jan,kl,kl1,kl2; | |
int wakg,l1,l2,l3,Gc_AN,Mi_AN,Mi_AN2,Mj_AN,Mj_AN2; | |
int Rni,Rnj,somax; | |
double PF[2],sumx,sumy,sumz,ene,dmp,deri_dmp; | |
double tmpx,tmpy,tmpz,tmp,r; | |
double x0,y0,z0,x1,y1,z1,dx,dy,dz; | |
double rcuti,rcutj,rcut; | |
double PFp,PFm,ene_p,ene_m; | |
dcomplex sumx0,sumy0,sumz0; | |
dcomplex sumx1,sumy1,sumz1; | |
dcomplex sumx2,sumy2,sumz2; | |
/**************************************************** | |
start calc. | |
****************************************************/ | |
Gc_AN = M2G[Mc_AN]; | |
ig = natn[Gc_AN][h_AN]; | |
Rni = ncn[Gc_AN][h_AN]; | |
Mi_AN = F_G2M[ig]; | |
ian = Spe_Total_CNO[WhatSpecies[ig]]; | |
rcuti = Spe_Atom_Cut1[WhatSpecies[ig]]; | |
jg = natn[Gc_AN][q_AN]; | |
Rnj = ncn[Gc_AN][q_AN]; | |
Mj_AN = F_G2M[jg]; | |
jan = Spe_Total_CNO[WhatSpecies[jg]]; | |
rcutj = Spe_Atom_Cut1[WhatSpecies[jg]]; | |
rcut = rcuti + rcutj; | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
dmp = dampingF(rcut,Dis[ig][kl]); | |
for (so=0; so<3; so++){ | |
for (i=0; i<List_YOUSO[7]; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx[so][i][j] = Complex(0.0,0.0); | |
Hy[so][i][j] = Complex(0.0,0.0); | |
Hz[so][i][j] = Complex(0.0,0.0); | |
} | |
} | |
} | |
if (h_AN==0){ | |
/**************************************************** | |
dH*ep*H | |
****************************************************/ | |
for (k=0; k<=FNAN[Gc_AN]; k++){ | |
kg = natn[Gc_AN][k]; | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_VPS_Pro[wakg]; | |
kl = RMI1[Mc_AN][q_AN][k]; | |
/**************************************************** | |
l-dependent non-local part | |
****************************************************/ | |
if (0<=kl && VPS_j_dependency[wakg]==0 && where_flag==0){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
l = 0; | |
for (l1=1; l1<=Spe_Num_RVPS[wakg]; l1++){ | |
ene = Spe_VNLE[0][wakg][l1-1]; | |
if (Spe_VPS_List[wakg][l1]==0) l2 = 0; | |
else if (Spe_VPS_List[wakg][l1]==1) l2 = 2; | |
else if (Spe_VPS_List[wakg][l1]==2) l2 = 4; | |
else if (Spe_VPS_List[wakg][l1]==3) l2 = 6; | |
if (Mj_AN<=Matomnum) Mj_AN2 = Mj_AN; | |
else Mj_AN2 = Matomnum + 1; | |
for (l3=0; l3<=l2; l3++){ | |
sumx += ene*DS_NL1[0][1][Mc_AN][k][m][l]*DS_NL1[0][0][Mj_AN2][kl][n][l]; | |
sumy += ene*DS_NL1[0][2][Mc_AN][k][m][l]*DS_NL1[0][0][Mj_AN2][kl][n][l]; | |
sumz += ene*DS_NL1[0][3][Mc_AN][k][m][l]*DS_NL1[0][0][Mj_AN2][kl][n][l]; | |
l++; | |
} | |
} | |
Hx[0][m][n].r += sumx; | |
Hy[0][m][n].r += sumy; | |
Hz[0][m][n].r += sumz; | |
Hx[1][m][n].r += sumx; | |
Hy[1][m][n].r += sumy; | |
Hz[1][m][n].r += sumz; | |
} /* n */ | |
} /* m */ | |
} /* if */ | |
/**************************************************** | |
j-dependent non-local part | |
****************************************************/ | |
else if ( 0<=kl && VPS_j_dependency[wakg]==1 && where_flag==0 ){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx0 = Complex(0.0,0.0); | |
sumy0 = Complex(0.0,0.0); | |
sumz0 = Complex(0.0,0.0); | |
sumx1 = Complex(0.0,0.0); | |
sumy1 = Complex(0.0,0.0); | |
sumz1 = Complex(0.0,0.0); | |
sumx2 = Complex(0.0,0.0); | |
sumy2 = Complex(0.0,0.0); | |
sumz2 = Complex(0.0,0.0); | |
if (Mj_AN<=Matomnum) Mj_AN2 = Mj_AN; | |
else Mj_AN2 = Matomnum + 1; | |
l = 0; | |
for (l1=1; l1<=Spe_Num_RVPS[wakg]; l1++){ | |
ene_p = Spe_VNLE[0][wakg][l1-1]; | |
ene_m = Spe_VNLE[1][wakg][l1-1]; | |
if (Spe_VPS_List[wakg][l1]==0) { l2=0; PFp=1.0; PFm=0.0; } | |
else if (Spe_VPS_List[wakg][l1]==1) { l2=2; PFp=2.0/3.0; PFm=1.0/3.0; } | |
else if (Spe_VPS_List[wakg][l1]==2) { l2=4; PFp=3.0/5.0; PFm=2.0/5.0; } | |
else if (Spe_VPS_List[wakg][l1]==3) { l2=6; PFp=4.0/7.0; PFm=3.0/7.0; } | |
dHNL_SO(&sumx0.r,&sumy0.r,&sumz0.r, | |
&sumx1.r,&sumy1.r,&sumz1.r, | |
&sumx2.r,&sumy2.r,&sumz2.r, | |
&sumx0.i,&sumy0.i,&sumz0.i, | |
&sumx1.i,&sumy1.i,&sumz1.i, | |
&sumx2.i,&sumy2.i,&sumz2.i, | |
1.0, | |
PFp, PFm, | |
ene_p,ene_m, | |
l2, &l, | |
Mc_AN ,k, m, | |
Mj_AN2,kl,n, | |
DS_NL1); | |
} | |
if (q_AN==0){ | |
l = 0; | |
for (l1=1; l1<=Spe_Num_RVPS[wakg]; l1++){ | |
ene_p = Spe_VNLE[0][wakg][l1-1]; | |
ene_m = Spe_VNLE[1][wakg][l1-1]; | |
if (Spe_VPS_List[wakg][l1]==0) { l2=0; PFp=1.0; PFm=0.0; } | |
else if (Spe_VPS_List[wakg][l1]==1) { l2=2; PFp=2.0/3.0; PFm=1.0/3.0; } | |
else if (Spe_VPS_List[wakg][l1]==2) { l2=4; PFp=3.0/5.0; PFm=2.0/5.0; } | |
else if (Spe_VPS_List[wakg][l1]==3) { l2=6; PFp=4.0/7.0; PFm=3.0/7.0; } | |
dHNL_SO(&sumx0.r,&sumy0.r,&sumz0.r, | |
&sumx1.r,&sumy1.r,&sumz1.r, | |
&sumx2.r,&sumy2.r,&sumz2.r, | |
&sumx0.i,&sumy0.i,&sumz0.i, | |
&sumx1.i,&sumy1.i,&sumz1.i, | |
&sumx2.i,&sumy2.i,&sumz2.i, | |
-1.0, | |
PFp, PFm, | |
ene_p,ene_m, | |
l2, &l, | |
Mj_AN2, kl, n, | |
Mc_AN, k, m, | |
DS_NL1); | |
} | |
} | |
Hx[0][m][n].r += sumx0.r; /* up-up */ | |
Hy[0][m][n].r += sumy0.r; /* up-up */ | |
Hz[0][m][n].r += sumz0.r; /* up-up */ | |
Hx[1][m][n].r += sumx1.r; /* dn-dn */ | |
Hy[1][m][n].r += sumy1.r; /* dn-dn */ | |
Hz[1][m][n].r += sumz1.r; /* dn-dn */ | |
Hx[2][m][n].r += sumx2.r; /* up-dn */ | |
Hy[2][m][n].r += sumy2.r; /* up-dn */ | |
Hz[2][m][n].r += sumz2.r; /* up-dn */ | |
Hx[0][m][n].i += sumx0.i; /* up-up */ | |
Hy[0][m][n].i += sumy0.i; /* up-up */ | |
Hz[0][m][n].i += sumz0.i; /* up-up */ | |
Hx[1][m][n].i += sumx1.i; /* dn-dn */ | |
Hy[1][m][n].i += sumy1.i; /* dn-dn */ | |
Hz[1][m][n].i += sumz1.i; /* dn-dn */ | |
Hx[2][m][n].i += sumx2.i; /* up-dn */ | |
Hy[2][m][n].i += sumy2.i; /* up-dn */ | |
Hz[2][m][n].i += sumz2.i; /* up-dn */ | |
} | |
} | |
} | |
} /* k */ | |
/**************************************************** | |
H*ep*dH | |
****************************************************/ | |
/* h_AN==0 && q_AN==0 */ | |
if (q_AN==0 && VPS_j_dependency[wakg]==0){ | |
for (m=0; m<ian; m++){ | |
for (n=m; n<jan; n++){ | |
tmpx = Hx[0][m][n].r + Hx[0][n][m].r; | |
Hx[0][m][n].r = tmpx; | |
Hx[0][n][m].r = tmpx; | |
Hx[1][m][n].r = tmpx; | |
Hx[1][n][m].r = tmpx; | |
tmpy = Hy[0][m][n].r + Hy[0][n][m].r; | |
Hy[0][m][n].r = tmpy; | |
Hy[0][n][m].r = tmpy; | |
Hy[1][m][n].r = tmpy; | |
Hy[1][n][m].r = tmpy; | |
tmpz = Hz[0][m][n].r + Hz[0][n][m].r; | |
Hz[0][m][n].r = tmpz; | |
Hz[0][n][m].r = tmpz; | |
Hz[1][m][n].r = tmpz; | |
Hz[1][n][m].r = tmpz; | |
} | |
} | |
} | |
else if (where_flag==1){ | |
kg = natn[Gc_AN][0]; | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_VPS_Pro[wakg]; | |
kl = RMI1[Mc_AN][q_AN][0]; | |
/**************************************************** | |
l-dependent non-local part | |
****************************************************/ | |
if (VPS_j_dependency[wakg]==0){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
if (Mj_AN<=Matomnum){ | |
Mj_AN2 = Mj_AN; | |
kl2 = RMI1[Mc_AN][q_AN][0]; | |
} | |
else{ | |
Mj_AN2 = Matomnum + 1; | |
kl2 = RMI1[Mc_AN][0][q_AN]; | |
} | |
l = 0; | |
for (l1=1; l1<=Spe_Num_RVPS[wakg]; l1++){ | |
ene = Spe_VNLE[0][wakg][l1-1]; | |
if (Spe_VPS_List[wakg][l1]==0) l2 = 0; | |
else if (Spe_VPS_List[wakg][l1]==1) l2 = 2; | |
else if (Spe_VPS_List[wakg][l1]==2) l2 = 4; | |
else if (Spe_VPS_List[wakg][l1]==3) l2 = 6; | |
for (l3=0; l3<=l2; l3++){ | |
sumx -= ene*DS_NL1[0][0][Mc_AN][0][m][l]*DS_NL1[0][1][Mj_AN2][kl2][n][l]; | |
sumy -= ene*DS_NL1[0][0][Mc_AN][0][m][l]*DS_NL1[0][2][Mj_AN2][kl2][n][l]; | |
sumz -= ene*DS_NL1[0][0][Mc_AN][0][m][l]*DS_NL1[0][3][Mj_AN2][kl2][n][l]; | |
l++; | |
} | |
} | |
Hx[0][m][n].r += sumx; | |
Hy[0][m][n].r += sumy; | |
Hz[0][m][n].r += sumz; | |
Hx[1][m][n].r += sumx; | |
Hy[1][m][n].r += sumy; | |
Hz[1][m][n].r += sumz; | |
} | |
} | |
} | |
/**************************************************** | |
j-dependent non-local part | |
****************************************************/ | |
else if ( VPS_j_dependency[wakg]==1 ){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx0 = Complex(0.0,0.0); | |
sumy0 = Complex(0.0,0.0); | |
sumz0 = Complex(0.0,0.0); | |
sumx1 = Complex(0.0,0.0); | |
sumy1 = Complex(0.0,0.0); | |
sumz1 = Complex(0.0,0.0); | |
sumx2 = Complex(0.0,0.0); | |
sumy2 = Complex(0.0,0.0); | |
sumz2 = Complex(0.0,0.0); | |
if (Mj_AN<=Matomnum){ | |
Mj_AN2 = Mj_AN; | |
kl2 = RMI1[Mc_AN][q_AN][0]; | |
} | |
else{ | |
Mj_AN2 = Matomnum + 1; | |
kl2 = RMI1[Mc_AN][0][q_AN]; | |
} | |
l = 0; | |
for (l1=1; l1<=Spe_Num_RVPS[wakg]; l1++){ | |
ene_p = Spe_VNLE[0][wakg][l1-1]; | |
ene_m = Spe_VNLE[1][wakg][l1-1]; | |
if (Spe_VPS_List[wakg][l1]==0) { l2=0; PFp=1.0; PFm=0.0; } | |
else if (Spe_VPS_List[wakg][l1]==1) { l2=2; PFp=2.0/3.0; PFm=1.0/3.0; } | |
else if (Spe_VPS_List[wakg][l1]==2) { l2=4; PFp=3.0/5.0; PFm=2.0/5.0; } | |
else if (Spe_VPS_List[wakg][l1]==3) { l2=6; PFp=4.0/7.0; PFm=3.0/7.0; } | |
/* 1 */ | |
dHNL_SO(&sumx0.r,&sumy0.r,&sumz0.r, | |
&sumx1.r,&sumy1.r,&sumz1.r, | |
&sumx2.r,&sumy2.r,&sumz2.r, | |
&sumx0.i,&sumy0.i,&sumz0.i, | |
&sumx1.i,&sumy1.i,&sumz1.i, | |
&sumx2.i,&sumy2.i,&sumz2.i, | |
-1.0, | |
PFp, PFm, | |
-ene_p,-ene_m, | |
l2, &l, | |
Mj_AN2,kl2,n, | |
Mc_AN, 0, m, | |
DS_NL1); | |
} | |
Hx[0][m][n].r += sumx0.r; /* up-up */ | |
Hy[0][m][n].r += sumy0.r; /* up-up */ | |
Hz[0][m][n].r += sumz0.r; /* up-up */ | |
Hx[1][m][n].r += sumx1.r; /* dn-dn */ | |
Hy[1][m][n].r += sumy1.r; /* dn-dn */ | |
Hz[1][m][n].r += sumz1.r; /* dn-dn */ | |
Hx[2][m][n].r += sumx2.r; /* up-dn */ | |
Hy[2][m][n].r += sumy2.r; /* up-dn */ | |
Hz[2][m][n].r += sumz2.r; /* up-dn */ | |
Hx[0][m][n].i += sumx0.i; /* up-up */ | |
Hy[0][m][n].i += sumy0.i; /* up-up */ | |
Hz[0][m][n].i += sumz0.i; /* up-up */ | |
Hx[1][m][n].i += sumx1.i; /* dn-dn */ | |
Hy[1][m][n].i += sumy1.i; /* dn-dn */ | |
Hz[1][m][n].i += sumz1.i; /* dn-dn */ | |
Hx[2][m][n].i += sumx2.i; /* up-dn */ | |
Hy[2][m][n].i += sumy2.i; /* up-dn */ | |
Hz[2][m][n].i += sumz2.i; /* up-dn */ | |
} | |
} | |
} | |
} | |
} /* if (h_AN==0) */ | |
else if (where_flag==0){ | |
/**************************************************** | |
H*ep*dH | |
if (h_AN!=0 && where_flag==0) | |
This happens | |
only if | |
( SpinP_switch==3 | |
&& | |
(SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1) | |
|| 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 | |
|| Zeeman_NCO_switch==1) | |
&& | |
q_AN==0 | |
) | |
****************************************************/ | |
for (k=0; k<=FNAN[Gc_AN]; k++){ | |
kg = natn[Gc_AN][k]; | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_VPS_Pro[wakg]; | |
kl = RMI1[Mc_AN][h_AN][k]; | |
if (Mi_AN<=Matomnum) Mi_AN2 = Mi_AN; | |
else Mi_AN2 = Matomnum + 1; | |
if (0<=kl && VPS_j_dependency[wakg]==1){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx0 = Complex(0.0,0.0); | |
sumy0 = Complex(0.0,0.0); | |
sumz0 = Complex(0.0,0.0); | |
sumx1 = Complex(0.0,0.0); | |
sumy1 = Complex(0.0,0.0); | |
sumz1 = Complex(0.0,0.0); | |
sumx2 = Complex(0.0,0.0); | |
sumy2 = Complex(0.0,0.0); | |
sumz2 = Complex(0.0,0.0); | |
l = 0; | |
for (l1=1; l1<=Spe_Num_RVPS[wakg]; l1++){ | |
ene_p = Spe_VNLE[0][wakg][l1-1]; | |
ene_m = Spe_VNLE[1][wakg][l1-1]; | |
if (Spe_VPS_List[wakg][l1]==0) { l2=0; PFp=1.0; PFm=0.0; } | |
else if (Spe_VPS_List[wakg][l1]==1) { l2=2; PFp=2.0/3.0; PFm=1.0/3.0; } | |
else if (Spe_VPS_List[wakg][l1]==2) { l2=4; PFp=3.0/5.0; PFm=2.0/5.0; } | |
else if (Spe_VPS_List[wakg][l1]==3) { l2=6; PFp=4.0/7.0; PFm=3.0/7.0; } | |
dHNL_SO(&sumx0.r,&sumy0.r,&sumz0.r, | |
&sumx1.r,&sumy1.r,&sumz1.r, | |
&sumx2.r,&sumy2.r,&sumz2.r, | |
&sumx0.i,&sumy0.i,&sumz0.i, | |
&sumx1.i,&sumy1.i,&sumz1.i, | |
&sumx2.i,&sumy2.i,&sumz2.i, | |
-1.0, | |
PFp, PFm, | |
ene_p, ene_m, | |
l2, &l, | |
Mj_AN, k, n, | |
Mi_AN2, kl, m, | |
DS_NL1); | |
} | |
Hx[0][m][n].r += sumx0.r; /* up-up */ | |
Hy[0][m][n].r += sumy0.r; /* up-up */ | |
Hz[0][m][n].r += sumz0.r; /* up-up */ | |
Hx[1][m][n].r += sumx1.r; /* dn-dn */ | |
Hy[1][m][n].r += sumy1.r; /* dn-dn */ | |
Hz[1][m][n].r += sumz1.r; /* dn-dn */ | |
Hx[2][m][n].r += sumx2.r; /* up-dn */ | |
Hy[2][m][n].r += sumy2.r; /* up-dn */ | |
Hz[2][m][n].r += sumz2.r; /* up-dn */ | |
Hx[0][m][n].i += sumx0.i; /* up-up */ | |
Hy[0][m][n].i += sumy0.i; /* up-up */ | |
Hz[0][m][n].i += sumz0.i; /* up-up */ | |
Hx[1][m][n].i += sumx1.i; /* dn-dn */ | |
Hy[1][m][n].i += sumy1.i; /* dn-dn */ | |
Hz[1][m][n].i += sumz1.i; /* dn-dn */ | |
Hx[2][m][n].i += sumx2.i; /* up-dn */ | |
Hy[2][m][n].i += sumy2.i; /* up-dn */ | |
Hz[2][m][n].i += sumz2.i; /* up-dn */ | |
} | |
} | |
} | |
} | |
} | |
/* if (h_AN!=0 && where_flag==1) */ | |
else { | |
/**************************************************** | |
dH*ep*H | |
****************************************************/ | |
kg = natn[Gc_AN][0]; | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_VPS_Pro[wakg]; | |
kl1 = RMI1[Mc_AN][0][h_AN]; | |
kl2 = RMI1[Mc_AN][0][q_AN]; | |
/**************************************************** | |
l-dependent non-local part | |
****************************************************/ | |
if (VPS_j_dependency[wakg]==0){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
l = 0; | |
for (l1=1; l1<=Spe_Num_RVPS[wakg]; l1++){ | |
ene = Spe_VNLE[0][wakg][l1-1]; | |
if (Spe_VPS_List[wakg][l1]==0) l2 = 0; | |
else if (Spe_VPS_List[wakg][l1]==1) l2 = 2; | |
else if (Spe_VPS_List[wakg][l1]==2) l2 = 4; | |
else if (Spe_VPS_List[wakg][l1]==3) l2 = 6; | |
for (l3=0; l3<=l2; l3++){ | |
sumx -= ene*DS_NL1[0][1][Matomnum+1][kl1][m][l]*DS_NL1[0][0][Matomnum+1][kl2][n][l]; | |
sumy -= ene*DS_NL1[0][2][Matomnum+1][kl1][m][l]*DS_NL1[0][0][Matomnum+1][kl2][n][l]; | |
sumz -= ene*DS_NL1[0][3][Matomnum+1][kl1][m][l]*DS_NL1[0][0][Matomnum+1][kl2][n][l]; | |
l++; | |
} | |
} | |
Hx[0][m][n].r = sumx; | |
Hy[0][m][n].r = sumy; | |
Hz[0][m][n].r = sumz; | |
Hx[1][m][n].r = sumx; | |
Hy[1][m][n].r = sumy; | |
Hz[1][m][n].r = sumz; | |
Hx[2][m][n].r = 0.0; | |
Hy[2][m][n].r = 0.0; | |
Hz[2][m][n].r = 0.0; | |
Hx[0][m][n].i = 0.0; | |
Hy[0][m][n].i = 0.0; | |
Hz[0][m][n].i = 0.0; | |
Hx[1][m][n].i = 0.0; | |
Hy[1][m][n].i = 0.0; | |
Hz[1][m][n].i = 0.0; | |
Hx[2][m][n].i = 0.0; | |
Hy[2][m][n].i = 0.0; | |
Hz[2][m][n].i = 0.0; | |
} | |
} | |
} | |
/**************************************************** | |
j-dependent non-local part | |
****************************************************/ | |
else if ( VPS_j_dependency[wakg]==1 ){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx0 = Complex(0.0,0.0); | |
sumy0 = Complex(0.0,0.0); | |
sumz0 = Complex(0.0,0.0); | |
sumx1 = Complex(0.0,0.0); | |
sumy1 = Complex(0.0,0.0); | |
sumz1 = Complex(0.0,0.0); | |
sumx2 = Complex(0.0,0.0); | |
sumy2 = Complex(0.0,0.0); | |
sumz2 = Complex(0.0,0.0); | |
l = 0; | |
for (l1=1; l1<=Spe_Num_RVPS[wakg]; l1++){ | |
ene_p = Spe_VNLE[0][wakg][l1-1]; | |
ene_m = Spe_VNLE[1][wakg][l1-1]; | |
if (Spe_VPS_List[wakg][l1]==0) { l2=0; PFp=1.0; PFm=0.0; } | |
else if (Spe_VPS_List[wakg][l1]==1) { l2=2; PFp=2.0/3.0; PFm=1.0/3.0; } | |
else if (Spe_VPS_List[wakg][l1]==2) { l2=4; PFp=3.0/5.0; PFm=2.0/5.0; } | |
else if (Spe_VPS_List[wakg][l1]==3) { l2=6; PFp=4.0/7.0; PFm=3.0/7.0; } | |
/* 2 */ | |
dHNL_SO(&sumx0.r,&sumy0.r,&sumz0.r, | |
&sumx1.r,&sumy1.r,&sumz1.r, | |
&sumx2.r,&sumy2.r,&sumz2.r, | |
&sumx0.i,&sumy0.i,&sumz0.i, | |
&sumx1.i,&sumy1.i,&sumz1.i, | |
&sumx2.i,&sumy2.i,&sumz2.i, | |
1.0, | |
PFp, PFm, | |
-ene_p,-ene_m, | |
l2, &l, | |
Matomnum+1, kl1,m, | |
Matomnum+1, kl2,n, | |
DS_NL1); | |
} | |
Hx[0][m][n].r = sumx0.r; /* up-up */ | |
Hy[0][m][n].r = sumy0.r; /* up-up */ | |
Hz[0][m][n].r = sumz0.r; /* up-up */ | |
Hx[1][m][n].r = sumx1.r; /* dn-dn */ | |
Hy[1][m][n].r = sumy1.r; /* dn-dn */ | |
Hz[1][m][n].r = sumz1.r; /* dn-dn */ | |
Hx[2][m][n].r = sumx2.r; /* up-dn */ | |
Hy[2][m][n].r = sumy2.r; /* up-dn */ | |
Hz[2][m][n].r = sumz2.r; /* up-dn */ | |
Hx[0][m][n].i = sumx0.i; /* up-up */ | |
Hy[0][m][n].i = sumy0.i; /* up-up */ | |
Hz[0][m][n].i = sumz0.i; /* up-up */ | |
Hx[1][m][n].i = sumx1.i; /* dn-dn */ | |
Hy[1][m][n].i = sumy1.i; /* dn-dn */ | |
Hz[1][m][n].i = sumz1.i; /* dn-dn */ | |
Hx[2][m][n].i = sumx2.i; /* up-dn */ | |
Hy[2][m][n].i = sumy2.i; /* up-dn */ | |
Hz[2][m][n].i = sumz2.i; /* up-dn */ | |
} | |
} | |
} | |
/**************************************************** | |
H*ep*dH | |
****************************************************/ | |
if (q_AN!=0) { | |
kg = natn[Gc_AN][0]; | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_VPS_Pro[wakg]; | |
kl1 = RMI1[Mc_AN][0][h_AN]; | |
kl2 = RMI1[Mc_AN][0][q_AN]; | |
/**************************************************** | |
l-dependent non-local part | |
****************************************************/ | |
if (VPS_j_dependency[wakg]==0){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
l = 0; | |
for (l1=1; l1<=Spe_Num_RVPS[wakg]; l1++){ | |
ene = Spe_VNLE[0][wakg][l1-1]; | |
if (Spe_VPS_List[wakg][l1]==0) l2 = 0; | |
else if (Spe_VPS_List[wakg][l1]==1) l2 = 2; | |
else if (Spe_VPS_List[wakg][l1]==2) l2 = 4; | |
else if (Spe_VPS_List[wakg][l1]==3) l2 = 6; | |
for (l3=0; l3<=l2; l3++){ | |
sumx -= ene*DS_NL1[0][0][Matomnum+1][kl1][m][l]*DS_NL1[0][1][Matomnum+1][kl2][n][l]; | |
sumy -= ene*DS_NL1[0][0][Matomnum+1][kl1][m][l]*DS_NL1[0][2][Matomnum+1][kl2][n][l]; | |
sumz -= ene*DS_NL1[0][0][Matomnum+1][kl1][m][l]*DS_NL1[0][3][Matomnum+1][kl2][n][l]; | |
l++; | |
} | |
} | |
Hx[0][m][n].r += sumx; | |
Hy[0][m][n].r += sumy; | |
Hz[0][m][n].r += sumz; | |
Hx[1][m][n].r += sumx; | |
Hy[1][m][n].r += sumy; | |
Hz[1][m][n].r += sumz; | |
} | |
} | |
} | |
/**************************************************** | |
j-dependent non-local part | |
****************************************************/ | |
else if ( VPS_j_dependency[wakg]==1 ){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx0 = Complex(0.0,0.0); | |
sumy0 = Complex(0.0,0.0); | |
sumz0 = Complex(0.0,0.0); | |
sumx1 = Complex(0.0,0.0); | |
sumy1 = Complex(0.0,0.0); | |
sumz1 = Complex(0.0,0.0); | |
sumx2 = Complex(0.0,0.0); | |
sumy2 = Complex(0.0,0.0); | |
sumz2 = Complex(0.0,0.0); | |
l = 0; | |
for (l1=1; l1<=Spe_Num_RVPS[wakg]; l1++){ | |
ene_p = Spe_VNLE[0][wakg][l1-1]; | |
ene_m = Spe_VNLE[1][wakg][l1-1]; | |
if (Spe_VPS_List[wakg][l1]==0) { l2=0; PFp=1.0; PFm=0.0; } | |
else if (Spe_VPS_List[wakg][l1]==1) { l2=2; PFp=2.0/3.0; PFm=1.0/3.0; } | |
else if (Spe_VPS_List[wakg][l1]==2) { l2=4; PFp=3.0/5.0; PFm=2.0/5.0; } | |
else if (Spe_VPS_List[wakg][l1]==3) { l2=6; PFp=4.0/7.0; PFm=3.0/7.0; } | |
/* 4 */ | |
dHNL_SO(&sumx0.r,&sumy0.r,&sumz0.r, | |
&sumx1.r,&sumy1.r,&sumz1.r, | |
&sumx2.r,&sumy2.r,&sumz2.r, | |
&sumx0.i,&sumy0.i,&sumz0.i, | |
&sumx1.i,&sumy1.i,&sumz1.i, | |
&sumx2.i,&sumy2.i,&sumz2.i, | |
-1.0, | |
PFp, PFm, | |
-ene_p,-ene_m, | |
l2, &l, | |
Matomnum+1, kl2,n, | |
Matomnum+1, kl1,m, | |
DS_NL1); | |
} | |
Hx[0][m][n].r += sumx0.r; /* up-up */ | |
Hy[0][m][n].r += sumy0.r; /* up-up */ | |
Hz[0][m][n].r += sumz0.r; /* up-up */ | |
Hx[1][m][n].r += sumx1.r; /* dn-dn */ | |
Hy[1][m][n].r += sumy1.r; /* dn-dn */ | |
Hz[1][m][n].r += sumz1.r; /* dn-dn */ | |
Hx[2][m][n].r += sumx2.r; /* up-dn */ | |
Hy[2][m][n].r += sumy2.r; /* up-dn */ | |
Hz[2][m][n].r += sumz2.r; /* up-dn */ | |
Hx[0][m][n].i += sumx0.i; /* up-up */ | |
Hy[0][m][n].i += sumy0.i; /* up-up */ | |
Hz[0][m][n].i += sumz0.i; /* up-up */ | |
Hx[1][m][n].i += sumx1.i; /* dn-dn */ | |
Hy[1][m][n].i += sumy1.i; /* dn-dn */ | |
Hz[1][m][n].i += sumz1.i; /* dn-dn */ | |
Hx[2][m][n].i += sumx2.i; /* up-dn */ | |
Hy[2][m][n].i += sumy2.i; /* up-dn */ | |
Hz[2][m][n].i += sumz2.i; /* up-dn */ | |
} | |
} | |
} | |
} | |
} /* else */ | |
/**************************************************** | |
contribution by dampingF | |
****************************************************/ | |
/* Qij * dH/dx */ | |
for (so=0; so<3; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].r = dmp*Hx[so][m][n].r; | |
Hy[so][m][n].r = dmp*Hy[so][m][n].r; | |
Hz[so][m][n].r = dmp*Hz[so][m][n].r; | |
Hx[so][m][n].i = dmp*Hx[so][m][n].i; | |
Hy[so][m][n].i = dmp*Hy[so][m][n].i; | |
Hz[so][m][n].i = dmp*Hz[so][m][n].i; | |
} | |
} | |
} | |
/* dQij/dx * H */ | |
if ( (h_AN==0 && q_AN!=0) || (h_AN!=0 && q_AN==0) ){ | |
if (h_AN==0) kl = q_AN; | |
else if (q_AN==0) kl = h_AN; | |
if (SpinP_switch==0) somax = 0; | |
else if (SpinP_switch==1) somax = 1; | |
else if (SpinP_switch==3) somax = 2; | |
r = Dis[Gc_AN][kl]; | |
if (rcut<=r) { | |
deri_dmp = 0.0; | |
tmp = 0.0; | |
} | |
else { | |
deri_dmp = deri_dampingF(rcut,r); | |
tmp = deri_dmp/dmp; | |
} | |
x0 = Gxyz[ig][1] + atv[Rni][1]; | |
y0 = Gxyz[ig][2] + atv[Rni][2]; | |
z0 = Gxyz[ig][3] + atv[Rni][3]; | |
x1 = Gxyz[jg][1] + atv[Rnj][1]; | |
y1 = Gxyz[jg][2] + atv[Rnj][2]; | |
z1 = Gxyz[jg][3] + atv[Rnj][3]; | |
/* for empty atoms or finite elemens basis */ | |
if (r<1.0e-10) r = 1.0e-10; | |
if (h_AN==0 && q_AN!=0){ | |
dx = tmp*(x0-x1)/r; | |
dy = tmp*(y0-y1)/r; | |
dz = tmp*(z0-z1)/r; | |
} | |
else if (h_AN!=0 && q_AN==0){ | |
dx = tmp*(x1-x0)/r; | |
dy = tmp*(y1-y0)/r; | |
dz = tmp*(z1-z0)/r; | |
} | |
if (SpinP_switch==0 || SpinP_switch==1){ | |
if (h_AN==0){ | |
for (so=0; so<=somax; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].r += HNL[so][Mc_AN][kl][m][n]*dx; | |
Hy[so][m][n].r += HNL[so][Mc_AN][kl][m][n]*dy; | |
Hz[so][m][n].r += HNL[so][Mc_AN][kl][m][n]*dz; | |
} | |
} | |
} | |
} | |
else if (q_AN==0){ | |
for (so=0; so<=somax; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].r += HNL[so][Mc_AN][kl][n][m]*dx; | |
Hy[so][m][n].r += HNL[so][Mc_AN][kl][n][m]*dy; | |
Hz[so][m][n].r += HNL[so][Mc_AN][kl][n][m]*dz; | |
} | |
} | |
} | |
} | |
} | |
else if (SpinP_switch==3){ | |
if (h_AN==0){ | |
for (so=0; so<=somax; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].r += HNL[so][Mc_AN][kl][m][n]*dx; | |
Hy[so][m][n].r += HNL[so][Mc_AN][kl][m][n]*dy; | |
Hz[so][m][n].r += HNL[so][Mc_AN][kl][m][n]*dz; | |
} | |
} | |
} | |
} | |
else if (q_AN==0){ | |
for (so=0; so<=somax; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].r += HNL[so][Mc_AN][kl][n][m]*dx; | |
Hy[so][m][n].r += HNL[so][Mc_AN][kl][n][m]*dy; | |
Hz[so][m][n].r += HNL[so][Mc_AN][kl][n][m]*dz; | |
} | |
} | |
} | |
} | |
if (SO_switch==1){ | |
if (h_AN==0){ | |
for (so=0; so<=somax; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].i += iHNL[so][Mc_AN][kl][m][n]*dx; | |
Hy[so][m][n].i += iHNL[so][Mc_AN][kl][m][n]*dy; | |
Hz[so][m][n].i += iHNL[so][Mc_AN][kl][m][n]*dz; | |
} | |
} | |
} | |
} | |
else if (q_AN==0){ | |
for (so=0; so<=somax; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].i += iHNL[so][Mc_AN][kl][n][m]*dx; | |
Hy[so][m][n].i += iHNL[so][Mc_AN][kl][n][m]*dy; | |
Hz[so][m][n].i += iHNL[so][Mc_AN][kl][n][m]*dz; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
void dHVNA(int where_flag, int Mc_AN, int h_AN, int q_AN, | |
Type_DS_VNA *****DS_VNA1, | |
double *****TmpHVNA2, double *****TmpHVNA3, | |
double **Hx, double **Hy, double **Hz) | |
{ | |
int i,j,k,m,n,l,kg,kan,so,deri_kind; | |
int ig,ian,jg,jan,kl,kl1,kl2,Rni,Rnj; | |
int wakg,l1,l2,l3,Gc_AN,Mi_AN,Mj_AN,Mj_AN2,num_projectors; | |
double sumx,sumy,sumz,ene,rcuti,rcutj,rcut; | |
double tmpx,tmpy,tmpz,dmp,deri_dmp,tmp; | |
double dx,dy,dz,x0,y0,z0,x1,y1,z1,r; | |
double PFp,PFm,ene_p,ene_m; | |
double sumx0,sumy0,sumz0; | |
double sumx1,sumy1,sumz1; | |
double sumx2,sumy2,sumz2; | |
int L,LL,Mul1,Num_RVNA; | |
Num_RVNA = List_YOUSO[34]*(List_YOUSO[35] + 1); | |
num_projectors = (List_YOUSO[35]+1)*(List_YOUSO[35]+1)*List_YOUSO[34]; | |
/**************************************************** | |
start calc. | |
****************************************************/ | |
Gc_AN = M2G[Mc_AN]; | |
ig = natn[Gc_AN][h_AN]; | |
Rni = ncn[Gc_AN][h_AN]; | |
Mi_AN = F_G2M[ig]; | |
ian = Spe_Total_CNO[WhatSpecies[ig]]; | |
rcuti = Spe_Atom_Cut1[WhatSpecies[ig]]; | |
jg = natn[Gc_AN][q_AN]; | |
Rnj = ncn[Gc_AN][q_AN]; | |
Mj_AN = F_G2M[jg]; | |
jan = Spe_Total_CNO[WhatSpecies[jg]]; | |
rcutj = Spe_Atom_Cut1[WhatSpecies[jg]]; | |
rcut = rcuti + rcutj; | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
dmp = dampingF(rcut,Dis[ig][kl]); | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[m][n] = 0.0; | |
Hy[m][n] = 0.0; | |
Hz[m][n] = 0.0; | |
} | |
} | |
/**************************************************** | |
two-center integral with orbitals on one-center | |
in case of h_AN==0 && q_AN==0 | |
****************************************************/ | |
if (h_AN==0 && q_AN==0 && where_flag==0){ | |
for (k=1; k<=FNAN[Gc_AN]; k++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[m][n] += TmpHVNA2[1][Mc_AN][k][m][n]; | |
Hy[m][n] += TmpHVNA2[2][Mc_AN][k][m][n]; | |
Hz[m][n] += TmpHVNA2[3][Mc_AN][k][m][n]; | |
} | |
} | |
} | |
} | |
/**************************************************** | |
two-center integral with orbitals on one-center | |
in case of h_AN==q_AN && h_AN!=0 | |
****************************************************/ | |
else if (h_AN==q_AN && h_AN!=0){ | |
kl = RMI1[Mc_AN][h_AN][0]; | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[m][n] = -TmpHVNA3[1][Mc_AN][h_AN][m][n]; | |
Hy[m][n] = -TmpHVNA3[2][Mc_AN][h_AN][m][n]; | |
Hz[m][n] = -TmpHVNA3[3][Mc_AN][h_AN][m][n]; | |
} | |
} | |
} | |
/**************************************************** | |
two and three center integrals | |
with orbitals on two-center | |
****************************************************/ | |
else{ | |
if (h_AN==0){ | |
/**************************************************** | |
dH*ep*H | |
****************************************************/ | |
for (k=0; k<=FNAN[Gc_AN]; k++){ | |
kg = natn[Gc_AN][k]; | |
wakg = WhatSpecies[kg]; | |
kl = RMI1[Mc_AN][q_AN][k]; | |
/**************************************************** | |
non-local part | |
****************************************************/ | |
if (0<=kl && where_flag==0){ | |
if (Mj_AN<=Matomnum) Mj_AN2 = Mj_AN; | |
else Mj_AN2 = Matomnum+1; | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
for (l=0; l<num_projectors; l++){ | |
sumx += DS_VNA1[1][Mc_AN][k][m][l]*DS_VNA1[0][Mj_AN2][kl][n][l]; | |
sumy += DS_VNA1[2][Mc_AN][k][m][l]*DS_VNA1[0][Mj_AN2][kl][n][l]; | |
sumz += DS_VNA1[3][Mc_AN][k][m][l]*DS_VNA1[0][Mj_AN2][kl][n][l]; | |
} | |
Hx[m][n] += sumx; | |
Hy[m][n] += sumy; | |
Hz[m][n] += sumz; | |
} /* n */ | |
} /* m */ | |
} /* if */ | |
} /* k */ | |
/**************************************************** | |
H*ep*dH | |
****************************************************/ | |
/* non-local part */ | |
if (q_AN==0){ | |
for (m=0; m<ian; m++){ | |
for (n=m; n<jan; n++){ | |
tmpx = Hx[m][n] + Hx[n][m]; | |
Hx[m][n] = tmpx; | |
Hx[n][m] = tmpx; | |
tmpy = Hy[m][n] + Hy[n][m]; | |
Hy[m][n] = tmpy; | |
Hy[n][m] = tmpy; | |
tmpz = Hz[m][n] + Hz[n][m]; | |
Hz[m][n] = tmpz; | |
Hz[n][m] = tmpz; | |
} | |
} | |
} | |
else if (where_flag==1) { | |
kg = natn[Gc_AN][0]; | |
wakg = WhatSpecies[kg]; | |
/**************************************************** | |
non-local part | |
****************************************************/ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
if (Mj_AN<=Matomnum){ | |
Mj_AN2 = Mj_AN; | |
kl = RMI1[Mc_AN][q_AN][0]; | |
} | |
else{ | |
Mj_AN2 = Matomnum+1; | |
kl = RMI1[Mc_AN][0][q_AN]; | |
} | |
for (l=0; l<num_projectors; l++){ | |
sumx -= DS_VNA1[0][Mc_AN][0][m][l]*DS_VNA1[1][Mj_AN2][kl][n][l]; | |
sumy -= DS_VNA1[0][Mc_AN][0][m][l]*DS_VNA1[2][Mj_AN2][kl][n][l]; | |
sumz -= DS_VNA1[0][Mc_AN][0][m][l]*DS_VNA1[3][Mj_AN2][kl][n][l]; | |
} | |
Hx[m][n] += sumx; | |
Hy[m][n] += sumy; | |
Hz[m][n] += sumz; | |
} | |
} | |
} | |
} /* if (h_AN==0) */ | |
else { | |
/**************************************************** | |
dH*ep*H | |
****************************************************/ | |
kg = natn[Gc_AN][0]; | |
wakg = WhatSpecies[kg]; | |
kl1 = RMI1[Mc_AN][0][h_AN]; | |
kl2 = RMI1[Mc_AN][0][q_AN]; | |
/**************************************************** | |
non-local part | |
****************************************************/ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
for (l=0; l<num_projectors; l++){ | |
sumx -= DS_VNA1[1][Matomnum+1][kl1][m][l]*DS_VNA1[0][Matomnum+1][kl2][n][l]; | |
sumy -= DS_VNA1[2][Matomnum+1][kl1][m][l]*DS_VNA1[0][Matomnum+1][kl2][n][l]; | |
sumz -= DS_VNA1[3][Matomnum+1][kl1][m][l]*DS_VNA1[0][Matomnum+1][kl2][n][l]; | |
} | |
Hx[m][n] = sumx; | |
Hy[m][n] = sumy; | |
Hz[m][n] = sumz; | |
} | |
} | |
/**************************************************** | |
H*ep*dH | |
****************************************************/ | |
if (q_AN!=0){ | |
kg = natn[Gc_AN][0]; | |
wakg = WhatSpecies[kg]; | |
kl1 = RMI1[Mc_AN][0][h_AN]; | |
kl2 = RMI1[Mc_AN][0][q_AN]; | |
/**************************************************** | |
non-local part | |
****************************************************/ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
for (l=0; l<num_projectors; l++){ | |
sumx -= DS_VNA1[0][Matomnum+1][kl1][m][l]*DS_VNA1[1][Matomnum+1][kl2][n][l]; | |
sumy -= DS_VNA1[0][Matomnum+1][kl1][m][l]*DS_VNA1[2][Matomnum+1][kl2][n][l]; | |
sumz -= DS_VNA1[0][Matomnum+1][kl1][m][l]*DS_VNA1[3][Matomnum+1][kl2][n][l]; | |
} | |
Hx[m][n] += sumx; | |
Hy[m][n] += sumy; | |
Hz[m][n] += sumz; | |
} | |
} | |
} | |
} | |
} | |
/**************************************************** | |
contribution by dampingF | |
****************************************************/ | |
/* Qij * dH/dx */ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[m][n] = dmp*Hx[m][n]; | |
Hy[m][n] = dmp*Hy[m][n]; | |
Hz[m][n] = dmp*Hz[m][n]; | |
} | |
} | |
/* dQij/dx * H */ | |
if ( (h_AN==0 && q_AN!=0) || (h_AN!=0 && q_AN==0) ){ | |
if (h_AN==0) kl = q_AN; | |
else if (q_AN==0) kl = h_AN; | |
r = Dis[Gc_AN][kl]; | |
if (rcut<=r) { | |
deri_dmp = 0.0; | |
tmp = 0.0; | |
} | |
else { | |
deri_dmp = deri_dampingF(rcut,r); | |
tmp = deri_dmp/dmp; | |
} | |
x0 = Gxyz[ig][1] + atv[Rni][1]; | |
x1 = Gxyz[jg][1] + atv[Rnj][1]; | |
y0 = Gxyz[ig][2] + atv[Rni][2]; | |
y1 = Gxyz[jg][2] + atv[Rnj][2]; | |
z0 = Gxyz[ig][3] + atv[Rni][3]; | |
z1 = Gxyz[jg][3] + atv[Rnj][3]; | |
/* for empty atoms or finite elemens basis */ | |
if (r<1.0e-10) r = 1.0e-10; | |
if ( h_AN==0 ){ | |
dx = tmp*(x0-x1)/r; | |
dy = tmp*(y0-y1)/r; | |
dz = tmp*(z0-z1)/r; | |
} | |
else if ( q_AN==0 ){ | |
dx = tmp*(x1-x0)/r; | |
dy = tmp*(y1-y0)/r; | |
dz = tmp*(z1-z0)/r; | |
} | |
if (h_AN==0){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[m][n] += HVNA[Mc_AN][kl][m][n]*dx; | |
Hy[m][n] += HVNA[Mc_AN][kl][m][n]*dy; | |
Hz[m][n] += HVNA[Mc_AN][kl][m][n]*dz; | |
} | |
} | |
} | |
else if (q_AN==0){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[m][n] += HVNA[Mc_AN][kl][n][m]*dx; | |
Hy[m][n] += HVNA[Mc_AN][kl][n][m]*dy; | |
Hz[m][n] += HVNA[Mc_AN][kl][n][m]*dz; | |
} | |
} | |
} | |
} | |
} | |
void dHNL_SO( | |
double *sumx0r, | |
double *sumy0r, | |
double *sumz0r, | |
double *sumx1r, | |
double *sumy1r, | |
double *sumz1r, | |
double *sumx2r, | |
double *sumy2r, | |
double *sumz2r, | |
double *sumx0i, | |
double *sumy0i, | |
double *sumz0i, | |
double *sumx1i, | |
double *sumy1i, | |
double *sumz1i, | |
double *sumx2i, | |
double *sumy2i, | |
double *sumz2i, | |
double fugou, | |
double PFp, | |
double PFm, | |
double ene_p, | |
double ene_m, | |
int l2, int *l, | |
int Mc_AN, int k, int m, | |
int Mj_AN, int kl, int n, | |
double ******DS_NL1) | |
{ | |
int l3,i; | |
double tmpx,tmpy,tmpz; | |
double tmp0,tmp1,tmp2; | |
double tmp3,tmp4,tmp5,tmp6; | |
double deri[4]; | |
/**************************************************** | |
off-diagonal contribution to up-dn matrix | |
for spin non-collinear | |
****************************************************/ | |
if (SpinP_switch==3){ | |
/* p */ | |
if (l2==2){ | |
/* real contribution of l+1/2 to off diagonal up-down matrix */ | |
tmpx = | |
fugou* | |
( ene_p/3.0*DS_NL1[0][1][Mc_AN][k][m][*l ]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
-ene_p/3.0*DS_NL1[0][1][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l ] ); | |
tmpy = | |
fugou* | |
( ene_p/3.0*DS_NL1[0][2][Mc_AN][k][m][*l ]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
-ene_p/3.0*DS_NL1[0][2][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l ] ); | |
tmpz = | |
fugou* | |
( ene_p/3.0*DS_NL1[0][3][Mc_AN][k][m][*l ]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
-ene_p/3.0*DS_NL1[0][3][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l ] ); | |
*sumx2r += tmpx; | |
*sumy2r += tmpy; | |
*sumz2r += tmpz; | |
/* imaginary contribution of l+1/2 to off diagonal up-down matrix */ | |
tmpx = | |
fugou* | |
( -ene_p/3.0*DS_NL1[0][1][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
+ene_p/3.0*DS_NL1[0][1][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] ); | |
tmpy = | |
fugou* | |
( -ene_p/3.0*DS_NL1[0][2][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
+ene_p/3.0*DS_NL1[0][2][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] ); | |
tmpz = | |
fugou* | |
( -ene_p/3.0*DS_NL1[0][3][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
+ene_p/3.0*DS_NL1[0][3][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] ); | |
*sumx2i += tmpx; | |
*sumy2i += tmpy; | |
*sumz2i += tmpz; | |
/* real contribution of l-1/2 for to diagonal up-down matrix */ | |
tmpx = | |
fugou* | |
( ene_m/3.0*DS_NL1[1][1][Mc_AN][k][m][*l ]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
-ene_m/3.0*DS_NL1[1][1][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l ] ); | |
tmpy = | |
fugou* | |
( ene_m/3.0*DS_NL1[1][2][Mc_AN][k][m][*l ]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
-ene_m/3.0*DS_NL1[1][2][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l ] ); | |
tmpz = | |
fugou* | |
( ene_m/3.0*DS_NL1[1][3][Mc_AN][k][m][*l ]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
-ene_m/3.0*DS_NL1[1][3][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l ] ); | |
*sumx2r -= tmpx; | |
*sumy2r -= tmpy; | |
*sumz2r -= tmpz; | |
/* imaginary contribution of l-1/2 to off diagonal up-down matrix */ | |
tmpx = | |
fugou* | |
( -ene_m/3.0*DS_NL1[1][1][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
+ene_m/3.0*DS_NL1[1][1][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] ); | |
tmpy = | |
fugou* | |
( -ene_m/3.0*DS_NL1[1][2][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
+ene_m/3.0*DS_NL1[1][2][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] ); | |
tmpz = | |
fugou* | |
( -ene_m/3.0*DS_NL1[1][3][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
+ene_m/3.0*DS_NL1[1][3][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] ); | |
*sumx2i -= tmpx; | |
*sumy2i -= tmpy; | |
*sumz2i -= tmpz; | |
} | |
/* d */ | |
if (l2==4){ | |
tmp0 = sqrt(3.0); | |
tmp1 = ene_p/5.0; | |
tmp2 = tmp0*tmp1; | |
/* real contribution of l+1/2 to off diagonal up-down matrix */ | |
for (i=1; i<=3; i++){ | |
deri[i] = | |
fugou* | |
( -tmp2*DS_NL1[0][i][Mc_AN][k][m][*l ]*DS_NL1[0][0][Mj_AN][kl][n][*l+3] | |
+tmp2*DS_NL1[0][i][Mc_AN][k][m][*l+3]*DS_NL1[0][0][Mj_AN][kl][n][*l ] | |
+tmp1*DS_NL1[0][i][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l+3] | |
-tmp1*DS_NL1[0][i][Mc_AN][k][m][*l+3]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
+tmp1*DS_NL1[0][i][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l+4] | |
-tmp1*DS_NL1[0][i][Mc_AN][k][m][*l+4]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] ); | |
} | |
*sumx2r += deri[1]; | |
*sumy2r += deri[2]; | |
*sumz2r += deri[3]; | |
/* imaginary contribution of l+1/2 to off diagonal up-down matrix */ | |
for (i=1; i<=3; i++){ | |
deri[i] = | |
fugou* | |
( +tmp2*DS_NL1[0][i][Mc_AN][k][m][*l ]*DS_NL1[0][0][Mj_AN][kl][n][*l+4] | |
-tmp2*DS_NL1[0][i][Mc_AN][k][m][*l+4]*DS_NL1[0][0][Mj_AN][kl][n][*l ] | |
+tmp1*DS_NL1[0][i][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l+4] | |
-tmp1*DS_NL1[0][i][Mc_AN][k][m][*l+4]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
-tmp1*DS_NL1[0][i][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l+3] | |
+tmp1*DS_NL1[0][i][Mc_AN][k][m][*l+3]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] ); | |
} | |
*sumx2i += deri[1]; | |
*sumy2i += deri[2]; | |
*sumz2i += deri[3]; | |
/* real contribution of l-1/2 for to diagonal up-down matrix */ | |
tmp1 = ene_m/5.0; | |
tmp2 = tmp0*tmp1; | |
for (i=1; i<=3; i++){ | |
deri[i] = | |
fugou* | |
( -tmp2*DS_NL1[1][i][Mc_AN][k][m][*l ]*DS_NL1[1][0][Mj_AN][kl][n][*l+3] | |
+tmp2*DS_NL1[1][i][Mc_AN][k][m][*l+3]*DS_NL1[1][0][Mj_AN][kl][n][*l ] | |
+tmp1*DS_NL1[1][i][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l+3] | |
-tmp1*DS_NL1[1][i][Mc_AN][k][m][*l+3]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
+tmp1*DS_NL1[1][i][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l+4] | |
-tmp1*DS_NL1[1][i][Mc_AN][k][m][*l+4]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] ); | |
} | |
*sumx2r -= deri[1]; | |
*sumy2r -= deri[2]; | |
*sumz2r -= deri[3]; | |
/* imaginary contribution of l-1/2 to off diagonal up-down matrix */ | |
for (i=1; i<=3; i++){ | |
deri[i] = | |
fugou* | |
( +tmp2*DS_NL1[1][i][Mc_AN][k][m][*l ]*DS_NL1[1][0][Mj_AN][kl][n][*l+4] | |
-tmp2*DS_NL1[1][i][Mc_AN][k][m][*l+4]*DS_NL1[1][0][Mj_AN][kl][n][*l ] | |
+tmp1*DS_NL1[1][i][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l+4] | |
-tmp1*DS_NL1[1][i][Mc_AN][k][m][*l+4]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
-tmp1*DS_NL1[1][i][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l+3] | |
+tmp1*DS_NL1[1][i][Mc_AN][k][m][*l+3]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] ); | |
} | |
*sumx2i -= deri[1]; | |
*sumy2i -= deri[2]; | |
*sumz2i -= deri[3]; | |
} | |
/* f */ | |
if (l2==6){ | |
/* real contribution of l+1/2 to off diagonal up-down matrix */ | |
tmp0 = sqrt(6.0); | |
tmp1 = sqrt(3.0/2.0); | |
tmp2 = sqrt(5.0/2.0); | |
tmp3 = ene_p/7.0; | |
tmp4 = tmp1*tmp3; /* sqrt(3.0/2.0) */ | |
tmp5 = tmp2*tmp3; /* sqrt(5.0/2.0) */ | |
tmp6 = tmp0*tmp3; /* sqrt(6.0) */ | |
for (i=1; i<=3; i++){ | |
deri[i] = | |
fugou* | |
( -tmp6*DS_NL1[0][i][Mc_AN][k][m][*l ]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
+tmp6*DS_NL1[0][i][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l ] | |
-tmp5*DS_NL1[0][i][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l+3] | |
+tmp5*DS_NL1[0][i][Mc_AN][k][m][*l+3]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
-tmp5*DS_NL1[0][i][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l+4] | |
+tmp5*DS_NL1[0][i][Mc_AN][k][m][*l+4]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
-tmp4*DS_NL1[0][i][Mc_AN][k][m][*l+3]*DS_NL1[0][0][Mj_AN][kl][n][*l+5] | |
+tmp4*DS_NL1[0][i][Mc_AN][k][m][*l+5]*DS_NL1[0][0][Mj_AN][kl][n][*l+3] | |
-tmp4*DS_NL1[0][i][Mc_AN][k][m][*l+4]*DS_NL1[0][0][Mj_AN][kl][n][*l+6] | |
+tmp4*DS_NL1[0][i][Mc_AN][k][m][*l+6]*DS_NL1[0][0][Mj_AN][kl][n][*l+4] ); | |
} | |
*sumx2r += deri[1]; | |
*sumy2r += deri[2]; | |
*sumz2r += deri[3]; | |
/* imaginary contribution of l+1/2 to off diagonal up-down matrix */ | |
for (i=1; i<=3; i++){ | |
deri[i] = | |
fugou* | |
( +tmp6*DS_NL1[0][i][Mc_AN][k][m][*l ]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
-tmp6*DS_NL1[0][i][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l ] | |
+tmp5*DS_NL1[0][i][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l+4] | |
-tmp5*DS_NL1[0][i][Mc_AN][k][m][*l+4]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
-tmp5*DS_NL1[0][i][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l+3] | |
+tmp5*DS_NL1[0][i][Mc_AN][k][m][*l+3]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
+tmp4*DS_NL1[0][i][Mc_AN][k][m][*l+3]*DS_NL1[0][0][Mj_AN][kl][n][*l+6] | |
-tmp4*DS_NL1[0][i][Mc_AN][k][m][*l+6]*DS_NL1[0][0][Mj_AN][kl][n][*l+3] | |
-tmp4*DS_NL1[0][i][Mc_AN][k][m][*l+4]*DS_NL1[0][0][Mj_AN][kl][n][*l+5] | |
+tmp4*DS_NL1[0][i][Mc_AN][k][m][*l+5]*DS_NL1[0][0][Mj_AN][kl][n][*l+4] ); | |
} | |
*sumx2i += deri[1]; | |
*sumy2i += deri[2]; | |
*sumz2i += deri[3]; | |
/* real contribution of l-1/2 for to diagonal up-down matrix */ | |
tmp3 = ene_m/7.0; | |
tmp4 = tmp1*tmp3; /* sqrt(3.0/2.0) */ | |
tmp5 = tmp2*tmp3; /* sqrt(5.0/2.0) */ | |
tmp6 = tmp0*tmp3; /* sqrt(6.0) */ | |
for (i=1; i<=3; i++){ | |
deri[i] = | |
fugou* | |
( -tmp6*DS_NL1[1][i][Mc_AN][k][m][*l ]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
+tmp6*DS_NL1[1][i][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l ] | |
-tmp5*DS_NL1[1][i][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l+3] | |
+tmp5*DS_NL1[1][i][Mc_AN][k][m][*l+3]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
-tmp5*DS_NL1[1][i][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l+4] | |
+tmp5*DS_NL1[1][i][Mc_AN][k][m][*l+4]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
-tmp4*DS_NL1[1][i][Mc_AN][k][m][*l+3]*DS_NL1[1][0][Mj_AN][kl][n][*l+5] | |
+tmp4*DS_NL1[1][i][Mc_AN][k][m][*l+5]*DS_NL1[1][0][Mj_AN][kl][n][*l+3] | |
-tmp4*DS_NL1[1][i][Mc_AN][k][m][*l+4]*DS_NL1[1][0][Mj_AN][kl][n][*l+6] | |
+tmp4*DS_NL1[1][i][Mc_AN][k][m][*l+6]*DS_NL1[1][0][Mj_AN][kl][n][*l+4] ); | |
} | |
*sumx2r -= deri[1]; | |
*sumy2r -= deri[2]; | |
*sumz2r -= deri[3]; | |
/* imaginary contribution of l-1/2 to off diagonal up-down matrix */ | |
for (i=1; i<=3; i++){ | |
deri[i] = | |
fugou* | |
( +tmp6*DS_NL1[1][i][Mc_AN][k][m][*l ]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
-tmp6*DS_NL1[1][i][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l ] | |
+tmp5*DS_NL1[1][i][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l+4] | |
-tmp5*DS_NL1[1][i][Mc_AN][k][m][*l+4]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
-tmp5*DS_NL1[1][i][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l+3] | |
+tmp5*DS_NL1[1][i][Mc_AN][k][m][*l+3]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
+tmp4*DS_NL1[1][i][Mc_AN][k][m][*l+3]*DS_NL1[1][0][Mj_AN][kl][n][*l+6] | |
-tmp4*DS_NL1[1][i][Mc_AN][k][m][*l+6]*DS_NL1[1][0][Mj_AN][kl][n][*l+3] | |
-tmp4*DS_NL1[1][i][Mc_AN][k][m][*l+4]*DS_NL1[1][0][Mj_AN][kl][n][*l+5] | |
+tmp4*DS_NL1[1][i][Mc_AN][k][m][*l+5]*DS_NL1[1][0][Mj_AN][kl][n][*l+4] ); | |
} | |
*sumx2i -= deri[1]; | |
*sumy2i -= deri[2]; | |
*sumz2i -= deri[3]; | |
} | |
} | |
/**************************************************** | |
off-diagonal contribution on up-up and dn-dn | |
****************************************************/ | |
/* p */ | |
if (l2==2){ | |
tmpx = | |
fugou* | |
( ene_p/3.0*DS_NL1[0][1][Mc_AN][k][m][*l ]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
-ene_p/3.0*DS_NL1[0][1][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l ] ); | |
tmpy = | |
fugou* | |
( ene_p/3.0*DS_NL1[0][2][Mc_AN][k][m][*l ]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
-ene_p/3.0*DS_NL1[0][2][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l ] ); | |
tmpz = | |
fugou* | |
( ene_p/3.0*DS_NL1[0][3][Mc_AN][k][m][*l ]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
-ene_p/3.0*DS_NL1[0][3][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l ] ); | |
/* contribution of l+1/2 for up spin */ | |
*sumx0i += -tmpx; | |
*sumy0i += -tmpy; | |
*sumz0i += -tmpz; | |
/* contribution of l+1/2 for down spin */ | |
*sumx1i += tmpx; | |
*sumy1i += tmpy; | |
*sumz1i += tmpz; | |
tmpx = | |
fugou* | |
( ene_m/3.0*DS_NL1[1][1][Mc_AN][k][m][*l ]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
-ene_m/3.0*DS_NL1[1][1][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l ] ); | |
tmpy = | |
fugou* | |
( ene_m/3.0*DS_NL1[1][2][Mc_AN][k][m][*l ]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
-ene_m/3.0*DS_NL1[1][2][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l ] ); | |
tmpz = | |
fugou* | |
( ene_m/3.0*DS_NL1[1][3][Mc_AN][k][m][*l ]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
-ene_m/3.0*DS_NL1[1][3][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l ] ); | |
/* contribution of l-1/2 for up spin */ | |
*sumx0i += tmpx; | |
*sumy0i += tmpy; | |
*sumz0i += tmpz; | |
/* contribution of l+1/2 for down spin */ | |
*sumx1i += -tmpx; | |
*sumy1i += -tmpy; | |
*sumz1i += -tmpz; | |
} | |
/* d */ | |
else if (l2==4){ | |
tmpx = | |
fugou* | |
( | |
ene_p*2.0/5.0*DS_NL1[0][1][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
-ene_p*2.0/5.0*DS_NL1[0][1][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
+ene_p*1.0/5.0*DS_NL1[0][1][Mc_AN][k][m][*l+3]*DS_NL1[0][0][Mj_AN][kl][n][*l+4] | |
-ene_p*1.0/5.0*DS_NL1[0][1][Mc_AN][k][m][*l+4]*DS_NL1[0][0][Mj_AN][kl][n][*l+3] ); | |
tmpy = | |
fugou* | |
( | |
ene_p*2.0/5.0*DS_NL1[0][2][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
-ene_p*2.0/5.0*DS_NL1[0][2][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
+ene_p*1.0/5.0*DS_NL1[0][2][Mc_AN][k][m][*l+3]*DS_NL1[0][0][Mj_AN][kl][n][*l+4] | |
-ene_p*1.0/5.0*DS_NL1[0][2][Mc_AN][k][m][*l+4]*DS_NL1[0][0][Mj_AN][kl][n][*l+3] ); | |
tmpz = | |
fugou* | |
( | |
ene_p*2.0/5.0*DS_NL1[0][3][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
-ene_p*2.0/5.0*DS_NL1[0][3][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
+ene_p*1.0/5.0*DS_NL1[0][3][Mc_AN][k][m][*l+3]*DS_NL1[0][0][Mj_AN][kl][n][*l+4] | |
-ene_p*1.0/5.0*DS_NL1[0][3][Mc_AN][k][m][*l+4]*DS_NL1[0][0][Mj_AN][kl][n][*l+3] ); | |
/* contribution of l+1/2 for up spin */ | |
*sumx0i += -tmpx; | |
*sumy0i += -tmpy; | |
*sumz0i += -tmpz; | |
/* contribution of l+1/2 for down spin */ | |
*sumx1i += tmpx; | |
*sumy1i += tmpy; | |
*sumz1i += tmpz; | |
tmpx = | |
fugou* | |
( | |
ene_m*2.0/5.0*DS_NL1[1][1][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
-ene_m*2.0/5.0*DS_NL1[1][1][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
+ene_m*1.0/5.0*DS_NL1[1][1][Mc_AN][k][m][*l+3]*DS_NL1[1][0][Mj_AN][kl][n][*l+4] | |
-ene_m*1.0/5.0*DS_NL1[1][1][Mc_AN][k][m][*l+4]*DS_NL1[1][0][Mj_AN][kl][n][*l+3] ); | |
tmpy = | |
fugou* | |
( | |
ene_m*2.0/5.0*DS_NL1[1][2][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
-ene_m*2.0/5.0*DS_NL1[1][2][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
+ene_m*1.0/5.0*DS_NL1[1][2][Mc_AN][k][m][*l+3]*DS_NL1[1][0][Mj_AN][kl][n][*l+4] | |
-ene_m*1.0/5.0*DS_NL1[1][2][Mc_AN][k][m][*l+4]*DS_NL1[1][0][Mj_AN][kl][n][*l+3] ); | |
tmpz = | |
fugou* | |
( | |
ene_m*2.0/5.0*DS_NL1[1][3][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
-ene_m*2.0/5.0*DS_NL1[1][3][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
+ene_m*1.0/5.0*DS_NL1[1][3][Mc_AN][k][m][*l+3]*DS_NL1[1][0][Mj_AN][kl][n][*l+4] | |
-ene_m*1.0/5.0*DS_NL1[1][3][Mc_AN][k][m][*l+4]*DS_NL1[1][0][Mj_AN][kl][n][*l+3] ); | |
/* contribution of l-1/2 for up spin */ | |
*sumx0i += tmpx; | |
*sumy0i += tmpy; | |
*sumz0i += tmpz; | |
/* contribution of l-1/2 for down spin */ | |
*sumx1i += -tmpx; | |
*sumy1i += -tmpy; | |
*sumz1i += -tmpz; | |
} | |
/* f */ | |
else if (l2==6){ | |
tmpx = | |
fugou* | |
( | |
ene_p*1.0/7.0*DS_NL1[0][1][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
-ene_p*1.0/7.0*DS_NL1[0][1][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
+ene_p*2.0/7.0*DS_NL1[0][1][Mc_AN][k][m][*l+3]*DS_NL1[0][0][Mj_AN][kl][n][*l+4] | |
-ene_p*2.0/7.0*DS_NL1[0][1][Mc_AN][k][m][*l+4]*DS_NL1[0][0][Mj_AN][kl][n][*l+3] | |
+ene_p*3.0/7.0*DS_NL1[0][1][Mc_AN][k][m][*l+5]*DS_NL1[0][0][Mj_AN][kl][n][*l+6] | |
-ene_p*3.0/7.0*DS_NL1[0][1][Mc_AN][k][m][*l+6]*DS_NL1[0][0][Mj_AN][kl][n][*l+5] ); | |
tmpy = | |
fugou* | |
( | |
ene_p*1.0/7.0*DS_NL1[0][2][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
-ene_p*1.0/7.0*DS_NL1[0][2][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
+ene_p*2.0/7.0*DS_NL1[0][2][Mc_AN][k][m][*l+3]*DS_NL1[0][0][Mj_AN][kl][n][*l+4] | |
-ene_p*2.0/7.0*DS_NL1[0][2][Mc_AN][k][m][*l+4]*DS_NL1[0][0][Mj_AN][kl][n][*l+3] | |
+ene_p*3.0/7.0*DS_NL1[0][2][Mc_AN][k][m][*l+5]*DS_NL1[0][0][Mj_AN][kl][n][*l+6] | |
-ene_p*3.0/7.0*DS_NL1[0][2][Mc_AN][k][m][*l+6]*DS_NL1[0][0][Mj_AN][kl][n][*l+5] ); | |
tmpz = | |
fugou* | |
( | |
ene_p*1.0/7.0*DS_NL1[0][3][Mc_AN][k][m][*l+1]*DS_NL1[0][0][Mj_AN][kl][n][*l+2] | |
-ene_p*1.0/7.0*DS_NL1[0][3][Mc_AN][k][m][*l+2]*DS_NL1[0][0][Mj_AN][kl][n][*l+1] | |
+ene_p*2.0/7.0*DS_NL1[0][3][Mc_AN][k][m][*l+3]*DS_NL1[0][0][Mj_AN][kl][n][*l+4] | |
-ene_p*2.0/7.0*DS_NL1[0][3][Mc_AN][k][m][*l+4]*DS_NL1[0][0][Mj_AN][kl][n][*l+3] | |
+ene_p*3.0/7.0*DS_NL1[0][3][Mc_AN][k][m][*l+5]*DS_NL1[0][0][Mj_AN][kl][n][*l+6] | |
-ene_p*3.0/7.0*DS_NL1[0][3][Mc_AN][k][m][*l+6]*DS_NL1[0][0][Mj_AN][kl][n][*l+5] ); | |
/* contribution of l+1/2 for up spin */ | |
*sumx0i += -tmpx; | |
*sumy0i += -tmpy; | |
*sumz0i += -tmpz; | |
/* contribution of l+1/2 for down spin */ | |
*sumx1i += tmpx; | |
*sumy1i += tmpy; | |
*sumz1i += tmpz; | |
tmpx = | |
fugou* | |
( | |
ene_m*1.0/7.0*DS_NL1[1][1][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
-ene_m*1.0/7.0*DS_NL1[1][1][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
+ene_m*2.0/7.0*DS_NL1[1][1][Mc_AN][k][m][*l+3]*DS_NL1[1][0][Mj_AN][kl][n][*l+4] | |
-ene_m*2.0/7.0*DS_NL1[1][1][Mc_AN][k][m][*l+4]*DS_NL1[1][0][Mj_AN][kl][n][*l+3] | |
+ene_m*3.0/7.0*DS_NL1[1][1][Mc_AN][k][m][*l+5]*DS_NL1[1][0][Mj_AN][kl][n][*l+6] | |
-ene_m*3.0/7.0*DS_NL1[1][1][Mc_AN][k][m][*l+6]*DS_NL1[1][0][Mj_AN][kl][n][*l+5] ); | |
tmpy = | |
fugou* | |
( | |
ene_m*1.0/7.0*DS_NL1[1][2][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
-ene_m*1.0/7.0*DS_NL1[1][2][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
+ene_m*2.0/7.0*DS_NL1[1][2][Mc_AN][k][m][*l+3]*DS_NL1[1][0][Mj_AN][kl][n][*l+4] | |
-ene_m*2.0/7.0*DS_NL1[1][2][Mc_AN][k][m][*l+4]*DS_NL1[1][0][Mj_AN][kl][n][*l+3] | |
+ene_m*3.0/7.0*DS_NL1[1][2][Mc_AN][k][m][*l+5]*DS_NL1[1][0][Mj_AN][kl][n][*l+6] | |
-ene_m*3.0/7.0*DS_NL1[1][2][Mc_AN][k][m][*l+6]*DS_NL1[1][0][Mj_AN][kl][n][*l+5] ); | |
tmpz = | |
fugou* | |
( | |
ene_m*1.0/7.0*DS_NL1[1][3][Mc_AN][k][m][*l+1]*DS_NL1[1][0][Mj_AN][kl][n][*l+2] | |
-ene_m*1.0/7.0*DS_NL1[1][3][Mc_AN][k][m][*l+2]*DS_NL1[1][0][Mj_AN][kl][n][*l+1] | |
+ene_m*2.0/7.0*DS_NL1[1][3][Mc_AN][k][m][*l+3]*DS_NL1[1][0][Mj_AN][kl][n][*l+4] | |
-ene_m*2.0/7.0*DS_NL1[1][3][Mc_AN][k][m][*l+4]*DS_NL1[1][0][Mj_AN][kl][n][*l+3] | |
+ene_m*3.0/7.0*DS_NL1[1][3][Mc_AN][k][m][*l+5]*DS_NL1[1][0][Mj_AN][kl][n][*l+6] | |
-ene_m*3.0/7.0*DS_NL1[1][3][Mc_AN][k][m][*l+6]*DS_NL1[1][0][Mj_AN][kl][n][*l+5] ); | |
/* contribution of l-1/2 for up spin */ | |
*sumx0i += tmpx; | |
*sumy0i += tmpy; | |
*sumz0i += tmpz; | |
/* contribution of l-1/2 for down spin */ | |
*sumx1i += -tmpx; | |
*sumy1i += -tmpy; | |
*sumz1i += -tmpz; | |
} | |
/**************************************************** | |
diagonal contribution on up-up and dn-dn | |
****************************************************/ | |
for (l3=0; l3<=l2; l3++){ | |
/* VNL for j=l+1/2 */ | |
tmpx = PFp*ene_p*DS_NL1[0][1][Mc_AN][k][m][*l]*DS_NL1[0][0][Mj_AN][kl][n][*l]; | |
tmpy = PFp*ene_p*DS_NL1[0][2][Mc_AN][k][m][*l]*DS_NL1[0][0][Mj_AN][kl][n][*l]; | |
tmpz = PFp*ene_p*DS_NL1[0][3][Mc_AN][k][m][*l]*DS_NL1[0][0][Mj_AN][kl][n][*l]; | |
*sumx0r += tmpx; | |
*sumy0r += tmpy; | |
*sumz0r += tmpz; | |
*sumx1r += tmpx; | |
*sumy1r += tmpy; | |
*sumz1r += tmpz; | |
/* VNL for j=l-1/2 */ | |
tmpx = PFm*ene_m*DS_NL1[1][1][Mc_AN][k][m][*l]*DS_NL1[1][0][Mj_AN][kl][n][*l]; | |
tmpy = PFm*ene_m*DS_NL1[1][2][Mc_AN][k][m][*l]*DS_NL1[1][0][Mj_AN][kl][n][*l]; | |
tmpz = PFm*ene_m*DS_NL1[1][3][Mc_AN][k][m][*l]*DS_NL1[1][0][Mj_AN][kl][n][*l]; | |
*sumx0r += tmpx; | |
*sumy0r += tmpy; | |
*sumz0r += tmpz; | |
*sumx1r += tmpx; | |
*sumy1r += tmpy; | |
*sumz1r += tmpz; | |
*l = *l + 1; | |
} | |
} | |
void dH_U_full(int Mc_AN, int h_AN, int q_AN, | |
double *****OLP, double ****v_eff, | |
double ***Hx, double ***Hy, double ***Hz) | |
{ | |
int i,j,k,m,n,kg,kan,so,deri_kind,Mk_AN; | |
int ig,ian,jg,jan,kl,kl1,kl2,spin,spinmax; | |
int wakg,l1,l2,l3,Gc_AN,Mi_AN,Mj_AN; | |
int Rwan,Lwan,p,p0; | |
double PF[2],sumx,sumy,sumz,ene; | |
double tmpx,tmpy,tmpz; | |
double Lsum0,Lsum1,Lsum2,Lsum3; | |
double Rsum0,Rsum1,Rsum2,Rsum3; | |
double PFp,PFm,ene_p,ene_m; | |
double ***Hx2,***Hy2,***Hz2; | |
double sumx0,sumy0,sumz0; | |
double sumx1,sumy1,sumz1; | |
double sumx2,sumy2,sumz2; | |
/**************************************************** | |
allocation of arrays: | |
double Hx2[3][List_YOUSO[7]][List_YOUSO[7]]; | |
double Hy2[3][List_YOUSO[7]][List_YOUSO[7]]; | |
double Hz2[3][List_YOUSO[7]][List_YOUSO[7]]; | |
****************************************************/ | |
Hx2 = (double***)malloc(sizeof(double**)*3); | |
for (i=0; i<3; i++){ | |
Hx2[i] = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx2[i][j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
} | |
Hy2 = (double***)malloc(sizeof(double**)*3); | |
for (i=0; i<3; i++){ | |
Hy2[i] = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hy2[i][j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
} | |
Hz2 = (double***)malloc(sizeof(double**)*3); | |
for (i=0; i<3; i++){ | |
Hz2[i] = (double**)malloc(sizeof(double*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hz2[i][j] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
} | |
/**************************************************** | |
start calc. | |
****************************************************/ | |
if (SpinP_switch==0) spinmax = 0; | |
else spinmax = 1; | |
Gc_AN = M2G[Mc_AN]; | |
ig = natn[Gc_AN][h_AN]; | |
Lwan = WhatSpecies[ig]; | |
Mi_AN = F_G2M[ig]; /* F_G2M should be used */ | |
ian = Spe_Total_CNO[Lwan]; | |
jg = natn[Gc_AN][q_AN]; | |
Rwan = WhatSpecies[jg]; | |
Mj_AN = F_G2M[jg]; /* F_G2M should be used */ | |
jan = Spe_Total_CNO[Rwan]; | |
if (h_AN==0){ | |
/**************************************************** | |
dS*ep*S | |
****************************************************/ | |
for (k=0; k<=FNAN[Gc_AN]; k++){ | |
kg = natn[Gc_AN][k]; | |
Mk_AN = F_G2M[kg]; /* F_G2M should be used */ | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_NO[wakg]; | |
kl = RMI1[Mc_AN][q_AN][k]; | |
/**************************************************** | |
derivative at h_AN (=Mc_AN) | |
****************************************************/ | |
if (0<=kl){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
for (spin=0; spin<=spinmax; spin++){ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
if (Cnt_switch==0){ | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
ene = v_eff[spin][Mk_AN][l1][l2]; | |
sumx += ene*OLP[1][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
sumy += ene*OLP[2][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
sumz += ene*OLP[3][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
} | |
} | |
} | |
else if (Cnt_switch==1){ | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
Lsum1 = 0.0; | |
Lsum2 = 0.0; | |
Lsum3 = 0.0; | |
for (p=0; p<Spe_Specified_Num[Lwan][m]; p++){ | |
p0 = Spe_Trans_Orbital[Lwan][m][p]; | |
Lsum1 += CntCoes[Mc_AN][m][p]*OLP[1][Mc_AN][k][p0][l1]; | |
Lsum2 += CntCoes[Mc_AN][m][p]*OLP[2][Mc_AN][k][p0][l1]; | |
Lsum3 += CntCoes[Mc_AN][m][p]*OLP[3][Mc_AN][k][p0][l1]; | |
} | |
Rsum0 = 0.0; | |
for (p=0; p<Spe_Specified_Num[Rwan][n]; p++){ | |
p0 = Spe_Trans_Orbital[Rwan][n][p]; | |
Rsum0 += CntCoes[Mj_AN][n][p]*OLP[0][Mj_AN][kl][p0][l2]; | |
} | |
ene = v_eff[spin][Mk_AN][l1][l2]; | |
sumx += ene*Lsum1*Rsum0; | |
sumy += ene*Lsum2*Rsum0; | |
sumz += ene*Lsum3*Rsum0; | |
} | |
} | |
} | |
if (k==0){ | |
Hx[spin][m][n] = sumx; | |
Hy[spin][m][n] = sumy; | |
Hz[spin][m][n] = sumz; | |
Hx[2][m][n] = 0.0; | |
Hy[2][m][n] = 0.0; | |
Hz[2][m][n] = 0.0; | |
} | |
else { | |
Hx[spin][m][n] += sumx; | |
Hy[spin][m][n] += sumy; | |
Hz[spin][m][n] += sumz; | |
} | |
} | |
} | |
} | |
} /* if */ | |
} /* k */ | |
/**************************************************** | |
S*ep*dS | |
****************************************************/ | |
if (q_AN==0){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx2[0][m][n] = Hx[0][m][n]; | |
Hy2[0][m][n] = Hy[0][m][n]; | |
Hz2[0][m][n] = Hz[0][m][n]; | |
Hx2[1][m][n] = Hx[1][m][n]; | |
Hy2[1][m][n] = Hy[1][m][n]; | |
Hz2[1][m][n] = Hz[1][m][n]; | |
} | |
} | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[0][m][n] = Hx2[0][m][n] + Hx2[0][n][m]; | |
Hy[0][m][n] = Hy2[0][m][n] + Hy2[0][n][m]; | |
Hz[0][m][n] = Hz2[0][m][n] + Hz2[0][n][m]; | |
Hx[1][m][n] = Hx2[1][m][n] + Hx2[1][n][m]; | |
Hy[1][m][n] = Hy2[1][m][n] + Hy2[1][n][m]; | |
Hz[1][m][n] = Hz2[1][m][n] + Hz2[1][n][m]; | |
} | |
} | |
} | |
else { | |
kg = natn[Gc_AN][0]; | |
Mk_AN = F_G2M[kg]; /* F_G2M should be used */ | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_NO[wakg]; | |
kl = RMI1[Mc_AN][q_AN][0]; | |
/**************************************************** | |
derivative at k=0 | |
****************************************************/ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
for (spin=0; spin<=spinmax; spin++){ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
if (Cnt_switch==0){ | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
ene = v_eff[spin][Mk_AN][l1][l2]; | |
sumx -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[1][Mj_AN][kl][n][l2]; | |
sumy -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[2][Mj_AN][kl][n][l2]; | |
sumz -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[3][Mj_AN][kl][n][l2]; | |
} | |
} | |
} | |
else if (Cnt_switch==1){ | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
Lsum0 = 0.0; | |
for (p=0; p<Spe_Specified_Num[Lwan][m]; p++){ | |
p0 = Spe_Trans_Orbital[Lwan][m][p]; | |
Lsum0 += CntCoes[Mc_AN][m][p]*OLP[0][Mc_AN][0][p0][l1]; | |
} | |
Rsum1 = 0.0; | |
Rsum2 = 0.0; | |
Rsum3 = 0.0; | |
for (p=0; p<Spe_Specified_Num[Rwan][n]; p++){ | |
p0 = Spe_Trans_Orbital[Rwan][n][p]; | |
Rsum1 += CntCoes[Mj_AN][n][p]*OLP[1][Mj_AN][kl][p0][l2]; | |
Rsum2 += CntCoes[Mj_AN][n][p]*OLP[2][Mj_AN][kl][p0][l2]; | |
Rsum3 += CntCoes[Mj_AN][n][p]*OLP[3][Mj_AN][kl][p0][l2]; | |
} | |
ene = v_eff[spin][Mk_AN][l1][l2]; | |
sumx -= ene*Lsum0*Rsum1; | |
sumy -= ene*Lsum0*Rsum2; | |
sumz -= ene*Lsum0*Rsum3; | |
} | |
} | |
} | |
Hx[spin][m][n] += sumx; | |
Hy[spin][m][n] += sumy; | |
Hz[spin][m][n] += sumz; | |
} | |
} | |
} | |
} | |
} /* if (h_AN==0) */ | |
else { | |
/**************************************************** | |
dS*ep*S | |
****************************************************/ | |
kg = natn[Gc_AN][0]; | |
Mk_AN = F_G2M[kg]; /* F_G2M should be used */ | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_NO[wakg]; | |
kl1 = RMI1[Mc_AN][h_AN][0]; | |
kl2 = RMI1[Mc_AN][q_AN][0]; | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
for (spin=0; spin<=spinmax; spin++){ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
if (Cnt_switch==0){ | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
ene = v_eff[spin][Mk_AN][l1][l2]; | |
sumx -= ene*OLP[1][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
sumy -= ene*OLP[2][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
sumz -= ene*OLP[3][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
} | |
} | |
} | |
else if (Cnt_switch==1){ | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
Lsum1 = 0.0; | |
Lsum2 = 0.0; | |
Lsum3 = 0.0; | |
for (p=0; p<Spe_Specified_Num[Lwan][m]; p++){ | |
p0 = Spe_Trans_Orbital[Lwan][m][p]; | |
Lsum1 += CntCoes[Mi_AN][m][p]*OLP[1][Mi_AN][kl1][p0][l1]; | |
Lsum2 += CntCoes[Mi_AN][m][p]*OLP[2][Mi_AN][kl1][p0][l1]; | |
Lsum3 += CntCoes[Mi_AN][m][p]*OLP[3][Mi_AN][kl1][p0][l1]; | |
} | |
Rsum0 = 0.0; | |
for (p=0; p<Spe_Specified_Num[Rwan][n]; p++){ | |
p0 = Spe_Trans_Orbital[Rwan][n][p]; | |
Rsum0 += CntCoes[Mj_AN][n][p]*OLP[0][Mj_AN][kl2][p0][l2]; | |
} | |
ene = v_eff[spin][Mk_AN][l1][l2]; | |
sumx -= ene*Lsum1*Rsum0; | |
sumy -= ene*Lsum2*Rsum0; | |
sumz -= ene*Lsum3*Rsum0; | |
} | |
} | |
} | |
Hx[spin][m][n] = sumx; | |
Hy[spin][m][n] = sumy; | |
Hz[spin][m][n] = sumz; | |
Hx[2][m][n] = 0.0; | |
Hy[2][m][n] = 0.0; | |
Hz[2][m][n] = 0.0; | |
} | |
} | |
} | |
/**************************************************** | |
S*ep*dS | |
****************************************************/ | |
if (q_AN==0){ | |
for (k=0; k<=FNAN[Gc_AN]; k++){ | |
kg = natn[Gc_AN][k]; | |
Mk_AN = F_G2M[kg]; /* F_G2M should be used */ | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_NO[wakg]; | |
kl1 = RMI1[Mc_AN][h_AN][k]; | |
kl2 = RMI1[Mc_AN][q_AN][k]; | |
if (0<=kl1){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
for (spin=0; spin<=spinmax; spin++){ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
if (Cnt_switch==0){ | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
ene = v_eff[spin][Mk_AN][l1][l2]; | |
sumx += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
sumy += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
sumz += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
} | |
} | |
} | |
else if (Cnt_switch==1){ | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
Lsum0 = 0.0; | |
for (p=0; p<Spe_Specified_Num[Lwan][m]; p++){ | |
p0 = Spe_Trans_Orbital[Lwan][m][p]; | |
Lsum0 += CntCoes[Mi_AN][m][p]*OLP[0][Mi_AN][kl1][p0][l1]; | |
} | |
Rsum1 = 0.0; | |
Rsum2 = 0.0; | |
Rsum3 = 0.0; | |
for (p=0; p<Spe_Specified_Num[Rwan][n]; p++){ | |
p0 = Spe_Trans_Orbital[Rwan][n][p]; | |
Rsum1 += CntCoes[Mj_AN][n][p]*OLP[1][Mj_AN][kl2][p0][l2]; | |
Rsum2 += CntCoes[Mj_AN][n][p]*OLP[2][Mj_AN][kl2][p0][l2]; | |
Rsum3 += CntCoes[Mj_AN][n][p]*OLP[3][Mj_AN][kl2][p0][l2]; | |
} | |
ene = v_eff[spin][Mk_AN][l1][l2]; | |
sumx += ene*Lsum0*Rsum1; | |
sumy += ene*Lsum0*Rsum2; | |
sumz += ene*Lsum0*Rsum3; | |
} | |
} | |
} | |
Hx[spin][m][n] += sumx; | |
Hy[spin][m][n] += sumy; | |
Hz[spin][m][n] += sumz; | |
} | |
} | |
} | |
} | |
} | |
} /* if (q_AN==0) */ | |
else { | |
kg = natn[Gc_AN][0]; | |
Mk_AN = F_G2M[kg]; /* F_G2M should be used */ | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_NO[wakg]; | |
kl1 = RMI1[Mc_AN][h_AN][0]; | |
kl2 = RMI1[Mc_AN][q_AN][0]; | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
for (spin=0; spin<=spinmax; spin++){ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
if (Cnt_switch==0){ | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
ene = v_eff[spin][Mk_AN][l1][l2]; | |
sumx -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
sumy -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
sumz -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
} | |
} | |
} | |
else if (Cnt_switch==1){ | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
Lsum0 = 0.0; | |
for (p=0; p<Spe_Specified_Num[Lwan][m]; p++){ | |
p0 = Spe_Trans_Orbital[Lwan][m][p]; | |
Lsum0 += CntCoes[Mi_AN][m][p]*OLP[0][Mi_AN][kl1][p0][l1]; | |
} | |
Rsum1 = 0.0; | |
Rsum2 = 0.0; | |
Rsum3 = 0.0; | |
for (p=0; p<Spe_Specified_Num[Rwan][n]; p++){ | |
p0 = Spe_Trans_Orbital[Rwan][n][p]; | |
Rsum1 += CntCoes[Mj_AN][n][p]*OLP[1][Mj_AN][kl2][p0][l2]; | |
Rsum2 += CntCoes[Mj_AN][n][p]*OLP[2][Mj_AN][kl2][p0][l2]; | |
Rsum3 += CntCoes[Mj_AN][n][p]*OLP[3][Mj_AN][kl2][p0][l2]; | |
} | |
ene = v_eff[spin][Mk_AN][l1][l2]; | |
sumx -= ene*Lsum0*Rsum1; | |
sumy -= ene*Lsum0*Rsum2; | |
sumz -= ene*Lsum0*Rsum3; | |
} | |
} | |
} | |
Hx[spin][m][n] += sumx; | |
Hy[spin][m][n] += sumy; | |
Hz[spin][m][n] += sumz; | |
} | |
} | |
} | |
} | |
} | |
/**************************************************** | |
freeing of arrays: | |
double Hx2[3][List_YOUSO[7]][List_YOUSO[7]]; | |
double Hy2[3][List_YOUSO[7]][List_YOUSO[7]]; | |
double Hz2[3][List_YOUSO[7]][List_YOUSO[7]]; | |
****************************************************/ | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hx2[i][j]); | |
} | |
free(Hx2[i]); | |
} | |
free(Hx2); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hy2[i][j]); | |
} | |
free(Hy2[i]); | |
} | |
free(Hy2); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hz2[i][j]); | |
} | |
free(Hz2[i]); | |
} | |
free(Hz2); | |
} | |
void dH_U_NC_full(int Mc_AN, int h_AN, int q_AN, | |
double *****OLP, dcomplex *****NC_v_eff, | |
dcomplex ****Hx, dcomplex ****Hy, dcomplex ****Hz) | |
{ | |
int i,j,k,m,n,kg,kan,so,deri_kind,Mk_AN; | |
int ig,ian,jg,jan,kl,kl1,kl2,spin; | |
int wakg,l1,l2,l3,Gc_AN,Mi_AN,Mj_AN; | |
int Rwan,Lwan,p,p0,s1,s2; | |
double PF[2],sumx,sumy,sumz,ene; | |
double tmpx,tmpy,tmpz; | |
double Lsum0,Lsum1,Lsum2,Lsum3; | |
double Rsum0,Rsum1,Rsum2,Rsum3; | |
double PFp,PFm,ene_p,ene_m; | |
double Re00x,Re00y,Re00z; | |
double Re11x,Re11y,Re11z; | |
double Re01x,Re01y,Re01z; | |
double Re10x,Re10y,Re10z; | |
double Im00x,Im00y,Im00z; | |
double Im11x,Im11y,Im11z; | |
double Im01x,Im01y,Im01z; | |
double Im10x,Im10y,Im10z; | |
/**************************************************** | |
start calc. | |
****************************************************/ | |
Gc_AN = M2G[Mc_AN]; | |
ig = natn[Gc_AN][h_AN]; | |
Lwan = WhatSpecies[ig]; | |
Mi_AN = F_G2M[ig]; /* F_G2M should be used */ | |
ian = Spe_Total_CNO[Lwan]; | |
jg = natn[Gc_AN][q_AN]; | |
Rwan = WhatSpecies[jg]; | |
Mj_AN = F_G2M[jg]; /* F_G2M should be used */ | |
jan = Spe_Total_CNO[Rwan]; | |
if (h_AN==0){ | |
/**************************************************** | |
dS*ep*S | |
****************************************************/ | |
for (k=0; k<=FNAN[Gc_AN]; k++){ | |
kg = natn[Gc_AN][k]; | |
Mk_AN = F_G2M[kg]; /* F_G2M should be used */ | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_NO[wakg]; | |
kl = RMI1[Mc_AN][q_AN][k]; | |
/**************************************************** | |
derivative at h_AN (=Mc_AN) | |
****************************************************/ | |
if (0<=kl){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Re00x = 0.0; Re00y = 0.0; Re00z = 0.0; | |
Re11x = 0.0; Re11y = 0.0; Re11z = 0.0; | |
Re01x = 0.0; Re01y = 0.0; Re01z = 0.0; | |
Re10x = 0.0; Re10y = 0.0; Re10z = 0.0; | |
Im00x = 0.0; Im00y = 0.0; Im00z = 0.0; | |
Im11x = 0.0; Im11y = 0.0; Im11z = 0.0; | |
Im01x = 0.0; Im01y = 0.0; Im01z = 0.0; | |
Im10x = 0.0; Im10y = 0.0; Im10z = 0.0; | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
ene = NC_v_eff[0][0][Mk_AN][l1][l2].r; | |
Re00x += ene*OLP[1][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Re00y += ene*OLP[2][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Re00z += ene*OLP[3][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[1][1][Mk_AN][l1][l2].r; | |
Re11x += ene*OLP[1][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Re11y += ene*OLP[2][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Re11z += ene*OLP[3][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[0][1][Mk_AN][l1][l2].r; | |
Re01x += ene*OLP[1][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Re01y += ene*OLP[2][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Re01z += ene*OLP[3][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[1][0][Mk_AN][l1][l2].r; | |
Re10x += ene*OLP[1][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Re10y += ene*OLP[2][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Re10z += ene*OLP[3][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[0][0][Mk_AN][l1][l2].i; | |
Im00x += ene*OLP[1][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Im00y += ene*OLP[2][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Im00z += ene*OLP[3][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[1][1][Mk_AN][l1][l2].i; | |
Im11x += ene*OLP[1][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Im11y += ene*OLP[2][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Im11z += ene*OLP[3][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[0][1][Mk_AN][l1][l2].i; | |
Im01x += ene*OLP[1][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Im01y += ene*OLP[2][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Im01z += ene*OLP[3][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[1][0][Mk_AN][l1][l2].i; | |
Im10x += ene*OLP[1][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Im10y += ene*OLP[2][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
Im10z += ene*OLP[3][Mc_AN][k][m][l1]*OLP[0][Mj_AN][kl][n][l2]; | |
} | |
} | |
if (k==0){ | |
Hx[0][0][m][n] = Complex(Re00x,Im00x); | |
Hy[0][0][m][n] = Complex(Re00y,Im00y); | |
Hz[0][0][m][n] = Complex(Re00z,Im00z); | |
Hx[1][1][m][n] = Complex(Re11x,Im11x); | |
Hy[1][1][m][n] = Complex(Re11y,Im11y); | |
Hz[1][1][m][n] = Complex(Re11z,Im11z); | |
Hx[0][1][m][n] = Complex(Re01x,Im01x); | |
Hy[0][1][m][n] = Complex(Re01y,Im01y); | |
Hz[0][1][m][n] = Complex(Re01z,Im01z); | |
Hx[1][0][m][n] = Complex(Re10x,Im10x); | |
Hy[1][0][m][n] = Complex(Re10y,Im10y); | |
Hz[1][0][m][n] = Complex(Re10z,Im10z); | |
} | |
else{ | |
Hx[0][0][m][n].r += Re00x; Hx[0][0][m][n].i += Im00x; | |
Hy[0][0][m][n].r += Re00y; Hy[0][0][m][n].i += Im00y; | |
Hz[0][0][m][n].r += Re00z; Hz[0][0][m][n].i += Im00z; | |
Hx[1][1][m][n].r += Re11x; Hx[1][1][m][n].i += Im11x; | |
Hy[1][1][m][n].r += Re11y; Hy[1][1][m][n].i += Im11y; | |
Hz[1][1][m][n].r += Re11z; Hz[1][1][m][n].i += Im11z; | |
Hx[0][1][m][n].r += Re01x; Hx[0][1][m][n].i += Im01x; | |
Hy[0][1][m][n].r += Re01y; Hy[0][1][m][n].i += Im01y; | |
Hz[0][1][m][n].r += Re01z; Hz[0][1][m][n].i += Im01z; | |
Hx[1][0][m][n].r += Re10x; Hx[1][0][m][n].i += Im10x; | |
Hy[1][0][m][n].r += Re10y; Hy[1][0][m][n].i += Im10y; | |
Hz[1][0][m][n].r += Re10z; Hz[1][0][m][n].i += Im10z; | |
} | |
} /* n */ | |
} /* m */ | |
} /* if */ | |
} /* k */ | |
/**************************************************** | |
S*ep*dS | |
****************************************************/ | |
/* ????? */ | |
if (q_AN==0){ | |
for (s1=0; s1<2; s1++){ | |
for (s2=0; s2<2; s2++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[s1][s2][m][n].r = 2.0*Hx[s1][s2][m][n].r; | |
Hy[s1][s2][m][n].r = 2.0*Hy[s1][s2][m][n].r; | |
Hz[s1][s2][m][n].r = 2.0*Hz[s1][s2][m][n].r; | |
Hx[s1][s2][m][n].i = 2.0*Hx[s1][s2][m][n].i; | |
Hy[s1][s2][m][n].i = 2.0*Hy[s1][s2][m][n].i; | |
Hz[s1][s2][m][n].i = 2.0*Hz[s1][s2][m][n].i; | |
} | |
} | |
} | |
} | |
} | |
else { | |
kg = natn[Gc_AN][0]; | |
Mk_AN = F_G2M[kg]; /* F_G2M should be used */ | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_NO[wakg]; | |
kl = RMI1[Mc_AN][q_AN][0]; | |
/**************************************************** | |
derivative at k=0 | |
****************************************************/ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Re00x = 0.0; Re00y = 0.0; Re00z = 0.0; | |
Re11x = 0.0; Re11y = 0.0; Re11z = 0.0; | |
Re01x = 0.0; Re01y = 0.0; Re01z = 0.0; | |
Re10x = 0.0; Re10y = 0.0; Re10z = 0.0; | |
Im00x = 0.0; Im00y = 0.0; Im00z = 0.0; | |
Im11x = 0.0; Im11y = 0.0; Im11z = 0.0; | |
Im01x = 0.0; Im01y = 0.0; Im01z = 0.0; | |
Im10x = 0.0; Im10y = 0.0; Im10z = 0.0; | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
ene = NC_v_eff[0][0][Mk_AN][l1][l2].r; | |
Re00x -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[1][Mj_AN][kl][n][l2]; | |
Re00y -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[2][Mj_AN][kl][n][l2]; | |
Re00z -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[3][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[1][1][Mk_AN][l1][l2].r; | |
Re11x -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[1][Mj_AN][kl][n][l2]; | |
Re11y -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[2][Mj_AN][kl][n][l2]; | |
Re11z -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[3][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[0][1][Mk_AN][l1][l2].r; | |
Re01x -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[1][Mj_AN][kl][n][l2]; | |
Re01y -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[2][Mj_AN][kl][n][l2]; | |
Re01z -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[3][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[1][0][Mk_AN][l1][l2].r; | |
Re10x -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[1][Mj_AN][kl][n][l2]; | |
Re10y -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[2][Mj_AN][kl][n][l2]; | |
Re10z -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[3][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[0][0][Mk_AN][l1][l2].i; | |
Im00x -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[1][Mj_AN][kl][n][l2]; | |
Im00y -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[2][Mj_AN][kl][n][l2]; | |
Im00z -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[3][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[1][1][Mk_AN][l1][l2].i; | |
Im11x -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[1][Mj_AN][kl][n][l2]; | |
Im11y -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[2][Mj_AN][kl][n][l2]; | |
Im11z -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[3][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[0][1][Mk_AN][l1][l2].i; | |
Im01x -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[1][Mj_AN][kl][n][l2]; | |
Im01y -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[2][Mj_AN][kl][n][l2]; | |
Im01z -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[3][Mj_AN][kl][n][l2]; | |
ene = NC_v_eff[1][0][Mk_AN][l1][l2].i; | |
Im10x -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[1][Mj_AN][kl][n][l2]; | |
Im10y -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[2][Mj_AN][kl][n][l2]; | |
Im10z -= ene*OLP[0][Mc_AN][0][m][l1]*OLP[3][Mj_AN][kl][n][l2]; | |
} | |
} | |
Hx[0][0][m][n].r += Re00x; Hx[0][0][m][n].i += Im00x; | |
Hy[0][0][m][n].r += Re00y; Hy[0][0][m][n].i += Im00y; | |
Hz[0][0][m][n].r += Re00z; Hz[0][0][m][n].i += Im00z; | |
Hx[1][1][m][n].r += Re11x; Hx[1][1][m][n].i += Im11x; | |
Hy[1][1][m][n].r += Re11y; Hy[1][1][m][n].i += Im11y; | |
Hz[1][1][m][n].r += Re11z; Hz[1][1][m][n].i += Im11z; | |
Hx[0][1][m][n].r += Re01x; Hx[0][1][m][n].i += Im01x; | |
Hy[0][1][m][n].r += Re01y; Hy[0][1][m][n].i += Im01y; | |
Hz[0][1][m][n].r += Re01z; Hz[0][1][m][n].i += Im01z; | |
Hx[1][0][m][n].r += Re10x; Hx[1][0][m][n].i += Im10x; | |
Hy[1][0][m][n].r += Re10y; Hy[1][0][m][n].i += Im10y; | |
Hz[1][0][m][n].r += Re10z; Hz[1][0][m][n].i += Im10z; | |
} | |
} | |
} | |
} /* if (h_AN==0) */ | |
else { | |
/**************************************************** | |
dS*ep*S | |
****************************************************/ | |
kg = natn[Gc_AN][0]; | |
Mk_AN = F_G2M[kg]; /* F_G2M should be used */ | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_NO[wakg]; | |
kl1 = RMI1[Mc_AN][h_AN][0]; | |
kl2 = RMI1[Mc_AN][q_AN][0]; | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Re00x = 0.0; Re00y = 0.0; Re00z = 0.0; | |
Re11x = 0.0; Re11y = 0.0; Re11z = 0.0; | |
Re01x = 0.0; Re01y = 0.0; Re01z = 0.0; | |
Re10x = 0.0; Re10y = 0.0; Re10z = 0.0; | |
Im00x = 0.0; Im00y = 0.0; Im00z = 0.0; | |
Im11x = 0.0; Im11y = 0.0; Im11z = 0.0; | |
Im01x = 0.0; Im01y = 0.0; Im01z = 0.0; | |
Im10x = 0.0; Im10y = 0.0; Im10z = 0.0; | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
ene = NC_v_eff[0][0][Mk_AN][l1][l2].r; | |
Re00x -= ene*OLP[1][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Re00y -= ene*OLP[2][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Re00z -= ene*OLP[3][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[1][1][Mk_AN][l1][l2].r; | |
Re11x -= ene*OLP[1][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Re11y -= ene*OLP[2][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Re11z -= ene*OLP[3][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[0][1][Mk_AN][l1][l2].r; | |
Re01x -= ene*OLP[1][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Re01y -= ene*OLP[2][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Re01z -= ene*OLP[3][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[1][0][Mk_AN][l1][l2].r; | |
Re10x -= ene*OLP[1][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Re10y -= ene*OLP[2][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Re10z -= ene*OLP[3][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[0][0][Mk_AN][l1][l2].i; | |
Im00x -= ene*OLP[1][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Im00y -= ene*OLP[2][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Im00z -= ene*OLP[3][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[1][1][Mk_AN][l1][l2].i; | |
Im11x -= ene*OLP[1][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Im11y -= ene*OLP[2][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Im11z -= ene*OLP[3][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[0][1][Mk_AN][l1][l2].i; | |
Im01x -= ene*OLP[1][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Im01y -= ene*OLP[2][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Im01z -= ene*OLP[3][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[1][0][Mk_AN][l1][l2].i; | |
Im10x -= ene*OLP[1][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Im10y -= ene*OLP[2][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
Im10z -= ene*OLP[3][Mi_AN][kl1][m][l1]*OLP[0][Mj_AN][kl2][n][l2]; | |
} | |
} | |
Hx[0][0][m][n] = Complex(Re00x,Im00x); | |
Hy[0][0][m][n] = Complex(Re00y,Im00y); | |
Hz[0][0][m][n] = Complex(Re00z,Im00z); | |
Hx[1][1][m][n] = Complex(Re11x,Im11x); | |
Hy[1][1][m][n] = Complex(Re11y,Im11y); | |
Hz[1][1][m][n] = Complex(Re11z,Im11z); | |
Hx[0][1][m][n] = Complex(Re01x,Im01x); | |
Hy[0][1][m][n] = Complex(Re01y,Im01y); | |
Hz[0][1][m][n] = Complex(Re01z,Im01z); | |
Hx[1][0][m][n] = Complex(Re10x,Im10x); | |
Hy[1][0][m][n] = Complex(Re10y,Im10y); | |
Hz[1][0][m][n] = Complex(Re10z,Im10z); | |
} | |
} | |
/**************************************************** | |
S*ep*dS | |
****************************************************/ | |
if (q_AN==0){ | |
for (k=0; k<=FNAN[Gc_AN]; k++){ | |
kg = natn[Gc_AN][k]; | |
Mk_AN = F_G2M[kg]; /* F_G2M should be used */ | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_NO[wakg]; | |
kl1 = RMI1[Mc_AN][h_AN][k]; | |
kl2 = RMI1[Mc_AN][q_AN][k]; | |
if (0<=kl1){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Re00x = 0.0; Re00y = 0.0; Re00z = 0.0; | |
Re11x = 0.0; Re11y = 0.0; Re11z = 0.0; | |
Re01x = 0.0; Re01y = 0.0; Re01z = 0.0; | |
Re10x = 0.0; Re10y = 0.0; Re10z = 0.0; | |
Im00x = 0.0; Im00y = 0.0; Im00z = 0.0; | |
Im11x = 0.0; Im11y = 0.0; Im11z = 0.0; | |
Im01x = 0.0; Im01y = 0.0; Im01z = 0.0; | |
Im10x = 0.0; Im10y = 0.0; Im10z = 0.0; | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
ene = NC_v_eff[0][0][Mk_AN][l1][l2].r; | |
Re00x += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Re00y += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Re00z += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[1][1][Mk_AN][l1][l2].r; | |
Re11x += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Re11y += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Re11z += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[0][1][Mk_AN][l1][l2].r; | |
Re01x += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Re01y += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Re01z += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[1][0][Mk_AN][l1][l2].r; | |
Re10x += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Re10y += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Re10z += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[0][0][Mk_AN][l1][l2].i; | |
Im00x += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Im00y += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Im00z += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[1][1][Mk_AN][l1][l2].i; | |
Im11x += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Im11y += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Im11z += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[0][1][Mk_AN][l1][l2].i; | |
Im01x += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Im01y += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Im01z += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[1][0][Mk_AN][l1][l2].i; | |
Im10x += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Im10y += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Im10z += ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
} | |
} | |
Hx[0][0][m][n].r += Re00x; Hx[0][0][m][n].i += Im00x; | |
Hy[0][0][m][n].r += Re00y; Hy[0][0][m][n].i += Im00y; | |
Hz[0][0][m][n].r += Re00z; Hz[0][0][m][n].i += Im00z; | |
Hx[1][1][m][n].r += Re11x; Hx[1][1][m][n].i += Im11x; | |
Hy[1][1][m][n].r += Re11y; Hy[1][1][m][n].i += Im11y; | |
Hz[1][1][m][n].r += Re11z; Hz[1][1][m][n].i += Im11z; | |
Hx[0][1][m][n].r += Re01x; Hx[0][1][m][n].i += Im01x; | |
Hy[0][1][m][n].r += Re01y; Hy[0][1][m][n].i += Im01y; | |
Hz[0][1][m][n].r += Re01z; Hz[0][1][m][n].i += Im01z; | |
Hx[1][0][m][n].r += Re10x; Hx[1][0][m][n].i += Im10x; | |
Hy[1][0][m][n].r += Re10y; Hy[1][0][m][n].i += Im10y; | |
Hz[1][0][m][n].r += Re10z; Hz[1][0][m][n].i += Im10z; | |
} | |
} | |
} | |
} | |
} /* if (q_AN==0) */ | |
else { | |
kg = natn[Gc_AN][0]; | |
Mk_AN = F_G2M[kg]; /* F_G2M should be used */ | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_NO[wakg]; | |
kl1 = RMI1[Mc_AN][h_AN][0]; | |
kl2 = RMI1[Mc_AN][q_AN][0]; | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Re00x = 0.0; Re00y = 0.0; Re00z = 0.0; | |
Re11x = 0.0; Re11y = 0.0; Re11z = 0.0; | |
Re01x = 0.0; Re01y = 0.0; Re01z = 0.0; | |
Re10x = 0.0; Re10y = 0.0; Re10z = 0.0; | |
Im00x = 0.0; Im00y = 0.0; Im00z = 0.0; | |
Im11x = 0.0; Im11y = 0.0; Im11z = 0.0; | |
Im01x = 0.0; Im01y = 0.0; Im01z = 0.0; | |
Im10x = 0.0; Im10y = 0.0; Im10z = 0.0; | |
for (l1=0; l1<kan; l1++){ | |
for (l2=0; l2<kan; l2++){ | |
ene = NC_v_eff[0][0][Mk_AN][l1][l2].r; | |
Re00x -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Re00y -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Re00z -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[1][1][Mk_AN][l1][l2].r; | |
Re11x -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Re11y -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Re11z -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[0][1][Mk_AN][l1][l2].r; | |
Re01x -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Re01y -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Re01z -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[1][0][Mk_AN][l1][l2].r; | |
Re10x -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Re10y -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Re10z -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[0][0][Mk_AN][l1][l2].i; | |
Im00x -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Im00y -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Im00z -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[1][1][Mk_AN][l1][l2].i; | |
Im11x -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Im11y -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Im11z -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[0][1][Mk_AN][l1][l2].i; | |
Im01x -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Im01y -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Im01z -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
ene = NC_v_eff[1][0][Mk_AN][l1][l2].i; | |
Im10x -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[1][Mj_AN][kl2][n][l2]; | |
Im10y -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[2][Mj_AN][kl2][n][l2]; | |
Im10z -= ene*OLP[0][Mi_AN][kl1][m][l1]*OLP[3][Mj_AN][kl2][n][l2]; | |
} | |
} | |
Hx[0][0][m][n].r += Re00x; Hx[0][0][m][n].i += Im00x; | |
Hy[0][0][m][n].r += Re00y; Hy[0][0][m][n].i += Im00y; | |
Hz[0][0][m][n].r += Re00z; Hz[0][0][m][n].i += Im00z; | |
Hx[1][1][m][n].r += Re11x; Hx[1][1][m][n].i += Im11x; | |
Hy[1][1][m][n].r += Re11y; Hy[1][1][m][n].i += Im11y; | |
Hz[1][1][m][n].r += Re11z; Hz[1][1][m][n].i += Im11z; | |
Hx[0][1][m][n].r += Re01x; Hx[0][1][m][n].i += Im01x; | |
Hy[0][1][m][n].r += Re01y; Hy[0][1][m][n].i += Im01y; | |
Hz[0][1][m][n].r += Re01z; Hz[0][1][m][n].i += Im01z; | |
Hx[1][0][m][n].r += Re10x; Hx[1][0][m][n].i += Im10x; | |
Hy[1][0][m][n].r += Re10y; Hy[1][0][m][n].i += Im10y; | |
Hz[1][0][m][n].r += Re10z; Hz[1][0][m][n].i += Im10z; | |
} | |
} | |
} | |
} | |
} | |
void dHCH(int where_flag, | |
int Mc_AN, int h_AN, int q_AN, | |
double *****OLP1, | |
dcomplex ***Hx, dcomplex ***Hy, dcomplex ***Hz) | |
{ | |
int i,j,k,m,n,l,kg,kan,so,deri_kind,L; | |
int ig,ian,jg,jan,kl,kl1,kl2,mul; | |
int wakg,l1,l2,l3,Gc_AN,Mi_AN,Mi_AN2,Mj_AN,Mj_AN2; | |
int Rni,Rnj,somax,apply_flag,target_spin; | |
double **penalty; | |
double penalty_value; | |
double PF[2],sumx[2],sumy[2],sumz[2],ene,dmp,deri_dmp; | |
double tmpx,tmpy,tmpz,tmp,r; | |
double x0,y0,z0,x1,y1,z1,dx,dy,dz; | |
double rcuti,rcutj,rcut; | |
double PFp,PFm,ene_p,ene_m; | |
dcomplex sumx0,sumy0,sumz0; | |
dcomplex sumx1,sumy1,sumz1; | |
dcomplex sumx2,sumy2,sumz2; | |
/**************************************************** | |
start calc. | |
****************************************************/ | |
/* set penalty */ | |
penalty_value = penalty_value_CoreHole; | |
penalty = (double**)malloc(sizeof(double*)*2); | |
for (i=0; i<2; i++){ | |
penalty[i] = (double*)malloc(sizeof(double)*List_YOUSO[7]); | |
} | |
wakg = WhatSpecies[Core_Hole_Atom]; | |
/* set penalty */ | |
if (VPS_j_dependency[wakg]==0){ | |
for (i=0; i<Spe_Total_NO[wakg]; i++){ | |
penalty[0][i] = 0.0; | |
penalty[1][i] = 0.0; | |
} | |
L = 0; | |
for (l=0; l<=Spe_MaxL_Basis[wakg]; l++){ | |
for (mul=0; mul<Spe_Num_Basis[wakg][l]; mul++){ | |
apply_flag = 0; | |
if ((strcmp(Core_Hole_Orbital,"s")==0) && l==0 && mul==0) { | |
if (Core_Hole_J==1) target_spin = 0; | |
else target_spin = 1; | |
apply_flag = 1; | |
} | |
else if ((strcmp(Core_Hole_Orbital,"p")==0) && l==1 && mul==0) { | |
if (Core_Hole_J<=3) target_spin = 0; | |
else target_spin = 1; | |
apply_flag = 1; | |
} | |
else if ((strcmp(Core_Hole_Orbital,"d")==0) && l==2 && mul==0) { | |
if (Core_Hole_J<=5) target_spin = 0; | |
else target_spin = 1; | |
apply_flag = 1; | |
} | |
else if ((strcmp(Core_Hole_Orbital,"f")==0) && l==3 && mul==0) { | |
if (Core_Hole_J<=7) target_spin = 0; | |
else target_spin = 1; | |
apply_flag = 1; | |
} | |
/* set the penalty into all the states speficied by l and mul */ | |
if (apply_flag==1 && Core_Hole_J==0){ | |
for (i=0; i<(2*l+1); i++){ | |
penalty[0][L+i] = penalty_value; | |
penalty[1][L+i] = penalty_value; | |
} | |
} | |
/* set the penalty into one of the states speficied by l and mul */ | |
else if (apply_flag==1){ | |
penalty[target_spin][L+(Core_Hole_J-1) % (2*l+1)] = penalty_value; | |
} | |
/* increment of L */ | |
L += 2*l+1; | |
} | |
} | |
} | |
/* get information of relevant atoms */ | |
Gc_AN = M2G[Mc_AN]; | |
ig = natn[Gc_AN][h_AN]; | |
Rni = ncn[Gc_AN][h_AN]; | |
Mi_AN = F_G2M[ig]; | |
ian = Spe_Total_CNO[WhatSpecies[ig]]; | |
rcuti = Spe_Atom_Cut1[WhatSpecies[ig]]; | |
jg = natn[Gc_AN][q_AN]; | |
Rnj = ncn[Gc_AN][q_AN]; | |
Mj_AN = F_G2M[jg]; | |
jan = Spe_Total_CNO[WhatSpecies[jg]]; | |
rcutj = Spe_Atom_Cut1[WhatSpecies[jg]]; | |
rcut = rcuti + rcutj; | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
dmp = dampingF(rcut,Dis[ig][kl]); | |
for (so=0; so<3; so++){ | |
for (i=0; i<List_YOUSO[7]; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx[so][i][j] = Complex(0.0,0.0); | |
Hy[so][i][j] = Complex(0.0,0.0); | |
Hz[so][i][j] = Complex(0.0,0.0); | |
} | |
} | |
} | |
if (h_AN==0){ | |
/**************************************************** | |
dH*ep*H | |
****************************************************/ | |
for (k=0; k<=FNAN[Gc_AN]; k++){ | |
kg = natn[Gc_AN][k]; | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_CNO[wakg]; | |
kl = RMI1[Mc_AN][q_AN][k]; | |
/**************************************************** | |
l-dependent non-local part | |
****************************************************/ | |
if (0<=kl && VPS_j_dependency[wakg]==0 && where_flag==0){ | |
if (Mj_AN<=Matomnum) Mj_AN2 = Mj_AN; | |
else Mj_AN2 = Matomnum + 1; | |
if (kg==Core_Hole_Atom){ | |
/* calculate the multiplication */ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx[0] = 0.0; sumx[1] = 0.0; | |
sumy[0] = 0.0; sumy[1] = 0.0; | |
sumz[0] = 0.0; sumz[1] = 0.0; | |
for (i=0; i<Spe_Total_CNO[wakg]; i++){ | |
sumx[0] += penalty[0][i]*OLP1[1][Mc_AN][k][m][i]*OLP1[0][Mj_AN2][kl][n][i]; | |
sumy[0] += penalty[0][i]*OLP1[2][Mc_AN][k][m][i]*OLP1[0][Mj_AN2][kl][n][i]; | |
sumz[0] += penalty[0][i]*OLP1[3][Mc_AN][k][m][i]*OLP1[0][Mj_AN2][kl][n][i]; | |
sumx[1] += penalty[1][i]*OLP1[1][Mc_AN][k][m][i]*OLP1[0][Mj_AN2][kl][n][i]; | |
sumy[1] += penalty[1][i]*OLP1[2][Mc_AN][k][m][i]*OLP1[0][Mj_AN2][kl][n][i]; | |
sumz[1] += penalty[1][i]*OLP1[3][Mc_AN][k][m][i]*OLP1[0][Mj_AN2][kl][n][i]; | |
} | |
Hx[0][m][n].r += sumx[0]; | |
Hy[0][m][n].r += sumy[0]; | |
Hz[0][m][n].r += sumz[0]; | |
Hx[1][m][n].r += sumx[1]; | |
Hy[1][m][n].r += sumy[1]; | |
Hz[1][m][n].r += sumz[1]; | |
} /* n */ | |
} /* m */ | |
} /* if (kg==Core_Hole_Atom) */ | |
} /* if */ | |
/**************************************************** | |
j-dependent non-local part | |
****************************************************/ | |
else if ( 0<=kl && VPS_j_dependency[wakg]==1 && where_flag==0 ){ | |
if (Mj_AN<=Matomnum) Mj_AN2 = Mj_AN; | |
else Mj_AN2 = Matomnum + 1; | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx0 = Complex(0.0,0.0); sumy0 = Complex(0.0,0.0); sumz0 = Complex(0.0,0.0); | |
sumx1 = Complex(0.0,0.0); sumy1 = Complex(0.0,0.0); sumz1 = Complex(0.0,0.0); | |
sumx2 = Complex(0.0,0.0); sumy2 = Complex(0.0,0.0); sumz2 = Complex(0.0,0.0); | |
dHCH_SO( &sumx0.r,&sumx0.i, &sumy0.r,&sumy0.i, &sumz0.r,&sumz0.i, | |
&sumx1.r,&sumx1.i, &sumy1.r,&sumy1.i, &sumz1.r,&sumz1.i, | |
&sumx2.r,&sumx2.i, &sumy2.r,&sumy2.i, &sumz2.r,&sumz2.i, | |
1.0, | |
Mc_AN ,k, m, | |
Mj_AN2,kl,n, | |
kg, wakg, | |
penalty_value, | |
OLP1 ); | |
if (q_AN==0){ | |
dHCH_SO( &sumx0.r,&sumx0.i, &sumy0.r,&sumy0.i, &sumz0.r,&sumz0.i, | |
&sumx1.r,&sumx1.i, &sumy1.r,&sumy1.i, &sumz1.r,&sumz1.i, | |
&sumx2.r,&sumx2.i, &sumy2.r,&sumy2.i, &sumz2.r,&sumz2.i, | |
-1.0, | |
Mj_AN2, kl,n, | |
Mc_AN ,k, m, | |
kg, wakg, | |
penalty_value, | |
OLP1 ); | |
} | |
Hx[0][m][n].r += sumx0.r; /* up-up */ | |
Hy[0][m][n].r += sumy0.r; /* up-up */ | |
Hz[0][m][n].r += sumz0.r; /* up-up */ | |
Hx[1][m][n].r += sumx1.r; /* dn-dn */ | |
Hy[1][m][n].r += sumy1.r; /* dn-dn */ | |
Hz[1][m][n].r += sumz1.r; /* dn-dn */ | |
Hx[2][m][n].r += sumx2.r; /* up-dn */ | |
Hy[2][m][n].r += sumy2.r; /* up-dn */ | |
Hz[2][m][n].r += sumz2.r; /* up-dn */ | |
Hx[0][m][n].i += sumx0.i; /* up-up */ | |
Hy[0][m][n].i += sumy0.i; /* up-up */ | |
Hz[0][m][n].i += sumz0.i; /* up-up */ | |
Hx[1][m][n].i += sumx1.i; /* dn-dn */ | |
Hy[1][m][n].i += sumy1.i; /* dn-dn */ | |
Hz[1][m][n].i += sumz1.i; /* dn-dn */ | |
Hx[2][m][n].i += sumx2.i; /* up-dn */ | |
Hy[2][m][n].i += sumy2.i; /* up-dn */ | |
Hz[2][m][n].i += sumz2.i; /* up-dn */ | |
} | |
} | |
} | |
} /* k */ | |
/**************************************************** | |
H*ep*dH | |
****************************************************/ | |
/* h_AN==0 && q_AN==0 */ | |
if (q_AN==0 && VPS_j_dependency[wakg]==0){ | |
for (m=0; m<ian; m++){ | |
for (n=m; n<jan; n++){ | |
tmpx = Hx[0][m][n].r + Hx[0][n][m].r; | |
Hx[0][m][n].r = tmpx; | |
Hx[0][n][m].r = tmpx; | |
tmpy = Hy[0][m][n].r + Hy[0][n][m].r; | |
Hy[0][m][n].r = tmpy; | |
Hy[0][n][m].r = tmpy; | |
tmpz = Hz[0][m][n].r + Hz[0][n][m].r; | |
Hz[0][m][n].r = tmpz; | |
Hz[0][n][m].r = tmpz; | |
tmpx = Hx[1][m][n].r + Hx[1][n][m].r; | |
Hx[1][m][n].r = tmpx; | |
Hx[1][n][m].r = tmpx; | |
tmpy = Hy[1][m][n].r + Hy[1][n][m].r; | |
Hy[1][m][n].r = tmpy; | |
Hy[1][n][m].r = tmpy; | |
tmpz = Hz[1][m][n].r + Hz[1][n][m].r; | |
Hz[1][m][n].r = tmpz; | |
Hz[1][n][m].r = tmpz; | |
} | |
} | |
} | |
else if (where_flag==1){ | |
kg = natn[Gc_AN][0]; | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_VPS_Pro[wakg]; | |
kl = RMI1[Mc_AN][q_AN][0]; | |
/**************************************************** | |
l-dependent non-local part | |
****************************************************/ | |
if (VPS_j_dependency[wakg]==0){ | |
if (Mj_AN<=Matomnum){ | |
Mj_AN2 = Mj_AN; | |
kl2 = RMI1[Mc_AN][q_AN][0]; | |
} | |
else{ | |
Mj_AN2 = Matomnum + 1; | |
kl2 = RMI1[Mc_AN][0][q_AN]; | |
} | |
if (kg==Core_Hole_Atom){ | |
/* calculate the multiplication */ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx[0] = 0.0; sumx[1] = 0.0; | |
sumy[0] = 0.0; sumy[1] = 0.0; | |
sumz[0] = 0.0; sumz[1] = 0.0; | |
for (i=0; i<Spe_Total_CNO[wakg]; i++){ | |
sumx[0] -= penalty[0][i]*OLP1[0][Mc_AN][0][m][i]*OLP1[1][Mj_AN2][kl2][n][i]; | |
sumy[0] -= penalty[0][i]*OLP1[0][Mc_AN][0][m][i]*OLP1[2][Mj_AN2][kl2][n][i]; | |
sumz[0] -= penalty[0][i]*OLP1[0][Mc_AN][0][m][i]*OLP1[3][Mj_AN2][kl2][n][i]; | |
sumx[1] -= penalty[1][i]*OLP1[0][Mc_AN][0][m][i]*OLP1[1][Mj_AN2][kl2][n][i]; | |
sumy[1] -= penalty[1][i]*OLP1[0][Mc_AN][0][m][i]*OLP1[2][Mj_AN2][kl2][n][i]; | |
sumz[1] -= penalty[1][i]*OLP1[0][Mc_AN][0][m][i]*OLP1[3][Mj_AN2][kl2][n][i]; | |
} | |
Hx[0][m][n].r += sumx[0]; | |
Hy[0][m][n].r += sumy[0]; | |
Hz[0][m][n].r += sumz[0]; | |
Hx[1][m][n].r += sumx[1]; | |
Hy[1][m][n].r += sumy[1]; | |
Hz[1][m][n].r += sumz[1]; | |
} | |
} | |
} /* if (kg==Core_Hole_Atom) */ | |
} | |
/**************************************************** | |
j-dependent non-local part | |
****************************************************/ | |
else if ( VPS_j_dependency[wakg]==1 ){ | |
if (Mj_AN<=Matomnum){ | |
Mj_AN2 = Mj_AN; | |
kl2 = RMI1[Mc_AN][q_AN][0]; | |
} | |
else{ | |
Mj_AN2 = Matomnum + 1; | |
kl2 = RMI1[Mc_AN][0][q_AN]; | |
} | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx0 = Complex(0.0,0.0); sumy0 = Complex(0.0,0.0); sumz0 = Complex(0.0,0.0); | |
sumx1 = Complex(0.0,0.0); sumy1 = Complex(0.0,0.0); sumz1 = Complex(0.0,0.0); | |
sumx2 = Complex(0.0,0.0); sumy2 = Complex(0.0,0.0); sumz2 = Complex(0.0,0.0); | |
/* 1 */ | |
dHCH_SO( &sumx0.r,&sumx0.i, &sumy0.r,&sumy0.i, &sumz0.r,&sumz0.i, | |
&sumx1.r,&sumx1.i, &sumy1.r,&sumy1.i, &sumz1.r,&sumz1.i, | |
&sumx2.r,&sumx2.i, &sumy2.r,&sumy2.i, &sumz2.r,&sumz2.i, | |
-1.0, | |
Mj_AN2,kl2,n, | |
Mc_AN, 0, m, | |
kg, wakg, | |
-penalty_value, | |
OLP1 ); | |
Hx[0][m][n].r += sumx0.r; /* up-up */ | |
Hy[0][m][n].r += sumy0.r; /* up-up */ | |
Hz[0][m][n].r += sumz0.r; /* up-up */ | |
Hx[1][m][n].r += sumx1.r; /* dn-dn */ | |
Hy[1][m][n].r += sumy1.r; /* dn-dn */ | |
Hz[1][m][n].r += sumz1.r; /* dn-dn */ | |
Hx[2][m][n].r += sumx2.r; /* up-dn */ | |
Hy[2][m][n].r += sumy2.r; /* up-dn */ | |
Hz[2][m][n].r += sumz2.r; /* up-dn */ | |
Hx[0][m][n].i += sumx0.i; /* up-up */ | |
Hy[0][m][n].i += sumy0.i; /* up-up */ | |
Hz[0][m][n].i += sumz0.i; /* up-up */ | |
Hx[1][m][n].i += sumx1.i; /* dn-dn */ | |
Hy[1][m][n].i += sumy1.i; /* dn-dn */ | |
Hz[1][m][n].i += sumz1.i; /* dn-dn */ | |
Hx[2][m][n].i += sumx2.i; /* up-dn */ | |
Hy[2][m][n].i += sumy2.i; /* up-dn */ | |
Hz[2][m][n].i += sumz2.i; /* up-dn */ | |
} | |
} | |
} | |
} | |
} /* if (h_AN==0) */ | |
else if (where_flag==0){ | |
/**************************************************** | |
H*ep*dH | |
if (h_AN!=0 && where_flag==0) | |
This happens | |
only if | |
( SpinP_switch==3 | |
&& | |
(SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1) | |
|| 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 | |
|| Zeeman_NCO_switch==1) | |
&& | |
q_AN==0 | |
) | |
****************************************************/ | |
for (k=0; k<=FNAN[Gc_AN]; k++){ | |
kg = natn[Gc_AN][k]; | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_VPS_Pro[wakg]; | |
kl = RMI1[Mc_AN][h_AN][k]; | |
if (Mi_AN<=Matomnum) Mi_AN2 = Mi_AN; | |
else Mi_AN2 = Matomnum + 1; | |
if (0<=kl && VPS_j_dependency[wakg]==1){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx0 = Complex(0.0,0.0); sumy0 = Complex(0.0,0.0); sumz0 = Complex(0.0,0.0); | |
sumx1 = Complex(0.0,0.0); sumy1 = Complex(0.0,0.0); sumz1 = Complex(0.0,0.0); | |
sumx2 = Complex(0.0,0.0); sumy2 = Complex(0.0,0.0); sumz2 = Complex(0.0,0.0); | |
dHCH_SO( &sumx0.r,&sumx0.i, &sumy0.r,&sumy0.i, &sumz0.r,&sumz0.i, | |
&sumx1.r,&sumx1.i, &sumy1.r,&sumy1.i, &sumz1.r,&sumz1.i, | |
&sumx2.r,&sumx2.i, &sumy2.r,&sumy2.i, &sumz2.r,&sumz2.i, | |
-1.0, | |
Mj_AN, k, n, | |
Mi_AN2, kl, m, | |
kg, wakg, | |
penalty_value, | |
OLP1 ); | |
Hx[0][m][n].r += sumx0.r; /* up-up */ | |
Hy[0][m][n].r += sumy0.r; /* up-up */ | |
Hz[0][m][n].r += sumz0.r; /* up-up */ | |
Hx[1][m][n].r += sumx1.r; /* dn-dn */ | |
Hy[1][m][n].r += sumy1.r; /* dn-dn */ | |
Hz[1][m][n].r += sumz1.r; /* dn-dn */ | |
Hx[2][m][n].r += sumx2.r; /* up-dn */ | |
Hy[2][m][n].r += sumy2.r; /* up-dn */ | |
Hz[2][m][n].r += sumz2.r; /* up-dn */ | |
Hx[0][m][n].i += sumx0.i; /* up-up */ | |
Hy[0][m][n].i += sumy0.i; /* up-up */ | |
Hz[0][m][n].i += sumz0.i; /* up-up */ | |
Hx[1][m][n].i += sumx1.i; /* dn-dn */ | |
Hy[1][m][n].i += sumy1.i; /* dn-dn */ | |
Hz[1][m][n].i += sumz1.i; /* dn-dn */ | |
Hx[2][m][n].i += sumx2.i; /* up-dn */ | |
Hy[2][m][n].i += sumy2.i; /* up-dn */ | |
Hz[2][m][n].i += sumz2.i; /* up-dn */ | |
} | |
} | |
} | |
} | |
} | |
/* if (h_AN!=0 && where_flag==1) */ | |
else { | |
/**************************************************** | |
dH*ep*H | |
****************************************************/ | |
kg = natn[Gc_AN][0]; | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_VPS_Pro[wakg]; | |
kl1 = RMI1[Mc_AN][0][h_AN]; | |
kl2 = RMI1[Mc_AN][0][q_AN]; | |
/**************************************************** | |
l-dependent non-local part | |
****************************************************/ | |
if (VPS_j_dependency[wakg]==0){ | |
if (kg==Core_Hole_Atom){ | |
/* calculate the multiplication */ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx[0] = 0.0; sumx[1] = 0.0; | |
sumy[0] = 0.0; sumy[1] = 0.0; | |
sumz[0] = 0.0; sumz[1] = 0.0; | |
for (i=0; i<Spe_Total_CNO[wakg]; i++){ | |
sumx[0] -= penalty[0][i]*OLP1[1][Matomnum+1][kl1][m][i]*OLP1[0][Matomnum+1][kl2][n][i]; | |
sumy[0] -= penalty[0][i]*OLP1[2][Matomnum+1][kl1][m][i]*OLP1[0][Matomnum+1][kl2][n][i]; | |
sumz[0] -= penalty[0][i]*OLP1[3][Matomnum+1][kl1][m][i]*OLP1[0][Matomnum+1][kl2][n][i]; | |
sumx[1] -= penalty[1][i]*OLP1[1][Matomnum+1][kl1][m][i]*OLP1[0][Matomnum+1][kl2][n][i]; | |
sumy[1] -= penalty[1][i]*OLP1[2][Matomnum+1][kl1][m][i]*OLP1[0][Matomnum+1][kl2][n][i]; | |
sumz[1] -= penalty[1][i]*OLP1[3][Matomnum+1][kl1][m][i]*OLP1[0][Matomnum+1][kl2][n][i]; | |
} | |
Hx[0][m][n].r = sumx[0]; | |
Hy[0][m][n].r = sumy[0]; | |
Hz[0][m][n].r = sumz[0]; | |
Hx[1][m][n].r = sumx[1]; | |
Hy[1][m][n].r = sumy[1]; | |
Hz[1][m][n].r = sumz[1]; | |
Hx[2][m][n].r = 0.0; | |
Hy[2][m][n].r = 0.0; | |
Hz[2][m][n].r = 0.0; | |
Hx[0][m][n].i = 0.0; | |
Hy[0][m][n].i = 0.0; | |
Hz[0][m][n].i = 0.0; | |
Hx[1][m][n].i = 0.0; | |
Hy[1][m][n].i = 0.0; | |
Hz[1][m][n].i = 0.0; | |
Hx[2][m][n].i = 0.0; | |
Hy[2][m][n].i = 0.0; | |
Hz[2][m][n].i = 0.0; | |
} | |
} | |
} | |
} | |
/**************************************************** | |
j-dependent non-local part | |
****************************************************/ | |
else if ( VPS_j_dependency[wakg]==1 ){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx0 = Complex(0.0,0.0); sumy0 = Complex(0.0,0.0); sumz0 = Complex(0.0,0.0); | |
sumx1 = Complex(0.0,0.0); sumy1 = Complex(0.0,0.0); sumz1 = Complex(0.0,0.0); | |
sumx2 = Complex(0.0,0.0); sumy2 = Complex(0.0,0.0); sumz2 = Complex(0.0,0.0); | |
/* 2 */ | |
dHCH_SO( &sumx0.r,&sumx0.i, &sumy0.r,&sumy0.i, &sumz0.r,&sumz0.i, | |
&sumx1.r,&sumx1.i, &sumy1.r,&sumy1.i, &sumz1.r,&sumz1.i, | |
&sumx2.r,&sumx2.i, &sumy2.r,&sumy2.i, &sumz2.r,&sumz2.i, | |
1.0, | |
Matomnum+1, kl1,m, | |
Matomnum+1, kl2,n, | |
kg, wakg, | |
-penalty_value, | |
OLP1 ); | |
Hx[0][m][n].r = sumx0.r; /* up-up */ | |
Hy[0][m][n].r = sumy0.r; /* up-up */ | |
Hz[0][m][n].r = sumz0.r; /* up-up */ | |
Hx[1][m][n].r = sumx1.r; /* dn-dn */ | |
Hy[1][m][n].r = sumy1.r; /* dn-dn */ | |
Hz[1][m][n].r = sumz1.r; /* dn-dn */ | |
Hx[2][m][n].r = sumx2.r; /* up-dn */ | |
Hy[2][m][n].r = sumy2.r; /* up-dn */ | |
Hz[2][m][n].r = sumz2.r; /* up-dn */ | |
Hx[0][m][n].i = sumx0.i; /* up-up */ | |
Hy[0][m][n].i = sumy0.i; /* up-up */ | |
Hz[0][m][n].i = sumz0.i; /* up-up */ | |
Hx[1][m][n].i = sumx1.i; /* dn-dn */ | |
Hy[1][m][n].i = sumy1.i; /* dn-dn */ | |
Hz[1][m][n].i = sumz1.i; /* dn-dn */ | |
Hx[2][m][n].i = sumx2.i; /* up-dn */ | |
Hy[2][m][n].i = sumy2.i; /* up-dn */ | |
Hz[2][m][n].i = sumz2.i; /* up-dn */ | |
} | |
} | |
} | |
/**************************************************** | |
H*ep*dH | |
****************************************************/ | |
if (q_AN!=0) { | |
kg = natn[Gc_AN][0]; | |
wakg = WhatSpecies[kg]; | |
kan = Spe_Total_VPS_Pro[wakg]; | |
kl1 = RMI1[Mc_AN][0][h_AN]; | |
kl2 = RMI1[Mc_AN][0][q_AN]; | |
/**************************************************** | |
l-dependent non-local part | |
****************************************************/ | |
if (VPS_j_dependency[wakg]==0){ | |
if (kg==Core_Hole_Atom){ | |
/* calculate the multiplication */ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx[0] = 0.0; sumx[1] = 0.0; | |
sumy[0] = 0.0; sumy[1] = 0.0; | |
sumz[0] = 0.0; sumz[1] = 0.0; | |
for (i=0; i<Spe_Total_CNO[wakg]; i++){ | |
sumx[0] -= penalty[0][i]*OLP1[0][Matomnum+1][kl1][m][i]*OLP1[1][Matomnum+1][kl2][n][i]; | |
sumy[0] -= penalty[0][i]*OLP1[0][Matomnum+1][kl1][m][i]*OLP1[2][Matomnum+1][kl2][n][i]; | |
sumz[0] -= penalty[0][i]*OLP1[0][Matomnum+1][kl1][m][i]*OLP1[3][Matomnum+1][kl2][n][i]; | |
sumx[1] -= penalty[1][i]*OLP1[0][Matomnum+1][kl1][m][i]*OLP1[1][Matomnum+1][kl2][n][i]; | |
sumy[1] -= penalty[1][i]*OLP1[0][Matomnum+1][kl1][m][i]*OLP1[2][Matomnum+1][kl2][n][i]; | |
sumz[1] -= penalty[1][i]*OLP1[0][Matomnum+1][kl1][m][i]*OLP1[3][Matomnum+1][kl2][n][i]; | |
} | |
Hx[0][m][n].r += sumx[0]; | |
Hy[0][m][n].r += sumy[0]; | |
Hz[0][m][n].r += sumz[0]; | |
Hx[1][m][n].r += sumx[1]; | |
Hy[1][m][n].r += sumy[1]; | |
Hz[1][m][n].r += sumz[1]; | |
} | |
} | |
} | |
} | |
/**************************************************** | |
j-dependent non-local part | |
****************************************************/ | |
else if ( VPS_j_dependency[wakg]==1 ){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
sumx0 = Complex(0.0,0.0); sumy0 = Complex(0.0,0.0); sumz0 = Complex(0.0,0.0); | |
sumx1 = Complex(0.0,0.0); sumy1 = Complex(0.0,0.0); sumz1 = Complex(0.0,0.0); | |
sumx2 = Complex(0.0,0.0); sumy2 = Complex(0.0,0.0); sumz2 = Complex(0.0,0.0); | |
/* 4 */ | |
dHCH_SO( &sumx0.r,&sumx0.i, &sumy0.r,&sumy0.i, &sumz0.r,&sumz0.i, | |
&sumx1.r,&sumx1.i, &sumy1.r,&sumy1.i, &sumz1.r,&sumz1.i, | |
&sumx2.r,&sumx2.i, &sumy2.r,&sumy2.i, &sumz2.r,&sumz2.i, | |
-1.0, | |
Matomnum+1, kl2,n, | |
Matomnum+1, kl1,m, | |
kg, wakg, | |
-penalty_value, | |
OLP1 ); | |
Hx[0][m][n].r += sumx0.r; /* up-up */ | |
Hy[0][m][n].r += sumy0.r; /* up-up */ | |
Hz[0][m][n].r += sumz0.r; /* up-up */ | |
Hx[1][m][n].r += sumx1.r; /* dn-dn */ | |
Hy[1][m][n].r += sumy1.r; /* dn-dn */ | |
Hz[1][m][n].r += sumz1.r; /* dn-dn */ | |
Hx[2][m][n].r += sumx2.r; /* up-dn */ | |
Hy[2][m][n].r += sumy2.r; /* up-dn */ | |
Hz[2][m][n].r += sumz2.r; /* up-dn */ | |
Hx[0][m][n].i += sumx0.i; /* up-up */ | |
Hy[0][m][n].i += sumy0.i; /* up-up */ | |
Hz[0][m][n].i += sumz0.i; /* up-up */ | |
Hx[1][m][n].i += sumx1.i; /* dn-dn */ | |
Hy[1][m][n].i += sumy1.i; /* dn-dn */ | |
Hz[1][m][n].i += sumz1.i; /* dn-dn */ | |
Hx[2][m][n].i += sumx2.i; /* up-dn */ | |
Hy[2][m][n].i += sumy2.i; /* up-dn */ | |
Hz[2][m][n].i += sumz2.i; /* up-dn */ | |
} | |
} | |
} | |
} | |
} /* else */ | |
/**************************************************** | |
contribution by dampingF | |
****************************************************/ | |
/* Qij * dH/dx */ | |
for (so=0; so<3; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].r = dmp*Hx[so][m][n].r; | |
Hy[so][m][n].r = dmp*Hy[so][m][n].r; | |
Hz[so][m][n].r = dmp*Hz[so][m][n].r; | |
Hx[so][m][n].i = dmp*Hx[so][m][n].i; | |
Hy[so][m][n].i = dmp*Hy[so][m][n].i; | |
Hz[so][m][n].i = dmp*Hz[so][m][n].i; | |
} | |
} | |
} | |
/* dQij/dx * H */ | |
if ( (h_AN==0 && q_AN!=0) || (h_AN!=0 && q_AN==0) ){ | |
if (h_AN==0) kl = q_AN; | |
else if (q_AN==0) kl = h_AN; | |
if (SpinP_switch==0) somax = 0; | |
else if (SpinP_switch==1) somax = 1; | |
else if (SpinP_switch==3) somax = 2; | |
r = Dis[Gc_AN][kl]; | |
if (rcut<=r) { | |
deri_dmp = 0.0; | |
tmp = 0.0; | |
} | |
else { | |
deri_dmp = deri_dampingF(rcut,r); | |
tmp = deri_dmp/dmp; | |
} | |
x0 = Gxyz[ig][1] + atv[Rni][1]; | |
y0 = Gxyz[ig][2] + atv[Rni][2]; | |
z0 = Gxyz[ig][3] + atv[Rni][3]; | |
x1 = Gxyz[jg][1] + atv[Rnj][1]; | |
y1 = Gxyz[jg][2] + atv[Rnj][2]; | |
z1 = Gxyz[jg][3] + atv[Rnj][3]; | |
/* for empty atoms or finite elemens basis */ | |
if (r<1.0e-10) r = 1.0e-10; | |
if (h_AN==0 && q_AN!=0){ | |
dx = tmp*(x0-x1)/r; | |
dy = tmp*(y0-y1)/r; | |
dz = tmp*(z0-z1)/r; | |
} | |
else if (h_AN!=0 && q_AN==0){ | |
dx = tmp*(x1-x0)/r; | |
dy = tmp*(y1-y0)/r; | |
dz = tmp*(z1-z0)/r; | |
} | |
if (SpinP_switch==0 || SpinP_switch==1){ | |
if (h_AN==0){ | |
for (so=0; so<=somax; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].r += HCH[so][Mc_AN][kl][m][n]*dx; | |
Hy[so][m][n].r += HCH[so][Mc_AN][kl][m][n]*dy; | |
Hz[so][m][n].r += HCH[so][Mc_AN][kl][m][n]*dz; | |
} | |
} | |
} | |
} | |
else if (q_AN==0){ | |
for (so=0; so<=somax; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].r += HCH[so][Mc_AN][kl][n][m]*dx; | |
Hy[so][m][n].r += HCH[so][Mc_AN][kl][n][m]*dy; | |
Hz[so][m][n].r += HCH[so][Mc_AN][kl][n][m]*dz; | |
} | |
} | |
} | |
} | |
} | |
else if (SpinP_switch==3){ | |
if (h_AN==0){ | |
for (so=0; so<=somax; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].r += HCH[so][Mc_AN][kl][m][n]*dx; | |
Hy[so][m][n].r += HCH[so][Mc_AN][kl][m][n]*dy; | |
Hz[so][m][n].r += HCH[so][Mc_AN][kl][m][n]*dz; | |
} | |
} | |
} | |
} | |
else if (q_AN==0){ | |
for (so=0; so<=somax; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].r += HCH[so][Mc_AN][kl][n][m]*dx; | |
Hy[so][m][n].r += HCH[so][Mc_AN][kl][n][m]*dy; | |
Hz[so][m][n].r += HCH[so][Mc_AN][kl][n][m]*dz; | |
} | |
} | |
} | |
} | |
if (SO_switch==1){ | |
if (h_AN==0){ | |
for (so=0; so<=somax; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].i += iHCH[so][Mc_AN][kl][m][n]*dx; | |
Hy[so][m][n].i += iHCH[so][Mc_AN][kl][m][n]*dy; | |
Hz[so][m][n].i += iHCH[so][Mc_AN][kl][m][n]*dz; | |
} | |
} | |
} | |
} | |
else if (q_AN==0){ | |
for (so=0; so<=somax; so++){ | |
for (m=0; m<ian; m++){ | |
for (n=0; n<jan; n++){ | |
Hx[so][m][n].i += iHCH[so][Mc_AN][kl][n][m]*dx; | |
Hy[so][m][n].i += iHCH[so][Mc_AN][kl][n][m]*dy; | |
Hz[so][m][n].i += iHCH[so][Mc_AN][kl][n][m]*dz; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
/* freeing of array */ | |
for (i=0; i<2; i++){ | |
free(penalty[i]); | |
} | |
free(penalty); | |
} | |
void dHCH_SO(double *sumx0r, double *sumx0i, double *sumy0r, double *sumy0i, double *sumz0r, double *sumz0i, | |
double *sumx1r, double *sumx1i, double *sumy1r, double *sumy1i, double *sumz1r, double *sumz1i, | |
double *sumx2r, double *sumx2i, double *sumy2r, double *sumy2i, double *sumz2r, double *sumz2i, | |
double fugou, | |
int Mc_AN, int k, int m, | |
int Mj_AN, int kl, int n, | |
int kg, int wakg, | |
double penalty_value, | |
double *****OLP1) | |
{ | |
int L,L2,l,mul,apply_flag; | |
double d12_m12,d12_p12; | |
double d32_m12,d32_p12,d32_m32,d32_p32; | |
double d52_m12,d52_p12,d52_m32,d52_p32,d52_m52,d52_p52; | |
double d72_m12,d72_p12,d72_m32,d72_p32,d72_m52,d72_p52,d72_m72,d72_p72; | |
if (kg!=Core_Hole_Atom) return; | |
/**************************************************** | |
set penalty coefficients | |
****************************************************/ | |
L = 0; | |
for (l=0; l<=Spe_MaxL_Basis[wakg]; l++){ | |
for (mul=0; mul<Spe_Num_Basis[wakg][l]; mul++){ | |
apply_flag = 0; | |
if ((strcmp(Core_Hole_Orbital,"s")==0) && l==0 && mul==0) { | |
L2 = 0; | |
apply_flag = 1; | |
} | |
else if ((strcmp(Core_Hole_Orbital,"p")==0) && l==1 && mul==0) { | |
L2 = 2; | |
apply_flag = 1; | |
} | |
else if ((strcmp(Core_Hole_Orbital,"d")==0) && l==2 && mul==0) { | |
L2 = 4; | |
apply_flag = 1; | |
} | |
else if ((strcmp(Core_Hole_Orbital,"f")==0) && l==3 && mul==0) { | |
L2 = 6; | |
apply_flag = 1; | |
} | |
if (apply_flag==1){ | |
/**************************************************** | |
set coefficients related to penalty | |
****************************************************/ | |
if (L2==0){ | |
if (Core_Hole_J==0){ | |
/* for Core_Hole_J==0 */ | |
d12_p12 = penalty_value; | |
d12_m12 = penalty_value; | |
} | |
else{ | |
/* for Core_Hole_J!=0 */ | |
d12_p12 = penalty_value*(Core_Hole_J==1); | |
d12_m12 = penalty_value*(Core_Hole_J==2); | |
} | |
} | |
else if (L2==2){ | |
if (Core_Hole_J==0){ | |
/* for Core_Hole_J==0 */ | |
d32_p32 = penalty_value/3.0; | |
d32_p12 = penalty_value/3.0; | |
d32_m12 = penalty_value/3.0; | |
d32_m32 = penalty_value/3.0; | |
d12_p12 = penalty_value/3.0; | |
d12_m12 = penalty_value/3.0; | |
} | |
else{ | |
/* for Core_Hole_J!=0 */ | |
d32_p32 = penalty_value/3.0*(Core_Hole_J==1); | |
d32_p12 = penalty_value/3.0*(Core_Hole_J==2); | |
d32_m12 = penalty_value/3.0*(Core_Hole_J==3); | |
d32_m32 = penalty_value/3.0*(Core_Hole_J==4); | |
d12_p12 = penalty_value/3.0*(Core_Hole_J==5); | |
d12_m12 = penalty_value/3.0*(Core_Hole_J==6); | |
} | |
} | |
else if (L2==4){ | |
if (Core_Hole_J==0){ | |
/* for Core_Hole_J==0 */ | |
d52_p52 = penalty_value/5.0; | |
d52_p32 = penalty_value/5.0; | |
d52_p12 = penalty_value/5.0; | |
d52_m12 = penalty_value/5.0; | |
d52_m32 = penalty_value/5.0; | |
d52_m52 = penalty_value/5.0; | |
d32_p32 = penalty_value/5.0; | |
d32_p12 = penalty_value/5.0; | |
d32_m12 = penalty_value/5.0; | |
d32_m32 = penalty_value/5.0; | |
} | |
else{ | |
/* for Core_Hole_J!=0 */ | |
d52_p52 = penalty_value/5.0*(Core_Hole_J==1); | |
d52_p32 = penalty_value/5.0*(Core_Hole_J==2); | |
d52_p12 = penalty_value/5.0*(Core_Hole_J==3); | |
d52_m12 = penalty_value/5.0*(Core_Hole_J==4); | |
d52_m32 = penalty_value/5.0*(Core_Hole_J==5); | |
d52_m52 = penalty_value/5.0*(Core_Hole_J==6); | |
d32_p32 = penalty_value/5.0*(Core_Hole_J==7); | |
d32_p12 = penalty_value/5.0*(Core_Hole_J==8); | |
d32_m12 = penalty_value/5.0*(Core_Hole_J==9); | |
d32_m32 = penalty_value/5.0*(Core_Hole_J==10); | |
} | |
} | |
else if (L2==6){ | |
if (Core_Hole_J==0){ | |
/* for Core_Hole_J==0 */ | |
d72_p72 = penalty_value/7.0; | |
d72_p52 = penalty_value/7.0; | |
d72_p32 = penalty_value/7.0; | |
d72_p12 = penalty_value/7.0; | |
d72_m12 = penalty_value/7.0; | |
d72_m32 = penalty_value/7.0; | |
d72_m52 = penalty_value/7.0; | |
d72_m72 = penalty_value/7.0; | |
d52_p52 = penalty_value/7.0; | |
d52_p32 = penalty_value/7.0; | |
d52_p12 = penalty_value/7.0; | |
d52_m12 = penalty_value/7.0; | |
d52_m32 = penalty_value/7.0; | |
d52_m52 = penalty_value/7.0; | |
} | |
else{ | |
/* for Core_Hole_J!=0 */ | |
d72_p72 = penalty_value/7.0*(Core_Hole_J==1); | |
d72_p52 = penalty_value/7.0*(Core_Hole_J==2); | |
d72_p32 = penalty_value/7.0*(Core_Hole_J==3); | |
d72_p12 = penalty_value/7.0*(Core_Hole_J==4); | |
d72_m12 = penalty_value/7.0*(Core_Hole_J==5); | |
d72_m32 = penalty_value/7.0*(Core_Hole_J==6); | |
d72_m52 = penalty_value/7.0*(Core_Hole_J==7); | |
d72_m72 = penalty_value/7.0*(Core_Hole_J==8); | |
d52_p52 = penalty_value/7.0*(Core_Hole_J==9); | |
d52_p32 = penalty_value/7.0*(Core_Hole_J==10); | |
d52_p12 = penalty_value/7.0*(Core_Hole_J==11); | |
d52_m12 = penalty_value/7.0*(Core_Hole_J==12); | |
d52_m32 = penalty_value/7.0*(Core_Hole_J==13); | |
d52_m52 = penalty_value/7.0*(Core_Hole_J==14); | |
} | |
} | |
/**************************************************** | |
off-diagonal contribution on up-dn | |
for spin non-collinear | |
****************************************************/ | |
if (SpinP_switch==3){ | |
/*************** | |
p | |
***************/ | |
if (L2==2){ | |
/* real contribution of l+1/2 to off-diagonal up-down matrix */ | |
*sumx2r += fugou*( | |
d32_m12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+2] | |
-d32_p12*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L ] ); | |
*sumy2r += fugou*( | |
d32_m12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+2] | |
-d32_p12*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L ] ); | |
*sumz2r += fugou*( | |
d32_m12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+2] | |
-d32_p12*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L ] ); | |
/* imaginary contribution of l+1/2 to off-diagonal up-down matrix */ | |
*sumx2i += fugou*( | |
-d32_m12*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+d32_p12*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] ); | |
*sumx2i += fugou*( | |
-d32_m12*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+d32_p12*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] ); | |
*sumx2i += fugou*( | |
-d32_m12*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+d32_p12*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] ); | |
/* real contribution of l-1/2 for to off-diagonal up-down matrix */ | |
*sumx2r -= fugou*( | |
d12_m12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+2] | |
-d12_p12*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L ] ); | |
*sumy2r -= fugou*( | |
d12_m12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+2] | |
-d12_p12*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L ] ); | |
*sumz2r -= fugou*( | |
d12_m12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+2] | |
-d12_p12*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L ] ); | |
/* imaginary contribution of l-1/2 to off-diagonal up-down matrix */ | |
*sumx2i -= fugou*( | |
-d12_m12*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+d12_p12*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] ); | |
*sumy2i -= fugou*( | |
-d12_m12*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+d12_p12*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] ); | |
*sumz2i -= fugou*( | |
-d12_m12*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+d12_p12*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] ); | |
} | |
/*************** | |
d | |
***************/ | |
else if (L2==4){ | |
/* real contribution of l+1/2 to off diagonal up-down matrix */ | |
*sumx2r += fugou*( | |
-sqrt(3.0)*d52_p12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(3.0)*d52_m12*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L ] | |
+d52_m32*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+3] | |
-d52_p32*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+1] | |
+d52_m32*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+4] | |
-d52_p32*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+2] ); | |
*sumy2r += fugou*( | |
-sqrt(3.0)*d52_p12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(3.0)*d52_m12*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L ] | |
+d52_m32*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+3] | |
-d52_p32*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+1] | |
+d52_m32*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+4] | |
-d52_p32*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+2] ); | |
*sumz2r += fugou*( | |
-sqrt(3.0)*d52_p12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(3.0)*d52_m12*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L ] | |
+d52_m32*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+3] | |
-d52_p32*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+1] | |
+d52_m32*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+4] | |
-d52_p32*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+2] ); | |
/* imaginary contribution of l+1/2 to off diagonal up-down matrix */ | |
*sumx2i += fugou*( | |
sqrt(3.0)*d52_p12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+4] | |
-sqrt(3.0)*d52_m12*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L ] | |
+d52_m32*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+4] | |
-d52_p32*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+1] | |
-d52_m32*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+3] | |
+d52_p32*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+2] ); | |
*sumy2i += fugou*( | |
sqrt(3.0)*d52_p12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+4] | |
-sqrt(3.0)*d52_m12*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L ] | |
+d52_m32*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+4] | |
-d52_p32*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+1] | |
-d52_m32*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+3] | |
+d52_p32*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+2] ); | |
*sumz2i += fugou*( | |
sqrt(3.0)*d52_p12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+4] | |
-sqrt(3.0)*d52_m12*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L ] | |
+d52_m32*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+4] | |
-d52_p32*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+1] | |
-d52_m32*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+3] | |
+d52_p32*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+2] ); | |
/* real contribution of l-1/2 for to diagonal up-down matrix */ | |
*sumx2r -= fugou*( | |
-sqrt(3.0)*d32_p12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(3.0)*d32_m12*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L ] | |
+d32_m32*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+3] | |
-d32_p32*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+1] | |
+d32_m32*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+4] | |
-d32_p32*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+2] ); | |
*sumy2r -= fugou*( | |
-sqrt(3.0)*d32_p12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(3.0)*d32_m12*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L ] | |
+d32_m32*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+3] | |
-d32_p32*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+1] | |
+d32_m32*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+4] | |
-d32_p32*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+2] ); | |
*sumz2r -= fugou*( | |
-sqrt(3.0)*d32_p12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(3.0)*d32_m12*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L ] | |
+d32_m32*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+3] | |
-d32_p32*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+1] | |
+d32_m32*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+4] | |
-d32_p32*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+2] ); | |
/* imaginary contribution of l-1/2 to off diagonal up-down matrix */ | |
*sumx2i -= fugou*( | |
sqrt(3.0)*d32_p12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+4] | |
-sqrt(3.0)*d32_m12*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L ] | |
+d32_m32*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+4] | |
-d32_p32*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+1] | |
-d32_m32*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+3] | |
+d32_p32*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+2] ); | |
*sumy2i -= fugou*( | |
sqrt(3.0)*d32_p12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+4] | |
-sqrt(3.0)*d32_m12*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L ] | |
+d32_m32*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+4] | |
-d32_p32*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+1] | |
-d32_m32*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+3] | |
+d32_p32*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+2] ); | |
*sumz2i -= fugou*( | |
sqrt(3.0)*d32_p12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+4] | |
-sqrt(3.0)*d32_m12*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L ] | |
+d32_m32*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+4] | |
-d32_p32*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+1] | |
-d32_m32*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+3] | |
+d32_p32*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+2] ); | |
} | |
/*************** | |
f | |
***************/ | |
else if (L2==6){ | |
/* real contribution of l+1/2 to off diagonal up-down matrix */ | |
*sumx2r += fugou*( | |
-sqrt(6.0)*d72_p12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+sqrt(6.0)*d72_m12*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] | |
-sqrt(2.5)*d72_p32*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(2.5)*d72_m32*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+1] | |
-sqrt(2.5)*d72_p32*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+4] | |
+sqrt(2.5)*d72_m32*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+2] | |
-sqrt(1.5)*d72_p52*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+5] | |
+sqrt(1.5)*d72_m52*OLP1[1][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+3] | |
-sqrt(1.5)*d72_p52*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+6] | |
+sqrt(1.5)*d72_m52*OLP1[1][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+4] ); | |
*sumy2r += fugou*( | |
-sqrt(6.0)*d72_p12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+sqrt(6.0)*d72_m12*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] | |
-sqrt(2.5)*d72_p32*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(2.5)*d72_m32*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+1] | |
-sqrt(2.5)*d72_p32*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+4] | |
+sqrt(2.5)*d72_m32*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+2] | |
-sqrt(1.5)*d72_p52*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+5] | |
+sqrt(1.5)*d72_m52*OLP1[2][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+3] | |
-sqrt(1.5)*d72_p52*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+6] | |
+sqrt(1.5)*d72_m52*OLP1[2][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+4] ); | |
*sumz2r += fugou*( | |
-sqrt(6.0)*d72_p12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+sqrt(6.0)*d72_m12*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] | |
-sqrt(2.5)*d72_p32*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(2.5)*d72_m32*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+1] | |
-sqrt(2.5)*d72_p32*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+4] | |
+sqrt(2.5)*d72_m32*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+2] | |
-sqrt(1.5)*d72_p52*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+5] | |
+sqrt(1.5)*d72_m52*OLP1[3][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+3] | |
-sqrt(1.5)*d72_p52*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+6] | |
+sqrt(1.5)*d72_m52*OLP1[3][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+4] ); | |
/* imaginary contribution of l+1/2 to off diagonal up-down matrix */ | |
*sumx2i += fugou*( | |
sqrt(6.0)*d72_p12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+2] | |
-sqrt(6.0)*d72_m12*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L ] | |
+sqrt(2.5)*d72_p32*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+4] | |
-sqrt(2.5)*d72_m32*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+1] | |
-sqrt(2.5)*d72_p32*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(2.5)*d72_m32*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+2] | |
+sqrt(1.5)*d72_p52*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+6] | |
-sqrt(1.5)*d72_m52*OLP1[1][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+3] | |
-sqrt(1.5)*d72_p52*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+5] | |
+sqrt(1.5)*d72_m52*OLP1[1][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+4] ); | |
*sumy2i += fugou*( | |
sqrt(6.0)*d72_p12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+2] | |
-sqrt(6.0)*d72_m12*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L ] | |
+sqrt(2.5)*d72_p32*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+4] | |
-sqrt(2.5)*d72_m32*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+1] | |
-sqrt(2.5)*d72_p32*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(2.5)*d72_m32*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+2] | |
+sqrt(1.5)*d72_p52*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+6] | |
-sqrt(1.5)*d72_m52*OLP1[2][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+3] | |
-sqrt(1.5)*d72_p52*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+5] | |
+sqrt(1.5)*d72_m52*OLP1[2][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+4] ); | |
*sumz2i += fugou*( | |
sqrt(6.0)*d72_p12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+2] | |
-sqrt(6.0)*d72_m12*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L ] | |
+sqrt(2.5)*d72_p32*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+4] | |
-sqrt(2.5)*d72_m32*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+1] | |
-sqrt(2.5)*d72_p32*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(2.5)*d72_m32*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+2] | |
+sqrt(1.5)*d72_p52*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+6] | |
-sqrt(1.5)*d72_m52*OLP1[3][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+3] | |
-sqrt(1.5)*d72_p52*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+5] | |
+sqrt(1.5)*d72_m52*OLP1[3][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+4] ); | |
/* real contribution of l-1/2 for to off-diagonal up-down matrix */ | |
*sumx2r -= fugou*( | |
-sqrt(6.0)*d52_p12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+sqrt(6.0)*d52_m12*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] | |
-sqrt(2.5)*d52_p32*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(2.5)*d52_m32*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+1] | |
-sqrt(2.5)*d52_p32*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+4] | |
+sqrt(2.5)*d52_m32*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+2] | |
-sqrt(1.5)*d52_p52*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+5] | |
+sqrt(1.5)*d52_m52*OLP1[1][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+3] | |
-sqrt(1.5)*d52_p52*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+6] | |
+sqrt(1.5)*d52_m52*OLP1[1][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+4] ); | |
*sumy2r -= fugou*( | |
-sqrt(6.0)*d52_p12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+sqrt(6.0)*d52_m12*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] | |
-sqrt(2.5)*d52_p32*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(2.5)*d52_m32*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+1] | |
-sqrt(2.5)*d52_p32*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+4] | |
+sqrt(2.5)*d52_m32*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+2] | |
-sqrt(1.5)*d52_p52*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+5] | |
+sqrt(1.5)*d52_m52*OLP1[2][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+3] | |
-sqrt(1.5)*d52_p52*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+6] | |
+sqrt(1.5)*d52_m52*OLP1[2][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+4] ); | |
*sumz2r -= fugou*( | |
-sqrt(6.0)*d52_p12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+sqrt(6.0)*d52_m12*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] | |
-sqrt(2.5)*d52_p32*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(2.5)*d52_m32*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+1] | |
-sqrt(2.5)*d52_p32*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+4] | |
+sqrt(2.5)*d52_m32*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+2] | |
-sqrt(1.5)*d52_p52*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+5] | |
+sqrt(1.5)*d52_m52*OLP1[3][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+3] | |
-sqrt(1.5)*d52_p52*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+6] | |
+sqrt(1.5)*d52_m52*OLP1[3][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+4] ); | |
/* imaginary contribution of l-1/2 to off diagonal up-down matrix */ | |
*sumx2i -= fugou*( | |
sqrt(6.0)*d52_p12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+2] | |
-sqrt(6.0)*d52_m12*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L ] | |
+sqrt(2.5)*d52_p32*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+4] | |
-sqrt(2.5)*d52_m32*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+1] | |
-sqrt(2.5)*d52_p32*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(2.5)*d52_m32*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+2] | |
+sqrt(1.5)*d52_p52*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+6] | |
-sqrt(1.5)*d52_m52*OLP1[1][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+3] | |
-sqrt(1.5)*d52_p52*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+5] | |
+sqrt(1.5)*d52_m52*OLP1[1][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+4] ); | |
*sumy2i -= fugou*( | |
sqrt(6.0)*d52_p12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+2] | |
-sqrt(6.0)*d52_m12*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L ] | |
+sqrt(2.5)*d52_p32*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+4] | |
-sqrt(2.5)*d52_m32*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+1] | |
-sqrt(2.5)*d52_p32*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(2.5)*d52_m32*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+2] | |
+sqrt(1.5)*d52_p52*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+6] | |
-sqrt(1.5)*d52_m52*OLP1[2][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+3] | |
-sqrt(1.5)*d52_p52*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+5] | |
+sqrt(1.5)*d52_m52*OLP1[2][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+4] ); | |
*sumz2i -= fugou*( | |
sqrt(6.0)*d52_p12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+2] | |
-sqrt(6.0)*d52_m12*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L ] | |
+sqrt(2.5)*d52_p32*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+4] | |
-sqrt(2.5)*d52_m32*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+1] | |
-sqrt(2.5)*d52_p32*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+3] | |
+sqrt(2.5)*d52_m32*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+2] | |
+sqrt(1.5)*d52_p52*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+6] | |
-sqrt(1.5)*d52_m52*OLP1[3][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+3] | |
-sqrt(1.5)*d52_p52*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+5] | |
+sqrt(1.5)*d52_m52*OLP1[3][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+4] ); | |
} | |
} /* if (SpinP_switch==3) */ | |
/**************************************************** | |
off-diagonal contribution on up-up and dn-dn | |
****************************************************/ | |
/* p */ | |
if (L2==2){ | |
/* contribution of l+1/2 for up spin */ | |
*sumx0i += 0.5*fugou*( | |
+( d32_m12-3.0*d32_p32)*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+(-d32_m12+3.0*d32_p32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] ); | |
*sumy0i += 0.5*fugou*( | |
+( d32_m12-3.0*d32_p32)*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+(-d32_m12+3.0*d32_p32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] ); | |
*sumz0i += 0.5*fugou*( | |
+( d32_m12-3.0*d32_p32)*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+(-d32_m12+3.0*d32_p32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] ); | |
/* contribution of l+1/2 for down spin */ | |
*sumx1i += 0.5*fugou*( | |
+(-d32_p12+3.0*d32_m32)*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+(+d32_p12-3.0*d32_m32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] ); | |
*sumy1i += 0.5*fugou*( | |
+(-d32_p12+3.0*d32_m32)*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+(+d32_p12-3.0*d32_m32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] ); | |
*sumz1i += 0.5*fugou*( | |
+(-d32_p12+3.0*d32_m32)*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+(+d32_p12-3.0*d32_m32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] ); | |
/* contribution of l-1/2 for up spin */ | |
*sumx0i += fugou*( | |
d12_m12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
-d12_m12*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] ); | |
*sumy0i += fugou*( | |
d12_m12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
-d12_m12*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] ); | |
*sumz0i += fugou*( | |
d12_m12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
-d12_m12*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] ); | |
/* contribution of l-1/2 for down spin */ | |
*sumx1i += fugou*( | |
-d12_p12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+d12_p12*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] ); | |
*sumy1i += fugou*( | |
-d12_p12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+d12_p12*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] ); | |
*sumz1i += fugou*( | |
-d12_p12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L+1] | |
+d12_p12*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L ] ); | |
} | |
/* d */ | |
else if (L2==4){ | |
/* contribution of l+1/2 for up spin */ | |
*sumx0i += 0.5*fugou*( | |
+( d52_m32-5.0*d52_p52)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+( -d52_m32+5.0*d52_p52)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
+( 2.0*d52_m12-4.0*d52_p32)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
+(-2.0*d52_m12+4.0*d52_p32)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] ); | |
*sumy0i += 0.5*fugou*( | |
+( d52_m32-5.0*d52_p52)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+( -d52_m32+5.0*d52_p52)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
+( 2.0*d52_m12-4.0*d52_p32)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
+(-2.0*d52_m12+4.0*d52_p32)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] ); | |
*sumz0i += 0.5*fugou*( | |
+( d52_m32-5.0*d52_p52)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+( -d52_m32+5.0*d52_p52)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
+( 2.0*d52_m12-4.0*d52_p32)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
+(-2.0*d52_m12+4.0*d52_p32)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] ); | |
/* contribution of l+1/2 for down spin */ | |
*sumx1i += 0.5*fugou*( | |
-( d52_p32-5.0*d52_m52)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
-( -d52_p32+5.0*d52_m52)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
-( 2.0*d52_p12-4.0*d52_m32)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
-(-2.0*d52_p12+4.0*d52_m32)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] ); | |
*sumy1i += 0.5*fugou*( | |
-( d52_p32-5.0*d52_m52)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
-( -d52_p32+5.0*d52_m52)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
-( 2.0*d52_p12-4.0*d52_m32)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
-(-2.0*d52_p12+4.0*d52_m32)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] ); | |
*sumz1i += 0.5*fugou*( | |
-( d52_p32-5.0*d52_m52)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
-( -d52_p32+5.0*d52_m52)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
-( 2.0*d52_p12-4.0*d52_m32)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
-(-2.0*d52_p12+4.0*d52_m32)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] ); | |
/* contribution of l-1/2 for up spin */ | |
*sumx0i += 0.5*fugou*( | |
( 4.0*d32_m32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+( -4.0*d32_m32)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
+( 3.0*d32_m12-d32_p32)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
+(-3.0*d32_m12+d32_p32)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] ); | |
*sumy0i += 0.5*fugou*( | |
( 4.0*d32_m32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+( -4.0*d32_m32)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
+( 3.0*d32_m12-d32_p32)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
+(-3.0*d32_m12+d32_p32)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] ); | |
*sumz0i += 0.5*fugou*( | |
( 4.0*d32_m32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+( -4.0*d32_m32)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
+( 3.0*d32_m12-d32_p32)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
+(-3.0*d32_m12+d32_p32)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] ); | |
/* contribution of l-1/2 for down spin */ | |
*sumx1i += 0.5*fugou*( | |
( -4.0*d32_p32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+( +4.0*d32_p32)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
-( 3.0*d32_p12-d32_m32)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
-(-3.0*d32_p12+d32_m32)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] ); | |
*sumy1i += 0.5*fugou*( | |
( -4.0*d32_p32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+( +4.0*d32_p32)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
-( 3.0*d32_p12-d32_m32)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
-(-3.0*d32_p12+d32_m32)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] ); | |
*sumz1i += 0.5*fugou*( | |
( -4.0*d32_p32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+( +4.0*d32_p32)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
-( 3.0*d32_p12-d32_m32)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
-(-3.0*d32_p12+d32_m32)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] ); | |
} | |
/* f */ | |
else if (L2==6){ | |
/* contribution of l+1/2 for up spin */ | |
*sumx0i += 0.5*fugou*( | |
( 3.0*d72_m12-5.0*d72_p32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+(-3.0*d72_m12+5.0*d72_p32)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
+( 2.0*d72_m32-6.0*d72_p52)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
+(-2.0*d72_m32+6.0*d72_p52)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] | |
+( 1.0*d72_m52-7.0*d72_p72)*OLP1[1][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+6] | |
+(-1.0*d72_m52+7.0*d72_p72)*OLP1[1][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+5] ); | |
*sumy0i += 0.5*fugou*( | |
( 3.0*d72_m12-5.0*d72_p32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+(-3.0*d72_m12+5.0*d72_p32)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
+( 2.0*d72_m32-6.0*d72_p52)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
+(-2.0*d72_m32+6.0*d72_p52)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] | |
+( 1.0*d72_m52-7.0*d72_p72)*OLP1[2][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+6] | |
+(-1.0*d72_m52+7.0*d72_p72)*OLP1[2][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+5] ); | |
*sumz0i += 0.5*fugou*( | |
( 3.0*d72_m12-5.0*d72_p32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+(-3.0*d72_m12+5.0*d72_p32)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
+( 2.0*d72_m32-6.0*d72_p52)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
+(-2.0*d72_m32+6.0*d72_p52)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] | |
+( 1.0*d72_m52-7.0*d72_p72)*OLP1[3][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+6] | |
+(-1.0*d72_m52+7.0*d72_p72)*OLP1[3][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+5] ); | |
/* contribution of l+1/2 for down spin */ | |
*sumx1i += 0.5*fugou*( | |
-( 3.0*d72_p12-5.0*d72_m32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
-(-3.0*d72_p12+5.0*d72_m32)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
-( 2.0*d72_p32-6.0*d72_m52)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
-(-2.0*d72_p32+6.0*d72_m52)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] | |
-( 1.0*d72_p52-7.0*d72_m72)*OLP1[1][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+6] | |
-(-1.0*d72_p52+7.0*d72_m72)*OLP1[1][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+5] ); | |
*sumy1i += 0.5*fugou*( | |
-( 3.0*d72_p12-5.0*d72_m32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
-(-3.0*d72_p12+5.0*d72_m32)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
-( 2.0*d72_p32-6.0*d72_m52)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
-(-2.0*d72_p32+6.0*d72_m52)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] | |
-( 1.0*d72_p52-7.0*d72_m72)*OLP1[2][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+6] | |
-(-1.0*d72_p52+7.0*d72_m72)*OLP1[2][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+5] ); | |
*sumz1i += 0.5*fugou*( | |
-( 3.0*d72_p12-5.0*d72_m32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
-(-3.0*d72_p12+5.0*d72_m32)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
-( 2.0*d72_p32-6.0*d72_m52)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
-(-2.0*d72_p32+6.0*d72_m52)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] | |
-( 1.0*d72_p52-7.0*d72_m72)*OLP1[3][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+6] | |
-(-1.0*d72_p52+7.0*d72_m72)*OLP1[3][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+5] ); | |
/* contribution of l-1/2 for up spin */ | |
*sumx0i += 0.5*fugou*( | |
( 4.0*d52_m12-2.0*d52_p32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+(-4.0*d52_m12+2.0*d52_p32)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
+( 5.0*d52_m32-1.0*d52_p52)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
+(-5.0*d52_m32+1.0*d52_p52)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] | |
+(+6.0*d52_m52 )*OLP1[1][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+6] | |
+(-6.0*d52_m52 )*OLP1[1][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+5] ); | |
*sumy0i += 0.5*fugou*( | |
( 4.0*d52_m12-2.0*d52_p32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+(-4.0*d52_m12+2.0*d52_p32)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
+( 5.0*d52_m32-1.0*d52_p52)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
+(-5.0*d52_m32+1.0*d52_p52)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] | |
+(+6.0*d52_m52 )*OLP1[2][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+6] | |
+(-6.0*d52_m52 )*OLP1[2][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+5] ); | |
*sumz0i += 0.5*fugou*( | |
( 4.0*d52_m12-2.0*d52_p32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
+(-4.0*d52_m12+2.0*d52_p32)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
+( 5.0*d52_m32-1.0*d52_p52)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
+(-5.0*d52_m32+1.0*d52_p52)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] | |
+(+6.0*d52_m52 )*OLP1[3][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+6] | |
+(-6.0*d52_m52 )*OLP1[3][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+5] ); | |
/* contribution of l-1/2 for down spin */ | |
*sumx1i += 0.5*fugou*( | |
-( 4.0*d52_p12-2.0*d52_m32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
-(-4.0*d52_p12+2.0*d52_m32)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
-( 5.0*d52_p32-1.0*d52_m52)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
-(-5.0*d52_p32+1.0*d52_m52)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] | |
-(+6.0*d52_p52 )*OLP1[1][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+6] | |
-(-6.0*d52_p52 )*OLP1[1][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+5] ); | |
*sumy1i += 0.5*fugou*( | |
-( 4.0*d52_p12-2.0*d52_m32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
-(-4.0*d52_p12+2.0*d52_m32)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
-( 5.0*d52_p32-1.0*d52_m52)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
-(-5.0*d52_p32+1.0*d52_m52)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] | |
-(+6.0*d52_p52 )*OLP1[2][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+6] | |
-(-6.0*d52_p52 )*OLP1[2][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+5] ); | |
*sumz1i += 0.5*fugou*( | |
-( 4.0*d52_p12-2.0*d52_m32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+2] | |
-(-4.0*d52_p12+2.0*d52_m32)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+1] | |
-( 5.0*d52_p32-1.0*d52_m52)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+4] | |
-(-5.0*d52_p32+1.0*d52_m52)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+3] | |
-(+6.0*d52_p52 )*OLP1[3][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+6] | |
-(-6.0*d52_p52 )*OLP1[3][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+5] ); | |
} | |
/**************************************************** | |
diagonal contribution on up-up and dn-dn | |
****************************************************/ | |
/* s */ | |
if (L2==0){ | |
/* VNL for j=l+1/2 */ | |
*sumx0r += d12_p12*OLP1[1][Mc_AN][k][m][L]*OLP1[0][Mj_AN][kl][n][L]; | |
*sumy0r += d12_p12*OLP1[2][Mc_AN][k][m][L]*OLP1[0][Mj_AN][kl][n][L]; | |
*sumz0r += d12_p12*OLP1[3][Mc_AN][k][m][L]*OLP1[0][Mj_AN][kl][n][L]; | |
*sumx1r += d12_m12*OLP1[1][Mc_AN][k][m][L]*OLP1[0][Mj_AN][kl][n][L]; | |
*sumy1r += d12_m12*OLP1[2][Mc_AN][k][m][L]*OLP1[0][Mj_AN][kl][n][L]; | |
*sumz1r += d12_m12*OLP1[3][Mc_AN][k][m][L]*OLP1[0][Mj_AN][kl][n][L]; | |
/* note that VNL for j=l-1/2 is zero */ | |
} | |
/* p */ | |
else if (L2==2){ | |
/* VNL for j=l+1/2 */ | |
*sumx0r += 0.5*(d32_m12+3.0*d32_p32)*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumx0r += 0.5*(d32_m12+3.0*d32_p32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumx0r += 0.5*( 4.0*d32_p12)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumy0r += 0.5*(d32_m12+3.0*d32_p32)*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumy0r += 0.5*(d32_m12+3.0*d32_p32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumy0r += 0.5*( 4.0*d32_p12)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumz0r += 0.5*(d32_m12+3.0*d32_p32)*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumz0r += 0.5*(d32_m12+3.0*d32_p32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumz0r += 0.5*( 4.0*d32_p12)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumx1r += 0.5*(d32_p12+3.0*d32_m32)*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumx1r += 0.5*(d32_p12+3.0*d32_m32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumx1r += 0.5*( 4.0*d32_m12)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumy1r += 0.5*(d32_p12+3.0*d32_m32)*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumy1r += 0.5*(d32_p12+3.0*d32_m32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumy1r += 0.5*( 4.0*d32_m12)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumz1r += 0.5*(d32_p12+3.0*d32_m32)*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumz1r += 0.5*(d32_p12+3.0*d32_m32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumz1r += 0.5*( 4.0*d32_m12)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
/* VNL for j=l-1/2 */ | |
*sumx0r += d12_m12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumx0r += d12_m12*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumx0r += d12_p12*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumy0r += d12_m12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumy0r += d12_m12*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumy0r += d12_p12*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumz0r += d12_m12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumz0r += d12_m12*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumz0r += d12_p12*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumx1r += d12_p12*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumx1r += d12_p12*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumx1r += d12_m12*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumy1r += d12_p12*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumy1r += d12_p12*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumy1r += d12_m12*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumz1r += d12_p12*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumz1r += d12_p12*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumz1r += d12_m12*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
} | |
/* d */ | |
else if (L2==4){ | |
/* VNL for j=l+1/2 */ | |
*sumx0r += 0.5*( 6.0*d52_p12)*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumx0r += 0.5*(1.0*d52_m32+5.0*d52_p52)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumx0r += 0.5*(1.0*d52_m32+5.0*d52_p52)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumx0r += 0.5*(2.0*d52_m12+4.0*d52_p32)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumx0r += 0.5*(2.0*d52_m12+4.0*d52_p32)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumy0r += 0.5*( 6.0*d52_p12)*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumy0r += 0.5*(1.0*d52_m32+5.0*d52_p52)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumy0r += 0.5*(1.0*d52_m32+5.0*d52_p52)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumy0r += 0.5*(2.0*d52_m12+4.0*d52_p32)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumy0r += 0.5*(2.0*d52_m12+4.0*d52_p32)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumz0r += 0.5*( 6.0*d52_p12)*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumz0r += 0.5*(1.0*d52_m32+5.0*d52_p52)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumz0r += 0.5*(1.0*d52_m32+5.0*d52_p52)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumz0r += 0.5*(2.0*d52_m12+4.0*d52_p32)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumz0r += 0.5*(2.0*d52_m12+4.0*d52_p32)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumx1r += 0.5*( 6.0*d52_m12)*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumx1r += 0.5*(1.0*d52_p32+5.0*d52_m52)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumx1r += 0.5*(1.0*d52_p32+5.0*d52_m52)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumx1r += 0.5*(2.0*d52_p12+4.0*d52_m32)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumx1r += 0.5*(2.0*d52_p12+4.0*d52_m32)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumy1r += 0.5*( 6.0*d52_m12)*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumy1r += 0.5*(1.0*d52_p32+5.0*d52_m52)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumy1r += 0.5*(1.0*d52_p32+5.0*d52_m52)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumy1r += 0.5*(2.0*d52_p12+4.0*d52_m32)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumy1r += 0.5*(2.0*d52_p12+4.0*d52_m32)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumz1r += 0.5*( 6.0*d52_m12)*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumz1r += 0.5*(1.0*d52_p32+5.0*d52_m52)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumz1r += 0.5*(1.0*d52_p32+5.0*d52_m52)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumz1r += 0.5*(2.0*d52_p12+4.0*d52_m32)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumz1r += 0.5*(2.0*d52_p12+4.0*d52_m32)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
/* VNL for j=l-1/2 */ | |
*sumx0r += 0.5*( 4.0*d32_p12)*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumx0r += 0.5*( 4.0*d32_m32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumx0r += 0.5*( 4.0*d32_m32)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumx0r += 0.5*(3.0*d32_m12+1.0*d32_p32)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumx0r += 0.5*(3.0*d32_m12+1.0*d32_p32)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumy0r += 0.5*( 4.0*d32_p12)*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumy0r += 0.5*( 4.0*d32_m32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumy0r += 0.5*( 4.0*d32_m32)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumy0r += 0.5*(3.0*d32_m12+1.0*d32_p32)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumy0r += 0.5*(3.0*d32_m12+1.0*d32_p32)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumz0r += 0.5*( 4.0*d32_p12)*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumz0r += 0.5*( 4.0*d32_m32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumz0r += 0.5*( 4.0*d32_m32)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumz0r += 0.5*(3.0*d32_m12+1.0*d32_p32)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumz0r += 0.5*(3.0*d32_m12+1.0*d32_p32)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumx1r += 0.5*( 4.0*d32_m12)*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumx1r += 0.5*( 4.0*d32_p32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumx1r += 0.5*( 4.0*d32_p32)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumx1r += 0.5*(3.0*d32_p12+1.0*d32_m32)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumx1r += 0.5*(3.0*d32_p12+1.0*d32_m32)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumy1r += 0.5*( 4.0*d32_m12)*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumy1r += 0.5*( 4.0*d32_p32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumy1r += 0.5*( 4.0*d32_p32)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumy1r += 0.5*(3.0*d32_p12+1.0*d32_m32)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumy1r += 0.5*(3.0*d32_p12+1.0*d32_m32)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumz1r += 0.5*( 4.0*d32_m12)*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumz1r += 0.5*( 4.0*d32_p32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumz1r += 0.5*( 4.0*d32_p32)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumz1r += 0.5*(3.0*d32_p12+1.0*d32_m32)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumz1r += 0.5*(3.0*d32_p12+1.0*d32_m32)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
} | |
/* f */ | |
else if (L2==6){ | |
/* VNL for j=l+1/2 */ | |
*sumx0r += 0.5*( 8.0*d72_p12)*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumx0r += 0.5*(3.0*d72_m12+5.0*d72_p32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumx0r += 0.5*(3.0*d72_m12+5.0*d72_p32)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumx0r += 0.5*(2.0*d72_m32+6.0*d72_p52)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumx0r += 0.5*(2.0*d72_m32+6.0*d72_p52)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumx0r += 0.5*(1.0*d72_m52+7.0*d72_p72)*OLP1[1][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+5]; | |
*sumx0r += 0.5*(1.0*d72_m52+7.0*d72_p72)*OLP1[1][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+6]; | |
*sumy0r += 0.5*( 8.0*d72_p12)*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumy0r += 0.5*(3.0*d72_m12+5.0*d72_p32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumy0r += 0.5*(3.0*d72_m12+5.0*d72_p32)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumy0r += 0.5*(2.0*d72_m32+6.0*d72_p52)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumy0r += 0.5*(2.0*d72_m32+6.0*d72_p52)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumy0r += 0.5*(1.0*d72_m52+7.0*d72_p72)*OLP1[2][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+5]; | |
*sumy0r += 0.5*(1.0*d72_m52+7.0*d72_p72)*OLP1[2][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+6]; | |
*sumz0r += 0.5*( 8.0*d72_p12)*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumz0r += 0.5*(3.0*d72_m12+5.0*d72_p32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumz0r += 0.5*(3.0*d72_m12+5.0*d72_p32)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumz0r += 0.5*(2.0*d72_m32+6.0*d72_p52)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumz0r += 0.5*(2.0*d72_m32+6.0*d72_p52)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumz0r += 0.5*(1.0*d72_m52+7.0*d72_p72)*OLP1[3][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+5]; | |
*sumz0r += 0.5*(1.0*d72_m52+7.0*d72_p72)*OLP1[3][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+6]; | |
*sumx1r += 0.5*( 8.0*d72_m12)*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumx1r += 0.5*(3.0*d72_p12+5.0*d72_m32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumx1r += 0.5*(3.0*d72_p12+5.0*d72_m32)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumx1r += 0.5*(2.0*d72_p32+6.0*d72_m52)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumx1r += 0.5*(2.0*d72_p32+6.0*d72_m52)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumx1r += 0.5*(1.0*d72_p52+7.0*d72_m72)*OLP1[1][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+5]; | |
*sumx1r += 0.5*(1.0*d72_p52+7.0*d72_m72)*OLP1[1][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+6]; | |
*sumy1r += 0.5*( 8.0*d72_m12)*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumy1r += 0.5*(3.0*d72_p12+5.0*d72_m32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumy1r += 0.5*(3.0*d72_p12+5.0*d72_m32)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumy1r += 0.5*(2.0*d72_p32+6.0*d72_m52)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumy1r += 0.5*(2.0*d72_p32+6.0*d72_m52)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumy1r += 0.5*(1.0*d72_p52+7.0*d72_m72)*OLP1[2][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+5]; | |
*sumy1r += 0.5*(1.0*d72_p52+7.0*d72_m72)*OLP1[2][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+6]; | |
*sumz1r += 0.5*( 8.0*d72_m12)*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumz1r += 0.5*(3.0*d72_p12+5.0*d72_m32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumz1r += 0.5*(3.0*d72_p12+5.0*d72_m32)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumz1r += 0.5*(2.0*d72_p32+6.0*d72_m52)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumz1r += 0.5*(2.0*d72_p32+6.0*d72_m52)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumz1r += 0.5*(1.0*d72_p52+7.0*d72_m72)*OLP1[3][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+5]; | |
*sumz1r += 0.5*(1.0*d72_p52+7.0*d72_m72)*OLP1[3][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+6]; | |
/* VNL for j=l-1/2 */ | |
*sumx0r += 0.5*( 6.0*d52_p12)*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumx0r += 0.5*(4.0*d52_m12+2.0*d52_p32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumx0r += 0.5*(4.0*d52_m12+2.0*d52_p32)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumx0r += 0.5*(5.0*d52_m32+1.0*d52_p52)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumx0r += 0.5*(5.0*d52_m32+1.0*d52_p52)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumx0r += 0.5*(6.0*d52_m52 )*OLP1[1][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+5]; | |
*sumx0r += 0.5*(6.0*d52_m52 )*OLP1[1][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+6]; | |
*sumy0r += 0.5*( 6.0*d52_p12)*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumy0r += 0.5*(4.0*d52_m12+2.0*d52_p32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumy0r += 0.5*(4.0*d52_m12+2.0*d52_p32)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumy0r += 0.5*(5.0*d52_m32+1.0*d52_p52)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumy0r += 0.5*(5.0*d52_m32+1.0*d52_p52)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumy0r += 0.5*(6.0*d52_m52 )*OLP1[2][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+5]; | |
*sumy0r += 0.5*(6.0*d52_m52 )*OLP1[2][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+6]; | |
*sumz0r += 0.5*( 6.0*d52_p12)*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumz0r += 0.5*(4.0*d52_m12+2.0*d52_p32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumz0r += 0.5*(4.0*d52_m12+2.0*d52_p32)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumz0r += 0.5*(5.0*d52_m32+1.0*d52_p52)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumz0r += 0.5*(5.0*d52_m32+1.0*d52_p52)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumz0r += 0.5*(6.0*d52_m52 )*OLP1[3][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+5]; | |
*sumz0r += 0.5*(6.0*d52_m52 )*OLP1[3][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+6]; | |
*sumx1r += 0.5*( 6.0*d52_m12)*OLP1[1][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumx1r += 0.5*(4.0*d52_p12+2.0*d52_m32)*OLP1[1][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumx1r += 0.5*(4.0*d52_p12+2.0*d52_m32)*OLP1[1][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumx1r += 0.5*(5.0*d52_p32+1.0*d52_m52)*OLP1[1][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumx1r += 0.5*(5.0*d52_p32+1.0*d52_m52)*OLP1[1][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumx1r += 0.5*(6.0*d52_p52 )*OLP1[1][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+5]; | |
*sumx1r += 0.5*(6.0*d52_p52 )*OLP1[1][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+6]; | |
*sumy1r += 0.5*( 6.0*d52_m12)*OLP1[2][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumy1r += 0.5*(4.0*d52_p12+2.0*d52_m32)*OLP1[2][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumy1r += 0.5*(4.0*d52_p12+2.0*d52_m32)*OLP1[2][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumy1r += 0.5*(5.0*d52_p32+1.0*d52_m52)*OLP1[2][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumy1r += 0.5*(5.0*d52_p32+1.0*d52_m52)*OLP1[2][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumy1r += 0.5*(6.0*d52_p52 )*OLP1[2][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+5]; | |
*sumy1r += 0.5*(6.0*d52_p52 )*OLP1[2][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+6]; | |
*sumz1r += 0.5*( 6.0*d52_m12)*OLP1[3][Mc_AN][k][m][L ]*OLP1[0][Mj_AN][kl][n][L ]; | |
*sumz1r += 0.5*(4.0*d52_p12+2.0*d52_m32)*OLP1[3][Mc_AN][k][m][L+1]*OLP1[0][Mj_AN][kl][n][L+1]; | |
*sumz1r += 0.5*(4.0*d52_p12+2.0*d52_m32)*OLP1[3][Mc_AN][k][m][L+2]*OLP1[0][Mj_AN][kl][n][L+2]; | |
*sumz1r += 0.5*(5.0*d52_p32+1.0*d52_m52)*OLP1[3][Mc_AN][k][m][L+3]*OLP1[0][Mj_AN][kl][n][L+3]; | |
*sumz1r += 0.5*(5.0*d52_p32+1.0*d52_m52)*OLP1[3][Mc_AN][k][m][L+4]*OLP1[0][Mj_AN][kl][n][L+4]; | |
*sumz1r += 0.5*(6.0*d52_p52 )*OLP1[3][Mc_AN][k][m][L+5]*OLP1[0][Mj_AN][kl][n][L+5]; | |
*sumz1r += 0.5*(6.0*d52_p52 )*OLP1[3][Mc_AN][k][m][L+6]*OLP1[0][Mj_AN][kl][n][L+6]; | |
} | |
} /* if (apply_flag==1) */ | |
/* increment of L */ | |
L += 2*l + 1; | |
} /* mul */ | |
} /* l */ | |
} | |
void MPI_OLP(double *****OLP1) | |
{ | |
int i,j,h_AN,Gh_AN,Hwan,n; | |
int tno1,tno2,Mc_AN,Gc_AN,Cwan; | |
int num,k,size1,size2; | |
double *tmp_array; | |
double *tmp_array2; | |
int *Snd_S_Size,*Rcv_S_Size; | |
int numprocs,myid,ID,IDS,IDR,tag=999; | |
MPI_Status stat; | |
MPI_Request request; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
/**************************************************** | |
allocation of arrays: | |
****************************************************/ | |
Snd_S_Size = (int*)malloc(sizeof(int)*numprocs); | |
Rcv_S_Size = (int*)malloc(sizeof(int)*numprocs); | |
/****************************************************************** | |
MPI | |
OLP1[1], OLP1[2], and OLP1[3] | |
note: | |
OLP is used in DC and GDC method, where overlap integrals | |
of Matomnum+MatomnumF+MatomnumS+1 are stored. | |
However, overlap integrals of Matomnum+MatomnumF+1 are | |
stored in Force.c. So, F_TopMAN should be used to refer | |
overlap integrals in Force.c, while S_TopMAN should be | |
used in DC and GDC routines. | |
Although OLP is used in Eff_Hub_Pot.c, the usage is | |
consistent with that of DC and GDC routines by the following | |
reason: | |
DC or GDC: OLP + Spe_Total_NO if no orbital optimization | |
CntOLP + Spe_Total_CNO if orbital optimization | |
Eff_Hub_Pot: OLP + Spe_Total_NO always since the U-potential | |
affects to primitive orbital | |
If no orbital optimization, both the usages are consistent. | |
If orbital optimization, CntOLP and OLP are used in DC(GDC) and | |
Eff_Hub_Pot.c, respectively. Therefore, there is no conflict. | |
*******************************************************************/ | |
/*********************************** | |
set data size | |
************************************/ | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
if (ID!=0){ | |
tag = 999; | |
/* find data size to send block data */ | |
if (F_Snd_Num[IDS]!=0){ | |
size1 = 0; | |
for (n=0; n<F_Snd_Num[IDS]; n++){ | |
Mc_AN = Snd_MAN[IDS][n]; | |
Gc_AN = Snd_GAN[IDS][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_NO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_NO[Hwan]; | |
size1 += 4*tno1*tno2; | |
} | |
} | |
Snd_S_Size[IDS] = size1; | |
MPI_Isend(&size1, 1, MPI_INT, IDS, tag, mpi_comm_level1, &request); | |
} | |
else{ | |
Snd_S_Size[IDS] = 0; | |
} | |
/* receiving of size of data */ | |
if (F_Rcv_Num[IDR]!=0){ | |
MPI_Recv(&size2, 1, MPI_INT, IDR, tag, mpi_comm_level1, &stat); | |
Rcv_S_Size[IDR] = size2; | |
} | |
else{ | |
Rcv_S_Size[IDR] = 0; | |
} | |
if (F_Snd_Num[IDS]!=0) MPI_Wait(&request,&stat); | |
} | |
else{ | |
Snd_S_Size[IDS] = 0; | |
Rcv_S_Size[IDR] = 0; | |
} | |
} | |
/*********************************** | |
data transfer | |
************************************/ | |
tag = 999; | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
if (ID!=0){ | |
/***************************** | |
sending of data | |
*****************************/ | |
if (F_Snd_Num[IDS]!=0){ | |
size1 = Snd_S_Size[IDS]; | |
/* allocation of array */ | |
tmp_array = (double*)malloc(sizeof(double)*size1); | |
/* multidimentional array to vector array */ | |
num = 0; | |
for (k=0; k<=3; k++){ | |
for (n=0; n<F_Snd_Num[IDS]; n++){ | |
Mc_AN = Snd_MAN[IDS][n]; | |
Gc_AN = Snd_GAN[IDS][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_NO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_NO[Hwan]; | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
tmp_array[num] = OLP1[k][Mc_AN][h_AN][i][j]; | |
num++; | |
} | |
} | |
} | |
} | |
} | |
MPI_Isend(&tmp_array[0], size1, MPI_DOUBLE, IDS, tag, mpi_comm_level1, &request); | |
} | |
/***************************** | |
receiving of block data | |
*****************************/ | |
if (F_Rcv_Num[IDR]!=0){ | |
size2 = Rcv_S_Size[IDR]; | |
/* allocation of array */ | |
tmp_array2 = (double*)malloc(sizeof(double)*size2); | |
MPI_Recv(&tmp_array2[0], size2, MPI_DOUBLE, IDR, tag, mpi_comm_level1, &stat); | |
num = 0; | |
for (k=0; k<=3; k++){ | |
Mc_AN = F_TopMAN[IDR] - 1; /* F_TopMAN should be used. */ | |
for (n=0; n<F_Rcv_Num[IDR]; n++){ | |
Mc_AN++; | |
Gc_AN = Rcv_GAN[IDR][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_NO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_NO[Hwan]; | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
OLP1[k][Mc_AN][h_AN][i][j] = tmp_array2[num]; | |
num++; | |
} | |
} | |
} | |
} | |
} | |
/* freeing of array */ | |
free(tmp_array2); | |
} | |
if (F_Snd_Num[IDS]!=0){ | |
MPI_Wait(&request,&stat); | |
free(tmp_array); /* freeing of array */ | |
} | |
} | |
} | |
/**************************************************** | |
freeing of arrays: | |
****************************************************/ | |
free(Snd_S_Size); | |
free(Rcv_S_Size); | |
} | |
void Force_CoreHole(double *****CDM0, double *****iDM0) | |
{ | |
/**************************************************** | |
Force arising from the penalty functional | |
to create a core hole | |
****************************************************/ | |
int Mc_AN,Gc_AN,Cwan,i,j,h_AN,q_AN,Mq_AN,start_q_AN; | |
int jan,kl,km,kl1,Qwan,Gq_AN,Gh_AN,Mh_AN,Hwan,ian; | |
int l1,l2,l3,l,LL,Mul1,tno0,ncp,so; | |
int tno1,tno2,size1,size2,n,kk,num,po,po1,po2; | |
int numprocs,myid,tag=999,ID,IDS,IDR; | |
int **S_array,**R_array; | |
int S_comm_flag,R_comm_flag; | |
int SA_num,q,Sc_AN,GSc_AN,smul; | |
int Sc_wan,Sh_AN,GSh_AN,Sh_wan; | |
int Sh_AN2,fan,jg,j0,jg0,Mj_AN0; | |
int Original_Mc_AN; | |
double rcutA,rcutB,rcut; | |
double dEx,dEy,dEz,ene,pref; | |
double Stime_atom, Etime_atom; | |
dcomplex ***Hx,***Hy,***Hz; | |
dcomplex ***Hx0,***Hy0,***Hz0; | |
dcomplex ***Hx1,***Hy1,***Hz1; | |
int *Snd_OLP_Size,*Rcv_OLP_Size; | |
int *Indicator; | |
double *tmp_array; | |
double *tmp_array2; | |
/* for OpenMP */ | |
int OMPID,Nthrds,Nthrds0,Nprocs,Nloop,ODNloop; | |
int *OneD2h_AN,*OneD2q_AN; | |
double *dEx_threads; | |
double *dEy_threads; | |
double *dEz_threads; | |
double stime,etime; | |
double stime1,etime1; | |
MPI_Status stat; | |
MPI_Request request; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
dtime(&stime); | |
/**************************** | |
allocation of arrays | |
*****************************/ | |
Indicator = (int*)malloc(sizeof(int)*numprocs); | |
S_array = (int**)malloc(sizeof(int*)*numprocs); | |
for (ID=0; ID<numprocs; ID++){ | |
S_array[ID] = (int*)malloc(sizeof(int)*3); | |
} | |
R_array = (int**)malloc(sizeof(int*)*numprocs); | |
for (ID=0; ID<numprocs; ID++){ | |
R_array[ID] = (int*)malloc(sizeof(int)*3); | |
} | |
Snd_OLP_Size = (int*)malloc(sizeof(int)*numprocs); | |
Rcv_OLP_Size = (int*)malloc(sizeof(int)*numprocs); | |
/* initialize the temporal array storing the force contribution */ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = F_M2G[Mc_AN]; | |
Gxyz[Gc_AN][41] = 0.0; | |
Gxyz[Gc_AN][42] = 0.0; | |
Gxyz[Gc_AN][43] = 0.0; | |
} | |
/*****************************************}********************** | |
THE FIRST CASE: | |
In case of I=i or I=j | |
for d [ \sum_k <i|k>ek<k|j> ]/dRI | |
****************************************************************/ | |
/******************************************************* | |
******************************************************* | |
multiplying overlap integrals WITH COMMUNICATION | |
In case of I=i or I=j | |
for d [ \sum_k <i|k>ek<k|j> ]/dRI | |
******************************************************* | |
*******************************************************/ | |
MPI_Barrier(mpi_comm_level1); | |
dtime(&stime); | |
Hx0 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hx0[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx0[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hy0 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hy0[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hy0[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hz0 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hz0[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hz0[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hx1 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hx1[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx1[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hy1 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hy1[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hy1[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hz1 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hz1[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hz1[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
for (ID=0; ID<numprocs; ID++){ | |
F_Snd_Num_WK[ID] = 0; | |
F_Rcv_Num_WK[ID] = 0; | |
} | |
do { | |
/*********************************** | |
set the size of data | |
************************************/ | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
/* find the data size to send the block data */ | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ){ | |
size1 = 0; | |
n = F_Snd_Num_WK[IDS]; | |
Mc_AN = Snd_MAN[IDS][n]; | |
Gc_AN = Snd_GAN[IDS][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_CNO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_CNO[Hwan]; | |
size1 += tno1*tno2; | |
} | |
Snd_OLP_Size[IDS] = size1; | |
MPI_Isend(&size1, 1, MPI_INT, IDS, tag, mpi_comm_level1, &request); | |
} | |
else{ | |
Snd_OLP_Size[IDS] = 0; | |
} | |
/* receiving of the size of the data */ | |
if ( 0<(F_Rcv_Num[IDR]-F_Rcv_Num_WK[IDR]) ){ | |
MPI_Recv(&size2, 1, MPI_INT, IDR, tag, mpi_comm_level1, &stat); | |
Rcv_OLP_Size[IDR] = size2; | |
} | |
else{ | |
Rcv_OLP_Size[IDR] = 0; | |
} | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ) MPI_Wait(&request,&stat); | |
} /* ID */ | |
/*********************************** | |
data transfer | |
************************************/ | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
/****************************** | |
sending of the data | |
******************************/ | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ){ | |
size1 = Snd_OLP_Size[IDS]; | |
/* allocation of the array */ | |
tmp_array = (double*)malloc(sizeof(double)*size1); | |
/* multidimentional array to the vector array */ | |
num = 0; | |
n = F_Snd_Num_WK[IDS]; | |
Mc_AN = Snd_MAN[IDS][n]; | |
Gc_AN = Snd_GAN[IDS][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_CNO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_CNO[Hwan]; | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
tmp_array[num] = OLP_CH[0][Mc_AN][h_AN][i][j]; | |
num++; | |
} | |
} | |
} | |
MPI_Isend(&tmp_array[0], size1, MPI_DOUBLE, IDS, tag, mpi_comm_level1, &request); | |
} | |
/****************************** | |
receiving of the block data | |
******************************/ | |
if ( 0<(F_Rcv_Num[IDR]-F_Rcv_Num_WK[IDR]) ){ | |
size2 = Rcv_OLP_Size[IDR]; | |
tmp_array2 = (double*)malloc(sizeof(double)*size2); | |
MPI_Recv(&tmp_array2[0], size2, MPI_DOUBLE, IDR, tag, mpi_comm_level1, &stat); | |
/* store */ | |
num = 0; | |
n = F_Rcv_Num_WK[IDR]; | |
Original_Mc_AN = F_TopMAN[IDR] + n; | |
Gc_AN = Rcv_GAN[IDR][n]; | |
Cwan = WhatSpecies[Gc_AN]; | |
tno1 = Spe_Total_CNO[Cwan]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
tno2 = Spe_Total_CNO[Hwan]; | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
OLP_CH[0][Matomnum+1][h_AN][i][j] = tmp_array2[num]; | |
num++; | |
} | |
} | |
} | |
/* free tmp_array2 */ | |
free(tmp_array2); | |
/***************************************************************** | |
multiplying overlap integrals | |
*****************************************************************/ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
dtime(&Stime_atom); | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
fan = FNAN[Gc_AN]; | |
h_AN = 0; | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Mh_AN = F_G2M[Gh_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
ian = Spe_Total_CNO[Hwan]; | |
n = F_Rcv_Num_WK[IDR]; | |
jg = Rcv_GAN[IDR][n]; | |
for (j0=0; j0<=fan; j0++){ | |
jg0 = natn[Gc_AN][j0]; | |
Mj_AN0 = F_G2M[jg0]; | |
po2 = 0; | |
if (Original_Mc_AN==Mj_AN0){ | |
po2 = 1; | |
q_AN = j0; | |
} | |
if (po2==1){ | |
Gq_AN = natn[Gc_AN][q_AN]; | |
Mq_AN = F_G2M[Gq_AN]; | |
Qwan = WhatSpecies[Gq_AN]; | |
jan = Spe_Total_CNO[Qwan]; | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
dHCH(0,Mc_AN,h_AN,q_AN,OLP_CH,Hx0,Hy0,Hz0); | |
/* contribution of force = Trace(CDM0*dH) */ | |
/* spin non-polarization */ | |
if (SpinP_switch==0){ | |
if (q_AN==h_AN) pref = 2.0; | |
else pref = 4.0; | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx += pref*CDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].r; | |
dEy += pref*CDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].r; | |
dEz += pref*CDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].r; | |
} | |
} | |
} | |
/* collinear spin polarized or non-colliear without SO and LDA+U */ | |
else if (SpinP_switch==1 || (SpinP_switch==3 && SO_switch==0 && Hub_U_switch==0 | |
&& Constraint_NCS_switch==0 && Zeeman_NCS_switch==0 && Zeeman_NCO_switch==0)){ | |
if (q_AN==h_AN) pref = 1.0; | |
else pref = 2.0; | |
for (i=0; i<Spe_Total_CNO[Hwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Qwan]; j++){ | |
dEx += pref*( CDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx0[1][i][j].r); | |
dEy += pref*( CDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy0[1][i][j].r); | |
dEz += pref*( CDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz0[1][i][j].r); | |
} | |
} | |
} | |
/* spin non-collinear with spin-orbit coupling or with LDA+U */ | |
else if ( SpinP_switch==3 && (SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1) | |
|| 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1)){ | |
if (q_AN==h_AN){ | |
for (i=0; i<Spe_Total_CNO[Hwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Qwan]; j++){ | |
dEx += | |
CDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx0[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hx0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hx0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hx0[2][i][j].i; | |
dEy += | |
CDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy0[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hy0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hy0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hy0[2][i][j].i; | |
dEz += | |
CDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz0[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hz0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hz0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hz0[2][i][j].i; | |
} | |
} | |
} | |
else { | |
for (i=0; i<Spe_Total_CNO[Hwan]; i++){ /* Hwan */ | |
for (j=0; j<Spe_Total_CNO[Qwan]; j++){ /* Qwan */ | |
dEx += | |
CDM0[0][Mh_AN][kl ][i][j]*Hx0[0][i][j].r | |
- iDM0[0][Mh_AN][kl ][i][j]*Hx0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl ][i][j]*Hx0[1][i][j].r | |
- iDM0[1][Mh_AN][kl ][i][j]*Hx0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl ][i][j]*Hx0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl ][i][j]*Hx0[2][i][j].i; | |
dEy += | |
CDM0[0][Mh_AN][kl ][i][j]*Hy0[0][i][j].r | |
- iDM0[0][Mh_AN][kl ][i][j]*Hy0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl ][i][j]*Hy0[1][i][j].r | |
- iDM0[1][Mh_AN][kl ][i][j]*Hy0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl ][i][j]*Hy0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl ][i][j]*Hy0[2][i][j].i; | |
dEz += | |
CDM0[0][Mh_AN][kl ][i][j]*Hz0[0][i][j].r | |
- iDM0[0][Mh_AN][kl ][i][j]*Hz0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl ][i][j]*Hz0[1][i][j].r | |
- iDM0[1][Mh_AN][kl ][i][j]*Hz0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl ][i][j]*Hz0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl ][i][j]*Hz0[2][i][j].i; | |
} /* j */ | |
} /* i */ | |
dHCH(0,Mc_AN,q_AN,h_AN,OLP_CH,Hx1,Hy1,Hz1); | |
kl1 = RMI1[Mc_AN][q_AN][h_AN]; | |
for (i=0; i<Spe_Total_CNO[Qwan]; i++){ /* Qwan */ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ /* Hwan */ | |
dEx += | |
CDM0[0][Mq_AN][kl1][i][j]*Hx1[0][i][j].r | |
- iDM0[0][Mq_AN][kl1][i][j]*Hx1[0][i][j].i | |
+ CDM0[1][Mq_AN][kl1][i][j]*Hx1[1][i][j].r | |
- iDM0[1][Mq_AN][kl1][i][j]*Hx1[1][i][j].i | |
+ 2.0*CDM0[2][Mq_AN][kl1][i][j]*Hx1[2][i][j].r | |
- 2.0*CDM0[3][Mq_AN][kl1][i][j]*Hx1[2][i][j].i; | |
dEy += | |
CDM0[0][Mq_AN][kl1][i][j]*Hy1[0][i][j].r | |
- iDM0[0][Mq_AN][kl1][i][j]*Hy1[0][i][j].i | |
+ CDM0[1][Mq_AN][kl1][i][j]*Hy1[1][i][j].r | |
- iDM0[1][Mq_AN][kl1][i][j]*Hy1[1][i][j].i | |
+ 2.0*CDM0[2][Mq_AN][kl1][i][j]*Hy1[2][i][j].r | |
- 2.0*CDM0[3][Mq_AN][kl1][i][j]*Hy1[2][i][j].i; | |
dEz += | |
CDM0[0][Mq_AN][kl1][i][j]*Hz1[0][i][j].r | |
- iDM0[0][Mq_AN][kl1][i][j]*Hz1[0][i][j].i | |
+ CDM0[1][Mq_AN][kl1][i][j]*Hz1[1][i][j].r | |
- iDM0[1][Mq_AN][kl1][i][j]*Hz1[1][i][j].i | |
+ 2.0*CDM0[2][Mq_AN][kl1][i][j]*Hz1[2][i][j].r | |
- 2.0*CDM0[3][Mq_AN][kl1][i][j]*Hz1[2][i][j].i; | |
} /* j */ | |
} /* i */ | |
} | |
} | |
} /* if (po2==1) */ | |
} /* j0 */ | |
/* force from #4B */ | |
Gxyz[Gc_AN][41] += dEx; | |
Gxyz[Gc_AN][42] += dEy; | |
Gxyz[Gc_AN][43] += dEz; | |
/* timing */ | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} /* Mc_AN */ | |
/******************************************** | |
increment of F_Rcv_Num_WK[IDR] | |
********************************************/ | |
F_Rcv_Num_WK[IDR]++; | |
} /* if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ) */ | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ) { | |
MPI_Wait(&request,&stat); | |
free(tmp_array); /* freeing of array */ | |
/******************************************** | |
increment of F_Snd_Num_WK[IDS] | |
********************************************/ | |
F_Snd_Num_WK[IDS]++; | |
} | |
} /* ID */ | |
/***************************************************** | |
check whether all the communications have finished | |
*****************************************************/ | |
po = 0; | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
if ( 0<(F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]) ) po += F_Snd_Num[IDS]-F_Snd_Num_WK[IDS]; | |
if ( 0<(F_Rcv_Num[IDR]-F_Rcv_Num_WK[IDR]) ) po += F_Rcv_Num[IDR]-F_Rcv_Num_WK[IDR]; | |
} | |
} while (po!=0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hx0[i][j]); | |
} | |
free(Hx0[i]); | |
} | |
free(Hx0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hy0[i][j]); | |
} | |
free(Hy0[i]); | |
} | |
free(Hy0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hz0[i][j]); | |
} | |
free(Hz0[i]); | |
} | |
free(Hz0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hx1[i][j]); | |
} | |
free(Hx1[i]); | |
} | |
free(Hx1); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hy1[i][j]); | |
} | |
free(Hy1[i]); | |
} | |
free(Hy1); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hz1[i][j]); | |
} | |
free(Hz1[i]); | |
} | |
free(Hz1); | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for part1 of force_HCH=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
if (2<=level_stdout){ | |
printf("<Force> force(HCH1) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,Gxyz[Gc_AN][41],Gxyz[Gc_AN][42],Gxyz[Gc_AN][43]);fflush(stdout); | |
} | |
} | |
/******************************************************* | |
******************************************************* | |
THE FIRST CASE: | |
multiplying overlap integrals WITHOUT COMMUNICATION | |
In case of I=i or I=j | |
for d [ \sum_k <i|k>ek<k|j> ]/dRI | |
******************************************************* | |
*******************************************************/ | |
dtime(&stime); | |
#pragma omp parallel shared(time_per_atom,Gxyz,CDM0,SpinP_switch,SO_switch,Hub_U_switch,F_U_flag,Constraint_NCS_switch,Zeeman_NCS_switch,Zeeman_NCO_switch,OLP_CH,RMI1,FNAN,Spe_Total_CNO,WhatSpecies,F_G2M,natn,M2G,Matomnum,List_YOUSO,F_NL_flag) private(Hx0,Hy0,Hz0,Hx1,Hy1,Hz1,OMPID,Nthrds,Nprocs,Mc_AN,Stime_atom,Etime_atom,dEx,dEy,dEz,Gc_AN,h_AN,Gh_AN,Mh_AN,Hwan,ian,q_AN,Gq_AN,Mq_AN,Qwan,jan,kl,kl1,i,j,kk,pref) | |
{ | |
/* allocation of array */ | |
Hx0 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hx0[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx0[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hy0 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hy0[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hy0[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hz0 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hz0[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hz0[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hx1 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hx1[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx1[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hy1 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hy1[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hy1[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hz1 = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hz1[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hz1[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (Mc_AN=(OMPID*Matomnum/Nthrds+1); Mc_AN<((OMPID+1)*Matomnum/Nthrds+1); Mc_AN++){ | |
dtime(&Stime_atom); | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
Gc_AN = M2G[Mc_AN]; | |
h_AN = 0; | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Mh_AN = F_G2M[Gh_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
ian = Spe_Total_CNO[Hwan]; | |
for (q_AN=0; q_AN<=FNAN[Gc_AN]; q_AN++){ | |
Gq_AN = natn[Gc_AN][q_AN]; | |
Mq_AN = F_G2M[Gq_AN]; | |
if (Mq_AN<=Matomnum){ | |
Qwan = WhatSpecies[Gq_AN]; | |
jan = Spe_Total_CNO[Qwan]; | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
dHCH(0,Mc_AN,h_AN,q_AN,OLP_CH,Hx0,Hy0,Hz0); | |
if (SpinP_switch==0){ | |
if (q_AN==h_AN) pref = 2.0; | |
else pref = 4.0; | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx += pref*CDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].r; | |
dEy += pref*CDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].r; | |
dEz += pref*CDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].r; | |
} | |
} | |
} | |
/* collinear spin polarized or non-colliear without SO and LDA+U */ | |
else if (SpinP_switch==1 || (SpinP_switch==3 && SO_switch==0 && Hub_U_switch==0 | |
&& Constraint_NCS_switch==0 && Zeeman_NCS_switch==0 && Zeeman_NCO_switch==0)){ | |
if (q_AN==h_AN) pref = 1.0; | |
else pref = 2.0; | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx += pref*( CDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx0[1][i][j].r); | |
dEy += pref*( CDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy0[1][i][j].r); | |
dEz += pref*( CDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz0[1][i][j].r); | |
} | |
} | |
} | |
/* spin non-collinear with spin-orbit coupling or with LDA+U */ | |
else if ( SpinP_switch==3 && (SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1) | |
|| 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1)){ | |
if (q_AN==h_AN){ | |
for (i=0; i<Spe_Total_CNO[Hwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Qwan]; j++){ | |
dEx += | |
CDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hx0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx0[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hx0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hx0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hx0[2][i][j].i; | |
dEy += | |
CDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hy0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy0[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hy0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hy0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hy0[2][i][j].i; | |
dEz += | |
CDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hz0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz0[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hz0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hz0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hz0[2][i][j].i; | |
} | |
} | |
} | |
else{ | |
for (i=0; i<Spe_Total_CNO[Hwan]; i++){ /* Hwan */ | |
for (j=0; j<Spe_Total_CNO[Qwan]; j++){ /* Qwan */ | |
dEx += | |
CDM0[0][Mh_AN][kl ][i][j]*Hx0[0][i][j].r | |
- iDM0[0][Mh_AN][kl ][i][j]*Hx0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl ][i][j]*Hx0[1][i][j].r | |
- iDM0[1][Mh_AN][kl ][i][j]*Hx0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl ][i][j]*Hx0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl ][i][j]*Hx0[2][i][j].i; | |
dEy += | |
CDM0[0][Mh_AN][kl ][i][j]*Hy0[0][i][j].r | |
- iDM0[0][Mh_AN][kl ][i][j]*Hy0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl ][i][j]*Hy0[1][i][j].r | |
- iDM0[1][Mh_AN][kl ][i][j]*Hy0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl ][i][j]*Hy0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl ][i][j]*Hy0[2][i][j].i; | |
dEz += | |
CDM0[0][Mh_AN][kl ][i][j]*Hz0[0][i][j].r | |
- iDM0[0][Mh_AN][kl ][i][j]*Hz0[0][i][j].i | |
+ CDM0[1][Mh_AN][kl ][i][j]*Hz0[1][i][j].r | |
- iDM0[1][Mh_AN][kl ][i][j]*Hz0[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl ][i][j]*Hz0[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl ][i][j]*Hz0[2][i][j].i; | |
} /* j */ | |
} /* i */ | |
dHCH(0,Mc_AN,q_AN,h_AN,OLP_CH,Hx1,Hy1,Hz1); | |
kl1 = RMI1[Mc_AN][q_AN][h_AN]; | |
for (i=0; i<Spe_Total_CNO[Qwan]; i++){ /* Qwan */ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ /* Hwan */ | |
dEx += | |
CDM0[0][Mq_AN][kl1][i][j]*Hx1[0][i][j].r | |
- iDM0[0][Mq_AN][kl1][i][j]*Hx1[0][i][j].i | |
+ CDM0[1][Mq_AN][kl1][i][j]*Hx1[1][i][j].r | |
- iDM0[1][Mq_AN][kl1][i][j]*Hx1[1][i][j].i | |
+ 2.0*CDM0[2][Mq_AN][kl1][i][j]*Hx1[2][i][j].r | |
- 2.0*CDM0[3][Mq_AN][kl1][i][j]*Hx1[2][i][j].i; | |
dEy += | |
CDM0[0][Mq_AN][kl1][i][j]*Hy1[0][i][j].r | |
- iDM0[0][Mq_AN][kl1][i][j]*Hy1[0][i][j].i | |
+ CDM0[1][Mq_AN][kl1][i][j]*Hy1[1][i][j].r | |
- iDM0[1][Mq_AN][kl1][i][j]*Hy1[1][i][j].i | |
+ 2.0*CDM0[2][Mq_AN][kl1][i][j]*Hy1[2][i][j].r | |
- 2.0*CDM0[3][Mq_AN][kl1][i][j]*Hy1[2][i][j].i; | |
dEz += | |
CDM0[0][Mq_AN][kl1][i][j]*Hz1[0][i][j].r | |
- iDM0[0][Mq_AN][kl1][i][j]*Hz1[0][i][j].i | |
+ CDM0[1][Mq_AN][kl1][i][j]*Hz1[1][i][j].r | |
- iDM0[1][Mq_AN][kl1][i][j]*Hz1[1][i][j].i | |
+ 2.0*CDM0[2][Mq_AN][kl1][i][j]*Hz1[2][i][j].r | |
- 2.0*CDM0[3][Mq_AN][kl1][i][j]*Hz1[2][i][j].i; | |
} /* j */ | |
} /* i */ | |
} | |
} | |
} | |
} | |
/* force from #4B */ | |
if (F_NL_flag==1){ | |
Gxyz[Gc_AN][41] += dEx; | |
Gxyz[Gc_AN][42] += dEy; | |
Gxyz[Gc_AN][43] += dEz; | |
} | |
/* timing */ | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} /* Mc_AN */ | |
/* freeing of array */ | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hx0[i][j]); | |
} | |
free(Hx0[i]); | |
} | |
free(Hx0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hy0[i][j]); | |
} | |
free(Hy0[i]); | |
} | |
free(Hy0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hz0[i][j]); | |
} | |
free(Hz0[i]); | |
} | |
free(Hz0); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hx1[i][j]); | |
} | |
free(Hx1[i]); | |
} | |
free(Hx1); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hy1[i][j]); | |
} | |
free(Hy1[i]); | |
} | |
free(Hy1); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hz1[i][j]); | |
} | |
free(Hz1[i]); | |
} | |
free(Hz1); | |
} /* #pragma omp parallel */ | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for part2 of force_HCH=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
if (2<=level_stdout){ | |
printf("<Force> force(HCH2) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,Gxyz[Gc_AN][41],Gxyz[Gc_AN][42],Gxyz[Gc_AN][43]);fflush(stdout); | |
} | |
} | |
/************************************************************* | |
THE SECOND CASE: | |
In case of I=k with I!=i and I!=j | |
d [ \sum_k <i|k>ek<k|j> ]/dRI | |
*************************************************************/ | |
/************************************************************ | |
MPI communication of OLP_CH whose basis part is not located | |
on own site but projector part is located on own site. | |
************************************************************/ | |
MPI_Barrier(mpi_comm_level1); | |
dtime(&stime); | |
for (ID=0; ID<numprocs; ID++) Indicator[ID] = 0; | |
for (Mc_AN=1; Mc_AN<=Max_Matomnum; Mc_AN++){ | |
if (Mc_AN<=Matomnum) Gc_AN = M2G[Mc_AN]; | |
else Gc_AN = 0; | |
for (ID=0; ID<numprocs; ID++){ | |
IDS = (myid + ID) % numprocs; | |
IDR = (myid - ID + numprocs) % numprocs; | |
i = Indicator[IDS]; | |
po = 0; | |
Gh_AN = Pro_Snd_GAtom[IDS][i]; | |
if (Gh_AN!=0){ | |
/* find the range with the same global atomic number */ | |
do { | |
i++; | |
if (Gh_AN!=Pro_Snd_GAtom[IDS][i]) po = 1; | |
} while(po==0); | |
i--; | |
SA_num = i - Indicator[IDS] + 1; | |
/* find the data size to send the block data */ | |
size1 = 0; | |
for (q=Indicator[IDS]; q<=(Indicator[IDS]+SA_num-1); q++){ | |
Sc_AN = Pro_Snd_MAtom[IDS][q]; | |
GSc_AN = F_M2G[Sc_AN]; | |
Sc_wan = WhatSpecies[GSc_AN]; | |
tno1 = Spe_Total_CNO[Sc_wan]; | |
Sh_AN = Pro_Snd_LAtom[IDS][q]; | |
GSh_AN = natn[GSc_AN][Sh_AN]; | |
Sh_wan = WhatSpecies[GSh_AN]; | |
tno2 = Spe_Total_CNO[Sh_wan]; | |
size1 += 4*tno1*tno2; | |
size1 += 3; | |
} | |
} /* if (Gh_AN!=0) */ | |
else { | |
SA_num = 0; | |
size1 = 0; | |
} | |
S_array[IDS][0] = Gh_AN; | |
S_array[IDS][1] = SA_num; | |
S_array[IDS][2] = size1; | |
if (ID!=0){ | |
MPI_Isend(&S_array[IDS][0], 3, MPI_INT, IDS, tag, mpi_comm_level1, &request); | |
MPI_Recv( &R_array[IDR][0], 3, MPI_INT, IDR, tag, mpi_comm_level1, &stat); | |
MPI_Wait(&request,&stat); | |
} | |
else { | |
R_array[myid][0] = S_array[myid][0]; | |
R_array[myid][1] = S_array[myid][1]; | |
R_array[myid][2] = S_array[myid][2]; | |
} | |
if (R_array[IDR][0]==Gc_AN) R_comm_flag = 1; | |
else R_comm_flag = 0; | |
if (ID!=0){ | |
MPI_Isend(&R_comm_flag, 1, MPI_INT, IDR, tag, mpi_comm_level1, &request); | |
MPI_Recv( &S_comm_flag, 1, MPI_INT, IDS, tag, mpi_comm_level1, &stat); | |
MPI_Wait(&request,&stat); | |
} | |
else{ | |
S_comm_flag = R_comm_flag; | |
} | |
/***************************************** | |
send the data | |
*****************************************/ | |
/* if (S_comm_flag==1) then, send data to IDS */ | |
if (S_comm_flag==1){ | |
/* allocate tmp_array */ | |
tmp_array = (double*)malloc(sizeof(double)*size1); | |
/* multidimentional array to vector array */ | |
num = 0; | |
for (q=Indicator[IDS]; q<=(Indicator[IDS]+SA_num-1); q++){ | |
Sc_AN = Pro_Snd_MAtom[IDS][q]; | |
GSc_AN = F_M2G[Sc_AN]; | |
Sc_wan = WhatSpecies[GSc_AN]; | |
tno1 = Spe_Total_CNO[Sc_wan]; | |
Sh_AN = Pro_Snd_LAtom[IDS][q]; | |
GSh_AN = natn[GSc_AN][Sh_AN]; | |
Sh_wan = WhatSpecies[GSh_AN]; | |
tno2 = Spe_Total_CNO[Sh_wan]; | |
Sh_AN2 = Pro_Snd_LAtom2[IDS][q]; | |
tmp_array[num] = (double)Sc_AN; num++; | |
tmp_array[num] = (double)Sh_AN; num++; | |
tmp_array[num] = (double)Sh_AN2; num++; | |
for (kk=0; kk<=3; kk++){ | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
tmp_array[num] = OLP_CH[kk][Sc_AN][Sh_AN][i][j]; | |
num++; | |
} | |
} | |
} | |
} | |
if (ID!=0){ | |
MPI_Isend(&tmp_array[0], size1, MPI_DOUBLE, IDS, tag, mpi_comm_level1, &request); | |
} | |
/* update Indicator[IDS] */ | |
Indicator[IDS] += SA_num; | |
} /* if (S_comm_flag==1) */ | |
/***************************************** | |
receiving the data | |
*****************************************/ | |
/* if (R_comm_flag==1) then, receive the data from IDR */ | |
if (R_comm_flag==1){ | |
size2 = R_array[IDR][2]; | |
tmp_array2 = (double*)malloc(sizeof(double)*size2); | |
if (ID!=0){ | |
MPI_Recv(&tmp_array2[0], size2, MPI_DOUBLE, IDR, tag, mpi_comm_level1, &stat); | |
} | |
else{ | |
for (i=0; i<size2; i++) tmp_array2[i] = tmp_array[i]; | |
} | |
/* store */ | |
num = 0; | |
for (n=0; n<R_array[IDR][1]; n++){ | |
Sc_AN = (int)tmp_array2[num]; num++; | |
Sh_AN = (int)tmp_array2[num]; num++; | |
Sh_AN2 = (int)tmp_array2[num]; num++; | |
GSc_AN = natn[Gc_AN][Sh_AN2]; | |
Sc_wan = WhatSpecies[GSc_AN]; | |
tno1 = Spe_Total_CNO[Sc_wan]; | |
GSh_AN = natn[GSc_AN][Sh_AN]; | |
Sh_wan = WhatSpecies[GSh_AN]; | |
tno2 = Spe_Total_CNO[Sh_wan]; | |
for (kk=0; kk<=3; kk++){ | |
for (i=0; i<tno1; i++){ | |
for (j=0; j<tno2; j++){ | |
OLP_CH[kk][Matomnum+1][Sh_AN2][i][j] = tmp_array2[num]; | |
num++; | |
} | |
} | |
} | |
} | |
/* free tmp_array2 */ | |
free(tmp_array2); | |
} /* if (R_comm_flag==1) */ | |
if (S_comm_flag==1){ | |
if (ID!=0) MPI_Wait(&request,&stat); | |
free(tmp_array); /* freeing of array */ | |
} | |
} /* ID */ | |
if (Mc_AN<=Matomnum){ | |
/* get Nthrds0 */ | |
#pragma omp parallel shared(Nthrds0) | |
{ | |
Nthrds0 = omp_get_num_threads(); | |
} | |
/* allocation of arrays */ | |
dEx_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
dEy_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
dEz_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
dEx_threads[Nloop] = 0.0; | |
dEy_threads[Nloop] = 0.0; | |
dEz_threads[Nloop] = 0.0; | |
} | |
/* one-dimensionalize the h_AN and q_AN loops */ | |
OneD2h_AN = (int*)malloc(sizeof(int)*(FNAN[Gc_AN]+1)*(FNAN[Gc_AN]+2)); | |
OneD2q_AN = (int*)malloc(sizeof(int)*(FNAN[Gc_AN]+1)*(FNAN[Gc_AN]+2)); | |
ODNloop = 0; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
if ( SpinP_switch==3 && (SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1) | |
|| 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1) | |
|| (Solver==5 || Solver==8 || Solver==11) ) | |
start_q_AN = 0; | |
else | |
start_q_AN = h_AN; | |
for (q_AN=start_q_AN; q_AN<=FNAN[Gc_AN]; q_AN++){ | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
if (0<=kl){ | |
OneD2h_AN[ODNloop] = h_AN; | |
OneD2q_AN[ODNloop] = q_AN; | |
ODNloop++; | |
} | |
} | |
} | |
#pragma omp parallel shared(ODNloop,OneD2h_AN,OneD2q_AN,Mc_AN,Gc_AN,dEx_threads,dEy_threads,dEz_threads,CDM0,SpinP_switch,SO_switch,Hub_U_switch,Constraint_NCS_switch,Zeeman_NCS_switch,Zeeman_NCO_switch,OLP_CH,RMI1,Spe_Total_CNO,WhatSpecies,F_G2M,natn,FNAN,List_YOUSO,Solver,F_NL_flag,F_U_flag) private(OMPID,Nthrds,Nprocs,Hx,Hy,Hz,i,j,h_AN,Gh_AN,Mh_AN,Hwan,ian,q_AN,Gq_AN,Mq_AN,Qwan,jan,kl,km,Nloop,pref) | |
{ | |
/* allocation of arrays */ | |
Hx = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hx[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hx[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hy = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hy[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hy[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
Hz = (dcomplex***)malloc(sizeof(dcomplex**)*3); | |
for (i=0; i<3; i++){ | |
Hz[i] = (dcomplex**)malloc(sizeof(dcomplex*)*List_YOUSO[7]); | |
for (j=0; j<List_YOUSO[7]; j++){ | |
Hz[i][j] = (dcomplex*)malloc(sizeof(dcomplex)*List_YOUSO[7]); | |
} | |
} | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (Nloop=OMPID*ODNloop/Nthrds; Nloop<(OMPID+1)*ODNloop/Nthrds; Nloop++){ | |
/* get h_AN and q_AN */ | |
h_AN = OneD2h_AN[Nloop]; | |
q_AN = OneD2q_AN[Nloop]; | |
/* set informations on h_AN */ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Mh_AN = F_G2M[Gh_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
ian = Spe_Total_CNO[Hwan]; | |
/* set informations on q_AN */ | |
Gq_AN = natn[Gc_AN][q_AN]; | |
Mq_AN = F_G2M[Gq_AN]; | |
Qwan = WhatSpecies[Gq_AN]; | |
jan = Spe_Total_CNO[Qwan]; | |
kl = RMI1[Mc_AN][h_AN][q_AN]; | |
km = RMI1[Mc_AN][q_AN][h_AN]; | |
if (0<=kl){ | |
dHCH(1,Mc_AN,h_AN,q_AN,OLP_CH,Hx,Hy,Hz); | |
/* contribution of force = Trace(CDM0*dH) */ | |
/* spin non-polarization */ | |
if (SpinP_switch==0){ | |
if (Solver==5 || Solver==8 || Solver==11){ | |
pref = 2.0; | |
} | |
else { | |
if (q_AN==h_AN) pref = 2.0; | |
else pref = 4.0; | |
} | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx_threads[OMPID] += pref*CDM0[0][Mh_AN][kl][i][j]*Hx[0][i][j].r; | |
dEy_threads[OMPID] += pref*CDM0[0][Mh_AN][kl][i][j]*Hy[0][i][j].r; | |
dEz_threads[OMPID] += pref*CDM0[0][Mh_AN][kl][i][j]*Hz[0][i][j].r; | |
} | |
} | |
} | |
/* collinear spin polarized or non-colliear without SO and LDA+U */ | |
else if (SpinP_switch==1 || (SpinP_switch==3 && SO_switch==0 && Hub_U_switch==0 | |
&& Constraint_NCS_switch==0 && Zeeman_NCS_switch==0 && Zeeman_NCO_switch==0)){ | |
if (Solver==5 || Solver==8 || Solver==11){ | |
pref = 1.0; | |
} | |
else { | |
if (q_AN==h_AN) pref = 1.0; | |
else pref = 2.0; | |
} | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx_threads[OMPID] += pref*( CDM0[0][Mh_AN][kl][i][j]*Hx[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx[1][i][j].r); | |
dEy_threads[OMPID] += pref*( CDM0[0][Mh_AN][kl][i][j]*Hy[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy[1][i][j].r); | |
dEz_threads[OMPID] += pref*( CDM0[0][Mh_AN][kl][i][j]*Hz[0][i][j].r | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz[1][i][j].r); | |
} | |
} | |
} | |
/* spin non-collinear with spin-orbit coupling or with LDA+U */ | |
else if ( SpinP_switch==3 && (SO_switch==1 || (Hub_U_switch==1 && F_U_flag==1) | |
|| 1<=Constraint_NCS_switch || Zeeman_NCS_switch==1 || Zeeman_NCO_switch==1)){ | |
pref = 1.0; | |
for (i=0; i<ian; i++){ | |
for (j=0; j<jan; j++){ | |
dEx_threads[OMPID] += | |
pref*(CDM0[0][Mh_AN][kl][i][j]*Hx[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hx[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hx[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hx[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hx[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hx[2][i][j].i); | |
dEy_threads[OMPID] += | |
pref*(CDM0[0][Mh_AN][kl][i][j]*Hy[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hy[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hy[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hy[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hy[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hy[2][i][j].i); | |
dEz_threads[OMPID] += | |
pref*(CDM0[0][Mh_AN][kl][i][j]*Hz[0][i][j].r | |
- iDM0[0][Mh_AN][kl][i][j]*Hz[0][i][j].i | |
+ CDM0[1][Mh_AN][kl][i][j]*Hz[1][i][j].r | |
- iDM0[1][Mh_AN][kl][i][j]*Hz[1][i][j].i | |
+ 2.0*CDM0[2][Mh_AN][kl][i][j]*Hz[2][i][j].r | |
- 2.0*CDM0[3][Mh_AN][kl][i][j]*Hz[2][i][j].i); | |
} | |
} | |
} | |
} /* if (0<=kl) */ | |
} /* Nloop */ | |
/* freeing of arrays */ | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hx[i][j]); | |
} | |
free(Hx[i]); | |
} | |
free(Hx); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hy[i][j]); | |
} | |
free(Hy[i]); | |
} | |
free(Hy); | |
for (i=0; i<3; i++){ | |
for (j=0; j<List_YOUSO[7]; j++){ | |
free(Hz[i][j]); | |
} | |
free(Hz[i]); | |
} | |
free(Hz); | |
} /* #pragma omp parallel */ | |
/* sum of dEx_threads */ | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
if (F_NL_flag==1){ | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
dEx += dEx_threads[Nloop]; | |
dEy += dEy_threads[Nloop]; | |
dEz += dEz_threads[Nloop]; | |
} | |
/* force from #4B */ | |
Gxyz[Gc_AN][41] += dEx; | |
Gxyz[Gc_AN][42] += dEy; | |
Gxyz[Gc_AN][43] += dEz; | |
} | |
if (2<=level_stdout){ | |
printf("<Force> force(HCH3) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,dEx,dEy,dEz);fflush(stdout); | |
} | |
/* freeing of array */ | |
free(OneD2q_AN); | |
free(OneD2h_AN); | |
free(dEx_threads); | |
free(dEy_threads); | |
free(dEz_threads); | |
} /* if (Mc_AN<=Matomnum) */ | |
} /* Mc_AN */ | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for part3 of force_NL=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/******************************************************** | |
adding Gxyz[Gc_AN][41,42,43] to Gxyz[Gc_AN][17,18,19] | |
********************************************************/ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
if (2<=level_stdout){ | |
printf("<Force> force(HCH) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,Gxyz[Gc_AN][41],Gxyz[Gc_AN][42],Gxyz[Gc_AN][43]);fflush(stdout); | |
} | |
Gxyz[Gc_AN][17] += Gxyz[Gc_AN][41]; | |
Gxyz[Gc_AN][18] += Gxyz[Gc_AN][42]; | |
Gxyz[Gc_AN][19] += Gxyz[Gc_AN][43]; | |
} | |
/*********************************** | |
freeing of arrays | |
************************************/ | |
free(Indicator); | |
for (ID=0; ID<numprocs; ID++){ | |
free(S_array[ID]); | |
} | |
free(S_array); | |
for (ID=0; ID<numprocs; ID++){ | |
free(R_array[ID]); | |
} | |
free(R_array); | |
free(Snd_OLP_Size); | |
free(Rcv_OLP_Size); | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/********************************************************************** | |
Total_Energy.c: | |
Total_Energy.c is a subrutine to calculate the total energy | |
Log of Total_Energy.c: | |
22/Nov/2001 Released by T. Ozaki | |
19/Feb/2006 The subroutine name 'Correction_Energy' was changed | |
to 'Total_Energy' | |
2/Dec./2020 Modified by N. Yamaguchi for a correction | |
about sawtooth potential for electric fields | |
***********************************************************************/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <math.h> | |
#include <time.h> | |
#include "openmx_common.h" | |
#include "mpi.h" | |
#include <omp.h> | |
#define measure_time 0 | |
#define Num_Leb_Grid 590 | |
static double Calc_Ecore(); | |
static double Calc_EH0(int MD_iter); | |
static double Calc_Ekin(); | |
static double Calc_Ena(); | |
static double Calc_Enl(); | |
static double Calc_ECH(); | |
static void Calc_EXC_EH1(double ECE[],double *****CDM); | |
static double Calc_Ehub(); /* --- added by MJ */ | |
static double Calc_EdftD(); /* added by okuno */ | |
static double Calc_EdftD3(); /* added by Ellner */ | |
static void EH0_TwoCenter(int Gc_AN, int h_AN, double VH0ij[4]); | |
static void EH0_TwoCenter_at_Cutoff(int wan1, int wan2, double VH0ij[4]); | |
static void Set_Lebedev_Grid(); | |
static void Energy_Decomposition(double ECE[]); | |
double Leb_Grid_XYZW[Num_Leb_Grid][4]; | |
/* for OpenMP */ | |
int OneD_Nloop,*OneD2Mc_AN,*OneD2h_AN; | |
double Total_Energy(int MD_iter, double *****CDM, double ECE[]) | |
{ | |
double time0; | |
double TStime,TEtime; | |
int numprocs,myid; | |
int Mc_AN,Gc_AN,h_AN; | |
double stime,etime; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
dtime(&TStime); | |
/**************************************************** | |
For OpenMP: | |
making of arrays of the one-dimensionalized loop | |
****************************************************/ | |
OneD_Nloop = 0; | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
OneD_Nloop++; | |
} | |
} | |
OneD2Mc_AN = (int*)malloc(sizeof(int)*(OneD_Nloop+1)); | |
OneD2h_AN = (int*)malloc(sizeof(int)*(OneD_Nloop+1)); | |
OneD_Nloop = 0; | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
OneD2Mc_AN[OneD_Nloop] = Mc_AN; | |
OneD2h_AN[OneD_Nloop] = h_AN; | |
OneD_Nloop++; | |
} | |
} | |
/**************************************************** | |
core-core repulsion energy | |
****************************************************/ | |
dtime(&stime); | |
ECE[0] = Calc_Ecore(); | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for Ecore=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/**************************************************** | |
EH0 = -1/2\int n^a(r) V^a_H dr | |
****************************************************/ | |
dtime(&stime); | |
ECE[1] = Calc_EH0(MD_iter); | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for EH0=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/**************************************************** | |
kinetic energy | |
****************************************************/ | |
dtime(&stime); | |
if (F_Kin_flag==1) ECE[2] = Calc_Ekin(); | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for Ekin=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/**************************************************** | |
neutral atom potential energy | |
****************************************************/ | |
dtime(&stime); | |
if (F_VNA_flag==1 && ProExpn_VNA==1) ECE[3] = Calc_Ena(); | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for Ena=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/**************************************************** | |
non-local pseudo potential energy | |
****************************************************/ | |
dtime(&stime); | |
if (F_NL_flag==1) ECE[4] = Calc_Enl(); | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for Enl=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/**************************************************** | |
The penalty term to create a core hole | |
****************************************************/ | |
dtime(&stime); | |
if (core_hole_state_flag==1 && F_CH_flag==1){ | |
ECE[14] = Calc_ECH(); | |
} | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for ECH=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/**************************************************** | |
EXC = \sum_{\sigma} (n_{\sigma}(r)+n_pcc(r)\epsilon_{xc} | |
EH1 = 1/2\int {n(r)-n_a(r)} \delta V_H(r) dr | |
if (ProExpn_VNA==0) Ena = \int n(r) Vna(r) dr | |
****************************************************/ | |
dtime(&stime); | |
Calc_EXC_EH1(ECE,CDM); | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for EXC_EH1=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/**************************************************** | |
LDA+U energy --- added by MJ | |
****************************************************/ | |
if (F_U_flag==1){ | |
if (Hub_U_switch==1) ECE[8] = Calc_Ehub(); | |
else ECE[8] = 0.0; | |
} | |
/********************************************************* | |
DFT-D2 and D3 by Grimme (implemented by Okuno and Ellner) | |
*********************************************************/ | |
if(F_dftD_flag==1){ | |
if(dftD_switch==1){ | |
if(version_dftD==2) ECE[13] = Calc_EdftD(); | |
if(version_dftD==3) ECE[13] = Calc_EdftD3(); | |
} | |
else ECE[13] = 0.0; | |
} | |
/**************************************************** | |
Stress coming from volume terms | |
ECE[3]; Una | |
ECE[5]; UH1 | |
The volume term coming from Exc is added in | |
Calc_EXC_EH1 | |
****************************************************/ | |
if (scf_stress_flag){ | |
if (ProExpn_VNA==0){ | |
double s3,s5; | |
s3 = (double)F_VNA_flag*ECE[3]; | |
s5 = (double)F_dVHart_flag*ECE[5]; | |
Stress_Tensor[0] += s3 + s5; | |
Stress_Tensor[4] += s3 + s5; | |
Stress_Tensor[8] += s3 + s5; | |
} | |
else{ | |
double s5; | |
s5 = (double)F_dVHart_flag*ECE[5]; | |
Stress_Tensor[0] += s5; | |
Stress_Tensor[4] += s5; | |
Stress_Tensor[8] += s5; | |
} | |
{ | |
int i,j; | |
double tmp; | |
/* symmetrization of stress tensor */ | |
for (i=0; i<3; i++){ | |
for (j=(i+1); j<3; j++){ | |
tmp = 0.5*(Stress_Tensor[3*i+j]+Stress_Tensor[3*j+i]); | |
Stress_Tensor[3*i+j] = tmp; | |
Stress_Tensor[3*j+i] = tmp; | |
} | |
} | |
/* show the stress tensor including all the contributions */ | |
if (myid==Host_ID && 0<level_stdout){ | |
printf("\n*******************************************************\n"); fflush(stdout); | |
printf(" Stress tensor (Hartree/bohr^3) \n"); fflush(stdout); | |
printf("*******************************************************\n\n"); fflush(stdout); | |
for (i=0; i<3; i++){ | |
for (j=0; j<3; j++){ | |
printf("%17.8f ", Stress_Tensor[3*i+j]/Cell_Volume); | |
} | |
printf("\n");fflush(stdout); | |
} | |
} | |
} | |
} | |
/********************************************************* | |
decomposition of total energy | |
*********************************************************/ | |
if (Energy_Decomposition_flag==1){ | |
Energy_Decomposition(ECE); | |
} | |
/**************************************************** | |
freeing of arrays | |
****************************************************/ | |
free(OneD2Mc_AN); | |
free(OneD2h_AN); | |
/* computational time */ | |
dtime(&TEtime); | |
time0 = TEtime - TStime; | |
return time0; | |
} | |
double Calc_Ekin() | |
{ | |
/**************************************************** | |
calculate the kinetic energy, Ekin | |
****************************************************/ | |
int i,j,spin,spinmax; | |
int Mc_AN,Gc_AN,Cwan,Rn,h_AN,Gh_AN,Hwan; | |
double My_Ekin,Ekin,Zc,Zh,dum,dum2; | |
int numprocs,myid; | |
double Stime_atom, Etime_atom; | |
double *My_Ekin_threads; | |
/* for OpenMP */ | |
int OMPID,Nthrds,Nthrds0,Nprocs,Nloop; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
/**************************************************** | |
conventional calculation of kinetic energy | |
****************************************************/ | |
/* get Nthrds0 */ | |
#pragma omp parallel shared(Nthrds0) | |
{ | |
Nthrds0 = omp_get_num_threads(); | |
} | |
/* allocation of array */ | |
My_Ekin_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
for (Nloop=0; Nloop<Nthrds0; Nloop++) My_Ekin_threads[Nloop] = 0.0; | |
if (SpinP_switch==0 || SpinP_switch==1){ | |
for (spin=0; spin<=SpinP_switch; spin++){ | |
#pragma omp parallel shared(SpinP_switch,time_per_atom,spin,CntH0,H0,DM,My_Ekin_threads,Spe_Total_CNO,Cnt_switch,natn,WhatSpecies,M2G,OneD2h_AN,OneD2Mc_AN,OneD_Nloop) private(OMPID,Nthrds,Nprocs,Nloop,Stime_atom,Mc_AN,h_AN,Gc_AN,Cwan,Gh_AN,Hwan,i,j,Etime_atom) | |
{ | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
/* one-dimensionalized loop */ | |
for (Nloop=OMPID*OneD_Nloop/Nthrds; Nloop<(OMPID+1)*OneD_Nloop/Nthrds; Nloop++){ | |
dtime(&Stime_atom); | |
/* get Mc_AN and h_AN */ | |
Mc_AN = OneD2Mc_AN[Nloop]; | |
h_AN = OneD2h_AN[Nloop]; | |
/* set data on Mc_AN */ | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
/* set data on h_AN */ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
if (Cnt_switch==0){ | |
for (i=0; i<Spe_Total_CNO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ | |
My_Ekin_threads[OMPID] += DM[0][spin][Mc_AN][h_AN][i][j]*H0[0][Mc_AN][h_AN][i][j]; | |
} | |
} | |
} | |
else{ | |
for (i=0; i<Spe_Total_CNO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ | |
My_Ekin_threads[OMPID] += DM[0][spin][Mc_AN][h_AN][i][j]*CntH0[0][Mc_AN][h_AN][i][j]; | |
} | |
} | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} | |
if (SpinP_switch==0) My_Ekin_threads[OMPID] = 2.0*My_Ekin_threads[OMPID]; | |
} /* #pragma omp parallel */ | |
} /* spin */ | |
} | |
else if (SpinP_switch==3){ | |
#pragma omp parallel shared(time_per_atom,H0,DM,My_Ekin_threads,Spe_Total_CNO,natn,WhatSpecies,M2G,OneD2h_AN,OneD2Mc_AN,OneD_Nloop) private(OMPID,Nthrds,Nprocs,Nloop,Stime_atom,Mc_AN,Gc_AN,Cwan,h_AN,Gh_AN,Hwan,i,j,Etime_atom) | |
{ | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
/* one-dimensionalized loop */ | |
for (Nloop=OMPID*OneD_Nloop/Nthrds; Nloop<(OMPID+1)*OneD_Nloop/Nthrds; Nloop++){ | |
dtime(&Stime_atom); | |
/* get Mc_AN and h_AN */ | |
Mc_AN = OneD2Mc_AN[Nloop]; | |
h_AN = OneD2h_AN[Nloop]; | |
/* set data on Mc_AN */ | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
/* set data on h_AN */ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
for (i=0; i<Spe_Total_CNO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ | |
My_Ekin_threads[OMPID] += (DM[0][0][Mc_AN][h_AN][i][j] + DM[0][1][Mc_AN][h_AN][i][j])*H0[0][Mc_AN][h_AN][i][j]; | |
} | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} | |
} /* #pragma omp parallel */ | |
} | |
/* sum of My_Ekin_threads */ | |
My_Ekin = 0.0; | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
My_Ekin += My_Ekin_threads[Nloop]; | |
} | |
/* sum of My_Ekin */ | |
MPI_Allreduce(&My_Ekin, &Ekin, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
/* freeing of array */ | |
free(My_Ekin_threads); | |
/**************************************************** | |
return Ekin | |
****************************************************/ | |
return Ekin; | |
} | |
double Calc_Ena() | |
{ | |
/**************************************************** | |
calculate the neutral atom potential energy, Ena | |
****************************************************/ | |
int i,j,spin,spinmax; | |
int Mc_AN,Gc_AN,Cwan,Rn,h_AN,Gh_AN,Hwan; | |
double My_Ena,Ena,Zc,Zh,dum,dum2; | |
int numprocs,myid; | |
double Stime_atom, Etime_atom; | |
double *My_Ena_threads; | |
/* for OpenMP */ | |
int OMPID,Nthrds,Nthrds0,Nprocs,Nloop; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
/********************************************************** | |
conventional calculation of neutral atom potential energy | |
**********************************************************/ | |
/* get Nthrds0 */ | |
#pragma omp parallel shared(Nthrds0) | |
{ | |
Nthrds0 = omp_get_num_threads(); | |
} | |
/* allocation of array */ | |
My_Ena_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
for (Nloop=0; Nloop<Nthrds0; Nloop++) My_Ena_threads[Nloop] = 0.0; | |
if (SpinP_switch==0 || SpinP_switch==1){ | |
if (Cnt_switch==1){ | |
/* temporaly, we borrow the CntH0 matrix */ | |
Cont_Matrix0(HVNA,CntH0[0]); | |
} | |
for (spin=0; spin<=SpinP_switch; spin++){ | |
#pragma omp parallel shared(spin,SpinP_switch,time_per_atom,CntH0,HVNA,DM,My_Ena_threads,Spe_Total_CNO,Cnt_switch,natn,WhatSpecies,M2G,OneD2h_AN,OneD2Mc_AN,OneD_Nloop) private(OMPID,Nthrds,Nprocs,Nloop,Stime_atom,Mc_AN,h_AN,Gc_AN,Cwan,Gh_AN,Hwan,i,j,Etime_atom) | |
{ | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
/* one-dimensionalized loop */ | |
for (Nloop=OMPID*OneD_Nloop/Nthrds; Nloop<(OMPID+1)*OneD_Nloop/Nthrds; Nloop++){ | |
dtime(&Stime_atom); | |
/* get Mc_AN and h_AN */ | |
Mc_AN = OneD2Mc_AN[Nloop]; | |
h_AN = OneD2h_AN[Nloop]; | |
/* set data on Mc_AN */ | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
/* set data on h_AN */ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
if (Cnt_switch==0){ | |
for (i=0; i<Spe_Total_CNO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ | |
My_Ena_threads[OMPID] += DM[0][spin][Mc_AN][h_AN][i][j]*HVNA[Mc_AN][h_AN][i][j]; | |
} | |
} | |
} | |
else { | |
for (i=0; i<Spe_Total_CNO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ | |
My_Ena_threads[OMPID] += DM[0][spin][Mc_AN][h_AN][i][j]*CntH0[0][Mc_AN][h_AN][i][j]; | |
} | |
} | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} | |
if (SpinP_switch==0) My_Ena_threads[OMPID] = 2.0*My_Ena_threads[OMPID]; | |
} /* #pragma omp parallel */ | |
} /* spin */ | |
} | |
else if (SpinP_switch==3){ | |
#pragma omp parallel shared(time_per_atom,HVNA,DM,Spe_Total_CNO,natn,WhatSpecies,M2G,OneD2h_AN,OneD2Mc_AN,OneD_Nloop) private(OMPID,Nthrds,Nprocs,Nloop,Stime_atom,Mc_AN,Gc_AN,h_AN,Cwan,Gh_AN,Hwan,i,j,Etime_atom) | |
{ | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
/* one-dimensionalized loop */ | |
for (Nloop=OMPID*OneD_Nloop/Nthrds; Nloop<(OMPID+1)*OneD_Nloop/Nthrds; Nloop++){ | |
dtime(&Stime_atom); | |
/* get Mc_AN and h_AN */ | |
Mc_AN = OneD2Mc_AN[Nloop]; | |
h_AN = OneD2h_AN[Nloop]; | |
/* set data on Mc_AN */ | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
/* set data on h_AN */ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
for (i=0; i<Spe_Total_CNO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ | |
My_Ena_threads[OMPID] += (DM[0][0][Mc_AN][h_AN][i][j]+DM[0][1][Mc_AN][h_AN][i][j])*HVNA[Mc_AN][h_AN][i][j]; | |
} | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} /* Nloop */ | |
} /* #pragma omp parallel */ | |
} /* else if (SpinP_switch==3) */ | |
/* sum of My_Ena_threads */ | |
My_Ena = 0.0; | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
My_Ena += My_Ena_threads[Nloop]; | |
} | |
/* sum of My_Ena */ | |
MPI_Allreduce(&My_Ena, &Ena, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
/* freeing of array */ | |
free(My_Ena_threads); | |
/**************************************************** | |
return Ena | |
****************************************************/ | |
return Ena; | |
} | |
double Calc_Enl() | |
{ | |
/**************************************************** | |
calculate the non-local pseudo potential energy | |
****************************************************/ | |
int i,j,spin,spinmax; | |
int Mc_AN,Gc_AN,Cwan,Rn,h_AN,Gh_AN,Hwan; | |
double My_Enl,Enl,Zc,Zh,dum,dum2; | |
int numprocs,myid; | |
double Stime_atom, Etime_atom; | |
double *My_Enl_threads; | |
/* for OpenMP */ | |
int OMPID,Nthrds,Nthrds0,Nprocs,Nloop; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
/******************************************************************* | |
conventional calculation of the non-local pseudo potential energy | |
*******************************************************************/ | |
/* get Nthrds0 */ | |
#pragma omp parallel shared(Nthrds0) | |
{ | |
Nthrds0 = omp_get_num_threads(); | |
} | |
/* allocation of array */ | |
My_Enl_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
for (Nloop=0; Nloop<Nthrds0; Nloop++) My_Enl_threads[Nloop] = 0.0; | |
if (SpinP_switch==0 || SpinP_switch==1){ | |
for (spin=0; spin<=SpinP_switch; spin++){ | |
if (Cnt_switch==1){ | |
/* temporaly, borrow the CntH0 matrix */ | |
Cont_Matrix0(HNL[spin],CntH0[0]); | |
} | |
#pragma omp parallel shared(spin,SpinP_switch,time_per_atom,CntH0,HNL,DM,My_Enl_threads,Spe_Total_CNO,Cnt_switch,natn,WhatSpecies,M2G,OneD2h_AN,OneD2Mc_AN,OneD_Nloop) private(OMPID,Nthrds,Nprocs,Nloop,Stime_atom,Mc_AN,h_AN,Gc_AN,Cwan,Gh_AN,Hwan,Etime_atom,i,j) | |
{ | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
/* one-dimensionalized loop */ | |
for (Nloop=OMPID*OneD_Nloop/Nthrds; Nloop<(OMPID+1)*OneD_Nloop/Nthrds; Nloop++){ | |
dtime(&Stime_atom); | |
/* get Mc_AN and h_AN */ | |
Mc_AN = OneD2Mc_AN[Nloop]; | |
h_AN = OneD2h_AN[Nloop]; | |
/* set data on Mc_AN */ | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
/* set data on h_AN */ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
if (Cnt_switch==0){ | |
for (i=0; i<Spe_Total_CNO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ | |
My_Enl_threads[OMPID] += DM[0][spin][Mc_AN][h_AN][i][j]*HNL[spin][Mc_AN][h_AN][i][j]; | |
} | |
} | |
} | |
else { | |
for (i=0; i<Spe_Total_CNO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ | |
My_Enl_threads[OMPID] += DM[0][spin][Mc_AN][h_AN][i][j]*CntH0[0][Mc_AN][h_AN][i][j]; | |
} | |
} | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} /* Nloop */ | |
if (SpinP_switch==0) My_Enl_threads[OMPID] = 2.0*My_Enl_threads[OMPID]; | |
} /* #pragma omp parallel */ | |
} /* spin */ | |
} | |
else if (SpinP_switch==3){ | |
#pragma omp parallel shared(time_per_atom,iHNL0,HNL,iDM,DM,My_Enl_threads,Spe_Total_CNO,natn,WhatSpecies,M2G,OneD2h_AN,OneD2Mc_AN,OneD_Nloop) private(OMPID,Nthrds,Nprocs,Nloop,Stime_atom,Etime_atom,Mc_AN,h_AN,Gc_AN,Cwan,Gh_AN,Hwan,i,j) | |
{ | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
/* one-dimensionalized loop */ | |
for (Nloop=OMPID*OneD_Nloop/Nthrds; Nloop<(OMPID+1)*OneD_Nloop/Nthrds; Nloop++){ | |
dtime(&Stime_atom); | |
/* get Mc_AN and h_AN */ | |
Mc_AN = OneD2Mc_AN[Nloop]; | |
h_AN = OneD2h_AN[Nloop]; | |
/* set data on Mc_AN */ | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
/* set data on h_AN */ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
for (i=0; i<Spe_Total_CNO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ | |
My_Enl_threads[OMPID] += | |
DM[0][0][Mc_AN][h_AN][i][j]* HNL[0][Mc_AN][h_AN][i][j] | |
- iDM[0][0][Mc_AN][h_AN][i][j]*iHNL0[0][Mc_AN][h_AN][i][j] | |
+ DM[0][1][Mc_AN][h_AN][i][j]* HNL[1][Mc_AN][h_AN][i][j] | |
- iDM[0][1][Mc_AN][h_AN][i][j]*iHNL0[1][Mc_AN][h_AN][i][j] | |
+ 2.0*DM[0][2][Mc_AN][h_AN][i][j]* HNL[2][Mc_AN][h_AN][i][j] | |
- 2.0*DM[0][3][Mc_AN][h_AN][i][j]*iHNL0[2][Mc_AN][h_AN][i][j]; | |
} | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} /* Nloop */ | |
} /* #pragma omp parallel */ | |
} | |
/* sum of My_Enl_threads */ | |
My_Enl = 0.0; | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
My_Enl += My_Enl_threads[Nloop]; | |
} | |
/* sum of My_Enl */ | |
MPI_Allreduce(&My_Enl, &Enl, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
/* freeing of array */ | |
free(My_Enl_threads); | |
/**************************************************** | |
return Enl | |
****************************************************/ | |
return Enl; | |
} | |
double Calc_ECH() | |
{ | |
/**************************************************** | |
calculate the penalty term to create a core-hole | |
****************************************************/ | |
int i,j,spin,spinmax; | |
int Mc_AN,Gc_AN,Cwan,Rn,h_AN,Gh_AN,Hwan; | |
double My_ECH,ECH,Zc,Zh,dum,dum2; | |
int numprocs,myid; | |
double Stime_atom, Etime_atom; | |
double *My_ECH_threads; | |
/* for OpenMP */ | |
int OMPID,Nthrds,Nthrds0,Nprocs,Nloop; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
/******************************************************************* | |
conventional calculation of the penalty term | |
*******************************************************************/ | |
/* get Nthrds0 */ | |
#pragma omp parallel shared(Nthrds0) | |
{ | |
Nthrds0 = omp_get_num_threads(); | |
} | |
/* allocation of array */ | |
My_ECH_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
for (Nloop=0; Nloop<Nthrds0; Nloop++) My_ECH_threads[Nloop] = 0.0; | |
if (SpinP_switch==0 || SpinP_switch==1){ | |
for (spin=0; spin<=SpinP_switch; spin++){ | |
#pragma omp parallel shared(spin,SpinP_switch,time_per_atom,HCH,DM,My_ECH_threads,Spe_Total_CNO,Cnt_switch,natn,WhatSpecies,M2G,OneD2h_AN,OneD2Mc_AN,OneD_Nloop) private(OMPID,Nthrds,Nprocs,Nloop,Stime_atom,Mc_AN,h_AN,Gc_AN,Cwan,Gh_AN,Hwan,Etime_atom,i,j) | |
{ | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
/* one-dimensionalized loop */ | |
for (Nloop=OMPID*OneD_Nloop/Nthrds; Nloop<(OMPID+1)*OneD_Nloop/Nthrds; Nloop++){ | |
dtime(&Stime_atom); | |
/* get Mc_AN and h_AN */ | |
Mc_AN = OneD2Mc_AN[Nloop]; | |
h_AN = OneD2h_AN[Nloop]; | |
/* set data on Mc_AN */ | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
/* set data on h_AN */ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
for (i=0; i<Spe_Total_CNO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ | |
My_ECH_threads[OMPID] += DM[0][spin][Mc_AN][h_AN][i][j]*HCH[spin][Mc_AN][h_AN][i][j]; | |
} | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} /* Nloop */ | |
if (SpinP_switch==0) My_ECH_threads[OMPID] = 2.0*My_ECH_threads[OMPID]; | |
} /* #pragma omp parallel */ | |
} /* spin */ | |
} | |
else if (SpinP_switch==3){ | |
#pragma omp parallel shared(time_per_atom,iHCH,HCH,iDM,DM,My_ECH_threads,Spe_Total_CNO,natn,WhatSpecies,M2G,OneD2h_AN,OneD2Mc_AN,OneD_Nloop) private(OMPID,Nthrds,Nprocs,Nloop,Stime_atom,Etime_atom,Mc_AN,h_AN,Gc_AN,Cwan,Gh_AN,Hwan,i,j) | |
{ | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
/* one-dimensionalized loop */ | |
for (Nloop=OMPID*OneD_Nloop/Nthrds; Nloop<(OMPID+1)*OneD_Nloop/Nthrds; Nloop++){ | |
dtime(&Stime_atom); | |
/* get Mc_AN and h_AN */ | |
Mc_AN = OneD2Mc_AN[Nloop]; | |
h_AN = OneD2h_AN[Nloop]; | |
/* set data on Mc_AN */ | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
/* set data on h_AN */ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
for (i=0; i<Spe_Total_CNO[Cwan]; i++){ | |
for (j=0; j<Spe_Total_CNO[Hwan]; j++){ | |
My_ECH_threads[OMPID] += | |
DM[0][0][Mc_AN][h_AN][i][j]* HCH[0][Mc_AN][h_AN][i][j] | |
- iDM[0][0][Mc_AN][h_AN][i][j]*iHCH[0][Mc_AN][h_AN][i][j] | |
+ DM[0][1][Mc_AN][h_AN][i][j]* HCH[1][Mc_AN][h_AN][i][j] | |
- iDM[0][1][Mc_AN][h_AN][i][j]*iHCH[1][Mc_AN][h_AN][i][j] | |
+ 2.0*DM[0][2][Mc_AN][h_AN][i][j]* HCH[2][Mc_AN][h_AN][i][j] | |
- 2.0*DM[0][3][Mc_AN][h_AN][i][j]*iHCH[2][Mc_AN][h_AN][i][j]; | |
} | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} /* Nloop */ | |
} /* #pragma omp parallel */ | |
} | |
/* sum of My_ECH_threads */ | |
My_ECH = 0.0; | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
My_ECH += My_ECH_threads[Nloop]; | |
} | |
/* sum of My_ECH */ | |
MPI_Allreduce(&My_ECH, &ECH, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
/* freeing of array */ | |
free(My_ECH_threads); | |
/**************************************************** | |
return ECH | |
****************************************************/ | |
return ECH; | |
} | |
double Calc_Ecore() | |
{ | |
/**************************************************** | |
Ecore | |
****************************************************/ | |
int Mc_AN,Gc_AN,Cwan,Rn,h_AN,Gh_AN,Hwan; | |
int i,spin,spinmax; | |
double My_Ecore,Ecore,Zc,Zh,dum,dum2; | |
double *My_Ecore_threads; | |
double TmpEcore,dEx,dEy,dEz,r,lx,ly,lz; | |
int numprocs,myid; | |
double Stime_atom,Etime_atom; | |
/* for OpenMP */ | |
int OMPID,Nthrds,Nthrds0,Nprocs,Nloop; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
if (myid==Host_ID && 0<level_stdout){ | |
printf(" Force calculation #6\n");fflush(stdout); | |
} | |
/* get Nthrds0 */ | |
#pragma omp parallel shared(Nthrds0) | |
{ | |
Nthrds0 = omp_get_num_threads(); | |
} | |
/* allocation of array */ | |
My_Ecore_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
for (Nloop=0; Nloop<Nthrds0; Nloop++) My_Ecore_threads[Nloop] = 0.0; | |
#pragma omp parallel shared(level_stdout,time_per_atom,atv,Gxyz,Dis,ncn,natn,FNAN,Spe_Core_Charge,WhatSpecies,M2G,Matomnum,My_Ecore_threads,DecEscc,Energy_Decomposition_flag,SpinP_switch,Spe_MaxL_Basis,Spe_Num_Basis) private(OMPID,Nthrds,Nprocs,Mc_AN,Stime_atom,Gc_AN,Cwan,Zc,dEx,dEy,dEz,h_AN,Gh_AN,Rn,Hwan,Zh,r,lx,ly,lz,dum,dum2,Etime_atom,TmpEcore) | |
{ | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (Mc_AN=(OMPID*Matomnum/Nthrds+1); Mc_AN<((OMPID+1)*Matomnum/Nthrds+1); Mc_AN++){ | |
dtime(&Stime_atom); | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
Zc = Spe_Core_Charge[Cwan]; | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
TmpEcore = 0.0; | |
for (h_AN=1; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Rn = ncn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
Zh = Spe_Core_Charge[Hwan]; | |
r = Dis[Gc_AN][h_AN]; | |
/* for empty atoms or finite elemens basis */ | |
if (r<1.0e-10) r = 1.0e-10; | |
lx = (Gxyz[Gc_AN][1] - Gxyz[Gh_AN][1] - atv[Rn][1])/r; | |
ly = (Gxyz[Gc_AN][2] - Gxyz[Gh_AN][2] - atv[Rn][2])/r; | |
lz = (Gxyz[Gc_AN][3] - Gxyz[Gh_AN][3] - atv[Rn][3])/r; | |
dum = Zc*Zh/r; | |
dum2 = dum/r; | |
TmpEcore += dum; | |
dEx = dEx - lx*dum2; | |
dEy = dEy - ly*dum2; | |
dEz = dEz - lz*dum2; | |
} /* h_AN */ | |
/**************************************************** | |
#6 of force | |
Contribution from the core-core repulsions | |
****************************************************/ | |
My_Ecore_threads[OMPID] += 0.50*TmpEcore; | |
Gxyz[Gc_AN][17] += dEx; | |
Gxyz[Gc_AN][18] += dEy; | |
Gxyz[Gc_AN][19] += dEz; | |
if (Energy_Decomposition_flag==1){ | |
DecEscc[0][Mc_AN][0] = 0.25*TmpEcore; | |
DecEscc[1][Mc_AN][0] = 0.25*TmpEcore; | |
} | |
if (2<=level_stdout){ | |
printf("<Total_Ene> force(6) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,dEx,dEy,dEz);fflush(stdout); | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} | |
} /* #pragma omp parallel */ | |
My_Ecore = 0.0; | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
My_Ecore += My_Ecore_threads[Nloop]; | |
} | |
MPI_Allreduce(&My_Ecore, &Ecore, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
/* freeing of array */ | |
free(My_Ecore_threads); | |
return Ecore; | |
} | |
double Calc_EH0(int MD_iter) | |
{ | |
/**************************************************** | |
EH0 = -1/2\int n^a(r) V^a_H dr | |
****************************************************/ | |
int Mc_AN,Gc_AN,h_AN,Gh_AN,num,gnum,i; | |
int wan,wan1,wan2,Nd,n1,n2,n3,spin,spinmax; | |
double bc,dx,x,y,z,r1,r2,rho0,xx; | |
double Scale_Grid_Ecut,TmpEH0; | |
double EH0ij[4],My_EH0,EH0,tmp0; | |
double *Fx,*Fy,*Fz,*g0; | |
double dEx,dEy,dEz,Dx,Sx; | |
double Z1,Z2,factor; | |
double My_dEx,My_dEy,My_dEz; | |
int numprocs,myid,ID; | |
double stime,etime; | |
double Stime_atom, Etime_atom; | |
/* for OpenMP */ | |
int OMPID,Nthrds,Nthrds0,Nprocs,Nloop; | |
double *My_EH0_threads; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
/**************************************************** | |
allocation of arrays: | |
double Fx[Matomnum+1]; | |
double Fy[Matomnum+1]; | |
doubel Fz[Matomnum+1]; | |
****************************************************/ | |
Fx = (double*)malloc(sizeof(double)*(Matomnum+1)); | |
Fy = (double*)malloc(sizeof(double)*(Matomnum+1)); | |
Fz = (double*)malloc(sizeof(double)*(Matomnum+1)); | |
/**************************************************** | |
Set of atomic density on grids | |
****************************************************/ | |
if (MD_iter==1){ | |
dtime(&stime); | |
Scale_Grid_Ecut = 16.0*600.0; | |
/* estimate the size of an array g0 */ | |
Max_Nd = 0; | |
for (wan=0; wan<SpeciesNum; wan++){ | |
Spe_Spe2Ban[wan] = wan; | |
bc = Spe_Atom_Cut1[wan]; | |
dx = PI/sqrt(Scale_Grid_Ecut); | |
Nd = 2*(int)(bc/dx) + 1; | |
if (Max_Nd<Nd) Max_Nd = Nd; | |
} | |
/* estimate sizes of arrays GridX,Y,Z_EH0, Arho_EH0, and Wt_EH0 */ | |
Max_TGN_EH0 = 0; | |
for (wan=0; wan<SpeciesNum; wan++){ | |
Spe_Spe2Ban[wan] = wan; | |
bc = Spe_Atom_Cut1[wan]; | |
dx = PI/sqrt(Scale_Grid_Ecut); | |
Nd = 2*(int)(bc/dx) + 1; | |
dx = 2.0*bc/(double)(Nd-1); | |
gnum = Nd*CoarseGL_Mesh; | |
if (Max_TGN_EH0<gnum) Max_TGN_EH0 = gnum; | |
if (2<=level_stdout){ | |
printf("<Calc_EH0> A spe=%2d 1D-grids=%2d 3D-grids=%2d\n",wan,Nd,gnum);fflush(stdout); | |
} | |
} | |
/* allocation of arrays GridX,Y,Z_EH0, Arho_EH0, and Wt_EH0 */ | |
Max_TGN_EH0 += 10; | |
Allocate_Arrays(4); | |
/* calculate GridX,Y,Z_EH0 and Wt_EH0 */ | |
#pragma omp parallel shared(Spe_Num_Mesh_PAO,Spe_PAO_XV,Spe_Atomic_Den,Max_Nd,level_stdout,TGN_EH0,Wt_EH0,Arho_EH0,GridZ_EH0,GridY_EH0,GridX_EH0,Scale_Grid_Ecut,Spe_Atom_Cut1,dv_EH0,Spe_Spe2Ban,SpeciesNum,CoarseGL_Abscissae,CoarseGL_Weight) private(OMPID,Nthrds,Nprocs,wan,bc,dx,Nd,gnum,n1,n2,n3,x,y,z,tmp0,r1,rho0,g0,Sx,Dx,xx) | |
{ | |
int l,p; | |
/* allocation of arrays g0 */ | |
g0 = (double*)malloc(sizeof(double)*Max_Nd); | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (wan=OMPID*SpeciesNum/Nthrds; wan<(OMPID+1)*SpeciesNum/Nthrds; wan++){ | |
Spe_Spe2Ban[wan] = wan; | |
bc = Spe_Atom_Cut1[wan]; | |
dx = PI/sqrt(Scale_Grid_Ecut); | |
Nd = 2*(int)(bc/dx) + 1; | |
dx = 2.0*bc/(double)(Nd-1); | |
dv_EH0[wan] = dx; | |
for (n1=0; n1<Nd; n1++){ | |
g0[n1] = dx*(double)n1 - bc; | |
} | |
gnum = 0; | |
y = 0.0; | |
Sx = Spe_Atom_Cut1[wan] + 0.0; | |
Dx = Spe_Atom_Cut1[wan] - 0.0; | |
for (n3=0; n3<Nd; n3++){ | |
z = g0[n3]; | |
tmp0 = z*z; | |
for (n1=0; n1<CoarseGL_Mesh; n1++){ | |
x = 0.50*(Dx*CoarseGL_Abscissae[n1] + Sx); | |
xx = 0.5*log(x*x + tmp0); | |
GridX_EH0[wan][gnum] = x; | |
GridY_EH0[wan][gnum] = y; | |
GridZ_EH0[wan][gnum] = z; | |
rho0 = KumoF( Spe_Num_Mesh_PAO[wan], xx, | |
Spe_PAO_XV[wan], Spe_PAO_RV[wan], Spe_Atomic_Den[wan]); | |
Arho_EH0[wan][gnum] = rho0; | |
Wt_EH0[wan][gnum] = PI*x*CoarseGL_Weight[n1]*Dx; | |
/* increment of gnum */ | |
gnum++; | |
} | |
} /* n3 */ | |
TGN_EH0[wan] = gnum; | |
if (2<=level_stdout){ | |
printf("<Calc_EH0> B spe=%2d 1D-grids=%2d 3D-grids=%2d\n",wan,Nd,gnum);fflush(stdout); | |
} | |
} /* wan */ | |
/* free */ | |
free(g0); | |
} /* #pragma omp parallel */ | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for part1 of EH0=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
} /* if (MD_iter==1) */ | |
/**************************************************** | |
calculation of scaling factors: | |
****************************************************/ | |
if (MD_iter==1){ | |
for (wan1=0; wan1<SpeciesNum; wan1++){ | |
r1 = Spe_Atom_Cut1[wan1]; | |
Z1 = Spe_Core_Charge[wan1]; | |
for (wan2=0; wan2<SpeciesNum; wan2++){ | |
/* EH0_TwoCenter_at_Cutoff is parallelized by OpenMP */ | |
EH0_TwoCenter_at_Cutoff(wan1, wan2, EH0ij); | |
r2 = Spe_Atom_Cut1[wan2]; | |
Z2 = Spe_Core_Charge[wan2]; | |
tmp0 = Z1*Z2/(r1+r2); | |
if (1.0e-20<fabs(EH0ij[0])){ | |
EH0_scaling[wan1][wan2] = tmp0/EH0ij[0]; | |
} | |
else{ | |
EH0_scaling[wan1][wan2] = 0.0; | |
} | |
} | |
} | |
} | |
/**************************************************** | |
-1/2\int n^a(r) V^a_H dr | |
****************************************************/ | |
dtime(&stime); | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Fx[Mc_AN] = 0.0; | |
Fy[Mc_AN] = 0.0; | |
Fz[Mc_AN] = 0.0; | |
} | |
/* get Nthrds0 */ | |
#pragma omp parallel shared(Nthrds0) | |
{ | |
Nthrds0 = omp_get_num_threads(); | |
} | |
/* allocation of array */ | |
My_EH0_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
for (Nloop=0; Nloop<Nthrds0; Nloop++) My_EH0_threads[Nloop] = 0.0; | |
#pragma omp parallel shared(time_per_atom,RMI1,EH0_scaling,natn,FNAN,WhatSpecies,M2G,Matomnum,My_EH0_threads,DecEscc,Energy_Decomposition_flag,List_YOUSO,Spe_MaxL_Basis,Spe_Num_Basis,SpinP_switch) private(OMPID,Nthrds,Nprocs,Mc_AN,Stime_atom,Gc_AN,wan1,h_AN,Gh_AN,wan2,factor,Etime_atom,TmpEH0) | |
{ | |
int l,p; | |
double EH0ij[4]; | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (Mc_AN=(OMPID*Matomnum/Nthrds+1); Mc_AN<((OMPID+1)*Matomnum/Nthrds+1); Mc_AN++){ | |
dtime(&Stime_atom); | |
Gc_AN = M2G[Mc_AN]; | |
wan1 = WhatSpecies[Gc_AN]; | |
TmpEH0 = 0.0; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
wan2 = WhatSpecies[Gh_AN]; | |
if (h_AN==0) factor = 1.0; | |
else factor = EH0_scaling[wan1][wan2]; | |
EH0_TwoCenter(Gc_AN, h_AN, EH0ij); | |
TmpEH0 -= 0.250*factor*EH0ij[0]; | |
Fx[Mc_AN] = Fx[Mc_AN] - 0.5*factor*EH0ij[1]; | |
Fy[Mc_AN] = Fy[Mc_AN] - 0.5*factor*EH0ij[2]; | |
Fz[Mc_AN] = Fz[Mc_AN] - 0.5*factor*EH0ij[3]; | |
if (h_AN==0) factor = 1.0; | |
else factor = EH0_scaling[wan2][wan1]; | |
EH0_TwoCenter(Gh_AN, RMI1[Mc_AN][h_AN][0], EH0ij); | |
TmpEH0 -= 0.250*factor*EH0ij[0]; | |
Fx[Mc_AN] = Fx[Mc_AN] + 0.5*factor*EH0ij[1]; | |
Fy[Mc_AN] = Fy[Mc_AN] + 0.5*factor*EH0ij[2]; | |
Fz[Mc_AN] = Fz[Mc_AN] + 0.5*factor*EH0ij[3]; | |
} /* h_AN */ | |
My_EH0_threads[OMPID] += TmpEH0; | |
if (Energy_Decomposition_flag==1){ | |
DecEscc[0][Mc_AN][0] += 0.5*TmpEH0; | |
DecEscc[1][Mc_AN][0] += 0.5*TmpEH0; | |
} | |
dtime(&Etime_atom); | |
time_per_atom[Gc_AN] += Etime_atom - Stime_atom; | |
} /* Mc_AN */ | |
} /* #pragma omp parallel */ | |
/* sum of My_EH0_threads */ | |
My_EH0 = 0.0; | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
My_EH0 += My_EH0_threads[Nloop]; | |
} | |
/* sum of My_EH0 */ | |
MPI_Allreduce(&My_EH0, &EH0, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
/* freeing of array */ | |
free(My_EH0_threads); | |
dtime(&etime); | |
if(myid==0 && measure_time){ | |
printf("Time for part2 of EH0=%18.5f\n",etime-stime);fflush(stdout); | |
} | |
/******************************************************* | |
#7 of force | |
contribution from the classical Coulomb energy between | |
the neutral atomic charge and the neutral potential | |
*******************************************************/ | |
if (myid==Host_ID && 0<level_stdout){ | |
printf(" Force calculation #7\n");fflush(stdout); | |
} | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
if (2<=level_stdout){ | |
printf("<Total_Ene> force(7) myid=%2d Mc_AN=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Mc_AN,Gc_AN,Fx[Mc_AN],Fy[Mc_AN],Fz[Mc_AN]);fflush(stdout); | |
} | |
Gxyz[Gc_AN][17] += Fx[Mc_AN]; | |
Gxyz[Gc_AN][18] += Fy[Mc_AN]; | |
Gxyz[Gc_AN][19] += Fz[Mc_AN]; | |
} | |
/**************************************************** | |
MPI, Gxyz[Gc_AN][17-19] | |
****************************************************/ | |
for (Gc_AN=1; Gc_AN<=atomnum; Gc_AN++){ | |
ID = G2ID[Gc_AN]; | |
MPI_Bcast(&Gxyz[Gc_AN][17], 3, MPI_DOUBLE, ID, mpi_comm_level1); | |
} | |
/**************************************************** | |
freeing of arrays: | |
double Fx[Matomnum+1]; | |
double Fy[Matomnum+1]; | |
doubel Fz[Matomnum+1]; | |
****************************************************/ | |
free(Fx); | |
free(Fy); | |
free(Fz); | |
/* return */ | |
return EH0; | |
} | |
void Calc_EXC_EH1(double ECE[],double *****CDM) | |
{ | |
/************************************************************ | |
EXC = \sum_{\sigma} (n_{\sigma}(r)+n_pcc(r)\epsilon_{xc} | |
EH1 = 1/2\int {n(r)-n_a(r)} \delta V_H dr | |
************************************************************/ | |
static int firsttime=1; | |
int i,spin,spinmax,XC_P_switch; | |
int numS,numR,My_GNum,BN_AB; | |
int n,n1,n2,n3,Ng1,Ng2,Ng3,j,k; | |
int GNc,GRc,MNc; | |
int GN,GNs,BN,DN,LN,N2D,n2D,N3[4]; | |
double EXC[2],EH1,sum,tot_den; | |
double My_EXC[2],My_EH1; | |
double My_EXC_VolumeTerm[2]; | |
double EXC_VolumeTerm[2]; | |
double My_Eef,Eef; | |
double My_Ena,Ena; | |
double sum_charge,My_charge; | |
int numprocs,myid,tag=999,ID,IDS,IDR; | |
double Cxyz[4],gradxyz[4]; | |
double Stime_atom,Etime_atom; | |
double time0,time1; | |
double sden[2],tden,aden,pden[2]; | |
/* dipole moment */ | |
int Gc_AN,Mc_AN,spe; | |
double x,y,z,den,charge,cden_BG; | |
double E_dpx,E_dpy,E_dpz; | |
double E_dpx_BG,E_dpy_BG,E_dpz_BG; | |
double C_dpx,C_dpy,C_dpz; | |
double My_E_dpx_BG,My_E_dpy_BG,My_E_dpz_BG; | |
double My_E_dpx,My_E_dpy,My_E_dpz; | |
double My_C_dpx,My_C_dpy,My_C_dpz; | |
double AU2Debye,AbsD; | |
double x0,y0,z0,r; | |
double rs,re,ts,te,ps,pe; | |
double Sp,Dp,St,Dt,Sr,Dr; | |
double r1,dx,dy,dz,dx1,dy1,dz1; | |
double x1,y1,z1,den0,exc0,w; | |
double sumr,sumt; | |
double sumrx,sumtx; | |
double sumry,sumty; | |
double sumrz,sumtz; | |
double gden0,vxc0; | |
double *My_sumr,*My_sumrx,*My_sumry,*My_sumrz; | |
int ir,ia,Cwan,Rn,Hwan,Gh_AN,h_AN; | |
char file_DPM[YOUSO10] = ".dpm"; | |
FILE *fp_DPM; | |
char buf[fp_bsize]; /* setvbuf */ | |
MPI_Status stat; | |
MPI_Request request; | |
/* for OpenMP */ | |
int OMPID,Nthrds,Nthrds0,Nprocs,Nloop; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
if (SpinP_switch==0) spinmax = 0; | |
else if (SpinP_switch==1) spinmax = 1; | |
else if (SpinP_switch==3) spinmax = 1; | |
/**************************************************** | |
set Vxc_Grid | |
****************************************************/ | |
XC_P_switch = 0; | |
Set_XC_Grid(2, XC_P_switch,XC_switch, | |
Density_Grid_D[0],Density_Grid_D[1], | |
Density_Grid_D[2],Density_Grid_D[3], | |
Vxc_Grid_D[0], Vxc_Grid_D[1], | |
Vxc_Grid_D[2], Vxc_Grid_D[3], | |
NULL,NULL); | |
/**************************************************** | |
copy Vxc_Grid_D to Vxc_Grid_B | |
****************************************************/ | |
Ng1 = Max_Grid_Index_D[1] - Min_Grid_Index_D[1] + 1; | |
Ng2 = Max_Grid_Index_D[2] - Min_Grid_Index_D[2] + 1; | |
Ng3 = Max_Grid_Index_D[3] - Min_Grid_Index_D[3] + 1; | |
for (n=0; n<Num_Rcv_Grid_B2D[myid]; n++){ | |
DN = Index_Rcv_Grid_B2D[myid][n]; | |
BN = Index_Snd_Grid_B2D[myid][n]; | |
i = DN/(Ng2*Ng3); | |
j = (DN-i*Ng2*Ng3)/Ng3; | |
k = DN - i*Ng2*Ng3 - j*Ng3; | |
if ( !(i<=1 || (Ng1-2)<=i || j<=1 || (Ng2-2)<=j || k<=1 || (Ng3-2)<=k)){ | |
for (spin=0; spin<=SpinP_switch; spin++){ | |
Vxc_Grid_B[spin][BN] = Vxc_Grid_D[spin][DN]; | |
} | |
} | |
} | |
/********************************************************* | |
set RefVxc_Grid, where the CA-LDA exchange-correlation | |
functional is alway used. | |
*********************************************************/ | |
XC_P_switch = 0; | |
for (BN_AB=0; BN_AB<My_NumGridB_AB; BN_AB++){ | |
tot_den = ADensity_Grid_B[BN_AB] + ADensity_Grid_B[BN_AB]; | |
if (PCC_switch==1) { | |
tot_den += PCCDensity_Grid_B[0][BN_AB] + PCCDensity_Grid_B[1][BN_AB]; | |
} | |
RefVxc_Grid_B[BN_AB] = XC_Ceperly_Alder(tot_den,XC_P_switch); | |
} | |
/**************************************************** | |
calculations of Ena, Eef, EH1, and EXC | |
****************************************************/ | |
My_Ena = 0.0; | |
My_Eef = 0.0; | |
My_EH1 = 0.0; | |
My_EXC[0] = 0.0; | |
My_EXC[1] = 0.0; | |
for (BN=0; BN<My_NumGridB_AB; BN++){ | |
sden[0] = Density_Grid_B[0][BN]; | |
sden[1] = Density_Grid_B[1][BN]; | |
tden = sden[0] + sden[1]; | |
aden = ADensity_Grid_B[BN]; | |
pden[0] = PCCDensity_Grid_B[0][BN]; | |
pden[1] = PCCDensity_Grid_B[1][BN]; | |
/* if (ProExpn_VNA==off), Ena is calculated here. */ | |
if (ProExpn_VNA==0) My_Ena += tden*VNA_Grid_B[BN]; | |
/* electric energy by electric field */ | |
/* Disabled by N. Yamaguchi *** | |
if (E_Field_switch==1) My_Eef += tden*VEF_Grid_B[BN]; | |
* ***/ | |
/* Added by N. Yamaguchi ***/ | |
if (E_Field_switch==1){ | |
My_Eef+=(tden-2.0*aden)*VEF_Grid_B[BN]; | |
} | |
/* ***/ | |
/* EH1 = 1/2\int \delta n(r) \delta V_H dr */ | |
My_EH1 += (tden - 2.0*aden)*dVHart_Grid_B[BN]; | |
/* EXC = \sum_{\sigma} (n_{\sigma}+n_pcc)\epsilon_{xc} | |
-(n_{atom}+n_pcc)\epsilon_{xc}(n_{atom}) | |
calculation of the difference between the xc energies | |
calculated by wave-function-charge and atomic charge | |
on the coarse grid. */ | |
for (spin=0; spin<=spinmax; spin++){ | |
My_EXC[spin] += (sden[spin]+pden[spin])*Vxc_Grid_B[spin][BN] | |
-(aden+pden[spin])*RefVxc_Grid_B[BN]; | |
} | |
} /* BN */ | |
/**************************************************** | |
multiplying GridVol and MPI communication | |
****************************************************/ | |
MPI_Barrier(mpi_comm_level1); | |
/* if (ProExpn_VNA==off), Ena is calculated here. */ | |
if (ProExpn_VNA==0){ | |
if (F_VNA_flag==1){ | |
My_Ena *= GridVol; | |
MPI_Allreduce(&My_Ena, &Ena, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
ECE[3] = Ena; | |
} | |
else{ | |
ECE[3] = 0.0; | |
} | |
} | |
/* electric energy by electric field */ | |
if (E_Field_switch==1){ | |
My_Eef *= GridVol; | |
MPI_Allreduce(&My_Eef, &Eef, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
ECE[12] = Eef; | |
} | |
else { | |
ECE[12] = 0.0; | |
} | |
if (F_VEF_flag==0){ | |
ECE[12] = 0.0; | |
} | |
/* EH1 = 1/2\int \delta n(r) \delta V_H dr */ | |
My_EH1 *= (0.5*GridVol); | |
/************************************************************ | |
EXC = \sum_{\sigma} n_{\sigma}\epsilon_{xc} | |
- n_{atom}\epsilon_{xc}(n_{atom}) | |
calculation of the difference between the xc energies | |
calculated by wave-function-charge and atomic charge | |
on the coarse grid. | |
My_EXC_VolumeTerm will be used to take account of | |
volume term for stress. | |
*************************************************************/ | |
My_EXC[0] *= GridVol; | |
My_EXC[1] *= GridVol; | |
My_EXC_VolumeTerm[0] = My_EXC[0]; | |
My_EXC_VolumeTerm[1] = My_EXC[1]; | |
/**************************************************** | |
calculation of Exc^(0) and its contribution | |
to forces on the fine mesh | |
****************************************************/ | |
Set_Lebedev_Grid(); | |
/* get Nthrds0 */ | |
#pragma omp parallel shared(Nthrds0) | |
{ | |
Nthrds0 = omp_get_num_threads(); | |
} | |
/* initialize the temporal array storing the force contribution */ | |
for (Gc_AN=1; Gc_AN<=atomnum; Gc_AN++){ | |
Gxyz[Gc_AN][41] = 0.0; | |
Gxyz[Gc_AN][42] = 0.0; | |
Gxyz[Gc_AN][43] = 0.0; | |
} | |
/* start calc. */ | |
rs = 0.0; | |
sum = 0.0; | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
Cwan = WhatSpecies[Gc_AN]; | |
re = Spe_Atom_Cut1[Cwan]; | |
Sr = re + rs; | |
Dr = re - rs; | |
/* allocation of arrays */ | |
double *My_sumr,**My_sumrx,**My_sumry,**My_sumrz; | |
My_sumr = (double*)malloc(sizeof(double)*Nthrds0); | |
for (i=0; i<Nthrds0; i++) My_sumr[i] = 0.0; | |
My_sumrx = (double**)malloc(sizeof(double*)*Nthrds0); | |
for (i=0; i<Nthrds0; i++){ | |
My_sumrx[i] = (double*)malloc(sizeof(double)*(FNAN[Gc_AN]+1)); | |
for (j=0; j<(FNAN[Gc_AN]+1); j++){ | |
My_sumrx[i][j] = 0.0; | |
} | |
} | |
My_sumry = (double**)malloc(sizeof(double*)*Nthrds0); | |
for (i=0; i<Nthrds0; i++){ | |
My_sumry[i] = (double*)malloc(sizeof(double)*(FNAN[Gc_AN]+1)); | |
for (j=0; j<(FNAN[Gc_AN]+1); j++){ | |
My_sumry[i][j] = 0.0; | |
} | |
} | |
My_sumrz = (double**)malloc(sizeof(double*)*Nthrds0); | |
for (i=0; i<Nthrds0; i++){ | |
My_sumrz[i] = (double*)malloc(sizeof(double)*(FNAN[Gc_AN]+1)); | |
for (j=0; j<(FNAN[Gc_AN]+1); j++){ | |
My_sumrz[i][j] = 0.0; | |
} | |
} | |
#pragma omp parallel shared(Spe_Atomic_Den2,Spe_PAO_XV,Spe_Num_Mesh_PAO,Leb_Grid_XYZW,My_sumr,My_sumrx,My_sumry,My_sumrz,Dr,Sr,CoarseGL_Abscissae,CoarseGL_Weight,Gxyz,Gc_AN,FNAN,natn,ncn,WhatSpecies,atv,F_Vxc_flag,Cwan,PCC_switch) private(OMPID,Nthrds,Nprocs,ir,ia,r,w,sumt,sumtx,sumty,sumtz,x,x0,y0,z0,h_AN,Gh_AN,Rn,Hwan,x1,y1,z1,dx,dy,dz,r1,den,den0,gden0,dx1,dy1,dz1,exc0,vxc0) | |
{ | |
double *gx,*gy,*gz,dexc0; | |
double *sum_gx,*sum_gy,*sum_gz; | |
gx = (double*)malloc(sizeof(double)*(FNAN[Gc_AN]+1)); | |
gy = (double*)malloc(sizeof(double)*(FNAN[Gc_AN]+1)); | |
gz = (double*)malloc(sizeof(double)*(FNAN[Gc_AN]+1)); | |
sum_gx = (double*)malloc(sizeof(double)*(FNAN[Gc_AN]+1)); | |
sum_gy = (double*)malloc(sizeof(double)*(FNAN[Gc_AN]+1)); | |
sum_gz = (double*)malloc(sizeof(double)*(FNAN[Gc_AN]+1)); | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (ir=(OMPID*CoarseGL_Mesh/Nthrds); ir<((OMPID+1)*CoarseGL_Mesh/Nthrds); ir++){ | |
r = 0.50*(Dr*CoarseGL_Abscissae[ir] + Sr); | |
sumt = 0.0; | |
for (i=0; i<(FNAN[Gc_AN]+1); i++){ | |
sum_gx[i] = 0.0; | |
sum_gy[i] = 0.0; | |
sum_gz[i] = 0.0; | |
} | |
for (ia=0; ia<Num_Leb_Grid; ia++){ | |
x0 = r*Leb_Grid_XYZW[ia][0] + Gxyz[Gc_AN][1]; | |
y0 = r*Leb_Grid_XYZW[ia][1] + Gxyz[Gc_AN][2]; | |
z0 = r*Leb_Grid_XYZW[ia][2] + Gxyz[Gc_AN][3]; | |
/* calculate rho_atom + rho_pcc */ | |
den = 0.0; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Rn = ncn[Gc_AN][h_AN]; | |
Hwan = WhatSpecies[Gh_AN]; | |
x1 = Gxyz[Gh_AN][1] + atv[Rn][1]; | |
y1 = Gxyz[Gh_AN][2] + atv[Rn][2]; | |
z1 = Gxyz[Gh_AN][3] + atv[Rn][3]; | |
dx = x1 - x0; | |
dy = y1 - y0; | |
dz = z1 - z0; | |
x = 0.5*log(dx*dx + dy*dy + dz*dz); | |
/* calculate density */ | |
den += KumoF( Spe_Num_Mesh_PAO[Hwan], x, | |
Spe_PAO_XV[Hwan], Spe_PAO_RV[Hwan], Spe_Atomic_Den2[Hwan])*F_Vxc_flag; | |
if (h_AN==0) den0 = den; | |
/* calculate gradient of density */ | |
if (h_AN!=0){ | |
r1 = sqrt(dx*dx + dy*dy + dz*dz); | |
gden0 = Dr_KumoF( Spe_Num_Mesh_PAO[Hwan], x, r1, | |
Spe_PAO_XV[Hwan], Spe_PAO_RV[Hwan], Spe_Atomic_Den2[Hwan])*F_Vxc_flag; | |
gx[h_AN] = gden0/r1*dx; | |
gy[h_AN] = gden0/r1*dy; | |
gz[h_AN] = gden0/r1*dz; | |
} | |
} /* h_AN */ | |
/* calculate the CA-LDA exchange-correlation energy density */ | |
exc0 = XC_Ceperly_Alder(den,0); | |
/* calculate the CA-LDA exchange-correlation potential */ | |
dexc0 = XC_Ceperly_Alder(den,3); | |
/* Lebedev quadrature */ | |
w = Leb_Grid_XYZW[ia][3]; | |
sumt += w*den0*exc0; | |
for (h_AN=1; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
sum_gx[h_AN] += w*den0*dexc0*gx[h_AN]; | |
sum_gy[h_AN] += w*den0*dexc0*gy[h_AN]; | |
sum_gz[h_AN] += w*den0*dexc0*gz[h_AN]; | |
} | |
} /* ia */ | |
/* r for Gauss-Legendre quadrature */ | |
w = r*r*CoarseGL_Weight[ir]; | |
My_sumr[OMPID] += w*sumt; | |
for (h_AN=1; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
My_sumrx[OMPID][h_AN] += w*sum_gx[h_AN]; | |
My_sumry[OMPID][h_AN] += w*sum_gy[h_AN]; | |
My_sumrz[OMPID][h_AN] += w*sum_gz[h_AN]; | |
} | |
} /* ir */ | |
free(gx); | |
free(gy); | |
free(gz); | |
free(sum_gx); | |
free(sum_gy); | |
free(sum_gz); | |
} /* #pragma omp */ | |
sumr = 0.0; | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
sumr += My_sumr[Nloop]; | |
} | |
sum += 2.0*PI*Dr*sumr; | |
/* add force */ | |
for (h_AN=1; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
sumrx = 0.0; | |
sumry = 0.0; | |
sumrz = 0.0; | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
sumrx += My_sumrx[Nloop][h_AN]; | |
sumry += My_sumry[Nloop][h_AN]; | |
sumrz += My_sumrz[Nloop][h_AN]; | |
} | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Gxyz[Gh_AN][41] += 2.0*PI*Dr*sumrx; | |
Gxyz[Gh_AN][42] += 2.0*PI*Dr*sumry; | |
Gxyz[Gh_AN][43] += 2.0*PI*Dr*sumrz; | |
Gxyz[Gc_AN][41] -= 2.0*PI*Dr*sumrx; | |
Gxyz[Gc_AN][42] -= 2.0*PI*Dr*sumry; | |
Gxyz[Gc_AN][43] -= 2.0*PI*Dr*sumrz; | |
} | |
/* freeing of arrays */ | |
free(My_sumr); | |
for (i=0; i<Nthrds0; i++){ | |
free(My_sumrx[i]); | |
} | |
free(My_sumrx); | |
for (i=0; i<Nthrds0; i++){ | |
free(My_sumry[i]); | |
} | |
free(My_sumry); | |
for (i=0; i<Nthrds0; i++){ | |
free(My_sumrz[i]); | |
} | |
free(My_sumrz); | |
} /* Mc_AN */ | |
/* add Exc^0 calculated on the fine mesh to My_EXC */ | |
My_EXC[0] += 0.5*sum; | |
My_EXC[1] += 0.5*sum; | |
/* MPI: Gxyz[][41,42,43] */ | |
for (Gc_AN=1; Gc_AN<=atomnum; Gc_AN++){ | |
MPI_Allreduce(&Gxyz[Gc_AN][41], &gradxyz[0], 3, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
Gxyz[Gc_AN][17] += gradxyz[0]; | |
Gxyz[Gc_AN][18] += gradxyz[1]; | |
Gxyz[Gc_AN][19] += gradxyz[2]; | |
if (2<=level_stdout){ | |
printf("<Total_Ene> force(8) myid=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Gc_AN,gradxyz[0],gradxyz[1],gradxyz[2]); | |
} | |
} | |
/**************************************************** | |
MPI, Gxyz[Gc_AN][17-19] | |
****************************************************/ | |
for (Gc_AN=1; Gc_AN<=atomnum; Gc_AN++){ | |
ID = G2ID[Gc_AN]; | |
MPI_Bcast(&Gxyz[Gc_AN][17], 3, MPI_DOUBLE, ID, mpi_comm_level1); | |
if (2<=level_stdout && myid==Host_ID){ | |
printf("<Total_Ene> force(t) myid=%2d Gc_AN=%2d %15.12f %15.12f %15.12f\n", | |
myid,Gc_AN,Gxyz[Gc_AN][17],Gxyz[Gc_AN][18],Gxyz[Gc_AN][19]);fflush(stdout); | |
} | |
} | |
/**************************************************** | |
MPI: | |
EH1, EXC | |
****************************************************/ | |
MPI_Barrier(mpi_comm_level1); | |
MPI_Allreduce(&My_EH1, &EH1, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
for (spin=0; spin<=spinmax; spin++){ | |
MPI_Allreduce(&My_EXC[spin], &EXC[spin], 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
MPI_Allreduce(&My_EXC_VolumeTerm[spin], &EXC_VolumeTerm[spin], 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
} | |
if (SpinP_switch==0){ | |
ECE[5] = EH1; | |
ECE[6] = EXC[0]; | |
ECE[7] = EXC[0]; | |
EXC_VolumeTerm[1] = EXC_VolumeTerm[0]; | |
} | |
else if (SpinP_switch==1 || SpinP_switch==3) { | |
ECE[5] = EH1; | |
ECE[6] = EXC[0]; | |
ECE[7] = EXC[1]; | |
} | |
if (F_dVHart_flag==0){ | |
ECE[5] = 0.0; | |
} | |
if (F_Vxc_flag==0){ | |
ECE[6] = 0.0; | |
ECE[7] = 0.0; | |
} | |
if (F_Vxc_flag==1){ | |
Stress_Tensor[0] += EXC_VolumeTerm[0] + EXC_VolumeTerm[1]; | |
Stress_Tensor[4] += EXC_VolumeTerm[0] + EXC_VolumeTerm[1]; | |
Stress_Tensor[8] += EXC_VolumeTerm[0] + EXC_VolumeTerm[1]; | |
} | |
/**************************************************** | |
calculation of dipole moment | |
****************************************************/ | |
/* contribution from electron density */ | |
N2D = Ngrid1*Ngrid2; | |
GNs = ((myid*N2D+numprocs-1)/numprocs)*Ngrid3; | |
My_E_dpx = 0.0; | |
My_E_dpy = 0.0; | |
My_E_dpz = 0.0; | |
My_E_dpx_BG = 0.0; | |
My_E_dpy_BG = 0.0; | |
My_E_dpz_BG = 0.0; | |
for (BN=0; BN<My_NumGridB_AB; BN++){ | |
GN = BN + GNs; | |
n1 = GN/(Ngrid2*Ngrid3); | |
n2 = (GN - n1*Ngrid2*Ngrid3)/Ngrid3; | |
n3 = GN - n1*Ngrid2*Ngrid3 - n2*Ngrid3; | |
x = (double)n1*gtv[1][1] + (double)n2*gtv[2][1] | |
+ (double)n3*gtv[3][1] + Grid_Origin[1]; | |
y = (double)n1*gtv[1][2] + (double)n2*gtv[2][2] | |
+ (double)n3*gtv[3][2] + Grid_Origin[2]; | |
z = (double)n1*gtv[1][3] + (double)n2*gtv[2][3] | |
+ (double)n3*gtv[3][3] + Grid_Origin[3]; | |
den = Density_Grid_B[0][BN] + Density_Grid_B[1][BN]; | |
My_E_dpx += den*x; | |
My_E_dpy += den*y; | |
My_E_dpz += den*z; | |
My_E_dpx_BG += x; | |
My_E_dpy_BG += y; | |
My_E_dpz_BG += z; | |
} /* BN */ | |
MPI_Allreduce(&My_E_dpx, &E_dpx, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
MPI_Allreduce(&My_E_dpy, &E_dpy, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
MPI_Allreduce(&My_E_dpz, &E_dpz, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
MPI_Allreduce(&My_E_dpx_BG, &E_dpx_BG, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
MPI_Allreduce(&My_E_dpy_BG, &E_dpy_BG, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
MPI_Allreduce(&My_E_dpz_BG, &E_dpz_BG, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
E_dpx = E_dpx*GridVol; | |
E_dpy = E_dpy*GridVol; | |
E_dpz = E_dpz*GridVol; | |
cden_BG = system_charge/Cell_Volume; | |
E_dpx_BG = E_dpx_BG*GridVol*cden_BG; | |
E_dpy_BG = E_dpy_BG*GridVol*cden_BG; | |
E_dpz_BG = E_dpz_BG*GridVol*cden_BG; | |
/* contribution from core charge */ | |
My_C_dpx = 0.0; | |
My_C_dpy = 0.0; | |
My_C_dpz = 0.0; | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
x = Gxyz[Gc_AN][1]; | |
y = Gxyz[Gc_AN][2]; | |
z = Gxyz[Gc_AN][3]; | |
spe = WhatSpecies[Gc_AN]; | |
charge = Spe_Core_Charge[spe]; | |
My_C_dpx += charge*x; | |
My_C_dpy += charge*y; | |
My_C_dpz += charge*z; | |
} | |
MPI_Allreduce(&My_C_dpx, &C_dpx, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
MPI_Allreduce(&My_C_dpy, &C_dpy, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
MPI_Allreduce(&My_C_dpz, &C_dpz, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
AU2Debye = 2.54174776; | |
dipole_moment[0][1] = AU2Debye*(C_dpx - E_dpx - E_dpx_BG); | |
dipole_moment[0][2] = AU2Debye*(C_dpy - E_dpy - E_dpy_BG); | |
dipole_moment[0][3] = AU2Debye*(C_dpz - E_dpz - E_dpz_BG); | |
dipole_moment[1][1] = AU2Debye*C_dpx; | |
dipole_moment[1][2] = AU2Debye*C_dpy; | |
dipole_moment[1][3] = AU2Debye*C_dpz; | |
dipole_moment[2][1] = -AU2Debye*E_dpx; | |
dipole_moment[2][2] = -AU2Debye*E_dpy; | |
dipole_moment[2][3] = -AU2Debye*E_dpz; | |
dipole_moment[3][1] = -AU2Debye*E_dpx_BG; | |
dipole_moment[3][2] = -AU2Debye*E_dpy_BG; | |
dipole_moment[3][3] = -AU2Debye*E_dpz_BG; | |
AbsD = sqrt( dipole_moment[0][1]*dipole_moment[0][1] | |
+ dipole_moment[0][2]*dipole_moment[0][2] | |
+ dipole_moment[0][3]*dipole_moment[0][3] ); | |
if (myid==Host_ID){ | |
if (0<level_stdout){ | |
printf("\n*******************************************************\n"); fflush(stdout); | |
printf(" Dipole moment (Debye) \n"); fflush(stdout); | |
printf("*******************************************************\n\n"); fflush(stdout); | |
printf(" Absolute D %17.8f\n\n",AbsD); | |
printf(" Dx Dy Dz\n"); fflush(stdout); | |
printf(" Total %17.8f %17.8f %17.8f\n", | |
dipole_moment[0][1],dipole_moment[0][2],dipole_moment[0][3]);fflush(stdout); | |
printf(" Core %17.8f %17.8f %17.8f\n", | |
dipole_moment[1][1],dipole_moment[1][2],dipole_moment[1][3]);fflush(stdout); | |
printf(" Electron %17.8f %17.8f %17.8f\n", | |
dipole_moment[2][1],dipole_moment[2][2],dipole_moment[2][3]);fflush(stdout); | |
printf(" Back ground %17.8f %17.8f %17.8f\n", | |
dipole_moment[3][1],dipole_moment[3][2],dipole_moment[3][3]);fflush(stdout); | |
} | |
/******************************************************** | |
write the dipole moments to a file | |
********************************************************/ | |
fnjoint(filepath,filename,file_DPM); | |
if ((fp_DPM = fopen(file_DPM,"w")) != NULL){ | |
#ifdef xt3 | |
setvbuf(fp_DPM,buf,_IOFBF,fp_bsize); /* setvbuf */ | |
#endif | |
fprintf(fp_DPM,"\n"); | |
fprintf(fp_DPM,"***********************************************************\n"); | |
fprintf(fp_DPM,"***********************************************************\n"); | |
fprintf(fp_DPM," Dipole moment (Debye) \n"); | |
fprintf(fp_DPM,"***********************************************************\n"); | |
fprintf(fp_DPM,"***********************************************************\n\n"); | |
fprintf(fp_DPM," Absolute D %17.8f\n\n",AbsD); | |
fprintf(fp_DPM," Dx Dy Dz\n"); | |
fprintf(fp_DPM," Total %17.8f %17.8f %17.8f\n", | |
dipole_moment[0][1],dipole_moment[0][2],dipole_moment[0][3]); | |
fprintf(fp_DPM," Core %17.8f %17.8f %17.8f\n", | |
dipole_moment[1][1],dipole_moment[1][2],dipole_moment[1][3]); | |
fprintf(fp_DPM," Electron %17.8f %17.8f %17.8f\n", | |
dipole_moment[2][1],dipole_moment[2][2],dipole_moment[2][3]); | |
fprintf(fp_DPM," Back ground %17.8f %17.8f %17.8f\n", | |
dipole_moment[3][1],dipole_moment[3][2],dipole_moment[3][3]); | |
fclose(fp_DPM); | |
} | |
else{ | |
printf("Failure of saving the DPM file.\n");fflush(stdout); | |
} | |
} | |
} | |
void EH0_TwoCenter(int Gc_AN, int h_AN, double VH0ij[4]) | |
{ | |
int n1,ban; | |
int Gh_AN,Rn,wan1,wan2; | |
double dv,x,y,z,r,r2,xx,va0,rho0,dr_va0; | |
double z2,sum,sumr,sumx,sumy,sumz,wt; | |
Gh_AN = natn[Gc_AN][h_AN]; | |
Rn = ncn[Gc_AN][h_AN]; | |
wan1 = WhatSpecies[Gc_AN]; | |
ban = Spe_Spe2Ban[wan1]; | |
wan2 = WhatSpecies[Gh_AN]; | |
dv = dv_EH0[ban]; | |
sum = 0.0; | |
sumr = 0.0; | |
for (n1=0; n1<TGN_EH0[ban]; n1++){ | |
x = GridX_EH0[ban][n1]; | |
y = GridY_EH0[ban][n1]; | |
z = GridZ_EH0[ban][n1]; | |
rho0 = Arho_EH0[ban][n1]; | |
wt = Wt_EH0[ban][n1]; | |
z2 = z - Dis[Gc_AN][h_AN]; | |
r2 = x*x + y*y + z2*z2; | |
r = sqrt(r2); | |
xx = 0.5*log(r2); | |
/* for empty atoms or finite elemens basis */ | |
if (r<1.0e-10) r = 1.0e-10; | |
va0 = VH_AtomF(wan2, | |
Spe_Num_Mesh_VPS[wan2], xx, r, | |
Spe_VPS_XV[wan2], Spe_VPS_RV[wan2], Spe_VH_Atom[wan2]); | |
sum += wt*va0*rho0; | |
if (h_AN!=0 && 1.0e-14<r){ | |
dr_va0 = Dr_VH_AtomF(wan2, | |
Spe_Num_Mesh_VPS[wan2], xx, r, | |
Spe_VPS_XV[wan2], Spe_VPS_RV[wan2], Spe_VH_Atom[wan2]); | |
sumr -= wt*rho0*dr_va0*z2/r; | |
} | |
} | |
sum = sum*dv; | |
if (h_AN!=0){ | |
/* for empty atoms or finite elemens basis */ | |
r = Dis[Gc_AN][h_AN]; | |
if (r<1.0e-10) r = 1.0e-10; | |
x = Gxyz[Gc_AN][1] - (Gxyz[Gh_AN][1] + atv[Rn][1]); | |
y = Gxyz[Gc_AN][2] - (Gxyz[Gh_AN][2] + atv[Rn][2]); | |
z = Gxyz[Gc_AN][3] - (Gxyz[Gh_AN][3] + atv[Rn][3]); | |
sumr = sumr*dv; | |
sumx = sumr*x/r; | |
sumy = sumr*y/r; | |
sumz = sumr*z/r; | |
} | |
else{ | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
} | |
VH0ij[0] = sum; | |
VH0ij[1] = sumx; | |
VH0ij[2] = sumy; | |
VH0ij[3] = sumz; | |
} | |
void EH0_TwoCenter_at_Cutoff(int wan1, int wan2, double VH0ij[4]) | |
{ | |
int n1,ban; | |
double dv,x,y,z,r1,r2,va0,rho0,dr_va0,rcut; | |
double z2,sum,sumr,sumx,sumy,sumz,wt,r,xx; | |
/* for OpenMP */ | |
int OMPID,Nthrds,Nthrds0,Nprocs,Nloop; | |
double *my_sum_threads; | |
ban = Spe_Spe2Ban[wan1]; | |
dv = dv_EH0[ban]; | |
rcut = Spe_Atom_Cut1[wan1] + Spe_Atom_Cut1[wan2]; | |
/* get Nthrds0 */ | |
#pragma omp parallel shared(Nthrds0) | |
{ | |
Nthrds0 = omp_get_num_threads(); | |
} | |
/* allocation of array */ | |
my_sum_threads = (double*)malloc(sizeof(double)*Nthrds0); | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
my_sum_threads[Nloop] = 0.0; | |
} | |
#pragma omp parallel shared(Spe_VH_Atom,Spe_VPS_XV,Spe_VPS_RV,Spe_Num_Mesh_VPS,wan2,Wt_EH0,my_sum_threads,rcut,Arho_EH0,GridZ_EH0,GridY_EH0,GridX_EH0,TGN_EH0,ban) private(n1,OMPID,Nthrds,Nprocs,x,y,z,rho0,wt,z2,r2,va0,r,xx) | |
{ | |
/* get info. on OpenMP */ | |
OMPID = omp_get_thread_num(); | |
Nthrds = omp_get_num_threads(); | |
Nprocs = omp_get_num_procs(); | |
for (n1=OMPID*TGN_EH0[ban]/Nthrds; n1<(OMPID+1)*TGN_EH0[ban]/Nthrds; n1++){ | |
x = GridX_EH0[ban][n1]; | |
y = GridY_EH0[ban][n1]; | |
z = GridZ_EH0[ban][n1]; | |
rho0 = Arho_EH0[ban][n1]; | |
wt = Wt_EH0[ban][n1]; | |
z2 = z - rcut; | |
r2 = x*x + y*y + z2*z2; | |
r = sqrt(r2); | |
xx = 0.5*log(r2); | |
va0 = VH_AtomF(wan2, | |
Spe_Num_Mesh_VPS[wan2], xx, r, | |
Spe_VPS_XV[wan2], Spe_VPS_RV[wan2], Spe_VH_Atom[wan2]); | |
my_sum_threads[OMPID] += wt*va0*rho0; | |
} | |
} /* #pragma omp parallel */ | |
sum = 0.0; | |
for (Nloop=0; Nloop<Nthrds0; Nloop++){ | |
sum += my_sum_threads[Nloop]; | |
} | |
sum = sum*dv; | |
sumx = 0.0; | |
sumy = 0.0; | |
sumz = 0.0; | |
VH0ij[0] = sum; | |
VH0ij[1] = sumx; | |
VH0ij[2] = sumy; | |
VH0ij[3] = sumz; | |
/* freeing of array */ | |
free(my_sum_threads); | |
} | |
double Calc_Ehub() | |
{ | |
/**************************************************** | |
LDA+U energy correction added by MJ | |
****************************************************/ | |
int Mc_AN,Gc_AN,wan1; | |
int cnt1,cnt2,l1,mul1,m1,l2,mul2,m2; | |
int spin,max_spin; | |
double My_Ehub,Ehub,Uvalue,tmpv,sum; | |
int numprocs,myid,ID; | |
/* added by S.Ryee */ | |
int on_off,cnt_start,tmp_l1,ii,jj,kk,ll; | |
double Jvalue,tmpEhub1,tmpEhub2,tmpEhub3,tmpEhub4,trace_spin,trace_opp_spin; | |
int dd; | |
int NZUJ; | |
dcomplex N_00_ac,N_11_ac,N_00_bd,N_11_bd,N_01_ac,N_10_ac,N_01_bd,N_10_bd; | |
dcomplex AMF_00_ac,AMF_11_ac,AMF_00_bd,AMF_11_bd,AMF_01_ac,AMF_10_ac,AMF_01_bd,AMF_10_bd; | |
dcomplex trace_N00,trace_N11,trace_N01,trace_N10; | |
/*******************/ | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
/**************************************************** | |
caculation of My_Ehub | |
****************************************************/ | |
if (SpinP_switch==0) max_spin = 0; | |
else if (SpinP_switch==1) max_spin = 1; | |
else if (SpinP_switch==3) max_spin = 1; | |
My_Ehub = 0.0; | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
wan1 = WhatSpecies[Gc_AN]; | |
/**************************************************** | |
collinear case | |
****************************************************/ | |
if (SpinP_switch!=3){ | |
switch (Hub_Type){ | |
case 1: /* Dudarev form */ | |
for (spin=0; spin<=max_spin; spin++){ | |
/* Hubbard term, 0.5*Tr(N) */ | |
cnt1 = 0; | |
for(l1=0; l1<=Spe_MaxL_Basis[wan1]; l1++ ){ | |
for(mul1=0; mul1<Spe_Num_Basis[wan1][l1]; mul1++){ | |
Uvalue = Hub_U_Basis[wan1][l1][mul1]; | |
for(m1=0; m1<(2*l1+1); m1++){ | |
tmpv = 0.5*Uvalue*DM_onsite[0][spin][Mc_AN][cnt1][cnt1]; | |
My_Ehub += tmpv; | |
cnt1++; | |
} | |
} | |
} | |
/* Hubbard term, -0.5*Tr(N*N) */ | |
cnt1 = 0; | |
for(l1=0; l1<=Spe_MaxL_Basis[wan1]; l1++ ){ | |
for(mul1=0; mul1<Spe_Num_Basis[wan1][l1]; mul1++){ | |
for(m1=0; m1<(2*l1+1); m1++){ | |
sum = 0.0; | |
cnt2 = 0; | |
for(l2=0; l2<=Spe_MaxL_Basis[wan1]; l2++ ){ | |
for(mul2=0; mul2<Spe_Num_Basis[wan1][l2]; mul2++){ | |
for(m2=0; m2<(2*l2+1); m2++){ | |
if (l1==l2 && mul1==mul2){ | |
Uvalue = Hub_U_Basis[wan1][l1][mul1]; | |
sum -= 0.5*Uvalue*DM_onsite[0][spin][Mc_AN][cnt1][cnt2]* | |
DM_onsite[0][spin][Mc_AN][cnt2][cnt1]; | |
} | |
cnt2++; | |
} | |
} | |
} | |
My_Ehub += sum; | |
cnt1++; | |
} | |
} | |
} | |
} /* spin */ | |
break; | |
case 2: /* general form by S.Ryee */ | |
/* U Energy */ | |
for(l1=0; l1<=Spe_MaxL_Basis[wan1]; l1++){ | |
for(mul1=0; mul1<Spe_Num_Basis[wan1][l1]; mul1++){ | |
Uvalue = Hub_U_Basis[wan1][l1][mul1]; | |
Jvalue = Hund_J_Basis[wan1][l1][mul1]; | |
NZUJ = Nonzero_UJ[wan1][l1][mul1]; | |
if(NZUJ>0){ | |
cnt_start = 0; | |
switch (mul1){ | |
case 0: /* mul1 = 0 */ | |
if(l1 > 0){ | |
for(tmp_l1=0; tmp_l1<l1; tmp_l1++){ | |
cnt_start += (2*tmp_l1+1)*Spe_Num_Basis[wan1][tmp_l1]; | |
} | |
} | |
else{ /* l1 = 0 */ | |
cnt_start = 0; | |
} | |
break; | |
case 1: /* mul1 = 1 */ | |
if(l1 > 0){ | |
for(tmp_l1=0; tmp_l1<l1; tmp_l1++){ | |
cnt_start += (2*tmp_l1+1)*Spe_Num_Basis[wan1][tmp_l1]; | |
} | |
cnt_start += (2*l1+1)*mul1; | |
} | |
else{ /* l1 = 0 */ | |
cnt_start = (2*l1+1)*mul1; | |
} | |
break; | |
} /* switch (mul1) */ | |
trace_spin = 0.0; | |
trace_opp_spin = 0.0; | |
for(ii=0; ii<(2*l1+1); ii++){ | |
trace_spin += DM_onsite[0][0][Mc_AN][cnt_start+ii][cnt_start+ii]; | |
trace_opp_spin += DM_onsite[0][1][Mc_AN][cnt_start+ii][cnt_start+ii]; | |
} | |
/* dc Energy */ | |
if(dc_Type==1){ /* sFLL */ | |
My_Ehub -= 0.5*(Uvalue)*(trace_spin+trace_opp_spin)*(trace_spin+trace_opp_spin-1.0) | |
-0.5*(Jvalue)*(trace_spin*(trace_spin-1.0)+trace_opp_spin*(trace_opp_spin-1.0)); | |
} /* sFLL */ | |
if(dc_Type==3){ /* cFLL */ | |
My_Ehub -= 0.5*(Uvalue)*(trace_spin+trace_opp_spin)*(trace_spin+trace_opp_spin-1.0) | |
-0.25*(Jvalue)*(trace_spin+trace_opp_spin)*(trace_spin+trace_opp_spin-2.0); | |
} /* cFLL */ | |
/*f(dc_Type==3){ | |
My_Ehub -= dc_alpha[count]*(0.5*(Uvalue)*(trace_spin+trace_opp_spin)*(trace_spin+trace_opp_spin-1.0) | |
-0.5*(Jvalue)*(trace_spin*(trace_spin-1.0)+trace_opp_spin*(trace_opp_spin-1.0))); | |
} */ | |
/* loop start for interaction energy */ | |
for(ii=0; ii<(2*l1+1); ii++){ | |
for(jj=0; jj<(2*l1+1); jj++){ | |
for(kk=0; kk<(2*l1+1); kk++){ | |
for(ll=0; ll<(2*l1+1); ll++){ | |
switch(dc_Type){ | |
case 1: /* sFLL */ | |
tmpEhub1 = 0.5*Coulomb_Array[NZUJ][ii][jj][kk][ll]* | |
(DM_onsite[0][0][Mc_AN][cnt_start+ii][cnt_start+kk]* | |
DM_onsite[0][1][Mc_AN][cnt_start+jj][cnt_start+ll] | |
+DM_onsite[0][1][Mc_AN][cnt_start+ii][cnt_start+kk]* | |
DM_onsite[0][0][Mc_AN][cnt_start+jj][cnt_start+ll]); | |
tmpEhub2 = 0.5*(Coulomb_Array[NZUJ][ii][jj][kk][ll]-Coulomb_Array[NZUJ][ii][jj][ll][kk])* | |
(DM_onsite[0][0][Mc_AN][cnt_start+ii][cnt_start+kk]* | |
DM_onsite[0][0][Mc_AN][cnt_start+jj][cnt_start+ll] | |
+DM_onsite[0][1][Mc_AN][cnt_start+ii][cnt_start+kk]* | |
DM_onsite[0][1][Mc_AN][cnt_start+jj][cnt_start+ll]); | |
My_Ehub += tmpEhub1 + tmpEhub2; | |
break; | |
case 2: /* sAMF */ | |
tmpEhub1 = 0.5*Coulomb_Array[NZUJ][ii][jj][kk][ll]* | |
(AMF_Array[NZUJ][0][0][ii][kk]* | |
AMF_Array[NZUJ][1][0][jj][ll] | |
+AMF_Array[NZUJ][1][0][ii][kk]* | |
AMF_Array[NZUJ][0][0][jj][ll]); | |
tmpEhub2 = 0.5*(Coulomb_Array[NZUJ][ii][jj][kk][ll]-Coulomb_Array[NZUJ][ii][jj][ll][kk])* | |
(AMF_Array[NZUJ][0][0][ii][kk]* | |
AMF_Array[NZUJ][0][0][jj][ll] | |
+AMF_Array[NZUJ][1][0][ii][kk]* | |
AMF_Array[NZUJ][1][0][jj][ll]); | |
My_Ehub += tmpEhub1 + tmpEhub2; | |
break; | |
case 3: /* cFLL */ | |
tmpEhub1 = 0.5*Coulomb_Array[NZUJ][ii][jj][kk][ll]* | |
(DM_onsite[0][0][Mc_AN][cnt_start+ii][cnt_start+kk]* | |
DM_onsite[0][1][Mc_AN][cnt_start+jj][cnt_start+ll] | |
+DM_onsite[0][1][Mc_AN][cnt_start+ii][cnt_start+kk]* | |
DM_onsite[0][0][Mc_AN][cnt_start+jj][cnt_start+ll]); | |
tmpEhub2 = 0.5*(Coulomb_Array[NZUJ][ii][jj][kk][ll]-Coulomb_Array[NZUJ][ii][jj][ll][kk])* | |
(DM_onsite[0][0][Mc_AN][cnt_start+ii][cnt_start+kk]* | |
DM_onsite[0][0][Mc_AN][cnt_start+jj][cnt_start+ll] | |
+DM_onsite[0][1][Mc_AN][cnt_start+ii][cnt_start+kk]* | |
DM_onsite[0][1][Mc_AN][cnt_start+jj][cnt_start+ll]); | |
My_Ehub += tmpEhub1 + tmpEhub2; | |
break; | |
case 4: /* cAMF */ | |
tmpEhub1 = 0.5*Coulomb_Array[NZUJ][ii][jj][kk][ll]* | |
(AMF_Array[NZUJ][0][0][ii][kk]* | |
AMF_Array[NZUJ][1][0][jj][ll] | |
+AMF_Array[NZUJ][1][0][ii][kk]* | |
AMF_Array[NZUJ][0][0][jj][ll]); | |
tmpEhub2 = 0.5*(Coulomb_Array[NZUJ][ii][jj][kk][ll]-Coulomb_Array[NZUJ][ii][jj][ll][kk])* | |
(AMF_Array[NZUJ][0][0][ii][kk]* | |
AMF_Array[NZUJ][0][0][jj][ll] | |
+AMF_Array[NZUJ][1][0][ii][kk]* | |
AMF_Array[NZUJ][1][0][jj][ll]); | |
My_Ehub += tmpEhub1 + tmpEhub2; | |
break; | |
/* case 3: | |
tmpEhub1 = 0.5*dc_alpha[count]*(Coulomb_Array[count][ii][jj][kk][ll]* | |
(DM_onsite[0][0][Mc_AN][cnt_start+ii][cnt_start+kk]* | |
DM_onsite[0][1][Mc_AN][cnt_start+jj][cnt_start+ll] | |
+DM_onsite[0][1][Mc_AN][cnt_start+ii][cnt_start+kk]* | |
DM_onsite[0][0][Mc_AN][cnt_start+jj][cnt_start+ll])); | |
tmpEhub2 = 0.5*dc_alpha[count]*((Coulomb_Array[count][ii][jj][kk][ll]-Coulomb_Array[count][ii][jj][ll][kk])* | |
(DM_onsite[0][0][Mc_AN][cnt_start+ii][cnt_start+kk]* | |
DM_onsite[0][0][Mc_AN][cnt_start+jj][cnt_start+ll] | |
+DM_onsite[0][1][Mc_AN][cnt_start+ii][cnt_start+kk]* | |
DM_onsite[0][1][Mc_AN][cnt_start+jj][cnt_start+ll])); | |
tmpEhub3 = 0.5*(1.0-dc_alpha[count])*(Coulomb_Array[count][ii][jj][kk][ll]* | |
(AMF_Array[count][0][0][ii][kk]* | |
AMF_Array[count][1][0][jj][ll] | |
+AMF_Array[count][1][0][ii][kk]* | |
AMF_Array[count][0][0][jj][ll])); | |
tmpEhub4 = 0.5*(1.0-dc_alpha[count])*((Coulomb_Array[count][ii][jj][kk][ll]-Coulomb_Array[count][ii][jj][ll][kk])* | |
(AMF_Array[count][0][0][ii][kk]* | |
AMF_Array[count][0][0][jj][ll] | |
+AMF_Array[count][1][0][ii][kk]* | |
AMF_Array[count][1][0][jj][ll])); | |
My_Ehub += tmpEhub1 + tmpEhub2 + tmpEhub3 + tmpEhub4; | |
break; */ | |
} /* switch dc_Type */ | |
} | |
} | |
} | |
} | |
} | |
} /* mul1 */ | |
} /* l1 */ | |
break; | |
} /* Hub_Type */ | |
} /* SpinP_switch */ | |
/**************************************************** | |
non-collinear case | |
****************************************************/ | |
else { | |
switch (Hub_Type){ | |
case 1: /* Dudarev form */ | |
/* Hubbard term, 0.5*Tr(N) */ | |
cnt1 = 0; | |
for(l1=0; l1<=Spe_MaxL_Basis[wan1]; l1++ ){ | |
for(mul1=0; mul1<Spe_Num_Basis[wan1][l1]; mul1++){ | |
Uvalue = Hub_U_Basis[wan1][l1][mul1]; | |
for(m1=0; m1<(2*l1+1); m1++){ | |
tmpv = 0.5*Uvalue*( NC_OcpN[0][0][0][Mc_AN][cnt1][cnt1].r | |
+ NC_OcpN[0][1][1][Mc_AN][cnt1][cnt1].r); | |
My_Ehub += tmpv; | |
cnt1++; | |
} | |
} | |
} | |
/* Hubbard term, -0.5*Tr(N*N) */ | |
cnt1 = 0; | |
for(l1=0; l1<=Spe_MaxL_Basis[wan1]; l1++ ){ | |
for(mul1=0; mul1<Spe_Num_Basis[wan1][l1]; mul1++){ | |
for(m1=0; m1<(2*l1+1); m1++){ | |
sum = 0.0; | |
cnt2 = 0; | |
for(l2=0; l2<=Spe_MaxL_Basis[wan1]; l2++ ){ | |
for(mul2=0; mul2<Spe_Num_Basis[wan1][l2]; mul2++){ | |
for(m2=0; m2<(2*l2+1); m2++){ | |
if (l1==l2 && mul1==mul2){ | |
Uvalue = Hub_U_Basis[wan1][l1][mul1]; | |
sum -= 0.5*Uvalue*( NC_OcpN[0][0][0][Mc_AN][cnt1][cnt2].r* | |
NC_OcpN[0][0][0][Mc_AN][cnt1][cnt2].r | |
+ | |
NC_OcpN[0][0][0][Mc_AN][cnt1][cnt2].i* | |
NC_OcpN[0][0][0][Mc_AN][cnt1][cnt2].i | |
+ | |
NC_OcpN[0][0][1][Mc_AN][cnt1][cnt2].r* | |
NC_OcpN[0][0][1][Mc_AN][cnt1][cnt2].r | |
+ | |
NC_OcpN[0][0][1][Mc_AN][cnt1][cnt2].i* | |
NC_OcpN[0][0][1][Mc_AN][cnt1][cnt2].i | |
+ | |
NC_OcpN[0][1][0][Mc_AN][cnt1][cnt2].r* | |
NC_OcpN[0][1][0][Mc_AN][cnt1][cnt2].r | |
+ | |
NC_OcpN[0][1][0][Mc_AN][cnt1][cnt2].i* | |
NC_OcpN[0][1][0][Mc_AN][cnt1][cnt2].i | |
+ | |
NC_OcpN[0][1][1][Mc_AN][cnt1][cnt2].r* | |
NC_OcpN[0][1][1][Mc_AN][cnt1][cnt2].r | |
+ | |
NC_OcpN[0][1][1][Mc_AN][cnt1][cnt2].i* | |
NC_OcpN[0][1][1][Mc_AN][cnt1][cnt2].i ); | |
} | |
cnt2++; | |
} | |
} | |
} | |
My_Ehub += sum; | |
cnt1++; | |
} /* m1 */ | |
} /* mul1 */ | |
} /* l1 */ | |
break; | |
case 2: /* general form by S.Ryee */ | |
/* U Energy */ | |
for(l1=0; l1<=Spe_MaxL_Basis[wan1]; l1++ ){ | |
for(mul1=0; mul1<Spe_Num_Basis[wan1][l1]; mul1++){ | |
Uvalue = Hub_U_Basis[wan1][l1][mul1]; | |
Jvalue = Hund_J_Basis[wan1][l1][mul1]; | |
NZUJ = Nonzero_UJ[wan1][l1][mul1]; | |
if(NZUJ>0){ | |
cnt_start = 0; | |
switch (mul1){ | |
case 0: /* mul1 = 0 */ | |
if(l1 > 0){ | |
for(tmp_l1=0; tmp_l1<l1; tmp_l1++){ | |
cnt_start += (2*tmp_l1+1)*Spe_Num_Basis[wan1][tmp_l1]; | |
} | |
} | |
else{ /* l1 = 0 */ | |
cnt_start = 0; | |
} | |
break; | |
case 1: /* mul1 = 1 */ | |
if(l1 > 0){ | |
for(tmp_l1=0; tmp_l1<l1; tmp_l1++){ | |
cnt_start += (2*tmp_l1+1)*Spe_Num_Basis[wan1][tmp_l1]; | |
} | |
cnt_start += (2*l1+1)*mul1; | |
} | |
else{ /* l1 = 0 */ | |
cnt_start = (2*l1+1)*mul1; | |
} | |
break; | |
} /* switch (mul1) */ | |
trace_N00.r = 0.0; | |
trace_N00.i = 0.0; | |
trace_N11.r = 0.0; | |
trace_N11.i = 0.0; | |
trace_N01.r = 0.0; | |
trace_N01.i = 0.0; | |
trace_N10.r = 0.0; | |
trace_N10.i = 0.0; | |
for(dd=0; dd<(2*l1+1); dd++){ | |
trace_N00.r += NC_OcpN[0][0][0][Mc_AN][cnt_start+dd][cnt_start+dd].r; | |
trace_N00.i += NC_OcpN[0][0][0][Mc_AN][cnt_start+dd][cnt_start+dd].i; | |
trace_N11.r += NC_OcpN[0][1][1][Mc_AN][cnt_start+dd][cnt_start+dd].r; | |
trace_N11.i += NC_OcpN[0][1][1][Mc_AN][cnt_start+dd][cnt_start+dd].i; | |
trace_N01.r += NC_OcpN[0][0][1][Mc_AN][cnt_start+dd][cnt_start+dd].r; | |
trace_N01.i += NC_OcpN[0][0][1][Mc_AN][cnt_start+dd][cnt_start+dd].i; | |
trace_N10.r += NC_OcpN[0][1][0][Mc_AN][cnt_start+dd][cnt_start+dd].r; | |
trace_N10.i += NC_OcpN[0][1][0][Mc_AN][cnt_start+dd][cnt_start+dd].i; | |
} | |
/* Double counting energy */ | |
if(dc_Type==1){ /* sFLL */ | |
My_Ehub -= 0.5*(Uvalue)*(trace_N00.r+trace_N11.r)*(trace_N00.r+trace_N11.r-1.0) | |
-0.5*(Jvalue)*(Cmul(trace_N00,Csub(trace_N00,Complex(1.0,0.0))).r | |
+Cmul(trace_N11,Csub(trace_N11,Complex(1.0,0.0))).r); | |
My_Ehub -=-0.5*(Jvalue)*(Cmul(trace_N01,trace_N10).r + Cmul(trace_N10,trace_N01).r); | |
} /* sFLL */ | |
if(dc_Type==3){ /* cFLL */ | |
My_Ehub -= 0.5*(Uvalue)*(trace_N00.r+trace_N11.r)*(trace_N00.r+trace_N11.r-1.0) | |
-0.25*(Jvalue)*(trace_N00.r+trace_N11.r)*(trace_N00.r+trace_N11.r-2.0); | |
} /* cFLL */ | |
/* if(dc_Type==3){ | |
My_Ehub -= dc_alpha[count]*(0.5*(Uvalue)*(trace_N00.r+trace_N11.r)*(trace_N00.r+trace_N11.r-1.0) | |
-0.5*(Jvalue)*(Cmul(trace_N00,Csub(trace_N00,Complex(1.0,0.0))).r | |
+Cmul(trace_N11,Csub(trace_N11,Complex(1.0,0.0))).r)); | |
My_Ehub -=-dc_alpha[count]*(0.5*(Jvalue)*(Cmul(trace_N01,trace_N10).r + Cmul(trace_N10,trace_N01).r)); | |
} */ | |
/* loop start for interaction energy */ | |
for(ii=0; ii<(2*l1+1); ii++){ | |
for(jj=0; jj<(2*l1+1); jj++){ | |
for(kk=0; kk<(2*l1+1); kk++){ | |
for(ll=0; ll<(2*l1+1); ll++){ | |
switch(dc_Type){ | |
case 1: /* sFLL */ | |
N_00_ac.r=NC_OcpN[0][0][0][Mc_AN][cnt_start+ii][cnt_start+kk].r; | |
N_00_ac.i=NC_OcpN[0][0][0][Mc_AN][cnt_start+ii][cnt_start+kk].i; | |
N_11_ac.r=NC_OcpN[0][1][1][Mc_AN][cnt_start+ii][cnt_start+kk].r; | |
N_11_ac.i=NC_OcpN[0][1][1][Mc_AN][cnt_start+ii][cnt_start+kk].i; | |
N_00_bd.r=NC_OcpN[0][0][0][Mc_AN][cnt_start+jj][cnt_start+ll].r; | |
N_00_bd.i=NC_OcpN[0][0][0][Mc_AN][cnt_start+jj][cnt_start+ll].i; | |
N_11_bd.r=NC_OcpN[0][1][1][Mc_AN][cnt_start+jj][cnt_start+ll].r; | |
N_11_bd.i=NC_OcpN[0][1][1][Mc_AN][cnt_start+jj][cnt_start+ll].i; | |
N_01_ac.r=NC_OcpN[0][0][1][Mc_AN][cnt_start+ii][cnt_start+kk].r; | |
N_01_ac.i=NC_OcpN[0][0][1][Mc_AN][cnt_start+ii][cnt_start+kk].i; | |
N_10_ac.r=NC_OcpN[0][1][0][Mc_AN][cnt_start+ii][cnt_start+kk].r; | |
N_10_ac.i=NC_OcpN[0][1][0][Mc_AN][cnt_start+ii][cnt_start+kk].i; | |
N_01_bd.r=NC_OcpN[0][0][1][Mc_AN][cnt_start+jj][cnt_start+ll].r; | |
N_01_bd.i=NC_OcpN[0][0][1][Mc_AN][cnt_start+jj][cnt_start+ll].i; | |
N_10_bd.r=NC_OcpN[0][1][0][Mc_AN][cnt_start+jj][cnt_start+ll].r; | |
N_10_bd.i=NC_OcpN[0][1][0][Mc_AN][cnt_start+jj][cnt_start+ll].i; | |
/* diagonal term */ | |
tmpEhub1 = 0.5*Coulomb_Array[NZUJ][ii][jj][kk][ll]* | |
(Cmul(N_00_ac,N_00_bd).r + Cmul(N_11_ac,N_11_bd).r | |
+Cmul(N_00_ac,N_11_bd).r + Cmul(N_11_ac,N_00_bd).r) | |
-0.5*Coulomb_Array[NZUJ][ii][jj][ll][kk]* | |
(Cmul(N_00_ac,N_00_bd).r + Cmul(N_11_ac,N_11_bd).r); | |
/* off-diagonal term */ | |
tmpEhub2 = -0.5*Coulomb_Array[NZUJ][ii][jj][ll][kk]* | |
(Cmul(N_01_ac,N_10_bd).r + Cmul(N_10_ac,N_01_bd).r); | |
/* LDA+U energy */ | |
My_Ehub += tmpEhub1 + tmpEhub2; | |
break; | |
case 2: /* sAMF */ | |
N_00_ac.r=AMF_Array[NZUJ][0][0][ii][kk]; | |
N_00_ac.i=AMF_Array[NZUJ][0][1][ii][kk]; | |
N_11_ac.r=AMF_Array[NZUJ][1][0][ii][kk]; | |
N_11_ac.i=AMF_Array[NZUJ][1][1][ii][kk]; | |
N_00_bd.r=AMF_Array[NZUJ][0][0][jj][ll]; | |
N_00_bd.i=AMF_Array[NZUJ][0][1][jj][ll]; | |
N_11_bd.r=AMF_Array[NZUJ][1][0][jj][ll]; | |
N_11_bd.i=AMF_Array[NZUJ][1][1][jj][ll]; | |
N_01_ac.r=AMF_Array[NZUJ][2][0][ii][kk]; | |
N_01_ac.i=AMF_Array[NZUJ][2][1][ii][kk]; | |
N_10_ac.r=AMF_Array[NZUJ][3][0][ii][kk]; | |
N_10_ac.i=AMF_Array[NZUJ][3][1][ii][kk]; | |
N_01_bd.r=AMF_Array[NZUJ][2][0][jj][ll]; | |
N_01_bd.i=AMF_Array[NZUJ][2][1][jj][ll]; | |
N_10_bd.r=AMF_Array[NZUJ][3][0][jj][ll]; | |
N_10_bd.i=AMF_Array[NZUJ][3][1][jj][ll]; | |
/* diagonal term */ | |
tmpEhub1 = 0.5*Coulomb_Array[NZUJ][ii][jj][kk][ll]* | |
(Cmul(N_00_ac,N_00_bd).r + Cmul(N_11_ac,N_11_bd).r | |
+Cmul(N_00_ac,N_11_bd).r + Cmul(N_11_ac,N_00_bd).r) | |
-0.5*Coulomb_Array[NZUJ][ii][jj][ll][kk]* | |
(Cmul(N_00_ac,N_00_bd).r + Cmul(N_11_ac,N_11_bd).r); | |
/* off-diagonal term */ | |
tmpEhub2 = -0.5*Coulomb_Array[NZUJ][ii][jj][ll][kk]* | |
(Cmul(N_01_ac,N_10_bd).r + Cmul(N_10_ac,N_01_bd).r); | |
/* LDA+U energy */ | |
My_Ehub += tmpEhub1 + tmpEhub2; | |
break; | |
case 3: /* cFLL */ | |
N_00_ac.r=NC_OcpN[0][0][0][Mc_AN][cnt_start+ii][cnt_start+kk].r; | |
N_00_ac.i=NC_OcpN[0][0][0][Mc_AN][cnt_start+ii][cnt_start+kk].i; | |
N_11_ac.r=NC_OcpN[0][1][1][Mc_AN][cnt_start+ii][cnt_start+kk].r; | |
N_11_ac.i=NC_OcpN[0][1][1][Mc_AN][cnt_start+ii][cnt_start+kk].i; | |
N_00_bd.r=NC_OcpN[0][0][0][Mc_AN][cnt_start+jj][cnt_start+ll].r; | |
N_00_bd.i=NC_OcpN[0][0][0][Mc_AN][cnt_start+jj][cnt_start+ll].i; | |
N_11_bd.r=NC_OcpN[0][1][1][Mc_AN][cnt_start+jj][cnt_start+ll].r; | |
N_11_bd.i=NC_OcpN[0][1][1][Mc_AN][cnt_start+jj][cnt_start+ll].i; | |
N_01_ac.r=NC_OcpN[0][0][1][Mc_AN][cnt_start+ii][cnt_start+kk].r; | |
N_01_ac.i=NC_OcpN[0][0][1][Mc_AN][cnt_start+ii][cnt_start+kk].i; | |
N_10_ac.r=NC_OcpN[0][1][0][Mc_AN][cnt_start+ii][cnt_start+kk].r; | |
N_10_ac.i=NC_OcpN[0][1][0][Mc_AN][cnt_start+ii][cnt_start+kk].i; | |
N_01_bd.r=NC_OcpN[0][0][1][Mc_AN][cnt_start+jj][cnt_start+ll].r; | |
N_01_bd.i=NC_OcpN[0][0][1][Mc_AN][cnt_start+jj][cnt_start+ll].i; | |
N_10_bd.r=NC_OcpN[0][1][0][Mc_AN][cnt_start+jj][cnt_start+ll].r; | |
N_10_bd.i=NC_OcpN[0][1][0][Mc_AN][cnt_start+jj][cnt_start+ll].i; | |
/* diagonal term */ | |
tmpEhub1 = 0.5*Coulomb_Array[NZUJ][ii][jj][kk][ll]* | |
(Cmul(N_00_ac,N_00_bd).r + Cmul(N_11_ac,N_11_bd).r | |
+Cmul(N_00_ac,N_11_bd).r + Cmul(N_11_ac,N_00_bd).r) | |
-0.5*Coulomb_Array[NZUJ][ii][jj][ll][kk]* | |
(Cmul(N_00_ac,N_00_bd).r + Cmul(N_11_ac,N_11_bd).r); | |
/* off-diagonal term */ | |
tmpEhub2 = -0.5*Coulomb_Array[NZUJ][ii][jj][ll][kk]* | |
(Cmul(N_01_ac,N_10_bd).r + Cmul(N_10_ac,N_01_bd).r); | |
/* LDA+U energy */ | |
My_Ehub += tmpEhub1 + tmpEhub2; | |
break; | |
case 4: /* cAMF */ | |
N_00_ac.r=AMF_Array[NZUJ][0][0][ii][kk]; | |
N_00_ac.i=AMF_Array[NZUJ][0][1][ii][kk]; | |
N_11_ac.r=AMF_Array[NZUJ][1][0][ii][kk]; | |
N_11_ac.i=AMF_Array[NZUJ][1][1][ii][kk]; | |
N_00_bd.r=AMF_Array[NZUJ][0][0][jj][ll]; | |
N_00_bd.i=AMF_Array[NZUJ][0][1][jj][ll]; | |
N_11_bd.r=AMF_Array[NZUJ][1][0][jj][ll]; | |
N_11_bd.i=AMF_Array[NZUJ][1][1][jj][ll]; | |
N_01_ac.r=AMF_Array[NZUJ][2][0][ii][kk]; | |
N_01_ac.i=AMF_Array[NZUJ][2][1][ii][kk]; | |
N_10_ac.r=AMF_Array[NZUJ][3][0][ii][kk]; | |
N_10_ac.i=AMF_Array[NZUJ][3][1][ii][kk]; | |
N_01_bd.r=AMF_Array[NZUJ][2][0][jj][ll]; | |
N_01_bd.i=AMF_Array[NZUJ][2][1][jj][ll]; | |
N_10_bd.r=AMF_Array[NZUJ][3][0][jj][ll]; | |
N_10_bd.i=AMF_Array[NZUJ][3][1][jj][ll]; | |
/* diagonal term */ | |
tmpEhub1 = 0.5*Coulomb_Array[NZUJ][ii][jj][kk][ll]* | |
(Cmul(N_00_ac,N_00_bd).r + Cmul(N_11_ac,N_11_bd).r | |
+Cmul(N_00_ac,N_11_bd).r + Cmul(N_11_ac,N_00_bd).r) | |
-0.5*Coulomb_Array[NZUJ][ii][jj][ll][kk]* | |
(Cmul(N_00_ac,N_00_bd).r + Cmul(N_11_ac,N_11_bd).r); | |
/* off-diagonal term */ | |
tmpEhub2 = -0.5*Coulomb_Array[NZUJ][ii][jj][ll][kk]* | |
(Cmul(N_01_ac,N_10_bd).r + Cmul(N_10_ac,N_01_bd).r); | |
/* LDA+U energy */ | |
My_Ehub += tmpEhub1 + tmpEhub2; | |
break; | |
/* case 3: | |
N_00_ac.r=NC_OcpN[0][0][0][Mc_AN][cnt_start+ii][cnt_start+kk].r; | |
N_00_ac.i=NC_OcpN[0][0][0][Mc_AN][cnt_start+ii][cnt_start+kk].i; | |
N_11_ac.r=NC_OcpN[0][1][1][Mc_AN][cnt_start+ii][cnt_start+kk].r; | |
N_11_ac.i=NC_OcpN[0][1][1][Mc_AN][cnt_start+ii][cnt_start+kk].i; | |
N_00_bd.r=NC_OcpN[0][0][0][Mc_AN][cnt_start+jj][cnt_start+ll].r; | |
N_00_bd.i=NC_OcpN[0][0][0][Mc_AN][cnt_start+jj][cnt_start+ll].i; | |
N_11_bd.r=NC_OcpN[0][1][1][Mc_AN][cnt_start+jj][cnt_start+ll].r; | |
N_11_bd.i=NC_OcpN[0][1][1][Mc_AN][cnt_start+jj][cnt_start+ll].i; | |
N_01_ac.r=NC_OcpN[0][0][1][Mc_AN][cnt_start+ii][cnt_start+kk].r; | |
N_01_ac.i=NC_OcpN[0][0][1][Mc_AN][cnt_start+ii][cnt_start+kk].i; | |
N_10_ac.r=NC_OcpN[0][1][0][Mc_AN][cnt_start+ii][cnt_start+kk].r; | |
N_10_ac.i=NC_OcpN[0][1][0][Mc_AN][cnt_start+ii][cnt_start+kk].i; | |
N_01_bd.r=NC_OcpN[0][0][1][Mc_AN][cnt_start+jj][cnt_start+ll].r; | |
N_01_bd.i=NC_OcpN[0][0][1][Mc_AN][cnt_start+jj][cnt_start+ll].i; | |
N_10_bd.r=NC_OcpN[0][1][0][Mc_AN][cnt_start+jj][cnt_start+ll].r; | |
N_10_bd.i=NC_OcpN[0][1][0][Mc_AN][cnt_start+jj][cnt_start+ll].i; | |
AMF_00_ac.r=AMF_Array[count][0][0][ii][kk]; | |
AMF_00_ac.i=AMF_Array[count][0][1][ii][kk]; | |
AMF_11_ac.r=AMF_Array[count][1][0][ii][kk]; | |
AMF_11_ac.i=AMF_Array[count][1][1][ii][kk]; | |
AMF_00_bd.r=AMF_Array[count][0][0][jj][ll]; | |
AMF_00_bd.i=AMF_Array[count][0][1][jj][ll]; | |
AMF_11_bd.r=AMF_Array[count][1][0][jj][ll]; | |
AMF_11_bd.i=AMF_Array[count][1][1][jj][ll]; | |
AMF_01_ac.r=AMF_Array[count][2][0][ii][kk]; | |
AMF_01_ac.i=AMF_Array[count][2][1][ii][kk]; | |
AMF_10_ac.r=AMF_Array[count][3][0][ii][kk]; | |
AMF_10_ac.i=AMF_Array[count][3][1][ii][kk]; | |
AMF_01_bd.r=AMF_Array[count][2][0][jj][ll]; | |
AMF_01_bd.i=AMF_Array[count][2][1][jj][ll]; | |
AMF_10_bd.r=AMF_Array[count][3][0][jj][ll]; | |
AMF_10_bd.i=AMF_Array[count][3][1][jj][ll]; | |
tmpEhub1 = 0.5*Coulomb_Array[count][ii][jj][kk][ll]* | |
(Cmul(N_00_ac,N_00_bd).r + Cmul(N_11_ac,N_11_bd).r | |
+Cmul(N_00_ac,N_11_bd).r + Cmul(N_11_ac,N_00_bd).r) | |
-0.5*Coulomb_Array[count][ii][jj][ll][kk]* | |
(Cmul(N_00_ac,N_00_bd).r + Cmul(N_11_ac,N_11_bd).r); | |
tmpEhub2 = -0.5*Coulomb_Array[count][ii][jj][ll][kk]* | |
(Cmul(N_01_ac,N_10_bd).r + Cmul(N_10_ac,N_01_bd).r); | |
tmpEhub3 = 0.5*Coulomb_Array[count][ii][jj][kk][ll]* | |
(Cmul(AMF_00_ac,AMF_00_bd).r + Cmul(AMF_11_ac,AMF_11_bd).r | |
+Cmul(AMF_00_ac,AMF_11_bd).r + Cmul(AMF_11_ac,AMF_00_bd).r) | |
-0.5*Coulomb_Array[count][ii][jj][ll][kk]* | |
(Cmul(AMF_00_ac,AMF_00_bd).r + Cmul(AMF_11_ac,AMF_11_bd).r); | |
tmpEhub4 = -0.5*Coulomb_Array[count][ii][jj][ll][kk]* | |
(Cmul(AMF_01_ac,AMF_10_bd).r + Cmul(AMF_10_ac,AMF_01_bd).r); | |
My_Ehub += dc_alpha[count]*(tmpEhub1+tmpEhub2) + (1.0-dc_alpha[count])*(tmpEhub3+tmpEhub4); | |
break; */ | |
} /* dc switch */ | |
} | |
} | |
} | |
} | |
} /* Uvalue != 0.0 || Jvalue != 0.0 */ | |
} /* mul1 */ | |
} /* l1 */ | |
break; | |
} /* Hub_Type */ | |
} /* SpinP_switch */ | |
} /* Mc_AN */ | |
if (SpinP_switch==0) My_Ehub = 2.0*My_Ehub; | |
/**************************************************** | |
MPI My_Ehub | |
****************************************************/ | |
MPI_Allreduce(&My_Ehub, &Ehub, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
/* if (F_U_flag==0) */ | |
if (F_U_flag==0) Ehub = 0.0; | |
return Ehub; | |
} | |
/* okuno */ | |
double Calc_EdftD() | |
{ | |
/************************************************ | |
The subroutine calculates the semiemprical | |
vdW correction to DFT-GGA proposed by | |
S. Grimme, J. Comput. Chem. 27, 1787 (2006). | |
*************************************************/ | |
double My_EdftD,EdftD; | |
double rij[4],fdamp,fdamp2; | |
double rij0[4],par; | |
double dist,dist6,dist2; | |
double exparg,expval; | |
double rcut_dftD2; | |
int numprocs,myid,ID; | |
int Mc_AN,Gc_AN,wanA,wanB; | |
int Gc_BN; | |
int nrm,nr; | |
int i,j; | |
int n1,n2,n3; | |
int per_flag1,per_flag2; | |
int n1_max,n2_max,n3_max; | |
double test_ene; | |
double dblcnt_factor; | |
double E,dEx,dEy,dEz,dist7; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
My_EdftD = 0.0; | |
EdftD = 0.0; | |
rcut_dftD2 = rcut_dftD*rcut_dftD; | |
dblcnt_factor = 0.5; | |
/* here we calculate DFT-D dispersion energy */ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
E = 0.0; | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
Gc_AN = M2G[Mc_AN]; | |
wanA = WhatSpecies[Gc_AN]; | |
per_flag1 = (int)Gxyz[Gc_AN][60]; | |
for(Gc_BN=1; Gc_BN<=atomnum; Gc_BN++){ | |
wanB = WhatSpecies[Gc_BN]; | |
per_flag2 = (int)Gxyz[Gc_BN][60]; | |
rij0[1] = Gxyz[Gc_AN][1] - Gxyz[Gc_BN][1]; | |
rij0[2] = Gxyz[Gc_AN][2] - Gxyz[Gc_BN][2]; | |
rij0[3] = Gxyz[Gc_AN][3] - Gxyz[Gc_BN][3]; | |
par = beta_dftD/(Rsum_dftD[wanA][wanB]); | |
if (per_flag1==0 && per_flag2==0){ | |
n1_max = 0; | |
n2_max = 0; | |
n3_max = 0; | |
} | |
else if (per_flag1==0 && per_flag2==1){ | |
n1_max = n1_DFT_D; | |
n2_max = n2_DFT_D; | |
n3_max = n3_DFT_D; | |
} | |
else if (per_flag1==1 && per_flag2==0){ | |
n1_max = 0; | |
n2_max = 0; | |
n3_max = 0; | |
} | |
else if (per_flag1==1 && per_flag2==1){ | |
n1_max = n1_DFT_D; | |
n2_max = n2_DFT_D; | |
n3_max = n3_DFT_D; | |
} | |
/* | |
printf("Gc_AN=%2d Gc_BN=%2d %2d %2d %2d %2d %2d\n",Gc_AN,Gc_BN,per_flag1,per_flag2,n1_max,n2_max,n3_max); | |
*/ | |
for (n1=-n1_max; n1<=n1_max; n1++){ | |
for (n2=-n2_max; n2<=n2_max; n2++){ | |
for (n3=-n3_max; n3<=n3_max; n3++){ | |
/* for double counting */ | |
if((!(abs(n1)+abs(n2)+abs(n3))==0) && (per_flag1==0 && per_flag2==1) ){ | |
dblcnt_factor = 1.0; | |
} | |
else{ | |
dblcnt_factor = 0.5; | |
} | |
rij[1] = rij0[1] - ( (double)n1*tv[1][1] | |
+ (double)n2*tv[2][1] | |
+ (double)n3*tv[3][1] ); | |
rij[2] = rij0[2] - ( (double)n1*tv[1][2] | |
+ (double)n2*tv[2][2] | |
+ (double)n3*tv[3][2] ); | |
rij[3] = rij0[3] - ( (double)n1*tv[1][3] | |
+ (double)n2*tv[2][3] | |
+ (double)n3*tv[3][3] ); | |
dist2 = rij[1]*rij[1] + rij[2]*rij[2] + rij[3]*rij[3]; | |
if (0.1<dist2 && dist2<=rcut_dftD2){ | |
dist = sqrt(dist2); | |
dist6 = dist2*dist2*dist2; | |
/* calculate the vdW energy */ | |
exparg = -beta_dftD*((dist/Rsum_dftD[wanA][wanB])-1.0); | |
expval = exp(exparg); | |
fdamp = scal6_dftD/(1.0+expval); | |
E -= dblcnt_factor*C6ij_dftD[wanA][wanB]/dist6*fdamp; | |
/* calculate the gradient of the vdW energy */ | |
dist7 = dist6 * dist; | |
fdamp2 = C6ij_dftD[wanA][wanB]*fdamp/dist6*(expval*par/(1.0+expval) - 6.0/dist); | |
dEx -= fdamp2*rij[1]/dist; | |
dEy -= fdamp2*rij[2]/dist; | |
dEz -= fdamp2*rij[3]/dist; | |
} | |
} /* n3 */ | |
} /* n2 */ | |
} /* n1 */ | |
} /* Gc_BN */ | |
My_EdftD += E; | |
/* energy decomposition */ | |
if (Energy_Decomposition_flag==1){ | |
DecEvdw[0][Mc_AN][0] = E; | |
DecEvdw[1][Mc_AN][0] = E; | |
} | |
/* gradients from two-body terms */ | |
Gxyz[Gc_AN][17] += dEx; | |
Gxyz[Gc_AN][18] += dEy; | |
Gxyz[Gc_AN][19] += dEz; | |
/* | |
printf("Gc_AN=%2d dEx=%15.12f dEy=%15.12f dEz=%15.12f\n",Gc_AN,dEx,dEy,dEz); | |
*/ | |
} /* Mc_AN */ | |
MPI_Allreduce(&My_EdftD, &EdftD, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
return EdftD; | |
} | |
/* okuno */ | |
/* Ellner */ | |
double Calc_EdftD3() | |
{ | |
/*********************************************************************** | |
The subroutine calculates the semiemprical DFTD3 vdW correction | |
DFTD3 with zero damping: | |
Grimme, S. et al. H. J. Chem. Phys. (2010), 132, 154104 | |
DFTD3 with BJ damping | |
Becke, A. D.; Johnson, E. R. J. Chem. Phys. 2005, 122, 154101 | |
Johnson, E. R.; Becke, A. D. J. Chem. Phys. 2005, 123, 024101 | |
Johnson, E. R.; Becke, A. D. J. Chem. Phys. 2006, 124, 174104 | |
************************************************************************/ | |
/* VARIABLES DECLARATOIN */ | |
double My_EdftD,EdftD; /* energy */ | |
double E; /* atomic energy */ | |
double rij[4],fdamp,fdamp6,fdamp8,t6,t62,t8,t82,dE6,dE8,dEC,**dEC0; /* interaction */ | |
double rij0[4]; /* positions */ | |
double dist,dist2,dist5,dist6,dist7,dist8; /**/ | |
double rcut2, cncut2; /* cutoff values */ | |
int numprocs,myid,ID; /* MPI */ | |
int Mc_AN,Gc_AN,Gc_BN,Gc_CN,wanA,wanB,iZ; /* atom counting and species */ | |
int i,j; /* dummy vars */ | |
int n1,n2,n3,n1_max,n2_max,n3_max; /* PBC */ | |
double per_flagA, per_flagB, dblcnt_factor; /* double counting */ | |
double dEx,dEy,dEz; /* gradients*/ | |
double xn, *CN, *****dCN; /* Coordination number */ | |
double exparg,expval, powarg, powval; /**/ | |
double Z, W, C6_ref, dAi, dBj, Lij, C6, C8, **dC6ij, dZi, dZj, dWi, dWj; /* Gaussian distance C6, C8 parameter */ | |
double C8C6; | |
/* START: for printing gradients ERASE | |
double *xgrad,*ygrad,*zgrad; | |
END: for printing gradients ERASE */ | |
/* MPI AND INITIALIZATION */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
n1_max = n1_CN_DFT_D; | |
n2_max = n2_CN_DFT_D; | |
n3_max = n3_CN_DFT_D; | |
My_EdftD = 0.0; | |
EdftD = 0.0; | |
rcut2 = rcut_dftD*rcut_dftD; | |
cncut2 = cncut_dftD*cncut_dftD; | |
CN = (double*)malloc(sizeof(double)*(atomnum+1)); | |
dC6ij = (double**)malloc(sizeof(double*)*(atomnum+1)); | |
dEC0 = (double**)malloc(sizeof(double*)*(atomnum+1)); | |
dCN = (double*****)malloc(sizeof(double****)*(atomnum+1)); | |
for(Gc_AN=0; Gc_AN<atomnum+1; Gc_AN++){ | |
dC6ij[Gc_AN]=(double*)malloc(sizeof(double)*(atomnum+1)); | |
dEC0[Gc_AN]=(double*)malloc(sizeof(double*)*(atomnum+1)); | |
for (i=0; i<(atomnum+1); i++){ | |
dC6ij[Gc_AN][i] = 0.0; | |
dEC0[Gc_AN][i] = 0.0; | |
} | |
dCN[Gc_AN] =(double****)malloc(sizeof(double***)*(atomnum+1)); | |
for(Gc_BN=0; Gc_BN<atomnum+1; Gc_BN++){ | |
dCN[Gc_AN][Gc_BN] =(double***)malloc(sizeof(double**)*(2*n1_max+1)); | |
for (n1=0; n1<=2*n1_max; n1++){ | |
dCN[Gc_AN][Gc_BN][n1] =(double**)malloc(sizeof(double*)*(2*n2_max+1)); | |
for (n2=0; n2<=2*n2_max; n2++){ | |
dCN[Gc_AN][Gc_BN][n1][n2] =(double*)malloc(sizeof(double)*(2*n3_max+1)); | |
for (i=0; i<(2*n3_max+1); i++) dCN[Gc_AN][Gc_BN][n1][n2][i] = 0.0; | |
} /* n2 */ | |
} /* n1 */ | |
} /* Gc_BN */ | |
} /* Gc_AN */ | |
/* START: for printing gradients ERASE | |
xgrad = (double*)malloc(sizeof(double)*(atomnum+1)); | |
ygrad = (double*)malloc(sizeof(double)*(atomnum+1)); | |
zgrad = (double*)malloc(sizeof(double)*(atomnum+1)); | |
END: for printing gradients ERASE */ | |
/* Compute coordination numbers CN_A and derivative dCN_AB/dr_AB by adding an inverse damping function */ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
wanA = WhatSpecies[Gc_AN]; | |
iZ = Spe_WhatAtom[wanA]; | |
if ( iZ>0 ) { | |
xn=0.0; | |
for(Gc_BN=1; Gc_BN<=atomnum; Gc_BN++){ | |
wanB = WhatSpecies[Gc_BN]; | |
iZ = Spe_WhatAtom[wanB]; | |
if ( iZ>0 ) { | |
per_flagB = (int)Gxyz[Gc_BN][60]; | |
rij0[1] = Gxyz[Gc_AN][1] - Gxyz[Gc_BN][1]; | |
rij0[2] = Gxyz[Gc_AN][2] - Gxyz[Gc_BN][2]; | |
rij0[3] = Gxyz[Gc_AN][3] - Gxyz[Gc_BN][3]; | |
if (per_flagB==0){ | |
n1_max = 0; | |
n2_max = 0; | |
n3_max = 0; | |
} | |
else { | |
n1_max = n1_CN_DFT_D; | |
n2_max = n2_CN_DFT_D; | |
n3_max = n3_CN_DFT_D; | |
} | |
for (n1=-n1_max; n1<=n1_max; n1++){ | |
for (n2=-n2_max; n2<=n2_max; n2++){ | |
for (n3=-n3_max; n3<=n3_max; n3++){ | |
rij[1] = rij0[1] - ( (double)n1*tv[1][1] | |
+ (double)n2*tv[2][1] | |
+ (double)n3*tv[3][1] ); | |
rij[2] = rij0[2] - ( (double)n1*tv[1][2] | |
+ (double)n2*tv[2][2] | |
+ (double)n3*tv[3][2] ); | |
rij[3] = rij0[3] - ( (double)n1*tv[1][3] | |
+ (double)n2*tv[2][3] | |
+ (double)n3*tv[3][3] ); | |
dist2 = rij[1]*rij[1] + rij[2]*rij[2] + rij[3]*rij[3]; | |
if (dist2<cncut2 && dist2>0.1){ | |
dist = sqrt(dist2); | |
exparg = -k1_dftD*((rcovab_dftD[wanA][wanB]/dist)-1.0); /* Rsum is scaled by k2 */ | |
expval = exp(exparg); | |
fdamp = 1.0/(1.0+expval); | |
xn+=fdamp; | |
dCN[Gc_AN][Gc_BN][n1+n1_CN_DFT_D][n2+n2_CN_DFT_D][n3+n3_CN_DFT_D]=-fdamp*fdamp*expval*k1_dftD*rcovab_dftD[wanA][wanB]/dist2; | |
} | |
else{ | |
dCN[Gc_AN][Gc_BN][n1+n1_CN_DFT_D][n2+n2_CN_DFT_D][n3+n3_CN_DFT_D]=0.0; | |
} | |
} /* n3 */ | |
} /* n2 */ | |
} /* n1 */ | |
} | |
} /* Gc_BN */ | |
CN[Gc_AN] = xn; | |
} | |
} /* Mc_AN */ | |
/*MPI BROADCAST CN NUMBERS - MPI_Barrier(mpi_comm_level1); */ | |
MPI_Barrier(mpi_comm_level1); /* NOT SURE IF NEEDED! */ | |
for (Gc_AN=1; Gc_AN<=atomnum; Gc_AN++){ | |
wanA = WhatSpecies[Gc_AN]; | |
iZ = Spe_WhatAtom[wanA]; | |
if ( iZ>0 ) { | |
ID = G2ID[Gc_AN]; | |
MPI_Bcast(&CN[Gc_AN], 1, MPI_DOUBLE, ID, mpi_comm_level1); | |
for (Gc_BN=1; Gc_BN<=atomnum; Gc_BN++){ | |
wanB = WhatSpecies[Gc_BN]; | |
iZ = Spe_WhatAtom[wanB]; | |
if ( iZ>0 ) { | |
per_flagB = (int)Gxyz[Gc_BN][60]; | |
if (per_flagB==0){ | |
n1_max = 0; | |
n2_max = 0; | |
n3_max = 0; | |
} | |
else { | |
n1_max = n1_CN_DFT_D; | |
n2_max = n2_CN_DFT_D; | |
n3_max = n3_CN_DFT_D; | |
} | |
for (n1=-n1_max; n1<=n1_max; n1++){ | |
for (n2=-n2_max; n2<=n2_max; n2++){ | |
for (n3=-n3_max; n3<=n3_max; n3++){ | |
MPI_Bcast(&dCN[Gc_AN][Gc_BN][n1+n1_CN_DFT_D][n2+n2_CN_DFT_D][n3+n3_CN_DFT_D], 1, MPI_DOUBLE, ID, mpi_comm_level1); | |
} /* n3 */ | |
} /* n2 */ | |
} /* n1 */ | |
} | |
} /* Gc_BN */ | |
} | |
} /* Gc_AN */ | |
/* Calculate energy and collect gradients two body terms C_ij*d(f_ij/r_ij)/dr_ij also dCi_ij dCj_ij dEC0_ij needed in gradients of 3 body terms */ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
wanA = WhatSpecies[Gc_AN]; | |
iZ = Spe_WhatAtom[wanA]; | |
if ( iZ>0 ) { | |
dblcnt_factor=0.5; | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
E = 0.0; | |
per_flagA = (int)Gxyz[Gc_AN][60]; | |
for(Gc_BN=1; Gc_BN<=atomnum; Gc_BN++){ | |
wanB = WhatSpecies[Gc_BN]; | |
iZ = Spe_WhatAtom[wanB]; | |
if ( iZ>0 ) { | |
dEC0[Gc_AN][Gc_BN]=0.0; | |
per_flagB = (int)Gxyz[Gc_BN][60]; | |
rij0[1] = Gxyz[Gc_AN][1] - Gxyz[Gc_BN][1]; | |
rij0[2] = Gxyz[Gc_AN][2] - Gxyz[Gc_BN][2]; | |
rij0[3] = Gxyz[Gc_AN][3] - Gxyz[Gc_BN][3]; | |
/* Calculate C6, C8 coefficient and derivatives with Gaussian-distance (L) */ | |
Z = 0.0; | |
W = 0.0; | |
dZi=0.0; | |
dZj=0.0; | |
dWi=0.0; | |
dWj=0.0; | |
for (i=0; i<maxcn_dftD[wanA]; i++){ | |
for (j=0; j<maxcn_dftD[wanB]; j++){ | |
C6_ref=C6ab_dftD[wanA][wanB][i][j][0]; | |
if (C6_ref>1.0e-12){ | |
dAi = CN[Gc_AN] - C6ab_dftD[wanA][wanB][i][j][1]; | |
dBj = CN[Gc_BN] - C6ab_dftD[wanA][wanB][i][j][2]; | |
exparg = -k3_dftD*( dAi*dAi + dBj*dBj ); | |
Lij=exp(exparg); | |
Z += C6_ref*Lij; | |
W += Lij; | |
dZi+=C6_ref*Lij*2.0*k3_dftD*dAi; | |
dZj+=C6_ref*Lij*2.0*k3_dftD*dBj; | |
dWi+=Lij*2.0*k3_dftD*dAi; | |
dWj+=Lij*2.0*k3_dftD*dBj; | |
} | |
} /* CN_j */ | |
} /* CN_i */ | |
if (W>1.0e-12){ | |
C6 = Z/W; | |
C8 = 3.0*C6*r2r4ab_dftD[wanA][wanB]; | |
C8C6 = 3.0*r2r4ab_dftD[wanA][wanB]; | |
dC6ij[Gc_AN][Gc_BN]=((dZi*W)-(dWi*Z))/(W*W); | |
} | |
else{ | |
C6 = 0.0; | |
C8 = 0.0; | |
C8C6 = 3.0*r2r4ab_dftD[wanA][wanB]; | |
dC6ij[Gc_AN][Gc_BN]=0.0; | |
} | |
/* CALCULATE ENERGY AND TWO FIRST PART OF GRADIENTS*/ | |
if (per_flagB==0){ | |
n1_max = 0; | |
n2_max = 0; | |
n3_max = 0; | |
} | |
else { | |
n1_max = n1_DFT_D; | |
n2_max = n2_DFT_D; | |
n3_max = n3_DFT_D; | |
} | |
for (n1=-n1_max; n1<=n1_max; n1++){ | |
for (n2=-n2_max; n2<=n2_max; n2++){ | |
for (n3=-n3_max; n3<=n3_max; n3++){ | |
/* for double counting */ | |
if((!(abs(n1)+abs(n2)+abs(n3))==0) && (per_flagA==0 && per_flagB==1) ){ | |
dblcnt_factor = 1.0; | |
} | |
else{ | |
dblcnt_factor = 0.5; | |
} | |
rij[1] = rij0[1] - ( (double)n1*tv[1][1] | |
+ (double)n2*tv[2][1] | |
+ (double)n3*tv[3][1] ); | |
rij[2] = rij0[2] - ( (double)n1*tv[1][2] | |
+ (double)n2*tv[2][2] | |
+ (double)n3*tv[3][2] ); | |
rij[3] = rij0[3] - ( (double)n1*tv[1][3] | |
+ (double)n2*tv[2][3] | |
+ (double)n3*tv[3][3] ); | |
dist2 = rij[1]*rij[1] + rij[2]*rij[2] + rij[3]*rij[3]; | |
if (0.1<dist2 && dist2<rcut2){ | |
dist = sqrt(dist2); | |
dist5 = dist2*dist2*dist; | |
dist6 = dist2*dist2*dist2; | |
dist7 = dist6*dist; | |
dist8 = dist6*dist2; | |
if (DFTD3_damp_dftD == 1){ /*DFTD3 ZERO DAMPING*/ | |
/* calculate the vdW energy of E6 and grad of f6/r6 term*/ | |
powarg = dist/(sr6_dftD*r0ab_dftD[wanB][wanA]); | |
powval = pow(powarg,-alp6_dftD); | |
fdamp6 = 1.0/(1.0+6.0*powval); | |
E -= dblcnt_factor*s6_dftD*C6*fdamp6/dist6; | |
dE6=(s6_dftD*C6*fdamp6/dist6)*(6.0/dist)*(-1.0+alp6_dftD*powval*fdamp6); | |
/* calculate the vdW energy of E8 and grad of f8/r8 term*/ | |
powarg = dist/(sr8_dftD*r0ab_dftD[wanB][wanA]); | |
powval = pow(powarg,-alp8_dftD); | |
fdamp8 = 1.0/(1.0+6.0*powval); | |
E -= dblcnt_factor*s8_dftD*C8*fdamp8/dist8; | |
dE8=(s8_dftD*C8*fdamp8/dist8)*(2.0/dist)*(-4.0+3.0*alp8_dftD*powval*fdamp8); | |
dEC0[Gc_AN][Gc_BN]+=s6_dftD*fdamp6/dist6+s8_dftD*3.0*r2r4ab_dftD[wanA][wanB]*fdamp8/dist8; | |
} /* END IF ZERO DAMPING */ | |
if (DFTD3_damp_dftD == 2){ /*DFTD3 BJ DAMPING*/ | |
fdamp = (a1_dftD*sqrt(C8C6)+a2_dftD); | |
fdamp6=fdamp*fdamp*fdamp*fdamp*fdamp*fdamp; | |
fdamp8=fdamp6*fdamp*fdamp; | |
t6=dist6 + fdamp6; | |
t62=t6*t6; | |
t8=dist8 + fdamp8; | |
t82=t8*t8; | |
E -= dblcnt_factor*s6_dftD*C6/t6; | |
dE6=-s6_dftD*C6*6.0*dist5/t62; | |
E -= dblcnt_factor*s8_dftD*C8/t8; | |
dE8=-s8_dftD*C8*8.0*dist7/t82; | |
dEC0[Gc_AN][Gc_BN]+=s6_dftD/t6+s8_dftD*3.0*r2r4ab_dftD[wanA][wanB]/t8; | |
} /* IF BJ DAMPING */ | |
dEx -= (dE6+dE8)*rij[1]/dist; | |
dEy -= (dE6+dE8)*rij[2]/dist; | |
dEz -= (dE6+dE8)*rij[3]/dist; | |
} /* if dist2 < rcut */ | |
} /* n3 */ | |
} /* n2 */ | |
} /* n1 */ | |
} | |
} /* Gc_BN */ | |
My_EdftD += E; | |
/* energy decomposition */ | |
if (Energy_Decomposition_flag==1){ | |
DecEvdw[0][Mc_AN][0] = E; | |
DecEvdw[1][Mc_AN][0] = E; | |
} | |
/* gradients from two-body terms */ | |
Gxyz[Gc_AN][17] += dEx; | |
Gxyz[Gc_AN][18] += dEy; | |
Gxyz[Gc_AN][19] += dEz; | |
/* START: for printing gradients ERASE | |
xgrad[Gc_AN]=dEx;ygrad[Gc_AN]=dEy;zgrad[Gc_AN]=dEz; | |
END: for printing gradients ERASE */ | |
} | |
} /* Mc_AN */ | |
/*MPI BROADCAST GRADIENTS AND REDUCE ENERGIES - MPI_Barrier(mpi_comm_level1); */ | |
MPI_Allreduce(&My_EdftD, &EdftD, 1, MPI_DOUBLE, MPI_SUM, mpi_comm_level1); | |
for (Gc_AN=1; Gc_AN<=atomnum; Gc_AN++){ | |
wanA = WhatSpecies[Gc_AN]; | |
iZ = Spe_WhatAtom[wanA]; | |
if ( iZ>0 ) { | |
ID = G2ID[Gc_AN]; | |
MPI_Bcast(&CN[Gc_AN], 1, MPI_DOUBLE, ID, mpi_comm_level1); | |
for (Gc_BN=1; Gc_BN<=atomnum; Gc_BN++){ | |
wanB = WhatSpecies[Gc_BN]; | |
iZ = Spe_WhatAtom[wanB]; | |
if ( iZ>0 ) { | |
MPI_Bcast(&dC6ij[Gc_AN][Gc_BN], 1, MPI_DOUBLE, ID, mpi_comm_level1); | |
MPI_Bcast(&dEC0[Gc_AN][Gc_BN], 1, MPI_DOUBLE, ID, mpi_comm_level1); | |
} | |
} /* Gc_BN */ | |
} | |
} /* Gc_AN */ | |
MPI_Barrier(mpi_comm_level1); /* NOT SURE IF ITS NEEDED! */ | |
/* Calculate three body terms of gradients */ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
wanA = WhatSpecies[Gc_AN]; | |
iZ = Spe_WhatAtom[wanA]; | |
if ( iZ>0 ) { | |
dEx = 0.0; | |
dEy = 0.0; | |
dEz = 0.0; | |
for(Gc_BN=1; Gc_BN<=atomnum; Gc_BN++){ | |
wanB = WhatSpecies[Gc_BN]; | |
iZ = Spe_WhatAtom[wanB]; | |
if ( iZ>0 ) { | |
per_flagB = (int)Gxyz[Gc_BN][60]; | |
rij0[1] = Gxyz[Gc_AN][1] - Gxyz[Gc_BN][1]; | |
rij0[2] = Gxyz[Gc_AN][2] - Gxyz[Gc_BN][2]; | |
rij0[3] = Gxyz[Gc_AN][3] - Gxyz[Gc_BN][3]; | |
if (per_flagB==0){ | |
n1_max = 0; | |
n2_max = 0; | |
n3_max = 0; | |
} | |
else { | |
n1_max = n1_CN_DFT_D; | |
n2_max = n2_CN_DFT_D; | |
n3_max = n3_CN_DFT_D; | |
} | |
for (n1=-n1_max; n1<=n1_max; n1++){ | |
for (n2=-n2_max; n2<=n2_max; n2++){ | |
for (n3=-n3_max; n3<=n3_max; n3++){ | |
dEC=0.0; | |
rij[1] = rij0[1] - ( (double)n1*tv[1][1] | |
+ (double)n2*tv[2][1] | |
+ (double)n3*tv[3][1] ); | |
rij[2] = rij0[2] - ( (double)n1*tv[1][2] | |
+ (double)n2*tv[2][2] | |
+ (double)n3*tv[3][2] ); | |
rij[3] = rij0[3] - ( (double)n1*tv[1][3] | |
+ (double)n2*tv[2][3] | |
+ (double)n3*tv[3][3] ); | |
dist2 = rij[1]*rij[1] + rij[2]*rij[2] + rij[3]*rij[3]; | |
if (0.1<dist2 && dist2<cncut2){ | |
/* calculate grad of C6 term: dEC=dEC0_ik*dC6_ik*dCN_ij+dEC0_jk*dC6_jk*dCN_ij */ | |
dist=sqrt(dist2); | |
for(Gc_CN=1; Gc_CN<=atomnum; Gc_CN++){ | |
dEC += dEC0[Gc_AN][Gc_CN]*dC6ij[Gc_AN][Gc_CN]*dCN[Gc_AN][Gc_BN][n1+n1_CN_DFT_D][n2+n2_CN_DFT_D][n3+n3_CN_DFT_D]; | |
dEC += dEC0[Gc_BN][Gc_CN]*dC6ij[Gc_BN][Gc_CN]*dCN[Gc_AN][Gc_BN][n1+n1_CN_DFT_D][n2+n2_CN_DFT_D][n3+n3_CN_DFT_D]; | |
} /* Gc_CN */ | |
dEx += dEC*rij[1]/dist; | |
dEy += dEC*rij[2]/dist; | |
dEz += dEC*rij[3]/dist; | |
} /* if dist2 < cn_thr */ | |
} /* n3 */ | |
} /* n2 */ | |
} /* n1 */ | |
} | |
} /* Gc_BN */ | |
Gxyz[Gc_AN][17] += dEx; | |
Gxyz[Gc_AN][18] += dEy; | |
Gxyz[Gc_AN][19] += dEz; | |
/* START: for printing gradients ERASE | |
xgrad[Gc_AN]+=dEx;ygrad[Gc_AN]+=dEy;zgrad[Gc_AN]+=dEz; | |
END: for printing gradients ERASE */ | |
} | |
} /* Mc_AN */ | |
/* START: for printing gradients ERASE | |
MPI_Barrier(mpi_comm_level1); | |
for (Gc_AN=1; Gc_AN<=atomnum; Gc_AN++){ | |
ID = G2ID[Gc_AN]; | |
MPI_Bcast(&xgrad[Gc_AN], 1, MPI_DOUBLE, ID, mpi_comm_level1); | |
MPI_Bcast(&ygrad[Gc_AN], 1, MPI_DOUBLE, ID, mpi_comm_level1); | |
MPI_Bcast(&zgrad[Gc_AN], 1, MPI_DOUBLE, ID, mpi_comm_level1); | |
} | |
if(myid==0){ | |
printf("DFTD3: ATOM NUMBER, COORDINATION NUMBER, GRADIENTS (X, Y, Z)\n"); | |
for(Gc_AN=1; Gc_AN<=atomnum; Gc_AN++){ | |
printf("%4d %10.6e %+12.8e %+12.8e %+12.8e \n",Gc_AN, CN[Gc_AN],xgrad[Gc_AN],ygrad[Gc_AN],zgrad[Gc_AN]);fflush(stdout); | |
} | |
} | |
free(xgrad);free(ygrad);free(zgrad); | |
END: for printing gradients ERASE */ | |
/* free arrays */ | |
for(Gc_AN=0; Gc_AN<atomnum+1; Gc_AN++){ | |
for(Gc_BN=0; Gc_BN<atomnum+1; Gc_BN++){ | |
for (n1=0; n1<=2*n1_CN_DFT_D; n1++){ | |
for (n2=0; n2<=2*n2_CN_DFT_D; n2++){ | |
free(dCN[Gc_AN][Gc_BN][n1][n2]); | |
} /* n2 */ | |
free(dCN[Gc_AN][Gc_BN][n1]); | |
} /* n1 */ | |
free(dCN[Gc_AN][Gc_BN]); | |
} /* Gc_BN */ | |
free(dC6ij[Gc_AN]); | |
free(dEC0[Gc_AN]); | |
free(dCN[Gc_AN]); | |
} /* Gc_AN */ | |
free(dC6ij); | |
free(dEC0); | |
free(dCN); | |
free(CN); | |
return EdftD; | |
} | |
/* Ellner */ | |
void Energy_Decomposition(double ECE[]) | |
{ | |
static int firsttime=1; | |
int i,spin,spinmax,XC_P_switch; | |
int numS,numR,My_GNum,BN_AB,max_ene; | |
int n,n1,n2,n3,Ng1,Ng2,Ng3,j,k; | |
int GN,GNs,BN,DN,LN,N2D,n2D,N3[4]; | |
double intVH1[2],intVxc[2]; | |
double My_intVH1[2],My_intVxc[2]; | |
double c[2],Etot; | |
int numprocs,myid,tag=999,ID,IDS,IDR; | |
double Cxyz[4],gradxyz[4]; | |
double Stime_atom,Etime_atom; | |
double time0,time1; | |
double sden[2],tden,aden,pden[2]; | |
int tnoA,tnoB,wanA,wanB,Mc_AN,Gc_AN,h_AN; | |
double sum,tsum,Total_Mul_up,Total_Mul_dn; | |
/* MPI */ | |
MPI_Comm_size(mpi_comm_level1,&numprocs); | |
MPI_Comm_rank(mpi_comm_level1,&myid); | |
/* calculation of total energy */ | |
max_ene = 14; | |
Etot = 0.0; | |
for (i=0; i<=max_ene; i++){ | |
Etot += ECE[i]; | |
} | |
Etot = Etot - ECE[0] - ECE[1] - ECE[13]; | |
Total_Mul_up = 0.0; | |
Total_Mul_dn = 0.0; | |
for (Gc_AN=1; Gc_AN<=atomnum; Gc_AN++){ | |
Total_Mul_up += InitN_USpin[Gc_AN]; | |
Total_Mul_dn += InitN_DSpin[Gc_AN]; | |
} | |
if (SpinP_switch==0){ | |
c[0] = 0.5*(Etot - Uele)/(Total_Mul_up+1.0e-15); | |
} | |
else if (SpinP_switch==1) { | |
c[0] = (Etot - Uele)/(Total_Mul_up+Total_Mul_dn+1.0e-15); | |
c[1] = c[0]; | |
} | |
else if (SpinP_switch==3) { | |
c[0] = (Etot - Uele)/(Total_Mul_up+Total_Mul_dn+1.0e-15); | |
c[1] = c[0]; | |
} | |
/**************************************************** | |
calculations of DecEkin, DecEv, and DecEcon | |
****************************************************/ | |
if (SpinP_switch==0 || SpinP_switch==1){ | |
for (spin=0; spin<=SpinP_switch; spin++){ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
wanA = WhatSpecies[Gc_AN]; | |
tnoA = Spe_Total_CNO[wanA]; | |
for (i=0; i<tnoA; i++){ | |
DecEkin[spin][Mc_AN][i] = 0.0; | |
DecEv[spin][Mc_AN][i] = 0.0; | |
DecEcon[spin][Mc_AN][i] = 0.0; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
wanB = WhatSpecies[natn[Gc_AN][h_AN]]; | |
tnoB = Spe_Total_CNO[wanB]; | |
for (j=0; j<tnoB; j++){ | |
DecEkin[spin][Mc_AN][i] += DM[0][spin][Mc_AN][h_AN][i][j]*H0[0][Mc_AN][h_AN][i][j]; | |
DecEv[spin][Mc_AN][i] += DM[0][spin][Mc_AN][h_AN][i][j]*(H[spin][Mc_AN][h_AN][i][j]-H0[0][Mc_AN][h_AN][i][j]); | |
DecEcon[spin][Mc_AN][i] += DM[0][spin][Mc_AN][h_AN][i][j]*OLP[0][Mc_AN][h_AN][i][j]*c[spin]; | |
} | |
} | |
} | |
} | |
} | |
} | |
else if (SpinP_switch==3){ | |
for (Mc_AN=1; Mc_AN<=Matomnum; Mc_AN++){ | |
Gc_AN = M2G[Mc_AN]; | |
wanA = WhatSpecies[Gc_AN]; | |
tnoA = Spe_Total_CNO[wanA]; | |
for (i=0; i<tnoA; i++){ | |
DecEkin[0][Mc_AN][i] = 0.0; | |
DecEkin[1][Mc_AN][i] = 0.0; | |
DecEv[0][Mc_AN][i] = 0.0; | |
DecEv[1][Mc_AN][i] = 0.0; | |
DecEcon[0][Mc_AN][i] = 0.0; | |
DecEcon[1][Mc_AN][i] = 0.0; | |
for (h_AN=0; h_AN<=FNAN[Gc_AN]; h_AN++){ | |
wanB = WhatSpecies[natn[Gc_AN][h_AN]]; | |
tnoB = Spe_Total_CNO[wanB]; | |
for (j=0; j<tnoB; j++){ | |
DecEkin[0][Mc_AN][i] += DM[0][0][Mc_AN][h_AN][i][j]*H0[0][Mc_AN][h_AN][i][j]; | |
DecEkin[1][Mc_AN][i] += DM[0][1][Mc_AN][h_AN][i][j]*H0[0][Mc_AN][h_AN][i][j]; | |
DecEcon[0][Mc_AN][i] += DM[0][0][Mc_AN][h_AN][i][j]*OLP[0][Mc_AN][h_AN][i][j]*c[0]; | |
DecEcon[1][Mc_AN][i] += DM[0][1][Mc_AN][h_AN][i][j]*OLP[0][Mc_AN][h_AN][i][j]*c[1]; | |
DecEv[0][Mc_AN][i] += | |
DM[0][0][Mc_AN][h_AN][i][j]*(H[0][Mc_AN][h_AN][i][j]-H0[0][Mc_AN][h_AN][i][j]) | |
- iDM[0][0][Mc_AN][h_AN][i][j]*iHNL[0][Mc_AN][h_AN][i][j] | |
+ DM[0][1][Mc_AN][h_AN][i][j]*(H[1][Mc_AN][h_AN][i][j]-H0[0][Mc_AN][h_AN][i][j]) | |
- iDM[0][1][Mc_AN][h_AN][i][j]*iHNL[1][Mc_AN][h_AN][i][j] | |
+ 2.0*DM[0][2][Mc_AN][h_AN][i][j]*H[2][Mc_AN][h_AN][i][j] | |
- 2.0*DM[0][3][Mc_AN][h_AN][i][j]*(H[3][Mc_AN][h_AN][i][j]+iHNL[2][Mc_AN][h_AN][i][j]); | |
DecEv[1][Mc_AN][i] = 0.0; | |
} | |
} | |
} | |
} | |
} | |
} | |
void Set_Lebedev_Grid() | |
{ | |
/* 590 */ | |
if (Num_Leb_Grid==590){ | |
Leb_Grid_XYZW[ 0][0]= 1.000000000000000; | |
Leb_Grid_XYZW[ 0][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 0][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 0][3]= 0.000309512129531; | |
Leb_Grid_XYZW[ 1][0]=-1.000000000000000; | |
Leb_Grid_XYZW[ 1][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 1][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 1][3]= 0.000309512129531; | |
Leb_Grid_XYZW[ 2][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 2][1]= 1.000000000000000; | |
Leb_Grid_XYZW[ 2][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 2][3]= 0.000309512129531; | |
Leb_Grid_XYZW[ 3][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 3][1]=-1.000000000000000; | |
Leb_Grid_XYZW[ 3][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 3][3]= 0.000309512129531; | |
Leb_Grid_XYZW[ 4][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 4][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 4][2]= 1.000000000000000; | |
Leb_Grid_XYZW[ 4][3]= 0.000309512129531; | |
Leb_Grid_XYZW[ 5][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 5][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 5][2]=-1.000000000000000; | |
Leb_Grid_XYZW[ 5][3]= 0.000309512129531; | |
Leb_Grid_XYZW[ 6][0]= 0.577350269189626; | |
Leb_Grid_XYZW[ 6][1]= 0.577350269189626; | |
Leb_Grid_XYZW[ 6][2]= 0.577350269189626; | |
Leb_Grid_XYZW[ 6][3]= 0.001852379698597; | |
Leb_Grid_XYZW[ 7][0]=-0.577350269189626; | |
Leb_Grid_XYZW[ 7][1]= 0.577350269189626; | |
Leb_Grid_XYZW[ 7][2]= 0.577350269189626; | |
Leb_Grid_XYZW[ 7][3]= 0.001852379698597; | |
Leb_Grid_XYZW[ 8][0]= 0.577350269189626; | |
Leb_Grid_XYZW[ 8][1]=-0.577350269189626; | |
Leb_Grid_XYZW[ 8][2]= 0.577350269189626; | |
Leb_Grid_XYZW[ 8][3]= 0.001852379698597; | |
Leb_Grid_XYZW[ 9][0]=-0.577350269189626; | |
Leb_Grid_XYZW[ 9][1]=-0.577350269189626; | |
Leb_Grid_XYZW[ 9][2]= 0.577350269189626; | |
Leb_Grid_XYZW[ 9][3]= 0.001852379698597; | |
Leb_Grid_XYZW[ 10][0]= 0.577350269189626; | |
Leb_Grid_XYZW[ 10][1]= 0.577350269189626; | |
Leb_Grid_XYZW[ 10][2]=-0.577350269189626; | |
Leb_Grid_XYZW[ 10][3]= 0.001852379698597; | |
Leb_Grid_XYZW[ 11][0]=-0.577350269189626; | |
Leb_Grid_XYZW[ 11][1]= 0.577350269189626; | |
Leb_Grid_XYZW[ 11][2]=-0.577350269189626; | |
Leb_Grid_XYZW[ 11][3]= 0.001852379698597; | |
Leb_Grid_XYZW[ 12][0]= 0.577350269189626; | |
Leb_Grid_XYZW[ 12][1]=-0.577350269189626; | |
Leb_Grid_XYZW[ 12][2]=-0.577350269189626; | |
Leb_Grid_XYZW[ 12][3]= 0.001852379698597; | |
Leb_Grid_XYZW[ 13][0]=-0.577350269189626; | |
Leb_Grid_XYZW[ 13][1]=-0.577350269189626; | |
Leb_Grid_XYZW[ 13][2]=-0.577350269189626; | |
Leb_Grid_XYZW[ 13][3]= 0.001852379698597; | |
Leb_Grid_XYZW[ 14][0]= 0.704095493822747; | |
Leb_Grid_XYZW[ 14][1]= 0.704095493822747; | |
Leb_Grid_XYZW[ 14][2]= 0.092190407076898; | |
Leb_Grid_XYZW[ 14][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 15][0]=-0.704095493822747; | |
Leb_Grid_XYZW[ 15][1]= 0.704095493822747; | |
Leb_Grid_XYZW[ 15][2]= 0.092190407076898; | |
Leb_Grid_XYZW[ 15][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 16][0]= 0.704095493822747; | |
Leb_Grid_XYZW[ 16][1]=-0.704095493822747; | |
Leb_Grid_XYZW[ 16][2]= 0.092190407076898; | |
Leb_Grid_XYZW[ 16][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 17][0]=-0.704095493822747; | |
Leb_Grid_XYZW[ 17][1]=-0.704095493822747; | |
Leb_Grid_XYZW[ 17][2]= 0.092190407076898; | |
Leb_Grid_XYZW[ 17][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 18][0]= 0.704095493822747; | |
Leb_Grid_XYZW[ 18][1]= 0.704095493822747; | |
Leb_Grid_XYZW[ 18][2]=-0.092190407076898; | |
Leb_Grid_XYZW[ 18][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 19][0]=-0.704095493822747; | |
Leb_Grid_XYZW[ 19][1]= 0.704095493822747; | |
Leb_Grid_XYZW[ 19][2]=-0.092190407076898; | |
Leb_Grid_XYZW[ 19][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 20][0]= 0.704095493822747; | |
Leb_Grid_XYZW[ 20][1]=-0.704095493822747; | |
Leb_Grid_XYZW[ 20][2]=-0.092190407076898; | |
Leb_Grid_XYZW[ 20][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 21][0]=-0.704095493822747; | |
Leb_Grid_XYZW[ 21][1]=-0.704095493822747; | |
Leb_Grid_XYZW[ 21][2]=-0.092190407076898; | |
Leb_Grid_XYZW[ 21][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 22][0]= 0.704095493822747; | |
Leb_Grid_XYZW[ 22][1]= 0.092190407076898; | |
Leb_Grid_XYZW[ 22][2]= 0.704095493822747; | |
Leb_Grid_XYZW[ 22][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 23][0]=-0.704095493822747; | |
Leb_Grid_XYZW[ 23][1]= 0.092190407076898; | |
Leb_Grid_XYZW[ 23][2]= 0.704095493822747; | |
Leb_Grid_XYZW[ 23][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 24][0]= 0.704095493822747; | |
Leb_Grid_XYZW[ 24][1]=-0.092190407076898; | |
Leb_Grid_XYZW[ 24][2]= 0.704095493822747; | |
Leb_Grid_XYZW[ 24][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 25][0]=-0.704095493822747; | |
Leb_Grid_XYZW[ 25][1]=-0.092190407076898; | |
Leb_Grid_XYZW[ 25][2]= 0.704095493822747; | |
Leb_Grid_XYZW[ 25][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 26][0]= 0.704095493822747; | |
Leb_Grid_XYZW[ 26][1]= 0.092190407076898; | |
Leb_Grid_XYZW[ 26][2]=-0.704095493822747; | |
Leb_Grid_XYZW[ 26][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 27][0]=-0.704095493822747; | |
Leb_Grid_XYZW[ 27][1]= 0.092190407076898; | |
Leb_Grid_XYZW[ 27][2]=-0.704095493822747; | |
Leb_Grid_XYZW[ 27][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 28][0]= 0.704095493822747; | |
Leb_Grid_XYZW[ 28][1]=-0.092190407076898; | |
Leb_Grid_XYZW[ 28][2]=-0.704095493822747; | |
Leb_Grid_XYZW[ 28][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 29][0]=-0.704095493822747; | |
Leb_Grid_XYZW[ 29][1]=-0.092190407076898; | |
Leb_Grid_XYZW[ 29][2]=-0.704095493822747; | |
Leb_Grid_XYZW[ 29][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 30][0]= 0.092190407076898; | |
Leb_Grid_XYZW[ 30][1]= 0.704095493822747; | |
Leb_Grid_XYZW[ 30][2]= 0.704095493822747; | |
Leb_Grid_XYZW[ 30][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 31][0]=-0.092190407076898; | |
Leb_Grid_XYZW[ 31][1]= 0.704095493822747; | |
Leb_Grid_XYZW[ 31][2]= 0.704095493822747; | |
Leb_Grid_XYZW[ 31][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 32][0]= 0.092190407076898; | |
Leb_Grid_XYZW[ 32][1]=-0.704095493822747; | |
Leb_Grid_XYZW[ 32][2]= 0.704095493822747; | |
Leb_Grid_XYZW[ 32][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 33][0]=-0.092190407076898; | |
Leb_Grid_XYZW[ 33][1]=-0.704095493822747; | |
Leb_Grid_XYZW[ 33][2]= 0.704095493822747; | |
Leb_Grid_XYZW[ 33][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 34][0]= 0.092190407076898; | |
Leb_Grid_XYZW[ 34][1]= 0.704095493822747; | |
Leb_Grid_XYZW[ 34][2]=-0.704095493822747; | |
Leb_Grid_XYZW[ 34][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 35][0]=-0.092190407076898; | |
Leb_Grid_XYZW[ 35][1]= 0.704095493822747; | |
Leb_Grid_XYZW[ 35][2]=-0.704095493822747; | |
Leb_Grid_XYZW[ 35][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 36][0]= 0.092190407076898; | |
Leb_Grid_XYZW[ 36][1]=-0.704095493822747; | |
Leb_Grid_XYZW[ 36][2]=-0.704095493822747; | |
Leb_Grid_XYZW[ 36][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 37][0]=-0.092190407076898; | |
Leb_Grid_XYZW[ 37][1]=-0.704095493822747; | |
Leb_Grid_XYZW[ 37][2]=-0.704095493822747; | |
Leb_Grid_XYZW[ 37][3]= 0.001871790639278; | |
Leb_Grid_XYZW[ 38][0]= 0.680774406645524; | |
Leb_Grid_XYZW[ 38][1]= 0.680774406645524; | |
Leb_Grid_XYZW[ 38][2]= 0.270356088359165; | |
Leb_Grid_XYZW[ 38][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 39][0]=-0.680774406645524; | |
Leb_Grid_XYZW[ 39][1]= 0.680774406645524; | |
Leb_Grid_XYZW[ 39][2]= 0.270356088359165; | |
Leb_Grid_XYZW[ 39][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 40][0]= 0.680774406645524; | |
Leb_Grid_XYZW[ 40][1]=-0.680774406645524; | |
Leb_Grid_XYZW[ 40][2]= 0.270356088359165; | |
Leb_Grid_XYZW[ 40][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 41][0]=-0.680774406645524; | |
Leb_Grid_XYZW[ 41][1]=-0.680774406645524; | |
Leb_Grid_XYZW[ 41][2]= 0.270356088359165; | |
Leb_Grid_XYZW[ 41][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 42][0]= 0.680774406645524; | |
Leb_Grid_XYZW[ 42][1]= 0.680774406645524; | |
Leb_Grid_XYZW[ 42][2]=-0.270356088359165; | |
Leb_Grid_XYZW[ 42][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 43][0]=-0.680774406645524; | |
Leb_Grid_XYZW[ 43][1]= 0.680774406645524; | |
Leb_Grid_XYZW[ 43][2]=-0.270356088359165; | |
Leb_Grid_XYZW[ 43][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 44][0]= 0.680774406645524; | |
Leb_Grid_XYZW[ 44][1]=-0.680774406645524; | |
Leb_Grid_XYZW[ 44][2]=-0.270356088359165; | |
Leb_Grid_XYZW[ 44][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 45][0]=-0.680774406645524; | |
Leb_Grid_XYZW[ 45][1]=-0.680774406645524; | |
Leb_Grid_XYZW[ 45][2]=-0.270356088359165; | |
Leb_Grid_XYZW[ 45][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 46][0]= 0.680774406645524; | |
Leb_Grid_XYZW[ 46][1]= 0.270356088359165; | |
Leb_Grid_XYZW[ 46][2]= 0.680774406645524; | |
Leb_Grid_XYZW[ 46][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 47][0]=-0.680774406645524; | |
Leb_Grid_XYZW[ 47][1]= 0.270356088359165; | |
Leb_Grid_XYZW[ 47][2]= 0.680774406645524; | |
Leb_Grid_XYZW[ 47][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 48][0]= 0.680774406645524; | |
Leb_Grid_XYZW[ 48][1]=-0.270356088359165; | |
Leb_Grid_XYZW[ 48][2]= 0.680774406645524; | |
Leb_Grid_XYZW[ 48][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 49][0]=-0.680774406645524; | |
Leb_Grid_XYZW[ 49][1]=-0.270356088359165; | |
Leb_Grid_XYZW[ 49][2]= 0.680774406645524; | |
Leb_Grid_XYZW[ 49][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 50][0]= 0.680774406645524; | |
Leb_Grid_XYZW[ 50][1]= 0.270356088359165; | |
Leb_Grid_XYZW[ 50][2]=-0.680774406645524; | |
Leb_Grid_XYZW[ 50][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 51][0]=-0.680774406645524; | |
Leb_Grid_XYZW[ 51][1]= 0.270356088359165; | |
Leb_Grid_XYZW[ 51][2]=-0.680774406645524; | |
Leb_Grid_XYZW[ 51][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 52][0]= 0.680774406645524; | |
Leb_Grid_XYZW[ 52][1]=-0.270356088359165; | |
Leb_Grid_XYZW[ 52][2]=-0.680774406645524; | |
Leb_Grid_XYZW[ 52][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 53][0]=-0.680774406645524; | |
Leb_Grid_XYZW[ 53][1]=-0.270356088359165; | |
Leb_Grid_XYZW[ 53][2]=-0.680774406645524; | |
Leb_Grid_XYZW[ 53][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 54][0]= 0.270356088359165; | |
Leb_Grid_XYZW[ 54][1]= 0.680774406645524; | |
Leb_Grid_XYZW[ 54][2]= 0.680774406645524; | |
Leb_Grid_XYZW[ 54][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 55][0]=-0.270356088359165; | |
Leb_Grid_XYZW[ 55][1]= 0.680774406645524; | |
Leb_Grid_XYZW[ 55][2]= 0.680774406645524; | |
Leb_Grid_XYZW[ 55][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 56][0]= 0.270356088359165; | |
Leb_Grid_XYZW[ 56][1]=-0.680774406645524; | |
Leb_Grid_XYZW[ 56][2]= 0.680774406645524; | |
Leb_Grid_XYZW[ 56][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 57][0]=-0.270356088359165; | |
Leb_Grid_XYZW[ 57][1]=-0.680774406645524; | |
Leb_Grid_XYZW[ 57][2]= 0.680774406645524; | |
Leb_Grid_XYZW[ 57][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 58][0]= 0.270356088359165; | |
Leb_Grid_XYZW[ 58][1]= 0.680774406645524; | |
Leb_Grid_XYZW[ 58][2]=-0.680774406645524; | |
Leb_Grid_XYZW[ 58][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 59][0]=-0.270356088359165; | |
Leb_Grid_XYZW[ 59][1]= 0.680774406645524; | |
Leb_Grid_XYZW[ 59][2]=-0.680774406645524; | |
Leb_Grid_XYZW[ 59][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 60][0]= 0.270356088359165; | |
Leb_Grid_XYZW[ 60][1]=-0.680774406645524; | |
Leb_Grid_XYZW[ 60][2]=-0.680774406645524; | |
Leb_Grid_XYZW[ 60][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 61][0]=-0.270356088359165; | |
Leb_Grid_XYZW[ 61][1]=-0.680774406645524; | |
Leb_Grid_XYZW[ 61][2]=-0.680774406645524; | |
Leb_Grid_XYZW[ 61][3]= 0.001858812585438; | |
Leb_Grid_XYZW[ 62][0]= 0.637254693925875; | |
Leb_Grid_XYZW[ 62][1]= 0.637254693925875; | |
Leb_Grid_XYZW[ 62][2]= 0.433373868777154; | |
Leb_Grid_XYZW[ 62][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 63][0]=-0.637254693925875; | |
Leb_Grid_XYZW[ 63][1]= 0.637254693925875; | |
Leb_Grid_XYZW[ 63][2]= 0.433373868777154; | |
Leb_Grid_XYZW[ 63][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 64][0]= 0.637254693925875; | |
Leb_Grid_XYZW[ 64][1]=-0.637254693925875; | |
Leb_Grid_XYZW[ 64][2]= 0.433373868777154; | |
Leb_Grid_XYZW[ 64][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 65][0]=-0.637254693925875; | |
Leb_Grid_XYZW[ 65][1]=-0.637254693925875; | |
Leb_Grid_XYZW[ 65][2]= 0.433373868777154; | |
Leb_Grid_XYZW[ 65][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 66][0]= 0.637254693925875; | |
Leb_Grid_XYZW[ 66][1]= 0.637254693925875; | |
Leb_Grid_XYZW[ 66][2]=-0.433373868777154; | |
Leb_Grid_XYZW[ 66][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 67][0]=-0.637254693925875; | |
Leb_Grid_XYZW[ 67][1]= 0.637254693925875; | |
Leb_Grid_XYZW[ 67][2]=-0.433373868777154; | |
Leb_Grid_XYZW[ 67][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 68][0]= 0.637254693925875; | |
Leb_Grid_XYZW[ 68][1]=-0.637254693925875; | |
Leb_Grid_XYZW[ 68][2]=-0.433373868777154; | |
Leb_Grid_XYZW[ 68][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 69][0]=-0.637254693925875; | |
Leb_Grid_XYZW[ 69][1]=-0.637254693925875; | |
Leb_Grid_XYZW[ 69][2]=-0.433373868777154; | |
Leb_Grid_XYZW[ 69][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 70][0]= 0.637254693925875; | |
Leb_Grid_XYZW[ 70][1]= 0.433373868777154; | |
Leb_Grid_XYZW[ 70][2]= 0.637254693925875; | |
Leb_Grid_XYZW[ 70][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 71][0]=-0.637254693925875; | |
Leb_Grid_XYZW[ 71][1]= 0.433373868777154; | |
Leb_Grid_XYZW[ 71][2]= 0.637254693925875; | |
Leb_Grid_XYZW[ 71][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 72][0]= 0.637254693925875; | |
Leb_Grid_XYZW[ 72][1]=-0.433373868777154; | |
Leb_Grid_XYZW[ 72][2]= 0.637254693925875; | |
Leb_Grid_XYZW[ 72][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 73][0]=-0.637254693925875; | |
Leb_Grid_XYZW[ 73][1]=-0.433373868777154; | |
Leb_Grid_XYZW[ 73][2]= 0.637254693925875; | |
Leb_Grid_XYZW[ 73][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 74][0]= 0.637254693925875; | |
Leb_Grid_XYZW[ 74][1]= 0.433373868777154; | |
Leb_Grid_XYZW[ 74][2]=-0.637254693925875; | |
Leb_Grid_XYZW[ 74][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 75][0]=-0.637254693925875; | |
Leb_Grid_XYZW[ 75][1]= 0.433373868777154; | |
Leb_Grid_XYZW[ 75][2]=-0.637254693925875; | |
Leb_Grid_XYZW[ 75][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 76][0]= 0.637254693925875; | |
Leb_Grid_XYZW[ 76][1]=-0.433373868777154; | |
Leb_Grid_XYZW[ 76][2]=-0.637254693925875; | |
Leb_Grid_XYZW[ 76][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 77][0]=-0.637254693925875; | |
Leb_Grid_XYZW[ 77][1]=-0.433373868777154; | |
Leb_Grid_XYZW[ 77][2]=-0.637254693925875; | |
Leb_Grid_XYZW[ 77][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 78][0]= 0.433373868777154; | |
Leb_Grid_XYZW[ 78][1]= 0.637254693925875; | |
Leb_Grid_XYZW[ 78][2]= 0.637254693925875; | |
Leb_Grid_XYZW[ 78][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 79][0]=-0.433373868777154; | |
Leb_Grid_XYZW[ 79][1]= 0.637254693925875; | |
Leb_Grid_XYZW[ 79][2]= 0.637254693925875; | |
Leb_Grid_XYZW[ 79][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 80][0]= 0.433373868777154; | |
Leb_Grid_XYZW[ 80][1]=-0.637254693925875; | |
Leb_Grid_XYZW[ 80][2]= 0.637254693925875; | |
Leb_Grid_XYZW[ 80][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 81][0]=-0.433373868777154; | |
Leb_Grid_XYZW[ 81][1]=-0.637254693925875; | |
Leb_Grid_XYZW[ 81][2]= 0.637254693925875; | |
Leb_Grid_XYZW[ 81][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 82][0]= 0.433373868777154; | |
Leb_Grid_XYZW[ 82][1]= 0.637254693925875; | |
Leb_Grid_XYZW[ 82][2]=-0.637254693925875; | |
Leb_Grid_XYZW[ 82][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 83][0]=-0.433373868777154; | |
Leb_Grid_XYZW[ 83][1]= 0.637254693925875; | |
Leb_Grid_XYZW[ 83][2]=-0.637254693925875; | |
Leb_Grid_XYZW[ 83][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 84][0]= 0.433373868777154; | |
Leb_Grid_XYZW[ 84][1]=-0.637254693925875; | |
Leb_Grid_XYZW[ 84][2]=-0.637254693925875; | |
Leb_Grid_XYZW[ 84][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 85][0]=-0.433373868777154; | |
Leb_Grid_XYZW[ 85][1]=-0.637254693925875; | |
Leb_Grid_XYZW[ 85][2]=-0.637254693925875; | |
Leb_Grid_XYZW[ 85][3]= 0.001852028828296; | |
Leb_Grid_XYZW[ 86][0]= 0.504441970780036; | |
Leb_Grid_XYZW[ 86][1]= 0.504441970780036; | |
Leb_Grid_XYZW[ 86][2]= 0.700768575373573; | |
Leb_Grid_XYZW[ 86][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 87][0]=-0.504441970780036; | |
Leb_Grid_XYZW[ 87][1]= 0.504441970780036; | |
Leb_Grid_XYZW[ 87][2]= 0.700768575373573; | |
Leb_Grid_XYZW[ 87][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 88][0]= 0.504441970780036; | |
Leb_Grid_XYZW[ 88][1]=-0.504441970780036; | |
Leb_Grid_XYZW[ 88][2]= 0.700768575373573; | |
Leb_Grid_XYZW[ 88][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 89][0]=-0.504441970780036; | |
Leb_Grid_XYZW[ 89][1]=-0.504441970780036; | |
Leb_Grid_XYZW[ 89][2]= 0.700768575373573; | |
Leb_Grid_XYZW[ 89][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 90][0]= 0.504441970780036; | |
Leb_Grid_XYZW[ 90][1]= 0.504441970780036; | |
Leb_Grid_XYZW[ 90][2]=-0.700768575373573; | |
Leb_Grid_XYZW[ 90][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 91][0]=-0.504441970780036; | |
Leb_Grid_XYZW[ 91][1]= 0.504441970780036; | |
Leb_Grid_XYZW[ 91][2]=-0.700768575373573; | |
Leb_Grid_XYZW[ 91][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 92][0]= 0.504441970780036; | |
Leb_Grid_XYZW[ 92][1]=-0.504441970780036; | |
Leb_Grid_XYZW[ 92][2]=-0.700768575373573; | |
Leb_Grid_XYZW[ 92][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 93][0]=-0.504441970780036; | |
Leb_Grid_XYZW[ 93][1]=-0.504441970780036; | |
Leb_Grid_XYZW[ 93][2]=-0.700768575373573; | |
Leb_Grid_XYZW[ 93][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 94][0]= 0.504441970780036; | |
Leb_Grid_XYZW[ 94][1]= 0.700768575373573; | |
Leb_Grid_XYZW[ 94][2]= 0.504441970780036; | |
Leb_Grid_XYZW[ 94][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 95][0]=-0.504441970780036; | |
Leb_Grid_XYZW[ 95][1]= 0.700768575373573; | |
Leb_Grid_XYZW[ 95][2]= 0.504441970780036; | |
Leb_Grid_XYZW[ 95][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 96][0]= 0.504441970780036; | |
Leb_Grid_XYZW[ 96][1]=-0.700768575373573; | |
Leb_Grid_XYZW[ 96][2]= 0.504441970780036; | |
Leb_Grid_XYZW[ 96][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 97][0]=-0.504441970780036; | |
Leb_Grid_XYZW[ 97][1]=-0.700768575373573; | |
Leb_Grid_XYZW[ 97][2]= 0.504441970780036; | |
Leb_Grid_XYZW[ 97][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 98][0]= 0.504441970780036; | |
Leb_Grid_XYZW[ 98][1]= 0.700768575373573; | |
Leb_Grid_XYZW[ 98][2]=-0.504441970780036; | |
Leb_Grid_XYZW[ 98][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 99][0]=-0.504441970780036; | |
Leb_Grid_XYZW[ 99][1]= 0.700768575373573; | |
Leb_Grid_XYZW[ 99][2]=-0.504441970780036; | |
Leb_Grid_XYZW[ 99][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 100][0]= 0.504441970780036; | |
Leb_Grid_XYZW[ 100][1]=-0.700768575373573; | |
Leb_Grid_XYZW[ 100][2]=-0.504441970780036; | |
Leb_Grid_XYZW[ 100][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 101][0]=-0.504441970780036; | |
Leb_Grid_XYZW[ 101][1]=-0.700768575373573; | |
Leb_Grid_XYZW[ 101][2]=-0.504441970780036; | |
Leb_Grid_XYZW[ 101][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 102][0]= 0.700768575373573; | |
Leb_Grid_XYZW[ 102][1]= 0.504441970780036; | |
Leb_Grid_XYZW[ 102][2]= 0.504441970780036; | |
Leb_Grid_XYZW[ 102][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 103][0]=-0.700768575373573; | |
Leb_Grid_XYZW[ 103][1]= 0.504441970780036; | |
Leb_Grid_XYZW[ 103][2]= 0.504441970780036; | |
Leb_Grid_XYZW[ 103][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 104][0]= 0.700768575373573; | |
Leb_Grid_XYZW[ 104][1]=-0.504441970780036; | |
Leb_Grid_XYZW[ 104][2]= 0.504441970780036; | |
Leb_Grid_XYZW[ 104][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 105][0]=-0.700768575373573; | |
Leb_Grid_XYZW[ 105][1]=-0.504441970780036; | |
Leb_Grid_XYZW[ 105][2]= 0.504441970780036; | |
Leb_Grid_XYZW[ 105][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 106][0]= 0.700768575373573; | |
Leb_Grid_XYZW[ 106][1]= 0.504441970780036; | |
Leb_Grid_XYZW[ 106][2]=-0.504441970780036; | |
Leb_Grid_XYZW[ 106][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 107][0]=-0.700768575373573; | |
Leb_Grid_XYZW[ 107][1]= 0.504441970780036; | |
Leb_Grid_XYZW[ 107][2]=-0.504441970780036; | |
Leb_Grid_XYZW[ 107][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 108][0]= 0.700768575373573; | |
Leb_Grid_XYZW[ 108][1]=-0.504441970780036; | |
Leb_Grid_XYZW[ 108][2]=-0.504441970780036; | |
Leb_Grid_XYZW[ 108][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 109][0]=-0.700768575373573; | |
Leb_Grid_XYZW[ 109][1]=-0.504441970780036; | |
Leb_Grid_XYZW[ 109][2]=-0.504441970780036; | |
Leb_Grid_XYZW[ 109][3]= 0.001846715956151; | |
Leb_Grid_XYZW[ 110][0]= 0.421576178401097; | |
Leb_Grid_XYZW[ 110][1]= 0.421576178401097; | |
Leb_Grid_XYZW[ 110][2]= 0.802836877335274; | |
Leb_Grid_XYZW[ 110][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 111][0]=-0.421576178401097; | |
Leb_Grid_XYZW[ 111][1]= 0.421576178401097; | |
Leb_Grid_XYZW[ 111][2]= 0.802836877335274; | |
Leb_Grid_XYZW[ 111][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 112][0]= 0.421576178401097; | |
Leb_Grid_XYZW[ 112][1]=-0.421576178401097; | |
Leb_Grid_XYZW[ 112][2]= 0.802836877335274; | |
Leb_Grid_XYZW[ 112][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 113][0]=-0.421576178401097; | |
Leb_Grid_XYZW[ 113][1]=-0.421576178401097; | |
Leb_Grid_XYZW[ 113][2]= 0.802836877335274; | |
Leb_Grid_XYZW[ 113][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 114][0]= 0.421576178401097; | |
Leb_Grid_XYZW[ 114][1]= 0.421576178401097; | |
Leb_Grid_XYZW[ 114][2]=-0.802836877335274; | |
Leb_Grid_XYZW[ 114][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 115][0]=-0.421576178401097; | |
Leb_Grid_XYZW[ 115][1]= 0.421576178401097; | |
Leb_Grid_XYZW[ 115][2]=-0.802836877335274; | |
Leb_Grid_XYZW[ 115][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 116][0]= 0.421576178401097; | |
Leb_Grid_XYZW[ 116][1]=-0.421576178401097; | |
Leb_Grid_XYZW[ 116][2]=-0.802836877335274; | |
Leb_Grid_XYZW[ 116][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 117][0]=-0.421576178401097; | |
Leb_Grid_XYZW[ 117][1]=-0.421576178401097; | |
Leb_Grid_XYZW[ 117][2]=-0.802836877335274; | |
Leb_Grid_XYZW[ 117][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 118][0]= 0.421576178401097; | |
Leb_Grid_XYZW[ 118][1]= 0.802836877335274; | |
Leb_Grid_XYZW[ 118][2]= 0.421576178401097; | |
Leb_Grid_XYZW[ 118][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 119][0]=-0.421576178401097; | |
Leb_Grid_XYZW[ 119][1]= 0.802836877335274; | |
Leb_Grid_XYZW[ 119][2]= 0.421576178401097; | |
Leb_Grid_XYZW[ 119][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 120][0]= 0.421576178401097; | |
Leb_Grid_XYZW[ 120][1]=-0.802836877335274; | |
Leb_Grid_XYZW[ 120][2]= 0.421576178401097; | |
Leb_Grid_XYZW[ 120][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 121][0]=-0.421576178401097; | |
Leb_Grid_XYZW[ 121][1]=-0.802836877335274; | |
Leb_Grid_XYZW[ 121][2]= 0.421576178401097; | |
Leb_Grid_XYZW[ 121][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 122][0]= 0.421576178401097; | |
Leb_Grid_XYZW[ 122][1]= 0.802836877335274; | |
Leb_Grid_XYZW[ 122][2]=-0.421576178401097; | |
Leb_Grid_XYZW[ 122][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 123][0]=-0.421576178401097; | |
Leb_Grid_XYZW[ 123][1]= 0.802836877335274; | |
Leb_Grid_XYZW[ 123][2]=-0.421576178401097; | |
Leb_Grid_XYZW[ 123][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 124][0]= 0.421576178401097; | |
Leb_Grid_XYZW[ 124][1]=-0.802836877335274; | |
Leb_Grid_XYZW[ 124][2]=-0.421576178401097; | |
Leb_Grid_XYZW[ 124][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 125][0]=-0.421576178401097; | |
Leb_Grid_XYZW[ 125][1]=-0.802836877335274; | |
Leb_Grid_XYZW[ 125][2]=-0.421576178401097; | |
Leb_Grid_XYZW[ 125][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 126][0]= 0.802836877335274; | |
Leb_Grid_XYZW[ 126][1]= 0.421576178401097; | |
Leb_Grid_XYZW[ 126][2]= 0.421576178401097; | |
Leb_Grid_XYZW[ 126][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 127][0]=-0.802836877335274; | |
Leb_Grid_XYZW[ 127][1]= 0.421576178401097; | |
Leb_Grid_XYZW[ 127][2]= 0.421576178401097; | |
Leb_Grid_XYZW[ 127][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 128][0]= 0.802836877335274; | |
Leb_Grid_XYZW[ 128][1]=-0.421576178401097; | |
Leb_Grid_XYZW[ 128][2]= 0.421576178401097; | |
Leb_Grid_XYZW[ 128][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 129][0]=-0.802836877335274; | |
Leb_Grid_XYZW[ 129][1]=-0.421576178401097; | |
Leb_Grid_XYZW[ 129][2]= 0.421576178401097; | |
Leb_Grid_XYZW[ 129][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 130][0]= 0.802836877335274; | |
Leb_Grid_XYZW[ 130][1]= 0.421576178401097; | |
Leb_Grid_XYZW[ 130][2]=-0.421576178401097; | |
Leb_Grid_XYZW[ 130][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 131][0]=-0.802836877335274; | |
Leb_Grid_XYZW[ 131][1]= 0.421576178401097; | |
Leb_Grid_XYZW[ 131][2]=-0.421576178401097; | |
Leb_Grid_XYZW[ 131][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 132][0]= 0.802836877335274; | |
Leb_Grid_XYZW[ 132][1]=-0.421576178401097; | |
Leb_Grid_XYZW[ 132][2]=-0.421576178401097; | |
Leb_Grid_XYZW[ 132][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 133][0]=-0.802836877335274; | |
Leb_Grid_XYZW[ 133][1]=-0.421576178401097; | |
Leb_Grid_XYZW[ 133][2]=-0.421576178401097; | |
Leb_Grid_XYZW[ 133][3]= 0.001818471778163; | |
Leb_Grid_XYZW[ 134][0]= 0.331792073647212; | |
Leb_Grid_XYZW[ 134][1]= 0.331792073647212; | |
Leb_Grid_XYZW[ 134][2]= 0.883078727934133; | |
Leb_Grid_XYZW[ 134][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 135][0]=-0.331792073647212; | |
Leb_Grid_XYZW[ 135][1]= 0.331792073647212; | |
Leb_Grid_XYZW[ 135][2]= 0.883078727934133; | |
Leb_Grid_XYZW[ 135][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 136][0]= 0.331792073647212; | |
Leb_Grid_XYZW[ 136][1]=-0.331792073647212; | |
Leb_Grid_XYZW[ 136][2]= 0.883078727934133; | |
Leb_Grid_XYZW[ 136][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 137][0]=-0.331792073647212; | |
Leb_Grid_XYZW[ 137][1]=-0.331792073647212; | |
Leb_Grid_XYZW[ 137][2]= 0.883078727934133; | |
Leb_Grid_XYZW[ 137][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 138][0]= 0.331792073647212; | |
Leb_Grid_XYZW[ 138][1]= 0.331792073647212; | |
Leb_Grid_XYZW[ 138][2]=-0.883078727934133; | |
Leb_Grid_XYZW[ 138][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 139][0]=-0.331792073647212; | |
Leb_Grid_XYZW[ 139][1]= 0.331792073647212; | |
Leb_Grid_XYZW[ 139][2]=-0.883078727934133; | |
Leb_Grid_XYZW[ 139][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 140][0]= 0.331792073647212; | |
Leb_Grid_XYZW[ 140][1]=-0.331792073647212; | |
Leb_Grid_XYZW[ 140][2]=-0.883078727934133; | |
Leb_Grid_XYZW[ 140][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 141][0]=-0.331792073647212; | |
Leb_Grid_XYZW[ 141][1]=-0.331792073647212; | |
Leb_Grid_XYZW[ 141][2]=-0.883078727934133; | |
Leb_Grid_XYZW[ 141][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 142][0]= 0.331792073647212; | |
Leb_Grid_XYZW[ 142][1]= 0.883078727934133; | |
Leb_Grid_XYZW[ 142][2]= 0.331792073647212; | |
Leb_Grid_XYZW[ 142][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 143][0]=-0.331792073647212; | |
Leb_Grid_XYZW[ 143][1]= 0.883078727934133; | |
Leb_Grid_XYZW[ 143][2]= 0.331792073647212; | |
Leb_Grid_XYZW[ 143][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 144][0]= 0.331792073647212; | |
Leb_Grid_XYZW[ 144][1]=-0.883078727934133; | |
Leb_Grid_XYZW[ 144][2]= 0.331792073647212; | |
Leb_Grid_XYZW[ 144][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 145][0]=-0.331792073647212; | |
Leb_Grid_XYZW[ 145][1]=-0.883078727934133; | |
Leb_Grid_XYZW[ 145][2]= 0.331792073647212; | |
Leb_Grid_XYZW[ 145][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 146][0]= 0.331792073647212; | |
Leb_Grid_XYZW[ 146][1]= 0.883078727934133; | |
Leb_Grid_XYZW[ 146][2]=-0.331792073647212; | |
Leb_Grid_XYZW[ 146][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 147][0]=-0.331792073647212; | |
Leb_Grid_XYZW[ 147][1]= 0.883078727934133; | |
Leb_Grid_XYZW[ 147][2]=-0.331792073647212; | |
Leb_Grid_XYZW[ 147][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 148][0]= 0.331792073647212; | |
Leb_Grid_XYZW[ 148][1]=-0.883078727934133; | |
Leb_Grid_XYZW[ 148][2]=-0.331792073647212; | |
Leb_Grid_XYZW[ 148][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 149][0]=-0.331792073647212; | |
Leb_Grid_XYZW[ 149][1]=-0.883078727934133; | |
Leb_Grid_XYZW[ 149][2]=-0.331792073647212; | |
Leb_Grid_XYZW[ 149][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 150][0]= 0.883078727934133; | |
Leb_Grid_XYZW[ 150][1]= 0.331792073647212; | |
Leb_Grid_XYZW[ 150][2]= 0.331792073647212; | |
Leb_Grid_XYZW[ 150][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 151][0]=-0.883078727934133; | |
Leb_Grid_XYZW[ 151][1]= 0.331792073647212; | |
Leb_Grid_XYZW[ 151][2]= 0.331792073647212; | |
Leb_Grid_XYZW[ 151][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 152][0]= 0.883078727934133; | |
Leb_Grid_XYZW[ 152][1]=-0.331792073647212; | |
Leb_Grid_XYZW[ 152][2]= 0.331792073647212; | |
Leb_Grid_XYZW[ 152][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 153][0]=-0.883078727934133; | |
Leb_Grid_XYZW[ 153][1]=-0.331792073647212; | |
Leb_Grid_XYZW[ 153][2]= 0.331792073647212; | |
Leb_Grid_XYZW[ 153][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 154][0]= 0.883078727934133; | |
Leb_Grid_XYZW[ 154][1]= 0.331792073647212; | |
Leb_Grid_XYZW[ 154][2]=-0.331792073647212; | |
Leb_Grid_XYZW[ 154][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 155][0]=-0.883078727934133; | |
Leb_Grid_XYZW[ 155][1]= 0.331792073647212; | |
Leb_Grid_XYZW[ 155][2]=-0.331792073647212; | |
Leb_Grid_XYZW[ 155][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 156][0]= 0.883078727934133; | |
Leb_Grid_XYZW[ 156][1]=-0.331792073647212; | |
Leb_Grid_XYZW[ 156][2]=-0.331792073647212; | |
Leb_Grid_XYZW[ 156][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 157][0]=-0.883078727934133; | |
Leb_Grid_XYZW[ 157][1]=-0.331792073647212; | |
Leb_Grid_XYZW[ 157][2]=-0.331792073647212; | |
Leb_Grid_XYZW[ 157][3]= 0.001749564657281; | |
Leb_Grid_XYZW[ 158][0]= 0.238473670142189; | |
Leb_Grid_XYZW[ 158][1]= 0.238473670142189; | |
Leb_Grid_XYZW[ 158][2]= 0.941414158220403; | |
Leb_Grid_XYZW[ 158][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 159][0]=-0.238473670142189; | |
Leb_Grid_XYZW[ 159][1]= 0.238473670142189; | |
Leb_Grid_XYZW[ 159][2]= 0.941414158220403; | |
Leb_Grid_XYZW[ 159][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 160][0]= 0.238473670142189; | |
Leb_Grid_XYZW[ 160][1]=-0.238473670142189; | |
Leb_Grid_XYZW[ 160][2]= 0.941414158220403; | |
Leb_Grid_XYZW[ 160][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 161][0]=-0.238473670142189; | |
Leb_Grid_XYZW[ 161][1]=-0.238473670142189; | |
Leb_Grid_XYZW[ 161][2]= 0.941414158220403; | |
Leb_Grid_XYZW[ 161][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 162][0]= 0.238473670142189; | |
Leb_Grid_XYZW[ 162][1]= 0.238473670142189; | |
Leb_Grid_XYZW[ 162][2]=-0.941414158220403; | |
Leb_Grid_XYZW[ 162][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 163][0]=-0.238473670142189; | |
Leb_Grid_XYZW[ 163][1]= 0.238473670142189; | |
Leb_Grid_XYZW[ 163][2]=-0.941414158220403; | |
Leb_Grid_XYZW[ 163][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 164][0]= 0.238473670142189; | |
Leb_Grid_XYZW[ 164][1]=-0.238473670142189; | |
Leb_Grid_XYZW[ 164][2]=-0.941414158220403; | |
Leb_Grid_XYZW[ 164][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 165][0]=-0.238473670142189; | |
Leb_Grid_XYZW[ 165][1]=-0.238473670142189; | |
Leb_Grid_XYZW[ 165][2]=-0.941414158220403; | |
Leb_Grid_XYZW[ 165][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 166][0]= 0.238473670142189; | |
Leb_Grid_XYZW[ 166][1]= 0.941414158220403; | |
Leb_Grid_XYZW[ 166][2]= 0.238473670142189; | |
Leb_Grid_XYZW[ 166][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 167][0]=-0.238473670142189; | |
Leb_Grid_XYZW[ 167][1]= 0.941414158220403; | |
Leb_Grid_XYZW[ 167][2]= 0.238473670142189; | |
Leb_Grid_XYZW[ 167][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 168][0]= 0.238473670142189; | |
Leb_Grid_XYZW[ 168][1]=-0.941414158220403; | |
Leb_Grid_XYZW[ 168][2]= 0.238473670142189; | |
Leb_Grid_XYZW[ 168][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 169][0]=-0.238473670142189; | |
Leb_Grid_XYZW[ 169][1]=-0.941414158220403; | |
Leb_Grid_XYZW[ 169][2]= 0.238473670142189; | |
Leb_Grid_XYZW[ 169][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 170][0]= 0.238473670142189; | |
Leb_Grid_XYZW[ 170][1]= 0.941414158220403; | |
Leb_Grid_XYZW[ 170][2]=-0.238473670142189; | |
Leb_Grid_XYZW[ 170][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 171][0]=-0.238473670142189; | |
Leb_Grid_XYZW[ 171][1]= 0.941414158220403; | |
Leb_Grid_XYZW[ 171][2]=-0.238473670142189; | |
Leb_Grid_XYZW[ 171][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 172][0]= 0.238473670142189; | |
Leb_Grid_XYZW[ 172][1]=-0.941414158220403; | |
Leb_Grid_XYZW[ 172][2]=-0.238473670142189; | |
Leb_Grid_XYZW[ 172][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 173][0]=-0.238473670142189; | |
Leb_Grid_XYZW[ 173][1]=-0.941414158220403; | |
Leb_Grid_XYZW[ 173][2]=-0.238473670142189; | |
Leb_Grid_XYZW[ 173][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 174][0]= 0.941414158220403; | |
Leb_Grid_XYZW[ 174][1]= 0.238473670142189; | |
Leb_Grid_XYZW[ 174][2]= 0.238473670142189; | |
Leb_Grid_XYZW[ 174][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 175][0]=-0.941414158220403; | |
Leb_Grid_XYZW[ 175][1]= 0.238473670142189; | |
Leb_Grid_XYZW[ 175][2]= 0.238473670142189; | |
Leb_Grid_XYZW[ 175][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 176][0]= 0.941414158220403; | |
Leb_Grid_XYZW[ 176][1]=-0.238473670142189; | |
Leb_Grid_XYZW[ 176][2]= 0.238473670142189; | |
Leb_Grid_XYZW[ 176][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 177][0]=-0.941414158220403; | |
Leb_Grid_XYZW[ 177][1]=-0.238473670142189; | |
Leb_Grid_XYZW[ 177][2]= 0.238473670142189; | |
Leb_Grid_XYZW[ 177][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 178][0]= 0.941414158220403; | |
Leb_Grid_XYZW[ 178][1]= 0.238473670142189; | |
Leb_Grid_XYZW[ 178][2]=-0.238473670142189; | |
Leb_Grid_XYZW[ 178][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 179][0]=-0.941414158220403; | |
Leb_Grid_XYZW[ 179][1]= 0.238473670142189; | |
Leb_Grid_XYZW[ 179][2]=-0.238473670142189; | |
Leb_Grid_XYZW[ 179][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 180][0]= 0.941414158220403; | |
Leb_Grid_XYZW[ 180][1]=-0.238473670142189; | |
Leb_Grid_XYZW[ 180][2]=-0.238473670142189; | |
Leb_Grid_XYZW[ 180][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 181][0]=-0.941414158220403; | |
Leb_Grid_XYZW[ 181][1]=-0.238473670142189; | |
Leb_Grid_XYZW[ 181][2]=-0.238473670142189; | |
Leb_Grid_XYZW[ 181][3]= 0.001617210647254; | |
Leb_Grid_XYZW[ 182][0]= 0.145903644915776; | |
Leb_Grid_XYZW[ 182][1]= 0.145903644915776; | |
Leb_Grid_XYZW[ 182][2]= 0.978480583762694; | |
Leb_Grid_XYZW[ 182][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 183][0]=-0.145903644915776; | |
Leb_Grid_XYZW[ 183][1]= 0.145903644915776; | |
Leb_Grid_XYZW[ 183][2]= 0.978480583762694; | |
Leb_Grid_XYZW[ 183][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 184][0]= 0.145903644915776; | |
Leb_Grid_XYZW[ 184][1]=-0.145903644915776; | |
Leb_Grid_XYZW[ 184][2]= 0.978480583762694; | |
Leb_Grid_XYZW[ 184][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 185][0]=-0.145903644915776; | |
Leb_Grid_XYZW[ 185][1]=-0.145903644915776; | |
Leb_Grid_XYZW[ 185][2]= 0.978480583762694; | |
Leb_Grid_XYZW[ 185][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 186][0]= 0.145903644915776; | |
Leb_Grid_XYZW[ 186][1]= 0.145903644915776; | |
Leb_Grid_XYZW[ 186][2]=-0.978480583762694; | |
Leb_Grid_XYZW[ 186][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 187][0]=-0.145903644915776; | |
Leb_Grid_XYZW[ 187][1]= 0.145903644915776; | |
Leb_Grid_XYZW[ 187][2]=-0.978480583762694; | |
Leb_Grid_XYZW[ 187][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 188][0]= 0.145903644915776; | |
Leb_Grid_XYZW[ 188][1]=-0.145903644915776; | |
Leb_Grid_XYZW[ 188][2]=-0.978480583762694; | |
Leb_Grid_XYZW[ 188][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 189][0]=-0.145903644915776; | |
Leb_Grid_XYZW[ 189][1]=-0.145903644915776; | |
Leb_Grid_XYZW[ 189][2]=-0.978480583762694; | |
Leb_Grid_XYZW[ 189][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 190][0]= 0.145903644915776; | |
Leb_Grid_XYZW[ 190][1]= 0.978480583762694; | |
Leb_Grid_XYZW[ 190][2]= 0.145903644915776; | |
Leb_Grid_XYZW[ 190][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 191][0]=-0.145903644915776; | |
Leb_Grid_XYZW[ 191][1]= 0.978480583762694; | |
Leb_Grid_XYZW[ 191][2]= 0.145903644915776; | |
Leb_Grid_XYZW[ 191][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 192][0]= 0.145903644915776; | |
Leb_Grid_XYZW[ 192][1]=-0.978480583762694; | |
Leb_Grid_XYZW[ 192][2]= 0.145903644915776; | |
Leb_Grid_XYZW[ 192][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 193][0]=-0.145903644915776; | |
Leb_Grid_XYZW[ 193][1]=-0.978480583762694; | |
Leb_Grid_XYZW[ 193][2]= 0.145903644915776; | |
Leb_Grid_XYZW[ 193][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 194][0]= 0.145903644915776; | |
Leb_Grid_XYZW[ 194][1]= 0.978480583762694; | |
Leb_Grid_XYZW[ 194][2]=-0.145903644915776; | |
Leb_Grid_XYZW[ 194][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 195][0]=-0.145903644915776; | |
Leb_Grid_XYZW[ 195][1]= 0.978480583762694; | |
Leb_Grid_XYZW[ 195][2]=-0.145903644915776; | |
Leb_Grid_XYZW[ 195][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 196][0]= 0.145903644915776; | |
Leb_Grid_XYZW[ 196][1]=-0.978480583762694; | |
Leb_Grid_XYZW[ 196][2]=-0.145903644915776; | |
Leb_Grid_XYZW[ 196][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 197][0]=-0.145903644915776; | |
Leb_Grid_XYZW[ 197][1]=-0.978480583762694; | |
Leb_Grid_XYZW[ 197][2]=-0.145903644915776; | |
Leb_Grid_XYZW[ 197][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 198][0]= 0.978480583762694; | |
Leb_Grid_XYZW[ 198][1]= 0.145903644915776; | |
Leb_Grid_XYZW[ 198][2]= 0.145903644915776; | |
Leb_Grid_XYZW[ 198][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 199][0]=-0.978480583762694; | |
Leb_Grid_XYZW[ 199][1]= 0.145903644915776; | |
Leb_Grid_XYZW[ 199][2]= 0.145903644915776; | |
Leb_Grid_XYZW[ 199][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 200][0]= 0.978480583762694; | |
Leb_Grid_XYZW[ 200][1]=-0.145903644915776; | |
Leb_Grid_XYZW[ 200][2]= 0.145903644915776; | |
Leb_Grid_XYZW[ 200][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 201][0]=-0.978480583762694; | |
Leb_Grid_XYZW[ 201][1]=-0.145903644915776; | |
Leb_Grid_XYZW[ 201][2]= 0.145903644915776; | |
Leb_Grid_XYZW[ 201][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 202][0]= 0.978480583762694; | |
Leb_Grid_XYZW[ 202][1]= 0.145903644915776; | |
Leb_Grid_XYZW[ 202][2]=-0.145903644915776; | |
Leb_Grid_XYZW[ 202][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 203][0]=-0.978480583762694; | |
Leb_Grid_XYZW[ 203][1]= 0.145903644915776; | |
Leb_Grid_XYZW[ 203][2]=-0.145903644915776; | |
Leb_Grid_XYZW[ 203][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 204][0]= 0.978480583762694; | |
Leb_Grid_XYZW[ 204][1]=-0.145903644915776; | |
Leb_Grid_XYZW[ 204][2]=-0.145903644915776; | |
Leb_Grid_XYZW[ 204][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 205][0]=-0.978480583762694; | |
Leb_Grid_XYZW[ 205][1]=-0.145903644915776; | |
Leb_Grid_XYZW[ 205][2]=-0.145903644915776; | |
Leb_Grid_XYZW[ 205][3]= 0.001384737234852; | |
Leb_Grid_XYZW[ 206][0]= 0.060950341155072; | |
Leb_Grid_XYZW[ 206][1]= 0.060950341155072; | |
Leb_Grid_XYZW[ 206][2]= 0.996278129754016; | |
Leb_Grid_XYZW[ 206][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 207][0]=-0.060950341155072; | |
Leb_Grid_XYZW[ 207][1]= 0.060950341155072; | |
Leb_Grid_XYZW[ 207][2]= 0.996278129754016; | |
Leb_Grid_XYZW[ 207][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 208][0]= 0.060950341155072; | |
Leb_Grid_XYZW[ 208][1]=-0.060950341155072; | |
Leb_Grid_XYZW[ 208][2]= 0.996278129754016; | |
Leb_Grid_XYZW[ 208][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 209][0]=-0.060950341155072; | |
Leb_Grid_XYZW[ 209][1]=-0.060950341155072; | |
Leb_Grid_XYZW[ 209][2]= 0.996278129754016; | |
Leb_Grid_XYZW[ 209][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 210][0]= 0.060950341155072; | |
Leb_Grid_XYZW[ 210][1]= 0.060950341155072; | |
Leb_Grid_XYZW[ 210][2]=-0.996278129754016; | |
Leb_Grid_XYZW[ 210][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 211][0]=-0.060950341155072; | |
Leb_Grid_XYZW[ 211][1]= 0.060950341155072; | |
Leb_Grid_XYZW[ 211][2]=-0.996278129754016; | |
Leb_Grid_XYZW[ 211][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 212][0]= 0.060950341155072; | |
Leb_Grid_XYZW[ 212][1]=-0.060950341155072; | |
Leb_Grid_XYZW[ 212][2]=-0.996278129754016; | |
Leb_Grid_XYZW[ 212][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 213][0]=-0.060950341155072; | |
Leb_Grid_XYZW[ 213][1]=-0.060950341155072; | |
Leb_Grid_XYZW[ 213][2]=-0.996278129754016; | |
Leb_Grid_XYZW[ 213][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 214][0]= 0.060950341155072; | |
Leb_Grid_XYZW[ 214][1]= 0.996278129754016; | |
Leb_Grid_XYZW[ 214][2]= 0.060950341155072; | |
Leb_Grid_XYZW[ 214][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 215][0]=-0.060950341155072; | |
Leb_Grid_XYZW[ 215][1]= 0.996278129754016; | |
Leb_Grid_XYZW[ 215][2]= 0.060950341155072; | |
Leb_Grid_XYZW[ 215][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 216][0]= 0.060950341155072; | |
Leb_Grid_XYZW[ 216][1]=-0.996278129754016; | |
Leb_Grid_XYZW[ 216][2]= 0.060950341155072; | |
Leb_Grid_XYZW[ 216][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 217][0]=-0.060950341155072; | |
Leb_Grid_XYZW[ 217][1]=-0.996278129754016; | |
Leb_Grid_XYZW[ 217][2]= 0.060950341155072; | |
Leb_Grid_XYZW[ 217][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 218][0]= 0.060950341155072; | |
Leb_Grid_XYZW[ 218][1]= 0.996278129754016; | |
Leb_Grid_XYZW[ 218][2]=-0.060950341155072; | |
Leb_Grid_XYZW[ 218][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 219][0]=-0.060950341155072; | |
Leb_Grid_XYZW[ 219][1]= 0.996278129754016; | |
Leb_Grid_XYZW[ 219][2]=-0.060950341155072; | |
Leb_Grid_XYZW[ 219][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 220][0]= 0.060950341155072; | |
Leb_Grid_XYZW[ 220][1]=-0.996278129754016; | |
Leb_Grid_XYZW[ 220][2]=-0.060950341155072; | |
Leb_Grid_XYZW[ 220][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 221][0]=-0.060950341155072; | |
Leb_Grid_XYZW[ 221][1]=-0.996278129754016; | |
Leb_Grid_XYZW[ 221][2]=-0.060950341155072; | |
Leb_Grid_XYZW[ 221][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 222][0]= 0.996278129754016; | |
Leb_Grid_XYZW[ 222][1]= 0.060950341155072; | |
Leb_Grid_XYZW[ 222][2]= 0.060950341155072; | |
Leb_Grid_XYZW[ 222][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 223][0]=-0.996278129754016; | |
Leb_Grid_XYZW[ 223][1]= 0.060950341155072; | |
Leb_Grid_XYZW[ 223][2]= 0.060950341155072; | |
Leb_Grid_XYZW[ 223][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 224][0]= 0.996278129754016; | |
Leb_Grid_XYZW[ 224][1]=-0.060950341155072; | |
Leb_Grid_XYZW[ 224][2]= 0.060950341155072; | |
Leb_Grid_XYZW[ 224][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 225][0]=-0.996278129754016; | |
Leb_Grid_XYZW[ 225][1]=-0.060950341155072; | |
Leb_Grid_XYZW[ 225][2]= 0.060950341155072; | |
Leb_Grid_XYZW[ 225][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 226][0]= 0.996278129754016; | |
Leb_Grid_XYZW[ 226][1]= 0.060950341155072; | |
Leb_Grid_XYZW[ 226][2]=-0.060950341155072; | |
Leb_Grid_XYZW[ 226][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 227][0]=-0.996278129754016; | |
Leb_Grid_XYZW[ 227][1]= 0.060950341155072; | |
Leb_Grid_XYZW[ 227][2]=-0.060950341155072; | |
Leb_Grid_XYZW[ 227][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 228][0]= 0.996278129754016; | |
Leb_Grid_XYZW[ 228][1]=-0.060950341155072; | |
Leb_Grid_XYZW[ 228][2]=-0.060950341155072; | |
Leb_Grid_XYZW[ 228][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 229][0]=-0.996278129754016; | |
Leb_Grid_XYZW[ 229][1]=-0.060950341155072; | |
Leb_Grid_XYZW[ 229][2]=-0.060950341155072; | |
Leb_Grid_XYZW[ 229][3]= 0.000976433116505; | |
Leb_Grid_XYZW[ 230][0]= 0.611684344200988; | |
Leb_Grid_XYZW[ 230][1]= 0.791101929626902; | |
Leb_Grid_XYZW[ 230][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 230][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 231][0]=-0.611684344200988; | |
Leb_Grid_XYZW[ 231][1]= 0.791101929626902; | |
Leb_Grid_XYZW[ 231][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 231][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 232][0]= 0.611684344200988; | |
Leb_Grid_XYZW[ 232][1]=-0.791101929626902; | |
Leb_Grid_XYZW[ 232][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 232][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 233][0]=-0.611684344200988; | |
Leb_Grid_XYZW[ 233][1]=-0.791101929626902; | |
Leb_Grid_XYZW[ 233][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 233][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 234][0]= 0.791101929626902; | |
Leb_Grid_XYZW[ 234][1]= 0.611684344200988; | |
Leb_Grid_XYZW[ 234][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 234][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 235][0]=-0.791101929626902; | |
Leb_Grid_XYZW[ 235][1]= 0.611684344200988; | |
Leb_Grid_XYZW[ 235][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 235][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 236][0]= 0.791101929626902; | |
Leb_Grid_XYZW[ 236][1]=-0.611684344200988; | |
Leb_Grid_XYZW[ 236][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 236][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 237][0]=-0.791101929626902; | |
Leb_Grid_XYZW[ 237][1]=-0.611684344200988; | |
Leb_Grid_XYZW[ 237][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 237][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 238][0]= 0.611684344200988; | |
Leb_Grid_XYZW[ 238][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 238][2]= 0.791101929626902; | |
Leb_Grid_XYZW[ 238][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 239][0]=-0.611684344200988; | |
Leb_Grid_XYZW[ 239][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 239][2]= 0.791101929626902; | |
Leb_Grid_XYZW[ 239][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 240][0]= 0.611684344200988; | |
Leb_Grid_XYZW[ 240][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 240][2]=-0.791101929626902; | |
Leb_Grid_XYZW[ 240][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 241][0]=-0.611684344200988; | |
Leb_Grid_XYZW[ 241][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 241][2]=-0.791101929626902; | |
Leb_Grid_XYZW[ 241][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 242][0]= 0.791101929626902; | |
Leb_Grid_XYZW[ 242][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 242][2]= 0.611684344200988; | |
Leb_Grid_XYZW[ 242][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 243][0]=-0.791101929626902; | |
Leb_Grid_XYZW[ 243][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 243][2]= 0.611684344200988; | |
Leb_Grid_XYZW[ 243][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 244][0]= 0.791101929626902; | |
Leb_Grid_XYZW[ 244][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 244][2]=-0.611684344200988; | |
Leb_Grid_XYZW[ 244][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 245][0]=-0.791101929626902; | |
Leb_Grid_XYZW[ 245][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 245][2]=-0.611684344200988; | |
Leb_Grid_XYZW[ 245][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 246][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 246][1]= 0.611684344200988; | |
Leb_Grid_XYZW[ 246][2]= 0.791101929626902; | |
Leb_Grid_XYZW[ 246][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 247][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 247][1]=-0.611684344200988; | |
Leb_Grid_XYZW[ 247][2]= 0.791101929626902; | |
Leb_Grid_XYZW[ 247][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 248][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 248][1]= 0.611684344200988; | |
Leb_Grid_XYZW[ 248][2]=-0.791101929626902; | |
Leb_Grid_XYZW[ 248][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 249][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 249][1]=-0.611684344200988; | |
Leb_Grid_XYZW[ 249][2]=-0.791101929626902; | |
Leb_Grid_XYZW[ 249][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 250][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 250][1]= 0.791101929626902; | |
Leb_Grid_XYZW[ 250][2]= 0.611684344200988; | |
Leb_Grid_XYZW[ 250][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 251][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 251][1]=-0.791101929626902; | |
Leb_Grid_XYZW[ 251][2]= 0.611684344200988; | |
Leb_Grid_XYZW[ 251][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 252][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 252][1]= 0.791101929626902; | |
Leb_Grid_XYZW[ 252][2]=-0.611684344200988; | |
Leb_Grid_XYZW[ 252][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 253][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 253][1]=-0.791101929626902; | |
Leb_Grid_XYZW[ 253][2]=-0.611684344200988; | |
Leb_Grid_XYZW[ 253][3]= 0.001857161196774; | |
Leb_Grid_XYZW[ 254][0]= 0.396475534819986; | |
Leb_Grid_XYZW[ 254][1]= 0.918045287711454; | |
Leb_Grid_XYZW[ 254][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 254][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 255][0]=-0.396475534819986; | |
Leb_Grid_XYZW[ 255][1]= 0.918045287711454; | |
Leb_Grid_XYZW[ 255][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 255][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 256][0]= 0.396475534819986; | |
Leb_Grid_XYZW[ 256][1]=-0.918045287711454; | |
Leb_Grid_XYZW[ 256][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 256][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 257][0]=-0.396475534819986; | |
Leb_Grid_XYZW[ 257][1]=-0.918045287711454; | |
Leb_Grid_XYZW[ 257][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 257][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 258][0]= 0.918045287711454; | |
Leb_Grid_XYZW[ 258][1]= 0.396475534819986; | |
Leb_Grid_XYZW[ 258][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 258][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 259][0]=-0.918045287711454; | |
Leb_Grid_XYZW[ 259][1]= 0.396475534819986; | |
Leb_Grid_XYZW[ 259][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 259][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 260][0]= 0.918045287711454; | |
Leb_Grid_XYZW[ 260][1]=-0.396475534819986; | |
Leb_Grid_XYZW[ 260][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 260][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 261][0]=-0.918045287711454; | |
Leb_Grid_XYZW[ 261][1]=-0.396475534819986; | |
Leb_Grid_XYZW[ 261][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 261][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 262][0]= 0.396475534819986; | |
Leb_Grid_XYZW[ 262][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 262][2]= 0.918045287711454; | |
Leb_Grid_XYZW[ 262][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 263][0]=-0.396475534819986; | |
Leb_Grid_XYZW[ 263][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 263][2]= 0.918045287711454; | |
Leb_Grid_XYZW[ 263][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 264][0]= 0.396475534819986; | |
Leb_Grid_XYZW[ 264][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 264][2]=-0.918045287711454; | |
Leb_Grid_XYZW[ 264][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 265][0]=-0.396475534819986; | |
Leb_Grid_XYZW[ 265][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 265][2]=-0.918045287711454; | |
Leb_Grid_XYZW[ 265][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 266][0]= 0.918045287711454; | |
Leb_Grid_XYZW[ 266][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 266][2]= 0.396475534819986; | |
Leb_Grid_XYZW[ 266][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 267][0]=-0.918045287711454; | |
Leb_Grid_XYZW[ 267][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 267][2]= 0.396475534819986; | |
Leb_Grid_XYZW[ 267][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 268][0]= 0.918045287711454; | |
Leb_Grid_XYZW[ 268][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 268][2]=-0.396475534819986; | |
Leb_Grid_XYZW[ 268][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 269][0]=-0.918045287711454; | |
Leb_Grid_XYZW[ 269][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 269][2]=-0.396475534819986; | |
Leb_Grid_XYZW[ 269][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 270][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 270][1]= 0.396475534819986; | |
Leb_Grid_XYZW[ 270][2]= 0.918045287711454; | |
Leb_Grid_XYZW[ 270][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 271][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 271][1]=-0.396475534819986; | |
Leb_Grid_XYZW[ 271][2]= 0.918045287711454; | |
Leb_Grid_XYZW[ 271][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 272][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 272][1]= 0.396475534819986; | |
Leb_Grid_XYZW[ 272][2]=-0.918045287711454; | |
Leb_Grid_XYZW[ 272][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 273][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 273][1]=-0.396475534819986; | |
Leb_Grid_XYZW[ 273][2]=-0.918045287711454; | |
Leb_Grid_XYZW[ 273][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 274][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 274][1]= 0.918045287711454; | |
Leb_Grid_XYZW[ 274][2]= 0.396475534819986; | |
Leb_Grid_XYZW[ 274][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 275][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 275][1]=-0.918045287711454; | |
Leb_Grid_XYZW[ 275][2]= 0.396475534819986; | |
Leb_Grid_XYZW[ 275][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 276][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 276][1]= 0.918045287711454; | |
Leb_Grid_XYZW[ 276][2]=-0.396475534819986; | |
Leb_Grid_XYZW[ 276][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 277][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 277][1]=-0.918045287711454; | |
Leb_Grid_XYZW[ 277][2]=-0.396475534819986; | |
Leb_Grid_XYZW[ 277][3]= 0.001705153996396; | |
Leb_Grid_XYZW[ 278][0]= 0.172478200990772; | |
Leb_Grid_XYZW[ 278][1]= 0.985013335028002; | |
Leb_Grid_XYZW[ 278][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 278][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 279][0]=-0.172478200990772; | |
Leb_Grid_XYZW[ 279][1]= 0.985013335028002; | |
Leb_Grid_XYZW[ 279][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 279][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 280][0]= 0.172478200990772; | |
Leb_Grid_XYZW[ 280][1]=-0.985013335028002; | |
Leb_Grid_XYZW[ 280][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 280][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 281][0]=-0.172478200990772; | |
Leb_Grid_XYZW[ 281][1]=-0.985013335028002; | |
Leb_Grid_XYZW[ 281][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 281][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 282][0]= 0.985013335028002; | |
Leb_Grid_XYZW[ 282][1]= 0.172478200990772; | |
Leb_Grid_XYZW[ 282][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 282][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 283][0]=-0.985013335028002; | |
Leb_Grid_XYZW[ 283][1]= 0.172478200990772; | |
Leb_Grid_XYZW[ 283][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 283][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 284][0]= 0.985013335028002; | |
Leb_Grid_XYZW[ 284][1]=-0.172478200990772; | |
Leb_Grid_XYZW[ 284][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 284][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 285][0]=-0.985013335028002; | |
Leb_Grid_XYZW[ 285][1]=-0.172478200990772; | |
Leb_Grid_XYZW[ 285][2]= 0.000000000000000; | |
Leb_Grid_XYZW[ 285][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 286][0]= 0.172478200990772; | |
Leb_Grid_XYZW[ 286][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 286][2]= 0.985013335028002; | |
Leb_Grid_XYZW[ 286][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 287][0]=-0.172478200990772; | |
Leb_Grid_XYZW[ 287][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 287][2]= 0.985013335028002; | |
Leb_Grid_XYZW[ 287][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 288][0]= 0.172478200990772; | |
Leb_Grid_XYZW[ 288][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 288][2]=-0.985013335028002; | |
Leb_Grid_XYZW[ 288][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 289][0]=-0.172478200990772; | |
Leb_Grid_XYZW[ 289][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 289][2]=-0.985013335028002; | |
Leb_Grid_XYZW[ 289][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 290][0]= 0.985013335028002; | |
Leb_Grid_XYZW[ 290][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 290][2]= 0.172478200990772; | |
Leb_Grid_XYZW[ 290][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 291][0]=-0.985013335028002; | |
Leb_Grid_XYZW[ 291][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 291][2]= 0.172478200990772; | |
Leb_Grid_XYZW[ 291][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 292][0]= 0.985013335028002; | |
Leb_Grid_XYZW[ 292][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 292][2]=-0.172478200990772; | |
Leb_Grid_XYZW[ 292][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 293][0]=-0.985013335028002; | |
Leb_Grid_XYZW[ 293][1]= 0.000000000000000; | |
Leb_Grid_XYZW[ 293][2]=-0.172478200990772; | |
Leb_Grid_XYZW[ 293][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 294][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 294][1]= 0.172478200990772; | |
Leb_Grid_XYZW[ 294][2]= 0.985013335028002; | |
Leb_Grid_XYZW[ 294][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 295][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 295][1]=-0.172478200990772; | |
Leb_Grid_XYZW[ 295][2]= 0.985013335028002; | |
Leb_Grid_XYZW[ 295][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 296][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 296][1]= 0.172478200990772; | |
Leb_Grid_XYZW[ 296][2]=-0.985013335028002; | |
Leb_Grid_XYZW[ 296][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 297][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 297][1]=-0.172478200990772; | |
Leb_Grid_XYZW[ 297][2]=-0.985013335028002; | |
Leb_Grid_XYZW[ 297][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 298][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 298][1]= 0.985013335028002; | |
Leb_Grid_XYZW[ 298][2]= 0.172478200990772; | |
Leb_Grid_XYZW[ 298][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 299][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 299][1]=-0.985013335028002; | |
Leb_Grid_XYZW[ 299][2]= 0.172478200990772; | |
Leb_Grid_XYZW[ 299][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 300][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 300][1]= 0.985013335028002; | |
Leb_Grid_XYZW[ 300][2]=-0.172478200990772; | |
Leb_Grid_XYZW[ 300][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 301][0]= 0.000000000000000; | |
Leb_Grid_XYZW[ 301][1]=-0.985013335028002; | |
Leb_Grid_XYZW[ 301][2]=-0.172478200990772; | |
Leb_Grid_XYZW[ 301][3]= 0.001300321685886; | |
Leb_Grid_XYZW[ 302][0]= 0.561026380862206; | |
Leb_Grid_XYZW[ 302][1]= 0.351828092773352; | |
Leb_Grid_XYZW[ 302][2]= 0.749310611904116; | |
Leb_Grid_XYZW[ 302][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 303][0]=-0.561026380862206; | |
Leb_Grid_XYZW[ 303][1]= 0.351828092773352; | |
Leb_Grid_XYZW[ 303][2]= 0.749310611904116; | |
Leb_Grid_XYZW[ 303][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 304][0]= 0.561026380862206; | |
Leb_Grid_XYZW[ 304][1]=-0.351828092773352; | |
Leb_Grid_XYZW[ 304][2]= 0.749310611904116; | |
Leb_Grid_XYZW[ 304][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 305][0]=-0.561026380862206; | |
Leb_Grid_XYZW[ 305][1]=-0.351828092773352; | |
Leb_Grid_XYZW[ 305][2]= 0.749310611904116; | |
Leb_Grid_XYZW[ 305][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 306][0]= 0.561026380862206; | |
Leb_Grid_XYZW[ 306][1]= 0.351828092773352; | |
Leb_Grid_XYZW[ 306][2]=-0.749310611904116; | |
Leb_Grid_XYZW[ 306][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 307][0]=-0.561026380862206; | |
Leb_Grid_XYZW[ 307][1]= 0.351828092773352; | |
Leb_Grid_XYZW[ 307][2]=-0.749310611904116; | |
Leb_Grid_XYZW[ 307][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 308][0]= 0.561026380862206; | |
Leb_Grid_XYZW[ 308][1]=-0.351828092773352; | |
Leb_Grid_XYZW[ 308][2]=-0.749310611904116; | |
Leb_Grid_XYZW[ 308][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 309][0]=-0.561026380862206; | |
Leb_Grid_XYZW[ 309][1]=-0.351828092773352; | |
Leb_Grid_XYZW[ 309][2]=-0.749310611904116; | |
Leb_Grid_XYZW[ 309][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 310][0]= 0.561026380862206; | |
Leb_Grid_XYZW[ 310][1]= 0.749310611904116; | |
Leb_Grid_XYZW[ 310][2]= 0.351828092773352; | |
Leb_Grid_XYZW[ 310][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 311][0]=-0.561026380862206; | |
Leb_Grid_XYZW[ 311][1]= 0.749310611904116; | |
Leb_Grid_XYZW[ 311][2]= 0.351828092773352; | |
Leb_Grid_XYZW[ 311][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 312][0]= 0.561026380862206; | |
Leb_Grid_XYZW[ 312][1]=-0.749310611904116; | |
Leb_Grid_XYZW[ 312][2]= 0.351828092773352; | |
Leb_Grid_XYZW[ 312][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 313][0]=-0.561026380862206; | |
Leb_Grid_XYZW[ 313][1]=-0.749310611904116; | |
Leb_Grid_XYZW[ 313][2]= 0.351828092773352; | |
Leb_Grid_XYZW[ 313][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 314][0]= 0.561026380862206; | |
Leb_Grid_XYZW[ 314][1]= 0.749310611904116; | |
Leb_Grid_XYZW[ 314][2]=-0.351828092773352; | |
Leb_Grid_XYZW[ 314][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 315][0]=-0.561026380862206; | |
Leb_Grid_XYZW[ 315][1]= 0.749310611904116; | |
Leb_Grid_XYZW[ 315][2]=-0.351828092773352; | |
Leb_Grid_XYZW[ 315][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 316][0]= 0.561026380862206; | |
Leb_Grid_XYZW[ 316][1]=-0.749310611904116; | |
Leb_Grid_XYZW[ 316][2]=-0.351828092773352; | |
Leb_Grid_XYZW[ 316][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 317][0]=-0.561026380862206; | |
Leb_Grid_XYZW[ 317][1]=-0.749310611904116; | |
Leb_Grid_XYZW[ 317][2]=-0.351828092773352; | |
Leb_Grid_XYZW[ 317][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 318][0]= 0.351828092773352; | |
Leb_Grid_XYZW[ 318][1]= 0.561026380862206; | |
Leb_Grid_XYZW[ 318][2]= 0.749310611904116; | |
Leb_Grid_XYZW[ 318][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 319][0]=-0.351828092773352; | |
Leb_Grid_XYZW[ 319][1]= 0.561026380862206; | |
Leb_Grid_XYZW[ 319][2]= 0.749310611904116; | |
Leb_Grid_XYZW[ 319][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 320][0]= 0.351828092773352; | |
Leb_Grid_XYZW[ 320][1]=-0.561026380862206; | |
Leb_Grid_XYZW[ 320][2]= 0.749310611904116; | |
Leb_Grid_XYZW[ 320][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 321][0]=-0.351828092773352; | |
Leb_Grid_XYZW[ 321][1]=-0.561026380862206; | |
Leb_Grid_XYZW[ 321][2]= 0.749310611904116; | |
Leb_Grid_XYZW[ 321][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 322][0]= 0.351828092773352; | |
Leb_Grid_XYZW[ 322][1]= 0.561026380862206; | |
Leb_Grid_XYZW[ 322][2]=-0.749310611904116; | |
Leb_Grid_XYZW[ 322][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 323][0]=-0.351828092773352; | |
Leb_Grid_XYZW[ 323][1]= 0.561026380862206; | |
Leb_Grid_XYZW[ 323][2]=-0.749310611904116; | |
Leb_Grid_XYZW[ 323][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 324][0]= 0.351828092773352; | |
Leb_Grid_XYZW[ 324][1]=-0.561026380862206; | |
Leb_Grid_XYZW[ 324][2]=-0.749310611904116; | |
Leb_Grid_XYZW[ 324][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 325][0]=-0.351828092773352; | |
Leb_Grid_XYZW[ 325][1]=-0.561026380862206; | |
Leb_Grid_XYZW[ 325][2]=-0.749310611904116; | |
Leb_Grid_XYZW[ 325][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 326][0]= 0.351828092773352; | |
Leb_Grid_XYZW[ 326][1]= 0.749310611904116; | |
Leb_Grid_XYZW[ 326][2]= 0.561026380862206; | |
Leb_Grid_XYZW[ 326][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 327][0]=-0.351828092773352; | |
Leb_Grid_XYZW[ 327][1]= 0.749310611904116; | |
Leb_Grid_XYZW[ 327][2]= 0.561026380862206; | |
Leb_Grid_XYZW[ 327][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 328][0]= 0.351828092773352; | |
Leb_Grid_XYZW[ 328][1]=-0.749310611904116; | |
Leb_Grid_XYZW[ 328][2]= 0.561026380862206; | |
Leb_Grid_XYZW[ 328][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 329][0]=-0.351828092773352; | |
Leb_Grid_XYZW[ 329][1]=-0.749310611904116; | |
Leb_Grid_XYZW[ 329][2]= 0.561026380862206; | |
Leb_Grid_XYZW[ 329][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 330][0]= 0.351828092773352; | |
Leb_Grid_XYZW[ 330][1]= 0.749310611904116; | |
Leb_Grid_XYZW[ 330][2]=-0.561026380862206; | |
Leb_Grid_XYZW[ 330][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 331][0]=-0.351828092773352; | |
Leb_Grid_XYZW[ 331][1]= 0.749310611904116; | |
Leb_Grid_XYZW[ 331][2]=-0.561026380862206; | |
Leb_Grid_XYZW[ 331][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 332][0]= 0.351828092773352; | |
Leb_Grid_XYZW[ 332][1]=-0.749310611904116; | |
Leb_Grid_XYZW[ 332][2]=-0.561026380862206; | |
Leb_Grid_XYZW[ 332][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 333][0]=-0.351828092773352; | |
Leb_Grid_XYZW[ 333][1]=-0.749310611904116; | |
Leb_Grid_XYZW[ 333][2]=-0.561026380862206; | |
Leb_Grid_XYZW[ 333][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 334][0]= 0.749310611904116; | |
Leb_Grid_XYZW[ 334][1]= 0.561026380862206; | |
Leb_Grid_XYZW[ 334][2]= 0.351828092773352; | |
Leb_Grid_XYZW[ 334][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 335][0]=-0.749310611904116; | |
Leb_Grid_XYZW[ 335][1]= 0.561026380862206; | |
Leb_Grid_XYZW[ 335][2]= 0.351828092773352; | |
Leb_Grid_XYZW[ 335][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 336][0]= 0.749310611904116; | |
Leb_Grid_XYZW[ 336][1]=-0.561026380862206; | |
Leb_Grid_XYZW[ 336][2]= 0.351828092773352; | |
Leb_Grid_XYZW[ 336][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 337][0]=-0.749310611904116; | |
Leb_Grid_XYZW[ 337][1]=-0.561026380862206; | |
Leb_Grid_XYZW[ 337][2]= 0.351828092773352; | |
Leb_Grid_XYZW[ 337][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 338][0]= 0.749310611904116; | |
Leb_Grid_XYZW[ 338][1]= 0.561026380862206; | |
Leb_Grid_XYZW[ 338][2]=-0.351828092773352; | |
Leb_Grid_XYZW[ 338][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 339][0]=-0.749310611904116; | |
Leb_Grid_XYZW[ 339][1]= 0.561026380862206; | |
Leb_Grid_XYZW[ 339][2]=-0.351828092773352; | |
Leb_Grid_XYZW[ 339][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 340][0]= 0.749310611904116; | |
Leb_Grid_XYZW[ 340][1]=-0.561026380862206; | |
Leb_Grid_XYZW[ 340][2]=-0.351828092773352; | |
Leb_Grid_XYZW[ 340][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 341][0]=-0.749310611904116; | |
Leb_Grid_XYZW[ 341][1]=-0.561026380862206; | |
Leb_Grid_XYZW[ 341][2]=-0.351828092773352; | |
Leb_Grid_XYZW[ 341][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 342][0]= 0.749310611904116; | |
Leb_Grid_XYZW[ 342][1]= 0.351828092773352; | |
Leb_Grid_XYZW[ 342][2]= 0.561026380862206; | |
Leb_Grid_XYZW[ 342][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 343][0]=-0.749310611904116; | |
Leb_Grid_XYZW[ 343][1]= 0.351828092773352; | |
Leb_Grid_XYZW[ 343][2]= 0.561026380862206; | |
Leb_Grid_XYZW[ 343][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 344][0]= 0.749310611904116; | |
Leb_Grid_XYZW[ 344][1]=-0.351828092773352; | |
Leb_Grid_XYZW[ 344][2]= 0.561026380862206; | |
Leb_Grid_XYZW[ 344][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 345][0]=-0.749310611904116; | |
Leb_Grid_XYZW[ 345][1]=-0.351828092773352; | |
Leb_Grid_XYZW[ 345][2]= 0.561026380862206; | |
Leb_Grid_XYZW[ 345][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 346][0]= 0.749310611904116; | |
Leb_Grid_XYZW[ 346][1]= 0.351828092773352; | |
Leb_Grid_XYZW[ 346][2]=-0.561026380862206; | |
Leb_Grid_XYZW[ 346][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 347][0]=-0.749310611904116; | |
Leb_Grid_XYZW[ 347][1]= 0.351828092773352; | |
Leb_Grid_XYZW[ 347][2]=-0.561026380862206; | |
Leb_Grid_XYZW[ 347][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 348][0]= 0.749310611904116; | |
Leb_Grid_XYZW[ 348][1]=-0.351828092773352; | |
Leb_Grid_XYZW[ 348][2]=-0.561026380862206; | |
Leb_Grid_XYZW[ 348][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 349][0]=-0.749310611904116; | |
Leb_Grid_XYZW[ 349][1]=-0.351828092773352; | |
Leb_Grid_XYZW[ 349][2]=-0.561026380862206; | |
Leb_Grid_XYZW[ 349][3]= 0.001842866472905; | |
Leb_Grid_XYZW[ 350][0]= 0.474239284255198; | |
Leb_Grid_XYZW[ 350][1]= 0.263471665593795; | |
Leb_Grid_XYZW[ 350][2]= 0.840047488359050; | |
Leb_Grid_XYZW[ 350][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 351][0]=-0.474239284255198; | |
Leb_Grid_XYZW[ 351][1]= 0.263471665593795; | |
Leb_Grid_XYZW[ 351][2]= 0.840047488359050; | |
Leb_Grid_XYZW[ 351][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 352][0]= 0.474239284255198; | |
Leb_Grid_XYZW[ 352][1]=-0.263471665593795; | |
Leb_Grid_XYZW[ 352][2]= 0.840047488359050; | |
Leb_Grid_XYZW[ 352][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 353][0]=-0.474239284255198; | |
Leb_Grid_XYZW[ 353][1]=-0.263471665593795; | |
Leb_Grid_XYZW[ 353][2]= 0.840047488359050; | |
Leb_Grid_XYZW[ 353][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 354][0]= 0.474239284255198; | |
Leb_Grid_XYZW[ 354][1]= 0.263471665593795; | |
Leb_Grid_XYZW[ 354][2]=-0.840047488359050; | |
Leb_Grid_XYZW[ 354][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 355][0]=-0.474239284255198; | |
Leb_Grid_XYZW[ 355][1]= 0.263471665593795; | |
Leb_Grid_XYZW[ 355][2]=-0.840047488359050; | |
Leb_Grid_XYZW[ 355][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 356][0]= 0.474239284255198; | |
Leb_Grid_XYZW[ 356][1]=-0.263471665593795; | |
Leb_Grid_XYZW[ 356][2]=-0.840047488359050; | |
Leb_Grid_XYZW[ 356][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 357][0]=-0.474239284255198; | |
Leb_Grid_XYZW[ 357][1]=-0.263471665593795; | |
Leb_Grid_XYZW[ 357][2]=-0.840047488359050; | |
Leb_Grid_XYZW[ 357][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 358][0]= 0.474239284255198; | |
Leb_Grid_XYZW[ 358][1]= 0.840047488359050; | |
Leb_Grid_XYZW[ 358][2]= 0.263471665593795; | |
Leb_Grid_XYZW[ 358][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 359][0]=-0.474239284255198; | |
Leb_Grid_XYZW[ 359][1]= 0.840047488359050; | |
Leb_Grid_XYZW[ 359][2]= 0.263471665593795; | |
Leb_Grid_XYZW[ 359][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 360][0]= 0.474239284255198; | |
Leb_Grid_XYZW[ 360][1]=-0.840047488359050; | |
Leb_Grid_XYZW[ 360][2]= 0.263471665593795; | |
Leb_Grid_XYZW[ 360][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 361][0]=-0.474239284255198; | |
Leb_Grid_XYZW[ 361][1]=-0.840047488359050; | |
Leb_Grid_XYZW[ 361][2]= 0.263471665593795; | |
Leb_Grid_XYZW[ 361][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 362][0]= 0.474239284255198; | |
Leb_Grid_XYZW[ 362][1]= 0.840047488359050; | |
Leb_Grid_XYZW[ 362][2]=-0.263471665593795; | |
Leb_Grid_XYZW[ 362][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 363][0]=-0.474239284255198; | |
Leb_Grid_XYZW[ 363][1]= 0.840047488359050; | |
Leb_Grid_XYZW[ 363][2]=-0.263471665593795; | |
Leb_Grid_XYZW[ 363][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 364][0]= 0.474239284255198; | |
Leb_Grid_XYZW[ 364][1]=-0.840047488359050; | |
Leb_Grid_XYZW[ 364][2]=-0.263471665593795; | |
Leb_Grid_XYZW[ 364][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 365][0]=-0.474239284255198; | |
Leb_Grid_XYZW[ 365][1]=-0.840047488359050; | |
Leb_Grid_XYZW[ 365][2]=-0.263471665593795; | |
Leb_Grid_XYZW[ 365][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 366][0]= 0.263471665593795; | |
Leb_Grid_XYZW[ 366][1]= 0.474239284255198; | |
Leb_Grid_XYZW[ 366][2]= 0.840047488359050; | |
Leb_Grid_XYZW[ 366][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 367][0]=-0.263471665593795; | |
Leb_Grid_XYZW[ 367][1]= 0.474239284255198; | |
Leb_Grid_XYZW[ 367][2]= 0.840047488359050; | |
Leb_Grid_XYZW[ 367][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 368][0]= 0.263471665593795; | |
Leb_Grid_XYZW[ 368][1]=-0.474239284255198; | |
Leb_Grid_XYZW[ 368][2]= 0.840047488359050; | |
Leb_Grid_XYZW[ 368][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 369][0]=-0.263471665593795; | |
Leb_Grid_XYZW[ 369][1]=-0.474239284255198; | |
Leb_Grid_XYZW[ 369][2]= 0.840047488359050; | |
Leb_Grid_XYZW[ 369][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 370][0]= 0.263471665593795; | |
Leb_Grid_XYZW[ 370][1]= 0.474239284255198; | |
Leb_Grid_XYZW[ 370][2]=-0.840047488359050; | |
Leb_Grid_XYZW[ 370][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 371][0]=-0.263471665593795; | |
Leb_Grid_XYZW[ 371][1]= 0.474239284255198; | |
Leb_Grid_XYZW[ 371][2]=-0.840047488359050; | |
Leb_Grid_XYZW[ 371][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 372][0]= 0.263471665593795; | |
Leb_Grid_XYZW[ 372][1]=-0.474239284255198; | |
Leb_Grid_XYZW[ 372][2]=-0.840047488359050; | |
Leb_Grid_XYZW[ 372][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 373][0]=-0.263471665593795; | |
Leb_Grid_XYZW[ 373][1]=-0.474239284255198; | |
Leb_Grid_XYZW[ 373][2]=-0.840047488359050; | |
Leb_Grid_XYZW[ 373][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 374][0]= 0.263471665593795; | |
Leb_Grid_XYZW[ 374][1]= 0.840047488359050; | |
Leb_Grid_XYZW[ 374][2]= 0.474239284255198; | |
Leb_Grid_XYZW[ 374][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 375][0]=-0.263471665593795; | |
Leb_Grid_XYZW[ 375][1]= 0.840047488359050; | |
Leb_Grid_XYZW[ 375][2]= 0.474239284255198; | |
Leb_Grid_XYZW[ 375][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 376][0]= 0.263471665593795; | |
Leb_Grid_XYZW[ 376][1]=-0.840047488359050; | |
Leb_Grid_XYZW[ 376][2]= 0.474239284255198; | |
Leb_Grid_XYZW[ 376][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 377][0]=-0.263471665593795; | |
Leb_Grid_XYZW[ 377][1]=-0.840047488359050; | |
Leb_Grid_XYZW[ 377][2]= 0.474239284255198; | |
Leb_Grid_XYZW[ 377][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 378][0]= 0.263471665593795; | |
Leb_Grid_XYZW[ 378][1]= 0.840047488359050; | |
Leb_Grid_XYZW[ 378][2]=-0.474239284255198; | |
Leb_Grid_XYZW[ 378][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 379][0]=-0.263471665593795; | |
Leb_Grid_XYZW[ 379][1]= 0.840047488359050; | |
Leb_Grid_XYZW[ 379][2]=-0.474239284255198; | |
Leb_Grid_XYZW[ 379][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 380][0]= 0.263471665593795; | |
Leb_Grid_XYZW[ 380][1]=-0.840047488359050; | |
Leb_Grid_XYZW[ 380][2]=-0.474239284255198; | |
Leb_Grid_XYZW[ 380][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 381][0]=-0.263471665593795; | |
Leb_Grid_XYZW[ 381][1]=-0.840047488359050; | |
Leb_Grid_XYZW[ 381][2]=-0.474239284255198; | |
Leb_Grid_XYZW[ 381][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 382][0]= 0.840047488359050; | |
Leb_Grid_XYZW[ 382][1]= 0.474239284255198; | |
Leb_Grid_XYZW[ 382][2]= 0.263471665593795; | |
Leb_Grid_XYZW[ 382][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 383][0]=-0.840047488359050; | |
Leb_Grid_XYZW[ 383][1]= 0.474239284255198; | |
Leb_Grid_XYZW[ 383][2]= 0.263471665593795; | |
Leb_Grid_XYZW[ 383][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 384][0]= 0.840047488359050; | |
Leb_Grid_XYZW[ 384][1]=-0.474239284255198; | |
Leb_Grid_XYZW[ 384][2]= 0.263471665593795; | |
Leb_Grid_XYZW[ 384][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 385][0]=-0.840047488359050; | |
Leb_Grid_XYZW[ 385][1]=-0.474239284255198; | |
Leb_Grid_XYZW[ 385][2]= 0.263471665593795; | |
Leb_Grid_XYZW[ 385][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 386][0]= 0.840047488359050; | |
Leb_Grid_XYZW[ 386][1]= 0.474239284255198; | |
Leb_Grid_XYZW[ 386][2]=-0.263471665593795; | |
Leb_Grid_XYZW[ 386][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 387][0]=-0.840047488359050; | |
Leb_Grid_XYZW[ 387][1]= 0.474239284255198; | |
Leb_Grid_XYZW[ 387][2]=-0.263471665593795; | |
Leb_Grid_XYZW[ 387][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 388][0]= 0.840047488359050; | |
Leb_Grid_XYZW[ 388][1]=-0.474239284255198; | |
Leb_Grid_XYZW[ 388][2]=-0.263471665593795; | |
Leb_Grid_XYZW[ 388][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 389][0]=-0.840047488359050; | |
Leb_Grid_XYZW[ 389][1]=-0.474239284255198; | |
Leb_Grid_XYZW[ 389][2]=-0.263471665593795; | |
Leb_Grid_XYZW[ 389][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 390][0]= 0.840047488359050; | |
Leb_Grid_XYZW[ 390][1]= 0.263471665593795; | |
Leb_Grid_XYZW[ 390][2]= 0.474239284255198; | |
Leb_Grid_XYZW[ 390][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 391][0]=-0.840047488359050; | |
Leb_Grid_XYZW[ 391][1]= 0.263471665593795; | |
Leb_Grid_XYZW[ 391][2]= 0.474239284255198; | |
Leb_Grid_XYZW[ 391][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 392][0]= 0.840047488359050; | |
Leb_Grid_XYZW[ 392][1]=-0.263471665593795; | |
Leb_Grid_XYZW[ 392][2]= 0.474239284255198; | |
Leb_Grid_XYZW[ 392][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 393][0]=-0.840047488359050; | |
Leb_Grid_XYZW[ 393][1]=-0.263471665593795; | |
Leb_Grid_XYZW[ 393][2]= 0.474239284255198; | |
Leb_Grid_XYZW[ 393][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 394][0]= 0.840047488359050; | |
Leb_Grid_XYZW[ 394][1]= 0.263471665593795; | |
Leb_Grid_XYZW[ 394][2]=-0.474239284255198; | |
Leb_Grid_XYZW[ 394][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 395][0]=-0.840047488359050; | |
Leb_Grid_XYZW[ 395][1]= 0.263471665593795; | |
Leb_Grid_XYZW[ 395][2]=-0.474239284255198; | |
Leb_Grid_XYZW[ 395][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 396][0]= 0.840047488359050; | |
Leb_Grid_XYZW[ 396][1]=-0.263471665593795; | |
Leb_Grid_XYZW[ 396][2]=-0.474239284255198; | |
Leb_Grid_XYZW[ 396][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 397][0]=-0.840047488359050; | |
Leb_Grid_XYZW[ 397][1]=-0.263471665593795; | |
Leb_Grid_XYZW[ 397][2]=-0.474239284255198; | |
Leb_Grid_XYZW[ 397][3]= 0.001802658934377; | |
Leb_Grid_XYZW[ 398][0]= 0.598412649788538; | |
Leb_Grid_XYZW[ 398][1]= 0.181664084036021; | |
Leb_Grid_XYZW[ 398][2]= 0.780320742479920; | |
Leb_Grid_XYZW[ 398][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 399][0]=-0.598412649788538; | |
Leb_Grid_XYZW[ 399][1]= 0.181664084036021; | |
Leb_Grid_XYZW[ 399][2]= 0.780320742479920; | |
Leb_Grid_XYZW[ 399][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 400][0]= 0.598412649788538; | |
Leb_Grid_XYZW[ 400][1]=-0.181664084036021; | |
Leb_Grid_XYZW[ 400][2]= 0.780320742479920; | |
Leb_Grid_XYZW[ 400][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 401][0]=-0.598412649788538; | |
Leb_Grid_XYZW[ 401][1]=-0.181664084036021; | |
Leb_Grid_XYZW[ 401][2]= 0.780320742479920; | |
Leb_Grid_XYZW[ 401][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 402][0]= 0.598412649788538; | |
Leb_Grid_XYZW[ 402][1]= 0.181664084036021; | |
Leb_Grid_XYZW[ 402][2]=-0.780320742479920; | |
Leb_Grid_XYZW[ 402][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 403][0]=-0.598412649788538; | |
Leb_Grid_XYZW[ 403][1]= 0.181664084036021; | |
Leb_Grid_XYZW[ 403][2]=-0.780320742479920; | |
Leb_Grid_XYZW[ 403][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 404][0]= 0.598412649788538; | |
Leb_Grid_XYZW[ 404][1]=-0.181664084036021; | |
Leb_Grid_XYZW[ 404][2]=-0.780320742479920; | |
Leb_Grid_XYZW[ 404][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 405][0]=-0.598412649788538; | |
Leb_Grid_XYZW[ 405][1]=-0.181664084036021; | |
Leb_Grid_XYZW[ 405][2]=-0.780320742479920; | |
Leb_Grid_XYZW[ 405][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 406][0]= 0.598412649788538; | |
Leb_Grid_XYZW[ 406][1]= 0.780320742479920; | |
Leb_Grid_XYZW[ 406][2]= 0.181664084036021; | |
Leb_Grid_XYZW[ 406][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 407][0]=-0.598412649788538; | |
Leb_Grid_XYZW[ 407][1]= 0.780320742479920; | |
Leb_Grid_XYZW[ 407][2]= 0.181664084036021; | |
Leb_Grid_XYZW[ 407][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 408][0]= 0.598412649788538; | |
Leb_Grid_XYZW[ 408][1]=-0.780320742479920; | |
Leb_Grid_XYZW[ 408][2]= 0.181664084036021; | |
Leb_Grid_XYZW[ 408][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 409][0]=-0.598412649788538; | |
Leb_Grid_XYZW[ 409][1]=-0.780320742479920; | |
Leb_Grid_XYZW[ 409][2]= 0.181664084036021; | |
Leb_Grid_XYZW[ 409][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 410][0]= 0.598412649788538; | |
Leb_Grid_XYZW[ 410][1]= 0.780320742479920; | |
Leb_Grid_XYZW[ 410][2]=-0.181664084036021; | |
Leb_Grid_XYZW[ 410][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 411][0]=-0.598412649788538; | |
Leb_Grid_XYZW[ 411][1]= 0.780320742479920; | |
Leb_Grid_XYZW[ 411][2]=-0.181664084036021; | |
Leb_Grid_XYZW[ 411][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 412][0]= 0.598412649788538; | |
Leb_Grid_XYZW[ 412][1]=-0.780320742479920; | |
Leb_Grid_XYZW[ 412][2]=-0.181664084036021; | |
Leb_Grid_XYZW[ 412][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 413][0]=-0.598412649788538; | |
Leb_Grid_XYZW[ 413][1]=-0.780320742479920; | |
Leb_Grid_XYZW[ 413][2]=-0.181664084036021; | |
Leb_Grid_XYZW[ 413][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 414][0]= 0.181664084036021; | |
Leb_Grid_XYZW[ 414][1]= 0.598412649788538; | |
Leb_Grid_XYZW[ 414][2]= 0.780320742479920; | |
Leb_Grid_XYZW[ 414][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 415][0]=-0.181664084036021; | |
Leb_Grid_XYZW[ 415][1]= 0.598412649788538; | |
Leb_Grid_XYZW[ 415][2]= 0.780320742479920; | |
Leb_Grid_XYZW[ 415][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 416][0]= 0.181664084036021; | |
Leb_Grid_XYZW[ 416][1]=-0.598412649788538; | |
Leb_Grid_XYZW[ 416][2]= 0.780320742479920; | |
Leb_Grid_XYZW[ 416][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 417][0]=-0.181664084036021; | |
Leb_Grid_XYZW[ 417][1]=-0.598412649788538; | |
Leb_Grid_XYZW[ 417][2]= 0.780320742479920; | |
Leb_Grid_XYZW[ 417][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 418][0]= 0.181664084036021; | |
Leb_Grid_XYZW[ 418][1]= 0.598412649788538; | |
Leb_Grid_XYZW[ 418][2]=-0.780320742479920; | |
Leb_Grid_XYZW[ 418][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 419][0]=-0.181664084036021; | |
Leb_Grid_XYZW[ 419][1]= 0.598412649788538; | |
Leb_Grid_XYZW[ 419][2]=-0.780320742479920; | |
Leb_Grid_XYZW[ 419][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 420][0]= 0.181664084036021; | |
Leb_Grid_XYZW[ 420][1]=-0.598412649788538; | |
Leb_Grid_XYZW[ 420][2]=-0.780320742479920; | |
Leb_Grid_XYZW[ 420][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 421][0]=-0.181664084036021; | |
Leb_Grid_XYZW[ 421][1]=-0.598412649788538; | |
Leb_Grid_XYZW[ 421][2]=-0.780320742479920; | |
Leb_Grid_XYZW[ 421][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 422][0]= 0.181664084036021; | |
Leb_Grid_XYZW[ 422][1]= 0.780320742479920; | |
Leb_Grid_XYZW[ 422][2]= 0.598412649788538; | |
Leb_Grid_XYZW[ 422][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 423][0]=-0.181664084036021; | |
Leb_Grid_XYZW[ 423][1]= 0.780320742479920; | |
Leb_Grid_XYZW[ 423][2]= 0.598412649788538; | |
Leb_Grid_XYZW[ 423][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 424][0]= 0.181664084036021; | |
Leb_Grid_XYZW[ 424][1]=-0.780320742479920; | |
Leb_Grid_XYZW[ 424][2]= 0.598412649788538; | |
Leb_Grid_XYZW[ 424][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 425][0]=-0.181664084036021; | |
Leb_Grid_XYZW[ 425][1]=-0.780320742479920; | |
Leb_Grid_XYZW[ 425][2]= 0.598412649788538; | |
Leb_Grid_XYZW[ 425][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 426][0]= 0.181664084036021; | |
Leb_Grid_XYZW[ 426][1]= 0.780320742479920; | |
Leb_Grid_XYZW[ 426][2]=-0.598412649788538; | |
Leb_Grid_XYZW[ 426][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 427][0]=-0.181664084036021; | |
Leb_Grid_XYZW[ 427][1]= 0.780320742479920; | |
Leb_Grid_XYZW[ 427][2]=-0.598412649788538; | |
Leb_Grid_XYZW[ 427][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 428][0]= 0.181664084036021; | |
Leb_Grid_XYZW[ 428][1]=-0.780320742479920; | |
Leb_Grid_XYZW[ 428][2]=-0.598412649788538; | |
Leb_Grid_XYZW[ 428][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 429][0]=-0.181664084036021; | |
Leb_Grid_XYZW[ 429][1]=-0.780320742479920; | |
Leb_Grid_XYZW[ 429][2]=-0.598412649788538; | |
Leb_Grid_XYZW[ 429][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 430][0]= 0.780320742479920; | |
Leb_Grid_XYZW[ 430][1]= 0.598412649788538; | |
Leb_Grid_XYZW[ 430][2]= 0.181664084036021; | |
Leb_Grid_XYZW[ 430][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 431][0]=-0.780320742479920; | |
Leb_Grid_XYZW[ 431][1]= 0.598412649788538; | |
Leb_Grid_XYZW[ 431][2]= 0.181664084036021; | |
Leb_Grid_XYZW[ 431][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 432][0]= 0.780320742479920; | |
Leb_Grid_XYZW[ 432][1]=-0.598412649788538; | |
Leb_Grid_XYZW[ 432][2]= 0.181664084036021; | |
Leb_Grid_XYZW[ 432][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 433][0]=-0.780320742479920; | |
Leb_Grid_XYZW[ 433][1]=-0.598412649788538; | |
Leb_Grid_XYZW[ 433][2]= 0.181664084036021; | |
Leb_Grid_XYZW[ 433][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 434][0]= 0.780320742479920; | |
Leb_Grid_XYZW[ 434][1]= 0.598412649788538; | |
Leb_Grid_XYZW[ 434][2]=-0.181664084036021; | |
Leb_Grid_XYZW[ 434][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 435][0]=-0.780320742479920; | |
Leb_Grid_XYZW[ 435][1]= 0.598412649788538; | |
Leb_Grid_XYZW[ 435][2]=-0.181664084036021; | |
Leb_Grid_XYZW[ 435][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 436][0]= 0.780320742479920; | |
Leb_Grid_XYZW[ 436][1]=-0.598412649788538; | |
Leb_Grid_XYZW[ 436][2]=-0.181664084036021; | |
Leb_Grid_XYZW[ 436][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 437][0]=-0.780320742479920; | |
Leb_Grid_XYZW[ 437][1]=-0.598412649788538; | |
Leb_Grid_XYZW[ 437][2]=-0.181664084036021; | |
Leb_Grid_XYZW[ 437][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 438][0]= 0.780320742479920; | |
Leb_Grid_XYZW[ 438][1]= 0.181664084036021; | |
Leb_Grid_XYZW[ 438][2]= 0.598412649788538; | |
Leb_Grid_XYZW[ 438][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 439][0]=-0.780320742479920; | |
Leb_Grid_XYZW[ 439][1]= 0.181664084036021; | |
Leb_Grid_XYZW[ 439][2]= 0.598412649788538; | |
Leb_Grid_XYZW[ 439][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 440][0]= 0.780320742479920; | |
Leb_Grid_XYZW[ 440][1]=-0.181664084036021; | |
Leb_Grid_XYZW[ 440][2]= 0.598412649788538; | |
Leb_Grid_XYZW[ 440][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 441][0]=-0.780320742479920; | |
Leb_Grid_XYZW[ 441][1]=-0.181664084036021; | |
Leb_Grid_XYZW[ 441][2]= 0.598412649788538; | |
Leb_Grid_XYZW[ 441][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 442][0]= 0.780320742479920; | |
Leb_Grid_XYZW[ 442][1]= 0.181664084036021; | |
Leb_Grid_XYZW[ 442][2]=-0.598412649788538; | |
Leb_Grid_XYZW[ 442][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 443][0]=-0.780320742479920; | |
Leb_Grid_XYZW[ 443][1]= 0.181664084036021; | |
Leb_Grid_XYZW[ 443][2]=-0.598412649788538; | |
Leb_Grid_XYZW[ 443][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 444][0]= 0.780320742479920; | |
Leb_Grid_XYZW[ 444][1]=-0.181664084036021; | |
Leb_Grid_XYZW[ 444][2]=-0.598412649788538; | |
Leb_Grid_XYZW[ 444][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 445][0]=-0.780320742479920; | |
Leb_Grid_XYZW[ 445][1]=-0.181664084036021; | |
Leb_Grid_XYZW[ 445][2]=-0.598412649788538; | |
Leb_Grid_XYZW[ 445][3]= 0.001849830560444; | |
Leb_Grid_XYZW[ 446][0]= 0.379103540769556; | |
Leb_Grid_XYZW[ 446][1]= 0.172079522565688; | |
Leb_Grid_XYZW[ 446][2]= 0.909213475092374; | |
Leb_Grid_XYZW[ 446][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 447][0]=-0.379103540769556; | |
Leb_Grid_XYZW[ 447][1]= 0.172079522565688; | |
Leb_Grid_XYZW[ 447][2]= 0.909213475092374; | |
Leb_Grid_XYZW[ 447][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 448][0]= 0.379103540769556; | |
Leb_Grid_XYZW[ 448][1]=-0.172079522565688; | |
Leb_Grid_XYZW[ 448][2]= 0.909213475092374; | |
Leb_Grid_XYZW[ 448][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 449][0]=-0.379103540769556; | |
Leb_Grid_XYZW[ 449][1]=-0.172079522565688; | |
Leb_Grid_XYZW[ 449][2]= 0.909213475092374; | |
Leb_Grid_XYZW[ 449][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 450][0]= 0.379103540769556; | |
Leb_Grid_XYZW[ 450][1]= 0.172079522565688; | |
Leb_Grid_XYZW[ 450][2]=-0.909213475092374; | |
Leb_Grid_XYZW[ 450][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 451][0]=-0.379103540769556; | |
Leb_Grid_XYZW[ 451][1]= 0.172079522565688; | |
Leb_Grid_XYZW[ 451][2]=-0.909213475092374; | |
Leb_Grid_XYZW[ 451][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 452][0]= 0.379103540769556; | |
Leb_Grid_XYZW[ 452][1]=-0.172079522565688; | |
Leb_Grid_XYZW[ 452][2]=-0.909213475092374; | |
Leb_Grid_XYZW[ 452][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 453][0]=-0.379103540769556; | |
Leb_Grid_XYZW[ 453][1]=-0.172079522565688; | |
Leb_Grid_XYZW[ 453][2]=-0.909213475092374; | |
Leb_Grid_XYZW[ 453][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 454][0]= 0.379103540769556; | |
Leb_Grid_XYZW[ 454][1]= 0.909213475092374; | |
Leb_Grid_XYZW[ 454][2]= 0.172079522565688; | |
Leb_Grid_XYZW[ 454][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 455][0]=-0.379103540769556; | |
Leb_Grid_XYZW[ 455][1]= 0.909213475092374; | |
Leb_Grid_XYZW[ 455][2]= 0.172079522565688; | |
Leb_Grid_XYZW[ 455][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 456][0]= 0.379103540769556; | |
Leb_Grid_XYZW[ 456][1]=-0.909213475092374; | |
Leb_Grid_XYZW[ 456][2]= 0.172079522565688; | |
Leb_Grid_XYZW[ 456][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 457][0]=-0.379103540769556; | |
Leb_Grid_XYZW[ 457][1]=-0.909213475092374; | |
Leb_Grid_XYZW[ 457][2]= 0.172079522565688; | |
Leb_Grid_XYZW[ 457][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 458][0]= 0.379103540769556; | |
Leb_Grid_XYZW[ 458][1]= 0.909213475092374; | |
Leb_Grid_XYZW[ 458][2]=-0.172079522565688; | |
Leb_Grid_XYZW[ 458][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 459][0]=-0.379103540769556; | |
Leb_Grid_XYZW[ 459][1]= 0.909213475092374; | |
Leb_Grid_XYZW[ 459][2]=-0.172079522565688; | |
Leb_Grid_XYZW[ 459][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 460][0]= 0.379103540769556; | |
Leb_Grid_XYZW[ 460][1]=-0.909213475092374; | |
Leb_Grid_XYZW[ 460][2]=-0.172079522565688; | |
Leb_Grid_XYZW[ 460][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 461][0]=-0.379103540769556; | |
Leb_Grid_XYZW[ 461][1]=-0.909213475092374; | |
Leb_Grid_XYZW[ 461][2]=-0.172079522565688; | |
Leb_Grid_XYZW[ 461][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 462][0]= 0.172079522565688; | |
Leb_Grid_XYZW[ 462][1]= 0.379103540769556; | |
Leb_Grid_XYZW[ 462][2]= 0.909213475092374; | |
Leb_Grid_XYZW[ 462][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 463][0]=-0.172079522565688; | |
Leb_Grid_XYZW[ 463][1]= 0.379103540769556; | |
Leb_Grid_XYZW[ 463][2]= 0.909213475092374; | |
Leb_Grid_XYZW[ 463][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 464][0]= 0.172079522565688; | |
Leb_Grid_XYZW[ 464][1]=-0.379103540769556; | |
Leb_Grid_XYZW[ 464][2]= 0.909213475092374; | |
Leb_Grid_XYZW[ 464][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 465][0]=-0.172079522565688; | |
Leb_Grid_XYZW[ 465][1]=-0.379103540769556; | |
Leb_Grid_XYZW[ 465][2]= 0.909213475092374; | |
Leb_Grid_XYZW[ 465][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 466][0]= 0.172079522565688; | |
Leb_Grid_XYZW[ 466][1]= 0.379103540769556; | |
Leb_Grid_XYZW[ 466][2]=-0.909213475092374; | |
Leb_Grid_XYZW[ 466][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 467][0]=-0.172079522565688; | |
Leb_Grid_XYZW[ 467][1]= 0.379103540769556; | |
Leb_Grid_XYZW[ 467][2]=-0.909213475092374; | |
Leb_Grid_XYZW[ 467][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 468][0]= 0.172079522565688; | |
Leb_Grid_XYZW[ 468][1]=-0.379103540769556; | |
Leb_Grid_XYZW[ 468][2]=-0.909213475092374; | |
Leb_Grid_XYZW[ 468][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 469][0]=-0.172079522565688; | |
Leb_Grid_XYZW[ 469][1]=-0.379103540769556; | |
Leb_Grid_XYZW[ 469][2]=-0.909213475092374; | |
Leb_Grid_XYZW[ 469][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 470][0]= 0.172079522565688; | |
Leb_Grid_XYZW[ 470][1]= 0.909213475092374; | |
Leb_Grid_XYZW[ 470][2]= 0.379103540769556; | |
Leb_Grid_XYZW[ 470][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 471][0]=-0.172079522565688; | |
Leb_Grid_XYZW[ 471][1]= 0.909213475092374; | |
Leb_Grid_XYZW[ 471][2]= 0.379103540769556; | |
Leb_Grid_XYZW[ 471][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 472][0]= 0.172079522565688; | |
Leb_Grid_XYZW[ 472][1]=-0.909213475092374; | |
Leb_Grid_XYZW[ 472][2]= 0.379103540769556; | |
Leb_Grid_XYZW[ 472][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 473][0]=-0.172079522565688; | |
Leb_Grid_XYZW[ 473][1]=-0.909213475092374; | |
Leb_Grid_XYZW[ 473][2]= 0.379103540769556; | |
Leb_Grid_XYZW[ 473][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 474][0]= 0.172079522565688; | |
Leb_Grid_XYZW[ 474][1]= 0.909213475092374; | |
Leb_Grid_XYZW[ 474][2]=-0.379103540769556; | |
Leb_Grid_XYZW[ 474][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 475][0]=-0.172079522565688; | |
Leb_Grid_XYZW[ 475][1]= 0.909213475092374; | |
Leb_Grid_XYZW[ 475][2]=-0.379103540769556; | |
Leb_Grid_XYZW[ 475][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 476][0]= 0.172079522565688; | |
Leb_Grid_XYZW[ 476][1]=-0.909213475092374; | |
Leb_Grid_XYZW[ 476][2]=-0.379103540769556; | |
Leb_Grid_XYZW[ 476][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 477][0]=-0.172079522565688; | |
Leb_Grid_XYZW[ 477][1]=-0.909213475092374; | |
Leb_Grid_XYZW[ 477][2]=-0.379103540769556; | |
Leb_Grid_XYZW[ 477][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 478][0]= 0.909213475092374; | |
Leb_Grid_XYZW[ 478][1]= 0.379103540769556; | |
Leb_Grid_XYZW[ 478][2]= 0.172079522565688; | |
Leb_Grid_XYZW[ 478][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 479][0]=-0.909213475092374; | |
Leb_Grid_XYZW[ 479][1]= 0.379103540769556; | |
Leb_Grid_XYZW[ 479][2]= 0.172079522565688; | |
Leb_Grid_XYZW[ 479][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 480][0]= 0.909213475092374; | |
Leb_Grid_XYZW[ 480][1]=-0.379103540769556; | |
Leb_Grid_XYZW[ 480][2]= 0.172079522565688; | |
Leb_Grid_XYZW[ 480][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 481][0]=-0.909213475092374; | |
Leb_Grid_XYZW[ 481][1]=-0.379103540769556; | |
Leb_Grid_XYZW[ 481][2]= 0.172079522565688; | |
Leb_Grid_XYZW[ 481][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 482][0]= 0.909213475092374; | |
Leb_Grid_XYZW[ 482][1]= 0.379103540769556; | |
Leb_Grid_XYZW[ 482][2]=-0.172079522565688; | |
Leb_Grid_XYZW[ 482][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 483][0]=-0.909213475092374; | |
Leb_Grid_XYZW[ 483][1]= 0.379103540769556; | |
Leb_Grid_XYZW[ 483][2]=-0.172079522565688; | |
Leb_Grid_XYZW[ 483][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 484][0]= 0.909213475092374; | |
Leb_Grid_XYZW[ 484][1]=-0.379103540769556; | |
Leb_Grid_XYZW[ 484][2]=-0.172079522565688; | |
Leb_Grid_XYZW[ 484][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 485][0]=-0.909213475092374; | |
Leb_Grid_XYZW[ 485][1]=-0.379103540769556; | |
Leb_Grid_XYZW[ 485][2]=-0.172079522565688; | |
Leb_Grid_XYZW[ 485][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 486][0]= 0.909213475092374; | |
Leb_Grid_XYZW[ 486][1]= 0.172079522565688; | |
Leb_Grid_XYZW[ 486][2]= 0.379103540769556; | |
Leb_Grid_XYZW[ 486][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 487][0]=-0.909213475092374; | |
Leb_Grid_XYZW[ 487][1]= 0.172079522565688; | |
Leb_Grid_XYZW[ 487][2]= 0.379103540769556; | |
Leb_Grid_XYZW[ 487][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 488][0]= 0.909213475092374; | |
Leb_Grid_XYZW[ 488][1]=-0.172079522565688; | |
Leb_Grid_XYZW[ 488][2]= 0.379103540769556; | |
Leb_Grid_XYZW[ 488][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 489][0]=-0.909213475092374; | |
Leb_Grid_XYZW[ 489][1]=-0.172079522565688; | |
Leb_Grid_XYZW[ 489][2]= 0.379103540769556; | |
Leb_Grid_XYZW[ 489][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 490][0]= 0.909213475092374; | |
Leb_Grid_XYZW[ 490][1]= 0.172079522565688; | |
Leb_Grid_XYZW[ 490][2]=-0.379103540769556; | |
Leb_Grid_XYZW[ 490][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 491][0]=-0.909213475092374; | |
Leb_Grid_XYZW[ 491][1]= 0.172079522565688; | |
Leb_Grid_XYZW[ 491][2]=-0.379103540769556; | |
Leb_Grid_XYZW[ 491][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 492][0]= 0.909213475092374; | |
Leb_Grid_XYZW[ 492][1]=-0.172079522565688; | |
Leb_Grid_XYZW[ 492][2]=-0.379103540769556; | |
Leb_Grid_XYZW[ 492][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 493][0]=-0.909213475092374; | |
Leb_Grid_XYZW[ 493][1]=-0.172079522565688; | |
Leb_Grid_XYZW[ 493][2]=-0.379103540769556; | |
Leb_Grid_XYZW[ 493][3]= 0.001713904507107; | |
Leb_Grid_XYZW[ 494][0]= 0.277867319058624; | |
Leb_Grid_XYZW[ 494][1]= 0.082130215819325; | |
Leb_Grid_XYZW[ 494][2]= 0.957102074310073; | |
Leb_Grid_XYZW[ 494][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 495][0]=-0.277867319058624; | |
Leb_Grid_XYZW[ 495][1]= 0.082130215819325; | |
Leb_Grid_XYZW[ 495][2]= 0.957102074310073; | |
Leb_Grid_XYZW[ 495][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 496][0]= 0.277867319058624; | |
Leb_Grid_XYZW[ 496][1]=-0.082130215819325; | |
Leb_Grid_XYZW[ 496][2]= 0.957102074310073; | |
Leb_Grid_XYZW[ 496][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 497][0]=-0.277867319058624; | |
Leb_Grid_XYZW[ 497][1]=-0.082130215819325; | |
Leb_Grid_XYZW[ 497][2]= 0.957102074310073; | |
Leb_Grid_XYZW[ 497][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 498][0]= 0.277867319058624; | |
Leb_Grid_XYZW[ 498][1]= 0.082130215819325; | |
Leb_Grid_XYZW[ 498][2]=-0.957102074310073; | |
Leb_Grid_XYZW[ 498][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 499][0]=-0.277867319058624; | |
Leb_Grid_XYZW[ 499][1]= 0.082130215819325; | |
Leb_Grid_XYZW[ 499][2]=-0.957102074310073; | |
Leb_Grid_XYZW[ 499][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 500][0]= 0.277867319058624; | |
Leb_Grid_XYZW[ 500][1]=-0.082130215819325; | |
Leb_Grid_XYZW[ 500][2]=-0.957102074310073; | |
Leb_Grid_XYZW[ 500][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 501][0]=-0.277867319058624; | |
Leb_Grid_XYZW[ 501][1]=-0.082130215819325; | |
Leb_Grid_XYZW[ 501][2]=-0.957102074310073; | |
Leb_Grid_XYZW[ 501][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 502][0]= 0.277867319058624; | |
Leb_Grid_XYZW[ 502][1]= 0.957102074310073; | |
Leb_Grid_XYZW[ 502][2]= 0.082130215819325; | |
Leb_Grid_XYZW[ 502][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 503][0]=-0.277867319058624; | |
Leb_Grid_XYZW[ 503][1]= 0.957102074310073; | |
Leb_Grid_XYZW[ 503][2]= 0.082130215819325; | |
Leb_Grid_XYZW[ 503][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 504][0]= 0.277867319058624; | |
Leb_Grid_XYZW[ 504][1]=-0.957102074310073; | |
Leb_Grid_XYZW[ 504][2]= 0.082130215819325; | |
Leb_Grid_XYZW[ 504][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 505][0]=-0.277867319058624; | |
Leb_Grid_XYZW[ 505][1]=-0.957102074310073; | |
Leb_Grid_XYZW[ 505][2]= 0.082130215819325; | |
Leb_Grid_XYZW[ 505][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 506][0]= 0.277867319058624; | |
Leb_Grid_XYZW[ 506][1]= 0.957102074310073; | |
Leb_Grid_XYZW[ 506][2]=-0.082130215819325; | |
Leb_Grid_XYZW[ 506][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 507][0]=-0.277867319058624; | |
Leb_Grid_XYZW[ 507][1]= 0.957102074310073; | |
Leb_Grid_XYZW[ 507][2]=-0.082130215819325; | |
Leb_Grid_XYZW[ 507][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 508][0]= 0.277867319058624; | |
Leb_Grid_XYZW[ 508][1]=-0.957102074310073; | |
Leb_Grid_XYZW[ 508][2]=-0.082130215819325; | |
Leb_Grid_XYZW[ 508][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 509][0]=-0.277867319058624; | |
Leb_Grid_XYZW[ 509][1]=-0.957102074310073; | |
Leb_Grid_XYZW[ 509][2]=-0.082130215819325; | |
Leb_Grid_XYZW[ 509][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 510][0]= 0.082130215819325; | |
Leb_Grid_XYZW[ 510][1]= 0.277867319058624; | |
Leb_Grid_XYZW[ 510][2]= 0.957102074310073; | |
Leb_Grid_XYZW[ 510][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 511][0]=-0.082130215819325; | |
Leb_Grid_XYZW[ 511][1]= 0.277867319058624; | |
Leb_Grid_XYZW[ 511][2]= 0.957102074310073; | |
Leb_Grid_XYZW[ 511][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 512][0]= 0.082130215819325; | |
Leb_Grid_XYZW[ 512][1]=-0.277867319058624; | |
Leb_Grid_XYZW[ 512][2]= 0.957102074310073; | |
Leb_Grid_XYZW[ 512][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 513][0]=-0.082130215819325; | |
Leb_Grid_XYZW[ 513][1]=-0.277867319058624; | |
Leb_Grid_XYZW[ 513][2]= 0.957102074310073; | |
Leb_Grid_XYZW[ 513][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 514][0]= 0.082130215819325; | |
Leb_Grid_XYZW[ 514][1]= 0.277867319058624; | |
Leb_Grid_XYZW[ 514][2]=-0.957102074310073; | |
Leb_Grid_XYZW[ 514][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 515][0]=-0.082130215819325; | |
Leb_Grid_XYZW[ 515][1]= 0.277867319058624; | |
Leb_Grid_XYZW[ 515][2]=-0.957102074310073; | |
Leb_Grid_XYZW[ 515][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 516][0]= 0.082130215819325; | |
Leb_Grid_XYZW[ 516][1]=-0.277867319058624; | |
Leb_Grid_XYZW[ 516][2]=-0.957102074310073; | |
Leb_Grid_XYZW[ 516][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 517][0]=-0.082130215819325; | |
Leb_Grid_XYZW[ 517][1]=-0.277867319058624; | |
Leb_Grid_XYZW[ 517][2]=-0.957102074310073; | |
Leb_Grid_XYZW[ 517][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 518][0]= 0.082130215819325; | |
Leb_Grid_XYZW[ 518][1]= 0.957102074310073; | |
Leb_Grid_XYZW[ 518][2]= 0.277867319058624; | |
Leb_Grid_XYZW[ 518][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 519][0]=-0.082130215819325; | |
Leb_Grid_XYZW[ 519][1]= 0.957102074310073; | |
Leb_Grid_XYZW[ 519][2]= 0.277867319058624; | |
Leb_Grid_XYZW[ 519][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 520][0]= 0.082130215819325; | |
Leb_Grid_XYZW[ 520][1]=-0.957102074310073; | |
Leb_Grid_XYZW[ 520][2]= 0.277867319058624; | |
Leb_Grid_XYZW[ 520][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 521][0]=-0.082130215819325; | |
Leb_Grid_XYZW[ 521][1]=-0.957102074310073; | |
Leb_Grid_XYZW[ 521][2]= 0.277867319058624; | |
Leb_Grid_XYZW[ 521][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 522][0]= 0.082130215819325; | |
Leb_Grid_XYZW[ 522][1]= 0.957102074310073; | |
Leb_Grid_XYZW[ 522][2]=-0.277867319058624; | |
Leb_Grid_XYZW[ 522][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 523][0]=-0.082130215819325; | |
Leb_Grid_XYZW[ 523][1]= 0.957102074310073; | |
Leb_Grid_XYZW[ 523][2]=-0.277867319058624; | |
Leb_Grid_XYZW[ 523][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 524][0]= 0.082130215819325; | |
Leb_Grid_XYZW[ 524][1]=-0.957102074310073; | |
Leb_Grid_XYZW[ 524][2]=-0.277867319058624; | |
Leb_Grid_XYZW[ 524][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 525][0]=-0.082130215819325; | |
Leb_Grid_XYZW[ 525][1]=-0.957102074310073; | |
Leb_Grid_XYZW[ 525][2]=-0.277867319058624; | |
Leb_Grid_XYZW[ 525][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 526][0]= 0.957102074310073; | |
Leb_Grid_XYZW[ 526][1]= 0.277867319058624; | |
Leb_Grid_XYZW[ 526][2]= 0.082130215819325; | |
Leb_Grid_XYZW[ 526][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 527][0]=-0.957102074310073; | |
Leb_Grid_XYZW[ 527][1]= 0.277867319058624; | |
Leb_Grid_XYZW[ 527][2]= 0.082130215819325; | |
Leb_Grid_XYZW[ 527][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 528][0]= 0.957102074310073; | |
Leb_Grid_XYZW[ 528][1]=-0.277867319058624; | |
Leb_Grid_XYZW[ 528][2]= 0.082130215819325; | |
Leb_Grid_XYZW[ 528][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 529][0]=-0.957102074310073; | |
Leb_Grid_XYZW[ 529][1]=-0.277867319058624; | |
Leb_Grid_XYZW[ 529][2]= 0.082130215819325; | |
Leb_Grid_XYZW[ 529][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 530][0]= 0.957102074310073; | |
Leb_Grid_XYZW[ 530][1]= 0.277867319058624; | |
Leb_Grid_XYZW[ 530][2]=-0.082130215819325; | |
Leb_Grid_XYZW[ 530][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 531][0]=-0.957102074310073; | |
Leb_Grid_XYZW[ 531][1]= 0.277867319058624; | |
Leb_Grid_XYZW[ 531][2]=-0.082130215819325; | |
Leb_Grid_XYZW[ 531][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 532][0]= 0.957102074310073; | |
Leb_Grid_XYZW[ 532][1]=-0.277867319058624; | |
Leb_Grid_XYZW[ 532][2]=-0.082130215819325; | |
Leb_Grid_XYZW[ 532][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 533][0]=-0.957102074310073; | |
Leb_Grid_XYZW[ 533][1]=-0.277867319058624; | |
Leb_Grid_XYZW[ 533][2]=-0.082130215819325; | |
Leb_Grid_XYZW[ 533][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 534][0]= 0.957102074310073; | |
Leb_Grid_XYZW[ 534][1]= 0.082130215819325; | |
Leb_Grid_XYZW[ 534][2]= 0.277867319058624; | |
Leb_Grid_XYZW[ 534][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 535][0]=-0.957102074310073; | |
Leb_Grid_XYZW[ 535][1]= 0.082130215819325; | |
Leb_Grid_XYZW[ 535][2]= 0.277867319058624; | |
Leb_Grid_XYZW[ 535][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 536][0]= 0.957102074310073; | |
Leb_Grid_XYZW[ 536][1]=-0.082130215819325; | |
Leb_Grid_XYZW[ 536][2]= 0.277867319058624; | |
Leb_Grid_XYZW[ 536][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 537][0]=-0.957102074310073; | |
Leb_Grid_XYZW[ 537][1]=-0.082130215819325; | |
Leb_Grid_XYZW[ 537][2]= 0.277867319058624; | |
Leb_Grid_XYZW[ 537][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 538][0]= 0.957102074310073; | |
Leb_Grid_XYZW[ 538][1]= 0.082130215819325; | |
Leb_Grid_XYZW[ 538][2]=-0.277867319058624; | |
Leb_Grid_XYZW[ 538][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 539][0]=-0.957102074310073; | |
Leb_Grid_XYZW[ 539][1]= 0.082130215819325; | |
Leb_Grid_XYZW[ 539][2]=-0.277867319058624; | |
Leb_Grid_XYZW[ 539][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 540][0]= 0.957102074310073; | |
Leb_Grid_XYZW[ 540][1]=-0.082130215819325; | |
Leb_Grid_XYZW[ 540][2]=-0.277867319058624; | |
Leb_Grid_XYZW[ 540][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 541][0]=-0.957102074310073; | |
Leb_Grid_XYZW[ 541][1]=-0.082130215819325; | |
Leb_Grid_XYZW[ 541][2]=-0.277867319058624; | |
Leb_Grid_XYZW[ 541][3]= 0.001555213603397; | |
Leb_Grid_XYZW[ 542][0]= 0.503356427107512; | |
Leb_Grid_XYZW[ 542][1]= 0.089992058420749; | |
Leb_Grid_XYZW[ 542][2]= 0.859379855890721; | |
Leb_Grid_XYZW[ 542][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 543][0]=-0.503356427107512; | |
Leb_Grid_XYZW[ 543][1]= 0.089992058420749; | |
Leb_Grid_XYZW[ 543][2]= 0.859379855890721; | |
Leb_Grid_XYZW[ 543][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 544][0]= 0.503356427107512; | |
Leb_Grid_XYZW[ 544][1]=-0.089992058420749; | |
Leb_Grid_XYZW[ 544][2]= 0.859379855890721; | |
Leb_Grid_XYZW[ 544][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 545][0]=-0.503356427107512; | |
Leb_Grid_XYZW[ 545][1]=-0.089992058420749; | |
Leb_Grid_XYZW[ 545][2]= 0.859379855890721; | |
Leb_Grid_XYZW[ 545][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 546][0]= 0.503356427107512; | |
Leb_Grid_XYZW[ 546][1]= 0.089992058420749; | |
Leb_Grid_XYZW[ 546][2]=-0.859379855890721; | |
Leb_Grid_XYZW[ 546][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 547][0]=-0.503356427107512; | |
Leb_Grid_XYZW[ 547][1]= 0.089992058420749; | |
Leb_Grid_XYZW[ 547][2]=-0.859379855890721; | |
Leb_Grid_XYZW[ 547][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 548][0]= 0.503356427107512; | |
Leb_Grid_XYZW[ 548][1]=-0.089992058420749; | |
Leb_Grid_XYZW[ 548][2]=-0.859379855890721; | |
Leb_Grid_XYZW[ 548][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 549][0]=-0.503356427107512; | |
Leb_Grid_XYZW[ 549][1]=-0.089992058420749; | |
Leb_Grid_XYZW[ 549][2]=-0.859379855890721; | |
Leb_Grid_XYZW[ 549][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 550][0]= 0.503356427107512; | |
Leb_Grid_XYZW[ 550][1]= 0.859379855890721; | |
Leb_Grid_XYZW[ 550][2]= 0.089992058420749; | |
Leb_Grid_XYZW[ 550][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 551][0]=-0.503356427107512; | |
Leb_Grid_XYZW[ 551][1]= 0.859379855890721; | |
Leb_Grid_XYZW[ 551][2]= 0.089992058420749; | |
Leb_Grid_XYZW[ 551][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 552][0]= 0.503356427107512; | |
Leb_Grid_XYZW[ 552][1]=-0.859379855890721; | |
Leb_Grid_XYZW[ 552][2]= 0.089992058420749; | |
Leb_Grid_XYZW[ 552][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 553][0]=-0.503356427107512; | |
Leb_Grid_XYZW[ 553][1]=-0.859379855890721; | |
Leb_Grid_XYZW[ 553][2]= 0.089992058420749; | |
Leb_Grid_XYZW[ 553][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 554][0]= 0.503356427107512; | |
Leb_Grid_XYZW[ 554][1]= 0.859379855890721; | |
Leb_Grid_XYZW[ 554][2]=-0.089992058420749; | |
Leb_Grid_XYZW[ 554][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 555][0]=-0.503356427107512; | |
Leb_Grid_XYZW[ 555][1]= 0.859379855890721; | |
Leb_Grid_XYZW[ 555][2]=-0.089992058420749; | |
Leb_Grid_XYZW[ 555][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 556][0]= 0.503356427107512; | |
Leb_Grid_XYZW[ 556][1]=-0.859379855890721; | |
Leb_Grid_XYZW[ 556][2]=-0.089992058420749; | |
Leb_Grid_XYZW[ 556][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 557][0]=-0.503356427107512; | |
Leb_Grid_XYZW[ 557][1]=-0.859379855890721; | |
Leb_Grid_XYZW[ 557][2]=-0.089992058420749; | |
Leb_Grid_XYZW[ 557][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 558][0]= 0.089992058420749; | |
Leb_Grid_XYZW[ 558][1]= 0.503356427107512; | |
Leb_Grid_XYZW[ 558][2]= 0.859379855890721; | |
Leb_Grid_XYZW[ 558][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 559][0]=-0.089992058420749; | |
Leb_Grid_XYZW[ 559][1]= 0.503356427107512; | |
Leb_Grid_XYZW[ 559][2]= 0.859379855890721; | |
Leb_Grid_XYZW[ 559][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 560][0]= 0.089992058420749; | |
Leb_Grid_XYZW[ 560][1]=-0.503356427107512; | |
Leb_Grid_XYZW[ 560][2]= 0.859379855890721; | |
Leb_Grid_XYZW[ 560][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 561][0]=-0.089992058420749; | |
Leb_Grid_XYZW[ 561][1]=-0.503356427107512; | |
Leb_Grid_XYZW[ 561][2]= 0.859379855890721; | |
Leb_Grid_XYZW[ 561][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 562][0]= 0.089992058420749; | |
Leb_Grid_XYZW[ 562][1]= 0.503356427107512; | |
Leb_Grid_XYZW[ 562][2]=-0.859379855890721; | |
Leb_Grid_XYZW[ 562][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 563][0]=-0.089992058420749; | |
Leb_Grid_XYZW[ 563][1]= 0.503356427107512; | |
Leb_Grid_XYZW[ 563][2]=-0.859379855890721; | |
Leb_Grid_XYZW[ 563][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 564][0]= 0.089992058420749; | |
Leb_Grid_XYZW[ 564][1]=-0.503356427107512; | |
Leb_Grid_XYZW[ 564][2]=-0.859379855890721; | |
Leb_Grid_XYZW[ 564][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 565][0]=-0.089992058420749; | |
Leb_Grid_XYZW[ 565][1]=-0.503356427107512; | |
Leb_Grid_XYZW[ 565][2]=-0.859379855890721; | |
Leb_Grid_XYZW[ 565][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 566][0]= 0.089992058420749; | |
Leb_Grid_XYZW[ 566][1]= 0.859379855890721; | |
Leb_Grid_XYZW[ 566][2]= 0.503356427107512; | |
Leb_Grid_XYZW[ 566][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 567][0]=-0.089992058420749; | |
Leb_Grid_XYZW[ 567][1]= 0.859379855890721; | |
Leb_Grid_XYZW[ 567][2]= 0.503356427107512; | |
Leb_Grid_XYZW[ 567][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 568][0]= 0.089992058420749; | |
Leb_Grid_XYZW[ 568][1]=-0.859379855890721; | |
Leb_Grid_XYZW[ 568][2]= 0.503356427107512; | |
Leb_Grid_XYZW[ 568][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 569][0]=-0.089992058420749; | |
Leb_Grid_XYZW[ 569][1]=-0.859379855890721; | |
Leb_Grid_XYZW[ 569][2]= 0.503356427107512; | |
Leb_Grid_XYZW[ 569][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 570][0]= 0.089992058420749; | |
Leb_Grid_XYZW[ 570][1]= 0.859379855890721; | |
Leb_Grid_XYZW[ 570][2]=-0.503356427107512; | |
Leb_Grid_XYZW[ 570][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 571][0]=-0.089992058420749; | |
Leb_Grid_XYZW[ 571][1]= 0.859379855890721; | |
Leb_Grid_XYZW[ 571][2]=-0.503356427107512; | |
Leb_Grid_XYZW[ 571][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 572][0]= 0.089992058420749; | |
Leb_Grid_XYZW[ 572][1]=-0.859379855890721; | |
Leb_Grid_XYZW[ 572][2]=-0.503356427107512; | |
Leb_Grid_XYZW[ 572][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 573][0]=-0.089992058420749; | |
Leb_Grid_XYZW[ 573][1]=-0.859379855890721; | |
Leb_Grid_XYZW[ 573][2]=-0.503356427107512; | |
Leb_Grid_XYZW[ 573][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 574][0]= 0.859379855890721; | |
Leb_Grid_XYZW[ 574][1]= 0.503356427107512; | |
Leb_Grid_XYZW[ 574][2]= 0.089992058420749; | |
Leb_Grid_XYZW[ 574][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 575][0]=-0.859379855890721; | |
Leb_Grid_XYZW[ 575][1]= 0.503356427107512; | |
Leb_Grid_XYZW[ 575][2]= 0.089992058420749; | |
Leb_Grid_XYZW[ 575][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 576][0]= 0.859379855890721; | |
Leb_Grid_XYZW[ 576][1]=-0.503356427107512; | |
Leb_Grid_XYZW[ 576][2]= 0.089992058420749; | |
Leb_Grid_XYZW[ 576][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 577][0]=-0.859379855890721; | |
Leb_Grid_XYZW[ 577][1]=-0.503356427107512; | |
Leb_Grid_XYZW[ 577][2]= 0.089992058420749; | |
Leb_Grid_XYZW[ 577][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 578][0]= 0.859379855890721; | |
Leb_Grid_XYZW[ 578][1]= 0.503356427107512; | |
Leb_Grid_XYZW[ 578][2]=-0.089992058420749; | |
Leb_Grid_XYZW[ 578][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 579][0]=-0.859379855890721; | |
Leb_Grid_XYZW[ 579][1]= 0.503356427107512; | |
Leb_Grid_XYZW[ 579][2]=-0.089992058420749; | |
Leb_Grid_XYZW[ 579][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 580][0]= 0.859379855890721; | |
Leb_Grid_XYZW[ 580][1]=-0.503356427107512; | |
Leb_Grid_XYZW[ 580][2]=-0.089992058420749; | |
Leb_Grid_XYZW[ 580][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 581][0]=-0.859379855890721; | |
Leb_Grid_XYZW[ 581][1]=-0.503356427107512; | |
Leb_Grid_XYZW[ 581][2]=-0.089992058420749; | |
Leb_Grid_XYZW[ 581][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 582][0]= 0.859379855890721; | |
Leb_Grid_XYZW[ 582][1]= 0.089992058420749; | |
Leb_Grid_XYZW[ 582][2]= 0.503356427107512; | |
Leb_Grid_XYZW[ 582][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 583][0]=-0.859379855890721; | |
Leb_Grid_XYZW[ 583][1]= 0.089992058420749; | |
Leb_Grid_XYZW[ 583][2]= 0.503356427107512; | |
Leb_Grid_XYZW[ 583][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 584][0]= 0.859379855890721; | |
Leb_Grid_XYZW[ 584][1]=-0.089992058420749; | |
Leb_Grid_XYZW[ 584][2]= 0.503356427107512; | |
Leb_Grid_XYZW[ 584][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 585][0]=-0.859379855890721; | |
Leb_Grid_XYZW[ 585][1]=-0.089992058420749; | |
Leb_Grid_XYZW[ 585][2]= 0.503356427107512; | |
Leb_Grid_XYZW[ 585][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 586][0]= 0.859379855890721; | |
Leb_Grid_XYZW[ 586][1]= 0.089992058420749; | |
Leb_Grid_XYZW[ 586][2]=-0.503356427107512; | |
Leb_Grid_XYZW[ 586][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 587][0]=-0.859379855890721; | |
Leb_Grid_XYZW[ 587][1]= 0.089992058420749; | |
Leb_Grid_XYZW[ 587][2]=-0.503356427107512; | |
Leb_Grid_XYZW[ 587][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 588][0]= 0.859379855890721; | |
Leb_Grid_XYZW[ 588][1]=-0.089992058420749; | |
Leb_Grid_XYZW[ 588][2]=-0.503356427107512; | |
Leb_Grid_XYZW[ 588][3]= 0.001802239128009; | |
Leb_Grid_XYZW[ 589][0]=-0.859379855890721; | |
Leb_Grid_XYZW[ 589][1]=-0.089992058420749; | |
Leb_Grid_XYZW[ 589][2]=-0.503356427107512; | |
Leb_Grid_XYZW[ 589][3]= 0.001802239128009; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment