-
Notifications
You must be signed in to change notification settings - Fork 1
/
dimtabeis.cc
64 lines (54 loc) · 2.16 KB
/
dimtabeis.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// DIMTABEIS.CC -- Table of dimensions of homology at level N with trivial character
// Columns: Field Weight(2) Level dimall dimcusp dimeis
// where dimall = dimension of homology subspace with trivial character
// dimcusp = dimension of cuspidal homology subspace with trivial character
// dimeis = dimension of non-cuspidal homology subspace with trivial character
// Inputs (prompted for): d (field)
// both_conj (flag to include both conjugates in loop over levels)
// min_norm (lower bound on level norm in loop over levels)
// max_norm (upper bound on level norm in loop over levels)
#include "qidloop.h"
#include "homspace.h"
//#define MODP
int main ()
{
long d, maxpnorm(1000);
cerr << "Enter field: " << flush; cin >> d;
if (!check_field(d))
{
cerr<<"field must be one of: "<<valid_fields<<endl;
exit(1);
}
long ch=0;
#ifdef MODP
cerr << "Enter characteristic (0 or prime): " << flush; cin >> ch;
#endif
long min_norm, max_norm; Quad n;
int both_conj;
cerr<<"Both conjugates? (0/1) "; cin >> both_conj;
int verbose=0;
cerr<<"Enter first and last norm for Quad loop: ";
cin >> min_norm >> max_norm;
cerr<<endl;
Quad::field(d,maxpnorm);
cout << "# Table of dimensions of ";
if (ch) cout<<"mod "<<ch<<" ";
cout<<"weight 2 Bianchi cuspidal and Eisenstein forms for GL2 over Q(sqrt(-"<<d<<"))" << endl;
if (Quad::class_group_2_rank>0)
cout<<"# (with trivial character)"<<endl;
cout << "# Field\tWeight\tLevel\t";
cout << "dim(all)\tdim(cuspidal)\tdim(eisenstein)" << endl;
Qidealooper loop(min_norm, max_norm, both_conj, 1); // sorted within norm
while( loop.not_finished() )
{
Qideal N = loop.next();
cout << "\t"<< d << "\t2\t"; // field and weight
cout << ideal_label(N)<<"\t"; // level
homspace hplus(N, 1, verbose, ch); //level, plusflag, verbose, characteristic
pair<int,int> dims = hplus.trivial_character_subspace_dimensions();
int dimcusp = dims.second;
int dimall = dims.first;
int dimeis = dimall-dimcusp;
cout << dimall << "\t\t" << dimcusp << "\t\t" << dimeis << endl;
}
}