CC: detar@physics.utah.edu Subject: Appendix Hi Rich, Robert, and James, I am attaching a preliminary draft of the list of supported routines. ASCII is better, because this could be the starting point for a header file. I haven't spent enough time culling the awkward and unlikely combinations. I also haven't tried them against some selected MILC applications to see what is missing. And I will add ones as you see the need. But it is a start. Regards, Carleton ---------------------------------------------------------------------- /***************************************************************/ /* Initialization/Finalization */ /***************************************************************/ void QDP_initialize( const Layout *p ); void QDP_finalize( void ); void QDP_abort( int status ); /***************************************************************/ /* Layout */ /***************************************************************/ void QDP_layout( const Layout *p ) int QDP_node_number( const int coordinate[] ); int *QDP_node_coords( const int coordinate[] ); int QDP_linear_index( const int coordinate[] ); /***************************************************************/ /* Lattice field creation/destruction */ /***************************************************************/ void QDP_F_create_R( LatticeRealF *a ); void QDP_F_create_C( LatticeComplexF *a ); void QDP_F_create_I( LatticeIntF *a ); void QDP_F_create_G( LatticeGaugeF *a ); void QDP_F_create_H( LatticeHalfFermionF *a ); void QDP_F_create_D( LatticeDiracF *a ); void QDP_F_create_V( LatticeStaggeredFermionF *a ); void QDP_F_create_P( LatticePropagatorF *a ); void QDP_F_destroy_R( LatticeRealF *a ); void QDP_F_destroy_C( LatticeComplexF *a ); void QDP_F_destroy_I( LatticeIntF *a ); void QDP_F_destroy_G( LatticeGaugeF *a ); void QDP_F_destroy_H( LatticeHalfFermionF *a ); void QDP_F_destroy_D( LatticeDiracF *a ); void QDP_F_destroy_V( LatticeStaggeredFermionF *a ); void QDP_F_destroy_P( LatticePropagatorF *a ); /***************************************************************/ /* Subsets */ /***************************************************************/ QDP_lattice_subset * QDP_create_lattice_subset( int (*func)( int coordinate[], int nsubsets ); QDP_destroy_lattice_subset( QDP_lattice_subset *s ); /***************************************************************/ /* Defining custom shifts */ /***************************************************************/ int QDP_create_shift( int * (func *)( int coordinate[], void *args ), void *args ); QDP_destroy_shift( int dir ); /***************************************************************/ /* Temporary Entry and Exit from Level 2 */ /***************************************************************/ RealF* QDP_F_extract_R( LatticeRealF *a ); ComplexF* QDP_F_extract_C( LatticeComplexF *a ); IntF* QDP_F_extract_I( LatticeIntF *a ); GaugeF* QDP_F_extract_G( LatticeGaugeF *a ); HalfFermionF* QDP_F_extract_H( LatticeHalfFermionF *a ); DiracFermionF* QDP_F_extract_D( LatticeDiracFermionF *a ); StaggeredFermionF* QDP_F_extract_V( LatticeStaggeredFermionF *a ); PropagatorF* QDP_F_extract_P( LatticePropagatorF *a ); void QDP_F_restore_R( LatticeRealF *r , RealF* ); void QDP_F_restore_C( LatticeComplexF *r , ComplexF* ); void QDP_F_restore_I( LatticeIntF *r , IntF* ); void QDP_F_restore_G( LatticeGaugeF *r , GaugeF* ); void QDP_F_restore_H( LatticeHalfFermionF *r , HalfFermionF* ); void QDP_F_restore_D( LatticeDiracFermionF *r , DiracFermionF* ); void QDP_F_restore_V( LatticeStaggeredFermionF *r , StaggeredFermionF* ); void QDP_F_restore_P( LatticePropagatorF *r , PropagatorF* ); void QDP_F_suspend(void); void QDP_F_resume(void); /***************************************************************/ /* Optimization calls */ /***************************************************************/ void QDP_F_discard_R( LatticeRealF *r ); void QDP_F_discard_C( LatticeComplexF *r ); void QDP_F_discard_I( LatticeIntF *r ); void QDP_F_discard_G( LatticeGaugeF *r ); void QDP_F_discard_H( LatticeHalfFermionF *r ); void QDP_F_discard_D( LatticeDiracFermionF *r ); void QDP_F_discard_V( LatticeStaggeredFermionF *r ); void QDP_F_discard_P( LatticePropagatorF *r ); /***************************************************************/ /* Data Parallel Operations */ /***************************************************************/ /*--------------------------*/ /* Norms and inner products */ /*--------------------------*/ void QDP_F_R_eq_norm2_C( restrict LatticeRealF *r, LatticeComplexF *a , const Subset s ); void QDP_F_R_eq_norm2_G( restrict LatticeRealF *r, LatticeGaugeF *a , const Subset s ); void QDP_F_R_eq_norm2_H( restrict LatticeRealF *r, LatticeHalfFermionF *a , const Subset s ); void QDP_F_R_eq_norm2_D( restrict LatticeRealF *r, LatticeDiracFermionF *a , const Subset s ); void QDP_F_R_eq_norm2_V( restrict LatticeRealF *r, LatticeStaggeredFermionF *a , const Subset s ); void QDP_F_R_eq_norm2_P( restrict LatticeRealF *r, LatticePropagatorF *a , const Subset s ); void QDP_F_C_eq_GA_dot_G( restrict LatticeComplexF *r, LatticeGaugeF *a , const Subset s ); void QDP_F_C_eq_HA_dot_H( restrict LatticeComplexF *r, LatticeHalfFermionF *a , const Subset s ); void QDP_F_C_eq_DA_dot_D( restrict LatticeComplexF *r, LatticeDiracFermionF *a , const Subset s ); void QDP_F_C_eq_VA_dot_V( restrict LatticeComplexF *r, LatticeStaggeredFermionF *a , const Subset s ); void QDP_F_C_eq_PA_dot_P( restrict LatticeComplexF *r, LatticePropagatorF *a , const Subset s ); /*--------------------------*/ /* Addition and Subtraction */ /*--------------------------*/ void QDP_F_R_eq_R_plus_R( restrict LatticeRealF *r , LatticeRealF *a , LatticeRealF *b , const Subset s ); void QDP_F_C_eq_C_plus_C( restrict LatticeComplexF *r , LatticeComplexF *a , LatticeComplexF *b , const Subset s ); void QDP_F_I_eq_I_plus_I( restrict LatticeIntF *r , LatticeIntF *a , LatticeIntF *b , const Subset s ); void QDP_F_G_eq_G_plus_G( restrict LatticeGaugeF *r , LatticeGaugeF *a , LatticeGaugeF *b , const Subset s ); void QDP_F_H_eq_H_plus_H( restrict LatticeHalfFermionF *r , LatticeHalfFermionF *a , LatticeHalfFermionF *b , const Subset s ); void QDP_F_D_eq_D_plus_D( restrict LatticeDiracF *r , LatticeDiracF *a , LatticeDiracF *b , const Subset s ); void QDP_F_V_eq_V_plus_V( restrict LatticeStaggeredFermionF *r, LatticeStaggeredFermionF *a, LatticeStaggeredFermionF *b, const Subset s ); void QDP_F_P_eq_P_plus_P( restrict LatticePropagatorF *r , LatticePropagatorF *a , LatticePropagatorF *b , const Subset s ); void QDP_F_R_eq_R_minus_R( restrict LatticeRealF *r , LatticeRealF *a , LatticeRealF *b , const Subset s ); void QDP_F_C_eq_C_minus_C( restrict LatticeComplexF *r , LatticeComplexF *a , LatticeComplexF *b , const Subset s ); void QDP_F_I_eq_I_minus_I( restrict LatticeIntF *r , LatticeIntF *a , LatticeIntF *b , const Subset s ); void QDP_F_G_eq_G_minus_G( restrict LatticeGaugeF *r , LatticeGaugeF *a , LatticeGaugeF *b , const Subset s ); void QDP_F_H_eq_H_minus_H( restrict LatticeHalfFermionF *r , LatticeHalfFermionF *a , LatticeHalfFermionF *b , const Subset s ); void QDP_F_D_eq_D_minus_D( restrict LatticeDiracF *r , LatticeDiracF *a , LatticeDiracF *b , const Subset s ); void QDP_F_V_eq_V_minus_V( restrict LatticeStaggeredFermionF *r, LatticeStaggeredFermionF *a, LatticeStaggeredFermionF *b, const Subset s ); void QDP_F_P_eq_P_minus_P( restrict LatticePropagatorF *r , LatticePropagatorF *a , LatticePropagatorF *b , const Subset s ); /*-----------------------------*/ /* Multiplication by scalars */ /*-----------------------------*/ /* r = ca (real c) */ void QDP_F_R_eq_r_times_R( restrict LatticeRealF *r , RealF c, LatticeRealF *a ); void QDP_F_C_eq_r_times_C( restrict LatticeComplexF *r , RealF c, LatticeComplexF *a ); void QDP_F_G_eq_r_times_G( restrict LatticeGaugeF *r , RealF c, LatticeGaugeF *a ); void QDP_F_H_eq_r_times_H( restrict LatticeHalfFermionF *r , RealF c, LatticeHalfFermionF *a ); void QDP_F_D_eq_r_times_D( restrict LatticeDiracF *r , RealF c, LatticeDiracF *a ); void QDP_F_V_eq_r_times_V( restrict LatticeStaggeredFermionF *r, RealF c, LatticeStaggeredFermionF *a ); void QDP_F_P_eq_r_times_P( restrict LatticePropagatorF *r , RealF c, LatticePropagatorF *a ); /* r += ca (real c) */ void QDP_F_R_peq_r_times_R( restrict LatticeRealF *r , RealF c, LatticeRealF *a ); void QDP_F_C_peq_r_times_C( restrict LatticeComplexF *r , RealF c, LatticeComplexF *a ); void QDP_F_G_peq_r_times_G( restrict LatticeGaugeF *r , RealF c, LatticeGaugeF *a ); void QDP_F_H_peq_r_times_H( restrict LatticeHalfFermionF *r , RealF c, LatticeHalfFermionF *a ); void QDP_F_D_peq_r_times_D( restrict LatticeDiracF *r , RealF c, LatticeDiracF *a ); void QDP_F_V_peq_r_times_V( restrict LatticeStaggeredFermionF *r, RealF c, LatticeStaggeredFermionF *a ); void QDP_F_P_peq_r_times_P( restrict LatticePropagatorF *r , RealF c, LatticePropagatorF *a ); /* r -= ca (real c) */ void QDP_F_R_meq_r_times_R( restrict LatticeRealF *r , RealF c, LatticeRealF *a ); void QDP_F_C_meq_r_times_C( restrict LatticeComplexF *r , RealF c, LatticeComplexF *a ); void QDP_F_G_meq_r_times_G( restrict LatticeGaugeF *r , RealF c, LatticeGaugeF *a ); void QDP_F_H_meq_r_times_H( restrict LatticeHalfFermionF *r , RealF c, LatticeHalfFermionF *a ); void QDP_F_D_meq_r_times_D( restrict LatticeDiracF *r , RealF c, LatticeDiracF *a ); void QDP_F_V_meq_r_times_V( restrict LatticeStaggeredFermionF *r, RealF c, LatticeStaggeredFermionF *a ); void QDP_F_P_meq_r_times_P( restrict LatticePropagatorF *r , RealF c, LatticePropagatorF *a ); /* r = ca (complex c) */ void QDP_F_C_eq_c_times_C( restrict LatticeComplexF *r , ComplexF c, LatticeComplexF *a ); void QDP_F_G_eq_c_times_G( restrict LatticeGaugeF *r , ComplexF c, LatticeGaugeF *a ); void QDP_F_H_eq_c_times_H( restrict LatticeHalfFermionF *r , ComplexF c, LatticeHalfFermionF *a ); void QDP_F_D_eq_c_times_D( restrict LatticeDiracF *r , ComplexF c, LatticeDiracF *a ); void QDP_F_V_eq_c_times_V( restrict LatticeStaggeredFermionF *r, ComplexF c, LatticeStaggeredFermionF *a ); void QDP_F_P_eq_c_times_P( restrict LatticePropagatorF *r , ComplexF c, LatticePropagatorF *a ); /* r += ca (complex c) */ void QDP_F_C_peq_c_times_C( restrict LatticeComplexF *r , ComplexF c, LatticeComplexF *a ); void QDP_F_G_peq_c_times_G( restrict LatticeGaugeF *r , ComplexF c, LatticeGaugeF *a ); void QDP_F_H_peq_c_times_H( restrict LatticeHalfFermionF *r , ComplexF c, LatticeHalfFermionF *a ); void QDP_F_D_peq_c_times_D( restrict LatticeDiracF *r , ComplexF c, LatticeDiracF *a ); void QDP_F_V_peq_c_times_V( restrict LatticeStaggeredFermionF *r, ComplexF c, LatticeStaggeredFermionF *a ); void QDP_F_P_peq_c_times_P( restrict LatticePropagatorF *r , ComplexF c, LatticePropagatorF *a ); /* r -= ca (complex c) */ void QDP_F_C_meq_c_times_C( restrict LatticeComplexF *r , ComplexF c, LatticeComplexF *a ); void QDP_F_G_meq_c_times_G( restrict LatticeGaugeF *r , ComplexF c, LatticeGaugeF *a ); void QDP_F_H_meq_c_times_H( restrict LatticeHalfFermionF *r , ComplexF c, LatticeHalfFermionF *a ); void QDP_F_D_meq_c_times_D( restrict LatticeDiracF *r , ComplexF c, LatticeDiracF *a ); void QDP_F_V_meq_c_times_V( restrict LatticeStaggeredFermionF *r, ComplexF c, LatticeStaggeredFermionF *a ); void QDP_F_P_meq_c_times_P( restrict LatticePropagatorF *r , ComplexF c, LatticePropagatorF *a ); /* Products with gamma matrices */ void QDP_F_H_eq_gamma_times_H( restrict LatticeHalfFermionF *r, int d, LatticeHalfFermionF *a , const Subset s ); void QDP_F_D_eq_gamma_times_D( restrict LatticeDiracF *r , int d, LatticeDiracF *a , const Subset s ); void QDP_F_P_eq_gamma_times_P( restrict LatticePropagatorF *r , int d, LatticePropagatorF *a , const Subset s ); void QDP_F_H_eq_H_times_gamma( restrict LatticeHalfFermionF *r, LatticeHalfFermionF *a , int d, const Subset s ); void QDP_F_D_eq_D_times_gamma( restrict LatticeDiracF *r , LatticeDiracF *a , int d, const Subset s ); void QDP_F_P_eq_P_times_gamma( restrict LatticePropagatorF *r , LatticePropagatorF *a , int d, const Subset s ); /*----------*/ /* Shifting */ /*----------*/ void QDP_F_R_eq_SR( restrict LatticeRealF *r , LatticeRealF *a , int dir, int sign, const Subset s ); void QDP_F_C_eq_SC( restrict LatticeComplexF *r , LatticeComplexF *a , int dir, int sign, const Subset s ); void QDP_F_I_eq_SI( restrict LatticeIntF *r , LatticeIntF *a , int dir, int sign, const Subset s ); void QDP_F_G_eq_SG( restrict LatticeGaugeF *r , LatticeGaugeF *a , int dir, int sign, const Subset s ); void QDP_F_H_eq_SH( restrict LatticeHalfFermionF *r , LatticeHalfFermionF *a , int dir, int sign, const Subset s ); void QDP_F_D_eq_SD( restrict LatticeDiracF *r , LatticeDiracF *a , int dir, int sign, const Subset s ); void QDP_F_V_eq_SV( restrict LatticeStaggeredFermionF *r, LatticeStaggeredFermionF *a, int dir, int sign, const Subset s ); void QDP_F_P_eq_SP( restrict LatticePropagatorF *r , LatticePropagatorF *a , int dir, int sign, const Subset s ); /*---------*/ /* Copying */ /*---------*/ /* r = a */ void QDP_F_R_eq_R( restrict LatticeRealF *r , LatticeRealF *a , const Subset s ); void QDP_F_C_eq_C( restrict LatticeComplexF *r , LatticeComplexF *a , const Subset s ); void QDP_F_I_eq_I( restrict LatticeIntF *r , LatticeIntF *a , const Subset s ); void QDP_F_G_eq_G( restrict LatticeGaugeF *r , LatticeGaugeF *a , const Subset s ); void QDP_F_H_eq_H( restrict LatticeHalfFermionF *r , LatticeHalfFermionF *a , const Subset s ); void QDP_F_D_eq_D( restrict LatticeDiracF *r , LatticeDiracF *a , const Subset s ); void QDP_F_V_eq_V( restrict LatticeStaggeredFermionF *r, LatticeStaggeredFermionF *a, const Subset s ); void QDP_F_P_eq_P( restrict LatticePropagatorF *r , LatticePropagatorF *a , const Subset s ); /* r += a */ void QDP_F_R_peq_R( restrict LatticeRealF *r , LatticeRealF *a , const Subset s ); void QDP_F_C_peq_C( restrict LatticeComplexF *r , LatticeComplexF *a , const Subset s ); void QDP_F_I_peq_I( restrict LatticeIntF *r , LatticeIntF *a , const Subset s ); void QDP_F_G_peq_G( restrict LatticeGaugeF *r , LatticeGaugeF *a , const Subset s ); void QDP_F_H_peq_H( restrict LatticeHalfFermionF *r , LatticeHalfFermionF *a , const Subset s ); void QDP_F_D_peq_D( restrict LatticeDiracF *r , LatticeDiracF *a , const Subset s ); void QDP_F_V_peq_V( restrict LatticeStaggeredFermionF *r, LatticeStaggeredFermionF *a, const Subset s ); void QDP_F_P_peq_P( restrict LatticePropagatorF *r , LatticePropagatorF *a , const Subset s ); /* r -= a */ void QDP_F_R_meq_R( restrict LatticeRealF *r , LatticeRealF *a , const Subset s ); void QDP_F_C_meq_C( restrict LatticeComplexF *r , LatticeComplexF *a , const Subset s ); void QDP_F_I_meq_I( restrict LatticeIntF *r , LatticeIntF *a , const Subset s ); void QDP_F_G_meq_G( restrict LatticeGaugeF *r , LatticeGaugeF *a , const Subset s ); void QDP_F_H_meq_H( restrict LatticeHalfFermionF *r , LatticeHalfFermionF *a , const Subset s ); void QDP_F_D_meq_D( restrict LatticeDiracF *r , LatticeDiracF *a , const Subset s ); void QDP_F_V_meq_V( restrict LatticeStaggeredFermionF *r, LatticeStaggeredFermionF *a, const Subset s ); void QDP_F_P_meq_P( restrict LatticePropagatorF *r , LatticePropagatorF *a , const Subset s ); /* r = -a */ void QDP_F_R_eqm_R( restrict LatticeRealF *r , LatticeRealF *a , const Subset s ); void QDP_F_C_eqm_C( restrict LatticeComplexF *r , LatticeComplexF *a , const Subset s ); void QDP_F_I_eqm_I( restrict LatticeIntF *r , LatticeIntF *a , const Subset s ); void QDP_F_G_eqm_G( restrict LatticeGaugeF *r , LatticeGaugeF *a , const Subset s ); void QDP_F_H_eqm_H( restrict LatticeHalfFermionF *r , LatticeHalfFermionF *a , const Subset s ); void QDP_F_D_eqm_D( restrict LatticeDiracF *r , LatticeDiracF *a , const Subset s ); void QDP_F_V_eqm_V( restrict LatticeStaggeredFermionF *r, LatticeStaggeredFermionF *a, const Subset s ); void QDP_F_P_eqm_P( restrict LatticePropagatorF *r , LatticePropagatorF *a , const Subset s ); /*---------------------*/ /* Hermitian conjugate */ /*---------------------*/ /* r = hconj(a) */ void QDP_F_C_eq_CA( restrict LatticeComplexF *r , LatticeComplexF *a , const Subset s ); void QDP_F_G_eq_GA( restrict LatticeGaugeF *r , LatticeGaugeF *a , const Subset s ); void QDP_F_H_eq_HA( restrict LatticeHalfFermionF *r , LatticeHalfFermionF *a , const Subset s ); void QDP_F_D_eq_DA( restrict LatticeDiracF *r , LatticeDiracF *a , const Subset s ); void QDP_F_V_eq_VA( restrict LatticeStaggeredFermionF *r, LatticeStaggeredFermionF *a, const Subset s ); void QDP_F_P_eq_PA( restrict LatticePropagatorF *r , LatticePropagatorF *a , const Subset s ); /*-------------*/ /* Transpose */ /*-------------*/ void QDP_F_G_eq_transpose_G( restrict LatticeGaugeF *r, LatticeGaugeF *a, const Subset s ); /*-------------------*/ /* Complex conjugate */ /*-------------------*/ void QDP_F_G_eq_complconj_G( restrict LatticeGaugeF *r, LatticeGaugeF *a, const Subset s ); /*---------------------------------------------------*/ /* Copy with type conversion or component extraction */ /*---------------------------------------------------*/ /* real to complex */ void QDP_F_C_eq_R( restrict LatticeComplexF *r, LatticeRealF *a, const Subset s ); void QDP_F_C_eq_R_plus_iR( restrict LatticeComplexF *r, LatticeRealF *a, LatticeRealF *b, const Subset s ); /* real part */ void QDP_F_R_eq_re_C( restrict LatticeRealF *r, LatticeComplexF *a, const Subset s ); /* imaginary part */ void QDP_F_R_eq_im_C( restrict LatticeRealF *r, LatticeComplexF *a, const Subset s ); /* integer to real and vice versa */ void QDP_F_R_eq_I( restrict LatticeRealF *r, LatticeIntF *a, const Subset s ); void QDP_F_I_eq_R( restrict LatticeIntF *r, LatticeRealF *a, const Subset s ); /* extracting matrix elements and vector components */ void QDP_F_C_eq_elem_G( restrict LatticeComplexF *r, LatticeGaugeF *a , int i_c, int j_c, const Subset s ); void QDP_F_C_eq_elem_H( restrict LatticeComplexF *r, LatticeHalfFermionF *a , int i_c, int i_s, const Subset s ); void QDP_F_C_eq_elem_D( restrict LatticeComplexF *r, LatticeDiracFermionF *a , int i_c, int i_s, const Subset s ); void QDP_F_C_eq_elem_V( restrict LatticeComplexF *r, LatticeStaggeredFermionF *a, int i_c, const Subset s ); void QDP_F_C_eq_elem_P( restrict LatticeComplexF *r, LatticeHalfFermionF *a, int i_c, int i_s, int_j_c, int j_s, const Subset s ); /* Trace */ void QDP_F_R_eq_realtrace_G( restrict LatticeRealF *r, const LatticeGaugeF *a, const Subset s ); void QDP_F_R_eq_imagtrace_G( restrict LatticeRealF *r, const LatticeGaugeF *a, const Subset s ); void QDP_F_C_eq_trace_G( restrict LatticeComplexF *r, const LatticeGaugeF *a, const Subset s ); /* Spin projection and reconstruction */ void QDP_F_H_eq_spproj_D ( restrict LatticeHalfFermionF *r, LatticeDiracFermionF *a, int mu, int sign, const Subset s ); void QDP_F_D_eq_sprecon_H( restrict LatticeDiracFermionF *r, LatticeHalfFermionF *a, int mu, int sign, const Subset s ); /*----------------------------------*/ /* Multiplication of lattice fields */ /*----------------------------------*/ /* Uniform types */ void QDP_F_R_eq_R_times_R( restrict LatticeRealF *r , LatticeRealF *a , LatticeRealF *b , const Subset s ); void QDP_F_C_eq_C_times_C( restrict LatticeComplexF *r , LatticeComplexF *a , LatticeComplexF *b , const Subset s ); void QDP_F_I_eq_I_times_I( restrict LatticeIntF *r , LatticeIntF *a , LatticeIntF *b , const Subset s ); void QDP_F_G_eq_G_times_G( restrict LatticeGaugeF *r , LatticeGaugeF *a , LatticeGaugeF *b , const Subset s ); void QDP_F_R_peq_R_times_R( restrict LatticeRealF *r , LatticeRealF *a , LatticeRealF *b , const Subset s ); void QDP_F_C_peq_C_times_C( restrict LatticeComplexF *r , LatticeComplexF *a , LatticeComplexF *b , const Subset s ); void QDP_F_I_peq_I_times_I( restrict LatticeIntF *r , LatticeIntF *a , LatticeIntF *b , const Subset s ); void QDP_F_G_peq_G_times_G( restrict LatticeGaugeF *r , LatticeGaugeF *a , LatticeGaugeF *b , const Subset s ); void QDP_F_R_meq_R_times_R( restrict LatticeRealF *r , LatticeRealF *a , LatticeRealF *b , const Subset s ); void QDP_F_C_meq_C_times_C( restrict LatticeComplexF *r , LatticeComplexF *a , LatticeComplexF *b , const Subset s ); void QDP_F_I_meq_I_times_I( restrict LatticeIntF *r , LatticeIntF *a , LatticeIntF *b , const Subset s ); void QDP_F_G_meq_G_times_G( restrict LatticeGaugeF *r , LatticeGaugeF *a , LatticeGaugeF *b , const Subset s ); void QDP_F_R_eqm_R_times_R( restrict LatticeRealF *r , LatticeRealF *a , LatticeRealF *b , const Subset s ); void QDP_F_C_eqm_C_times_C( restrict LatticeComplexF *r , LatticeComplexF *a , LatticeComplexF *b , const Subset s ); void QDP_F_I_eqm_I_times_I( restrict LatticeIntF *r , LatticeIntF *a , LatticeIntF *b , const Subset s ); void QDP_F_G_eqm_G_times_G( restrict LatticeGaugeF *r , LatticeGaugeF *a , LatticeGaugeF *b , const Subset s ); /* Mixed types - gauge field times field */ void QDP_F_H_eq_G_times_H( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , const Subset s ); void QDP_F_D_eq_G_times_D( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , const Subset s ); void QDP_F_V_eq_G_times_V( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, const Subset s ); void QDP_F_P_eq_G_times_P( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , const Subset s ); void QDP_F_H_peq_G_times_H( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , const Subset s ); void QDP_F_D_peq_G_times_D( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , const Subset s ); void QDP_F_V_peq_G_times_V( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, const Subset s ); void QDP_F_P_peq_G_times_P( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , const Subset s ); void QDP_F_H_meq_G_times_H( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , const Subset s ); void QDP_F_D_meq_G_times_D( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , const Subset s ); void QDP_F_V_meq_G_times_V( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, const Subset s ); void QDP_F_P_meq_G_times_P( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , const Subset s ); void QDP_F_H_eqm_G_times_H( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , const Subset s ); void QDP_F_D_eqm_G_times_D( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , const Subset s ); void QDP_F_V_eqm_G_times_V( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, const Subset s ); void QDP_F_P_eqm_G_times_P( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , const Subset s ); /* Mixed types - hermitian adjoint of gauge field times field */ void QDP_F_H_eq_GA_times_H( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , const Subset s ); void QDP_F_D_eq_GA_times_D( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , const Subset s ); void QDP_F_V_eq_GA_times_V( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, const Subset s ); void QDP_F_P_eq_GA_times_P( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , const Subset s ); void QDP_F_H_peq_GA_times_H( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , const Subset s ); void QDP_F_D_peq_GA_times_D( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , const Subset s ); void QDP_F_V_peq_GA_times_V( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, const Subset s ); void QDP_F_P_peq_GA_times_P( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , const Subset s ); void QDP_F_H_meq_GA_times_H( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , const Subset s ); void QDP_F_D_meq_GA_times_D( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , const Subset s ); void QDP_F_V_meq_GA_times_V( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, const Subset s ); void QDP_F_P_meq_GA_times_P( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , const Subset s ); void QDP_F_H_eqm_GA_times_H( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , const Subset s ); void QDP_F_D_eqm_GA_times_D( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , const Subset s ); void QDP_F_V_eqm_GA_times_V( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, const Subset s ); void QDP_F_P_eqm_GA_times_P( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , const Subset s ); /* Multiplication with shifts of multiplicand */ void QDP_F_G_eq_G_times_SG( restrict LatticeGaugeF *r , LatticeGaugeF *a , LatticeGaugeF *b , int dir, int sign, const Subset s ); void QDP_F_H_eq_G_times_SH( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , int dir, int sign, const Subset s ); void QDP_F_D_eq_G_times_SD( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , int dir, int sign, const Subset s ); void QDP_F_V_eq_G_times_SV( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, int dir, int sign, const Subset s ); void QDP_F_P_eq_G_times_SP( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , int dir, int sign, const Subset s ); void QDP_F_H_eq_GA_times_SH( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , const Subset s ); void QDP_F_D_eq_GA_times_SD( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , const Subset s ); void QDP_F_V_eq_GA_times_SV( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, const Subset s ); void QDP_F_P_eq_GA_times_SP( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , int dir, int sign, const Subset s ); /* Multiplication with shifts of multiplier */ void QDP_F_G_eq_SG_times_G( restrict LatticeGaugeF *r , LatticeGaugeF *a , LatticeGaugeF *b , int dir, int sign, const Subset s ); void QDP_F_H_eq_SG_times_H( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , int dir, int sign, const Subset s ); void QDP_F_D_eq_SG_times_D( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , int dir, int sign, const Subset s ); void QDP_F_V_eq_SG_times_V( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, int dir, int sign, const Subset s ); void QDP_F_P_eq_SG_times_P( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , int dir, int sign, const Subset s ); void QDP_F_H_eq_SGA_times_H( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , const Subset s ); void QDP_F_D_eq_SGA_times_D( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , const Subset s ); void QDP_F_V_eq_SGA_times_V( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, const Subset s ); void QDP_F_P_eq_SGA_times_P( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , int dir, int sign, const Subset s ); /* Multiplication with (parallel) shifts of both multiplier and multiplicand */ void QDP_F_G_eq_SG_times_SG( restrict LatticeGaugeF *r , LatticeGaugeF *a , LatticeGaugeF *b , int dir, int sign, const Subset s ); void QDP_F_H_eq_SG_times_SH( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , int dir, int sign, const Subset s ); void QDP_F_D_eq_SG_times_SD( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , int dir, int sign, const Subset s ); void QDP_F_V_eq_SG_times_SV( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, int dir, int sign, const Subset s ); void QDP_F_P_eq_SG_times_SP( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , int dir, int sign, const Subset s ); void QDP_F_H_eq_SGA_times_SH( restrict LatticeHalfFermionF *r , LatticeGaugeF *a , LatticeHalfFermionF *b , const Subset s ); void QDP_F_D_eq_SGA_times_SD( restrict LatticeDiracF *r , LatticeGaugeF *a , LatticeDiracF *b , const Subset s ); void QDP_F_V_eq_SGA_times_SV( restrict LatticeStaggeredFermionF *r, LatticeGaugeF *a , LatticeStaggeredFermionF *b, const Subset s ); void QDP_F_P_eq_SGA_times_SP( restrict LatticePropagatorF *r , LatticeGaugeF *a , LatticePropagatorF *b , int dir, int sign, const Subset s ); /*-------------------*/ /* Filling constants */ /*-------------------*/ /* r = 0 */ void QDP_F_R_eq_zero( restrict LatticeRealF *r , const Subset s ); void QDP_F_C_eq_zero( restruct LatticeComplexF *r , const Subset s ); void QDP_F_I_eq_zero( restruct LatticeIntF *r , const Subset s ); void QDP_F_G_eq_zero( restruct LatticeGaugeF *r , const Subset s ); void QDP_F_H_eq_zero( restruct LatticeHalfFermionF *r , const Subset s ); void QDP_F_D_eq_zero( restruct LatticeDiracF *r , const Subset s ); void QDP_F_V_eq_zero( restruct LatticeStaggeredFermionF *r, const Subset s ); void QDP_F_P_eq_zero( restruct LatticePropagatorF *r , const Subset s ); /* r = scalar */ void QDP_F_R_eq_r( restrict LatticeRealF *r , const RealF *a , const Subset s ); void QDP_F_C_eq_c( restruct LatticeComplexF *r , const ComplexF *a , const Subset s ); void QDP_F_I_eq_i( restruct LatticeIntF *r , const IntF *a , const Subset s ); void QDP_F_G_eq_g( restruct LatticeGaugeF *r , const GaugeF *a , const Subset s ); void QDP_F_H_eq_h( restruct LatticeHalfFermionF *r , const HalfFermionF *a , const Subset s ); void QDP_F_D_eq_d( restruct LatticeDiracF *r , const DiracF *a , const Subset s ); void QDP_F_V_eq_v( restruct LatticeStaggeredFermionF *r, const StaggeredFermionF *a, const Subset s ); void QDP_F_P_eq_p( restruct LatticePropagatorF *r , const PropagatorF *a , const Subset s ); /* r = function of coordinates */ void QDP_F_R_eq_func( restrict LatticeRealF *r , RealF (*func)(int coordinate[]), const Subset s ); void QDP_F_C_eq_func( restruct LatticeComplexF *r , ComplexF (*func)(int coordinate[]), const Subset s ); void QDP_F_I_eq_func( restruct LatticeIntF *r , IntF (*func)(int coordinate[]), const Subset s ); void QDP_F_G_eq_func( restruct LatticeGaugeF *r , ComplexF (*func)(int coordinate[], int i_c, int j_c), const Subset s ); void QDP_F_H_eq_func( restruct LatticeHalfFermionF *r , CompexF (*func)(int coordinate[], int i_c, int i_s), const Subset s ); void QDP_F_D_eq_func( restruct LatticeDiracF *r , ComplexF (*func)(int coordinate[], int i_c, int i_s), const Subset s ); void QDP_F_V_eq_func( restruct LatticeStaggeredFermionF *r, ComplexF (*func)(int coordinate[], int i_c), const Subset s ); void QDP_F_P_eq_func( restruct LatticePropagatorF *r , ComplexF (*func)(int coordinate[], int i_c, int i_s, int j_c, int j_s), const Subset s ); /* random numbers */ void QDP_F_R_eq_randgauss( restrict LatticeRealF *r , const Subset s ); void QDP_F_C_eq_randgauss( restrict LatticeComplexF *r , const Subset s ); void QDP_F_I_eq_randgauss( restrict LatticeIntF *r , const Subset s ); void QDP_F_G_eq_randgauss( restrict LatticeGaugeF *r , const Subset s ); void QDP_F_H_eq_randgauss( restrict LatticeHalfFermionF *r , const Subset s ); void QDP_F_D_eq_randgauss( restrict LatticeDiracF *r , const Subset s ); void QDP_F_V_eq_randgauss( restrict LatticeStaggeredFermionF *r, const Subset s ); void QDP_F_P_eq_randgauss( restrict LatticePropagatorF *r , const Subset s ); /*-------------*/ /* Comparisons */ /*-------------*/ void QDP_F_I_eq_R_eq_R( restrict IntF *r, const RealF *a, const RealF *b, const Subset s); void QDP_F_I_eq_R_ne_R( restrict IntF *r, const RealF *a, const RealF *b, const Subset s); void QDP_F_I_eq_R_gt_R( restrict IntF *r, const RealF *a, const RealF *b, const Subset s); void QDP_F_I_eq_R_lt_R( restrict IntF *r, const RealF *a, const RealF *b, const Subset s); void QDP_F_I_eq_R_ge_R( restrict IntF *r, const RealF *a, const RealF *b, const Subset s); void QDP_F_I_eq_R_le_R( restrict IntF *r, const RealF *a, const RealF *b, const Subset s); void QDP_F_I_eq_I_eq_I( restrict IntF *r, const IntF *a, const IntF *b, const Subset s); void QDP_F_I_eq_I_ne_I( restrict IntF *r, const IntF *a, const IntF *b, const Subset s); void QDP_F_I_eq_I_gt_I( restrict IntF *r, const IntF *a, const IntF *b, const Subset s); void QDP_F_I_eq_I_lt_I( restrict IntF *r, const IntF *a, const IntF *b, const Subset s); void QDP_F_I_eq_I_ge_I( restrict IntF *r, const IntF *a, const IntF *b, const Subset s); void QDP_F_I_eq_I_le_I( restrict IntF *r, const IntF *a, const IntF *b, const Subset s); /*--------------------*/ /* Boolean Operations */ /*--------------------*/ void QDP_F_I_eq_I_or_I( restrict IntF *r, const IntF *a, const IntF *b, const Subset s); void QDP_F_I_eq_I_and_I( restrict IntF *r, const IntF *a, const IntF *b, const Subset s); void QDP_F_I_eq_I_xor_I( restrict IntF *r, const IntF *a, const IntF *b, const Subset s); void QDP_F_I_eq_not_I( restrict IntF *r, const IntF *a, const Subset s); /*----------*/ /* Copymask */ /*----------*/ void QDP_F_R_eq_R_mask_I( restrict LatticeRealF *r , LatticeRealF *a , LatticeIntF *b , const Subset s ); void QDP_F_C_eq_C_mask_I( restrict LatticeComplexF *r , LatticeComplexF *a , LatticeIntF *b , const Subset s ); void QDP_F_I_eq_I_mask_I( restrict LatticeIntF *r , LatticeIntF *a , LatticeIntF *b , const Subset s ); void QDP_F_G_eq_G_mask_I( restrict LatticeGaugeF *r , LatticeGaugeF *a , LatticeIntF *b , const Subset s ); void QDP_F_H_eq_H_mask_I( restrict LatticeHalfFermionF *r , LatticeHalfFermionF *a , LatticeIntF *b , const Subset s ); void QDP_F_D_eq_D_mask_I( restrict LatticeDiracF *r , LatticeDiracF *a , LatticeIntF *b , const Subset s ); void QDP_F_V_eq_V_mask_I( restrict LatticeStaggeredFermionF *r, LatticeStaggeredFermionF *a, LatticeIntF *bb, const Subset s ); void QDP_F_P_eq_P_mask_I( restrict LatticePropagatorF *r , LatticePropagatorF *a , LatticeIntF *b , const Subset s ); ----------------------------------------------------------------------