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 float *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 puts( "[Stop in ParseIonPar]" );
00026 cdEXIT(EXIT_FAILURE);
00027 }
00028
00029
00030
00031 i = -1;
00032
00033 strcpy( rfield.chRSpec[*nqh], "SQCM" );
00034 if( chCard[0] == 'I' )
00035 {
00036
00037 strcpy( rfield.chSpNorm[*nqh], "IONI" );
00038 i = 5;
00039 }
00040 else if( chCard[0] == 'X' )
00041 {
00042
00043 strcpy( rfield.chSpNorm[*nqh], "IONX" );
00044
00045
00046 i = 3;
00047 }
00048 else
00049 {
00050 fprintf(ioQQQ," ParseIonPar hit chCard insanity.\n");
00051 puts( "[Stop in ParseIonPar]" );
00052 cdEXIT(EXIT_FAILURE);
00053 }
00054
00055
00056 rfield.totpow[*nqh] = FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00057 if( lgEOL )
00058 {
00059 NoNumb(chCard);
00060 }
00061
00062
00063 if( nMatch( "TIME" , chCard ) )
00064 rfield.lgTimeVary[*nqh] = true;
00065
00066
00067 if( optimize.lgVarOn )
00068 {
00069 if( chCard[0] == 'I' )
00070 {
00071
00072 strcpy( optimize.chVarFmt[optimize.nparm], "IONIZATION PARAMETER=%f" );
00073 }
00074 else if( chCard[0] == 'X' )
00075 {
00076
00077 strcpy( optimize.chVarFmt[optimize.nparm], "XI=%f" );
00078 }
00079 else
00080 {
00081 fprintf( ioQQQ, " Insanity in detection which ionization parameter.\n" );
00082 puts( "[Stop in ParseIonPar]" );
00083 cdEXIT(EXIT_FAILURE);
00084 }
00085
00086 optimize.nvfpnt[optimize.nparm] = input.nRead;
00087 optimize.vparm[0][optimize.nparm] = (float)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 = (float)radius.rdfalt;
00099 radius.Radius = pow(10.,radius.rdfalt);
00100 }
00101
00102 ++*nqh;
00103
00104 DEBUG_EXIT( "ParseIonPar()" );
00105 return;
00106 }