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/DoppVel.doppler[19];
00114 d51 = 5.6*opckh/(opckh + op51);
00115 op41 = dense.xIonDense[ipCALCIUM][1]*1.96e-7/DoppVel.doppler[19];
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.cs = (realnum)cs14;
00136 TauLines[ipT3934].Coll.cs = (realnum)cs15;
00137
00138
00139
00140
00141
00142
00143
00144 atom_pop5(gCa2,exCa2,5.8,8.6,cs14,cs15,20.6,22.9,9.8,3.4,44.4,1.0,
00145 r21,r31,r41,r51,0.,r42,r52,0.,r53,0.,Ca2pop,dense.xIonDense[ipCALCIUM][1]);
00146
00147
00148 c21 = 5.8/4.*dense.cdsqte;
00149
00150
00151 if( dense.xIonDense[ipCALCIUM][1] > 0. )
00152 {
00153 ca.Ca2RmLya = MAX2(ca.Ca2RmLya,(realnum)(PhotoRate2/(PhotoRate2+a21+c21)));
00154 }
00155 ca.Cak = (realnum)(Ca2pop[4]*a51*5.06e-12);
00156 ca.Cah = (realnum)(Ca2pop[3]*a41*5.01e-12);
00157 ca.Cax = (realnum)(Ca2pop[4]*a52*2.34e-12);
00158 ca.Cay = (realnum)(Ca2pop[4]*a53*2.33e-12);
00159 ca.Caz = (realnum)(Ca2pop[3]*a42*2.30e-12);
00160 ca.Caf1 = (realnum)(Ca2pop[2]*a31*2.73e-12);
00161 ca.Caf2 = (realnum)(Ca2pop[1]*a21*2.72e-12);
00162 ca.popca2ex = (realnum)(Ca2pop[1] + Ca2pop[2] + Ca2pop[3] + Ca2pop[4]);
00163
00164
00165 ca.Cair = ca.Cax + ca.Cay + ca.Caz;
00166 ca.c7306 = ca.Caf1 + ca.Caf2;
00167 ca.Cakh = ca.Cak + ca.Cah;
00168
00169
00170
00171
00172
00173
00174
00175 CoolAdd("Ca 2",7306,ca.c7306);
00176 thermal.dCooldT -= ca.c7306*4.*thermal.halfte;
00177
00178 CoolAdd("Ca 2",8400,ca.Cair);
00179
00180
00181 thermal.dCooldT -= ca.Cair*4.*thermal.halfte;
00182
00183
00184 CoolAdd("Ca 2",3950,ca.Cakh);
00185
00186
00187 thermal.dCooldT -= ca.Cakh*4.*thermal.halfte;
00188
00189
00190
00191
00192
00193 ca.dstCala = (realnum)(Ca2pop[4]*PhotoRate5 + Ca2pop[3]*PhotoRate4);
00194 ca.dCakh = (realnum)(ca.dstCala*5.03e-12);
00195 ca.dCaf12 = (realnum)((Ca2pop[2]*PhotoRate3 + Ca2pop[1]*PhotoRate2)*2.31e-12);
00196 opCax = (realnum)(Ca2pop[1]*1.13e-8/DoppVel.doppler[19]);
00197 opCay = (realnum)(Ca2pop[2]*6.87e-8/DoppVel.doppler[19]);
00198 opCaz = (realnum)(Ca2pop[1]*5.74e-8/DoppVel.doppler[19]);
00199
00200
00201
00202
00203 if( dense.xIonDense[ipCALCIUM][1] > 0. )
00204 {
00205 ca.dstCala = (realnum)(
00206 (ca.dstCala + ca.dCaf12/2.31e-12)/dense.xIonDense[ipCALCIUM][1]);
00207
00208 ca.dstCala = (realnum)((ca.dstCala + ca.oldcla)/2.);
00209 ca.oldcla = ca.dstCala;
00210 {
00211
00212 enum {DEBUG_LOC=false};
00213
00214 if( DEBUG_LOC )
00215 {
00216 fprintf(ioQQQ," hlgam is %e\n", hlgam);
00217 }
00218 }
00219 }
00220 else
00221 {
00222 ca.dstCala = 0.;
00223 }
00224 ca.Ca3d = (realnum)(Ca2pop[1] + Ca2pop[2]);
00225 ca.Ca4p = (realnum)(Ca2pop[3] + Ca2pop[4]);
00226
00227
00228 TauLines[ipT3934].Emis->PopOpc = (Ca2pop[0] - Ca2pop[4]/2.);
00229 TauLines[ipT3934].Hi->Pop = Ca2pop[4];
00230 TauLines[ipT3934].Lo->Pop = Ca2pop[0];
00231 TauLines[ipT3969].Emis->PopOpc = (Ca2pop[0] - Ca2pop[3]);
00232 TauLines[ipT3969].Hi->Pop = Ca2pop[3];
00233 TauLines[ipT3969].Lo->Pop = Ca2pop[0];
00234
00235 opac.tpcah[0] = TauLines[ipT3969].Emis->TauIn;
00236 TauLines[ipT8498].Emis->PopOpc = (Ca2pop[1] - Ca2pop[4]);
00237 TauLines[ipT8498].Hi->Pop = Ca2pop[4];
00238 TauLines[ipT8498].Lo->Pop = Ca2pop[1];
00239 TauLines[ipT8542].Emis->PopOpc = (Ca2pop[2] - Ca2pop[4]*1.5);
00240 TauLines[ipT8542].Hi->Pop = Ca2pop[4];
00241 TauLines[ipT8542].Lo->Pop = Ca2pop[2];
00242 TauLines[ipT8662].Emis->PopOpc = (Ca2pop[1] - Ca2pop[3]*2.);
00243 TauLines[ipT8662].Hi->Pop = Ca2pop[3];
00244 TauLines[ipT8662].Lo->Pop = Ca2pop[1];
00245 TauLines[ipT7291].Emis->PopOpc = dense.xIonDense[ipCALCIUM][1];
00246 TauLines[ipT7291].Hi->Pop = 0.;
00247 TauLines[ipT7291].Lo->Pop = dense.xIonDense[ipCALCIUM][1];
00248 TauLines[ipT7324].Emis->PopOpc = dense.xIonDense[ipCALCIUM][1];
00249 TauLines[ipT7324].Hi->Pop = 0.;
00250 TauLines[ipT7324].Lo->Pop = dense.xIonDense[ipCALCIUM][1];
00251
00252
00253
00254
00255
00256
00257 if( phycon.te <= 1e5 )
00258 {
00259 cs = MAX2(1.0,8.854e-3*phycon.sqrte);
00260 }
00261 else if( phycon.te < 2.512e5 )
00262 {
00263 cs = 2.8;
00264 }
00265 else
00266 {
00267 cs = 641.1/(phycon.te30*phycon.te10*phycon.te02*phycon.te02/
00268 phycon.te003);
00269 }
00270 PutCS(cs,&TauLines[ipTCa3]);
00271 atom_level2(&TauLines[ipTCa3]);
00272
00273
00274
00275
00276
00277
00278
00279 cs = MIN2(3.3,0.392*phycon.te20/phycon.te005/phycon.te003);
00280 cs = MAX2(2.2,cs);
00281 PutCS(cs,&TauLines[ipTCa4]);
00282
00283
00284 cs = MIN2(0.93,0.162*phycon.te10*phycon.te05*phycon.te003*
00285 phycon.te001);
00286 cs = MAX2(0.67,cs);
00287 PutCS(cs,&TauLines[ipTCa12]);
00288
00289 cs = MIN2(0.97,0.0894*phycon.te20*phycon.te01*phycon.te005);
00290 cs = MAX2(0.60,cs);
00291 PutCS(cs,&TauDummy);
00292
00293 atom_level3(&TauLines[ipTCa4],&TauLines[ipTCa12],&TauDummy);
00294
00295
00296
00297
00298
00299
00300
00301 cs01 = MIN2(4.1,0.533*phycon.te20/phycon.te01);
00302 cs01 = MAX2(2.8,cs01);
00303 cs02 = MIN2(0.87,5.22e-03*phycon.sqrte);
00304 p3 = atom_pop3(9.,5.,1.,cs01,cs02,1.35,2.326,23.2,3.73,2.57e4,3.60e4,
00305 &p2,dense.xIonDense[ipCALCIUM][4],0.,0.,0.);
00306
00307 ca.c3997 = p3*3.73*4.98e-12;
00308 ca.c2414 = p3*23.1*8.245e-12;
00309 ca.Ca6087 = p2*0.426*3.268e-12;
00310 ca.c5311 = p2*1.90*3.747e-12;
00311
00312 CoolAdd("Ca 5",3997,ca.c3997);
00313 CoolAdd("Ca 5",2414,ca.c2414);
00314 CoolAdd("Ca 5",6087,ca.Ca6087);
00315 CoolAdd("Ca 5",5311,ca.c5311);
00316
00317
00318
00319
00320
00321 cs01 = MIN2(4.4,22.25/(phycon.te20/phycon.te02/phycon.te02));
00322 cs01 = MAX2(3.5,cs01);
00323
00324 cs12 = MIN2(1.20,0.303*phycon.te30*phycon.te03);
00325 cs12 = MAX2(0.62,cs12);
00326
00327 cs02 = MIN2(0.959,7.889/(phycon.te20*phycon.te05/phycon.te01));
00328 cs02 = MAX2(0.50,cs02);
00329
00330 p3 = atom_pop3(9.,5.,1.,cs01,cs02,cs12,3.124,30.4,6.81,2.91e4,3.90e4,
00331 &p2,dense.xIonDense[ipCALCIUM][6],0.,0.,0.);
00332
00333 ca.Ca3688 = p3*6.81*5.40e-12;
00334 ca.Ca2112 = p3*30.4*9.42e-12;
00335 ca.Ca5620 = p2*2.15*3.548e-12;
00336 ca.Ca4941 = p2*0.974*4.037e-12;
00337 CoolAdd("Ca 7",3688,ca.Ca3688);
00338 CoolAdd("Ca 7",2112,ca.Ca2112);
00339 CoolAdd("Ca 7",5620,ca.Ca5620);
00340 CoolAdd("Ca 7",4941,ca.Ca4941);
00341
00342
00343
00344
00345 cs = MIN2(5.354,0.406*phycon.te20*phycon.te03*phycon.te01);
00346 cs = MAX2(3.702,cs);
00347 PutCS(cs,&TauLines[ipCa0741]);
00348
00349 cs = MIN2(1.59,0.183*phycon.te20);
00350 cs = MAX2(1.153,cs);
00351 PutCS(cs,&TauLines[ipCa0761]);
00352
00353 cs = MIN2(1.497,0.0917*phycon.te20*phycon.te05* phycon.te01);
00354 cs = MAX2(1.005,cs);
00355 PutCS(cs,&TauDummy);
00356
00357
00358 atom_level3(&TauLines[ipCa0761],&TauLines[ipCa0741],&TauDummy);
00359
00360
00361
00362 cs = MIN2(6.75,22.04/(phycon.te10*phycon.te02*phycon.te005));
00363 PutCS(cs,&TauLines[ipCa08232]);
00364 atom_level2(&TauLines[ipCa08232]);
00365
00366
00367
00368 cs = MIN2(0.172,0.0118*phycon.te20*phycon.te01);
00369 cs = MAX2(0.10,cs);
00370 PutCS(cs,&TauLines[ipCa12333]);
00371 atom_level2(&TauLines[ipCa12333]);
00372
00373
00374
00375 ligbar(20,&TauLines[ipTCa302],&TauLines[ipTCa19],&cs2s2p,&cs2s3p);
00376
00377 PutCS(cs2s2p,&TauLines[ipTCa302]);
00378 atom_level2(&TauLines[ipTCa302]);
00379
00380
00381 PutCS(cs2s2p*0.439,&TauLines[ipTCa345]);
00382 atom_level2(&TauLines[ipTCa345]);
00383
00384 PutCS(cs2s3p,&TauLines[ipTCa19]);
00385 atom_level2(&TauLines[ipTCa19]);
00386 return;
00387 }