/* Computes the locally free class group and the kernel group for many small groups G.
   We do not consider abelian groups. We also do not consider orders o with "large"
   prime factors, because in this case we will have large character fields.

   We print "ALARM", if the D-group is trivial and G is not dihedral, because by [CR, (50.29)]
   we know exactly the groups G for which D is trivial.
*/



orders := [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20,21,22,24,25,26,27,28,
           30,32,33,34,35,36,38,39,40,42,44,45,48,49,50, 52, 54, 55, 56, 60, 63, 64,72];

DB := SmallGroupDatabase();

filename := "SmallGroups.out";

for o in orders do
    for i:=1 to NumberOfSmallGroups(o) do
        G := SmallGroup(DB, o, i) ;
        if not IsAbelian(G) then
            C := LocallyFreeClassgroup(G, false);
            A := C`cl; D := C`D;
            fprintf filename, "o = %o,  i = %o: cl(ZG) = %o\n D = %o\n\n", o, i, A, D;
            if #A eq 1 and not IsDihedral(G) then
                fprintf filename, "!!!!!!!!!!!!!!!!ALARM,ALARM,ALARM!!!!!!!!!!!!!!";
            end if;
            if not (#A eq #D) then
	        fprintf filename, "D NOT EQUAL clA\n";
	    end if;
            fprintf filename, "******************************************************\n";
        end if;
    end for;
end for;
