1 /* Steven Andrews, started 10/22/2001.
2  This is an application programming interface for the Smoldyn program.
3  See documentation called SmoldynManual.pdf and SmoldynCodeDoc.pdf, and the Smoldyn
4  website, which is at www.smoldyn.org.
5  Copyright 2003-2016 by Steven Andrews.  This work is distributed under the terms
6  of the Gnu Lesser General Public License (LGPL). */
7 
8 #ifndef __libsmoldyn_h__
9 #define __libsmoldyn_h__
10 
11 #include "smoldyn.h"
12 
13 enum ErrorCode {
14 	ECok=0,
15 	ECnotify=-1,
16 	ECwarning=-2,
17 	ECnonexist=-3,
18 	ECall=-4,
19 	ECmissing=-5,
20 	ECbounds=-6,
21 	ECsyntax=-7,
22 	ECerror=-8,
23 	ECmemory=-9,
24 	ECbug=-10,
25 	ECsame=-11,
26 	ECwildcard=-12};
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
32 /******************************* Miscellaneous ********************************/
33 
34 double         smolGetVersion(void);
35 
36 /*********************************** Errors ***********************************/
37 
38 void           smolSetLogging(FILE *logfile,void (*logFunction)(simptr,int,const char*,...));
39 void           smolSetThrowing(int corethreshold,int libthreshold);
40 void           smolSetError(const char *errorfunction,enum ErrorCode errorcode,const char *errorstring,const char *flags);
41 void           smolSetErrorNT(const char *errorfunction,enum ErrorCode errorcode,const char *errorstring);
42 enum ErrorCode smolGetError(char *errorfunction,char *errorstring,int clearerror);
43 void           smolClearError(void);
44 void           smolSetDebugMode(int debugmode);
45 char*          smolErrorCodeToString(enum ErrorCode erc,char *string);
46 
47 /******************************** Sim structure *******************************/
48 
49 simptr         smolNewSim(int dim,double *lowbounds,double *highbounds);
50 enum ErrorCode smolUpdateSim(simptr sim);
51 enum ErrorCode smolRunTimeStep(simptr sim);
52 enum ErrorCode smolRunSim(simptr sim);
53 enum ErrorCode smolRunSimUntil(simptr sim,double breaktime);
54 enum ErrorCode smolFreeSim(simptr sim);
55 enum ErrorCode smolDisplaySim(simptr sim);
56 
57 /************************** Read configuration file ***************************/
58 
59 simptr         smolPrepareSimFromFile(const char *filepath,const char *filename,const char *flags);
60 enum ErrorCode smolLoadSimFromFile(const char *filepath,const char *filename,simptr *simpointer,const char *flags);
61 enum ErrorCode smolReadConfigString(simptr sim,const char *statement,char *parameters);
62 
63 /***************************** Simulation settings ****************************/
64 
65 enum ErrorCode smolSetSimFlags(simptr sim,const char *flags);
66 enum ErrorCode smolSetSimTimes(simptr sim,double timestart,double timestop,double timestep);
67 enum ErrorCode smolSetTimeStart(simptr sim,double timestart);
68 enum ErrorCode smolSetTimeStop(simptr sim,double timestop);
69 enum ErrorCode smolSetTimeNow(simptr sim,double timenow);
70 enum ErrorCode smolSetTimeStep(simptr sim,double timestep);
71 enum ErrorCode smolSetRandomSeed(simptr sim,long int seed);
72 enum ErrorCode smolSetPartitions(simptr sim,const char *method,double value);
73 
74 /********************************** Graphics **********************************/
75 
76 enum ErrorCode smolSetGraphicsParams(simptr sim,const char *method,int timesteps,int delay);
77 enum ErrorCode smolSetTiffParams(simptr sim,int timesteps,const char *tiffname,int lowcount,int highcount);
78 enum ErrorCode smolSetLightParams(simptr sim,int lightindex,double *ambient,double *diffuse,double *specular,double *position);
79 enum ErrorCode smolSetBackgroundStyle(simptr sim,double *color);
80 enum ErrorCode smolSetFrameStyle(simptr sim,double thickness,double *color);
81 enum ErrorCode smolSetGridStyle(simptr sim,double thickness,double *color);
82 enum ErrorCode smolSetTextStyle(simptr sim,double *color);
83 enum ErrorCode smolAddTextDisplay(simptr sim,char *item);
84 
85 /***************************** Runtime commands *******************************/
86 
87 enum ErrorCode smolSetOutputPath(simptr sim,const char *path);
88 enum ErrorCode smolAddOutputFile(simptr sim,char *filename,int suffix,int append);
89 enum ErrorCode smolAddOutputData(simptr sim,char *dataname);
90 enum ErrorCode smolOpenOutputFiles(simptr sim, int overwrite);
91 //?? needs function for setting output precision
92 enum ErrorCode smolAddCommand(simptr sim,char type,double on,double off,double step,double multiplier,const char *commandstring);
93 enum ErrorCode smolAddCommandFromString(simptr sim,char *string);
94 enum ErrorCode smolGetOutputData(simptr sim,char *dataname,int *nrow,int *ncol,double **array,int erase);
95 enum ErrorCode smolRunCommand(simptr sim,const char *commandstring);
96 
97 /********************************* Molecules **********************************/
98 
99 enum ErrorCode smolAddSpecies(simptr sim,const char *species,const char *mollist);
100 int            smolGetSpeciesIndex(simptr sim,const char *species);
101 int            smolGetSpeciesIndexNT(simptr sim,const char *species);
102 void          smolGetSpeciesName(simptr sim,int speciesindex,char *species);
103 enum ErrorCode smolSetSpeciesMobility(simptr sim,const char *species,enum MolecState state,double difc,double *drift,double *difmatrix);
104 enum ErrorCode smolSetMoleculeColor(simptr sim, const char *species, enum MolecState state, double *color);
105 enum ErrorCode smolSetMoleculeSize(simptr sim, const char *species, enum MolecState state, double size);
106 
107 //?? needs function smolSetSpeciesSurfaceDrift
108 enum ErrorCode smolAddMolList(simptr sim,const char *mollist);
109 int            smolGetMolListIndex(simptr sim,const char *mollist);
110 int            smolGetMolListIndexNT(simptr sim,const char *mollist);
111 char*          smolGetMolListName(simptr sim,int mollistindex,char *mollist);
112 enum ErrorCode smolSetMolList(simptr sim,const char *species,enum MolecState state,const char *mollist);
113 enum ErrorCode smolSetMaxMolecules(simptr sim,int maxmolecules);
114 enum ErrorCode smolAddSolutionMolecules(simptr sim,const char *species,int number,double *lowposition,double *highposition);
115 enum ErrorCode smolAddCompartmentMolecules(simptr sim,const char *species,int number,const char *compartment);
116 enum ErrorCode smolAddSurfaceMolecules(simptr sim,const char *species,enum MolecState state,int number,const char *surface,enum PanelShape panelshape,const char *panel,double *position);
117 int            smolGetMoleculeCount(simptr sim,const char *species,enum MolecState state);
118 enum ErrorCode smolSetMoleculeStyle(simptr sim,const char *species,enum MolecState state,double size,double *color);
119 
120 /********************************** Surfaces **********************************/
121 
122 enum ErrorCode smolSetBoundaryType(simptr sim,int dimension,int highside,char type);
123 enum ErrorCode smolAddSurface(simptr sim,const char *surface);
124 int            smolGetSurfaceIndex(simptr sim,const char *surface);
125 int            smolGetSurfaceIndexNT(simptr sim,const char *surface);
126 char*          smolGetSurfaceName(simptr sim,int surfaceindex,char *surface);
127 enum ErrorCode smolSetReactionIntersurface(simptr sim, const char *reaction, int *rulelist);
128 enum ErrorCode smolSetSurfaceAction(simptr sim,const char *surface,enum PanelFace face,const char *species,enum MolecState state,enum SrfAction action,const char *newspecies);
129 enum ErrorCode smolSetSurfaceRate(simptr sim,const char *surface,const char *species,enum MolecState state,enum MolecState state1,enum MolecState state2,double rate,const char *newspecies,int isinternal);
130 enum ErrorCode smolAddPanel(simptr sim,const char *surface,enum PanelShape panelshape,const char *panel,const char *axisstring,double *params);
131 int            smolGetPanelIndex(simptr sim,const char *surface,enum PanelShape *panelshapeptr,const char *panel);
132 int            smolGetPanelIndexNT(simptr sim,const char *surface,enum PanelShape *panelshapeptr,const char *panel);
133 char*          smolGetPanelName(simptr sim,const char *surface,enum PanelShape panelshape,int panelindex,char *panel);
134 enum ErrorCode smolSetPanelJump(simptr sim,const char *surface,const char *panel1,enum PanelFace face1,const char *panel2,enum PanelFace face2,int isbidirectional);
135 enum ErrorCode smolAddSurfaceUnboundedEmitter(simptr sim,const char *surface,enum PanelFace face,const char *species,double emitamount,double *emitposition);
136 enum ErrorCode smolSetSurfaceSimParams(simptr sim,const char *parameter,double value);
137 enum ErrorCode smolAddPanelNeighbor(simptr sim,const char *surface1,const char *panel1,const char *surface2,const char *panel2,int reciprocal);
138 enum ErrorCode smolSetSurfaceStyle(simptr sim,const char *surface,enum PanelFace face,enum DrawMode mode,double thickness,double *color,int stipplefactor,int stipplepattern,double shininess);
139 
140 /********************************* Compartments *******************************/
141 
142 enum ErrorCode smolAddCompartment(simptr sim,const char *compartment);
143 int            smolGetCompartmentIndex(simptr sim,const char *compartment);
144 int            smolGetCompartmentIndexNT(simptr sim,const char *compartment);
145 char*          smolGetCompartmentName(simptr sim,int compartmentindex,char *compartment);
146 enum ErrorCode smolAddCompartmentSurface(simptr sim,const char *compartment,const char *surface);
147 enum ErrorCode smolAddCompartmentPoint(simptr sim,const char *compartment,double *point);
148 enum ErrorCode smolAddCompartmentLogic(simptr sim,const char *compartment,enum CmptLogic logic,const char *compartment2);
149 
150 /********************************* Reactions **********************************/
151 
152 enum ErrorCode smolAddReaction(simptr sim,const char *reaction,const char *reactant1,enum MolecState rstate1,const char *reactant2,enum MolecState rstate2,int nproduct,const char **productspecies,enum MolecState *productstates,double rate);
153 int            smolGetReactionIndex(simptr sim,int *orderptr,const char *reaction);
154 int            smolGetReactionIndexNT(simptr sim,int *orderptr,const char *reaction);
155 char*          smolGetReactionName(simptr sim,int order,int reactionindex,char *reaction);
156 enum ErrorCode smolSetReactionRate(simptr sim,const char *reaction,double rate,int type);
157 enum ErrorCode smolSetReactionRegion(simptr sim,const char *reaction,const char *compartment,const char *surface);
158 enum ErrorCode smolSetReactionProducts(simptr sim,const char *reaction,enum RevParam method,double parameter,const char *product,double *position);
159 
160 /************************************ Ports ***********************************/
161 
162 enum ErrorCode smolAddPort(simptr sim,const char *port,const char *surface,enum PanelFace face);
163 int            smolGetPortIndex(simptr sim,const char *port);
164 int            smolGetPortIndexNT(simptr sim,const char *port);
165 char*          smolGetPortName(simptr sim,int portindex,char *port);
166 enum ErrorCode smolAddPortMolecules(simptr sim,const char *port,int nmolec,const char *species,double **positions);
167 int            smolGetPortMolecules(simptr sim,const char *port,const char *species,enum MolecState state,int remove);
168 
169 /************************************ Lattices ***********************************/
170 
171 enum ErrorCode smolAddLattice(simptr sim,const char *lattice,const double *min,const double *max,const double *dx,const char *btype);
172 enum ErrorCode smolAddLatticePort(simptr sim,const char *lattice,const char *port);
173 enum ErrorCode smolAddLatticeSpecies(simptr sim,const char *lattice,const char *species);
174 int            smolGetLatticeIndex(simptr sim,const char *lattice);
175 int            smolGetLatticeIndexNT(simptr sim,const char *lattice);
176 char*          smolGetLatticeName(simptr sim,int latticeindex,char *lattice);
177 enum ErrorCode smolAddLatticeMolecules(simptr sim,const char *lattice, const char *species,int number,double *lowposition,double *highposition);
178 enum ErrorCode smolAddLatticeReaction(simptr sim,const char *lattice,const char *reaction, const int move);
179 
180 
181 #ifdef __cplusplus
182 }
183 #endif
184 
185 
186 #endif
187