25 #include "petsc_utils.h" 32 using ::opencarp::timer_manager;
46 int trans,
float *duration)
48 bool fmode = (bool) strcmp(f,
"");
49 bool isClamp = dur || fmode;
50 memset(cl, 0,
sizeof(
Clamp));
77 static bool fst =
true;
92 double time = tm->time;
94 if (time <= cl->start)
96 else if (time > cl->
start && time < cl->start+cl->
dur)
101 val = cl->
tr.
s[tm->d_time];
103 for (
int i=0; i<pMIIF->
numNode;i++)
119 memset(cl, 0,
sizeof(
Clamp));
140 int d_time = tm->d_time;
148 log_msg(NULL, 5, 0,
"Cannot clamp %s as the global vector %s is not used!!\n\n", cl->
sv, cl->
sv);
155 int temparray[1] = {0};
157 SVgetfcn svget = miif->
IIF[0]->get_type().get_sv_offset(cl->
sv, &offset, temparray);
159 log_msg(NULL, 5, 0,
"\nCannot clamp %s as there is no %s!!\n\n", cl->
sv, cl->
sv);
163 for(
int i=0; i<miif->
N_Nodes[0]; i++)
202 if(!strlen(SVs) || !strlen(files))
205 char *svlist = strdup(SVs);
206 char *flist = strdup(files);
212 while((p = strchr(p,
':'))!=NULL) {
217 *clamps = (
Clamp*)calloc(ncol+1,
sizeof(
Clamp));
219 char* sv = strtok_r(svlist,
":", &sptr);
220 char* file = strtok_r(flist,
":", &fptr);
221 while(sv != NULL && file!= NULL) {
223 sv = strtok_r(NULL,
":", &sptr);
224 file = strtok_r(NULL,
":", &fptr);
228 log_msg(NULL, 5, 0,
"Mismatch between SV list and file list");
GlobalData_t(* SVgetfcn)(IonIfBase &, int, int)
char * dupstr(const char *old_str)
int read_trace(trace *tr, const char *name)
GlobalData_t * procdata[NUM_IMP_DATA_TYPES]
data for this processor
void resample_trace(trace *tr, double dt)
void sv_clamp(Clamp *cl, timer_manager *tm, MULTI_IF *miif, bool trigger)
bool initialize_clamp(Clamp *cl, double cl_val, double ini_val, double start, double dur, const char *f, int trans, float *duration)
void(* SVputfcn)(IonIfBase &, int, int, GlobalData_t)
SVputfcn getPutSV(SVgetfcn)
std::vector< IonIfBase * > IIF
array of IIF's
Define multiple ionic models to be used in different regions.
double trace_duration(trace *tr, const char *f)
virtual void set(const vector< T > &idx, const vector< S > &vals, const bool additive=false)=0
void clamp_signal(MULTI_IF *pMIIF, Clamp *cl, timer_manager *tm)
int IMPdataLabel2Index(const char *sv)
SF::abstract_vector< SF_int, SF_real > sf_vec
int * N_Nodes
#nodes for each IMP
opencarp::sf_vec * gdata[NUM_IMP_DATA_TYPES]
data used by all IMPs
void log_msg(FILE_SPEC out, int level, unsigned char flag, const char *fmt,...)
int numNode
local number of nodes
void AP_clamp(Clamp *cl, timer_manager *tm, sf_vec *v, bool trigger)
double SF_real
Use the general double as real type.
void initialize_sv_clamp(Clamp *cl, const char *sv, char *file, double dt)
int process_sv_clamps(char *SVs, char *files, Clamp **clamps, double dt)