00001
00002
00003
00004 #include "cddefines.h"
00005 #include "radius.h"
00006 #include "optimize.h"
00007 #include "rfield.h"
00008 #include "input.h"
00009 #include "parser.h"
00010
00011 void ParseIonParI(Parser &p)
00012 {
00013 ParseIonPar(p,'I');
00014 }
00015 void ParseIonParX(Parser &p)
00016 {
00017 ParseIonPar(p,'X');
00018 }
00019
00020 void ParseIonPar(Parser &p,
00021 char chType)
00022 {
00023
00024 DEBUG_ENTRY( "ParseIonPar()" );
00025
00026
00027 if( p.m_nqh >= LIMSPC )
00028 {
00029
00030 fprintf( ioQQQ, " Too many continua entered; increase LIMSPC\n" );
00031 cdEXIT(EXIT_FAILURE);
00032 }
00033
00034
00035
00036
00037 strcpy( rfield.chRSpec[p.m_nqh], "SQCM" );
00038 if( chType == 'I' )
00039 {
00040
00041 strcpy( rfield.chSpNorm[p.m_nqh], "IONI" );
00042 }
00043 else if( chType == 'X' )
00044 {
00045
00046 strcpy( rfield.chSpNorm[p.m_nqh], "IONX" );
00047
00048
00049 }
00050 else
00051 {
00052 fprintf(ioQQQ," ParseIonPar hit chCard insanity.\n");
00053 cdEXIT(EXIT_FAILURE);
00054 }
00055
00056
00057 rfield.totpow[p.m_nqh] = p.FFmtRead();
00058 if( p.lgEOL() )
00059 p.NoNumb("ionization parameter");
00060
00061
00062
00063 if( p.nMatch( "LINE" ) )
00064 rfield.totpow[p.m_nqh] = log10(rfield.totpow[p.m_nqh]);
00065
00066
00067 if( p.nMatch( "TIME" ) )
00068 rfield.lgTimeVary[p.m_nqh] = true;
00069
00070
00071 if( optimize.lgVarOn )
00072 {
00073 if( chType == 'I' )
00074 {
00075
00076 strcpy( optimize.chVarFmt[optimize.nparm], "IONIZATION PARAMETER= %f LOG" );
00077 }
00078 else if( chType == 'X' )
00079 {
00080
00081 strcpy( optimize.chVarFmt[optimize.nparm], "XI= %f LOG" );
00082 }
00083 else
00084 {
00085 fprintf( ioQQQ, " Insanity in detecting which ionization parameter.\n" );
00086 cdEXIT(EXIT_FAILURE);
00087 }
00088 if( rfield.lgTimeVary[p.m_nqh] )
00089 strcat( optimize.chVarFmt[optimize.nparm], " TIME" );
00090
00091 optimize.nvfpnt[optimize.nparm] = input.nRead;
00092 optimize.vparm[0][optimize.nparm] = (realnum)rfield.totpow[p.m_nqh];
00093 optimize.vincr[optimize.nparm] = 0.5;
00094 optimize.nvarxt[optimize.nparm] = 1;
00095 ++optimize.nparm;
00096 }
00097
00098
00099
00100
00101 if( !radius.lgRadiusKnown )
00102 {
00103 radius.Radius = pow(10.,radius.rdfalt);
00104 }
00105
00106 ++p.m_nqh;
00107 return;
00108 }