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