14 #define RECORDSIZE 2880
17 #if defined(_BIG_ENDIAN)
28 # define HtoNL(A) ((((A) & 0xff000000) >> 24) | \
29 (((A) & 0x00ff0000) >> 8) | \
30 (((A) & 0x0000ff00) << 8) | \
31 (((A) & 0x000000ff) << 24))
41 #define ByteSwap5(x) ByteSwap((unsigned char *) &x,sizeof(x))
43 #if !defined(_BIG_ENDIAN)
66 const char ModelUnits[2][17] = {
"'dimensionless '",
"'photons/cm^2/s'" };
71 realnum **paramData,
long nintparm,
long naddparm,
72 long *numParamValues );
77 long totNumModels,
long numEnergies,
long nintparm,
long naddparm );
82 STATIC long addKeyword_txt(
const char *theKeyword,
const void *theValue,
const char *theComment,
long Str_Or_Log );
106 if( (asciiDump = fopen(
"gridspectra.con",
"w" ) ) == NULL )
108 fprintf(
ioQQQ,
"punchFITSfile could not open punch file for writing.\nSorry.\n" );
117 fprintf( asciiDump,
"%.12e\t",
grid.
Spectra[10][j][i] );
119 fprintf( asciiDump,
"\n" );
135 bool lgAdditiveModel;
141 lgAdditiveModel =
false;
145 lgAdditiveModel =
true;
168 fprintf(
ioQQQ,
"PROBLEM - undefined option encountered in punchFITSfile. \n" );
176 const char *ModelName =
"'CLOUDY'";
192 if( lgAddModel ==
true )
223 long naxis, naxis1, naxis2;
225 char theValue_temp[20];
237 naxis2 = nintparm+naddparm;
270 sprintf( theValue,
"%s%-8s%s",
"'",theValue_temp,
"'" );
299 long *numParamValues )
308 for( i=0; i<nintparm+naddparm; i++ )
314 paramMethods[i] =
HtoNL(paramMethods[i]);
316 numTemp =
HtoNL(numParamValues[i]);
320 paramRange[i][0] = (
realnum)pow( 10., (
double)paramRange[i][0] );
321 paramRange[i][1] = (
realnum)pow( 10., (
double)paramRange[i][1] );
322 paramRange[i][2] = (
realnum)pow( 10., (
double)paramRange[i][2] );
323 paramRange[i][3] = (
realnum)pow( 10., (
double)paramRange[i][3] );
324 paramRange[i][4] = (
realnum)pow( 10., (
double)paramRange[i][4] );
325 paramRange[i][5] = (
realnum)pow( 10., (
double)paramRange[i][5] );
328 #if !defined(_BIG_ENDIAN)
338 for( j=0; j<numParamValues[i]; j++ )
342 paramData[i][j] = (
realnum)pow( 10., (
double)paramData[i][j] );
345 #if !defined(_BIG_ENDIAN)
365 for( i=0; i<nintparm+naddparm; i++ )
367 paramMethods[i] =
HtoNL(paramMethods[i]);
369 #if !defined(_BIG_ENDIAN)
379 for( j=0; j<numParamValues[i]; j++ )
381 #if !defined(_BIG_ENDIAN)
398 long naxis, naxis1, naxis2;
407 naxis2 = numEnergies;
445 for( i=0; i<numEnergies; i++ )
451 if( i == numEnergies-1 )
460 #if !defined(_BIG_ENDIAN)
479 long i, numFields = 2+naddparm;
480 long naxis, naxis1, naxis2;
486 char theValue2temp[20];
488 char theValue_temp[20];
489 char theComment1[47];
499 naxis1 = ( numEnergies*(naddparm+1) + nintparm ) * (long)
sizeof(
realnum);
500 naxis2 = totNumModels;
516 sprintf( theValue2temp,
"%ld%s", nintparm,
"E" );
517 sprintf( theValue2,
"%s%-8s%s",
"'",theValue2temp,
"'" );
525 sprintf( theValue_temp,
"%ld%s", numEnergies,
"E" );
526 sprintf( theValue,
"%s%-8s%s",
"'",theValue_temp,
"'" );
533 for( i=1; i<=naddparm; i++ )
535 sprintf( theKeyword1,
"%s%ld",
"TTYPE", i+2 );
536 sprintf( theKeyword2,
"%s%ld",
"TFORM", i+2 );
537 sprintf( theKeyword3,
"%s%ld",
"TUNIT", i+2 );
539 sprintf( theValue1,
"%s%2.2ld%s",
"'ADDSP", i,
"'" );
541 sprintf( theValue2temp,
"%ld%s", numEnergies,
"E" );
542 sprintf( theValue2,
"%s%-8s%s",
"'",theValue2temp,
"'" );
544 sprintf( theComment1,
"%s%ld",
"label for field ", i+2 );
569 long totNumModels,
long numEnergies,
long nintparm,
long naddparm )
572 long naxis2 = totNumModels;
579 for( i=0; i<naxis2; i++ )
582 #if !defined(_BIG_ENDIAN)
583 for(
long j = 0; j<numEnergies; j++ )
588 for(
long j = 0; j<nintparm; j++ )
599 #if !defined(_BIG_ENDIAN)
601 for(
long j = 0; j<numEnergies; j++ )
606 for(
long j = 0; j<nintparm; j++ )
619 fprintf(
ioQQQ,
" Additional parameters not currently supported.\n" );
635 long naxis, naxis1, naxis2;
643 naxis1 = numFields*(long)
sizeof(
realnum);
644 naxis2 = numEnergies;
685 cdSPEC2( 8, numEnergies, TransmittedSpectrum );
688 for( i=0; i<numEnergies; i++ )
693 #if !defined(_BIG_ENDIAN)
708 free( TransmittedSpectrum );
714 char timeString[30]=
"";
726 strcpy( timeString , ctime(&now) );
730 for( i=0; i<30; i++ )
732 if( timeString[i] ==
'\n' )
738 strcpy( tempString,
"Generated by Cloudy " );
740 strncat( tempString,
t_version::Inst().chVersion,
sizeof(tempString)-strlen(tempString) );
743 strcpy( tempString,
"--- " );
744 strcat( tempString, timeString );
750 char firstLine[70], extraLine[65];
759 for( k=0; k<
MIN2(69, j); k++ )
767 for( k=69; k< 133; k++ )
772 extraLine[64] =
'\0';
773 strcpy( tempString,
"more " );
774 strcat( tempString, extraLine );
778 for( k=133; k< 197; k++ )
782 extraLine[64] =
'\0';
783 strcpy( tempString,
"more " );
784 strcat( tempString, extraLine );
793 STATIC long addKeyword_txt(
const char *theKeyword,
const void *theValue,
const char *theComment,
long Str_Or_Log )
795 long numberOfBytesWritten = 0;
800 if( Str_Or_Log == 0 )
802 numberOfBytesWritten = fprintf(
ioFITS_OUTPUT,
"%-8s%-2s%-20s%3s%-47s",
811 ASSERT( Str_Or_Log == 1 );
812 numberOfBytesWritten = fprintf(
ioFITS_OUTPUT,
"%-8s%-2s%20s%3s%-47s",
821 return numberOfBytesWritten;
826 long numberOfBytesWritten = 0;
830 numberOfBytesWritten = fprintf(
ioFITS_OUTPUT,
"%-8s%-2s%20ld%3s%-47s",
838 return numberOfBytesWritten;
843 long i, numberOfBytesWritten = 0;
844 char tempString[70] =
" ";
848 strncpy( &tempString[0], CommentToAdd, 69 );
849 ASSERT( (
int)strlen( tempString ) <= 70 );
852 for( i=0; i<69; i++ )
854 if( tempString[i] ==
'\t' )
860 numberOfBytesWritten = fprintf(
ioFITS_OUTPUT,
"COMMENT %-70s", tempString );
863 return numberOfBytesWritten;