- Timestamp:
- Feb 2, 2010, 12:22:06 PM (16 years ago)
- Children:
- 45cd358
- Parents:
- adcdf8 (diff), 6d0fcaa (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- util/src
- Files:
-
- 2 edited
-
NanoCreator.c (modified) (11 diffs)
-
NanoCreator.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
util/src/NanoCreator.c
radcdf8 r4bb871a 520 520 { 521 521 int c; 522 if ((a == 0) && (b == 0)) 523 return 1; 524 else if (a == 0) 525 return b; 526 else if (b == 0) 527 return a; 522 528 do { 523 529 c = a % b; /* Rest of integer divison */ … … 672 678 double *x = NULL, *coord = NULL, *tempvector = NULL, *offset = NULL; 673 679 //double *cog = NULL, *cog_projected = NULL; 674 char stage[6];680 char *stage = NULL; 675 681 int axis[NDIM] = {0,1,2}, chiral[2] = {1,1}, factors[NDIM] = {1,1,1}; 676 682 char name[255], line[255], input = 'n'; 677 683 char *CellBuffer = NULL, *SheetBuffer = NULL, *TubeBuffer = NULL, *bufptr = NULL; 678 684 double *randomness = NULL, percentage; // array with percentages for presence in sheet and beyond 679 int i,j, ggT ;685 int i,j, ggT, ggTsmall; 680 686 int length; 681 687 … … 688 694 } else { 689 695 // store variables 690 filename = argv[1]; 691 strncpy(stage, argv[2], 5); 696 filename = Malloc(sizeof(char)*(strlen(argv[1])+1), "Main: filename"); 697 stage = Malloc(sizeof(char)*(strlen(argv[2])+1), "Main: stage"); 698 strcpy(filename, argv[1]); 699 strcpy(stage, argv[2]); 692 700 fprintf(stdout, "I will begin at stage %s.\n", stage); 693 701 694 702 // build filenames 703 length = strlen(filename); 695 704 char *ptr = strrchr(filename, '.'); 696 705 if (ptr == NULL) { 697 706 ptr = filename; 698 707 } else { 699 length = strlen(filename);700 708 if (ptr != NULL) { 701 709 length = ((int)(ptr-filename) >= length-5) ? (int)(ptr-filename) : length; … … 841 849 842 850 int numbersheet, biggestdiameter, sheetnr[NDIM], tmp, seed; 851 double dfactors[2]; 843 852 double x1,x2,x3, angle; 844 853 char flag = 'n'; … … 874 883 875 884 do { 876 fprintf(stdout, "\nNow specify the two natural numbers ( m n) defining the chiral angle, \nif the result is crap, try flipping to (m,n): ");885 fprintf(stdout, "\nNow specify the two natural numbers (n m) defining the chiral angle, \nif the result is crap, try flipping to (n,m): "); 877 886 fscanf(stdin, "%d %d", &chiral[0], &chiral[1]); 878 ggT = GCD(2*chiral[1]+chiral[0],2*chiral[0]+chiral[1]); 887 ggTsmall = GCD(chiral[0],chiral[1]); 888 ggT = GCD(2*chiral[0]+chiral[1],2*chiral[1]+chiral[0]); 889 fprintf(stdout, "Greatest Common Denominator of (n, m) is %d\n", ggTsmall); 879 890 fprintf(stdout, "Greatest Common Denominator of (2n+m, 2m+n) is %d\n", ggT); 880 891 fprintf(stdout, "chiral0: %d\tchiral1: %d\n", chiral[0], chiral[1]); 881 892 for (i=0;i<NDIM;i++) { 882 Tubevector[axis[0]][i] = (double)chiral[0] * Vector[axis[0]][i] + (double)chiral[1] * Vector[axis[1]][i];883 //Tubevector[axis[0]][i] = chiral[0] * Vector[axis[0]][i] + chiral[1] * Vector[axis[1]][i];893 // Tubevector[axis[0]][i] = (double)chiral[0] * Vector[axis[0]][i] + (double)chiral[1] * Vector[axis[1]][i]; 894 Tubevector[axis[0]][i] = chiral[0] * Vector[axis[0]][i] + chiral[1] * Vector[axis[1]][i]; 884 895 //Tubevector[axis[0]][i] = (2.*chiral[0]+chiral[1])/(double)ggT * Vector[axis[0]][i] + (-chiral[0]-2.*chiral[1])/(double)ggT * Vector[axis[1]][i]; 885 896 //Tubevector[axis[1]][i] = -chiral[1] * Vector[axis[0]][i] + chiral[0] * Vector[axis[1]][i]; 886 Tubevector[axis[1]][i] = (double)chiral[0] * OrthoVector[axis[0]][i] - (double)chiral[1] * OrthoVector[axis[1]][i]; 897 // Tubevector[axis[1]][i] = (double)chiral[0] * OrthoVector[axis[0]][i] - (double)chiral[1] * OrthoVector[axis[1]][i]; 898 Tubevector[axis[1]][i] = (2.*chiral[0]+chiral[1])/(double)ggT * Vector[axis[0]][i] + (-chiral[0]-2.*chiral[1])/(double)ggT * Vector[axis[1]][i]; 887 899 //Tubevector[axis[1]][i] = (-chiral[0]-2.*chiral[1])/(double)ggT * Vector[axis[0]][i] + (2.*chiral[0]+chiral[1])/(double)ggT * Vector[axis[1]][i]; 888 900 // fprintf(stderr, "Tubevector[axis[0]][i] = (double)chiral[0] * Vector[axis[0]][i] + (double)chiral[1] * Vector[axis[1]][i]\n = %lg * %lg + %lg * %lg = %lg + %lg = %lg\n\n", … … 924 936 x1 = gsl_vector_get(u,0)*(double)i; 925 937 x2 = gsl_vector_get(u,1)*(double)i; 926 x3 =927 938 fprintf(stdout, "%d: %d\t%d vs. %lg\t%lg\n",i, ((int)(x1+x1/fabs(x1)*.5)), ((int)(x2+x2/fabs(x2)*.5)), (x1), (x2)); 928 939 if (( fabs( ((int)(x1+x1/fabs(x1)*.5)) - (x1) ) < 1e-6) && ( fabs( ((int)(x2+x2/fabs(x2)*.5)) - (x2) ) < 1e-6 )) { … … 931 942 } 932 943 } 933 fprintf(stdout, "(c,d) = (%lg,%lg)\n",gsl_vector_get(u,0), gsl_vector_get(u,1)); 934 935 // get length 944 x1 = fabs(gsl_vector_get(u,0)); 945 x2 = fabs(gsl_vector_get(u,1)); 946 fprintf(stdout, "(c,d) = (%d,%d).\n",((int)(x1+x1/fabs(x1)*.5)), ((int)(x2+x2/fabs(x2)*.5))); 947 j = GCD(((int)(x1+x1/fabs(x1)*.5)), ((int)(x2+x2/fabs(x2)*.5))); 948 fprintf(stdout, "GCD(%d,%d) = %i.\n", ((int)(x1+x1/fabs(x1)*.5)), ((int)(x2+x2/fabs(x2)*.5)), j); 949 for (i=0;i<2;i++) 950 gsl_vector_set(u,i, gsl_vector_get(u,i)/(double)j); 951 // get length 936 952 double x[NDIM]; 937 953 for (i=0;i<NDIM;i++) 938 954 x[i] = gsl_vector_get(u,0) * Vector[axis[0]][i] + gsl_vector_get(u,1) * Vector[axis[1]][i]; 939 955 angle = Norm(x)/Norm(Tubevector[axis[1]]) ;//ScalarProduct(x,Tubevector[axis[1]])/Norm(Tubevector[axis[1]]); 940 fprintf(stdout, " angle is %lg\n", angle);956 fprintf(stdout, "Angle is %lg.\n", angle); 941 957 for (i=0;i<NDIM;i++) { 942 958 Tubevector[axis[1]][i] = gsl_vector_get(u,0) * Vector[axis[0]][i] + gsl_vector_get(u,1) * Vector[axis[1]][i]; … … 994 1010 ); 995 1011 fprintf(stdout, "\nGive integer factors for length and radius of tube (multiple of %d suggested) : ", ggT); 996 fscanf(stdin, "%d %d", &factors[1], &factors[0]); 1012 fscanf(stdin, "%lg %lg", &dfactors[1], &dfactors[0]); 1013 for(i=0;i<2;i++) 1014 factors[i] = (int)(dfactors[i]); 1015 fprintf(stdout, "\nI got %d and %d.\n", factors[1], factors[0]); 997 1016 fprintf(stdout, "\nThe chiral angle then is %5.5f degrees with tube radius %5.5f A and length %5.5f A, i.e. torus radius of %5.5f A.\n", 998 1017 acos(Projection(Vector[axis[0]], Tubevector[axis[0]]))/M_PI*180., … … 1323 1342 fprintf(SheetFile, "%s\t%5.5lg\t%5.5lg\t%5.5lg\n", atombuffer[nr].name, coord[0], coord[1], coord[2]); 1324 1343 // rotate to align the sheet in xy plane 1325 x1 = coord[0]*cos( -angle) + coord[1] * sin(-angle);1326 x2 = coord[0]*(-sin( -angle)) + coord[1] * cos(-angle);1344 x1 = coord[0]*cos(angle) + coord[1] * sin(angle); 1345 x2 = coord[0]*(-sin(angle)) + coord[1] * cos(angle); 1327 1346 x3 = coord[2]; 1328 1347 fprintf(SheetFileAligned, "%s\t%5.5lg\t%5.5lg\t%5.5lg\n", atombuffer[nr].name, x1, x2, x3); … … 1424 1443 fprintf(TubeFile, "%s\t%lg\t%lg\t%lg\n", name, atom_transformed[0], atom_transformed[1], atom_transformed[2]); 1425 1444 // rotate and flip to align tube in z-direction 1426 x1 = atom_transformed[0]*cos( -angle) + atom_transformed[1] * sin(-angle);1427 x2 = atom_transformed[0]*(-sin( -angle)) + atom_transformed[1] * cos(-angle);1445 x1 = atom_transformed[0]*cos(angle) + atom_transformed[1] * sin(angle); 1446 x2 = atom_transformed[0]*(-sin(angle)) + atom_transformed[1] * cos(angle); 1428 1447 x3 = atom_transformed[2]; 1429 1448 fprintf(TubeFileAligned, "%s\t%lg\t%lg\t%lg\n", name, x3, x2, x1); // order so that symmetry is along z axis … … 1537 1556 if (TubeBuffer != NULL) Free(TubeBuffer, "Main: end of stages - TubeBuffer"); 1538 1557 1539 Free(CellFilename, "Main: end of stafes - CellFilename"); 1540 Free(SheetFilename, "Main: end of stafes - CellFilename"); 1541 Free(TubeFilename, "Main: end of stafes - CellFilename"); 1542 Free(TorusFilename, "Main: end of stafes - CellFilename"); 1543 Free(SheetFilenameAligned, "Main: end of stafes - CellFilename"); 1544 Free(TubeFilenameAligned, "Main: end of stafes - CellFilename"); 1558 Free(CellFilename, "Main: end of stages - CellFilename"); 1559 Free(SheetFilename, "Main: end of stages - CellFilename"); 1560 Free(TubeFilename, "Main: end of stages - CellFilename"); 1561 Free(TorusFilename, "Main: end of stages - CellFilename"); 1562 Free(SheetFilenameAligned, "Main: end of stages - CellFilename"); 1563 Free(TubeFilenameAligned, "Main: end of stages - CellFilename"); 1564 Free(filename, "Main: end of stages - filename"); 1565 Free(stage, "Main: end of stages - stage"); 1545 1566 1546 1567 // exit -
util/src/NanoCreator.h
radcdf8 r4bb871a 2 2 #define NANOCREATOR_H_ 3 3 4 #define MYEPSILON 1e-134 #define MYEPSILON 2e-1 5 5 6 6 struct Atoms
Note:
See TracChangeset
for help on using the changeset viewer.
