/* File orbdes.c. Main program for orbdes command, which may be used construct a design from the orbits of a point stabilizer in a permutation group. The format of the command is:
orbdes <options> <permGroup> <orbRep> <design>
where the meaning of the parameters is as follows:
<options>: Options for program.
<permGroup>: The permutation group from which the design is to be constructed.
<orbRep>: Determines which orbit of the point stabilizer of 1 (or the first point in <orbRep>^<permGroup> for an intransitive group) will be used.
<design>: The name for the design to be created.
*/
/* If there are no options, provide usage information and exit. */ if ( argc == 1 ) {
printf( "\nUsage: orbdes [-a] [-m] [-mt] permGroup point design\n"); return 0;
}
/* Check for limits option. If present in position 1, give limits and
return. */ if ( strcmp( argv[1], "-l") == 0 || strcmp( argv[1], "-L") == 0 ) {
showLimits(); return 0;
} /* Check for verify option. If present in position i (i as above) perform
verify (Note verifyOptions terminates program). */ if ( strcmp( argv[1], "-v") == 0 || strcmp( argv[1], "-V") == 0 )
verifyOptions();
/* Check for exactly 3 parameters following options. */ for ( optionCountPlus1 = 1 ; optionCountPlus1 < argc &&
argv[optionCountPlus1][0] == '-' ; ++optionCountPlus1 )
;
/* Find the first point in the G-orbit of orbRep, call it basePt,and make
it the first base point. Make orbRep the second base point. */
insertBasePoint( G, 1, orbRep); for ( basePt = 1; G->schreierVec[1][basePt] == NULL ; ++basePt )
;
insertBasePoint( G, 1, basePt);
insertBasePoint( G, 2, orbRep);
/* Allocate the design. */
D = newZeroMatrix( 2, G->degree, G->degree);
/* Construct the design. */
pointList = allocIntArrayDegree();
flag = allocBooleanArrayDegree();
processed = 0;
found = 1;
pointList[1] = basePt; for ( pt = 1 ; pt <= G->degree ; ++pt )
flag[pt] = FALSE;
flag[basePt] = TRUE; for ( i = 1 ; i <= G->basicOrbLen[2] ; ++i )
D->entry[G->basicOrbit[2][i]][basePt] = 1; while ( processed < found ) {
pt = pointList[++processed]; for ( gen = G->generator ; gen ; gen = gen->next ) {
img = gen->image[pt]; if ( !flag[img] ) {
flag[img] = TRUE;
pointList[++found] = img; for ( i = 1 ; i <= G->degree ; ++i )
D->entry[gen->image[i]][img] = D->entry[i][pt];
}
}
}
/* Write out the design. */
sprintf( comment, "Design from group %s, %s_%d orbit of %d.", G->name,
G->name, basePt, orbRep);
strcpy( D->name, designLibraryName); if ( matrixFlag )
write01Matrix( designFileName, designLibraryName, D, FALSE, comment); elseif ( transposeMatrixFlag )
write01Matrix( designFileName, designLibraryName, D, TRUE, comment); else
writeDesign( designFileName, designLibraryName, D, comment);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.