00001 
00002 
00003 
00004 #ifndef SAVE_H_
00005 #define SAVE_H_
00006 
00007 #include "energy.h"
00008 #include "h2_priv.h"
00009 
00010 
00011 static const long LIMPUN = 100L;
00012 static const long MAX_HEADER_SIZE = 20000L;
00013 
00015 static const long VERSION_TRNCON = 20100901L;
00016 
00020 void SaveDo(
00021         const char *chTime); 
00022 
00030 void Save1Line( 
00031         const TransitionProxy & t , 
00032         FILE * io , 
00033         realnum xLimit , 
00034         long index,
00035         realnum DopplerWidth);
00036 
00040 NORETURN void SaveLineData(
00041         FILE * io);
00042 
00047 void save_opacity(
00048         FILE * io, 
00049         long int np);
00050 
00055 void SaveSpecial(
00056         FILE* io , 
00057   const char *chTime);
00058 
00063 void SaveSpecies(
00064                 FILE* ioPUN,
00065                 long int ipPun );
00066 
00074 void Save1LineData( 
00075         const TransitionProxy & t , 
00076         FILE * io,
00077          bool lgCS_2 ,
00078          bool &lgPrint);
00079 
00085 void save_line(
00086         FILE * ip,
00087   const char *chDo, 
00088   bool lgEmergent);
00089 
00093 void save_average( 
00094         long int ipPun);
00095 
00100 void save_colden(
00101   
00102   FILE * ioPUN );
00103 
00108 void Save_Line_RT(
00109         FILE * ip);
00110 
00115 void saveFITSfile( 
00116         FILE* io, 
00117         int option );
00118 
00122 void SaveHeat(FILE* io);
00123 
00127 void CoolSave(FILE * io, char chJob[]);
00128 
00133 void SaveGrid(FILE* pnunit, exit_type status);
00134 
00135 struct t_save {
00136 
00137         t_save()
00138         {
00139                 for( long i=0; i < LIMPUN; ++i )
00140                 {
00141                         nLineList[i] = -1;
00142                         lgFITS[i] = false;
00143                         FITStype[i] = -1;
00144                         nAverageList[i] = -1;
00145                 }
00146         }
00147 
00148         ~t_save()
00149         {
00150                 for( long i=0; i < LIMPUN; ++i )
00151                 {
00152                         SaveLineListFree(i);
00153                         SaveAverageFree(i);
00154                 }
00155         }
00156 
00157         void SaveLineListFree(long i)
00158         {
00159                 for( unsigned j=0; j < chLineListLabel[i].size(); ++j )
00160                         delete[] chLineListLabel[i][j];
00161                 chLineListLabel[i].clear();
00162                 wlLineList[i].clear();
00163         }
00164         void SaveAverageFree(long i)
00165         {
00166                 for( unsigned j=0; j < chAverageType[i].size(); ++j )
00167                         delete[] chAverageType[i][j];
00168                 chAverageType[i].clear();
00169                 for( unsigned j=0; j < chAverageSpeciesLabel[i].size(); ++j )
00170                         delete[] chAverageSpeciesLabel[i][j];
00171                 chAverageSpeciesLabel[i].clear();
00172         }
00173 
00176         long nLineList[LIMPUN];
00178         vector<char*> chLineListLabel[LIMPUN];
00180         vector<realnum> wlLineList[LIMPUN];
00182         bool lgLineListRatio[LIMPUN];
00183 
00186         long nAverageList[LIMPUN];
00188         vector<char*> chAverageType[LIMPUN];
00190         vector<char*> chAverageSpeciesLabel[LIMPUN];
00192         vector<int> nAverageIonList[LIMPUN];
00194         vector<int> nAverage2ndPar[LIMPUN];
00195 
00197         FILE *ipPnunit[LIMPUN]; 
00198 
00200         bool lgNoClobber[LIMPUN];
00201 
00203         bool lgPunConv_noclobber;
00204         bool lgDROn_noclobber;
00205         bool lgPunPoint_noclobber;
00206         bool lgioRecom_noclobber;
00207         bool lgQHSaveFile_noclobber;
00208         bool lgTraceConvergeBase_noclobber;
00209         bool lgSaveGrid_noclobber;
00210 
00213         bool lgRealSave[LIMPUN]; 
00214 
00216         bool lgEmergent[LIMPUN];
00217 
00219         bool lgCumulative[LIMPUN];
00220 
00222         long int nsave;
00223 
00225         char chSave[LIMPUN][5];
00226         diatomics *whichDiatomToPrint[LIMPUN];
00227 
00229         char chOpcTyp[LIMPUN][5];
00230 
00231         char chHeader[LIMPUN][MAX_HEADER_SIZE];
00232 
00233         const char *chNONSENSE;
00234 
00238         bool lgSaveToSeparateFiles[LIMPUN];
00239 
00242         bool lg_separate_iterations[LIMPUN];
00243 
00246         bool lgPunHeader[LIMPUN];
00247 
00251         bool lgPunContinuum;
00252 
00254         realnum punarg[LIMPUN][3];
00255 
00257         string optname[LIMPUN];
00258 
00261         bool lgSaveEveryZone[LIMPUN];
00262         long int nSaveEveryZone[LIMPUN];
00263 
00265         char chSaveArgs[LIMPUN][5];
00266 
00267         char chSaveSpecies[LIMPUN][CHARS_SPECIES];
00268 
00271         bool lgPunLstIter[LIMPUN];
00272 
00274         bool lgFITS[LIMPUN];
00275 
00277         int FITStype[LIMPUN];
00278 
00281         bool lgPunchFits;
00282 
00284         const char *chConPunEnr[LIMPUN];
00285 
00287         long int ipConPun;
00288 
00291         bool lgHashEndIter[LIMPUN];
00292 
00295         char chHashString[INPUT_LINE_LENGTH];
00296 
00298         bool lgFLUSH;
00299 
00302         string chGridPrefix;
00303 
00306         string chFilenamePrefix;
00307 
00310         string chRedirectPrefix;
00311 
00315         char chPunRltType[7];
00316 
00320         FILE* ipPoint;
00321         bool lgPunPoint;
00322 
00324         bool lgPunConv;
00325         FILE* ipPunConv;
00326 
00330         FILE * ipDRout;
00331         bool lgDROn, 
00332           lgDRPLst,
00333           lgDRHash;
00334 
00335         
00336         bool lgTraceConvergeBase,
00337                 lgTraceConvergeBaseHash;
00338         FILE * ipTraceConvergeBase;
00339 
00341         FILE* ioRecom;
00342         bool lgioRecom;
00343 
00346         long int LinEvery;
00347         bool lgLinEvery;
00348 
00350         long int ncSaveSkip;
00351 
00354         realnum WeakHeatCool;
00355 
00359         realnum Resolution;
00360         
00361         
00362         realnum ResolutionAbs;
00363 
00364         char chSpeciesDominantRates[LIMPUN][CHARS_SPECIES];
00365 
00366         
00367         Energy emisfreq;
00368         long ipEmisFreq;
00369 
00370 };
00371 
00372 extern t_save save;
00373 
00374 #endif