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 #include "iso.h"
00018
00019 void CoolCalc(void)
00020 {
00021 double a21,
00022 a31,
00023 a41,
00024 a42,
00025 a51,
00026 a52,
00027 a53,
00028 c21,
00029 Ca2pop[5] ,
00030 cs,
00031 cs14,
00032 cs15,
00033 d41,
00034 d42,
00035 d51,
00036 d52,
00037 d53,
00038 hlgam,
00039 op41,
00040 op51,
00041 opckh,
00042 opcxyz,
00043 PhotoRate2,
00044 PhotoRate3,
00045 PhotoRate4,
00046 PhotoRate5,
00047 r21,
00048 r31,
00049 r41,
00050 r42,
00051 r51,
00052 r52,
00053 r53;
00054 static double gCa2[5]={2.,4.,6.,2.,4.};
00055 static double exCa2[4]={13650.2,60.7,11480.6,222.9};
00056 static realnum opCax = 0.f;
00057 static realnum opCay = 0.f;
00058 static realnum opCaz = 0.f;
00059
00060 DEBUG_ENTRY( "CoolCalc()" );
00061
00062
00063 MakeCS(TauLines[ipCaI4228]);
00064 atom_level2(TauLines[ipCaI4228]);
00065
00066
00067 hlgam = rfield.otslin[ iso_sp[ipH_LIKE][ipHYDROGEN].trans(ipH2p,ipH1s).ipCont() -1];
00068 PhotoRate5 = 1.7e-18*hlgam;
00069 PhotoRate4 = 8.4e-19*hlgam;
00070 PhotoRate3 = 7.0e-18*hlgam;
00071 PhotoRate2 = 4.8e-18*hlgam;
00072
00073
00074
00075
00076 a21 = 1.02*TauLines[ipT7324].Emis().Pesc();
00077 a31 = 1.05*TauLines[ipT7291].Emis().Pesc();
00078 a41 = 1.4e8*TauLines[ipT3969].Emis().Pesc();
00079 a51 = 1.4e8*TauLines[ipT3934].Emis().Pesc();
00080 a42 = 7.9e6*TauLines[ipT8662].Emis().Pesc();
00081 a52 = 8.2e5*TauLines[ipT8498].Emis().Pesc();
00082 a53 = 7.48e6*TauLines[ipT8542].Emis().Pesc();
00083
00084
00085 opcxyz = opac.opacity_abs[ TauLines[ipT7324].ipCont() -1];
00086
00087
00088 if( opcxyz > 0. )
00089 {
00090 d52 = 5.6*opcxyz/(opcxyz + opCax)*(1. - TauLines[ipT8498].Emis().Pesc());
00091 d53 = 5.6*opcxyz/(opcxyz + opCay)*(1. - TauLines[ipT8542].Emis().Pesc());
00092 d42 = 5.6*opcxyz/(opcxyz + opCaz)*(1. - TauLines[ipT8662].Emis().Pesc());
00093 }
00094 else
00095 {
00096 d52 = 0.;
00097 d53 = 0.;
00098 d42 = 0.;
00099 }
00100
00101
00102 opckh = opac.opacity_abs[ TauLines[ipT3969].ipCont() -1];
00103
00104
00105 if( opckh > 0. )
00106 {
00107 op51 = dense.xIonDense[ipCALCIUM][1]*3.89e-7/GetDopplerWidth(dense.AtomicWeight[ipCALCIUM]);
00108 d51 = 5.6*opckh/(opckh + op51);
00109 op41 = dense.xIonDense[ipCALCIUM][1]*1.96e-7/GetDopplerWidth(dense.AtomicWeight[ipCALCIUM]);
00110 d41 = 5.6*opckh/(opckh + op41);
00111 }
00112 else
00113 {
00114 op51 = 0.;
00115 d51 = 0.;
00116 op41 = 0.;
00117 d41 = 0.;
00118 }
00119
00120 r21 = PhotoRate2 + a21;
00121 r31 = PhotoRate3 + a31;
00122 r41 = a41 + PhotoRate4 + d41;
00123 r51 = a51 + PhotoRate5 + d51;
00124 r42 = a42 + d42;
00125 r52 = a52 + d52;
00126 r53 = a53 + d53;
00127 cs14 = 0.923*phycon.te10*phycon.te10;
00128 cs15 = cs14*2.;
00129 TauLines[ipT3969].Coll().col_str() = (realnum)cs14;
00130 TauLines[ipT3934].Coll().col_str() = (realnum)cs15;
00131
00132
00133
00134
00135
00136
00137
00138 double Cooling , CoolingDeriv;
00139 atom_pop5(gCa2,exCa2,5.8,8.6,cs14,cs15,20.6,22.9,9.8,3.4,44.4,1.0,
00140 r21,r31,r41,r51,0.,r42,r52,0.,r53,0.,Ca2pop,
00141 dense.xIonDense[ipCALCIUM][1],&Cooling , &CoolingDeriv, 0.,0.,0.,0.);
00142
00143
00144 c21 = 5.8/4.*dense.cdsqte;
00145
00146
00147 if( dense.xIonDense[ipCALCIUM][1] > 0. )
00148 ca.Ca2RmLya = MAX2(ca.Ca2RmLya,(realnum)(PhotoRate2/(PhotoRate2+a21+c21)));
00149
00150 ca.Cak = (realnum)(Ca2pop[4]*a51*5.06e-12);
00151 ca.Cah = (realnum)(Ca2pop[3]*a41*5.01e-12);
00152 ca.Cax = (realnum)(Ca2pop[4]*a52*2.34e-12);
00153 ca.Cay = (realnum)(Ca2pop[4]*a53*2.33e-12);
00154 ca.Caz = (realnum)(Ca2pop[3]*a42*2.30e-12);
00155 ca.Caf1 = (realnum)(Ca2pop[2]*a31*2.73e-12);
00156 ca.Caf2 = (realnum)(Ca2pop[1]*a21*2.72e-12);
00157 ca.popca2ex = (realnum)(Ca2pop[1] + Ca2pop[2] + Ca2pop[3] + Ca2pop[4]);
00158
00159
00160 ca.Cair = ca.Cax + ca.Cay + ca.Caz;
00161 ca.c7306 = ca.Caf1 + ca.Caf2;
00162 ca.Cakh = ca.Cak + ca.Cah;
00163
00164
00165 CoolAdd("Ca 2",7306,Cooling);
00166 thermal.dCooldT += CoolingDeriv;
00167
00168
00169
00170
00171
00172 ca.dstCala = (realnum)(Ca2pop[4]*PhotoRate5 + Ca2pop[3]*PhotoRate4);
00173 ca.dCakh = (realnum)(ca.dstCala*5.03e-12);
00174 ca.dCaf12 = (realnum)((Ca2pop[2]*PhotoRate3 + Ca2pop[1]*PhotoRate2)*2.31e-12);
00175 opCax = (realnum)(Ca2pop[1]*1.13e-8/GetDopplerWidth(dense.AtomicWeight[ipCALCIUM]));
00176 opCay = (realnum)(Ca2pop[2]*6.87e-8/GetDopplerWidth(dense.AtomicWeight[ipCALCIUM]));
00177 opCaz = (realnum)(Ca2pop[1]*5.74e-8/GetDopplerWidth(dense.AtomicWeight[ipCALCIUM]));
00178
00179
00180
00181
00182 if( dense.xIonDense[ipCALCIUM][1] > 0. )
00183 {
00184 ca.dstCala = (realnum)(
00185 (ca.dstCala + ca.dCaf12/2.31e-12)/dense.xIonDense[ipCALCIUM][1]);
00186 {
00187
00188 enum {DEBUG_LOC=false};
00189
00190 if( DEBUG_LOC )
00191 {
00192 fprintf(ioQQQ," hlgam is %e\n", hlgam);
00193 }
00194 }
00195 }
00196 else
00197 {
00198 ca.dstCala = 0.;
00199 }
00200 ca.Ca3d = (realnum)(Ca2pop[1] + Ca2pop[2]);
00201 ca.Ca4p = (realnum)(Ca2pop[3] + Ca2pop[4]);
00202
00203
00204 TauLines[ipT3934].Emis().PopOpc() = (Ca2pop[0] - Ca2pop[4]/2.);
00205 (*TauLines[ipT3934].Hi()).Pop() = Ca2pop[4];
00206 (*TauLines[ipT3934].Lo()).Pop() = Ca2pop[0];
00207 TauLines[ipT3969].Emis().PopOpc() = (Ca2pop[0] - Ca2pop[3]);
00208 (*TauLines[ipT3969].Hi()).Pop() = Ca2pop[3];
00209 (*TauLines[ipT3969].Lo()).Pop() = Ca2pop[0];
00210
00211 TauLines[ipT8498].Emis().PopOpc() = (Ca2pop[1] - Ca2pop[4]);
00212 (*TauLines[ipT8498].Hi()).Pop() = Ca2pop[4];
00213 (*TauLines[ipT8498].Lo()).Pop() = Ca2pop[1];
00214 TauLines[ipT8542].Emis().PopOpc() = (Ca2pop[2] - Ca2pop[4]*1.5);
00215 (*TauLines[ipT8542].Hi()).Pop() = Ca2pop[4];
00216 (*TauLines[ipT8542].Lo()).Pop() = Ca2pop[2];
00217 TauLines[ipT8662].Emis().PopOpc() = (Ca2pop[1] - Ca2pop[3]*2.);
00218 (*TauLines[ipT8662].Hi()).Pop() = Ca2pop[3];
00219 (*TauLines[ipT8662].Lo()).Pop() = Ca2pop[1];
00220 TauLines[ipT7291].Emis().PopOpc() = dense.xIonDense[ipCALCIUM][1];
00221 (*TauLines[ipT7291].Hi()).Pop() = 0.;
00222 (*TauLines[ipT7291].Lo()).Pop() = dense.xIonDense[ipCALCIUM][1];
00223 TauLines[ipT7324].Emis().PopOpc() = dense.xIonDense[ipCALCIUM][1];
00224 (*TauLines[ipT7324].Hi()).Pop() = 0.;
00225 (*TauLines[ipT7324].Lo()).Pop() = dense.xIonDense[ipCALCIUM][1];
00226
00227
00228
00229
00230
00231
00232 if( phycon.te <= 1e5 )
00233 {
00234 cs = MAX2(1.0,8.854e-3*phycon.sqrte);
00235 }
00236 else if( phycon.te < 2.512e5 )
00237 {
00238 cs = 2.8;
00239 }
00240 else
00241 {
00242 cs = 641.1/(phycon.te30*phycon.te10*phycon.te02*phycon.te02/
00243 phycon.te003);
00244 }
00245 PutCS(cs,TauLines[ipTCa3]);
00246 atom_level2(TauLines[ipTCa3]);
00247
00248 return;
00249 }