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 }