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