00001
00002
00003
00004 #include "cddefines.h"
00005 #include "input.h"
00006 #include "dense.h"
00007 #include "optimize.h"
00008 #include "parse.h"
00009
00010 void ParseHDEN(char *chCard )
00011 {
00012 bool lgEOL;
00013 long int i;
00014
00015 DEBUG_ENTRY( "ParseHDEN()" );
00016
00017
00018 i = 5;
00019 dense.gas_phase[ipHYDROGEN] = (float)FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00020 if( lgEOL )
00021 {
00022 fprintf( ioQQQ, " log(n) MUST be entered with this command. STOP\n" );
00023 puts( "[Stop in ParseHDEN]" );
00024 cdEXIT(EXIT_FAILURE);
00025 }
00026
00027
00028 if( nMatch("LINE",chCard) )
00029 {
00030
00031 if( dense.gas_phase[ipHYDROGEN] <= 0. )
00032 {
00033 fprintf( ioQQQ, " A negative density is not physical.\n" );
00034 puts( "[Stop in ParseHDEN]" );
00035 cdEXIT(EXIT_FAILURE);
00036 }
00037 else
00038 {
00039 dense.gas_phase[ipHYDROGEN] = (float)log10(dense.gas_phase[ipHYDROGEN]);
00040 }
00041 }
00042
00043
00044 if( fabs(dense.gas_phase[ipHYDROGEN]) > log10(FLT_MAX) )
00045 {
00046 fprintf(ioQQQ,
00047 " DISASTER - the log of the entered hydrogen density is %.3f - too large for this processor.\n",
00048 dense.gas_phase[ipHYDROGEN]);
00049 fprintf(ioQQQ,
00050 " DISASTER - the log of the largest hydrogen density this processor can do is %.3f.\n",
00051 log10(FLT_MAX) );
00052 fprintf(ioQQQ," Sorry.\n" );
00053
00054 puts( "[Stop in ParseHDEN]" );
00055 cdEXIT(EXIT_FAILURE);
00056 }
00057
00058
00059 dense.den0 = (float)pow(10.f,dense.gas_phase[ipHYDROGEN]);
00060
00061
00062 dense.DensityPower = (float)FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00063
00064 if( !lgEOL )
00065 {
00066
00067
00068 if( nMatch("COLU",chCard) )
00069 {
00070
00071
00072
00073 dense.rscale = (float)pow(10.,FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL));
00074 if( lgEOL )
00075 {
00076 fprintf( ioQQQ, " The column density MUST be set if the col den option is to be used.\n" );
00077 puts( "[Stop in ParseHDEN]" );
00078 cdEXIT(EXIT_FAILURE);
00079 }
00080 strcpy( dense.chDenseLaw, "POWC" );
00081 }
00082 else if( nMatch("DEPT",chCard) )
00083 {
00084
00085 dense.rscale = (float)pow(10.,FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL));
00086 if( lgEOL )
00087 {
00088 fprintf( ioQQQ, " The scale depth MUST be set if the depth option is to be used.\n" );
00089 puts( "[Stop in ParseHDEN]" );
00090 cdEXIT(EXIT_FAILURE);
00091 }
00092 strcpy( dense.chDenseLaw, "POWD" );
00093 }
00094 else
00095 {
00096
00097 strcpy( dense.chDenseLaw, "POWR" );
00098 }
00099 }
00100
00101
00102 if( optimize.lgVarOn )
00103 {
00104
00105 optimize.nvfpnt[optimize.nparm] = input.nRead;
00106 optimize.vparm[0][optimize.nparm] = (float)dense.gas_phase[ipHYDROGEN];
00107 optimize.vincr[optimize.nparm] = 1.;
00108
00109
00110
00111 if( strcmp(dense.chDenseLaw ,"CDEN") == 0 ||
00112 strcmp(dense.chDenseLaw ,"CPRE") == 0 )
00113 {
00114 strcpy( optimize.chVarFmt[optimize.nparm], "HDEN=%f" );
00115 optimize.nvarxt[optimize.nparm] = 1;
00116 }
00117
00118
00119 else if( strcmp(dense.chDenseLaw,"POWR") == 0 )
00120 {
00121 strcpy( optimize.chVarFmt[optimize.nparm], "HDEN=%f, power=%f" );
00122 optimize.vparm[1][optimize.nparm] = dense.DensityPower;
00123 optimize.nvarxt[optimize.nparm] = 2;
00124 }
00125
00126
00127 else if( strcmp(dense.chDenseLaw,"POWC") == 0 )
00128 {
00129 strcpy( optimize.chVarFmt[optimize.nparm], "HDEN=%f, power=%f, column=%f" );
00130 optimize.nvarxt[optimize.nparm] = 3;
00131 optimize.vparm[1][optimize.nparm] = dense.DensityPower;
00132 optimize.vparm[2][optimize.nparm] = (float)log10(dense.rscale);
00133 }
00134
00135
00136 else if( strcmp(dense.chDenseLaw,"POWD") == 0 )
00137 {
00138 strcpy( optimize.chVarFmt[optimize.nparm], "HDEN=%f, power=%f, depth=%f" );
00139 optimize.nvarxt[optimize.nparm] = 3;
00140 optimize.vparm[1][optimize.nparm] = dense.DensityPower;
00141 optimize.vparm[2][optimize.nparm] = (float)log10(dense.rscale);
00142 }
00143
00144
00145 else
00146 {
00147 fprintf( ioQQQ, " Internal error in HDEN\n" );
00148 puts( "[Stop in ParseHDEN]" );
00149 cdEXIT(EXIT_FAILURE);
00150 }
00151 ++optimize.nparm;
00152 }
00153
00154 DEBUG_EXIT( "ParseHDEN()" );
00155 return;
00156 }
00157