IPhreeqc
IPhreeqc.hpp
Go to the documentation of this file.
1 
5 #ifndef INC_IPHREEQC_HPP
6 #define INC_IPHREEQC_HPP
7 
8 #include <exception>
9 #include <list>
10 #include <vector>
11 #include <map>
12 #include <cstdarg>
13 #include "IPhreeqcCallbacks.h" /* PFN_PRERUN_CALLBACK, PFN_POSTRUN_CALLBACK, PFN_CATCH_CALLBACK */
14 #include "Var.h" /* VRESULT */
15 #include "PHRQ_io.h"
16 
17 #include "PHRQ_exports.h"
18 
19 class Phreeqc;
20 class IErrorReporter;
21 class CSelectedOutput;
22 class SelectedOutput;
23 
30 class IPQ_DLL_EXPORT IPhreeqcStop : public std::exception
31 {
32 public:
33  virtual const char *what() const throw () {return "Failure in IPhreeqc\n";}
34 };
35 
44 class IPQ_DLL_EXPORT IPhreeqc : public PHRQ_io
45 {
46 public:
53  IPhreeqc(void);
54 
58  virtual ~IPhreeqc(void);
59 
60 public:
61 
69  VRESULT AccumulateLine(const char *line);
70 
78  size_t AddError(const char* error_msg);
79 
87  size_t AddWarning(const char* warning_msg);
88 
93  void ClearAccumulatedLines(void);
94 
101  const std::string& GetAccumulatedLines(void);
102 
110  const char* GetComponent(int n);
111 
117  size_t GetComponentCount(void);
118 
124  int GetCurrentSelectedOutputUserNumber(void)const;
125 
132  const char* GetDumpFileName(void)const;
133 
140  bool GetDumpFileOn(void)const;
141 
149  const char* GetDumpString(void)const;
150 
159  const char* GetDumpStringLine(int n);
160 
167  int GetDumpStringLineCount(void)const;
168 
175  bool GetDumpStringOn(void)const;
176 
182  const char* GetErrorFileName(void)const;
183 
190  bool GetErrorFileOn(void)const;
191 
198  bool GetErrorOn(void)const;
199 
205  const char* GetErrorString(void);
206 
213  const char* GetErrorStringLine(int n);
214 
220  int GetErrorStringLineCount(void)const;
221 
228  bool GetErrorStringOn(void)const;
229 
235  int GetId(void)const;
236 
242  const char* GetLogFileName(void)const;
243 
252  bool GetLogFileOn(void)const;
253 
261  const char* GetLogString(void)const;
262 
271  const char* GetLogStringLine(int n)const;
272 
279  int GetLogStringLineCount(void)const;
280 
287  bool GetLogStringOn(void)const;
288 
295  int GetNthSelectedOutputUserNumber(int n)const;
296 
302  const char* GetOutputFileName(void)const;
303 
310  bool GetOutputFileOn(void)const;
311 
319  const char* GetOutputString(void)const;
320 
329  const char* GetOutputStringLine(int n)const;
330 
337  int GetOutputStringLineCount(void)const;
338 
345  bool GetOutputStringOn(void)const;
346 
352  int GetSelectedOutputColumnCount(void)const;
353 
359  int GetSelectedOutputCount(void)const;
360 
367  const char* GetSelectedOutputFileName(void)const;
368 
375  bool GetSelectedOutputFileOn(void)const;
376 
382  int GetSelectedOutputRowCount(void)const;
383 
391  const char* GetSelectedOutputString(void)const;
392 
401  const char* GetSelectedOutputStringLine(int n);
402 
409  int GetSelectedOutputStringLineCount(void)const;
410 
417  bool GetSelectedOutputStringOn(void)const;
418 
571  VRESULT GetSelectedOutputValue(int row, int col, VAR* pVAR);
572 
592  VRESULT GetSelectedOutputValue2(int row, int col, int *vtype, double* dvalue, char* svalue, unsigned int svalue_length);
593 
598  static const char* GetVersionString(void);
599 
605  const char* GetWarningString(void);
606 
613  const char* GetWarningStringLine(int n);
614 
620  int GetWarningStringLineCount(void)const;
621 
627  std::list< std::string > ListComponents(void);
628 
639  int LoadDatabase(const char* filename);
640 
649  int LoadDatabaseString(const char* input);
650 
655  void OutputAccumulatedLines(void);
656 
662  void OutputErrorString(void);
663 
668  void OutputWarningString(void);
669 
679  int RunAccumulated(void);
680 
689  int RunFile(const char* filename);
690 
699  int RunString(const char* input);
700 
710  void SetBasicCallback(double (*fcn)(double x1, double x2, const char *str, void *cookie), void * cookie1);
711 
720 #ifdef IPHREEQC_NO_FORTRAN_MODULE
721  void SetBasicFortranCallback(double (*fcn)(double *x1, double *x2, const char *str, size_t l));
722 #else
723  void SetBasicFortranCallback(double (*fcn)(double *x1, double *x2, const char *str, int l));
724 #endif
725 
737 
744  void SetDumpFileName(const char *filename);
745 
754  void SetDumpFileOn(bool bValue);
755 
763  void SetDumpStringOn(bool bValue);
764 
770  void SetErrorFileName(const char *filename);
771 
779  void SetErrorFileOn(bool bValue);
780 
788  void SetErrorOn(bool bValue);
789 
796  void SetErrorStringOn(bool bValue);
797 
803  void SetLogFileName(const char *filename);
804 
813  void SetLogFileOn(bool bValue);
814 
821  void SetLogStringOn(bool bValue);
822 
828  void SetOutputFileName(const char *filename);
829 
837  void SetOutputFileOn(bool bValue);
838 
845  void SetOutputStringOn(bool bValue);
846 
853  void SetSelectedOutputFileName(const char *filename);
854 
862  void SetSelectedOutputFileOn(bool bValue);
863 
872  void SetSelectedOutputStringOn(bool bValue);
873 
874 public:
875  // overrides
876  virtual void error_msg(const char *str, bool stop=false);
877  virtual void log_msg(const char * str);
878  virtual void output_msg(const char *str);
879  virtual void punch_msg(const char *str);
880  virtual void screen_msg(const char *str);
881  virtual void warning_msg(const char *str);
882 
883  virtual void fpunchf(const char *name, const char *format, double d);
884  virtual void fpunchf(const char *name, const char *format, char * d);
885  virtual void fpunchf(const char *name, const char *format, int d);
886  virtual void fpunchf_end_row(const char *format);
887 
888  virtual bool output_open(const char *file_name, std::ios_base::openmode mode = std::ios_base::out);
889  virtual bool punch_open(const char *file_name, std::ios_base::openmode mode = std::ios_base::out, int n_user = 1);
890 
891 protected:
892  int EndRow(void);
893  void AddSelectedOutput(const char* name, const char* format, va_list argptr);
894  void UnLoadDatabase(void);
895 
896  void check_database(const char* sz_routine);
897  int close_input_files(void);
898  int close_output_files(void);
899  void open_output_files(const char* sz_routine);
900 
901  void do_run(const char* sz_routine, std::istream* pis, PFN_PRERUN_CALLBACK pfn_pre, PFN_POSTRUN_CALLBACK pfn_post, void *cookie);
902 
903  void update_errors(void);
904 
905  int load_db(const char* filename);
906  int load_db_str(const char* filename);
907  int test_db(void);
908 
909  bool get_sel_out_file_on(int n)const;
910  std::string sel_file_name(int n_user);
911 
912  std::string create_file_name(const char *prefix, const char *suffix);
913 
914  bool get_sel_out_string_on(int n)const;
915 
916 protected:
917 #if defined(_MSC_VER)
918 /* disable warning C4251: 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2' */
919 #pragma warning(disable:4251)
920 #endif
921 
922  bool DatabaseLoaded;
923  bool ClearAccumulated;
924  bool UpdateComponents;
925  std::map< int, bool > SelectedOutputFileOnMap;
926 
927  bool OutputFileOn;
928 
929  bool LogFileOn;
930  bool ErrorFileOn;
931  bool DumpOn;
932 
933  bool DumpStringOn;
934 
935  bool OutputStringOn;
936  std::string OutputString;
937  std::vector< std::string > OutputLines;
938 
939  bool LogStringOn;
940  std::string LogString;
941  std::vector< std::string > LogLines;
942 
943  bool ErrorStringOn;
944  IErrorReporter *ErrorReporter;
945  std::string ErrorString;
946  std::vector< std::string > ErrorLines;
947 
948  bool WarningStringOn;
949  IErrorReporter *WarningReporter;
950  std::string WarningString;
951  std::vector< std::string > WarningLines;
952 
953  int CurrentSelectedOutputUserNumber;
954  std::map< int, CSelectedOutput* > SelectedOutputMap;
955  std::string StringInput;
956 
957  std::string DumpString;
958  std::vector< std::string > DumpLines;
959 
960  std::list< std::string > Components;
961  std::list< std::string > EquilibriumPhasesList;
962  const std::list<std::string> &GetEquilibriumPhasesList() { return this->EquilibriumPhasesList; };
963  std::list< std::string > GasComponentsList;
964  const std::list<std::string> &GetGasComponentsList() { return this->GasComponentsList; };
965  std::list< std::string > KineticReactionsList;
966  const std::list<std::string> &GetKineticReactionsList() { return this->KineticReactionsList; };
967  std::list< std::string > SolidSolutionComponentsList;
968  const std::list<std::string> &GetSolidSolutionComponentsList() { return this->SolidSolutionComponentsList; };
969  std::list< std::string > SolidSolutionNamesList;
970  const std::list<std::string> &GetSolidSolutionNamesList() { return this->SolidSolutionNamesList; };
971  //std::list< std::string > SurfaceSpeciesList;
972  //const std::list<std::string> &GetSurfaceSpeciesList() { return this->SurfaceSpeciesList; };
973  std::list< std::string > SurfaceTypeList;
974  const std::list<std::string> &GetSurfaceTypeList() { return this->SurfaceTypeList; };
975  std::list< std::string > SurfaceNamesList;
976  const std::list<std::string> &GetSurfaceNamesList() { return this->SurfaceNamesList; };
977  //std::list< std::string > ExchangeSpeciesList;
978  //const std::list<std::string> &GetExchangeSpeciesList() { return this->ExchangeSpeciesList; };
979  std::list< std::string > ExchangeNamesList;
980  const std::list<std::string> &GetExchangeNamesList() { return this->ExchangeNamesList; };
981 
982  std::map< int, std::string > SelectedOutputFileNameMap;
983 
984  std::string OutputFileName;
985  std::string ErrorFileName;
986  std::string LogFileName;
987  std::string DumpFileName;
988 
989  std::map< int, bool > SelectedOutputStringOn;
990  std::map< int, std::string > SelectedOutputStringMap;
991  std::map< int, std::vector< std::string > > SelectedOutputLinesMap;
992 
993 protected:
994  Phreeqc* PhreeqcPtr;
995  FILE *input_file;
996  FILE *database_file;
997 
998  friend class IPhreeqcLib;
999  static std::map<size_t, IPhreeqc*> Instances;
1000  static size_t InstancesIndex;
1001  size_t Index;
1002 
1003  static std::string Version;
1004 
1005 #if defined(_MSC_VER)
1006 /* reset warning C4251 */
1007 #pragma warning(default:4251)
1008 #endif
1009 
1010 #if defined(CPPUNIT)
1011  friend class TestIPhreeqc;
1012  friend class TestSelectedOutput;
1013 #endif
1014 
1015 private:
1019  IPhreeqc(const IPhreeqc&);
1020 
1024  IPhreeqc& operator=(const IPhreeqc&);
1025 };
1026 
1027 #endif // INC_IPHREEQC_HPP
IPQ_DLL_EXPORT int GetDumpStringOn(int id)
IPQ_DLL_EXPORT int GetWarningStringLineCount(int id)
IPQ_DLL_EXPORT IPQ_RESULT SetDumpFileName(int id, const char *filename)
IPQ_DLL_EXPORT IPQ_RESULT SetCurrentSelectedOutputUserNumber(int id, int n)
IPQ_DLL_EXPORT const char * GetLogFileName(int id)
IPQ_DLL_EXPORT const char * GetSelectedOutputFileName(int id)
IPQ_DLL_EXPORT int RunString(int id, const char *input)
IPQ_DLL_EXPORT IPQ_RESULT SetLogFileOn(int id, int log_on)
IPQ_DLL_EXPORT const char * GetComponent(int id, int n)
IPQ_DLL_EXPORT int GetLogStringOn(int id)
IPQ_DLL_EXPORT IPQ_RESULT SetSelectedOutputFileOn(int id, int sel_on)
IPQ_DLL_EXPORT IPQ_RESULT SetLogFileName(int id, const char *filename)
IPQ_DLL_EXPORT IPQ_RESULT SetErrorOn(int id, int error_on)
IPQ_DLL_EXPORT IPQ_RESULT GetSelectedOutputValue2(int id, int row, int col, int *vtype, double *dvalue, char *svalue, unsigned int svalue_length)
IPQ_DLL_EXPORT int GetSelectedOutputStringOn(int id)
IPQ_DLL_EXPORT const char * GetErrorString(int id)
IPQ_DLL_EXPORT const char * GetErrorFileName(int id)
IPQ_DLL_EXPORT IPQ_RESULT SetLogStringOn(int id, int log_string_on)
IPQ_DLL_EXPORT const char * GetOutputString(int id)
IPQ_DLL_EXPORT const char * GetLogStringLine(int id, int n)
IPQ_DLL_EXPORT int AddError(int id, const char *error_msg)
IPQ_DLL_EXPORT IPQ_RESULT SetSelectedOutputFileName(int id, const char *filename)
IPQ_DLL_EXPORT int GetCurrentSelectedOutputUserNumber(int id)
IPQ_DLL_EXPORT IPQ_RESULT SetDumpFileOn(int id, int dump_on)
IPQ_DLL_EXPORT IPQ_RESULT SetOutputFileName(int id, const char *filename)
IPQ_DLL_EXPORT IPQ_RESULT GetSelectedOutputValue(int id, int row, int col, VAR *pVAR)
IPQ_DLL_EXPORT const char * GetSelectedOutputStringLine(int id, int n)
IPQ_DLL_EXPORT int GetNthSelectedOutputUserNumber(int id, int n)
IPQ_DLL_EXPORT int GetSelectedOutputCount(int id)
IPQ_DLL_EXPORT int GetSelectedOutputFileOn(int id)
IPQ_DLL_EXPORT int GetOutputFileOn(int id)
IPQ_DLL_EXPORT IPQ_RESULT SetErrorFileOn(int id, int error_on)
IPQ_DLL_EXPORT int GetOutputStringOn(int id)
IPQ_DLL_EXPORT const char * GetOutputFileName(int id)
IPQ_DLL_EXPORT IPQ_RESULT AccumulateLine(int id, const char *line)
IPQ_DLL_EXPORT const char * GetDumpFileName(int id)
IPQ_DLL_EXPORT const char * GetDumpString(int id)
IPQ_DLL_EXPORT IPQ_RESULT SetSelectedOutputStringOn(int id, int sel_string_on)
IPQ_DLL_EXPORT int GetErrorFileOn(int id)
IPQ_DLL_EXPORT const char * GetOutputStringLine(int id, int n)
IPQ_DLL_EXPORT int GetSelectedOutputStringLineCount(int id)
IPQ_DLL_EXPORT int GetSelectedOutputColumnCount(int id)
IPQ_DLL_EXPORT IPQ_RESULT SetBasicCallback(int id, double(*fcn)(double x1, double x2, const char *str, void *cookie), void *cookie1)
IPQ_DLL_EXPORT const char * GetWarningStringLine(int id, int n)
IPQ_DLL_EXPORT void OutputWarningString(int id)
IPQ_DLL_EXPORT IPQ_RESULT ClearAccumulatedLines(int id)
IPQ_DLL_EXPORT IPQ_RESULT SetOutputFileOn(int id, int output_on)
IPQ_DLL_EXPORT int RunFile(int id, const char *filename)
IPhreeqc VARIANT Documentation
IPQ_DLL_EXPORT int GetComponentCount(int id)
IPQ_DLL_EXPORT const char * GetLogString(int id)
IPQ_DLL_EXPORT void OutputErrorString(int id)
IPQ_DLL_EXPORT int GetLogFileOn(int id)
IPQ_DLL_EXPORT int RunAccumulated(int id)
IPQ_DLL_EXPORT const char * GetSelectedOutputString(int id)
IPQ_DLL_EXPORT int GetErrorStringOn(int id)
IPQ_DLL_EXPORT int GetDumpFileOn(int id)
IPQ_DLL_EXPORT int GetSelectedOutputRowCount(int id)
Datatype used to store SELECTED_OUTPUT values.
Definition: Var.h:40
IPQ_DLL_EXPORT const char * GetErrorStringLine(int id, int n)
IPQ_DLL_EXPORT void OutputAccumulatedLines(int id)
IPQ_DLL_EXPORT IPQ_RESULT SetBasicFortranCallback(int id, double(*fcn)(double *x1, double *x2, const char *str, int l))
IPQ_DLL_EXPORT int LoadDatabase(int id, const char *filename)
IPQ_DLL_EXPORT IPQ_RESULT SetErrorStringOn(int id, int error_string_on)
IPQ_DLL_EXPORT int AddWarning(int id, const char *warn_msg)
IPQ_DLL_EXPORT IPQ_RESULT SetDumpStringOn(int id, int dump_string_on)
IPQ_DLL_EXPORT IPQ_RESULT SetOutputStringOn(int id, int output_string_on)
IPQ_DLL_EXPORT const char * GetWarningString(int id)
IPQ_DLL_EXPORT int GetErrorOn(int id)
IPQ_DLL_EXPORT int GetDumpStringLineCount(int id)
IPQ_DLL_EXPORT int LoadDatabaseString(int id, const char *input)
VRESULT
Enumeration used to return error codes.
Definition: Var.h:29
IPQ_DLL_EXPORT const char * GetVersionString(void)
IPQ_DLL_EXPORT int GetLogStringLineCount(int id)
IPQ_DLL_EXPORT int GetErrorStringLineCount(int id)
This class is derived from std::exception and is thrown when an unrecoverable error has occured...
Definition: IPhreeqc.hpp:30
IPQ_DLL_EXPORT int GetOutputStringLineCount(int id)
IPQ_DLL_EXPORT IPQ_RESULT SetErrorFileName(int id, const char *filename)
IPQ_DLL_EXPORT const char * GetDumpStringLine(int id, int n)
Provides an interface to PHREEQC (Version 3)–A Computer Program for Speciation, Batch-Reaction, One-Dimensional Transport, and Inverse Geochemical Calculations.
Definition: IPhreeqc.hpp:44