/******************************** * * FILE OUTPUT.C * * All the output functions are in this file. * ************************************/ #include "header.h" void writeStarData( struct starparams star ) { char *filename; FILE *out; double x; long int itheta, iphi, maxthetaindex, maxphiindex; if( star.whichstar == 1 ) filename = "star1.dat"; else filename = "star2.dat"; if( ( out = fopen(filename, "w") ) == NULL) { printf(" Cannot open output file %s\n", filename); quit(""); } maxthetaindex = star.thetapoints - 1; maxphiindex = star.phipoints - 1; fprintf( out, "STAR%1ld\n\n", star.whichstar); fprintf( out, "Q= %4.2lf\n", starsys.q); fprintf( out, "MASS1= %4.2lf\n", starsys.mass1); fprintf( out, "MASS2= %4.2lf\n", starsys.mass2); fprintf( out, "INCLINATION= %6.2lf\n", starsys.inclination); fprintf( out, "FILTER= %s\n", starsys.filter); x = starsys.wavelength * 1.0e+8; fprintf( out, "WAVELENGTH= %8.1lf A\n", x); fprintf( out, "PHASEOFFSET= %6.4lf\n\n", starsys.phaseoffset); fprintf( out, "THETAPOINTS%1ld= %4ld\n", star.whichstar,star.thetapoints); fprintf( out, "PHIPOINTS%1ld= %4ld\n", star.whichstar, star.phipoints); fprintf( out, "MASSFRACTION%1ld= %9.6lf\n", star.whichstar, star.massFrac); fprintf( out, "RL1%1ld= %9.6lf\n", star.whichstar, star.rL1); fprintf( out, "PSILOBE%1ld= %9.6lf\n", star.whichstar, star.psiLobe); fprintf( out, "FRACRADIUS%1ld= %9.6lf\n", star.whichstar, star.fracRadius); fprintf( out, "PSISURFACE%1ld= %9.6lf\n", star.whichstar, star.psiSurface); fprintf( out, "BACKRADIUS%1ld= %9.6lf\n", star.whichstar, star.backradius); fprintf( out, "FRONTRADIUS%1ld= %9.6lf\n", star.whichstar,star.frontradius); fprintf( out, "SIDERADIUS%1ld= %9.6lf\n", star.whichstar, star.sideradius); fprintf( out, "POLERADIUS%1ld= %9.6lf\n", star.whichstar, star.poleradius); fprintf( out, "GRAVBETA%1ld= %6.3lf\n", star.whichstar, star.gravbeta); fprintf( out, "POLETEMP%1ld= %9.1lf\n", star.whichstar, star.poletemp); fprintf( out, "POLEGRAV%1ld= %10.5le\n", star.whichstar, star.polegrav); fprintf( out, "ALBEDO%1ld= %6.3lf\n", star.whichstar, star.albedo); if( strcmp( star.fluxsource, "BB") == 0 ) { fprintf( out, "FLUXSOURCE%1ld= %s %6.3lf\n", star.whichstar, star.fluxsource, star.bblimbdark); } else { fprintf( out, "FLUXSOURCE%1ld= %s %6.3lf\n", star.whichstar, star.fluxsource, star.logg); } fprintf( out, "END\n"); for( itheta = 0; itheta <= maxthetaindex; itheta++) { for( iphi = 0; iphi <= maxphiindex; iphi++) { if( star.whichstar == 1 ) { fprintf( out, "%3ld %3ld %10.5le %8.5lf %8.5lf %8.5lf\ %10.5le %8.5lf %8.5lf %8.5lf %10.5le %7.1lf\n", itheta, iphi, r1[itheta][iphi], l1[itheta][iphi], m1[itheta][iphi], n1[itheta][iphi], gravity1[itheta][iphi], normalx1[itheta][iphi], normaly1[itheta][iphi], normalz1[itheta][iphi], dS1[itheta][iphi], localT1[itheta][iphi] ); } if( star.whichstar == 2 ) { fprintf( out, "%3ld %3ld %10.5le %8.5lf %8.5lf %8.5lf\ %10.5le %8.5lf %8.5lf %8.5lf %10.5le %7.1lf\n", itheta, iphi, r2[itheta][iphi], l2[itheta][iphi], m2[itheta][iphi], n2[itheta][iphi], gravity2[itheta][iphi], normalx2[itheta][iphi], normaly2[itheta][iphi], normalz2[itheta][iphi], dS2[itheta][iphi], localT2[itheta][iphi] ); } } } fclose( out ); return; } void writeDiskData( void ) { char *filename; FILE *out; double x; long int ir, iphi, maxrindex, maxphiindex; filename = "disk.dat"; if( ( out = fopen(filename, "w") ) == NULL) { printf(" Cannot open output file disk.dat\n"); quit(""); } maxrindex = disktop.rpoints - 1; maxphiindex = disktop.phipoints - 1; fprintf( out, "DISK\n\n"); fprintf( out, "Q= %4.2lf\n", starsys.q); fprintf( out, "MASS1= %4.2lf\n", starsys.mass1); fprintf( out, "MASS2= %4.2lf\n", starsys.mass2); fprintf( out, "INCLINATION= %6.2lf\n", starsys.inclination); fprintf( out, "FILTER= %s\n", starsys.filter); x = starsys.wavelength * 1.0e+8; fprintf( out, "WAVELENGTH= %8.1lf A\n", x); fprintf( out, "PHASEOFFSET= %6.4lf\n\n", starsys.phaseoffset); fprintf( out, "RPOINTSDISK= %4ld\n", disktop.rpoints); fprintf( out, "PHIPOINTSDISK= %4ld\n", disktop.phipoints); fprintf( out, "RL1= %9.6lf\n", star1.rL1); fprintf( out, "RDISKIN= %9.6lf\n", disktop.innerR); fprintf( out, "RDISKOUT= %9.6lf\n", disktop.outerR); fprintf( out, "FLAREANGLE= %9.6lf\n", disktop.flareangle); fprintf( out, "DISKTRANSMIT= %5.3lf\n", disktop.transmission); if( strcmp( disktop.Tsource, "POLYNOMIAL") == 0) fprintf( out, "TOPTEMP= POLYNOMIAL %8.1lf %8.1lf %8.1lf %8.1lf\n", disktop.Tcoef[0], disktop.Tcoef[1], disktop.Tcoef[2], disktop.Tcoef[3] ); if( strcmp( disktop.Tsource, "STEADYSTATE") == 0) fprintf( out, "TOPTEMP= STEADYSTATE %8.1lf %8.1lf\n", disktop.Tcoef[0], disktop.Tcoef[1] ); if( strcmp( disktop.Tsource, "FILE") == 0 ) fprintf( out, "TOPTEMP= FILE %s\n", disktop.Tfile); if( strcmp( disktop.fluxsource, "BB") == 0 ) { fprintf( out, "TOPFLUXSOURCE= %s %6.3lf\n", disktop.fluxsource, disktop.bblimbdark); } else { fprintf( out, "TOPFLUXSOURCE= %s %6.3lf\n", disktop.fluxsource, disktop.logg); } fprintf( out, "TOPSPOTTEMP=%8.1lf\n", disktop.spotT ); if( disktop.spotT > 0.0 ) { fprintf( out, "TOPSPOTR= %8.5lf %8.5lf\n", disktop.spotr[0], disktop.spotr[1] ); fprintf( out, "TOPSPOTPHI= %6.1lf %6.1lf\n", disktop.spotphi[0], disktop.spotphi[1] ); } fprintf( out, "RIMTEMP= %8.1lf\n", diskrim.T ); if( diskrim.T > 0.0 ) { if( strcmp( diskrim.fluxsource, "BB") == 0 ) { fprintf( out, "RIMFLUXSOURCE= %s %6.3lf\n", diskrim.fluxsource, diskrim.bblimbdark); } else { fprintf( out, "RIMFLUXSOURCE= %s %6.3lf\n", diskrim.fluxsource, diskrim.logg); } } fprintf( out, "RIMSPOTTEMP=%8.1lf\n", diskrim.spotT ); if( diskrim.spotT > 0.0 ) { fprintf( out, "RIMSPOTPHI= %6.1lf %6.1lf\n", diskrim.spotphi[0], diskrim.spotphi[1] ); } fprintf( out, "END\n"); for( ir = 0; ir <= maxrindex; ir++) { for( iphi = 0; iphi <= maxphiindex; iphi++) { fprintf( out, "%3ld %3ld %10.5le %8.5lf %8.5lf %8.5lf\ %8.5lf %8.5lf %8.5lf %10.5le %7.1lf\n", ir, iphi, rdisk[ir][iphi], ldisk[ir][iphi], mdisk[ir][iphi], ndisk[ir][iphi], normdiskx[ir][iphi], normdisky[ir][iphi], normdiskz[ir][iphi], dSdisk[ir][iphi], localTdisk[ir][iphi] ); } } return; } void writeLCurve( long nphases, double *orbphase, double *flux) /******************* * * Writes the light curve to a file named lcurve.dat * **********************/ { void quit(); char *filename; FILE *out; long int i; filename = "lcurve.dat"; if( ( out = fopen(filename, "w") ) == NULL) { printf(" Cannot open output file %s\n", filename); quit(""); } for( i = 0; i < nphases; i++) { fprintf( out," %7.5lf %10.5le\n", orbphase[i], flux[i]); } fclose( out ); return; } void writePars( void ) /*********************** * * This function writes the file "outpars.dat", which summarizes * the properties of the system. * ***********************/ { char *filename; FILE *out; long i; double x, y, z; filename = "outpars.dat"; if( ( out = fopen(filename, "w") ) == NULL) { printf(" Cannot open output file outpars.dat\n"); quit(""); } fprintf( out, "Q= %4.2lf\n", starsys.q); fprintf( out, "MASS1= %4.2lf\n", starsys.mass1); fprintf( out, "MASS2= %4.2lf\n", starsys.mass2); fprintf( out, "INCLINATION= %6.2lf\n", starsys.inclination); fprintf( out, "FILTER= %s\n", starsys.filter); x = starsys.wavelength * 1.0e+8; fprintf( out, "WAVELENGTH= %8.1lf A\n", x); fprintf( out, "PHASEOFFSET= %6.4lf\n\n", starsys.phaseoffset); fprintf( out, "STAR1= %s\n", mode.star1); fprintf( out, "THETAPOINTS1= %4ld\n", star1.thetapoints); fprintf( out, "PHIPOINT1= %4ld\n", star1.phipoints); fprintf( out, "RL1-1= %9.6lf\n", star1.rL1); fprintf( out, "PSILOBE1= %9.6lf\n", star1.psiLobe); fprintf( out, "FRACRADIUS1= %9.6lf\n", star1.fracRadius); fprintf( out, "PSISURFACE1= %9.6lf\n", star1.psiSurface); fprintf( out, "FRONTRADIU1= %9.6lf\n", star1.frontradius); fprintf( out, "SIDERADIUS1= %9.6lf\n", star1.sideradius); fprintf( out, "BACKRADIUS1= %9.6lf\n", star1.backradius); fprintf( out, "POLERADIUS1= %9.6lf\n", star1.poleradius); fprintf( out, "GRAVBETA1= %6.3lf\n", star1.gravbeta); fprintf( out, "POLETEMP1= %9.1lf\n", star1.poletemp); fprintf( out, "POLEGRAV1= %10.5le\n", star1.polegrav); fprintf( out, "ALBEDO1= %6.3lf\n", star1.albedo); if( strcmp( star1.fluxsource, "BB") == 0 ) { fprintf( out, "FLUXSOURCE1= %s %6.3lf\n", star1.fluxsource, star1.bblimbdark); } else { fprintf( out, "FLUXSOURCE1= %s %6.3lf\n", star1.fluxsource, star1.logg); } fprintf( out, "\n"); fprintf( out, "STAR1SPOTS = %s\n", mode.star1spots); if( strcmp( mode.star1spots, "ON") == 0 ) { for( i = 1; i <= star1spot.nspots; i++) { x = star1spot.theta[i] * (360.0 / TWOPI); y = star1spot.phi[i] * (360.0 / TWOPI); z = star1spot.radius[i] * (360.0 / TWOPI ); fprintf( out, "STAR1SPOT= %7.2f %7.2f %7.2f %5.3f\n", x, y, z, star1spot.SpotToverStarT[i] ); } } fprintf( out, "\n"); fprintf( out, "STAR2= %s\n", mode.star2); fprintf( out, "THETAPOINTS2= %4ld\n", star2.thetapoints); fprintf( out, "PHIPOINTS2= %4ld\n", star2.phipoints); fprintf( out, "RL1-2= %9.6lf\n", star2.rL1); fprintf( out, "PSILOBE2= %9.6lf\n", star2.psiLobe); fprintf( out, "FRACRADIUS2= %9.6lf\n", star2.fracRadius); fprintf( out, "PSISURFACE2= %9.6lf\n", star2.psiSurface); fprintf( out, "SIDERADIUS2= %9.6lf\n", star2.sideradius); fprintf( out, "FRONTRADIUS2= %9.6lf\n", star2.frontradius); fprintf( out, "BACKRADIUS2= %9.6lf\n", star2.backradius); fprintf( out, "POLERADIUS2= %9.6lf\n", star2.poleradius); fprintf( out, "GRAVBETA2= %6.3lf\n", star2.gravbeta); fprintf( out, "POLETEMP2= %9.1lf\n", star2.poletemp); fprintf( out, "POLEGRAV2= %10.5le\n", star2.polegrav); fprintf( out, "ALBEDO2= %6.3lf\n", star2.albedo); if( strcmp( star2.fluxsource, "BB") == 0 ) { fprintf( out, "FLUXSOURCE2= %s %6.3lf\n", star2.fluxsource, star2.bblimbdark); } else { fprintf( out, "FLUXSOURCE2= %s %6.3lf\n", star2.fluxsource, star2.logg); } fprintf( out, "\n"); fprintf( out, "STAR2SPOTS = %s\n", mode.star2spots); if( strcmp( mode.star2spots, "ON") == 0 ) { for( i = 1; i <= star2spot.nspots; i++) { x = star2spot.theta[i] * (360.0 / TWOPI); y = star2spot.phi[i] * (360.0 / TWOPI); z = star2spot.radius[i] * (360.0 / TWOPI ); fprintf( out, "STAR2SPOT= %7.2f %7.2f %7.2f %5.3f\n", x, y, z, star2spot.SpotToverStarT[i] ); } } fprintf( out, "\n"); fprintf( out, "DISK= %s\n", mode.disk); fprintf( out, "RPOINTSDISK= %4ld\n", disktop.rpoints); fprintf( out, "PHIPOINTSDISK= %4ld\n", disktop.phipoints); fprintf( out, "RL1= %9.6lf\n", star1.rL1); fprintf( out, "RDISKIN= %9.6lf\n", disktop.innerR); fprintf( out, "RDISKOUT= %9.6lf\n", disktop.outerR); fprintf( out, "FLAREANGLE= %9.6lf\n", disktop.flareangle); fprintf( out, "DISKTRANSMIT= %5.3lf\n", disktop.transmission); if( strcmp( disktop.Tsource, "POLYNOMIAL") == 0) fprintf( out, "TOPTEMP= POLYNOMIAL %8.1lf %8.1lf %8.1lf %8.1lf\n", disktop.Tcoef[0], disktop.Tcoef[1], disktop.Tcoef[2], disktop.Tcoef[3] ); if( strcmp( disktop.Tsource, "STEADYSTATE") == 0) fprintf( out, "TOPTEMP= STEADYSTATE %8.1lf %8.1lf\n", disktop.Tcoef[0], disktop.Tcoef[1] ); if( strcmp( disktop.Tsource, "FILE") == 0 ) fprintf( out, "TOPTEMP= FILE %s\n", disktop.Tfile); if( strcmp( disktop.fluxsource, "BB") == 0 ) { fprintf( out, "TOPFLUXSOURCE= %s %6.3lf\n", disktop.fluxsource, disktop.bblimbdark); } else { fprintf( out, "TOPFLUXSOURCE= %s %6.3lf\n", disktop.fluxsource, disktop.logg); } fprintf( out, "TOPSPOTTEMP= %8.1lf\n", disktop.spotT ); if( disktop.spotT > 0.0 ) { fprintf( out, "TOPSPOTR= %8.5lf %8.5lf\n", disktop.spotr[0], disktop.spotr[1] ); fprintf( out, "TOPSPOTPHI= %6.1lf %6.1lf\n", disktop.spotphi[0], disktop.spotphi[1] ); } fprintf( out, "RIMTEMP= %8.1lf\n", diskrim.T ); if( diskrim.T > 0.0 ) { if( strcmp( diskrim.fluxsource, "BB") == 0 ) { fprintf( out, "RIMFLUXSOURCE= %s %6.3lf\n", diskrim.fluxsource, diskrim.bblimbdark); } else { fprintf( out, "RIMFLUXSOURCE= %s %6.3lf\n", diskrim.fluxsource, diskrim.logg); } } fprintf( out, "RIMSPOTTEMP=%8.1lf\n", diskrim.spotT ); if( diskrim.spotT > 0.0 ) { fprintf( out, "RIMSPOTPHI= %6.1lf %6.1lf\n", diskrim.spotphi[0], diskrim.spotphi[1] ); } fprintf( out, "\n"); if( strcmp( mode.thirdlight, "ON") == 0 ) { fprintf( out, "THIRDLIGHT= %s %6.3lf %6.3lf\n", mode.thirdlight, thirdlight.fraction, thirdlight.orbphase); } else { fprintf( out, "THIRDLIGHT= %s\n", mode.thirdlight); } fprintf( out, "END\n"); return; } void writeChiSq( double chisqu ) /******************* * * Writes the chi squared to a one-line file called * chisqu.dat * **********************/ { char *filename; FILE *out; long int i; filename = "chisqu.dat"; if( ( out = fopen(filename, "w") ) == NULL) { printf(" Cannot open output file %s\n", filename); quit(""); } fprintf( out,"%12.5le\n", chisqu); fflush( out ); fclose( out ); return; } void quit( char *outputline) { printf("\n %s\n", outputline); printf(" Program terminated.\n"); exit( 0 ); return; }