11# ifndef WIN32_LEAN_AND_MEAN
12# define WIN32_LEAN_AND_MEAN
18#pragma clang diagnostic ignored "-Wmismatched-tags"
37#define _USE_MATH_DEFINES
46#if defined(__sun) && defined(__SUNPRO_CC)
69#include <unordered_map>
73#if defined(_MSC_VER) && !defined(SYS_CONFIG)
74#define SYS_CONFIG "cloudyconfig_vs.h"
85#ifndef HAVE_AVX_INTRIN
89#ifndef HAVE_FMA_INTRIN
93#ifndef HAVE_AVX2_INTRIN
97#ifndef HAVE_AVX512F_INTRIN
102#include <immintrin.h>
133#define float PLEASE_USE_REALNUM_NOT_FLOAT
148inline realnum operator ""_r(
unsigned long long l )
158inline FILE *
sys_fopen(
const char *path,
const char *mode)
160 return fopen( path, mode );
162#define fopen PLEASE_USE_open_data_NOT_fopen
186#define EXIT_SUCCESS ES_SUCCESS
188#define EXIT_FAILURE ES_FAILURE
191#define lgBOUNDSCHECKVAL true
193#define lgBOUNDSCHECKVAL false
283extern long int nzone;
418double fudge(
long int ipnt);
427void fixit_base(
const char* func,
const char* file,
int line,
433 Fixit(
const char* func,
const char* file,
int line,
442 static Fixit fixit_s(__func__,__FILE__,__LINE__, (a)); \
455void MyAssert(
const char *file,
int line,
const char *comment);
478 const char*
file()
const throw()
493#define cdEXIT( FAIL ) throw cloudy_exit( __func__, __FILE__, __LINE__, FAIL )
496#define puts( STR ) Using_puts_before_cdEXIT_is_no_longer_needed
523int dbg_printf(
int debug,
const char *fmt, ...);
526int dprintf(FILE *fp,
const char *format, ...);
531 cpu.i().GenerateBacktrace(
NULL);
532 cpu.i().PrintBacktrace(
"DEBUG ",
false);
547#ifdef HAVE_LIBCPP_BUG
552inline istringstream&
operator>> ( istringstream& s,
double& x )
609 fprintf(
ioQQQ,
"DISASTER Assertion failure at %s:%ld\n%s\n",
612 const char*
file()
const throw()
648# define ASSERT(exp) ((void)0)
650# define ASSERT(exp) \
652 if (UNLIKELY(!(exp))) \
653 throw bad_assert(__FILE__,__LINE__,"Failed: " #exp); \
657#define MESSAGE_ASSERT(msg, exp) ASSERT( (msg) ? (exp) : false )
661 cpu.i().GenerateBacktrace(
NULL);
662 throw out_of_range( str );
667 cpu.i().GenerateBacktrace(
NULL);
668 throw domain_error( str );
672#pragma does_not_return(OUT_OF_RANGE)
726 Trace::Inst().enter(
p_name);
732 Trace::Inst().leave(
p_name);
741#define DEBUG_ENTRY( funcname ) debugtrace<t_debug> DEBUG_ENTRY( funcname )
743#define DEBUG_ENTRY( funcname ) ((void)0)
749 return static_cast<char>(
tolower(
static_cast<int>(c) ) );
753 return static_cast<unsigned char>(
tolower(
static_cast<int>(c) ) );
758 return static_cast<char>(
toupper(
static_cast<int>(c) ) );
762 return static_cast<unsigned char>(
toupper(
static_cast<int>(c) ) );
766inline char TorF(
bool l ) {
return l ?
'T' :
'F'; }
770inline bool is_odd(
int j ) {
return (j&1) == 1; }
771inline bool is_odd(
long j ) {
return (j&1L) == 1L; }
775inline long nint(
double x ) {
return static_cast<long>( (x < 0.) ? x-0.5 : x+0.5 ); }
779inline long min(
int a,
long b ) {
long c = a;
return ( (c < b) ? c : b ); }
780inline long min(
long a,
int b ) {
long c = b;
return ( (a < c) ? a : c ); }
781inline double min(
sys_float a,
double b ) {
double c = a;
return ( (c < b) ? c : b ); }
782inline double min(
double a,
sys_float b ) {
double c = b;
return ( (a < c) ? a : c ); }
787double powi(
double ,
long int );
791double powpq(
double x,
int p,
int q);
794#ifndef HAVE_POW_DOUBLE_INT
795inline double pow(
double x,
int i ) {
return powi( x,
long(i) ); }
798#ifndef HAVE_POW_DOUBLE_LONG
799inline double pow(
double x,
long i ) {
return powi( x, i ); }
802#ifndef HAVE_POW_FLOAT_INT
806#ifndef HAVE_POW_FLOAT_LONG
810#ifndef HAVE_POW_FLOAT_DOUBLE
811inline double pow(
sys_float x,
double y ) {
return pow(
double(x), y ); }
814#ifndef HAVE_POW_DOUBLE_FLOAT
815inline double pow(
double x,
sys_float y ) {
return pow( x,
double(y) ); }
820#define MIN2(a,b) min(a,b)
825#define MIN3(a,b,c) (min(min(a,b),c))
830#define MIN4(a,b,c,d) (min(min(a,b),min(c,d)))
834inline long max(
int a,
long b ) {
long c = a;
return ( (c > b) ? c : b ); }
835inline long max(
long a,
int b ) {
long c = b;
return ( (a > c) ? a : c ); }
836inline double max(
sys_float a,
double b ) {
double c = a;
return ( (c > b) ? c : b ); }
837inline double max(
double a,
sys_float b ) {
double c = b;
return ( (a > c) ? a : c ); }
841#define MAX2(a,b) max(a,b)
846#define MAX3(a,b,c) (max(max(a,b),c))
851#define MAX4(a,b,c,d) (max(max(a,b),max(c,d)))
857 memset(vec.data(), 0, vec.size()*
sizeof(T));
867 return ( y < T() ) ? -abs(x) : abs(x);
873inline int sign3( T x ) {
return ( x < T() ) ? -1 : ( ( x > T() ) ? 1 : 0 ); }
886 if( sx == 0 && sy == 0 )
895 (void)frexp(
max(x,y), &exp);
896 sys_float epsilon = ldexp(FLT_EPSILON,
max(0,FLT_MIN_EXP-exp));
909 if( sx == 0 && sy == 0 )
918 (void)frexp(
max(x,y), &exp);
919 double epsilon = ldexp(DBL_EPSILON,
max(0,DBL_MIN_EXP-exp));
920 return ( 1. -
min(x,y)/
max(x,y) < ((
double)n+0.1)*epsilon );
930 ASSERT( tol >= FLT_EPSILON*
max(abs(x),abs(y)) );
931 return ( abs( x-y ) <= tol );
941 ASSERT( tol >= DBL_EPSILON*
max(abs(x),abs(y)) );
942 return ( abs( x-y ) <= tol );
954 if( ((hi-x)/(hi-lo))*((x-lo)/(hi-lo)) < -((
sys_float)n+0.1f)*FLT_EPSILON )
958inline bool fp_bound(
double lo,
double x,
double hi,
int n=3 )
966 if( ((hi-x)/(hi-lo))*((x-lo)/(hi-lo)) < -((
double)n+0.1)*DBL_EPSILON )
978 if( ((hi-x)/(hi-lo))*((x-lo)/(hi-lo)) < -tol )
990 if( ((hi-x)/(hi-lo))*((x-lo)/(hi-lo)) < -tol )
1007inline T
pow3(T a) {
return a*a*a; }
1014inline T
pow4(T a) { T b = a*a;
return b*b; }
1038 if( sx == 0 && sy == 0 )
1040 if(
isnan(res_0by0) )
1048 return ( sx < 0 ) ? -FLT_MAX : FLT_MAX;
1056 if( abs(x) < ay*FLT_MAX )
1059 return ( sx*sy < 0 ) ? -FLT_MAX : FLT_MAX;
1065 return safe_div( x, y, numeric_limits<sys_float>::quiet_NaN() );
1071inline double safe_div(
double x,
double y,
double res_0by0)
1079 if( sx == 0 && sy == 0 )
1081 if(
isnan(res_0by0) )
1089 return ( sx < 0 ) ? -DBL_MAX : DBL_MAX;
1097 if( abs(x) < ay*DBL_MAX )
1100 return ( sx*sy < 0 ) ? -DBL_MAX : DBL_MAX;
1106 return safe_div( x, y, numeric_limits<double>::quiet_NaN() );
1113 memset( p, -1, size );
1118 set_NaN( p, (
long)(size/
sizeof(
double)) );
1132template<
class T>
inline T*
get_ptr(valarray<T> &v)
1136template<
class T,
class U>
inline T*
get_ptr(vector<T,U> &v)
1140template<
class T>
inline const T*
get_ptr(
const valarray<T> &v)
1142 return const_cast<const T*
>(&
const_cast<valarray<T>&
>(v)[0]);
1144template<
class T,
class U>
inline const T*
get_ptr(
const vector<T,U> &v)
1146 return const_cast<const T*
>(&
const_cast<vector<T,U>&
>(v)[0]);
1154double csphot(
long int inu,
long int ithr,
long int iofset);
1163void cap4(
char *chCAP ,
const char *chLab);
1167void uncaps(
char *chCard);
1168void uncaps(
string& chCard);
1172void caps(
char *chCard);
1173void caps(
string& chCard);
1191long nMatch(
const char *chKey,
1192 const char *chCard);
1195inline const char *
strstr_s(
const char *haystack,
const char *needle)
1197 return const_cast<const char *
>(strstr(haystack, needle));
1200inline char *
strstr_s(
char *haystack,
const char *needle)
1202 return const_cast<char *
>(strstr(haystack, needle));
1207 return const_cast<const char *
>(strchr(s, c));
1212 return const_cast<char *
>(strchr(s, c));
1217long int ipow(
long,
long );
1221size_t sncatf(
char* buf,
size_t bufSize,
const char* fmt, ... );
1223size_t sncatf( ostringstream& buf,
const char* fmt, ... );
1242char *
PrintEfmt(
const char *fmt,
double val );
1244#define PrintEfmt( F, V ) F, V
1254double sexp(
double x);
1260double dsexp(
double x);
1271 double y = trunc(x/3.);
1274 x *= 2.302585092994045684;
1275 x -= 7.90550887243868070612e-3*z;
1276 return ldexp(exp(x),10*
int(y));
1293 x -= 7.9055088724e-3f*z;
1294 return ldexpf(expf(x),10*
int(y));
1336 void prt_wl(FILE *io,
const char* format=
NULL)
const;
1368double plankf(
long int ip);
1382void spsort(
realnum x[],
long int n,
long int iperm[],
int kflag,
int *ier);
1393# pragma warning( disable : 4996 )
1395# pragma warning( disable : 4056 )
1397# pragma warning( disable : 4514 )
1400# pragma warning( disable : 4512 )
1402#ifdef __INTEL_COMPILER
1403# pragma warning( disable : 1572 )
long int nzone
Definition cddefines.cpp:15
FILE * ioPrnErr
Definition cddefines.cpp:11
bool lgTestCodeCalled
Definition cddefines.cpp:12
FILE * ioQQQ
Definition cddefines.cpp:9
bool lgTestCodeEnabled
Definition cddefines.cpp:13
FILE * ioStdin
Definition cddefines.cpp:10
bool lgPrnErr
Definition cddefines.cpp:14
long int iteration
Definition cddefines.cpp:17
double fnzone
Definition cddefines.cpp:16
float sys_float
Definition cddefines.h:131
double csphot(long int inu, long int ithr, long int iofset)
Definition service.cpp:1771
double plankf(long int ip)
Definition service.cpp:1789
#define fopen
Definition cddefines.h:162
const int FILENAME_PATH_LENGTH_2
Definition cddefines.h:319
const int FILENAME_PATH_LENGTH
Definition cddefines.h:316
#define NULL
Definition cddefines.h:116
#define isnan
Definition cddefines.h:679
#define ASSERT(exp)
Definition cddefines.h:650
sys_float sexp(sys_float x)
Definition service.cpp:1206
bool is_odd(int j)
Definition cddefines.h:770
const int ipSILICON
Definition cddefines.h:385
#define PrintEfmt(F, V)
Definition cddefines.h:1244
const int ipRecEsc
Definition cddefines.h:352
const int ipBERYLLIUM
Definition cddefines.h:375
const double MAX_DENSITY
Definition cddefines.h:342
const double DSEXP_LIMIT
Definition cddefines.h:1250
const int ipCHROMIUM
Definition cddefines.h:395
const double SEXP_LIMIT
Definition cddefines.h:1248
long nMatch(const char *chKey, const char *chCard)
Definition service.cpp:731
char tolower(char c)
Definition cddefines.h:747
const int ipNITROGEN
Definition cddefines.h:378
const int ipZINC
Definition cddefines.h:401
wl_type
Definition cddefines.h:1308
@ WL_VACUUM
Definition cddefines.h:1308
@ WL_AIR
Definition cddefines.h:1308
@ WL_NATIVE
Definition cddefines.h:1308
const int NCHLAB
Definition cddefines.h:327
const int ipIRON
Definition cddefines.h:397
exit_type
Definition cddefines.h:164
@ ES_DOMAIN_ERROR
Definition cddefines.h:173
@ ES_FAILURE
Definition cddefines.h:166
@ ES_BOTCHES
Definition cddefines.h:168
@ ES_SEGFAULT
Definition cddefines.h:176
@ ES_TOP
Definition cddefines.h:180
@ ES_WARNINGS
Definition cddefines.h:167
@ ES_BUS_ERROR
Definition cddefines.h:177
@ ES_BAD_ASSERT
Definition cddefines.h:170
@ ES_UNKNOWN_SIGNAL
Definition cddefines.h:178
@ ES_SUCCESS
Definition cddefines.h:165
@ ES_UNKNOWN_EXCEPTION
Definition cddefines.h:179
@ ES_OUT_OF_RANGE
Definition cddefines.h:172
@ ES_BAD_ALLOC
Definition cddefines.h:171
@ ES_ILLEGAL_INSTRUCTION
Definition cddefines.h:174
@ ES_FP_EXCEPTION
Definition cddefines.h:175
@ ES_CLOUDY_ABORT
Definition cddefines.h:169
void cdBacktrace()
Definition cddefines.h:529
const int ipCARBON
Definition cddefines.h:377
const int ipSCANDIUM
Definition cddefines.h:392
const int ipALUMINIUM
Definition cddefines.h:384
sys_float exp10f(sys_float x)
Definition cddefines.h:1281
const int ipOXYGEN
Definition cddefines.h:379
const int NHYDRO_MAX_LEVEL
Definition cddefines.h:339
@ CHARS_SPECIES
Definition cddefines.h:347
istringstream & operator>>(istringstream &s, double &x)
Definition cddefines.h:552
void PrintE93(FILE *, double)
Definition service.cpp:1129
void broken(void)
Definition service.cpp:1274
FILE * ioMAP
Definition cdinit.cpp:9
const double DEPTH_OFFSET
Definition cddefines.h:345
int sign3(T x)
Definition cddefines.h:873
NORETURN void BadRead(void)
Definition service.cpp:1193
void TestCode(void)
Definition service.cpp:1264
@ CHARS_ISOTOPE_SYM
Definition cddefines.h:348
const int ipCOPPER
Definition cddefines.h:400
void CodeReview(void)
Definition service.cpp:1300
void PrintE82(FILE *, double)
Definition service.cpp:1030
double fudge(long int ipnt)
Definition service.cpp:761
const int LIMELM
Definition cddefines.h:331
const int ipPHOSPHORUS
Definition cddefines.h:386
const int INPUT_LINE_LENGTH
Definition cddefines.h:324
T sign(T x, T y)
Definition cddefines.h:865
const int ipLITHIUM
Definition cddefines.h:374
sys_float safe_div(sys_float x, sys_float y, sys_float res_0by0)
Definition cddefines.h:1030
int dbg_printf(int debug, const char *fmt,...)
Definition service.cpp:1360
int dprintf(FILE *fp, const char *format,...)
Definition service.cpp:1309
const double ZeroNum
Definition cdinit.cpp:13
const int ipMAGNESIUM
Definition cddefines.h:383
const void * ZeroPtr
Definition cdinit.cpp:15
const int ipVANADIUM
Definition cddefines.h:394
t_wavl t_vac(realnum w)
Definition cddefines.h:1361
const int ipBORON
Definition cddefines.h:376
const int ipSODIUM
Definition cddefines.h:382
NORETURN void OUT_OF_RANGE(const char *str)
Definition cddefines.h:659
void cap4(char *chCAP, const char *chLab)
Definition service.cpp:260
void MyAssert(const char *file, int line, const char *comment)
Definition service.cpp:175
const int ipTITANIUM
Definition cddefines.h:393
char toupper(char c)
Definition cddefines.h:756
char TorF(bool l)
Definition cddefines.h:766
const int ipCOBALT
Definition cddefines.h:398
void vzero(vector< T > &vec)
Definition cddefines.h:855
void PrintE71(FILE *, double)
Definition service.cpp:1079
double AnuUnit(realnum energy)
Definition service.cpp:192
T TotalInsanityAsStub()
Definition cddefines.h:508
NORETURN void DOMAIN_ERROR(const string &str)
Definition cddefines.h:665
double FFmtRead(const char *chCard, long int *ipnt, long int last, bool *lgEOL)
Definition service.cpp:396
bool fp_bound_tol(sys_float lo, sys_float x, sys_float hi, sys_float tol)
Definition cddefines.h:970
const int NISO
Definition cddefines.h:334
FILE * ioQQQ
Definition cddefines.cpp:9
const char * strstr_s(const char *haystack, const char *needle)
Definition cddefines.h:1195
const int ipHELIUM
Definition cddefines.h:373
const int ipRecNetEsc
Definition cddefines.h:354
float realnum
Definition cddefines.h:128
const int ipFLUORINE
Definition cddefines.h:380
long int ipow(long, long)
Definition service.cpp:864
const int ipNICKEL
Definition cddefines.h:399
int fprintf(const Output &stream, const char *format,...)
Definition service.cpp:1328
const char * strchr_s(const char *s, int c)
Definition cddefines.h:1205
bool fp_bound(sys_float lo, sys_float x, sys_float hi, int n=3)
Definition cddefines.h:946
T * get_ptr(T *v)
Definition cddefines.h:1128
const int ipSULPHUR
Definition cddefines.h:387
long nint(double x)
Definition cddefines.h:775
const int ipCALCIUM
Definition cddefines.h:391
long max(int a, long b)
Definition cddefines.h:834
bool fp_equal(sys_float x, sys_float y, int n=3)
Definition cddefines.h:877
void caps(char *chCard)
Definition service.cpp:302
double powpq(double x, int p, int q)
Definition service.cpp:836
const int ipCRDW
Definition cddefines.h:367
const int ipPOTASSIUM
Definition cddefines.h:390
void spsort(realnum x[], long int n, long int iperm[], int kflag, int *ier)
Definition service.cpp:1429
NORETURN void TotalInsanity(void)
Definition service.cpp:1177
t_wavl t_air(realnum w)
Definition cddefines.h:1362
void fixit_base(const char *func, const char *file, int line, const char *reason)
Definition service.cpp:1283
sys_float SDIV(sys_float x)
Definition cddefines.h:1021
const int ipHYDROGEN
Definition cddefines.h:372
FILE * sys_fopen(const char *path, const char *mode)
Definition cddefines.h:158
double dsexp(double x)
Definition service.cpp:1245
const int ipRecRad
Definition cddefines.h:356
T pow4(T a)
Definition cddefines.h:1014
const int ipNEON
Definition cddefines.h:381
size_t sncatf(char *buf, size_t bufSize, const char *fmt,...)
Definition service.cpp:922
const int ipCRD
Definition cddefines.h:365
const int ipCHLORINE
Definition cddefines.h:388
long min(int a, long b)
Definition cddefines.h:779
bool read_whole_line(string &chLine, FILE *ioIN)
Definition service.cpp:71
const int ipKRYPTON
Definition cddefines.h:402
void cdPrepareExit(exit_type)
Definition cdinit.cpp:131
double exp10(double x)
Definition cddefines.h:1263
const int ipMANGANESE
Definition cddefines.h:396
void uncaps(char *chCard)
Definition service.cpp:280
void invalidate_array(T *p, size_t size)
Definition cddefines.h:1110
const int ipARGON
Definition cddefines.h:389
const int ipLY_A
Definition cddefines.h:369
bool fp_equal_tol(sys_float x, sys_float y, sys_float tol)
Definition cddefines.h:923
void ShowMe(void)
Definition service.cpp:200
double powi(double, long int)
Definition service.cpp:800
istream & SafeGetline(istream &is, string &t)
Definition service.cpp:1852
const int ipPRD
Definition cddefines.h:363
Fixit(const char *func, const char *file, int line, const char *reason)
Definition cddefines.h:433
Definition cddefines.h:248
Output(FILE *fp)
Definition cddefines.h:252
FILE * m_fp
Definition cddefines.h:250
FILE * fptr() const
Definition cddefines.h:253
Definition cddefines.h:227
static T & Inst()
Definition cddefines.h:229
void print(void) const
Definition cddefines.h:607
const char * comment() const
Definition cddefines.h:620
bad_assert(const bad_assert &)=default
const char * file() const
Definition cddefines.h:612
long p_line
Definition cddefines.h:600
const char * p_file
Definition cddefines.h:599
bad_assert & operator=(const bad_assert &)=default
const char * p_comment
Definition cddefines.h:601
long line() const
Definition cddefines.h:616
virtual ~bad_assert()
Definition cddefines.h:606
bad_assert(const char *file, long line, const char *comment)
Definition cddefines.cpp:24
int sig() const
Definition cddefines.h:591
virtual ~bad_signal()
Definition cddefines.h:590
bad_signal(const bad_signal &)=default
bad_signal(int sig, void *ptr)
Definition cddefines.cpp:19
bad_signal & operator=(const bad_signal &)=default
int p_sig
Definition cddefines.h:585
cloudy_abort & operator=(const cloudy_abort &)=default
const char * p_comment
Definition cddefines.h:628
const char * comment() const
Definition cddefines.h:634
virtual ~cloudy_abort()
Definition cddefines.h:633
cloudy_abort(const cloudy_abort &)=default
cloudy_abort(const char *comment)
Definition cddefines.cpp:30
const char * file() const
Definition cddefines.h:478
long line() const
Definition cddefines.h:482
const char * p_file
Definition cddefines.h:463
long p_line
Definition cddefines.h:464
const char * p_routine
Definition cddefines.h:462
exit_type p_exit
Definition cddefines.h:465
exit_type exit_status() const
Definition cddefines.h:486
const char * routine() const
Definition cddefines.h:474
cloudy_exit(const char *routine, const char *file, long line, exit_type exit_code)
Definition cddefines.h:467
const char * p_name
Definition cddefines.h:721
debugtrace(const debugtrace &)=default
debugtrace & operator=(const debugtrace &)=default
~debugtrace()
Definition cddefines.h:730
const char * name() const
Definition cddefines.h:734
debugtrace(const char *funcname)
Definition cddefines.h:723
void leave(const char *name)
Definition cddefines.h:699
FILE * p_fp
Definition cddefines.h:686
int p_callLevel
Definition cddefines.h:687
t_debug()
Definition cddefines.h:689
void enter(const char *name)
Definition cddefines.h:694
void leave(const char *) const
Definition cddefines.h:715
void enter(const char *) const
Definition cddefines.h:714
t_nodebug()
Definition cddefines.h:712
Definition cddefines.h:1312
t_wavl()
Definition cddefines.h:1326
realnum wavlVac() const
Definition cddefines.h:1331
string sprt_wl(const char *format=NULL) const
Definition cddefines.cpp:90
realnum p_wavl
Definition cddefines.h:1314
t_wavl(realnum w, wl_type t)
Definition cddefines.h:1327
wl_type p_type
Definition cddefines.h:1316
t_wavl operator-() const
Definition cddefines.h:1329
void prt_wl(FILE *io, const char *format=NULL) const
Definition cddefines.cpp:157
realnum p_convertWvl() const
Definition cddefines.cpp:35
double p_RefIndex(double EnergyWN) const
Definition cddefines.cpp:67
realnum p_wlAirVac() const
Definition cddefines.cpp:44
void set_NaN(sys_float &x)
Definition cpu.cpp:960
static t_cpu cpu
Definition cpu.h:436
const realnum BIGFLOAT
Definition cpu.h:233
const double BIGDOUBLE
Definition cpu.h:238
#define NORETURN
Definition cpu.h:475
const realnum SMALLFLOAT
Definition cpu.h:235
double energy(const genericState &gs)
Definition generic_state.cpp:51
#define pow2(a)
Definition physconst_template.h:28
#define pow3(a)
Definition physconst_template.h:29
void FPRead(istringstream &iss, const string &s, double &value)
Definition service.cpp:551