Changeset 2110 for trunk/source/grains_qheat.cpp
- Timestamp:
- 06/16/08 21:10:04 (7 months ago)
- Files:
-
- 1 modified
-
trunk/source/grains_qheat.cpp (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/grains_qheat.cpp
r1960 r2110 622 622 if( trace.lgTrace && trace.lgDustBug ) 623 623 { 624 fprintf( ioQQQ, " grain heating: %.4e, integral %.4e, total rate %.4e\n", 625 gv.bin[nd]->GrainHeat,integral,Phi[0]); 624 double Rate2 = 0.; 625 for( int nz=0; nz < gv.bin[nd]->nChrg; nz++ ) 626 Rate2 += gv.bin[nd]->chrg[nz]->FracPop*gv.bin[nd]->chrg[nz]->HeatingRate2; 627 628 fprintf( ioQQQ, " grain heating: %.4e, integral %.4e, total rate %.4e lgNegRate %c\n", 629 gv.bin[nd]->GrainHeat,integral,Phi[0],TorF(lgNegRate)); 626 630 fprintf( ioQQQ, " av grain temp %.4e av grain enthalpy (Ryd) %.4e\n", 627 631 gv.bin[nd]->tedust,Umax); 628 632 fprintf( ioQQQ, " fwhm^2/(4ln2*c2/c0): %.4e fwhm (Ryd) %.4e fwhm/Umax %.4e\n", 629 633 NumEvents,fwhm,FwhmRatio ); 630 fprintf( ioQQQ, " lgQHTooWide %d\n", gv.bin[nd]->lgQHTooWide ); 634 fprintf( ioQQQ, " HeatingRate1 %.4e HeatingRate2 %.4e lgQHTooWide %c\n", 635 gv.bin[nd]->HeatingRate1*gv.bin[nd]->cnv_H_pCM3, Rate2*gv.bin[nd]->cnv_H_pCM3, 636 TorF(gv.bin[nd]->lgQHTooWide) ); 631 637 } 632 638 … … 911 917 * energies, the reshuffling for higher energies is done in the next loop 912 918 * phiTilde has units events/H/s/cell at default depletion */ 919 920 double NegHeatingRate = 0.; 913 921 914 922 for( nz=0; nz < gv.bin[nd]->nChrg; nz++ ) … … 983 991 *check += gptr->FracPop*check1*EN1RYD*gv.bin[nd]->cnv_H_pCM3; 984 992 993 sum += gptr->FracPop*check1*EN1RYD*gv.bin[nd]->cnv_H_pCM3; 994 985 995 if( DEBUG_LOC ) 986 996 { … … 990 1000 integral += phiTilde[i]*gv.bin[nd]->cnv_H_pCM3*rfield.anu[i]*EN1RYD; 991 1001 } 992 sum += gptr->FracPop*check1*EN1RYD*gv.bin[nd]->cnv_H_pCM3;993 1002 dprintf( ioQQQ, " integral test 1: integral %.6e %.6e\n", integral, sum ); 994 1003 } … … 1007 1016 1008 1017 /* >>chng 03 nov 06, check for extremely low HeatingRate and save CPU time, pah_crash.in, PvH */ 1009 if( fabs(gptr->HeatingRate2*gv.bin[nd]->cnv_H_pCM3)> 0.05*CONSERV_TOL*gv.bin[nd]->GrainHeat )1018 if( gptr->HeatingRate2*gv.bin[nd]->cnv_H_pCM3 > 0.05*CONSERV_TOL*gv.bin[nd]->GrainHeat ) 1010 1019 { 1011 1020 double *RateArr,Sum,ESum,DSum,Delta,E_av2,Corr; … … 1076 1085 } 1077 1086 1087 sum += gptr->FracPop*gptr->HeatingRate2*gv.bin[nd]->cnv_H_pCM3; 1088 1078 1089 if( DEBUG_LOC ) 1079 1090 { … … 1083 1094 integral += phiTilde[i]*gv.bin[nd]->cnv_H_pCM3*rfield.anu[i]*EN1RYD; 1084 1095 } 1085 sum += gptr->FracPop*gptr->HeatingRate2*gv.bin[nd]->cnv_H_pCM3;1086 1096 dprintf( ioQQQ, " integral test 2: integral %.6e %.6e\n", integral, sum ); 1087 1097 } 1088 1098 1089 1099 free( RateArr ); 1100 } 1101 else 1102 { 1103 NegHeatingRate += gptr->FracPop*gptr->HeatingRate2*gv.bin[nd]->cnv_H_pCM3; 1090 1104 } 1091 1105 } … … 1109 1123 1110 1124 /* >>chng 03 nov 06, check for extremely low HeatingRate and save CPU time, PvH */ 1111 if( fabs(gv.bin[nd]->HeatingRate1*gv.bin[nd]->cnv_H_pCM3)> 0.05*CONSERV_TOL*gv.bin[nd]->GrainHeat )1125 if( gv.bin[nd]->HeatingRate1*gv.bin[nd]->cnv_H_pCM3 > 0.05*CONSERV_TOL*gv.bin[nd]->GrainHeat ) 1112 1126 { 1113 1127 /* limits for Taylor expansion of (1+x)*exp(-x) */ … … 1153 1167 ylo = yhi; 1154 1168 } 1155 } 1156 1157 if( DEBUG_LOC ) 1158 { 1159 double integral = 0.; 1169 1170 sum += gv.bin[nd]->HeatingRate1*gv.bin[nd]->cnv_H_pCM3; 1171 1172 if( DEBUG_LOC ) 1173 { 1174 double integral = 0.; 1175 for( i=0; i < gv.bin[nd]->qnflux; i++ ) 1176 { 1177 integral += phiTilde[i]*gv.bin[nd]->cnv_H_pCM3*rfield.anu[i]*EN1RYD; 1178 } 1179 dprintf( ioQQQ, " integral test 3: integral %.6e %.6e\n", integral, sum ); 1180 } 1181 } 1182 else 1183 { 1184 NegHeatingRate += gv.bin[nd]->HeatingRate1*gv.bin[nd]->cnv_H_pCM3; 1185 } 1186 1187 /* here we account for the negative heating rates, we simply do that by scaling the entire 1188 * phiTilde array down by a constant factor such that the total amount of energy is conserved 1189 * This treatment assures that phiTilde never goes negative, which avoids problems further on */ 1190 if( NegHeatingRate < 0. ) 1191 { 1192 double scale_fac = (sum+NegHeatingRate)/sum; 1160 1193 for( i=0; i < gv.bin[nd]->qnflux; i++ ) 1161 { 1162 integral += phiTilde[i]*gv.bin[nd]->cnv_H_pCM3*rfield.anu[i]*EN1RYD; 1163 } 1164 sum += gv.bin[nd]->HeatingRate1*gv.bin[nd]->cnv_H_pCM3; 1165 dprintf( ioQQQ, " integral test 3: integral %.6e %.6e\n", integral, sum ); 1166 } 1194 phiTilde[i] *= scale_fac; 1195 1196 sum += NegHeatingRate; 1197 1198 if( DEBUG_LOC ) 1199 { 1200 double integral = 0.; 1201 for( i=0; i < gv.bin[nd]->qnflux; i++ ) 1202 { 1203 integral += phiTilde[i]*gv.bin[nd]->cnv_H_pCM3*rfield.anu[i]*EN1RYD; 1204 } 1205 dprintf( ioQQQ, " integral test 4: integral %.6e %.6e\n", integral, sum ); 1206 } 1207 } 1208 1167 1209 return; 1168 1210 } … … 1354 1396 RadCooling += dCool; 1355 1397 1356 / * if( nzone >= 870 ) { */1357 / * printf(" k %ld T[k] %.6e U[k] %.6e p[k] %.6e dPdlnT[k] %.6e\n",k-1,qtemp[k-1],u1[k-1],p[k-1],dPdlnT[k-1]); */1358 / * printf(" k %ld T[k] %.6e U[k] %.6e p[k] %.6e dPdlnT[k] %.6e\n",k,qtemp[k],u1[k],p[k],dPdlnT[k]); */1359 / * } */1398 // if( nzone >= 24 && nd == 0 ) { 1399 // printf(" k %ld T[k] %.6e U[k] %.6e p[k] %.6e dPdlnT[k] %.6e\n",k-1,qtemp[k-1],u1[k-1],p[k-1],dPdlnT[k-1]); 1400 // printf(" k %ld T[k] %.6e U[k] %.6e p[k] %.6e dPdlnT[k] %.6e\n",k,qtemp[k],u1[k],p[k],dPdlnT[k]); 1401 // } 1360 1402 1361 1403 /* if qtmin is far too low, p[k] can become extremely large, exceeding
