00001
00002
00003
00004 #include "cddefines.h"
00005 #include "rfield.h"
00006 #include "parse.h"
00007 #include "physconst.h"
00008
00009 void ParseAgn(char *chCard)
00010 {
00011 bool lgEOL;
00012 long int i;
00013 double BigBump,
00014 Ratio,
00015 XRays,
00016 xnu;
00017
00018 DEBUG_ENTRY( "ParseAgn()" );
00019
00020
00021 strcpy( rfield.chSpType[rfield.nspec], "AGN " );
00022
00023
00024
00025 if( nMatch("KIRK",chCard) )
00026 {
00027
00028 rfield.slope[rfield.nspec] = 1e6 / TE1RYD;
00029
00030
00031 rfield.cutoff[rfield.nspec][0] = -1.40;
00032
00033
00034 rfield.cutoff[rfield.nspec][1] = -0.50;
00035
00036
00037 rfield.cutoff[rfield.nspec][2] = -1.0;
00038 }
00039 else
00040 {
00041
00042
00043 i = 5;
00044
00045 rfield.slope[rfield.nspec] = FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00046 if( lgEOL )
00047 {
00048
00049 fprintf( ioQQQ, " The big bump temperature should have been on this line. Sorry.\n" );
00050 puts( "[Stop in ParseAgn]" );
00051 cdEXIT(EXIT_FAILURE);
00052 }
00053
00054 if( rfield.slope[rfield.nspec] <= 0. )
00055 {
00056 fprintf( ioQQQ, " Non positive temperature not allowed. Sorry.\n" );
00057 puts( "[Stop in ParseAgn]" );
00058 cdEXIT(EXIT_FAILURE);
00059 }
00060
00061
00062 if( rfield.slope[rfield.nspec] <= 10. )
00063 rfield.slope[rfield.nspec] =
00064 pow(10.,rfield.slope[rfield.nspec]);
00065
00066
00067 rfield.slope[rfield.nspec] /= TE1RYD;
00068
00069
00070 rfield.cutoff[rfield.nspec][0] = FFmtRead(chCard,&i,INPUT_LINE_LENGTH, &lgEOL);
00071 if( lgEOL )
00072 {
00073 fprintf( ioQQQ, " alpha ox should have been on this line. Sorry.\n" );
00074 puts( "[Stop in ParseAgn]" );
00075 cdEXIT(EXIT_FAILURE);
00076 }
00077
00078 if( rfield.cutoff[rfield.nspec][0] > 3. ||
00079 rfield.cutoff[rfield.nspec][0] < -3. )
00080 {
00081 fprintf( ioQQQ, " An alpha ox of%10.2e looks funny to me. Check Hazy to make sure its ok.\n",
00082 rfield.cutoff[rfield.nspec][0] );
00083 }
00084
00085 if( rfield.cutoff[rfield.nspec][0] >= 0. )
00086 {
00087 fprintf( ioQQQ, " The sign of alpha ox is almost certainly incorrect. Check Hazy.\n" );
00088 }
00089
00090
00091 rfield.cutoff[rfield.nspec][1] = FFmtRead(chCard,&i,INPUT_LINE_LENGTH, &lgEOL);
00092 if( lgEOL )
00093 rfield.cutoff[rfield.nspec][1] = -0.5f;
00094
00095
00096 rfield.cutoff[rfield.nspec][2] = FFmtRead(chCard,&i,INPUT_LINE_LENGTH, &lgEOL);
00097 if( lgEOL )
00098 rfield.cutoff[rfield.nspec][2] = -1.0f;
00099 }
00100
00101
00102
00103 Ratio = pow(403.3,rfield.cutoff[rfield.nspec][0] - 1.);
00104
00105
00106 xnu = 0.3645;
00107 BigBump = pow(xnu,-1. + rfield.cutoff[rfield.nspec][1])*
00108 sexp(xnu/rfield.slope[rfield.nspec]);
00109 xnu = 147.;
00110
00111
00112 XRays = pow(xnu,rfield.cutoff[rfield.nspec][2] - 1.);
00113 if( BigBump <= 0. )
00114 {
00115 fprintf( ioQQQ, " Big Bump had zero flux at .3645 Ryd.\n" );
00116 puts( "[Stop in ParseAgn]" );
00117 cdEXIT(EXIT_FAILURE);
00118 }
00119 rfield.cutoff[rfield.nspec][0] = (Ratio/(XRays/BigBump));
00120
00121
00122 ++rfield.nspec;
00123 if( rfield.nspec >= LIMSPC )
00124 {
00125 fprintf( ioQQQ, " Too many continua entered; increase LIMSPC\n" );
00126 puts( "[Stop in ParseAgn]" );
00127 cdEXIT(EXIT_FAILURE);
00128 }
00129
00130 DEBUG_EXIT( "ParseAgn()" );
00131 return;
00132 }
00133