Skip to content

Commit ad8038a

Browse files
committed
Added files via upload
Calculates angular momentum of a system set up in CTH.
1 parent da1db0f commit ad8038a

File tree

1 file changed

+128
-0
lines changed

1 file changed

+128
-0
lines changed

angular_momentum.c

+128
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
#include <stdlib.h>
2+
#include <stdio.h>
3+
#include <math.h>
4+
5+
6+
int argc;
7+
char **argv;
8+
9+
int main (int argc, char **argv) {
10+
char filename1[255], firstletter[256];
11+
FILE * fid;
12+
13+
/*This reads "masses.txt" and calculates angluar momentum*/
14+
15+
if (argc !=2) {
16+
printf("Usage: angular_momentum filename\n");
17+
exit(0);
18+
}
19+
20+
21+
sprintf(filename1, "%s", argv[1]);
22+
23+
printf("input filename=%s\n", filename1);
24+
25+
fid=fopen(filename1, "r+w");
26+
27+
28+
if (fid == NULL){
29+
printf("(Input file not found):\n");
30+
printf("%s\n", filename1);
31+
exit(0);
32+
}
33+
34+
rewind(fid);
35+
36+
float target_radius, impactor_radius;
37+
38+
fgets(firstletter, 255, fid); /* "TARGET" */
39+
/*fgets(firstletter, 255, fid); */ /* "rgstable xxx, xxx, xxx, xxx */
40+
fgets(firstletter, 255, fid); /* "rgstable xxx, xxx, xxx, xxx */
41+
sscanf(firstletter, "%*47c%e", &target_radius);
42+
43+
fgets(firstletter, 255, fid); /* "input filename = obj.0000000.txt " */
44+
45+
float target_y, target_vx, target_mass;
46+
float impactor_y, impactor_vx, impactor_mass;
47+
48+
fgets(firstletter, 255, fid);
49+
sscanf(firstletter, "%e", &target_mass);
50+
51+
fgets(firstletter, 255, fid);
52+
sscanf(firstletter, "%*48c\t%*2c%e", &target_y);
53+
/*want the absolute value of y*/
54+
target_y=sqrt(target_y*target_y);
55+
56+
fgets(firstletter, 255, fid);
57+
sscanf(firstletter, "%*32c%e", &target_vx);
58+
target_vx=1.0e5*target_vx;
59+
/*want the absolute value of vx*/
60+
target_vx=sqrt(target_vx*target_vx);
61+
62+
fgets(firstletter, 255, fid); /* "IMPACTOR" */
63+
/*fgets(firstletter, 255, fid);*/ /* "rgstable xxx, xxx, xxx, xxx */
64+
fgets(firstletter, 255, fid); /* "rgstable xxx, xxx, xxx, xxx */
65+
sscanf(firstletter, "%*47c%e", &impactor_radius);
66+
67+
fgets(firstletter, 255, fid); /* "input filename = obj.0000000.txt " */
68+
69+
fgets(firstletter, 255, fid);
70+
sscanf(firstletter, "%e", &impactor_mass);
71+
72+
fgets(firstletter, 255, fid);
73+
sscanf(firstletter, "%*48c\t%*2c%e", &impactor_y);
74+
/*want the absolute value of y*/
75+
impactor_y=sqrt(impactor_y*impactor_y);
76+
77+
fgets(firstletter, 255, fid);
78+
sscanf(firstletter, "%*32c%e", &impactor_vx);
79+
impactor_vx=1.0e5*impactor_vx;
80+
/*want the absolute value of vx*/
81+
impactor_vx=sqrt(impactor_vx*impactor_vx);
82+
83+
fprintf(stderr, "target mass : %e (grams)\n", target_mass);
84+
fprintf(stderr, "target y loc : %e (cm) \n", target_y);
85+
fprintf(stderr, "target vx : %e (cm/s)\n", target_vx);
86+
fprintf(stderr, ".........................................\n");
87+
fprintf(stderr, "impactor mass : %e (grams)\n", impactor_mass);
88+
fprintf(stderr, "impactor y loc : %e (cm) \n", impactor_y);
89+
fprintf(stderr, "impactor vx : %e (cm/s)\n", impactor_vx);
90+
fprintf(stderr, ".........................................\n");
91+
92+
fprintf(stderr, "Total mass : %e (grams)\n", target_mass+impactor_mass);
93+
fprintf(stderr, "Mass imapctor : %e (grams)\n", impactor_mass);
94+
fprintf(stderr, "Radius impactor: %.3f (km)\n", impactor_radius/1.0e5);
95+
fprintf(stderr, "Dens. impactor : %.3f (g/cc)\n", impactor_mass/((4.0/3.0)*3.1415926*pow(impactor_radius, 3.0)));
96+
fprintf(stderr, "Mass target : %e (grams)\n", target_mass);
97+
fprintf(stderr, "Radius target : %.3f (km)\n", target_radius/1.0e5);
98+
fprintf(stderr, "Dens. target : %.3f (g/cc)\n", target_mass/((4.0/3.0)*3.1415926*pow(target_radius, 3.0)));
99+
fprintf(stderr, "Gamma : %e \n", impactor_mass/(target_mass+impactor_mass));
100+
101+
double L;
102+
103+
L=((target_mass/1.0e27)*(target_y/1.0e8)*(target_vx/1.0e5)) + ((impactor_mass/1.0e27)*(impactor_y/1.0e8)*(impactor_vx/1.0e5));
104+
105+
fprintf(stderr, "Angular momentum : %.5lf x10^41 (cgs)\n", L/10.0);
106+
fprintf(stderr, "Angular momentum : %e (LEM)\n", L/3.5e1);
107+
108+
fprintf(fid, "Output from angular_momentum.c................\n");
109+
fprintf(fid, "Total mass : %e (grams)\n", target_mass+impactor_mass);
110+
fprintf(fid, "Mass imapctor : %e (grams)\n", impactor_mass);
111+
fprintf(fid, "Radius impactor: %.3f (km)\n", impactor_radius/1.0e5);
112+
fprintf(fid, "Dens. impactor : %.3f (g/cc)\n", impactor_mass/((4.0/3.0)*3.1415926*pow(impactor_radius, 3.0)));
113+
fprintf(fid, "Mass target : %e (grams)\n", target_mass);
114+
fprintf(fid, "Radius target : %.3f (km)\n", target_radius/1.0e5);
115+
fprintf(fid, "Dens. target : %.3f (g/cc)\n", target_mass/((4.0/3.0)*3.1415926*pow(target_radius, 3.0)));
116+
fprintf(fid, "Gamma : %e \n", impactor_mass/(target_mass+impactor_mass));
117+
fprintf(fid, ".........................................\n");
118+
fprintf(fid, "Angular momentum : %.5lf x10^41 (cgs)\n", L/10);
119+
fprintf(fid, "Angular momentum : %e (LEM)\n", L/3.5e1);
120+
121+
122+
fclose(fid);
123+
124+
125+
126+
return(0);
127+
}
128+

0 commit comments

Comments
 (0)