00001
00002
00003
00004 #include "cddefines.h"
00005 #include "taulines.h"
00006 #include "doppvel.h"
00007 #include "phycon.h"
00008 #include "ca.h"
00009 #include "dense.h"
00010 #include "thermal.h"
00011 #include "opacity.h"
00012 #include "rfield.h"
00013 #include "ligbar.h"
00014 #include "lines_service.h"
00015 #include "atoms.h"
00016 #include "cooling.h"
00017
00018 void CoolCalc(void)
00019 {
00020 realnum p2;
00021 double a21,
00022 a31,
00023 a41,
00024 a42,
00025 a51,
00026 a52,
00027 a53,
00028 c21,
00029 Ca2pop[5] ,
00030 cs,
00031 cs2s2p,
00032 cs2s3p ,
00033 cs01,
00034 cs02,
00035 cs12,
00036 cs14,
00037 cs15,
00038 d41,
00039 d42,
00040 d51,
00041 d52,
00042 d53,
00043 hlgam,
00044 op41,
00045 op51,
00046 opckh,
00047 opcxyz,
00048 PhotoRate2,
00049 p3,
00050 PhotoRate3,
00051 PhotoRate4,
00052 PhotoRate5,
00053 r21,
00054 r31,
00055 r41,
00056 r42,
00057 r51,
00058 r52,
00059 r53;
00060 static double gCa2[5]={2.,4.,6.,2.,4.};
00061 static double exCa2[4]={13650.2,60.7,11480.6,222.9};
00062 static realnum opCax = 0.f;
00063 static realnum opCay = 0.f;
00064 static realnum opCaz = 0.f;
00065
00066 DEBUG_ENTRY( "CoolCalc()" );
00067
00068
00069 MakeCS(&TauLines[ipCaI4228]);
00070 atom_level2(&TauLines[ipCaI4228]);
00071
00072
00073 hlgam = rfield.otslin[ Transitions[ipH_LIKE][ipHYDROGEN][ipH2p][ipH1s].ipCont -1];
00074 PhotoRate5 = 1.7e-18*hlgam;
00075 PhotoRate4 = 8.4e-19*hlgam;
00076 PhotoRate3 = 7.0e-18*hlgam;
00077 PhotoRate2 = 4.8e-18*hlgam;
00078
00079
00080
00081
00082 a21 = 1.02*TauLines[ipT7324].Emis->Pesc;
00083 a31 = 1.05*TauLines[ipT7291].Emis->Pesc;
00084 a41 = 1.4e8*TauLines[ipT3969].Emis->Pesc;
00085 a51 = 1.4e8*TauLines[ipT3934].Emis->Pesc;
00086 a42 = 7.9e6*TauLines[ipT8662].Emis->Pesc;
00087 a52 = 8.2e5*TauLines[ipT8498].Emis->Pesc;
00088 a53 = 7.48e6*TauLines[ipT8542].Emis->Pesc;
00089
00090
00091 opcxyz = opac.opacity_abs[ TauLines[ipT7324].ipCont -1];
00092
00093
00094 if( opcxyz > 0. )
00095 {
00096 d52 = 5.6*opcxyz/(opcxyz + opCax)*(1. - TauLines[ipT8498].Emis->Pesc);
00097 d53 = 5.6*opcxyz/(opcxyz + opCay)*(1. - TauLines[ipT8542].Emis->Pesc);
00098 d42 = 5.6*opcxyz/(opcxyz + opCaz)*(1. - TauLines[ipT8662].Emis->Pesc);
00099 }
00100 else
00101 {
00102 d52 = 0.;
00103 d53 = 0.;
00104 d42 = 0.;
00105 }
00106
00107
00108 opckh = opac.opacity_abs[ TauLines[ipT3969].ipCont -1];
00109
00110
00111 if( opckh > 0. )
00112 {
00113 op51 = dense.xIonDense[ipCALCIUM][1]*3.89e-7/GetDopplerWidth(dense.AtomicWeight[ipCALCIUM]);
00114 d51 = 5.6*opckh/(opckh + op51);
00115 op41 = dense.xIonDense[ipCALCIUM][1]*1.96e-7/GetDopplerWidth(dense.AtomicWeight[ipCALCIUM]);
00116 d41 = 5.6*opckh/(opckh + op41);
00117 }
00118 else
00119 {
00120 op51 = 0.;
00121 d51 = 0.;
00122 op41 = 0.;
00123 d41 = 0.;
00124 }
00125
00126 r21 = PhotoRate2 + a21;
00127 r31 = PhotoRate3 + a31;
00128 r41 = a41 + PhotoRate4 + d41;
00129 r51 = a51 + PhotoRate5 + d51;
00130 r42 = a42 + d42;
00131 r52 = a52 + d52;
00132 r53 = a53 + d53;
00133 cs14 = 0.923*phycon.te10*phycon.te10;
00134 cs15 = cs14*2.;
00135 TauLines[ipT3969].Coll.col_str = (realnum)cs14;
00136 TauLines[ipT3934].Coll.col_str = (realnum)cs15;
00137
00138
00139
00140
00141
00142
00143
00144 double Cooling , CoolingDeriv;
00145 atom_pop5(gCa2,exCa2,5.8,8.6,cs14,cs15,20.6,22.9,9.8,3.4,44.4,1.0,
00146 r21,r31,r41,r51,0.,r42,r52,0.,r53,0.,Ca2pop,
00147 dense.xIonDense[ipCALCIUM][1],&Cooling , &CoolingDeriv, 0.,0.,0.,0.);
00148
00149
00150 c21 = 5.8/4.*dense.cdsqte;
00151
00152
00153 if( dense.xIonDense[ipCALCIUM][1] > 0. )
00154 ca.Ca2RmLya = MAX2(ca.Ca2RmLya,(realnum)(PhotoRate2/(PhotoRate2+a21+c21)));
00155
00156 ca.Cak = (realnum)(Ca2pop[4]*a51*5.06e-12);
00157 ca.Cah = (realnum)(Ca2pop[3]*a41*5.01e-12);
00158 ca.Cax = (realnum)(Ca2pop[4]*a52*2.34e-12);
00159 ca.Cay = (realnum)(Ca2pop[4]*a53*2.33e-12);
00160 ca.Caz = (realnum)(Ca2pop[3]*a42*2.30e-12);
00161 ca.Caf1 = (realnum)(Ca2pop[2]*a31*2.73e-12);
00162 ca.Caf2 = (realnum)(Ca2pop[1]*a21*2.72e-12);
00163 ca.popca2ex = (realnum)(Ca2pop[1] + Ca2pop[2] + Ca2pop[3] + Ca2pop[4]);
00164
00165
00166 ca.Cair = ca.Cax + ca.Cay + ca.Caz;
00167 ca.c7306 = ca.Caf1 + ca.Caf2;
00168 ca.Cakh = ca.Cak + ca.Cah;
00169
00170
00171 CoolAdd("Ca 2",7306,Cooling);
00172 thermal.dCooldT += CoolingDeriv;
00173
00174
00175
00176
00177
00178 ca.dstCala = (realnum)(Ca2pop[4]*PhotoRate5 + Ca2pop[3]*PhotoRate4);
00179 ca.dCakh = (realnum)(ca.dstCala*5.03e-12);
00180 ca.dCaf12 = (realnum)((Ca2pop[2]*PhotoRate3 + Ca2pop[1]*PhotoRate2)*2.31e-12);
00181 opCax = (realnum)(Ca2pop[1]*1.13e-8/GetDopplerWidth(dense.AtomicWeight[ipCALCIUM]));
00182 opCay = (realnum)(Ca2pop[2]*6.87e-8/GetDopplerWidth(dense.AtomicWeight[ipCALCIUM]));
00183 opCaz = (realnum)(Ca2pop[1]*5.74e-8/GetDopplerWidth(dense.AtomicWeight[ipCALCIUM]));
00184
00185
00186
00187
00188 if( dense.xIonDense[ipCALCIUM][1] > 0. )
00189 {
00190 ca.dstCala = (realnum)(
00191 (ca.dstCala + ca.dCaf12/2.31e-12)/dense.xIonDense[ipCALCIUM][1]);
00192 {
00193
00194 enum {DEBUG_LOC=false};
00195
00196 if( DEBUG_LOC )
00197 {
00198 fprintf(ioQQQ," hlgam is %e\n", hlgam);
00199 }
00200 }
00201 }
00202 else
00203 {
00204 ca.dstCala = 0.;
00205 }
00206 ca.Ca3d = (realnum)(Ca2pop[1] + Ca2pop[2]);
00207 ca.Ca4p = (realnum)(Ca2pop[3] + Ca2pop[4]);
00208
00209
00210 TauLines[ipT3934].Emis->PopOpc = (Ca2pop[0] - Ca2pop[4]/2.);
00211 TauLines[ipT3934].Hi->Pop = Ca2pop[4];
00212 TauLines[ipT3934].Lo->Pop = Ca2pop[0];
00213 TauLines[ipT3969].Emis->PopOpc = (Ca2pop[0] - Ca2pop[3]);
00214 TauLines[ipT3969].Hi->Pop = Ca2pop[3];
00215 TauLines[ipT3969].Lo->Pop = Ca2pop[0];
00216
00217 TauLines[ipT8498].Emis->PopOpc = (Ca2pop[1] - Ca2pop[4]);
00218 TauLines[ipT8498].Hi->Pop = Ca2pop[4];
00219 TauLines[ipT8498].Lo->Pop = Ca2pop[1];
00220 TauLines[ipT8542].Emis->PopOpc = (Ca2pop[2] - Ca2pop[4]*1.5);
00221 TauLines[ipT8542].Hi->Pop = Ca2pop[4];
00222 TauLines[ipT8542].Lo->Pop = Ca2pop[2];
00223 TauLines[ipT8662].Emis->PopOpc = (Ca2pop[1] - Ca2pop[3]*2.);
00224 TauLines[ipT8662].Hi->Pop = Ca2pop[3];
00225 TauLines[ipT8662].Lo->Pop = Ca2pop[1];
00226 TauLines[ipT7291].Emis->PopOpc = dense.xIonDense[ipCALCIUM][1];
00227 TauLines[ipT7291].Hi->Pop = 0.;
00228 TauLines[ipT7291].Lo->Pop = dense.xIonDense[ipCALCIUM][1];
00229 TauLines[ipT7324].Emis->PopOpc = dense.xIonDense[ipCALCIUM][1];
00230 TauLines[ipT7324].Hi->Pop = 0.;
00231 TauLines[ipT7324].Lo->Pop = dense.xIonDense[ipCALCIUM][1];
00232
00233
00234
00235
00236
00237
00238 if( phycon.te <= 1e5 )
00239 {
00240 cs = MAX2(1.0,8.854e-3*phycon.sqrte);
00241 }
00242 else if( phycon.te < 2.512e5 )
00243 {
00244 cs = 2.8;
00245 }
00246 else
00247 {
00248 cs = 641.1/(phycon.te30*phycon.te10*phycon.te02*phycon.te02/
00249 phycon.te003);
00250 }
00251 PutCS(cs,&TauLines[ipTCa3]);
00252 atom_level2(&TauLines[ipTCa3]);
00253
00254
00255
00256
00257
00258
00259
00260 cs = MIN2(3.3,0.392*phycon.te20/phycon.te005/phycon.te003);
00261 cs = MAX2(2.2,cs);
00262 PutCS(cs,&TauLines[ipTCa4]);
00263
00264
00265 cs = MIN2(0.93,0.162*phycon.te10*phycon.te05*phycon.te003*
00266 phycon.te001);
00267 cs = MAX2(0.67,cs);
00268 PutCS(cs,&TauLines[ipTCa12]);
00269
00270 cs = MIN2(0.97,0.0894*phycon.te20*phycon.te01*phycon.te005);
00271 cs = MAX2(0.60,cs);
00272 PutCS(cs,&TauDummy);
00273
00274 atom_level3(&TauLines[ipTCa4],&TauLines[ipTCa12],&TauDummy);
00275
00276
00277
00278
00279
00280
00281
00282 cs01 = MIN2(4.1,0.533*phycon.te20/phycon.te01);
00283 cs01 = MAX2(2.8,cs01);
00284 cs02 = MIN2(0.87,5.22e-03*phycon.sqrte);
00285 p3 = atom_pop3(9.,5.,1.,cs01,cs02,1.35,2.326,23.2,3.73,2.57e4,3.60e4,
00286 &p2,dense.xIonDense[ipCALCIUM][4],0.,0.,0.);
00287
00288 ca.c3997 = p3*3.73*4.98e-12;
00289 ca.c2414 = p3*23.1*8.245e-12;
00290 ca.Ca6087 = p2*0.426*3.268e-12;
00291 ca.c5311 = p2*1.90*3.747e-12;
00292
00293 CoolAdd("Ca 5",3997,ca.c3997);
00294 CoolAdd("Ca 5",2414,ca.c2414);
00295 CoolAdd("Ca 5",6087,ca.Ca6087);
00296 CoolAdd("Ca 5",5311,ca.c5311);
00297
00298
00299
00300
00301
00302 cs01 = MIN2(4.4,22.25/(phycon.te20/phycon.te02/phycon.te02));
00303 cs01 = MAX2(3.5,cs01);
00304
00305 cs12 = MIN2(1.20,0.303*phycon.te30*phycon.te03);
00306 cs12 = MAX2(0.62,cs12);
00307
00308 cs02 = MIN2(0.959,7.889/(phycon.te20*phycon.te05/phycon.te01));
00309 cs02 = MAX2(0.50,cs02);
00310
00311 p3 = atom_pop3(9.,5.,1.,cs01,cs02,cs12,3.124,30.4,6.81,2.91e4,3.90e4,
00312 &p2,dense.xIonDense[ipCALCIUM][6],0.,0.,0.);
00313
00314 ca.Ca3688 = p3*6.81*5.40e-12;
00315 ca.Ca2112 = p3*30.4*9.42e-12;
00316 ca.Ca5620 = p2*2.15*3.548e-12;
00317 ca.Ca4941 = p2*0.974*4.037e-12;
00318 CoolAdd("Ca 7",3688,ca.Ca3688);
00319 CoolAdd("Ca 7",2112,ca.Ca2112);
00320 CoolAdd("Ca 7",5620,ca.Ca5620);
00321 CoolAdd("Ca 7",4941,ca.Ca4941);
00322
00323
00324
00325
00326 cs = MIN2(5.354,0.406*phycon.te20*phycon.te03*phycon.te01);
00327 cs = MAX2(3.702,cs);
00328 PutCS(cs,&TauLines[ipCa0741]);
00329
00330 cs = MIN2(1.59,0.183*phycon.te20);
00331 cs = MAX2(1.153,cs);
00332 PutCS(cs,&TauLines[ipCa0761]);
00333
00334 cs = MIN2(1.497,0.0917*phycon.te20*phycon.te05* phycon.te01);
00335 cs = MAX2(1.005,cs);
00336 PutCS(cs,&TauDummy);
00337
00338
00339 atom_level3(&TauLines[ipCa0761],&TauLines[ipCa0741],&TauDummy);
00340
00341
00342
00343 cs = MIN2(6.75,22.04/(phycon.te10*phycon.te02*phycon.te005));
00344 PutCS(cs,&TauLines[ipCa08232]);
00345 atom_level2(&TauLines[ipCa08232]);
00346
00347
00348
00349 cs = MIN2(0.172,0.0118*phycon.te20*phycon.te01);
00350 cs = MAX2(0.10,cs);
00351 PutCS(cs,&TauLines[ipCa12333]);
00352 atom_level2(&TauLines[ipCa12333]);
00353
00354
00355
00356 ligbar(20,&TauLines[ipTCa302],&TauLines[ipTCa19],&cs2s2p,&cs2s3p);
00357
00358 PutCS(cs2s2p,&TauLines[ipTCa302]);
00359 atom_level2(&TauLines[ipTCa302]);
00360
00361
00362 PutCS(cs2s2p*0.439,&TauLines[ipTCa345]);
00363 atom_level2(&TauLines[ipTCa345]);
00364
00365 PutCS(cs2s3p,&TauLines[ipTCa19]);
00366 atom_level2(&TauLines[ipTCa19]);
00367 return;
00368 }