void make_field_strength( field_offset link_src, /* field offset for su3_matrix[4] type for the source link matrices */ field_offset field_dest /* field offset for su3_matrix[6] type for the resulting field strength */ ) { register int i,component,dir0=-99,dir1=-99; register site *s; int j; su3_matrix tmat1,tmat2; su3_matrix *temp1,*temp2; complex cc; msg_tag *mtag0,*mtag1; /* Allocate temporary space for two su3_matrix fields */ temp1 = (su3_matrix *)malloc(sites_on_node*sizeof(su3_matrix)); if(temp1 == NULL){ printf("field_strength: No room for temp1\n"); terminate(1); } temp2 = (su3_matrix *)malloc(sites_on_node*sizeof(su3_matrix)); if(temp2 == NULL){ printf("field_strength: No room for temp2\n"); terminate(1); } for(component=FS_XY;component<=FS_ZT;component++){ switch(component){ case FS_XY: dir0=XUP; dir1=YUP; break; case FS_XZ: dir0=XUP; dir1=ZUP; break; case FS_YZ: dir0=YUP; dir1=ZUP; break; case FS_XT: dir0=XUP; dir1=TUP; break; case FS_YT: dir0=YUP; dir1=TUP; break; case FS_ZT: dir0=ZUP; dir1=TUP; break; } /* Plaquette in +dir0 +dir1 direction */ mtag0 = start_gather_site( LINK_OFFSET(dir0), sizeof(su3_matrix), dir1, EVENANDODD, gen_pt[0] ); mtag1 = start_gather_site( LINK_OFFSET(dir1), sizeof(su3_matrix), dir0, EVENANDODD, gen_pt[1] ); wait_gather(mtag0); wait_gather(mtag1); FORALLSITES(i,s){ mult_su3_nn( &LINK(dir0), (su3_matrix *)(gen_pt[1][i]), &tmat1 ); mult_su3_na( &tmat1, (su3_matrix *)(gen_pt[0][i]), &tmat2 ); mult_su3_na( &tmat2, &LINK(dir1), &tmat1 ); su3_adjoint( &tmat1, &tmat2 ); sub_su3_matrix( &tmat1, &tmat2, &FIELD_STRENGTH(component) ); } /**cleanup_gather(mtag0); Use same gather in next plaquette**/ cleanup_gather(mtag1); /* Plaquette in -dir0 +dir1 direction */ /**mtag0 = start_gather_site( LINK_OFFSET(dir0), sizeof(su3_matrix), dir1, EVENANDODD, gen_pt[0] ); wait_gather(mtag0); Already gathered above**/ FORALLSITES(i,s){ mult_su3_an( &LINK(dir1), &LINK(dir0), &tmat1 ); mult_su3_an( (su3_matrix *)(gen_pt[0][i]), &tmat1, &temp1[i] ); }
u8 phy_addr; u8 offset; } PHY_cfg; typedef struct { u8 link:1,speed:2,duplex:3,changed:1; u8 length; u32 rx_err; u32 link_time; } PHY; void print(char *str); static XGpio gpio; static PHY_cfg phyCfg[3]={ {MDC_OFFSET(0),MDIO_OFFSET(0),LINK_OFFSET(0),SPEED_OFFSET(0),DUPLEX_OFFSET(0),RESET_OFFSET(0),PHY0_PADDR}, {MDC_OFFSET(1),MDIO_OFFSET(1),LINK_OFFSET(1),SPEED_OFFSET(1),DUPLEX_OFFSET(1),RESET_OFFSET(1),PHY1_PADDR}, {MDC_OFFSET(2),MDIO_OFFSET(2),LINK_OFFSET(2),SPEED_OFFSET(2),DUPLEX_OFFSET(2),RESET_OFFSET(2),PHY2_PADDR}, }; static PHY phy[3]; static u8 decipher_key[8] = DECIPHER_KEY; void delay(u32 d) { while(d--); } void IO_SetDirection(u8 bit, u8 dir) { u32 mask;
OPP_DIR(dir0), EVENANDODD, gen_pt[1] ); wait_gather(mtag1); FORALLSITES(i,s){ mult_su3_nn( &LINK(dir1), (su3_matrix *)(gen_pt[1][i]), &tmat1 ); su3_adjoint( &tmat1, &tmat2 ); add_su3_matrix( &FIELD_STRENGTH(component), &tmat1, &FIELD_STRENGTH(component) ); sub_su3_matrix( &FIELD_STRENGTH(component), &tmat2, &FIELD_STRENGTH(component) ); } cleanup_gather(mtag0); cleanup_gather(mtag1); /* Plaquette in -dir0 -dir1 direction */ mtag0 = start_gather_site( LINK_OFFSET(dir0), sizeof(su3_matrix), OPP_DIR(dir0), EVENANDODD, gen_pt[0] ); mtag1 = start_gather_site( LINK_OFFSET(dir1), sizeof(su3_matrix), OPP_DIR(dir1), EVENANDODD, gen_pt[1] ); wait_gather(mtag0); wait_gather(mtag1); FORALLSITES(i,s){ mult_su3_nn( (su3_matrix *)(gen_pt[0][i]), &LINK(dir1), &temp1[i] ); mult_su3_nn( (su3_matrix *)(gen_pt[1][i]), &LINK(dir0), &temp2[i] ); } cleanup_gather(mtag0); cleanup_gather(mtag1); mtag0 = start_gather_field( temp1, sizeof(su3_matrix), OPP_DIR(dir1), EVENANDODD, gen_pt[0] ); wait_gather(mtag0); mtag1 = start_gather_field( temp2, sizeof(su3_matrix),