Changeset 2030
- Timestamp:
- 05/07/08 15:16:20 (1 week ago)
- Files:
-
- trunk/source/atmdat_chianti.cpp (modified) (4 diffs)
- trunk/source/atmdat_lamda.cpp (modified) (2 diffs)
- trunk/source/nemala2.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/source/atmdat_chianti.cpp
r1925 r2030 18 18 /* type is set to 0 for non chianti and 1 for chianti*/ 19 19 long int i,j,nMolLevs,intCollTran,intcollindex,ipLo,ipHi; 20 FILE *atmolLevDATA , *atmolTraDATA=NULL,*atmolEleColDATA=NULL ;20 FILE *atmolLevDATA , *atmolTraDATA=NULL,*atmolEleColDATA=NULL,*atmolProColDATA=NULL; 21 21 realnum fstatwt,fenergyK,fenergyWN,fWLAng,fenergy,feinsteina; 22 22 double fScalingParam,fEnergyDiff,fGF,*xs,*spl,*spl2; … … 40 40 long int *intNewIndex=NULL,*intOldIndex=NULL; 41 41 int interror; 42 bool lg EneLevOrder;42 bool lgProtonData=false,lgEneLevOrder; 43 43 44 44 /*This is to identify where the fields start */ … … 99 99 if( trace.lgTrace ) 100 100 fprintf( ioQQQ," moldat_readin opening %s:",chProColFilename); 101 /*We will set a flag here to indicate if the proton collision strengths are available */ 102 if( ( atmolProColDATA = fopen( chProColFilename , "r" ) ) != NULL ) 103 { 104 lgProtonData = true; 105 } 106 else 107 { 108 lgProtonData = false; 109 } 101 110 102 111 nMolLevs = 0; … … 146 155 for( intcollindex = 0; intcollindex<NUM_COLLIDERS; intcollindex++ ) 147 156 { 148 CollRatesArray[intNS][intcollindex] = (double**)MALLOC((nMolLevs)*sizeof(double*)); 157 CollRatesArray[intNS][intcollindex] = NULL; 158 } 159 /*Allocating space just for the electron*/ 160 CollRatesArray[intNS][0] = (double**)MALLOC((nMolLevs)*sizeof(double*)); 161 for( ipHi = 0; ipHi<nMolLevs; ipHi++ ) 162 { 163 CollRatesArray[intNS][0][ipHi] = (double*)MALLOC((unsigned long)(nMolLevs)*sizeof(double)); 164 for( ipLo = 0; ipLo<nMolLevs; ipLo++) 165 { 166 CollRatesArray[intNS][0][ipHi][ipLo] = 0.0; 167 } 168 } 169 /*Allocating space for the proton*/ 170 if(lgProtonData) 171 { 172 CollRatesArray[intNS][1] = (double**)MALLOC((nMolLevs)*sizeof(double*)); 149 173 for( ipHi = 0; ipHi<nMolLevs; ipHi++ ) 150 174 { 151 CollRatesArray[intNS][ intcollindex][ipHi] = (double*)MALLOC((unsigned long)(nMolLevs)*sizeof(double));175 CollRatesArray[intNS][1][ipHi] = (double*)MALLOC((unsigned long)(nMolLevs)*sizeof(double)); 152 176 for( ipLo = 0; ipLo<nMolLevs; ipLo++) 153 177 { 154 CollRatesArray[intNS][intcollindex][ipHi][ipLo] = 0.0; 155 } 156 } 157 } 158 178 CollRatesArray[intNS][1][ipHi][ipLo] = 0.0; 179 } 180 } 181 } 159 182 /*Rewind the energy levels files*/ 160 183 if( fseek( atmolLevDATA , 0 , SEEK_SET ) != 0 ) trunk/source/atmdat_lamda.cpp
r1925 r2030 113 113 for( intcollindex = 0; intcollindex <NUM_COLLIDERS; intcollindex++ ) 114 114 { 115 CollRatesArray[intNS][intcollindex] = (double**)MALLOC((unsigned long)(ngMolLevs) * sizeof(double*)); 116 for( ipHi = 0; ipHi<ngMolLevs; ipHi++ ) 117 { 118 CollRatesArray[intNS][intcollindex][ipHi] = (double*)MALLOC((unsigned long)(ngMolLevs) * sizeof(double)); 119 for( ipLo = 0; ipLo<ngMolLevs; ipLo++ ) 120 { 121 CollRatesArray[intNS][intcollindex][ipHi][ipLo] = 0.0; 122 } 123 } 124 } 115 CollRatesArray[intNS][intcollindex] = NULL; 116 } 117 125 118 126 119 if(read_whole_line( chLine , (int)sizeof(chLine) , atmolLevDATA ) == NULL ) … … 342 335 TotalInsanity(); 343 336 } 337 /*This is where we allocate memory if the collider exists*/ 338 /*Needed to take care of the he collisions*/ 339 CollRatesArray[intNS][intCollIndex] = (double**)MALLOC((unsigned long)(ngMolLevs) * sizeof(double*)); 340 for( ipHi = 0; ipHi<ngMolLevs; ipHi++ ) 341 { 342 CollRatesArray[intNS][intCollIndex][ipHi] = (double*)MALLOC((unsigned long)(ngMolLevs) * sizeof(double)); 343 for( ipLo = 0; ipLo<ngMolLevs; ipLo++ ) 344 { 345 CollRatesArray[intNS][intCollIndex][ipHi][ipLo] = 0.0; 346 } 347 } 344 348 if(read_whole_line( chLine , (int)sizeof(chLine) , atmolLevDATA ) == NULL ) 345 349 { trunk/source/nemala2.cpp
r1947 r2030 162 162 if( lgSpeciesMolecule[i] ) 163 163 { 164 /*using the collision rate coefficients directly*/ 165 CollRatesArray[i][intCollNo][ipHi][ipLo] = 166 LeidenCollRate(i, intCollNo, ipHi, ipLo, phycon.te); 164 if(CollRatesArray[i][intCollNo]!=NULL) 165 { 166 /*using the collision rate coefficients directly*/ 167 CollRatesArray[i][intCollNo][ipHi][ipLo] = 168 LeidenCollRate(i, intCollNo, ipHi, ipLo, phycon.te); 169 } 167 170 } 168 171 /* atom or ion */ 169 172 else 170 173 { 171 fupsilon = Chianti_Upsilon(i, intCollNo, ipHi, ipLo, phycon.te); 172 /*converting the collision strength to a collision rate coefficient*/ 173 CollRatesArray[i][intCollNo][ipHi][ipLo] = ((8.6291e-6)*fupsilon)/(g[ipHi]*phycon.sqrte); 174 if(CollRatesArray[i][intCollNo]!=NULL) 175 { 176 fupsilon = Chianti_Upsilon(i, intCollNo, ipHi, ipLo, phycon.te); 177 /*converting the collision strength to a collision rate coefficient*/ 178 /*This formula converting collision strength to collision rate coefficent works fine for the electrons*/ 179 /*For any other collider the mass would be different*/ 180 CollRatesArray[i][intCollNo][ipHi][ipLo] = ((8.6291e-6)*fupsilon)/(g[ipHi]*phycon.sqrte); 181 } 174 182 } 175 183 176 184 /* now get the corresponding excitation rate */ 177 CollRatesArray[i][intCollNo][ipLo][ipHi] = 178 CollRatesArray[i][intCollNo][ipHi][ipLo] * g[ipHi] / g[ipLo] * 179 sexp( atmolTrans[i][ipHi][ipLo].EnergyK / phycon.te ); 185 if(CollRatesArray[i][intCollNo]!=NULL) 186 { 187 CollRatesArray[i][intCollNo][ipLo][ipHi] = 188 CollRatesArray[i][intCollNo][ipHi][ipLo] * g[ipHi] / g[ipLo] * 189 sexp( atmolTrans[i][ipHi][ipLo].EnergyK / phycon.te ); 190 } 180 191 } 181 192 } … … 221 232 for( intCollNo=0; intCollNo<NUM_COLLIDERS; intCollNo++ ) 222 233 { 223 CollRate[ipHi][ipLo] += CollRatesArray[i][intCollNo][ipHi][ipLo]*fcolldensity[intCollNo]; 234 if(CollRatesArray[i][intCollNo]!=NULL) 235 { 236 CollRate[ipHi][ipLo] += CollRatesArray[i][intCollNo][ipHi][ipLo]*fcolldensity[intCollNo]; 237 } 238 } 239 /*Correction for Helium*/ 240 /*To include the effects of collision with Helium,the user must multiply the density by 1.14*/ 241 /*pg 5,Schoier et al 2004*/ 242 if(lgSpeciesMolecule[i]) 243 { 244 /*The collision rate coefficients for helium should not be present and that for molecular hydrogen should be present*/ 245 if(CollRatesArray[i][3]==NULL && CollRatesArray[i][8]!=NULL ) 246 { 247 CollRate[ipHi][ipLo] += 0.7 *CollRatesArray[i][8][ipHi][ipLo]*fcolldensity[3]; 248 } 224 249 } 225 250 } … … 369 394 370 395 /* population of lower level rel to ion, corrected for stim em */ 396 371 397 atmolTrans[i][ipHi][ipLo].Emis->PopOpc = 372 398 atmolTrans[i][ipHi][ipLo].Lo->Pop - atmolTrans[i][ipHi][ipLo].Hi->Pop*
