00001
00002
00003
00004 #include "cddefines.h"
00005 #include "input.h"
00006 #include "optimize.h"
00007 #include "grainvar.h"
00008 #include "called.h"
00009 #include "abund.h"
00010 #include "parse.h"
00011
00012 void ParseMetal(char *chCard )
00013 {
00014 bool lgEOL,
00015 lgGrains,
00016 lgLogOn;
00017 long int i;
00018 double dmlog;
00019
00020 DEBUG_ENTRY( "ParseMetal()" );
00021
00022
00023
00024
00025 i = 5;
00026 abund.ScaleMetals = (float)FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00027 if( lgEOL )
00028 {
00029 if( nMatch("DEPL",chCard) )
00030 {
00031
00032
00033 abund.lgDepln = true;
00034 for( i=0; i < LIMELM; i++ )
00035 {
00036 abund.depset[i] = abund.Depletion[i];
00037 }
00038 abund.ScaleMetals = 1.;
00039
00040 DEBUG_EXIT( "ParseMetal()" );
00041 return;
00042 }
00043 else
00044 {
00045
00046 if( !called.lgTalk )
00047 {
00048 fprintf( ioQQQ, " %80.80s\n", chCard );
00049 }
00050 fprintf( ioQQQ, " There must be a number on this line. Sorry.\n" );
00051 puts( "[Stop in ParseMetal]" );
00052 cdEXIT(EXIT_FAILURE);
00053 }
00054 }
00055
00056
00057 lgLogOn = false;
00058 if( nMatch(" LOG",chCard) )
00059 {
00060 lgLogOn = true;
00061 }
00062 else if( nMatch("LINE",chCard) )
00063 {
00064 lgLogOn = false;
00065 }
00066
00067 if( abund.ScaleMetals <= 0. || lgLogOn )
00068 {
00069 dmlog = abund.ScaleMetals;
00070 abund.ScaleMetals = (float)pow(10.f,abund.ScaleMetals);
00071 }
00072 else
00073 {
00074 dmlog = log10(abund.ScaleMetals);
00075 }
00076
00077
00078 if( nMatch("GRAI",chCard) )
00079 {
00080 lgGrains = true;
00081 gv.GrainMetal = abund.ScaleMetals;
00082 }
00083 else
00084 {
00085 lgGrains = false;
00086 gv.GrainMetal = 1.;
00087 }
00088
00089
00090 if( optimize.lgVarOn )
00091 {
00092 if( lgGrains )
00093 {
00094 strcpy( optimize.chVarFmt[optimize.nparm], "METALS LOG=%f GRAINS" );
00095 }
00096 else
00097 {
00098 strcpy( optimize.chVarFmt[optimize.nparm], "METALS LOG=%f" );
00099 }
00100
00101
00102 optimize.nvfpnt[optimize.nparm] = input.nRead;
00103 optimize.vparm[0][optimize.nparm] = (float)dmlog;
00104 optimize.vincr[optimize.nparm] = 0.5;
00105 optimize.nvarxt[optimize.nparm] = 1;
00106 ++optimize.nparm;
00107 }
00108
00109 DEBUG_EXIT( "ParseMetal()" );
00110 return;
00111 }
00112