| 76 | } |
| 77 | |
| 78 | int scDimInt(ideal S, ideal Q) |
| 79 | { |
| 80 | id_Test(S, currRing); |
| 81 | if( Q!=NULL ) id_Test(Q, currRing); |
| 82 | |
| 83 | int mc; |
| 84 | hexist = hInit(S, Q, &hNexist); |
| 85 | if (!hNexist) |
| 86 | return (currRing->N); |
| 87 | hwork = (scfmon)omAlloc(hNexist * sizeof(scmon)); |
| 88 | hvar = (varset)omAlloc(((currRing->N) + 1) * sizeof(int)); |
| 89 | hpure = (scmon)omAlloc((1 + ((currRing->N) * (currRing->N))) * sizeof(int)); |
| 90 | mc = hisModule; |
| 91 | if (!mc) |
| 92 | { |
| 93 | hrad = hexist; |
| 94 | hNrad = hNexist; |
| 95 | } |
| 96 | else |
| 97 | hrad = (scfmon)omAlloc(hNexist * sizeof(scmon)); |
| 98 | radmem = hCreate((currRing->N) - 1); |
| 99 | hCo = (currRing->N) + 1; |
| 100 | loop |
| 101 | { |
| 102 | if (mc) |
| 103 | hComp(hexist, hNexist, mc, hrad, &hNrad); |
| 104 | if (hNrad) |
| 105 | { |
| 106 | hNvar = (currRing->N); |
| 107 | hRadical(hrad, &hNrad, hNvar); |
| 108 | hSupp(hrad, hNrad, hvar, &hNvar); |
| 109 | if (hNvar) |
| 110 | { |
| 111 | memset(hpure, 0, ((currRing->N) + 1) * sizeof(int)); |
| 112 | hPure(hrad, 0, &hNrad, hvar, hNvar, hpure, &hNpure); |
| 113 | hLexR(hrad, hNrad, hvar, hNvar); |
| 114 | hDimSolve(hpure, hNpure, hrad, hNrad, hvar, hNvar); |
| 115 | } |
| 116 | } |
| 117 | else |
| 118 | { |
| 119 | hCo = 0; |
| 120 | break; |
| 121 | } |
| 122 | mc--; |
| 123 | if (mc <= 0) |
| 124 | break; |
| 125 | } |
| 126 | hKill(radmem, (currRing->N) - 1); |
| 127 | omFreeSize((ADDRESS)hpure, (1 + ((currRing->N) * (currRing->N))) * sizeof(int)); |
| 128 | omFreeSize((ADDRESS)hvar, ((currRing->N) + 1) * sizeof(int)); |