00001
00002
00003
00004 #include "cddefines.h"
00005 #include "dense.h"
00006 #include "optimize.h"
00007 #include "abund.h"
00008 #include "input.h"
00009 #include "parse.h"
00010
00011 void ParseDLaw(char *chCard )
00012 {
00013 char chCAP[5];
00014 bool lgEOL,
00015 lgEnd;
00016 long int i,
00017 j;
00018
00019 DEBUG_ENTRY( "ParseDLaw()" );
00020
00021
00022
00023
00024 if( nMatch("TABL",chCard) )
00025 {
00026
00027 strcpy( dense.chDenseLaw, "DLW2" );
00028 if( nMatch("DEPT",chCard) )
00029 {
00030 dense.lgDLWDepth = true;
00031 }
00032 else
00033 {
00034 dense.lgDLWDepth = false;
00035 }
00036
00037 input_readarray(chCard,&lgEnd);
00038 i = 1;
00039 dense.frad[0] = (float)FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00040 dense.fhden[0] = (float)FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00041 if( lgEOL )
00042 {
00043 fprintf( ioQQQ, " No pairs entered - can\'t interpolate.\n Sorry.\n" );
00044 puts( "[Stop in getdlaw]" );
00045 cdEXIT(EXIT_FAILURE);
00046 }
00047
00048 dense.nvals = 2;
00049 lgEnd = false;
00050
00051
00052
00053
00054 while( !lgEnd && dense.nvals < LIMTABDLAW )
00055 {
00056 input_readarray(chCard,&lgEnd);
00057 if( !lgEnd )
00058 {
00059 cap4(chCAP , chCard);
00060 if( strncmp(chCAP , "END" , 3 ) == 0 )
00061 lgEnd = true;
00062 }
00063
00064 if( !lgEnd )
00065 {
00066 i = 1;
00067 dense.frad[dense.nvals-1] = (float)FFmtRead(chCard
00068 ,&i,INPUT_LINE_LENGTH,&lgEOL);
00069 dense.fhden[dense.nvals-1] = (float)FFmtRead(chCard
00070 ,&i,INPUT_LINE_LENGTH,&lgEOL);
00071 dense.nvals += 1;
00072 }
00073 }
00074 --dense.nvals;
00075
00076 for( i=1; i < dense.nvals; i++ )
00077 {
00078
00079 if( dense.frad[i] <= dense.frad[i-1] )
00080 {
00081 fprintf( ioQQQ, " density.in radii must be in increasing order\n" );
00082 puts( "[Stop in getdlaw]" );
00083 cdEXIT(EXIT_FAILURE);
00084 }
00085 }
00086 }
00087 else
00088 {
00089
00090 i = 4;
00091 for( j=0; j < 10; j++ )
00092 {
00093 dense.DensityLaw[j] = FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00094 }
00095
00096
00097 strcpy( dense.chDenseLaw, "DLW1" );
00098
00099
00100 if( optimize.lgVarOn )
00101 {
00102
00103
00104 strcpy( optimize.chVarFmt[optimize.nparm], "DLAW %f %f %f %f %f " );
00105
00106
00107 optimize.nvfpnt[optimize.nparm] = input.nRead;
00108 for( j=0; j<LIMEXT; ++j )
00109 {
00110 optimize.vparm[j][optimize.nparm] = (float)dense.DensityLaw[j];
00111 }
00112 optimize.vincr[optimize.nparm] = 0.5;
00113 optimize.nvarxt[optimize.nparm] = LIMEXT;
00114 ++optimize.nparm;
00115 }
00116 }
00117
00118 DEBUG_EXIT( "ParseDLaw()" );
00119 return;
00120 }