1 #include "f77func.h"
2 #ifdef blaswrap
3 #define zgemm_ f2c_zgemm
4 #define zcopy_ f2c_zcopy
5 #endif
6 
7 #ifndef ___dcomplex_definition___
8 typedef struct { double r,i; } dcomplex;
9 #define ___dcomplex_definition___
10 #endif
11 
12 #define z_mul_inline(x,y,z) { z.r= x.r*y.r-x.i*y.i;  z.i = x.r * y.i + x.i*y.r; }
13 #define z_exp_inline(x,z) {double _t; _t=exp(x.r);  z.r = _t*cos(x.i); z.i = _t*sin(x.i); }
14 
15 #ifndef __sqr_definition___
16 #define sqr(x)   ( (x)*(x) )
17 #define __sqr_definition___
18 #endif
19 
20 
21 #ifndef Host_ID
22 #define Host_ID 0
23 #endif
24 
25 
26 #ifndef YOUSO10
27 #define YOUSO10 100
28 #endif
29 
30 #ifndef Shift_K_Point
31 #define Shift_K_Point    1.0e-6      /* disturbance for stabilization of eigenvalue routine */
32 #endif
33 
34 
35 #ifndef ___Type_Orbs_Grid_definition___
36 typedef float Type_Orbs_Grid; /* type of Orbs_Grid */
37 #define ___Type_Orbs_Grid_definition___
38 #endif
39 
40 
41 int Lapack_LU_Zinverse(int , dcomplex *);
42 
43 
44 
45 /*** TRAN_PROTOTYPES ***/
46 
47 /* TRAN_Allocate.c  */
48 void TRAN_Allocate_Atoms(
49     int atomnum
50 );
51 
52 /* TRAN_Allocate.c  */
53 void TRAN_Deallocate_Atoms( void );
54 
55 /* TRAN_Allocate.c  */
56 void TRAN_Allocate_Cregion(
57      MPI_Comm mpi_comm_level1,
58      int  SpinP_switch,
59      int atomnum,
60      int *WhatSpecies,
61      int *Spe_Total_CNO
62      ) ;
63 
64 /* TRAN_Allocate.c  */
65 void TRAN_Deallocate_Cregion(int SpinP_switch);
66 
67 /* in TRAN_Allocate.c  */
68 void TRAN_Allocate_Lead_Region( MPI_Comm mpi_comm_level1 );
69 
70 /* in TRAN_Allocate.c  */
71 void TRAN_Deallocate_Lead_Region();
72 
73 /* TRAN_Deallocate_Electrode_Grid.c */
74 void TRAN_Deallocate_Electrode_Grid(int Ngrid2);
75 
76 /* TRAN_Deallocate_RestartFile.c */
77 void TRAN_Deallocate_RestartFile(char *position);
78 
79 
80 /* TRAN_Apply_Bias2e.c  */
81 void  TRAN_Apply_Bias2e(
82        MPI_Comm comm1,
83        int side,
84        double voltage,
85        double TRAN_eV2Hartree,
86        int SpinP_switch,
87        int atomnum,
88        int *WhatSpecies,
89        int *Spe_Total_CNO,
90        int *FNAN,
91        int **natn,
92        int Ngrid1,
93        int Ngrid2,
94        int Ngrid3,
95         double ****OLP,
96         double *ChemP,
97         double *****H,
98         double *dVHart_Grid
99 );
100 
101 /* TRAN_Calc_CentGreen.c  */
102 void TRAN_Calc_CentGreen(
103                       dcomplex w,
104                       int nc,
105                       dcomplex *sigmaL,
106                       dcomplex *sigmaR,
107                       dcomplex *HCC,
108                       dcomplex *SCC,
109                       dcomplex *GC
110                       );
111 
112 /* TRAN_Calc_CentGreenLesser.c  */
113 void TRAN_Calc_CentGreenLesser(
114                       /* input */
115                       dcomplex w,
116                       double ChemP_e[2],
117                       int nc,
118                       int Order_Lead_Side[2],
119                       dcomplex *SigmaL,
120                       dcomplex *SigmaR,
121                       dcomplex *GC,
122                       dcomplex *HCCk,
123                       dcomplex *SCC,
124 
125                       /* work, nc*nc */
126                       dcomplex *v1,
127                       dcomplex *v2,
128 
129                       /*  output */
130                       dcomplex *Gless
131                       );
132 
133 
134 /* TRAN_Calc_GridBound.c  */
135 void TRAN_Calc_GridBound(MPI_Comm mpi_comm_level1,
136 			 int atomnum,
137 			 int *WhatSpecies,
138 			 double *Spe_Atom_Cut1,
139 			 int Ngrid1,
140 			 double *Grid_Origin,
141 			 double **Gxyz,
142 			 double tv[4][4],
143 			 double gtv[4][4],
144 			 double rgtv[4][4],
145 			 double Left_tv[4][4],
146 			 double Right_tv[4][4]);
147 
148 /* TRAN_Calc_OneTransmission.c  */
149 void TRAN_Calc_OneTransmission(
150    int nc,
151    dcomplex *SigmaL_R,   /* at w, changed when exit */
152    dcomplex *SigmaL_A,   /* at w, changed when exit */
153    dcomplex *SigmaR_R,   /* at w, changed when exit */
154    dcomplex *SigmaR_A,   /* at w, changed when exit */
155    dcomplex *GC_R,       /* at w, changed when exit */
156    dcomplex *GC_A,       /* at w, changed when exit */
157    dcomplex *v1,         /* work */
158    dcomplex *v2,         /* work */
159    dcomplex *value       /* output, transmission */
160    );
161 
162 
163 /* TRAN_Calc_OneTransmission2.c  */
164 void TRAN_Calc_OneTransmission2(
165 				dcomplex w,
166 				int nc,
167 				dcomplex *SigmaL,   /* at w, changed when exit */
168 				dcomplex *SigmaR,   /* at w, changed when exit */
169 				double *HCC,
170 				double *SCC,
171 				dcomplex *GR,       /* at w, changed when exit */
172 				dcomplex *v1,       /* work */
173 				dcomplex *v2,       /* work */
174 				dcomplex *value     /* output, transmission */
175 				);
176 
177 
178 /* TRAN_Calc_SelfEnergy.c  */
179 void TRAN_Calc_SelfEnergy(
180             dcomplex w,
181             int ne,
182             dcomplex *gr,
183             int nc,
184             dcomplex *hce,
185             dcomplex *sce,
186             dcomplex *sigma
187           );
188 
189 
190 /* TRAN_Calc_Hopping_G.c */
191 void TRAN_Calc_Hopping_G(
192                          /* input */
193 			 dcomplex w,
194 			 int ne,          /* size of electrode */
195 			 int nc,          /* size of central region */
196 			 dcomplex *gs,    /* surface green function of electrode, size=ne*ne */
197 			 dcomplex *gc,    /* green function of central region, size=nc*nc    */
198 			 dcomplex *hce,   /* e.g., HCL,    size=nc*ne */
199 			 dcomplex *sce,   /* e.g., SCL,    size=nc*ne */
200 
201                          /* output */
202 			 dcomplex *gh     /* e.g., GCL_R , size=nc*ne */
203 			 );
204 
205 
206 /* TRAN_Calc_SurfGreen.c  */
207 void TRAN_Calc_SurfGreen_direct(
208 				dcomplex w,
209 				int n,
210 				dcomplex *h00,
211 				dcomplex *h01,
212 				dcomplex *s00,
213 				dcomplex *s01,
214                                 int iteration_max,
215                                 double eps,
216 	 			dcomplex *gr
217 				);
218 
219 /* TRAN_Calc_Transmission.c  */
220 double TRAN_Calc_Transmission(
221 		int iter,
222 		int SpinP_switch,
223 		double *****nh,
224 		double *****ImNL,
225 		double ****CntOLP,
226 		int atomnum,
227 		int Matomnum,
228 		int *WhatSpecies,
229 		int *Spe_Total_CNO,
230 		int *FNAN,
231 		int **natn,
232 		int **ncn,
233 		int *M2G,
234 		int **atv_ijk,
235 		int *List_YOUSO
236 );
237 
238 
239 /* TRAN_Connect_Read_Density.c  */
240 void TRAN_Connect_Read_Density(
241     char *filename,
242     int SpinP_switch,
243     int Ngrid1,
244     int Ngrid2,
245     int Ngrid3,
246     double *ChemP,
247     double *minE,
248     double *dVHart_Grid,
249     double **Vpot_Grid,
250     double **Density_Grid
251 );
252 
253 /* TRAN_Connect_Read_Hamiltonian.c  */
254 /* *static
255  * void compare_and_print_error(char *buf,char *str,int val1,int val2);*/
256 /* TRAN_Connect_Read_Hamiltonian.c  */
257 void TRAN_Connect_Read_Hamiltonian(
258     char *filename,
259     int SpinP_switch,
260     int *WhatSpecies,
261     int *FNAN,
262     int **natn,
263     int **ncn,
264     int *Spe_Total_CNO,
265     double *****H,
266     double ****OLP
267 );
268 
269 /* TRAN_Credit.c  */
270 void TRAN_Credit(MPI_Comm comm1);
271 
272 /* TRAN_DFT.c  */
273 /* *static
274  * void TRAN_Set_CDM(
275  *    MPI_Comm comm1,
276  *    int spin,
277  *    int Matomnum,
278  *    int *M2G,
279  *    int *WhatSpecies,
280  *    int *Spe_Total_CNO,
281  *    int *MP,
282  *    int *FNAN,
283  *    int**natn,
284  *    dcomplex *v,
285  *    int NUM_c,
286  *    dcomplex w_weight,
287  *    int mode,
288  *    double *****CDM,
289  *    double *****EDM,
290  *    double ***TRAN_DecMulP,
291  *    double Eele0[2], double Eele1[2],
292  *    double ChemP_e0[2]
293  *);*/
294 /* TRAN_DFT.c  */
295 double TRAN_DFT(
296                 MPI_Comm comm1,
297                 int SucceedReadingDMfile,
298                 int level_stdout,
299 		int iter,
300 		int SpinP_switch,
301 		double *****nh,
302 		double *****ImNL,
303 		double ****CntOLP,
304 		int atomnum,
305 		int Matomnum,
306 		int *WhatSpecies,
307 		int *Spe_Total_CNO,
308 		int *FNAN,
309 		int **natn,
310 		int **ncn,
311 		int *M2G,
312 		int *G2ID,
313                 int *F_G2M,
314 		int **atv_ijk,
315 		int *List_YOUSO,
316 		double *****CDM,
317 		double *****EDM,
318                 double ***TRAN_DecMulP,
319 		double Eele0[2], double Eele1[2],
320                 double ChemP_e0[2]);
321 
322 /* TRAN_DFT_Dosout.c  */
323 double TRAN_DFT_Dosout(
324                 MPI_Comm comm1,
325                 int level_stdout,
326 		int iter,
327 		int SpinP_switch,
328 		double *****nh,
329 		double *****ImNL,
330 		double ****CntOLP,
331 		int atomnum,
332 		int Matomnum,
333 		int *WhatSpecies,
334 		int *Spe_Total_CNO,
335 		int *FNAN,
336 		int **natn,
337 		int **ncn,
338 		int *M2G,
339 		int *G2ID,
340 		int **atv_ijk,
341 		int *List_YOUSO,
342                 int **Spe_Num_CBasis,
343                 int SpeciesNum,
344                 char *filename,
345                 char *filepath,
346 		double *****CDM,
347 		double *****EDM,
348 		double Eele0[2], double Eele1[2])  ;
349 
350 /* TRAN_Distribute_Node.c  */
351 void TRAN_Distribute_Node(
352    int Start,int End,
353    int numprocs,
354    int *IDStart,
355    int *IDEnd
356  );
357 
358 /* TRAN_Distribute_Node.c  */
359 void TRAN_Distribute_Node_Idx(
360    int Start,int End,
361    int numprocs,
362    int eachiwmax,
363    int **Idxlist
364  );
365 
366 
367 /* TRAN_Input_std.c  */
368 void TRAN_Input_std(
369   MPI_Comm comm1,
370   int Solver,
371   int SpinP_switch,
372   char *filepath,
373   double kBvalue,
374   double TRAN_eV2Hartree,
375   double Electronic_Temperature,
376   int *output_hks
377 );
378 
379 /* TRAN_Input_std_Atoms.c  */
380 void TRAN_Input_std_Atoms(  MPI_Comm comm1, int Solver );
381 
382 
383 
384 /* TRAN_Output_HKS.c  */
385 int TRAN_Output_HKS(char *fileHKS);
386 
387 /* TRAN_Output_HKS_Write_Grid.c  */
388 void TRAN_Output_HKS_Write_Grid(
389 				MPI_Comm comm1,
390                                 int mode,
391 				int Ngrid1,
392 				int Ngrid2,
393 				int Ngrid3,
394 				double *data,
395 				double *data1,
396 				double *data2,
397 				FILE *fp
398 				);
399 
400 /* TRAN_Output_Trans_HS.c  */
401 /* revised by Y. Xiao for Noncollinear NEGF calculations */ /* iHNL is added */
402 void  TRAN_Output_Trans_HS(
403         MPI_Comm comm1,
404         int Solver,
405         int SpinP_switch,
406         double ChemP ,
407         double *****H,
408         double *****iHNL,
409         double *****OLP,
410         double *****H0,
411         int atomnum,
412         int SpeciesNum,
413         int *WhatSpecies,
414         int *Spe_Total_CNO,
415         int *FNAN,
416         int **natn,
417         int **ncn,
418         int *G2ID,
419         int **atv_ijk,
420         int Max_FSNAN,
421         double ScaleSize,
422         int *F_G2M,
423         int TCpyCell,
424         int *List_YOUSO,
425         char *filepath,
426         char *filename,
427         char *fname  );
428 /* until here  by Y. Xiao for Noncollinear NEGF calculations */
429 
430 /* TRAN_Output_Transmission.c  */
431 void TRAN_Output_Transmission(int SpinP_switch);
432 
433 /* TRAN_Add_Density_Lead.c  */
434 void TRAN_Add_Density_Lead(
435             MPI_Comm comm1,
436             int SpinP_switch,
437             int Ngrid1,
438             int Ngrid2,
439             int Ngrid3,
440             int My_NumGridB_AB,
441             double **Density_Grid_B);
442 
443 /* TRAN_Add_ADensity_Lead.c */
444 void TRAN_Add_ADensity_Lead(
445             MPI_Comm comm1,
446             int SpinP_switch,
447             int Ngrid1,
448             int Ngrid2,
449             int Ngrid3,
450             int My_NumGridB_AB,
451             double *ADensity_Grid_B);
452 
453 /* TRAN_Poisson.c  */
454 double TRAN_Poisson(double *ReRhok, double *ImRhok);
455 
456 /* FFT2D_Density.c  */
457 double FFT2D_Density(int den_flag,
458                      double *ReRhok, double *ImRhok);
459 
460 /* added by mari 08.12.2014 */
461 double FFT1D_Density(int den_flag,
462                      double *ReRhok, double *ImRhok,
463                      dcomplex ***VHart_Boundary_a,
464                      dcomplex **VHart_Boundary_b);
465 
466 /* Get_Value_inReal2D.c  */
467 void Get_Value_inReal2D(int complex_flag,
468                         double *ReVr, double *ImVr,
469                         double *ReVk, double *ImVk);
470 /* added by mari 18.12.2014 */
471 void Get_Value_inReal1D(int complex_flag,
472                         double *ReVr, double *ImVr,
473                         double *ReVk, double *ImVk);
474 
475 /* TRAN_Print.c  */
476 void TRAN_Print2_set_eps(double e1);
477 
478 /* TRAN_Print.c  */
479 void TRAN_Print2_set_max(int m1);
480 
481 /* TRAN_Print.c  */
482 void TRAN_Print2_dcomplex(char *name, int n1,int n2,dcomplex *gc);
483 
484 /* TRAN_Print.c  */
485 void TRAN_Print2_double(char *name, int n1,int n2,double *gc);
486 
487 /* TRAN_Print.c  */
488 void TRAN_Print2_dx_dcomplex(char *name, int n1,int dx1, int n2,int dx2, dcomplex *gc);
489 
490 /* TRAN_Print.c  */
491 void TRAN_Print2_dx_double(char *name, int n1,int dx1,int n2,int dx2,double *gc);
492 
493 /* TRAN_Print.c  */
494 void TRAN_FPrint2_double(char *name, int n1,int n2,double *gc);
495 
496 /* TRAN_Print.c  */
497 void TRAN_FPrint2_dcomplex(char *name, int n1,int n2,dcomplex *gc);
498 
499 /* TRAN_Print.c  */
500 void TRAN_FPrint2_binary_double(FILE *fp, int n1,int n2,double *gc);
501 
502 /* TRAN_Print_Grid.c  */
503 void TRAN_Print_Grid_Cell1(
504   char *filename,
505   int n1, int n2, int n3,
506    int *My_Cell1,
507    double *realgrid
508 );
509 
510 /* TRAN_Print_Grid.c  */
511 void TRAN_Print_Grid_Cell0(
512    char *filename,
513    double origin[4],
514    double gtv[4][4],
515    int Ngrid1, int Ngrid2, int Ngrid3s, int Ngrid3e,
516    double  R[4],
517    int *Cell0,
518    double *grid_value
519 );
520 
521 /* TRAN_Print_Grid.c  */
522 void TRAN_Print_Grid(
523    char *filename,
524    double origin[4],
525    double gtv[4][4],
526    int Ngrid1, int Ngrid2, int Ngrid3s, int Ngrid3e,
527    double  R[4],
528    double *grid_value
529 );
530 
531 /* TRAN_Print_Grid.c  */
532 void TRAN_Print_Grid_z(
533    char *filename,
534    double origin[4],
535    double gtv[4][4],
536    int Ngrid1, int Ngrid2, int Ngrid3s, int Ngrid3e,
537    double  R[4],
538    double *grid_value
539 );
540 
541 /* TRAN_Print_Grid.c  */
542 void TRAN_Print_Grid_c(
543    char *filenamer,
544    char *filenamei,
545    double origin[4],
546    double gtv[4][4],
547    int Ngrid1, int Ngrid2, int Ngrid3s, int Ngrid3e,
548    double  R[4],
549    dcomplex *grid_value
550 );
551 
552 /* TRAN_Print_Grid.c  */
553 void TRAN_Print_Grid_v(
554    char *filename,
555    double origin[4],
556    double gtv[4][4],
557    int Ngrid1, int Ngrid2, int Ngrid3s, int Ngrid3e,
558    double  R[4],
559    double ***grid_value
560 );
561 
562 /* TRAN_Print_Grid.c  */
563 void TRAN_Print_Grid_Startv(
564    char *filename,
565    int Ngrid1, int Ngrid2,  int Ngrid3,
566    int Start,
567    double ***grid_value
568 );
569 
570 /* TRAN_Read.c  */
571 void TRAN_Read_double(char *str, int n1,int n2, double *a);
572 
573 /* TRAN_Read.c  */
574 void TRAN_Read_dcomplex(char *str, int n1,int n2, dcomplex *a);
575 
576 /* TRAN_Read.c  */
577 void TRAN_FRead2_binary_double(FILE *fp, int n1, int n2, double *gc);
578 
579 /* TRAN_RestartFile.c  */
580 int TRAN_Input_HKS( MPI_Comm comm1, char *fileHKS);
581 
582 /* TRAN_RestartFile.c  */
583 int TRAN_RestartFile(MPI_Comm comm1, char *mode, char *position,char *filepath, char *filename);
584 
585 /* TRAN_Set_CentOverlap.c  */
586 void TRAN_Set_CentOverlap(
587 			   MPI_Comm comm1,
588 			   int job,
589 			   int SpinP_switch,
590                            double k2,
591                            double k3,
592                            int *order_GA,
593 			   double **H1,
594 			   double *S1,
595 			   double *****H,
596 			   double ****OLP,
597 			   int atomnum,
598 			   int Matomnum,
599  			   int *M2G,
600 			   int *G2ID,
601 			   int *WhatSpecies,
602 			   int *Spe_Total_CNO,
603 			   int *FNAN,
604 			   int **natn,
605 			   int **ncn,
606 			   int **atv_ijk
607 			   );
608 
609 /* TRAN_Set_Electrode_Grid.c  */
610 void TRAN_Set_Electrode_Grid(MPI_Comm comm1,
611                              int *TRAN_Poisson_flag2,
612 			     double *Grid_Origin,   /* origin of the grid */
613 			     double tv[4][4],       /* unit vector of the cell*/
614 			     double Left_tv[4][4],  /* unit vector  left */
615 			     double Right_tv[4][4], /* unit vector right */
616 			     double gtv[4][4],      /* unit vector of the grid point, which is gtv*integer */
617 			     int Ngrid1,
618 			     int Ngrid2,
619 			     int Ngrid3             /* # of c grid points */
620 			     );
621 
622 
623 /* TRAN_Set_Electrode_Grid.c  */
624 /* *static
625  * void  TRAN_FFT_Electrode_Grid(MPI_Comm comm1, int isign);*/
626 /* TRAN_Set_IntegPath.c  */
627 void TRAN_Set_IntegPath_Square(void);
628 
629 /* TRAN_Set_IntegPath.c  */
630 void      TRAN_Set_IntegPath_ThermalArc(void);
631 
632 /* TRAN_Set_IntegPath.c  */
633 void TRAN_Set_IntegPath( MPI_Comm comm1,
634 			 double TRAN_eV2Hartree,
635 			 double kBvalue, double Electronic_Temperature );
636 
637 /* TRAN_Check_Input.c */
638 void TRAN_Check_Input( MPI_Comm comm1, int Solver );
639 
640 /* TRAN_Set_MP.c  */
641 void TRAN_Set_MP(
642         int job,
643         int atomnum, int *WhatSpecies, int *Spe_Total_CNO,
644         int *NUM,
645         int *MP
646 );
647 
648 /* TRAN_Set_PathEnergyStr.c  */
649 /* *static
650  * void TRAN_error_and_exit(
651  *    char *buf
652  *);*/
653 /* TRAN_Set_PathEnergyStr.c  */
654 void TRAN_Set_PathEnergyStr_Square(
655    int m,
656    char **str,
657    double default_relative_ene[4],
658    double tran_square_path_ene[4],
659    int    tran_square_path_ene_fix[4]
660 );
661 
662 
663 /* TRAN_Set_SurfOverlap.c  */
664 void TRAN_Set_SurfOverlap( MPI_Comm comm1, char *position, double k2, double k3 );
665 
666 /* TRAN_Set_Value.c  */
667 void TRAN_Set_Value_double(dcomplex *A, int n, double a, double b);
668 
669 /* TRAN_adjust_Ngrid.c  */
670 void  TRAN_adjust_Ngrid( MPI_Comm comm1, int *Ngrid1,int *Ngrid2, int *Ngrid3);
671 
672 
673 /* TRAN_Check_Region_Lead.c */
674 int TRAN_Check_Region_Lead(
675 		  int atomnum,
676 		    int *WhatSpecies,
677 		      double *Spe_Atom_Cut1,
678 		        double **Gxyz,
679 			  double tv[4][4]
680 		);
681 
682 /* TRAN_Check_Region.c */
683 int TRAN_Check_Region(
684                       int atomnum,
685                       int *WhatSpecies,
686                       double *Spe_Atom_Cut1,
687                       double **Gxyz
688                       );
689 
690 /* TRAN_Main_Analysis.c */
691 void TRAN_Main_Analysis(MPI_Comm comm1,
692                         int argc, char *argv[],
693                         int Matomnum, int *M2G,
694                         int *GridN_Atom,
695                         int **GridListAtom,
696                         int **CellListAtom,
697                         Type_Orbs_Grid ***Orbs_Grid,
698                         int TNumGrid);
699 
700 /* TRAN_Main_Analysis_NC.c */
701 void TRAN_Main_Analysis_NC( MPI_Comm comm1,
702                             int argc, char *argv[],
703                             int Matomnum, int *M2G,
704                             int *GridN_Atom,
705                             int **GridListAtom,
706                             int **CellListAtom,
707                             Type_Orbs_Grid ***Orbs_Grid,
708                             int TNumGrid );
709 
710 
711 
712 /* revised by Y. Xiao for Noncollinear NEGF calculations */
713 double TRAN_DFT_NC(
714                 MPI_Comm comm1,
715                 int SucceedReadingDMfile,
716                 int level_stdout,
717                 int iter,
718                 int SpinP_switch,
719                 double *****nh,
720                 double *****ImNL,
721                 double ****CntOLP,
722                 int atomnum,
723                 int Matomnum,
724                 int *WhatSpecies,
725                 int *Spe_Total_CNO,
726                 int *FNAN,
727                 int **natn,
728                 int **ncn,
729                 int *M2G,
730                 int *G2ID,
731                 int *F_G2M,
732                 int **atv_ijk,
733                 int *List_YOUSO,
734                 double *koS,
735                 dcomplex **S,
736                 double *****CDM,
737                 double *****iCDM,
738                 double *****EDM,
739                 double ***TRAN_DecMulP,
740                 double Eele0[2], double Eele1[2],
741                 double ChemP_e0[2]);
742 
743 void TRAN_Allocate_Cregion_NC(MPI_Comm mpi_comm_level1,
744                            int SpinP_switch,
745                            int atomnum,
746                            int *WhatSpecies,
747                            int *Spe_Total_CNO
748                            );
749 
750 void TRAN_Deallocate_Cregion_NC(int SpinP_switch);
751 
752 void TRAN_Allocate_Lead_Region_NC( MPI_Comm mpi_comm_level1 );
753 
754 void TRAN_Deallocate_Lead_Region_NC();
755 
756 void TRAN_Set_CentOverlap_NC(
757                           MPI_Comm comm1,
758                           int job,
759                           int SpinP_switch,
760                           double k2,
761                           double k3,
762                           int *order_GA,
763                           double **H1,
764                           double **H2,
765                           double *S1,
766                           double *****H,
767                           double ****OLP,
768                           int atomnum,
769                           int Matomnum,
770                           int *M2G,
771                           int *G2ID,
772                           int *WhatSpecies,
773                           int *Spe_Total_CNO,
774                           int *FNAN,
775                           int **natn,
776                           int **ncn,
777                           int **atv_ijk
778                           );
779 
780 void TRAN_Set_SurfOverlap_NC( MPI_Comm comm1,
781                            char *position,
782                            double k2,
783                            double k3);
784 /* until here by Y. Xiao for Noncollinear NEGF calculations */
785 
786