00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00024 class mdp_matrix_field: public mdp_field<mdp_complex> { 00025 public: 00026 int rows, columns, imax; 00027 mdp_matrix_field() { 00028 rows=columns=imax=0; 00029 mdp_field<mdp_complex>::reset_field(); 00030 } 00031 mdp_matrix_field(mdp_matrix_field &field) { 00032 mdp_field<mdp_complex>::reset_field(); 00033 rows=field.rows; 00034 columns=field.columns; 00035 imax=field.imax; 00036 allocate_field(field.lattice(),field.imax); 00037 } 00038 mdp_matrix_field(mdp_lattice &a, int i, int j) { 00039 mdp_field<mdp_complex>::reset_field(); 00040 rows=i; 00041 columns=j; 00042 imax=i*j; 00043 allocate_field(a,imax); 00044 } 00045 void allocate_mdp_matrix_field(mdp_lattice &a, int i, int j) { 00046 deallocate_field(); 00047 rows=i; 00048 columns=j; 00049 imax=i*j; 00050 allocate_field(a,imax); 00051 } 00052 mdp_matrix operator() (mdp_site x) { 00053 return mdp_matrix(address(x),rows,columns); 00054 } 00055 mdp_complex& operator() (mdp_site x, int i, int j) { 00056 return address(x)[i*columns+j]; 00057 } 00058 const mdp_complex& operator() (mdp_site x, int i, int j) const { 00059 return address(x)[i*columns+j]; 00060 } 00061 };