MCPcopy Create free account
hub / github.com/Singular/Singular / generateMonomData

Method generateMonomData

kernel/numeric/mpr_base.cc:2227–2341  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2225}
2226
2227void resMatrixDense::generateMonomData( int deg, intvec* polyDegs , intvec* iVO )
2228{
2229 int i,j,k;
2230
2231 // init monomData
2232 veclistblock= 512;
2233 veclistmax= veclistblock;
2234 resVectorList= (resVector *)omAlloc( veclistmax*sizeof( resVector ) );
2235
2236 // Init resVector()s
2237 for ( j= veclistmax - 1; j >= 0; j-- ) resVectorList[j].init();
2238 numVectors= 0;
2239
2240 // Generate all monoms of degree deg
2241 poly start= pOne();
2242 generateMonoms( start, 1, deg );
2243 pDelete( & start );
2244
2245 mprSTICKYPROT("\n");
2246
2247 // Check for reduced monoms
2248 // First generate polyDegs.rows() monoms
2249 // x(k)^(polyDegs[k]), 0 <= k < polyDegs.rows()
2250 ideal pDegDiv= idInit( polyDegs->rows(), 1 );
2251 for ( k= 0; k < polyDegs->rows(); k++ )
2252 {
2253 poly p= pOne();
2254 pSetExp( p, k + 1, (*polyDegs)[k] );
2255 pSetm( p );
2256 (pDegDiv->m)[k]= p;
2257 }
2258
2259 // Now check each monom if it is reduced.
2260 // A monom monom is called reduced if there exists
2261 // exactly one x(k)^(polyDegs[k]) that divides the monom.
2262 int divCount;
2263 for ( j= numVectors - 1; j >= 0; j-- )
2264 {
2265 divCount= 0;
2266 for ( k= 0; k < IDELEMS(pDegDiv); k++ )
2267 if ( pLmDivisibleByNoComp( (pDegDiv->m)[k], resVectorList[j].mon ) )
2268 divCount++;
2269 resVectorList[j].isReduced= (divCount == 1);
2270 }
2271
2272 // create the sets S(k)s
2273 // a monom x(i)^deg, deg given, is element of the set S(i)
2274 // if all x(0)^(polyDegs[0]) ... x(i-1)^(polyDegs[i-1]) DONT divide
2275 // x(i)^deg and only x(i)^(polyDegs[i]) divides x(i)^deg
2276 bool doInsert;
2277 for ( k= 0; k < iVO->rows(); k++)
2278 {
2279 //mprPROTInl(" ------------ var:",(*iVO)[k]);
2280 for ( j= numVectors - 1; j >= 0; j-- )
2281 {
2282 //mprPROTPnl("testing monom",resVectorList[j].mon);
2283 if ( resVectorList[j].elementOfS == SFREE )
2284 {

Callers

nothing calls this directly

Calls 8

generateMonomsFunction · 0.85
idInitFunction · 0.85
PrintSFunction · 0.85
pWrite0Function · 0.85
pWriteFunction · 0.85
rowsMethod · 0.80
PrintFunction · 0.50
initMethod · 0.45

Tested by

no test coverage detected