root/trunk/EBaporate/ebsurfweb.c

Revision 311, 7.8 kB (checked in by hazelsct, 6 years ago)

Total reorganization into multiple files, substantial cleanup.
For one thing, it now works!

  • Property svn:keywords set to Author Date Id Revision
Line 
1/* This is a web CGI program for use with certain web template pages to report
2   the enhanced evaporation kinetics due to a beam scanning over a surface.
3   Its main intended use is for electron beam melting.
4
5   See ebsurf.c for some of its capabilities. */
6
7#include "ebsurf.h"
8
9int main (int argc, char *argv[])
10{
11  int i=0,j,k,m;
12  struct param par;
13  char *a, *qstring, youte[80]="Illegal keyword: ";
14  double tmp,*X,*t,*T,*big,*flux;
15  void greeter(),errer(),printto();
16  FILE *ebtemp;
17
18  /* Open the html template file */
19  if (!(ebtemp = fopen("/home/hazelsct/cvs/EBaporate/ebtemp.html","r")))
20    errer("No html template file");
21
22  /* Get params from command line */
23  printf ("hello\n");
24  qstring = getenv("QUERY_STRING");
25  printf ("hello, qstring=%s\n", qstring);
26  if (a=paraminp(&par, qstring)) {
27    strcat (youte,a);
28    errer (youte); }
29  printf ("hello\n");
30  greeter (ebtemp,&par);
31
32  /* Memory allocations */
33  if(!((X=MALLOC(double,par.zs+1))&&(big=MALLOC(double,par.zs*12))&&
34       (T=MALLOC(double,(((par.cyc>0)?par.cyc:1)*par.ts+1)*(par.zs+1)))&&
35       (t=MALLOC(double,par.ts+1)))) errer("Not enough memory");
36
37  /* Single cycle run (goes first if both requested) */
38  if(par.Tin!=0.0) {
39    if(!(flux=MALLOC(double,3))) errer("Not enough memory");
40    cycles(X,t,T,par.Tin,big,&par,OUTPUT,flux,ebtemp,1);
41    free(flux); flux=NULL; }
42  /* Single cycle Tsurf run */
43  else {
44    if (!(flux=MALLOC(double,3)))
45      errer("Not enough memory");
46    /* Estimate the base temperature from surface temp based on power,
47       residence time, thickness, conductivity, spot x and y sizes, and total
48       cycle period. */
49    tmp = par.Tsurf -
50      par.pow*2.*par.tres*par.w/par.k/sqrt(M_PI)/par.spx/par.spy/par.tfin;
51    cycles(X,t,T,tmp,big,&par,OUTPUT|TSUR,flux,ebtemp,1);
52    free(flux); flux=NULL; }
53
54  printto(ebtemp,"</HTML>");
55  printf("</HTML>\n");
56
57  return 0;
58}
59
60/* This just builds the table of input parameters and analytical calcs. */
61void greeter(fule,p) FILE *fule; struct param *p;
62{ void printto(),skipto(); double youte,gtnorm(),gtliss(),sino(),triang();
63  int i; printf("\n"); /* Operating parameters */
64  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",
65                                     (p->Tsurf==0.)?0.:p->Tsurf-273.15);
66  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",
67                                     p->pow/1.e10);
68  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",
69                                     (p->Tin==0.)?0.:p->Tin-273.15);
70  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->volt);
71  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->plen);
72  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",
73                                     p->dp*10000.);
74  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->pwid);
75  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",
76                                     1./p->tfin);
77  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->vb);
78  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%s</TD>\n",
79                                     (p->gtime==gtnorm)?"OneHit":
80                                     ((p->gtime==gtliss)?"Lissidue":
81                                      "AdamDisk"));
82  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->spx);
83  if(p->gtime==gtnorm) {          /* Lose the next two table rows for OneHit */
84    printf("</TR>\n\n<TR>\n<TD><A HREF=\"http://lyre.mit.edu/~powell/Softwa");
85    printf("re/ebparams.html#dwelltime\">Beam\ndwell time</A> (s):</TD>\n\n");
86    printf("<TD ALIGN=\"right\">%g</TD>\n\n",p->tres);
87    printf("<TD><A HREF=\"http://lyre.mit.edu/~powell/Software/ebparams.html");
88    printf("#spsize\">Beam\nspot width</A> (cm):</TD>\n\n");
89    printf("<TD ALIGN=\"right\">%g</TD>\n",p->spy);
90    for(i=0;i<8;i++) skipto(fule,"<TD>1</TD>"); }
91  else {                          /* Use them only for Lissidue and AdamDisk */
92    printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%s</TD>\n",
93                                       (p->xpat==sino)?"Sine":
94                                       ((p->xpat==triang)?"Triangle":
95                                        "Sawtooth"));
96    printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->spy);
97    printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%s</TD>\n",
98                                       (p->ypat==sino)?"Sine":
99                                       ((p->ypat==triang)?"Triangle":
100                                        "Sawtooth"));
101    printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",
102                                       p->tres);
103    printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",
104                                       p->xfrq);
105    printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->x);
106    printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",
107                                       p->yfrq);
108    printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->y); }
109  /* Simulation Parameters */
110  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%d</TD>\n",p->zs);
111  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->bp);
112  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->zr);
113  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->w);
114  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->ap);
115  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->th);
116  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->b);
117  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%d</TD>\n",p->cyc);
118  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%d</TD>\n",p->ts);
119  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->ct);
120  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->tr);
121  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->it);
122  /* Material Properties */
123  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->al);
124  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->Ma);
125  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->k/1e5);
126  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",
127                                     p->Q0/1.e10);
128  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->eps);
129  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->S);
130  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",
131                                     p->Tenv-273.15);
132  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",
133                                     p->A/log(10));
134  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->rho);
135  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",
136                                     p->B/log(10));
137  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->mu);
138  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->C+.5);
139  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",p->dsig);
140  printto(fule,"<TD>1</TD>"); printf("<TD ALIGN=\"right\">%g</TD>\n",
141                                     p->D*1000./log(10));
142
143  /* Analytical calculations */
144  printto(fule,"<TD>1</TD>");                    /* Max temperature estimate */
145  printf("<TD ALIGN=\"right\">%g</TD>\n",8.*p->pow/M_PI/p->spx/p->spy/p->k*
146         sqrt(p->al*p->tres/M_PI));
147  printto(fule,"<TD>1</TD>");                          /* Beam power density */
148  printf("<TD ALIGN=\"right\">%g</TD>\n",4.*p->pow/1.e10/M_PI/p->spx/p->spy);
149  printto(fule,"<TD>1</TD>");                               /* Peclet number */
150  if(p->rho==0.||p->mu==0.||p->dsig==0.) printf("0"); else
151    printf("<TD ALIGN=\"right\">%g</TD>\n",
152           128*sqrt(2)*p->pow*p->dsig*p->tres*p->tfin/
153           (M_PI*M_PI*p->rho*p->spx*p->spx*p->spy*p->spy*p->k*
154            sqrt(p->mu/p->rho/p->al)));
155  printto(fule,"<TD>1</TD>");                             /* Beam hit energy */
156  printf("<TD ALIGN=\"right\">%g</TD>\n",2.*p->tres*p->pow/1.e10/p->spx/p->spy*sqrt(2./M_PI));
157  printto(fule,"<TD>1</TD>");                   /* Penetration/first element */
158  for(i=1;i<=p->zs;i++) youte+=exp(log(p->zr)/(p->zs-1)*i);
159  printf("<TD ALIGN=\"right\">%g</TD>\n",
160         p->dp/p->w*youte/exp(log(p->zr)/(p->zs-1)));
161
162  printto(fule,"<BR>youte"); }
Note: See TracBrowser for help on using the browser.