Changeset 2036

Show
Ignore:
Timestamp:
05/10/08 11:14:00 (6 months ago)
Author:
rporter
Message:

Add option to limit energy range in XSPEC option. Add line emission to diffuse atable option. In two comments, punch_line.c -> punch_line.cpp. Modify ism_grid to include the new range option on XSPEC output.

Location:
trunk
Files:
10 modified

Legend:

Unmodified
Added
Removed
  • trunk/source/cddrive.h

    r1869 r2036  
    536536         3                      the reflected continuum, same units 
    537537         
    538          4                      diffuse continuous emission outward direction 
    539          5                      diffuse continuous emission, reflected 
     538         4                      diffuse emission outward direction 
     539         5                      diffuse emission, reflected 
    540540         
    541541         6                      collisional+recombination lines, outward 
     
    547547          
    548548        \param nEnergy the number of cells + 1 
     549        \param ipLoEnergy 
     550        \param ipHiEnergy 
    549551        \param ReturnedSpectrum[] the returned spectrum, same size is two energy spectra (see option), returns nEnergy -1 pts 
    550552 */  
     
    552554        int Option , 
    553555    long int nEnergy , 
     556        long int ipLoEnergy, 
     557        long int ipHiEnergy, 
    554558    realnum ReturnedSpectrum[] ); 
    555559 
  • trunk/source/cdspec.cpp

    r1771 r2036  
    318318         * 3    the reflected continuum, same units 
    319319         * 
    320          * 4    diffuse continuous emission outward direction 
    321          * 5    diffuse continuous emission, reflected 
    322          * 
    323          * 6    collisional+recombination lines, outward 
    324          * 7    collisional+recombination lines, reflected 
     320         * 4    diffuse emission, lines + continuum, outward 
     321         * 5    diffuse emission, lines + continuum, reflected 
     322         * 
     323         * 6    diffuse continuous emission outward direction 
     324         * 7    diffuse continuous emission, reflected 
    325325         * 
    326326         * 8    total transmitted, lines and continuum 
     
    333333        int nOption , 
    334334 
    335         /* the number of cells + 1*/ 
    336         long int nEnergy , 
     335        /* the number of cells */ 
     336        long int nEnergy, 
     337 
     338        /* the index of the lowest and highest energy bounds to use. */ 
     339        long ipLoEnergy, 
     340        long ipHiEnergy, 
    337341 
    338342        /* the returned spectrum, same size is two energy spectra (see option), returns nEnergy -1 pts */ 
     
    340344 
    341345{ 
    342         /* this pointer will bet set to one of the cloudy continuum arrays */ 
    343         realnum *cont ,  
    344                 refac; 
    345         long int ncell , j; 
    346  
    347         /* flag saying whether we will need to free cont at the end */ 
    348         bool lgFREE; 
     346        realnum refac; 
    349347 
    350348        DEBUG_ENTRY( "cdSPEC2()" ); 
    351349 
     350        ASSERT( ipLoEnergy >= 0 ); 
     351        ASSERT( ipLoEnergy < ipHiEnergy ); 
     352        ASSERT( ipHiEnergy < rfield.nupper ); 
     353        ASSERT( nEnergy == (ipHiEnergy-ipLoEnergy+1) ); 
     354        ASSERT( nEnergy >= 2 ); 
     355 
    352356        ASSERT( nOption <= NUM_OUTPUT_TYPES ); 
    353357 
    354         if( nOption == 1 ) 
    355         { 
    356                 /* this is the incident continuum, col 2 of punch continuum command */ 
    357                 cont = rfield.flux_total_incident; 
    358                 lgFREE = false; 
    359         } 
    360         else if( nOption == 2 ) 
    361         { 
    362                 /* the attenuated transmitted continuum, no diffuse emission, 
    363                  * col 3 of punch continuum command */ 
    364                 cont = rfield.flux; 
    365                 lgFREE = false; 
    366         } 
    367         else if( nOption == 3 ) 
    368         { 
    369                 /* reflected incident continuum, col 6 of punch continuum command */ 
    370                 lgFREE = false; 
    371                 cont = rfield.ConRefIncid; 
    372         } 
    373         else if( nOption == 4 ) 
    374         { 
    375                 /* diffuse continuous emission outward direction  */ 
    376                 cont = (realnum*)MALLOC( sizeof(realnum)*(size_t)rfield.nupper ); 
    377                 /* need to free the vector once done */ 
    378                 lgFREE = true; 
    379                 refac = (realnum)radius.r1r0sq*geometry.covgeo; 
    380                 for( j=0; j<rfield.nflux; ++j) 
    381                 { 
    382                         cont[j] = rfield.ConEmitOut[j]*refac; 
    383                 } 
    384         } 
    385         else if( nOption == 5 ) 
    386         { 
    387                 /* reflected diffuse continuous emission */ 
    388                 cont = (realnum*)MALLOC( sizeof(realnum)*(size_t)rfield.nupper ); 
    389                 /* need to free the vector once done */ 
    390                 lgFREE = true; 
    391                 for( j=0; j<rfield.nflux; ++j) 
    392                 { 
    393                         cont[j] = rfield.ConEmitReflec[j]; 
    394                 } 
    395         } 
    396         else if( nOption == 6 ) 
    397         { 
    398                 /* all outward lines,   */ 
    399                 cont = (realnum*)MALLOC( sizeof(realnum)*(size_t)rfield.nupper ); 
    400                 /* need to free the vector once done */ 
    401                 lgFREE = true; 
    402                 /* correct back to inner radius */ 
    403                 refac = (realnum)radius.r1r0sq*geometry.covgeo; 
    404                 for( j=0; j<rfield.nflux; ++j) 
    405                 { 
    406                         cont[j] = rfield.outlin[j]*refac; 
    407                 } 
    408         } 
    409         else if( nOption == 7 ) 
    410         { 
    411                 /* all reflected lines */ 
    412                 if( geometry.lgSphere ) 
    413                 { 
    414                         refac = 0.; 
    415                 } 
    416                 else 
    417                 { 
    418                         refac = 1.; 
    419                 } 
    420  
    421                 cont = (realnum*)MALLOC( sizeof(realnum)*(size_t)rfield.nupper ); 
    422                 /* need to free the vector once done */ 
    423                 lgFREE = true; 
    424                 for( j=0; j<rfield.nflux; ++j) 
    425                 { 
    426                         /* units of lines here are to cancel out with tricks applied to continuum cells 
    427                          * when finally extracted below */ 
    428                         cont[j] = rfield.reflin[j]*refac; 
    429                 } 
    430         } 
    431         else if( nOption == 8 ) 
    432         { 
    433                 /* total transmitted continuum */ 
    434                 cont = (realnum*)MALLOC( sizeof(realnum)*(size_t)rfield.nupper ); 
    435                 /* need to free the vector once done */ 
    436                 lgFREE = true; 
    437                 /* correct back to inner radius */ 
    438                 refac = (realnum)radius.r1r0sq*geometry.covgeo; 
    439                 for( j=0; j<rfield.nflux; ++j) 
    440                 { 
    441                         /* units of lines here are to cancel out with tricks applied to continuum cells 
    442                          * when finally extracted below */ 
    443                         cont[j] = (rfield.ConEmitOut[j]+ rfield.outlin[j])*refac 
    444                                           + rfield.flux[j]*(realnum)radius.r1r0sq; 
    445                 } 
    446         } 
    447         else if( nOption == 9 ) 
    448         { 
    449                 /* total reflected continuum */ 
    450                 cont = (realnum*)MALLOC( sizeof(realnum)*(size_t)rfield.nupper ); 
    451                 /* need to free the vector once done */ 
    452                 lgFREE = true; 
    453                 for( j=0; j<rfield.nflux; ++j) 
    454                 { 
    455                         /* units of lines here are to cancel out with tricks applied to continuum cells 
    456                          * when finally extracted below */ 
    457                         cont[j] = ((rfield.ConRefIncid[j]+rfield.ConEmitReflec[j]) + 
     358        for( long i = 0; i < nEnergy; i++ ) 
     359        { 
     360                long j = ipLoEnergy + i; 
     361 
     362                if( j >= rfield.nflux ) 
     363                { 
     364                        ReturnedSpectrum[i] = SMALLFLOAT; 
     365                        continue; 
     366                } 
     367 
     368                if( nOption == 1 ) 
     369                { 
     370                        /* this is the incident continuum, col 2 of punch continuum command */ 
     371                        ReturnedSpectrum[i] = rfield.flux_total_incident[j]; 
     372                } 
     373                else if( nOption == 2 ) 
     374                { 
     375                        /* the attenuated transmitted continuum, no diffuse emission, 
     376                         * col 3 of punch continuum command */ 
     377                        ReturnedSpectrum[i] = rfield.flux[j]; 
     378                } 
     379                else if( nOption == 3 ) 
     380                { 
     381                        /* reflected incident continuum, col 6 of punch continuum command */ 
     382                        ReturnedSpectrum[i] = rfield.ConRefIncid[j]; 
     383                } 
     384                else if( nOption == 4 ) 
     385                { 
     386                        /* correct back to inner radius */ 
     387                        refac = (realnum)radius.r1r0sq*geometry.covgeo; 
     388                        ReturnedSpectrum[i] = (rfield.outlin[j]+rfield.ConEmitOut[j])*refac; 
     389                } 
     390                else if( nOption == 5 ) 
     391                { 
     392                        /* all reflected diffuse emission */ 
     393                        if( geometry.lgSphere ) 
     394                        { 
     395                                refac = 0.; 
     396                        } 
     397                        else 
     398                        { 
     399                                refac = 1.; 
     400                        } 
     401 
     402                        ReturnedSpectrum[i] = (rfield.reflin[j]+rfield.ConEmitReflec[j])*refac; 
     403                } 
     404                else if( nOption == 6 ) 
     405                { 
     406                        /* correct back to inner radius */ 
     407                        refac = (realnum)radius.r1r0sq*geometry.covgeo; 
     408                        ReturnedSpectrum[i] = rfield.outlin[j]*refac; 
     409                } 
     410                else if( nOption == 7 ) 
     411                { 
     412                        /* all reflected line emission */ 
     413                        if( geometry.lgSphere ) 
     414                        { 
     415                                refac = 0.; 
     416                        } 
     417                        else 
     418                        { 
     419                                refac = 1.; 
     420                        } 
     421 
     422                        ReturnedSpectrum[i] = rfield.reflin[j]*refac; 
     423                } 
     424                else if( nOption == 8 ) 
     425                { 
     426                        /* total transmitted continuum */ 
     427                        /* correct back to inner radius */ 
     428                        refac = (realnum)radius.r1r0sq*geometry.covgeo; 
     429                        ReturnedSpectrum[i] = (rfield.ConEmitOut[j]+ rfield.outlin[j])*refac 
     430                                + rfield.flux[j]*(realnum)radius.r1r0sq; 
     431                } 
     432                else if( nOption == 9 ) 
     433                { 
     434                        /* total reflected continuum */ 
     435                        ReturnedSpectrum[i] = ((rfield.ConRefIncid[j]+rfield.ConEmitReflec[j]) + 
    458436                                rfield.reflin[j]); 
    459437                } 
    460         } 
    461         else if( nOption == 10 ) 
    462         { 
    463                 /* this is exp(-tau) */ 
    464                 cont = (realnum*)MALLOC( sizeof(realnum)*(size_t)rfield.nupper ); 
    465                 /* need to free the vector once done */ 
    466                 lgFREE = true; 
    467                 for( j=0; j<nEnergy; ++j) 
    468                 { 
     438                else if( nOption == 10 ) 
     439                { 
     440                        /* this is exp(-tau) */ 
    469441                        /* This is the TOTAL attenuation in both the continuum and lines.   
    470442                         * Jon Miller discovered that the line attenuation was missing in 07.02 */ 
    471                         cont[j] = opac.ExpmTau[j]*rfield.trans_coef_total[j]; 
    472                 } 
    473         } 
    474         else 
    475         { 
    476                 fprintf(ioQQQ," cdSPEC called with impossible nOption (%i)\n", nOption); 
    477                 cdEXIT(EXIT_FAILURE); 
    478         } 
    479  
    480         /* now generate the continua */ 
    481         for( ncell = 0; ncell < nEnergy; ++ncell ) 
    482         { 
    483         if( ncell >= rfield.nflux ) 
    484                 { 
    485                         ReturnedSpectrum[ncell] = SMALLFLOAT; 
     443                        ReturnedSpectrum[i] = opac.ExpmTau[j]*rfield.trans_coef_total[j]; 
    486444                } 
    487445                else 
    488446                { 
    489                         ReturnedSpectrum[ncell] = cont[ncell]; 
    490                 } 
    491                 ASSERT( ReturnedSpectrum[ncell] >=0.f ); 
    492         } 
    493  
    494         /* need to free the vector once done if this flag was set */ 
    495         if( lgFREE ) 
    496         { 
    497                 free(cont); 
    498         } 
     447                        fprintf(ioQQQ," cdSPEC called with impossible nOption (%i)\n", nOption); 
     448                        cdEXIT(EXIT_FAILURE); 
     449                } 
     450 
     451                ASSERT( ReturnedSpectrum[i] >=0.f ); 
     452        } 
     453 
    499454        return; 
    500455} 
  • trunk/source/dense_fabden.cpp

    r1771 r2036  
    1010  double depth) 
    1111{ 
    12         double a , b; 
    13         a = depth; 
    14         b = radius; 
    15  
    16         fprintf(ioQQQ,"PROBLEM DISASTER The default version of dense_fabden is " 
    17                 "still in dense_fabden.cpp - edit and replace this file to use your version.\n"); 
    18         /* return val is example - must return density */ 
    19         return(a*b); 
    20  
    21         /* these are two examples of using this routine */ 
    22 #       if 0 
    23         double fabden_v; 
    24         double z , z0 , density , rad_midplane; 
    25         DEBUG_ENTRY( "dense_fabden()" ); 
    26  
    27         /* this routine is called when the DLAW command is given, 
    28          * and must return the hydrogen density at the current radius or depth 
    29          * RADIUS is the radius, the distance from the center of symmetry. 
    30          * DEPTH is the depth into the cloud, from the illuminated face 
    31          * both are in cm 
    32          * 
    33          * radius, depth, and the array DensityLaw are double precision, although 
    34          * dense_fabden itself is not 
    35          * 
    36          * this is one way to generate a density 
    37          * dense_fabden = radius * depth 
    38          * 
    39          * this is how to use the parameters on the dlaw command 
    40          * dense_fabden = DensityLaw(1) + radius * DensityLaw(2) 
    41          * 
    42          * following must be removed if this sub is to be used */ 
    43         /*fprintf( ioQQQ, " the old version of dense_fabden must be deleted, and a new one put in place.  Sorry.\n" );*/ 
    44  
    45         if( depth > radius ) 
    46                 TotalInsanity(); 
    47  
    48         rad_midplane = radius * cos( dense.DensityLaw[0] ); 
    49         z = radius * sin( dense.DensityLaw[0] ); 
    50         z0 = 0.047 * pow( rad_midplane/AU , 1.25 ) * AU; 
    51         /* density in gm / cm3 */ 
    52         density = 1.4e-9 * pow( rad_midplane/AU , -11./4. ) * sexp( POW2(z/z0) ); 
    53         /* convert density to cm-3 */ 
    54         fabden_v = density/(ATOMIC_MASS_UNIT * 1.2); 
    55  
    56         fprintf(ioQQQ, "bug dense_fabden zone %.2f radius %e density %e \n", 
    57                 fnzone , radius , fabden_v ); 
    58         return( fabden_v ); 
    59 #       endif 
    60  
    61 #if 0 
    62  
    63         /* update stromgren radius to most recent value */ 
     12        double fabden_v = pow(10.,dense.DensityLaw[0]); 
    6413        if( rfield.lgUSphON ) 
    65                 dense.DensityLaw[2] = rfield.rstrom/PARSEC; 
    66  
    67         /* this is the density law used in the Wen & O'Dell, 1995, ApJ 438, 784 paper */ 
    68         powexp = MIN2((radius/parsec-dense.DensityLaw[2])/dense.DensityLaw[1],dense.DensityLaw[3]); 
    69         fabden_v = pow(10.,dense.DensityLaw[0])*exp(powexp); 
    70  
    71         fabden_v = dense.DensityLaw[0]; 
    72         /* just here to stop compilers from flagging unused vars */ 
    73         temp = radius + depth;  
    74         if( fabden_v == 0. ) 
    75         { 
    76                 cdEXIT(EXIT_FAILURE); 
    77         } 
    78         else 
    79         { 
    80                 /* when this routine is used the following branch is the correct exit */ 
    81                 /* following should return correct value of the density at this position,  
    82                  * temp is there to trick lint */ 
    83                 return( fabden_v*temp ); 
    84         } 
    85 #endif 
     14                fabden_v *= pow(radius/rfield.rstrom,dense.DensityLaw[1]); 
     15        return fabden_v;  
    8616} 
  • trunk/source/grid.h

    r1842 r2036  
    5757        bool lgOutputTypeOn[NUM_OUTPUT_TYPES]; 
    5858 
     59        long ipLoEnergy, ipHiEnergy; 
     60        realnum LoEnergy_keV, HiEnergy_keV; 
     61 
    5962} grid; 
    6063 
  • trunk/source/grid_xspec.cpp

    r1842 r2036  
    99#include "optimize.h" 
    1010#include "cddrive.h" 
     11#include "continuum.h" 
    1112#include "rfield.h" 
    1213#include "grid.h" 
     14#include "ipoint.h" 
    1315#include "called.h" 
     16#include "physconst.h" 
    1417#include "prt.h" 
    1518 
     
    1720void gridXspec(realnum xc[], long int nInterpVars) 
    1821{ 
    19         long int i, j, k; 
    20         double averageChi2; 
     22        long int i; 
    2123 
    2224        DEBUG_ENTRY( "gridXspec()" ); 
     
    7981                grid.paramRange[i][5] = xc[i]+grid.paramIncrements[i]*(grid.numParamValues[i]-1.f)+grid.paramIncrements[i]/10.f; 
    8082 
    81                 for( j=0; j<grid.numParamValues[i]; j++ ) 
     83                for( long j=0; j<grid.numParamValues[i]; j++ ) 
    8284                { 
    8385                        grid.paramData[i][j] = xc[i]+grid.paramIncrements[i]*j; 
     
    9092        } 
    9193 
    92         /* >>chng 06 aug 23, this logic now allows non-square parameter spaces.  */ 
    9394        for( i=0; i< grid.totNumModels; i++ ) 
    9495        { 
     96                long j; 
     97                double averageChi2; 
    9598                realnum variableVector[LIMPAR]; 
    9699 
     
    105108                         * second "volume" is product of grid.numParamValues[2]*grid.numParamValues[3]*....grid.numParamValues[n] 
    106109                         * last "volume" is unity.  */ 
    107                         for( k=j+1; k<nInterpVars; k++ ) 
     110                        for( long k=j+1; k<nInterpVars; k++ ) 
    108111                        { 
    109112                                volumeOtherDimensions *= grid.numParamValues[k]; 
     
    210213        { 
    211214                long i1, i2; 
    212                 grid.numEnergies = rfield.nupper-2; 
     215 
     216                if( grid.LoEnergy_keV == 0. ) 
     217                        grid.ipLoEnergy = 0; 
     218                else 
     219                        grid.ipLoEnergy = ipoint( grid.LoEnergy_keV * 1000. / EVRYD ); 
     220 
     221                if( grid.HiEnergy_keV == 0. || grid.HiEnergy_keV >= continuum.filbnd[continuum.nrange] ) 
     222                        grid.ipHiEnergy = rfield.nflux - 1; 
     223                else 
     224                        grid.ipHiEnergy = ipoint( grid.HiEnergy_keV * 1000. / EVRYD ); 
     225 
     226                grid.numEnergies = grid.ipHiEnergy - grid.ipLoEnergy + 1; 
    213227                grid.Energies = (realnum*)MALLOC(sizeof(realnum)*(unsigned)(grid.numEnergies) ); 
    214228                grid.Spectra = (realnum***)MALLOC(sizeof(realnum**)*(unsigned)(NUM_OUTPUT_TYPES) ); 
     
    241255                 * at this point nOptimiz has already been incremented for first model */ 
    242256                if( grid.lgOutputTypeOn[i] ) 
    243                         cdSPEC2( i, grid.numEnergies, grid.Spectra[i][optimize.nOptimiz]); 
     257                        cdSPEC2( i, grid.numEnergies, grid.ipLoEnergy, grid.ipHiEnergy, grid.Spectra[i][optimize.nOptimiz]); 
    244258        } 
    245259        return; 
  • trunk/source/init_coreload.cpp

    r1935 r2036  
    306306        grid.lgGridDone = false; 
    307307        grid.lgStrictRepeat = false; 
     308        /* these are energy range... if not changed with command, 0. says just use energy limits of mesh */ 
     309        grid.LoEnergy_keV = 0.; 
     310        grid.HiEnergy_keV = 0.; 
     311 
    308312 
    309313        PunchFilesInit(); 
  • trunk/source/parse_punch.cpp

    r1949 r2036  
    16191619                        strcpy( punch.chPunch[punch.npunch], "LINR" ); 
    16201620                        /* punch some details needed for line radiative transfer  
    1621                          * routine in punch_line.c */ 
     1621                         * routine in punch_line.cpp */ 
    16221622                        Punch_Line_RT(punch.ipPnunit[punch.npunch],"READ"); 
    16231623                } 
     
    21432143                { 
    21442144                        punch.lgPunLstIter[punch.npunch] = true; 
     2145                } 
     2146 
     2147                ipFFmt = 5; 
     2148                /* range option - important since so much data */ 
     2149                if( nMatch("RANGE",chCard) )  
     2150                { 
     2151                        /* get lower and upper range, must be in keV */ 
     2152                        punch.punarg[punch.npunch][0] = (realnum)FFmtRead(chCard,&ipFFmt,INPUT_LINE_LENGTH,&lgEOL); 
     2153                        punch.punarg[punch.npunch][1] = (realnum)FFmtRead(chCard,&ipFFmt,INPUT_LINE_LENGTH,&lgEOL); 
     2154                        if( lgEOL ) 
     2155                        { 
     2156                                fprintf(ioQQQ,"There must be two numbers, the lower and upper energy range in keV.\nSorry.\n"); 
     2157                                cdEXIT(EXIT_FAILURE); 
     2158                        } 
     2159                        if( punch.punarg[punch.npunch][0] >=punch.punarg[punch.npunch][1] ) 
     2160                        { 
     2161                                fprintf(ioQQQ,"The two energies for the range must be in increasing order.\nSorry.\n"); 
     2162                                cdEXIT(EXIT_FAILURE); 
     2163                        } 
     2164 
     2165                        grid.LoEnergy_keV = punch.punarg[punch.npunch][0]; 
     2166                        grid.HiEnergy_keV = punch.punarg[punch.npunch][1]; 
     2167                } 
     2168                else 
     2169                { 
     2170                        /* these mean full energy range */ 
     2171                        punch.punarg[punch.npunch][0] = 0; 
     2172                        punch.punarg[punch.npunch][1] = 0; 
    21452173                } 
    21462174 
  • trunk/source/punch_fits.cpp

    r1960 r2036  
    7777                                                                  long totNumModels, long numEnergies, long nintparm, long naddparm  ); 
    7878STATIC void punchFITS_GenericHeader( long numEnergies ); 
    79 STATIC void punchFITS_GenericData( long numEnergies ); 
     79STATIC void punchFITS_GenericData( long numEnergies, long ipLoEnergy, long ipHiEnergy ); 
    8080STATIC void writeCloudyDetails( void ); 
    8181STATIC long addComment( const char *CommentToAdd ); 
     
    128128                punchFITS_PrimaryHeader( false ); 
    129129                punchFITS_GenericHeader( rfield.nflux - 1 ); 
    130                 punchFITS_GenericData( rfield.nflux -1 ); 
     130                punchFITS_GenericData( rfield.nflux -1, 0, rfield.nflux -2 ); 
    131131        } 
    132132        /* These are specially designed XSPEC outputs. */ 
     
    673673} 
    674674 
    675 STATIC void punchFITS_GenericData( long numEnergies ) 
     675STATIC void punchFITS_GenericData( long numEnergies, long ipLoEnergy, long ipHiEnergy ) 
    676676{ 
    677677        long i; 
     
    683683        TransmittedSpectrum = (realnum*)MALLOC(sizeof(realnum)*(unsigned)(numEnergies) ); 
    684684 
    685         cdSPEC2( 8, numEnergies, TransmittedSpectrum ); 
     685        cdSPEC2( 8, numEnergies, ipLoEnergy, ipHiEnergy, TransmittedSpectrum ); 
    686686 
    687687        /* Now add the energies data */ 
  • trunk/source/punch_line.cpp

    r1960 r2036  
    343343                        if(nLine>=LIMLINE ) 
    344344                        { 
    345                                 fprintf(ioQQQ," PUNCH RT has too many lines - increase LIMLINE in punch_line.c\n"); 
     345                                fprintf(ioQQQ," PUNCH RT has too many lines - increase LIMLINE in punch_line.cpp\n"); 
    346346                                cdEXIT(EXIT_FAILURE); 
    347347                        } 
  • trunk/tsuite/auto/ism_grid.in

    r1840 r2036  
    3939punch heating "ism_grid.het"  
    4040punch coolign "ism_grid.col"  
    41 punch xspec mtable "ism_grid.fit"  
     41punch xspec mtable "ism_grid.fit" range 0.1 3 keV 
    4242punch temperature "ism_grid.tem"  
    4343c