Changeset 2151
- Timestamp:
- 07/03/08 10:15:35 (8 weeks ago)
- Files:
-
- 1 modified
-
trunk/source/radius_increment.cpp (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/radius_increment.cpp
r2126 r2151 186 186 { 187 187 fprintf( ioQQQ, "%6ld%10.2e%10.2e%10.2e", i, rfield.anu[i], 188 rfield.flux[ i] + rfield.outlin[i] + rfield.ConInterOut[i],188 rfield.flux[0][i] + rfield.outlin[0][i] + rfield.ConInterOut[i], 189 189 rfield.otscon[i] + rfield.otslin[i] + rfield.outlin_noplot[i]); 190 190 } … … 202 202 for( i=0; i < rfield.nflux; i++ ) 203 203 { 204 if( rfield.flux[ i] < 0. )204 if( rfield.flux[0][i] < 0. ) 205 205 { 206 206 fprintf( ioQQQ, " radius_increment finds negative intensity in flux.\n" ); 207 207 fprintf( ioQQQ, " Intensity, frequency, pointer=%11.3e%11.3e%6ld\n", 208 rfield.flux[ i], rfield.anu[i], i );208 rfield.flux[0][i], rfield.anu[i], i ); 209 209 lgFlxNeg = true; 210 210 } … … 230 230 lgFlxNeg = true; 231 231 } 232 if( rfield.outlin[ i] < 0. )232 if( rfield.outlin[0][i] < 0. ) 233 233 { 234 234 fprintf( ioQQQ, " radius_increment finds negative intensity in outlin.\n" ); 235 235 fprintf( ioQQQ, " Intensity, frequency, pointer=%11.3e%11.3e%6ld %4.4s\n", 236 rfield.outlin[ i], rfield.anu[i], i, rfield.chLineLabel[i] );236 rfield.outlin[0][i], rfield.anu[i], i, rfield.chLineLabel[i] ); 237 237 lgFlxNeg = true; 238 238 } … … 346 346 * drNext was set by NEXTDR and will be next dr */ 347 347 /* compute both total and Thomson scat rad acceleration */ 348 rforce += (rfield.flux[ i] + rfield.outlin[i] + rfield.outlin_noplot[i]+348 rforce += (rfield.flux[0][i] + rfield.outlin[0][i] + rfield.outlin_noplot[i]+ 349 349 rfield.ConInterOut[i])* rfield.anu[i]*(opac.opacity_abs[i] + 350 350 opac.opacity_sct[i]); 351 351 352 relec += ((rfield.flux[ i] + rfield.outlin[i] + rfield.outlin_noplot[i]+352 relec += ((rfield.flux[0][i] + rfield.outlin[0][i] + rfield.outlin_noplot[i]+ 353 353 rfield.ConInterOut[i])* escatc)*rfield.anu[i]; 354 354 … … 383 383 rfield.flux_beam_time[i] *= (realnum)opfac; 384 384 rfield.flux_isotropic[i] *= (realnum)opfac; 385 rfield.flux[ i] = rfield.flux_beam_const[i] + rfield.flux_beam_time[i] +385 rfield.flux[0][i] = rfield.flux_beam_const[i] + rfield.flux_beam_time[i] + 386 386 rfield.flux_isotropic[i]; 387 387 388 388 /* update SummedCon here since flux changed */ 389 rfield.SummedCon[i] = rfield.flux[ i] + rfield.SummedDif[i];389 rfield.SummedCon[i] = rfield.flux[0][i] + rfield.SummedDif[i]; 390 390 391 391 /* outward lines and continua */ 392 392 rfield.ConInterOut[i] *= (realnum)opfac; 393 rfield.outlin[ i] *= (realnum)opfac;393 rfield.outlin[0][i] *= (realnum)opfac; 394 394 rfield.outlin_noplot[i] *= (realnum)opfac; 395 395 396 rfield.ConEmitOut[ i] *= (realnum)opfac;397 rfield.ConEmitOut[ i] += rfield.ConEmitLocal[nzone][i]*(realnum)radius.dVolOutwrd*opac.tmn[i]/**/;396 rfield.ConEmitOut[0][i] *= (realnum)opfac; 397 rfield.ConEmitOut[0][i] += rfield.ConEmitLocal[nzone][i]*(realnum)radius.dVolOutwrd*opac.tmn[i]/**/; 398 398 399 399 /* set occupation numbers, first attenuated incident continuum */ 400 rfield.OccNumbIncidCont[i] = rfield.flux[ i]*rfield.convoc[i];400 rfield.OccNumbIncidCont[i] = rfield.flux[0][i]*rfield.convoc[i]; 401 401 402 402 /* >>chng 00 oct 03, add diffuse continua */ … … 405 405 406 406 /* >>chng 05 feb 16, occupation number of outward diffuse continuum */ 407 rfield.OccNumbContEmitOut[i] = rfield.ConEmitOut[ i]*rfield.convoc[i];407 rfield.OccNumbContEmitOut[i] = rfield.ConEmitOut[0][i]*rfield.convoc[i]; 408 408 } 409 409 … … 416 416 /* >>chng 02 dec 05, add test for small float, protect against models 417 417 * where we have gone below smallfloat, and so float is ragged */ 418 if( rfield.flux[ iso.ipIsoLevNIonCon[ipH_LIKE][ipHYDROGEN][0]-1]>SMALLFLOAT &&419 (rfield.flux[ iso.ipIsoLevNIonCon[ipH_LIKE][ipHYDROGEN][0]-1]/420 SDIV(rfield.flux_total_incident[ iso.ipIsoLevNIonCon[ipH_LIKE][ipHYDROGEN][0]-1]) ) > SMALLFLOAT &&418 if( rfield.flux[0][iso.ipIsoLevNIonCon[ipH_LIKE][ipHYDROGEN][0]-1]>SMALLFLOAT && 419 (rfield.flux[0][iso.ipIsoLevNIonCon[ipH_LIKE][ipHYDROGEN][0]-1]/ 420 SDIV(rfield.flux_total_incident[0][iso.ipIsoLevNIonCon[ipH_LIKE][ipHYDROGEN][0]-1]) ) > SMALLFLOAT && 421 421 !opac.lgScatON && 422 422 radius.depth/radius.Radius < 1e-4 ) … … 427 427 * and here convert to double. 428 428 * error found by Peter van Hoof */ 429 double tau_effec = -log((double)rfield.flux[ iso.ipIsoLevNIonCon[ipH_LIKE][ipHYDROGEN][0]-1]/429 double tau_effec = -log((double)rfield.flux[0][iso.ipIsoLevNIonCon[ipH_LIKE][ipHYDROGEN][0]-1]/ 430 430 (double)opac.tmn[iso.ipIsoLevNIonCon[ipH_LIKE][ipHYDROGEN][0]-1]/ 431 (double)rfield.flux_total_incident[ iso.ipIsoLevNIonCon[ipH_LIKE][ipHYDROGEN][0]-1]);431 (double)rfield.flux_total_incident[0][iso.ipIsoLevNIonCon[ipH_LIKE][ipHYDROGEN][0]-1]); 432 432 433 433 /* this is computed absorption optical depth to illuminated face */ … … 472 472 rfield.flux_beam_time[i] *= (realnum)opfac; 473 473 rfield.flux_isotropic[i] *= (realnum)opfac; 474 rfield.flux[ i] = rfield.flux_beam_const[i] + rfield.flux_beam_time[i] +474 rfield.flux[0][i] = rfield.flux_beam_const[i] + rfield.flux_beam_time[i] + 475 475 rfield.flux_isotropic[i]; 476 476 477 477 rfield.ConInterOut[i] *= (realnum)opfac; 478 rfield.ConEmitOut[ i] *= (realnum)opfac;479 rfield.outlin[ i] *= (realnum)opfac;478 rfield.ConEmitOut[0][i] *= (realnum)opfac; 479 rfield.outlin[0][i] *= (realnum)opfac; 480 480 rfield.outlin_noplot[i] *= (realnum)opfac; 481 481 } … … 485 485 cmshft(); 486 486 487 relec *= EN1RYD;488 489 # if 0490 /* this is all evaluated in pressure_total */491 /* radiative acceleration; xMassDensity is gm per cc, evaluated when PTOT called */492 t = 1./SPEEDLIGHT/dense.xMassDensity;493 /* >>chng 03 feb 01, lgLineRadPresOn was missing */494 wind.AccelLine = (realnum)(RT_line_driving()*t)*pressure.lgLineRadPresOn;495 /* >>chng 01 aug 03, add lgConPress to kill AccelCont here */496 wind.AccelCont = (realnum)(rforce*EN1RYD*t)*pressure.lgContRadPresOn;497 /* this is numerically unstable */498 wind.AccelPres = 0.;499 /* total acceleration */500 wind.AccelTot = wind.AccelCont + wind.AccelLine + wind.AccelPres;501 # endif502 487 /* remember the largest value */ 503 488 wind.AccelMax = (realnum)MAX2(wind.AccelMax,wind.AccelTot); 504 489 505 /* force multiplier; RELEC*T can be zero for very low densities */ 506 if( relec*t > SMALLFLOAT ) 507 { 508 wind.fmul = (realnum)((wind.AccelLine + wind.AccelCont)/(relec*t)); 509 } 510 else 511 { 512 wind.fmul = 0.; 513 } 490 /* force multiplier; relec can be zero for very low densities - so use double 491 * form of safe_div - fmul is of order unity - wind.AccelLine and wind.AccelCont 492 * are both floats to will underflow long before relec will - fmul is only use 493 * in output, not in any physics */ 494 relec *= (EN1RYD/SPEEDLIGHT/dense.xMassDensity); 495 wind.fmul = (realnum)safe_div( (double)(wind.AccelLine + wind.AccelCont) , 496 relec ); 514 497 515 498 /* keep track of average acceleration */ … … 558 541 559 542 /* ConEmitReflec - reflected diffuse continuum */ 560 rfield.ConEmitReflec[ i] += (realnum)(Reflec_Diffuse_Cont);543 rfield.ConEmitReflec[0][i] += (realnum)(Reflec_Diffuse_Cont); 561 544 562 545 /* the reflected part of the incident continuum */ 563 rfield.ConRefIncid[ i] += (realnum)(rfield.flux[i]*opac.opacity_sct[i]*546 rfield.ConRefIncid[0][i] += (realnum)(rfield.flux[0][i]*opac.opacity_sct[i]* 564 547 radius.drad_x_fillfac*opac.E2TauAbsFace[i]*radius.r1r0sq); 565 548 566 549 /* reflected line emission */ 567 rfield.reflin[ i] += (realnum)(rfield.outlin[i]*opac.opacity_sct[i]*550 rfield.reflin[0][i] += (realnum)(rfield.outlin[0][i]*opac.opacity_sct[i]* 568 551 radius.drad_x_fillfac*opac.E2TauAbsFace[i]*radius.r1r0sq); 569 552 }
