| 1 | |
|---|
| 2 | |
|---|
| 3 | |
|---|
| 4 | |
|---|
| 5 | |
|---|
| 6 | |
|---|
| 7 | |
|---|
| 8 | |
|---|
| 9 | |
|---|
| 10 | |
|---|
| 11 | |
|---|
| 12 | #include "ebsurf.h" |
|---|
| 13 | |
|---|
| 14 | |
|---|
| 15 | |
|---|
| 16 | |
|---|
| 17 | double gtnorm (double t, struct param *p) |
|---|
| 18 | { return exp(-(2*t/p->tres-3)*(2*t/p->tres-3)); } |
|---|
| 19 | |
|---|
| 20 | |
|---|
| 21 | |
|---|
| 22 | double sino(double t, double freq) |
|---|
| 23 | { return sin(2*M_PI*t*freq); } |
|---|
| 24 | |
|---|
| 25 | double triang(double t, double freq) |
|---|
| 26 | { return _ABS((t*freq-floor(t*freq))*4-2)-1; } |
|---|
| 27 | |
|---|
| 28 | double sawt(double t, double freq) |
|---|
| 29 | { return (t*freq-floor(t*freq))*2-1; } |
|---|
| 30 | |
|---|
| 31 | double gtliss(double t, struct param *p) |
|---|
| 32 | { |
|---|
| 33 | double x,y; |
|---|
| 34 | x=p->plen/2*p->xpat(t,p->xfrq)-p->x; |
|---|
| 35 | y=p->pwid/2*p->ypat(t,p->yfrq)-p->y; |
|---|
| 36 | return exp(-4*x*x/p->spx/p->spx-4*y*y/p->spy/p->spy); |
|---|
| 37 | } |
|---|
| 38 | |
|---|
| 39 | |
|---|
| 40 | double gtdisk(double t, struct param *p) |
|---|
| 41 | { double x,y; |
|---|
| 42 | x=.25*p->plen*(cos(2.*M_PI*t*p->xfrq)+cos(2.*M_PI*t*p->yfrq))-p->x; |
|---|
| 43 | y=.25*p->pwid*(sin(2.*M_PI*t*p->xfrq)+sin(2.*M_PI*t*p->yfrq))-p->y; |
|---|
| 44 | return exp(-x*x/p->spx/p->spx-y*y/p->spy/p->spy); } |
|---|
| 45 | |
|---|
| 46 | |
|---|
| 47 | |
|---|
| 48 | |
|---|
| 49 | double radloss(double T, struct param *p) |
|---|
| 50 | { return p->eps * SIGMA * (T*T*T*T - p->Tenv*p->Tenv*p->Tenv*p->Tenv); } |
|---|
| 51 | |
|---|
| 52 | |
|---|
| 53 | double vloss(double T, double E, double A, double C, double D) |
|---|
| 54 | { return E*exp(-A/T+C*log(T)+D*T); } |
|---|
| 55 | |
|---|
| 56 | |
|---|
| 57 | double vloss2(double T, double E, double A, double C, double D) |
|---|
| 58 | { return 8.2924243e-5 * exp (log(10.)*(-16450./T+12.36) - 1.523*log(T)); } |
|---|
| 59 | |
|---|
| 60 | |
|---|
| 61 | double vlossder(double T, double E, double A, double C, double D) |
|---|
| 62 | { return E * (A/T/T+C/T+D) * exp(-A/T+C*log(T)+D*T); } |
|---|
| 63 | |
|---|
| 64 | |
|---|
| 65 | double loss(double T, struct param *p) |
|---|
| 66 | { |
|---|
| 67 | return radloss (T,p) + |
|---|
| 68 | p->Q0*exp(p->S*T) * vloss (T,p->E,p->A,p->C,p->D); |
|---|
| 69 | } |
|---|
| 70 | |
|---|
| 71 | |
|---|
| 72 | double lossder (double T, struct param *p) |
|---|
| 73 | { return 4*p->eps*SIGMA*T*T*T + |
|---|
| 74 | p->Q0*exp(p->S*T) * vlossder(T,p->E,p->A,p->C,p->D) + |
|---|
| 75 | p->Q0*p->S*exp(p->S*T) * vloss(T,p->E,p->A,p->C,p->D); } |
|---|
| 76 | |
|---|
| 77 | |
|---|
| 78 | |
|---|
| 79 | |
|---|
| 80 | |
|---|
| 81 | |
|---|
| 82 | |
|---|
| 83 | |
|---|
| 84 | |
|---|
| 85 | #define logfit(x,x1,x2,y1,y2) \ |
|---|
| 86 | exp(log(y1)+(log(y2)-log(y1))*(log(x)-log(x1))/(log(x2)-log(x1))) |
|---|
| 87 | double depvolt(volts) double volts; |
|---|
| 88 | { void errer(); |
|---|
| 89 | if(volts<10) errer("No data available for energy below 10 kV."); |
|---|
| 90 | if(volts<30) return logfit(volts,10,30,.00026,.002); |
|---|
| 91 | if(volts<100) return logfit(volts,30,100,.002,.015); |
|---|
| 92 | if(volts<300) return logfit(volts,100,300,.015,.082); |
|---|
| 93 | if(volts<=1000) return logfit(volts,300,1000,.082,.4); |
|---|
| 94 | errer("No data available for energy above 1 MV."); } |
|---|
| 95 | #undef logfit |
|---|