AcouSTO  version 2.0

◆ mysql_save()

int mysql_save ( COMPLEX  cfreq)
85  {
86 
87  int i;
88  char *query = "insert into runinfo(categoryid,username,title,program,version,datestart,dateend,elapsed,notes,hostname,hostos,totnelm,totncntr,totmics,nnodes) values (%d,'%s','%s','%s','%s','%s','%s',%f,'%s','%s','%s',%d,%d,%d,%d)";
89  char* sql;
90  char hostname[256];
91  char hostos[256];
92  struct utsname u_name;
93  char starttime[80];
94  char endtime[80];
95  struct passwd* pwd;
96  int mpi_ncntr;
97 
98  FILE* tmpfile;
99  char* buffer;
100  long filesize;
101  char* tmp;
102 
103  char* dataquery= "INSERT INTO rundata (runid,name,description,data) values (%d,'%s','%s','%s')";
104  char* datasql;
105  char datadesc[256];
106 
107 
108  Vec gPhinc;
109  Vec gPhitot;
110 
111  Vec gPhiscm;
112  Vec gPhincm;
113  Vec gPhimtot;
114 
115  int locRows;
116  int gRows,gCRows;
117  int mm,nn;
118  int descl[9];
119  int descg[9];
120  int izero=0;
121  int ione=1;
122  int info;
123 
124 
125  gPhiscm = calloc(modgeominfo->nmics,sizeof(COMPLEX));
126  gPhincm = calloc(modgeominfo->nmics,sizeof(COMPLEX));
127  gPhimtot = calloc(modgeominfo->nmics,sizeof(COMPLEX));
128 
129  gRows = modgeominfo->nmics;
130  locRows = numroc_(&gRows ,&runinfo->mics_block_size,&runinfo->myrow,&izero,&runinfo->nprows);
131 
132 
133  // Gathering vectors on node 0
134  mm = gRows;// * runinfo->nprows;
135  nn = runinfo->npcols;
136  descinit_(descl , &gRows ,&ione, &runinfo->mics_block_size ,&ione,&izero,&izero,&runinfo->ctxt,&locRows ,&info);
137  descinit_(descg , &mm ,&ione, &gRows ,&ione,&izero,&izero,&runinfo->ctxt,&gRows ,&info);
138 
139  pzgemr2d_(&gRows,&ione,solution->vecPhium ,&ione, &ione,descl, gPhiscm ,&ione,&ione,descg,&runinfo->ctxt);
140  pzgemr2d_(&gRows,&ione,solution->vecPhincm ,&ione, &ione,descl, gPhincm ,&ione,&ione,descg,&runinfo->ctxt);
141 
142  gCRows = modgeominfo->ncntr;
143  gPhinc = calloc(modgeominfo->ncntr,sizeof(COMPLEX));
144  gPhitot = calloc(modgeominfo->ncntr,sizeof(COMPLEX));
145  mm = gCRows;
146  descinit_(descl , &mm ,&ione, &runinfo->row_block_size,&ione,&izero,&izero,&runinfo->ctxt,&gCRows ,&info);
147  descinit_(descg , &mm ,&ione, &gCRows, &ione,&izero,&izero,&runinfo->ctxt,&gCRows ,&info);
148  pzgemr2d_(&gCRows,&ione,solution->vecPhinc ,&ione, &ione,descl, gPhinc ,&ione,&ione,descg,&runinfo->ctxt);
149 
150  logger(LOG_DEBUG, "gathered vectors\n");
151  /* Evaluating totals */
152  /* body */
153  if(modsolinfo->knw == 1){
154  for(i=0;i<modgeominfo->ncntr;i++){
155  gPhitot[i] = solution->sol[i] - gPhinc[i]; // scattering
156  }
157  }else{
158  for(i=0;i<modgeominfo->ncntr;i++){
159  gPhitot[i] = solution->sol[i] + gPhinc[i]; // total
160  }
161  }
162 
163  for(i=0;i<modgeominfo->nmics;i++){
164  gPhimtot[i] = gPhincm[i] + gPhiscm[i];
165  }
166 
167  /* DB SAVING is on Master */
168  if(rank == 0){
169 
170  open_connection();
171  logger(LOG_DEBUG,"opened connection\n");
172 
173  if(mysqlinfo->runid == -1){ //first save for this run
174  sql = (char*) malloc(512*sizeof(char));
175 
176  gethostname(hostname,255);
177  uname(&u_name);
178  sprintf(hostos,"%s %s %s %s %s",&u_name.sysname[0],&u_name.nodename[0],&u_name.release[0],&u_name.version[0],&u_name.machine[0]);
179  strftime(starttime,sizeof(starttime),"%Y-%m-%d %H:%M:%S",localtime(&rundetails->starttime));
180  strftime(endtime ,sizeof(endtime ),"%Y-%m-%d %H:%M:%S",localtime(&rundetails->endtime ));
181 
182  pwd = getpwuid(getuid());
183  sprintf(sql,query,
184  1, // defaults to first category
185  pwd->pw_name,
186  rundetails->title,
187  "acousto",
189  starttime,
190  endtime,
192  "",
193  hostname,
194  hostos,
198  size
199  );
200  logger(LOG_DEBUG,"executing query %s\n",sql);
201 
202  if(mysql_query(connection,sql)){
203  printf("%s\n",mysql_error(connection));
204  return -1;
205  }
206  mysqlinfo->runid = (int)mysql_insert_id(connection);
207 
208  logger(LOG_INFO," Run was stored with id -> %d\n",mysqlinfo->runid);
209 
210 
211  /* --------------------------------------
212  Reading and storing configuration file
213  --------------------------------------*/
214  tmpfile = fopen(rundetails->cfg_filename,"r");
215  fseek(tmpfile,0L,SEEK_END);
216  filesize = ftell(tmpfile);
217  buffer = calloc(filesize,sizeof(char));
218  rewind(tmpfile);
219  fread(buffer,sizeof(char),filesize,tmpfile);
220  fclose(tmpfile);
221 
222  datasql = (char*) malloc((255+filesize*2+1)*sizeof(char));
223  tmp = (char*) malloc((filesize*2+1)*sizeof(char));
224 
225  mysql_real_escape_string(connection,tmp,buffer,filesize);
226  sprintf(datasql,dataquery,mysqlinfo->runid,"ACOUSTO_CONFIG","",tmp);
227  if(mysql_query(connection,datasql)){
228  printf("%s\n",mysql_error(connection));
229  return -1;
230  }
231  logger(LOG_DEBUG,"stored configuration file\n");
232 
233  free(buffer);
234  free(datasql);
235  free(tmp);
236  free(sql);
237  }
238 
239 
240 
241  /* Storing solution */
242  mpi_ncntr = modgeominfo->ncntr + modgeominfo->nchief;
243  sprintf(datadesc,"freq: %f +i %f",CREAL(cfreq),CIMAG(cfreq));
244  if(modsolinfo->knw == 1){
245  store_data(solution->sol,datadesc,"ACOUSTO_BODY_TOT",mpi_ncntr,mysqlinfo->runid,geometry->cntr);
246  store_data(gPhinc ,datadesc,"ACOUSTO_BODY_INC",mpi_ncntr,mysqlinfo->runid,geometry->cntr);
247  store_data(gPhitot ,datadesc,"ACOUSTO_BODY_SCA",mpi_ncntr,mysqlinfo->runid,geometry->cntr);
248  }else{
249  store_data(solution->sol,datadesc,"ACOUSTO_BODY_SCA",mpi_ncntr,mysqlinfo->runid,geometry->cntr);
250  store_data(gPhinc ,datadesc,"ACOUSTO_BODY_INC",mpi_ncntr,mysqlinfo->runid,geometry->cntr);
251  store_data(gPhitot ,datadesc,"ACOUSTO_BODY_TOT",mpi_ncntr,mysqlinfo->runid,geometry->cntr);
252  }
253  logger(LOG_DEBUG,"stored solution\n");
254 
255 
256 
257 
258  /* Storing Pressure fields and Phiu*/
259  store_data(gPhincm ,datadesc,"ACOUSTO_MICS_INC",modgeominfo->nmics,mysqlinfo->runid,geometry->mics);
260  store_data(gPhiscm ,datadesc,"ACOUSTO_MICS_SCA",modgeominfo->nmics,mysqlinfo->runid,geometry->mics);
261  store_data(gPhimtot ,datadesc,"ACOUSTO_MICS_TOT",modgeominfo->nmics,mysqlinfo->runid,geometry->mics);
262  logger(LOG_DEBUG,"stored additional data\n");
263 
265 
266 
267 
268  }
269 
270  free(gPhiscm);
271  free(gPhinc);
272  free(gPhincm);
273  free(gPhimtot);
274  free(gPhitot);
275 
276 
277  return 1;
278 
279 
280 
281 }
MYSQL * connection
Definition: mysqlsave.c:36
struct run_info * runinfo
Definition: globals.h:34
#define Vec
Definition: types.h:63
int npcols
Definition: structs.h:113
const char * title
Definition: structs.h:135
int ncntr
Definition: structs.h:299
time_t endtime
Definition: structs.h:147
#define CREAL(x)
Definition: functions.h:49
char * cfg_filename
Definition: structs.h:137
int myrow
Definition: structs.h:115
int nprows
Definition: structs.h:111
#define CIMAG(x)
Definition: functions.h:50
int nchief
Definition: structs.h:301
COMPLEX * sol
Definition: structs.h:607
int mics_block_size
Definition: structs.h:124
int size
Definition: globals.h:81
#define LOG_INFO
Definition: logger.h:26
void pzgemr2d_(int *m, int *n, COMPLEX *A, int *ia, int *ja, int *desca, COMPLEX *B, int *ib, int *jb, int *descb, int *ictxt)
Copies a (m x n) submatrix of A from element (ia,ja) on a submatrix of B from element (ib...
int nelmb
Definition: structs.h:295
int open_connection()
Definition: mysqlsave.c:40
Vec vecPhinc
Definition: structs.h:578
int ctxt
Definition: structs.h:109
int knw
Definition: structs.h:446
double elapsed
Definition: structs.h:149
void descinit_(int *desc, int *m, int *n, int *mb, int *nb, int *ia, int *ja, int *ictxt, int *llda, int *info)
struct solution_struct * solution
Definition: globals.h:52
#define COMPLEX
Definition: types.h:48
Vec vecPhincm
Definition: structs.h:582
struct modsol_info * modsolinfo
Definition: globals.h:44
int nmics
Definition: structs.h:304
#define LOG_DEBUG
Definition: logger.h:27
void close_connection()
Definition: mysqlsave.c:338
Vec vecPhium
Definition: structs.h:586
#define malloc(size)
Definition: allocation.h:38
#define ACOUSTO_VERSION
Definition: version.h:32
int numroc_(int *m, int *mb, int *p, int *ia, int *npr)
int rank
Definition: globals.h:79
struct run_details * rundetails
Definition: globals.h:36
void store_data(COMPLEX *data, char *desc, char *name, int len, int runid, struct vector *points)
Definition: mysqlsave.c:286
Geometry info structure.
Definition: structs.h:161
time_t starttime
Definition: structs.h:145
int row_block_size
Definition: structs.h:119
void logger(int level, char *msg,...)
Definition: logger.c:56
#define calloc(n, size)
Definition: allocation.h:37
struct modgeom_info * modgeominfo
Definition: globals.h:38