static void printBounds(int taxisID, int calendar) { int vdate0, vdate1; int vtime0, vtime1; int incperiod = 0, incunit = 0; juldate_t juldate1, juldate0; double jdelta; int i, len; char vdatestr[32], vtimestr[32]; taxisInqVdateBounds(taxisID, &vdate0, &vdate1); taxisInqVtimeBounds(taxisID, &vtime0, &vtime1); date2str(vdate0, vdatestr, sizeof(vdatestr)); time2str(vtime0, vtimestr, sizeof(vtimestr)); fprintf(stdout, " %s %s", vdatestr, vtimestr); date2str(vdate1, vdatestr, sizeof(vdatestr)); time2str(vtime1, vtimestr, sizeof(vtimestr)); fprintf(stdout, " %s %s", vdatestr, vtimestr); juldate0 = juldate_encode(calendar, vdate0, vtime0); juldate1 = juldate_encode(calendar, vdate1, vtime1); jdelta = juldate_to_seconds(juldate_sub(juldate1, juldate0)); getTimeInc(jdelta, vdate0, vdate1, &incperiod, &incunit); /* fprintf(stdout, " %g %g %g %d", jdelta, jdelta/3600, fmod(jdelta,3600), incperiod%3600);*/ len = fprintf(stdout, " %3d %s%s", incperiod, tunits[incunit], abs(incperiod)>1?"s":""); for ( i = 0; i < 11-len; ++i ) fprintf(stdout, " "); }
long CTrainersTable::AddRow(tDATA& rec) { long res = UDF_E_FAIL; do { char query[MAX_QUERY_LEN] = {0}; sql::ResultSet* qRes = NULL; if(! m_pConnection) { res = UDF_E_NOCONNECTION; break; } sprintf(query, "insert into %s(`club_id`,`name`,`bd`,`phone`,`contact_info`,`email`) \ values(%d, '%s', '%s', '%s', '%s', '%s')" , TABLE , rec.clubId , rec.name.c_str() , date2str(rec.bd).c_str() , rec.phone.c_str() , rec.additionalInfo.c_str() , rec.email.c_str() ); res = m_pConnection->Execute(query); rec.id = m_pConnection->GetLastInsertId(); }while(0); return res; }
void *Tinfo(void *argument) { int vdate_first = 0, vtime_first = 0; int vdate0 = 0, vtime0 = 0; int vdate = 0, vtime = 0; int fdate = 0, ftime = 0; int nrecs, ntsteps; int tsID = 0, ntimeout; int taxisID; int streamID; int vlistID; int year0, month0, day0; int year, month, day; int calendar, unit; int lforecast = FALSE; int incperiod0 = 0, incunit0 = 0; int incperiod = 0, incunit = 0; int its = 0, igap; int ngaps = 0; int ntsm[MAX_GAPS]; int rangetsm[MAX_GAPS][2]; int vdatem[MAX_GAPS][MAX_NTSM]; int vtimem[MAX_GAPS][MAX_NTSM]; juldate_t juldate, juldate0; double jdelta = 0, jdelta0 = 0; int arrow = 0; int i, len; char vdatestr[32], vtimestr[32]; cdoInitialize(argument); streamID = streamOpenRead(cdoStreamName(0)); vlistID = streamInqVlist(streamID); fprintf(stdout, "\n"); taxisID = vlistInqTaxis(vlistID); ntsteps = vlistNtsteps(vlistID); if ( ntsteps != 0 ) { if ( ntsteps == CDI_UNDEFID ) fprintf(stdout, " Time axis : unlimited steps\n"); else fprintf(stdout, " Time axis : %d step%s\n", ntsteps, ntsteps == 1 ? "" : "s"); if ( taxisID != CDI_UNDEFID ) { if ( taxisInqType(taxisID) != TAXIS_ABSOLUTE ) { vdate = taxisInqRdate(taxisID); vtime = taxisInqRtime(taxisID); date2str(vdate, vdatestr, sizeof(vdatestr)); time2str(vtime, vtimestr, sizeof(vtimestr)); fprintf(stdout, " RefTime = %s %s", vdatestr, vtimestr); unit = taxisInqTunit(taxisID); if ( unit != CDI_UNDEFID ) fprintf(stdout, " Units = %s", tunit2str(unit)); calendar = taxisInqCalendar(taxisID); if ( calendar != CDI_UNDEFID ) fprintf(stdout, " Calendar = %s", calendar2str(calendar)); if ( taxisHasBounds(taxisID) ) fprintf(stdout, " Bounds = true"); fprintf(stdout, "\n"); if ( taxisInqType(taxisID) == TAXIS_FORECAST ) { fdate = taxisInqFdate(taxisID); ftime = taxisInqFtime(taxisID); date2str(fdate, vdatestr, sizeof(vdatestr)); time2str(ftime, vtimestr, sizeof(vtimestr)); fprintf(stdout, " Forecast RefTime = %s %s", vdatestr, vtimestr); unit = taxisInqForecastTunit(taxisID); if ( unit != CDI_UNDEFID ) fprintf(stdout, " Units = %s", tunit2str(unit)); fprintf(stdout, "\n"); lforecast = TRUE; } } } calendar = taxisInqCalendar(taxisID); fprintf(stdout, "\n"); fprintf(stdout, " Verification Time "); if ( lforecast ) fprintf(stdout, " Forecast Reference Time "); if ( taxisHasBounds(taxisID) ) fprintf(stdout, " lower bound upper bound"); fprintf(stdout, "\n"); fprintf(stdout, "Timestep YYYY-MM-DD hh:mm:ss Increment"); if ( lforecast ) fprintf(stdout, " YYYY-MM-DD hh:mm:ss Period"); if ( taxisHasBounds(taxisID) ) fprintf(stdout, " YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss Difference"); fprintf(stdout, "\n"); tsID = 0; while ( (nrecs = streamInqTimestep(streamID, tsID)) ) { vdate = taxisInqVdate(taxisID); vtime = taxisInqVtime(taxisID); cdiDecodeDate(vdate, &year, &month, &day); date2str(vdate, vdatestr, sizeof(vdatestr)); time2str(vtime, vtimestr, sizeof(vtimestr)); fprintf(stdout, "%6d %s %s", tsID+1, vdatestr, vtimestr); if ( tsID ) { cdiDecodeDate(vdate0, &year0, &month0, &day0); juldate0 = juldate_encode(calendar, vdate0, vtime0); juldate = juldate_encode(calendar, vdate, vtime); jdelta = juldate_to_seconds(juldate_sub(juldate, juldate0)); getTimeInc(jdelta, vdate0, vdate, &incperiod, &incunit); /* fprintf(stdout, " %g %g %g %d", jdelta, jdelta/3600, fmod(jdelta,3600), incperiod%3600);*/ len = fprintf(stdout, " %3d %s%s", incperiod, tunits[incunit], abs(incperiod)>1?"s":""); for ( i = 0; i < 11-len; ++i ) fprintf(stdout, " "); } else { vdate_first = vdate; vtime_first = vtime; fprintf(stdout, " --------"); } if ( lforecast ) { fdate = taxisInqFdate(taxisID); ftime = taxisInqFtime(taxisID); date2str(fdate, vdatestr, sizeof(vdatestr)); time2str(ftime, vtimestr, sizeof(vtimestr)); fprintf(stdout, " %s %s", vdatestr, vtimestr); double fc_period = taxisInqForecastPeriod(taxisID); fprintf(stdout, " %7g", fc_period); } if ( taxisHasBounds(taxisID) ) printBounds(taxisID, calendar); if ( tsID > 1 && (incperiod != incperiod0 || incunit != incunit0) ) { if ( tsID == 2 && (jdelta0 > jdelta) ) { jdelta0 = jdelta; incperiod0 = incperiod; incunit0 = incunit; its = fill_gap(ngaps, ntsm, rangetsm, vdatem, vtimem, 1, incperiod0, incunit0, vdate_first, vdate, vtime, calendar, day, juldate0, juldate_encode(calendar, vdate_first, vtime_first)); arrow = '^'; } else { its = fill_gap(ngaps, ntsm, rangetsm, vdatem, vtimem, tsID, incperiod0, incunit0, vdate, vdate0, vtime0, calendar, day0, juldate, juldate0); arrow = '<'; if ( its == 0 && incperiod < 0 ) { its = -1; vdate = vdate0; vtime = vtime0; } } if ( its > 0 ) { ngaps++; if ( cdoVerbose ) fprintf(stdout, " %c--- Gap %d, missing %s%d timestep%s", arrow, ngaps, its>=LIM_NTSM?"more than ":"", its, its>1?"s":""); } else if ( its < 0 ) { if ( cdoVerbose ) fprintf(stdout, " %c--- Wrong date/time information, negative increment!", arrow); } } if ( tsID == 1 ) { jdelta0 = jdelta; incperiod0 = incperiod; incunit0 = incunit; } fprintf(stdout, "\n"); vdate0 = vdate; vtime0 = vtime; tsID++; } } streamClose(streamID); fprintf(stdout, "\n"); date2str(vdate_first, vdatestr, sizeof(vdatestr)); time2str(vtime_first, vtimestr, sizeof(vtimestr)); fprintf(stdout, " Start date : %s %s\n", vdatestr, vtimestr); date2str(vdate, vdatestr, sizeof(vdatestr)); time2str(vtime, vtimestr, sizeof(vtimestr)); fprintf(stdout, " End date : %s %s\n", vdatestr, vtimestr); fprintf(stdout, " Increment : %3d %s%s\n", incperiod0, tunits[incunit0], incperiod0>1?"s":""); fprintf(stdout, " Number of timesteps : %d\n", tsID); fprintf(stdout, " Gaps identified : %d\n", ngaps); if ( cdoVerbose && ngaps ) { fprintf(stdout, "\nFound potentially %d gap%s in the time series", ngaps, ngaps>1?"s":""); if ( ngaps >= MAX_GAPS ) { ngaps = MAX_GAPS; fprintf(stdout, ", here are the first %d", ngaps); } fprintf(stdout, ":\n"); for ( igap = 0; igap < ngaps; ++igap ) { fprintf(stdout, " Gap %d between timestep %d and %d, missing %d timestep%s", igap+1, rangetsm[igap][0], rangetsm[igap][1], ntsm[igap], ntsm[igap]>1?"s":""); if ( ntsm[igap] >= MAX_NTSM ) { ntsm[igap] = MAX_NTSM; fprintf(stdout, ", here are the first %d", ntsm[igap]); } fprintf(stdout, ":\n"); ntimeout = 0; for ( its = 0; its < ntsm[igap]; ++its ) { if ( ntimeout == 4 ) { ntimeout = 0; fprintf(stdout, "\n"); } vdate = vdatem[igap][its]; vtime = vtimem[igap][its]; date2str(vdate, vdatestr, sizeof(vdatestr)); time2str(vtime, vtimestr, sizeof(vtimestr)); fprintf(stdout, " %s %s", vdatestr, vtimestr); ntimeout++; tsID++; } fprintf(stdout, "\n"); } } cdoFinish(); return (0); }
void *Mergetime(void *argument) { int streamID1, streamID2 = CDI_UNDEFID; int tsID2 = 0, recID, varID, levelID; int vlistID1, vlistID2; int nfiles, fileID; int taxisID1, taxisID2 = CDI_UNDEFID; int lcopy = FALSE; int gridsize; int nmiss; int vdate, vtime; int last_vdate = -1, last_vtime = -1; int next_fileID; int skip_same_time = FALSE; int process_timestep; const char *ofilename; double *array = NULL; typedef struct { int streamID; int vlistID; int taxisID; int tsID; int vdate; int vtime; int nrecs; } sfile_t; sfile_t *sf = NULL; cdoInitialize(argument); { char *envstr; envstr = getenv("SKIP_SAME_TIME"); if ( envstr ) { int ival; ival = atoi(envstr); if ( ival == 1 ) { skip_same_time = TRUE; if ( cdoVerbose ) cdoPrint("Set SKIP_SAME_TIME to %d", ival); } } } if ( UNCHANGED_RECORD ) lcopy = TRUE; nfiles = cdoStreamCnt() - 1; sf = (sfile_t*) malloc(nfiles*sizeof(sfile_t)); for ( fileID = 0; fileID < nfiles; fileID++ ) { if ( cdoVerbose ) cdoPrint("process: %s", cdoStreamName(fileID)->args); streamID1 = streamOpenRead(cdoStreamName(fileID)); vlistID1 = streamInqVlist(streamID1); taxisID1 = vlistInqTaxis(vlistID1); sf[fileID].streamID = streamID1; sf[fileID].vlistID = vlistID1; sf[fileID].taxisID = taxisID1; } /* check that the contents is always the same */ for ( fileID = 1; fileID < nfiles; fileID++ ) vlistCompare(sf[0].vlistID, sf[fileID].vlistID, CMP_ALL); /* read the first time step */ for ( fileID = 0; fileID < nfiles; fileID++ ) { sf[fileID].tsID = 0; sf[fileID].nrecs = streamInqTimestep(sf[fileID].streamID, sf[fileID].tsID); if ( sf[fileID].nrecs == 0 ) { streamClose(sf[fileID].streamID); sf[fileID].streamID = -1; } else { sf[fileID].vdate = taxisInqVdate(sf[fileID].taxisID); sf[fileID].vtime = taxisInqVtime(sf[fileID].taxisID); } } ofilename = cdoStreamName(nfiles)->args; if ( !cdoSilentMode && !cdoOverwriteMode ) if ( fileExists(ofilename) ) if ( !userFileOverwrite(ofilename) ) cdoAbort("Outputfile %s already exists!", ofilename); streamID2 = streamOpenWrite(cdoStreamName(nfiles), cdoFiletype()); if ( ! lcopy ) { gridsize = vlistGridsizeMax(sf[0].vlistID); array = (double*) malloc(gridsize*sizeof(double)); } while ( TRUE ) { process_timestep = TRUE; next_fileID = -1; vdate = 0; vtime = 0; for ( fileID = 0; fileID < nfiles; fileID++ ) { if ( sf[fileID].streamID != -1 ) if ( next_fileID == -1 || sf[fileID].vdate < vdate || (sf[fileID].vdate == vdate && sf[fileID].vtime < vtime) ) { next_fileID = fileID; vdate = sf[fileID].vdate; vtime = sf[fileID].vtime; } } fileID = next_fileID; if ( cdoVerbose ) cdoPrint("nextstep = %d vdate = %d vtime = %d", next_fileID, vdate, vtime); if ( next_fileID == -1 ) break; if ( skip_same_time ) if ( vdate == last_vdate && vtime == last_vtime ) { char vdatestr[32], vtimestr[32]; date2str(vdate, vdatestr, sizeof(vdatestr)); time2str(vtime, vtimestr, sizeof(vtimestr)); cdoPrint("Timestep %4d in stream %d (%s %s) already exists, skipped!", sf[fileID].tsID+1, sf[fileID].streamID, vdatestr, vtimestr); process_timestep = FALSE; } if ( process_timestep ) { if ( tsID2 == 0 ) { vlistID1 = sf[0].vlistID; vlistID2 = vlistDuplicate(vlistID1); taxisID1 = vlistInqTaxis(vlistID1); taxisID2 = taxisDuplicate(taxisID1); vlistDefTaxis(vlistID2, taxisID2); streamDefVlist(streamID2, vlistID2); } last_vdate = vdate; last_vtime = vtime; taxisCopyTimestep(taxisID2, sf[fileID].taxisID); streamDefTimestep(streamID2, tsID2); for ( recID = 0; recID < sf[fileID].nrecs; recID++ ) { streamInqRecord(sf[fileID].streamID, &varID, &levelID); streamDefRecord(streamID2, varID, levelID); if ( lcopy ) { streamCopyRecord(streamID2, sf[fileID].streamID); } else { streamReadRecord(sf[fileID].streamID, array, &nmiss); streamWriteRecord(streamID2, array, nmiss); } } tsID2++; } sf[fileID].nrecs = streamInqTimestep(sf[fileID].streamID, ++sf[fileID].tsID); if ( sf[fileID].nrecs == 0 ) { streamClose(sf[fileID].streamID); sf[fileID].streamID = -1; } else { sf[fileID].vdate = taxisInqVdate(sf[fileID].taxisID); sf[fileID].vtime = taxisInqVtime(sf[fileID].taxisID); } } streamClose(streamID2); if ( ! lcopy ) if ( array ) free(array); if ( sf ) free(sf); cdoFinish(); return (0); }
void *Sinfo(void *argument) { enum {func_generic, func_param, func_name, func_code}; int operatorID; int operfunc, lensemble; int indf; int varID; int gridsize = 0; int gridID, zaxisID, code, tabnum, param; int vdate, vtime; int nvars, ntsteps; int levelsize; int tsteptype, taxisID; char tmpname[CDI_MAX_NAME]; char varname[CDI_MAX_NAME]; char paramstr[32]; char vdatestr[32], vtimestr[32]; const char *modelptr, *instptr; int streamID = 0; int vlistID; int datatype; char pstr[4]; cdoInitialize(argument); cdoOperatorAdd("sinfo", func_generic, 0, NULL); cdoOperatorAdd("sinfop", func_param, 0, NULL); cdoOperatorAdd("sinfon", func_name, 0, NULL); cdoOperatorAdd("sinfoc", func_code, 0, NULL); cdoOperatorAdd("seinfo", func_generic, 1, NULL); cdoOperatorAdd("seinfop", func_param, 1, NULL); cdoOperatorAdd("seinfon", func_name, 1, NULL); cdoOperatorAdd("seinfoc", func_code, 1, NULL); operatorID = cdoOperatorID(); operfunc = cdoOperatorF1(operatorID); lensemble = cdoOperatorF2(operatorID); for ( indf = 0; indf < cdoStreamCnt(); indf++ ) { streamID = streamOpenRead(cdoStreamName(indf)); vlistID = streamInqVlist(streamID); set_text_color(stdout, BRIGHT, BLACK); fprintf(stdout, " File format"); reset_text_color(stdout); fprintf(stdout, " : "); printFiletype(streamID, vlistID); set_text_color(stdout, BRIGHT, BLACK); if ( lensemble ) fprintf(stdout, "%6d : Institut Source Ttype Einfo Levels Num Points Num Dtype : ", -(indf+1)); else fprintf(stdout, "%6d : Institut Source Ttype Levels Num Points Num Dtype : ", -(indf+1)); if ( operfunc == func_name ) fprintf(stdout, "Parameter name"); else if ( operfunc == func_code ) fprintf(stdout, "Table Code"); else fprintf(stdout, "Parameter ID"); if ( cdoVerbose ) fprintf(stdout, " : Extra" ); reset_text_color(stdout); fprintf(stdout, "\n" ); nvars = vlistNvars(vlistID); for ( varID = 0; varID < nvars; varID++ ) { param = vlistInqVarParam(vlistID, varID); code = vlistInqVarCode(vlistID, varID); tabnum = tableInqNum(vlistInqVarTable(vlistID, varID)); gridID = vlistInqVarGrid(vlistID, varID); zaxisID = vlistInqVarZaxis(vlistID, varID); set_text_color(stdout, BRIGHT, BLACK); fprintf(stdout, "%6d", varID+1); reset_text_color(stdout); set_text_color(stdout, RESET, BLACK); fprintf(stdout, " : "); reset_text_color(stdout); set_text_color(stdout, RESET, BLUE); /* institute info */ instptr = institutInqNamePtr(vlistInqVarInstitut(vlistID, varID)); strcpy(tmpname, "unknown"); if ( instptr ) strncpy(tmpname, instptr, CDI_MAX_NAME); limit_string_length(tmpname, CDI_MAX_NAME); fprintf(stdout, "%-8s ", tmpname); /* source info */ modelptr = modelInqNamePtr(vlistInqVarModel(vlistID, varID)); strcpy(tmpname, "unknown"); if ( modelptr ) strncpy(tmpname, modelptr, CDI_MAX_NAME); limit_string_length(tmpname, CDI_MAX_NAME); fprintf(stdout, "%-8s ", tmpname); /* tsteptype */ tsteptype = vlistInqVarTsteptype(vlistID, varID); if ( tsteptype == TSTEP_CONSTANT ) fprintf(stdout, "%-8s ", "constant"); else if ( tsteptype == TSTEP_INSTANT ) fprintf(stdout, "%-8s ", "instant"); else if ( tsteptype == TSTEP_INSTANT2 ) fprintf(stdout, "%-8s ", "instant"); else if ( tsteptype == TSTEP_INSTANT3 ) fprintf(stdout, "%-8s ", "instant"); else if ( tsteptype == TSTEP_MIN ) fprintf(stdout, "%-8s ", "min"); else if ( tsteptype == TSTEP_MAX ) fprintf(stdout, "%-8s ", "max"); else if ( tsteptype == TSTEP_AVG ) fprintf(stdout, "%-8s ", "avg"); else if ( tsteptype == TSTEP_ACCUM ) fprintf(stdout, "%-8s ", "accum"); else if ( tsteptype == TSTEP_RANGE ) fprintf(stdout, "%-8s ", "range"); else if ( tsteptype == TSTEP_DIFF ) fprintf(stdout, "%-8s ", "diff"); else fprintf(stdout, "%-8s ", "unknown"); /* ensemble information */ if ( lensemble ) { int ensID, ensCount, forecast_type; if ( vlistInqVarEnsemble(vlistID, varID, &ensID, &ensCount, &forecast_type) ) fprintf(stdout, "%2d/%-2d ", ensID, ensCount); else fprintf(stdout, "--/-- "); } /* layer info */ levelsize = zaxisInqSize(zaxisID); fprintf(stdout, "%6d ", levelsize); fprintf(stdout, "%3d ", vlistZaxisIndex(vlistID, zaxisID) + 1); /* grid info */ gridsize = gridInqSize(gridID); fprintf(stdout, "%9d ", gridsize); fprintf(stdout, "%3d ", vlistGridIndex(vlistID, gridID) + 1); /* datatype */ datatype = vlistInqVarDatatype(vlistID, varID); datatype2str(datatype, pstr); fprintf(stdout, " %-3s", pstr); if ( vlistInqVarCompType(vlistID, varID) == COMPRESS_NONE ) fprintf(stdout, " "); else fprintf(stdout, "z "); reset_text_color(stdout); set_text_color(stdout, RESET, BLACK); fprintf(stdout, ": "); reset_text_color(stdout); /* parameter info */ cdiParamToString(param, paramstr, sizeof(paramstr)); if ( operfunc == func_name ) vlistInqVarName(vlistID, varID, varname); set_text_color(stdout, BRIGHT, GREEN); if ( operfunc == func_name ) fprintf(stdout, "%-14s", varname); else if ( operfunc == func_code ) fprintf(stdout, "%4d %4d ", tabnum, code); else fprintf(stdout, "%-14s", paramstr); reset_text_color(stdout); if ( cdoVerbose ) { char varextra[CDI_MAX_NAME]; vlistInqVarExtra(vlistID, varID, varextra); fprintf(stdout, " : %s", varextra ); } fprintf(stdout, "\n"); } set_text_color(stdout, BRIGHT, BLACK); fprintf(stdout, " Grid coordinates"); reset_text_color(stdout); fprintf(stdout, " :\n"); printGridInfo(vlistID); set_text_color(stdout, BRIGHT, BLACK); fprintf(stdout, " Vertical coordinates"); reset_text_color(stdout); fprintf(stdout, " :\n"); printZaxisInfo(vlistID); taxisID = vlistInqTaxis(vlistID); ntsteps = vlistNtsteps(vlistID); if ( ntsteps != 0 ) { set_text_color(stdout, BRIGHT, BLACK); fprintf(stdout, " Time coordinate"); reset_text_color(stdout); if ( ntsteps == CDI_UNDEFID ) fprintf(stdout, " : unlimited steps\n"); else fprintf(stdout, " : %d step%s\n", ntsteps, ntsteps == 1 ? "" : "s"); if ( taxisID != CDI_UNDEFID ) { if ( taxisInqType(taxisID) != TAXIS_ABSOLUTE ) { vdate = taxisInqRdate(taxisID); vtime = taxisInqRtime(taxisID); date2str(vdate, vdatestr, sizeof(vdatestr)); time2str(vtime, vtimestr, sizeof(vtimestr)); fprintf(stdout, " RefTime = %s %s", vdatestr, vtimestr); int tunits = taxisInqTunit(taxisID); if ( tunits != CDI_UNDEFID ) fprintf(stdout, " Units = %s", tunit2str(tunits)); int calendar = taxisInqCalendar(taxisID); if ( calendar != CDI_UNDEFID ) fprintf(stdout, " Calendar = %s", calendar2str(calendar)); if ( taxisHasBounds(taxisID) ) fprintf(stdout, " Bounds = true"); fprintf(stdout, "\n"); if ( taxisInqType(taxisID) == TAXIS_FORECAST ) { vdate = taxisInqFdate(taxisID); vtime = taxisInqFtime(taxisID); date2str(vdate, vdatestr, sizeof(vdatestr)); time2str(vtime, vtimestr, sizeof(vtimestr)); fprintf(stdout, " ForecastRefTime = %s %s", vdatestr, vtimestr); fprintf(stdout, "\n"); } } } fprintf(stdout, " YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss\n"); set_text_color(stdout, RESET, MAGENTA); printTimesteps(streamID, taxisID, cdoVerbose); reset_text_color(stdout); fprintf(stdout, "\n"); } streamClose(streamID); } cdoFinish(); return (0); }
long CTrainersTable::Find(tTableMap& data, const tDATA& filter) { long res = UDF_E_FAIL; do { char query[MAX_QUERY_LEN] = {0}; char tmp[MAX_QUERY_LEN] = {0}; sql::ResultSet* qRes = NULL; bool useFilter = false; if(! m_pConnection) { res = UDF_E_NOCONNECTION; break; } if (!filter.name.empty()) { sprintf(tmp, "%sand `name` like '%%%s%%' ", query, filter.name.c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (0 != filter.clubId) { sprintf(tmp, "%sand `club_id` = %d ", query, filter.clubId); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (!filter.phone.empty()) { sprintf(tmp, "%sand `phone` like '%%%s%%' ", query, filter.phone.c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (!filter.email.empty()) { sprintf(tmp, "%sand `email` like '%%%s%%' ", query, filter.email.c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (!filter.additionalInfo.empty()) { sprintf(tmp, "%sand `contact_info` like '%%%s%%' ", query, filter.additionalInfo.c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (0 != filter.bd) { sprintf(tmp, "%sand `bd` like '%%%s%%' ", query, date2str(filter.bd).c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if(useFilter) { sprintf(tmp, "select * from %s where 1=1 %s", TABLE, query); strncpy(query, tmp, MAX_QUERY_LEN-1); } else { sprintf(query, "select * from %s", TABLE); } qRes = m_pConnection->ExecuteQuery(query); if(!qRes) { res = UDF_E_EXECUTE_QUERY_FAILED; break; } data.clear(); while( qRes && qRes->next()) { tDATA el = {0}; el.id = qRes->getUInt(1); el.clubId = qRes->getUInt(2); el.name = qRes->getString(3); el.bd = str2date(qRes->getString(4)); el.phone = qRes->getString(5); el.additionalInfo = qRes->getString(6); el.email = qRes->getString(7); data.insert(make_pair(el.id, el)); } res = UDF_OK; }while(0); return res; }
long CTrainersTable::UpdateRow(unsigned int nId, const tDATA& data) { long res = UDF_E_FAIL; do { char query[MAX_QUERY_LEN] = {0}; char tmp[MAX_QUERY_LEN] = {0}; bool useFilter = false; if(! m_pConnection) { res = UDF_E_NOCONNECTION; break; } if (0 != data.clubId) { sprintf(tmp, "%s `club_id` = %d,", query, data.clubId); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (!data.name.empty()) { sprintf(tmp, "%s `name` = '%s',", query, data.name.c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (0 != data.bd) { sprintf(tmp, "%s `bd` = '%s',", query, date2str(data.bd).c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (!data.phone.empty()) { sprintf(tmp, "%s `phone` = '%s',", query, data.phone.c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (!data.additionalInfo.empty()) { sprintf(tmp, "%s `contact_info` = '%s',", query, data.additionalInfo.c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if (!data.email.empty()) { sprintf(tmp, "%s `email` = '%s',", query, data.email.c_str()); strncpy(query, tmp, MAX_QUERY_LEN-1); useFilter = true; } if(useFilter) { sprintf(tmp, "update %s set %s `id`=%d where `id`=%d", TABLE, query, nId, nId); strncpy(query, tmp, MAX_QUERY_LEN-1); res = m_pConnection->Execute(query); } }while(0); return res; }
void *Importbinary(void *argument) { int streamID; int gridID = -1, zaxisID, zaxisIDsfc, taxisID, vlistID; int i; int nmiss = 0, n_nan; int ivar; int varID = -1, levelID, tsID; int gridsize; int status; int datatype; dsets_t pfi; int vdate, vtime; int tcur, told,fnum; int tmin=0,tmax=0; char *ch = NULL; int nvars, nlevels, nrecs; int recID; int e, flag; size_t rc, recsize; int recoffset; char *rec = NULL; struct gavar *pvar; struct dt dtim, dtimi; double missval; double fmin, fmax; double *array; double sfclevel = 0; int *recVarID, *recLevelID; int *var_zaxisID; int *var_dfrm = NULL; char vdatestr[32], vtimestr[32]; cdoInitialize(argument); dsets_init(&pfi); status = read_gradsdes(cdoStreamName(0)->args, &pfi); if ( cdoVerbose ) fprintf(stderr, "status %d\n", status); //if ( status ) cdoAbort("Open failed on %s!", pfi.name); if ( status ) cdoAbort("Open failed!"); nrecs = pfi.trecs; nvars = pfi.vnum; pvar = pfi.pvar1; if ( nvars == 0 ) cdoAbort("No variables found!"); gridID = define_grid(&pfi); if ( cdoVerbose ) gridPrint(gridID, gridID, 1); zaxisID = define_level(&pfi, 0); if ( cdoVerbose ) zaxisPrint(zaxisID, zaxisID); zaxisIDsfc = zaxisCreate(ZAXIS_SURFACE, 1); zaxisDefLevels(zaxisIDsfc, &sfclevel); vlistID = vlistCreate(); var_zaxisID = (int*) malloc(nvars*sizeof(int)); recVarID = (int*) malloc(nrecs*sizeof(int)); recLevelID = (int*) malloc(nrecs*sizeof(int)); var_dfrm = (int*) malloc(nrecs*sizeof(int)); recID = 0; for ( ivar = 0; ivar < nvars; ++ivar ) { /* if ( cdoVerbose ) fprintf(stderr, "1:%s 2:%s %d %d %d %d 3:%s %d \n", pvar->abbrv, pvar->longnm, pvar->offset, pvar->recoff, pvar->levels, pvar->nvardims, pvar->varnm, pvar->var_t); */ nlevels = pvar->levels; if ( nlevels == 0 ) { nlevels = 1; varID = vlistDefVar(vlistID, gridID, zaxisIDsfc, TSTEP_INSTANT); } else { if ( nlevels > zaxisInqSize(zaxisID) ) cdoAbort("Variable %s has too many number of levels!", pvar->abbrv); else if ( nlevels < zaxisInqSize(zaxisID) ) { int vid, zid = -1, nlev; for ( vid = 0; vid < ivar; ++vid ) { zid = var_zaxisID[vid]; nlev = zaxisInqSize(zid); if ( nlev == nlevels ) break; } if ( vid == ivar ) zid = define_level(&pfi, nlevels); varID = vlistDefVar(vlistID, gridID, zid, TSTEP_INSTANT); } else varID = vlistDefVar(vlistID, gridID, zaxisID, TSTEP_INSTANT); } var_zaxisID[varID] = vlistInqVarZaxis(vlistID, varID); vlistDefVarName(vlistID, varID, pvar->abbrv); { size_t len = strlen(pvar->varnm); char *longname = pvar->varnm; if ( longname[0] == '\'' && longname[len-1] == '\'' ) { longname[len-1] = 0; longname++; } vlistDefVarLongname(vlistID, varID, longname); } missval = pfi.undef; datatype = DATATYPE_FLT32; if ( pvar->dfrm == 1 ) { datatype = DATATYPE_UINT8; if ( missval < 0 || missval > 255 ) missval = 255; } else if ( pvar->dfrm == 2 ) { datatype = DATATYPE_UINT16; if ( missval < 0 || missval > 65535 ) missval = 65535; } else if ( pvar->dfrm == -2 ) { datatype = DATATYPE_INT16; if ( missval < -32768 || missval > 32767 ) missval = -32768; } else if ( pvar->dfrm == 4 ) { datatype = DATATYPE_INT32; if ( missval < -2147483648 || missval > 2147483647 ) missval = -2147483646; } else if ( pfi.flt64 ) datatype = DATATYPE_FLT64; vlistDefVarDatatype(vlistID, varID, datatype); vlistDefVarMissval(vlistID, varID, missval); for ( levelID = 0; levelID < nlevels; ++levelID ) { if ( recID >= nrecs ) cdoAbort("Internal problem with number of records!"); recVarID[recID] = varID; recLevelID[recID] = levelID; var_dfrm[recID] = pvar->dfrm; recID++; } pvar++; } taxisID = taxisCreate(TAXIS_RELATIVE); taxisDefCalendar(taxisID, CALENDAR_STANDARD); vlistDefTaxis(vlistID, taxisID); streamID = streamOpenWrite(cdoStreamName(1), cdoFiletype()); streamDefVlist(streamID, vlistID); gridsize = pfi.dnum[0]*pfi.dnum[1]; if ( pfi.flt64 ) recoffset = pfi.xyhdr*8; else recoffset = pfi.xyhdr*4; if ( pfi.seqflg ) recoffset += 4; //recsize = pfi.gsiz*4; recsize = pfi.gsiz*8; rec = (char*) malloc(recsize); array = (double*) malloc(gridsize*sizeof(double)); /* if (pfi.tmplat) for ( i = 0; i < pfi.dnum[3]; ++i ) printf("%d %d\n", i, pfi.fnums[i]); */ pfi.infile = NULL; tcur = 0; e = 1; while (1) { /* loop over all times for this ensemble */ if (pfi.tmplat) { /* make sure no file is open */ if (pfi.infile!=NULL) { fclose(pfi.infile); pfi.infile=NULL; } /* advance to first valid time step for this ensemble */ if (tcur==0) { told = 0; tcur = 1; while (pfi.fnums[tcur-1] == -1) tcur++; } else { /* tcur!=0 */ told = pfi.fnums[tcur-1]; /* increment time step until fnums changes */ while (told==pfi.fnums[tcur-1] && tcur<=pfi.dnum[3]) { tcur++; if ( tcur > pfi.dnum[3] ) break; } } /* make sure we haven't advanced past end of time axis */ if (tcur>pfi.dnum[3]) break; /* check if we're past all valid time steps for this ensemble */ if ((told != -1) && (pfi.fnums[tcur-1] == -1)) break; /* Find the range of t indexes that have the same fnums value. These are the times that are contained in this particular file */ tmin = tcur; tmax = tcur-1; fnum = pfi.fnums[tcur-1]; if (fnum != -1) { while (fnum == pfi.fnums[tmax]) { tmax++; if (tmax == pfi.dnum[3]) break; } gr2t(pfi.grvals[3], (gadouble)tcur, &dtim); gr2t(pfi.grvals[3], (gadouble)1, &dtimi); ch = gafndt(pfi.name, &dtim, &dtimi, pfi.abvals[3], pfi.pchsub1, NULL,tcur,e,&flag); if (ch==NULL) cdoAbort("Couldn't determine data file name for e=%d t=%d!",e,tcur); } } else { /* Data set is not templated */ ch = pfi.name; tmin = 1; tmax = pfi.dnum[3]; } /* Open this file and position to start of first record */ if ( cdoVerbose) cdoPrint("Opening file: %s", ch); pfi.infile = fopen(ch,"rb"); if (pfi.infile==NULL) { if (pfi.tmplat) { cdoWarning("Could not open file: %s",ch); break; } else { cdoAbort("Could not open file: %s",ch); } } if (pfi.tmplat) gree(ch,"312"); /* file header */ if (pfi.fhdr > 0) fseeko(pfi.infile, pfi.fhdr, SEEK_SET); /* Get file size */ /* fseeko(pfi.infile,0L,2); flen = ftello(pfi.infile); printf("flen %d tsiz %d\n", flen, pfi.tsiz); fseeko (pfi.infile,0,0); */ for ( tsID = tmin-1; tsID < tmax; ++tsID ) { gr2t(pfi.grvals[3], (gadouble)(tsID+1), &dtim); vdate = cdiEncodeDate(dtim.yr, dtim.mo, dtim.dy); vtime = cdiEncodeTime(dtim.hr, dtim.mn, 0); date2str(vdate, vdatestr, sizeof(vdatestr)); time2str(vtime, vtimestr, sizeof(vtimestr)); if ( cdoVerbose ) cdoPrint(" Reading timestep: %3d %s %s", tsID+1, vdatestr, vtimestr); taxisDefVdate(taxisID, vdate); taxisDefVtime(taxisID, vtime); streamDefTimestep(streamID, tsID); for ( recID = 0; recID < nrecs; ++recID ) { /* record size depends on data type */ if (var_dfrm[recID] == 1) { recsize = pfi.gsiz; } else if ((var_dfrm[recID] == 2) || (var_dfrm[recID] == -2)) { recsize = pfi.gsiz*2; } else { if ( pfi.flt64 ) recsize = pfi.gsiz*8; else recsize = pfi.gsiz*4; } rc = fread (rec, 1, recsize, pfi.infile); if ( rc < recsize ) cdoAbort("I/O error reading record=%d of timestep=%d!", recID+1, tsID+1); /* convert */ if (var_dfrm[recID] == 1) { unsigned char *carray = (void*)(rec + recoffset); for (i = 0; i < gridsize; ++i) array[i] = (double) carray[i]; } else if (var_dfrm[recID] == 2) { unsigned short *sarray = (void*)(rec + recoffset); if (pfi.bswap) gabswp2(sarray, gridsize); for (i = 0; i < gridsize; ++i) array[i] = (double) sarray[i]; } else if (var_dfrm[recID] == -2) { short *sarray = (void*)(rec + recoffset); if (pfi.bswap) gabswp2(sarray, gridsize); for (i = 0; i < gridsize; ++i) array[i] = (double) sarray[i]; } else if (var_dfrm[recID] == 4) { int *iarray = (void*)(rec + recoffset); if (pfi.bswap) gabswp(iarray, gridsize); for (i = 0; i < gridsize; ++i) array[i] = (double) iarray[i]; } else { if ( pfi.flt64 ) { double *darray = (double *) (rec + recoffset); if (pfi.bswap) gabswp(darray, gridsize); for ( i = 0; i < gridsize; ++i ) array[i] = darray[i]; } else { float *farray = (float *) (rec + recoffset); if (pfi.bswap) gabswp(farray, gridsize); for ( i = 0; i < gridsize; ++i ) array[i] = (double) farray[i]; } } fmin = 1.e99; fmax = -1.e99; nmiss = 0; n_nan = 0; for ( i = 0; i < gridsize; ++i ) { if ( array[i] > pfi.ulow && array[i] < pfi.uhi ) { array[i] = pfi.undef; nmiss++; } else if ( DBL_IS_NAN(array[i]) ) { array[i] = pfi.undef; nmiss++; n_nan++; } else { if ( array[i] < fmin ) fmin = array[i]; if ( array[i] > fmax ) fmax = array[i]; } } /* if ( cdoVerbose ) printf("%3d %4d %3d %6d %6d %12.5g %12.5g\n", tsID, recID, recoffset, nmiss, n_nan, fmin, fmax); */ varID = recVarID[recID]; levelID = recLevelID[recID]; streamDefRecord(streamID, varID, levelID); streamWriteRecord(streamID, array, nmiss); } } /* break out if not templating */ if (!pfi.tmplat) break; } /* end of while (1) loop */ processDefVarNum(vlistNvars(vlistID), streamID); streamClose(streamID); vlistDestroy(vlistID); gridDestroy(gridID); zaxisDestroy(zaxisID); taxisDestroy(taxisID); free(array); free(rec); if ( var_zaxisID ) free(var_zaxisID); if ( recVarID ) free(recVarID); if ( recLevelID ) free(recLevelID); if ( var_dfrm ) free(var_dfrm); cdoFinish(); return (0); }
void *Magplot(void *argument) { int operatorID; int varID, recID; int gridsize; int gridID; int nrecs; int levelID; int tsID; int streamID; int vlistID; int nmiss; int nlon, nlat; int nlev; int zaxisID, taxisID; int vdate, vtime; int nparam = 0; int i; char **pnames = NULL; char varname[CDI_MAX_NAME]; double missval; double *array = NULL; double *grid_center_lat = NULL, *grid_center_lon = NULL; char units[CDI_MAX_NAME]; char vdatestr[32], vtimestr[32], datetimestr[64]; cdoInitialize(argument); nparam = operatorArgc(); pnames = operatorArgv(); CONTOUR = cdoOperatorAdd("contour", 0, 0, NULL); SHADED = cdoOperatorAdd("shaded", 0, 0, NULL); GRFILL = cdoOperatorAdd("grfill", 0, 0, NULL); operatorID = cdoOperatorID(); if( nparam ) { if( DBG ) { for( i = 0; i < nparam; i++ ) fprintf( stderr,"Param %d is %s!\n",i+1, pnames[i] ); } VerifyPlotParameters( nparam, pnames, operatorID ); } streamID = streamOpenRead(cdoStreamName(0)); vlistID = streamInqVlist(streamID); taxisID = vlistInqTaxis(vlistID); varID = 0; gridID = vlistInqVarGrid(vlistID, varID); zaxisID = vlistInqVarZaxis(vlistID, varID); missval = vlistInqVarMissval(vlistID, varID); if ( gridInqType(gridID) == GRID_GME ) cdoAbort("GME grid unspported!"); if ( gridInqType(gridID) == GRID_UNSTRUCTURED ) cdoAbort("Unstructured grid unspported!"); if ( gridInqType(gridID) != GRID_CURVILINEAR ) gridID = gridToCurvilinear(gridID, 1); gridsize = gridInqSize(gridID); nlon = gridInqXsize(gridID); nlat = gridInqYsize(gridID); nlev = zaxisInqSize(zaxisID); array = (double*) malloc(gridsize*sizeof(double)); grid_center_lat = (double*) malloc(gridsize*sizeof(double)); grid_center_lon = (double*) malloc(gridsize*sizeof(double)); gridInqYvals(gridID, grid_center_lat); gridInqXvals(gridID, grid_center_lon); /* Convert lat/lon units if required */ gridInqXunits(gridID, units); grid_to_degree(units, gridsize, grid_center_lon, "grid center lon"); gridInqYunits(gridID, units); grid_to_degree(units, gridsize, grid_center_lat, "grid center lat"); tsID = 0; /* HARDCODED THE FILE NAME .. TO BE SENT AS COMMAND LINE ARGUMENT FOR THE MAGICS OPERATOR */ /* init_XMLtemplate_parser( Filename ); updatemagics_and_results_nodes( ); */ init_MAGICS( ); while ( (nrecs = streamInqTimestep(streamID, tsID)) ) { if( ANIM_FLAG ) { if( nrecs > 1 ) { cdoWarning("File has more than one variable! Animation creation not possible!!! \n"); break; } if( tsID % STEP_FREQ ) { tsID++; continue; } } else { if( STEP_FREQ ) { if( tsID % STEP_FREQ ) { tsID++; cdoWarning("NOT PLOTTING STEP %d!!!\n",tsID); continue; } } else { if( tsID ) { cdoWarning("File variables have values at more than one time step! Images created for first time step!!!"); cdoWarning("To plot steps at a particular interval, set 'step_freq' to the frequency of the steps to be plotted!!!"); cdoWarning("To plot steps at random interval, set 'step_freq' to '1' and select the steps using the selection operators!!!"); break; } } } vdate = taxisInqVdate(taxisID); vtime = taxisInqVtime(taxisID); date2str(vdate, vdatestr, sizeof(vdatestr)); time2str(vtime, vtimestr, sizeof(vtimestr)); sprintf( datetimestr, "%s %s", vdatestr, vtimestr ); if( DBG ) fprintf( stderr,"Date %s Time %s\n",vdatestr, vtimestr ); for ( recID = 0; recID < nrecs; recID++ ) { streamInqRecord(streamID, &varID, &levelID); streamReadRecord(streamID, array, &nmiss); vlistInqVarName(vlistID, varID, varname); vlistInqVarUnits(vlistID, varID, units); if ( operatorID == SHADED || operatorID == CONTOUR || operatorID == GRFILL ) { if( DBG ) { if( operatorID == SHADED ) fprintf( stderr," Creating SHADED PLOT for %s\n",varname ); else if( operatorID == CONTOUR ) fprintf( stderr," Creating CONTOUR PLOT for %s\n",varname ); else if( operatorID == GRFILL ) fprintf( stderr," Creating GRFILL PLOT for %s\n",varname ); } if( DBG ) fprintf( stderr,"Plot %d\n",varID ); magplot(cdoStreamName(1)->args, operatorID, varname, units, nlon, nlat, grid_center_lon, grid_center_lat, array, nparam, pnames, datetimestr ); } else fprintf(stderr,"operator not implemented\n"); } if( DBG ) fprintf( stderr,"TimeStep %d\n",tsID ); tsID++; /* if( !STEP_FREQ && tsID ) { cdoWarning("File variables have values at more than one time step! Images created for first time step!!!"); cdoWarning("To plot steps at a particular interval, set 'step_freq' to the frequency of the steps to be plotted!!!"); cdoWarning("To plot steps at random interval, set 'step_freq' to '1' and select the steps using the selection operators!!!"); break; } else { tsID++; if( DBG ) fprintf( stderr,"TimeStep %d\n",tsID ); } */ } if( ANIM_FLAG ) { if( FILE_SPLIT == TRUE ) cdoWarning("File split parameter ignored!!!"); } quit_MAGICS( ); streamClose(streamID); if ( array ) free(array); if ( grid_center_lon ) free(grid_center_lon); if ( grid_center_lat ) free(grid_center_lat); /* quit_XMLtemplate_parser( ); */ cdoFinish(); return (0); }