00001 
00002 
00003 
00004 
00005 
00006 #include "cddefines.h"
00007 #include "rfield.h"
00008 #include "doppvel.h"
00009 #include "radius.h"
00010 #include "continuum.h"
00011 
00012 
00013 static realnum damp;
00014 
00015 static realnum PumpTau;
00016 
00017 
00018 
00019 STATIC double con_pump_op(double x);
00020 
00022 double DrvContPump(transition * t)
00023 {
00024         double a0, 
00025           ContPump_v, 
00026           tau, 
00027           yinc1, 
00028           yinc2;
00029 
00030         DEBUG_ENTRY( "DrvContPump()" );
00031 
00032         
00033 #       define FITTED(t)        ((0.98925439 + 0.084594094*(t))/(1. + (t)*(0.64794212 + (t)*0.44743976)))
00034 
00035         if( !rfield.lgInducProcess )
00036         {
00037                 
00038                 ContPump_v = 0.;
00039         }
00040         else
00041         {
00042                 
00043                 tau = t->Emis->TauIn + t->Emis->PopOpc * t->Emis->opacity / DoppVel.doppler[t->Hi->nelem-1]*radius.dRNeff;
00044                 
00045                 if( tau <= 10. )
00046                 {
00047                         
00048                         ContPump_v = FITTED(tau);
00049                 }
00050                 else if( tau > 1e6 )
00051                 {
00052                         
00053 
00054                         ContPump_v = 0.;
00055                 }
00056                 else
00057                 {
00058                         
00059                         if( t->Emis->iRedisFun > 0 )
00060                         {
00061                                 damp = t->Emis->damp;
00062                         }
00063                         else
00064                         {
00065                                 damp = 0.;
00066                         }
00067                         PumpTau = (realnum)tau;
00068                         a0 = 0.886227*(1. + damp);
00069 #                       define  BREAK_  3.
00070                         yinc1 = qg32(0.,BREAK_,con_pump_op);
00071                         yinc2 = qg32(BREAK_,100.,con_pump_op);
00072                         ContPump_v = (yinc1 + yinc2)/a0;
00073                 }
00074         }
00075 
00076         
00077 
00078 
00079 
00080         return( ContPump_v );
00081 #       undef   FITTED
00082 }
00083 
00084 
00085 
00086 STATIC double con_pump_op(double x)
00087 {
00088         double opfun_v, 
00089           v;
00090 
00091         DEBUG_ENTRY( "con_pump_op()" );
00092 
00093         v = vfun(damp,x);
00094         opfun_v = sexp(PumpTau*v)*v;
00095 
00096         return( opfun_v );
00097 }