Example #1
0
File: ref.cpp Project: att/uwin
void sortify_date(const char *s, int len, string &key)
{
  const char *year_end;
  const char *year_start = find_year(s, s + len, &year_end);
  if (!year_start) {
    // Things without years are often `forthcoming', so it makes sense
    // that they sort after things with explicit years.
    key += 'A';
    sortify_words(s, s + len, 0, key);
    return;
  }
  int n = year_end - year_start;
  while (n < 4) {
    key += '0';
    n++;
  }
  while (year_start < year_end)
    key += *year_start++;
  int m = find_month(s, s + len);
  if (m < 0)
    return;
  key += 'A' + m;
  const char *day_end;
  const char *day_start = find_day(s, s + len, &day_end);
  if (!day_start)
    return;
  if (day_end - day_start == 1)
    key += '0';
  while (day_start < day_end)
    key += *day_start++;
}
Example #2
0
void
addtodate(struct event *e, int year, int month, int day)
{
	struct cal_day *d;

	d = find_day(year, month, day);
	e->next = d->events;
	d->events = e;
}
Example #3
0
/******************************************************************************
 *                                                                            *
 ******************************************************************************/
void read_daily_outflow(int julian, int NumOut, AED_REAL *draw)
{
    int csv, i;

    for (i = 0; i < NumOut; i++) {
        csv = outf[i].outf;
        find_day(csv, time_idx, julian);
        draw[i] = get_csv_val_r(csv,outf[i].draw_idx);
    }
}
Example #4
0
/******************************************************************************
 *                                                                            *
 ******************************************************************************/
void read_bubble_data(int julian, AED_REAL *aFlow, int *nPorts,
                                            AED_REAL *bDepth, AED_REAL *bLength)
{
    int csv;

    csv = bubl.bubf;
    find_day(csv, time_idx, julian);

    *aFlow   = get_csv_val_r(csv, bubl.flow_idx);
    *nPorts  = get_csv_val_i(csv, bubl.port_idx);
    *bDepth  = get_csv_val_r(csv, bubl.depth_idx);
    *bLength = get_csv_val_r(csv, bubl.length_idx);
}
Example #5
0
/******************************************************************************
 *                                                                            *
 ******************************************************************************/
void read_daily_inflow(int julian, int NumInf, AED_REAL *flow, AED_REAL *temp,
                                               AED_REAL *salt, AED_REAL *wq)
{
    int csv;
    int i,j,k;

    for (i = 0; i < NumInf; i++) {
        int n_invars = inf[i].n_vars;
        csv = inf[i].inf;
        find_day(csv, time_idx, julian);

        flow[i] = get_csv_val_r(csv,inf[i].flow_idx);
        temp[i] = get_csv_val_r(csv,inf[i].temp_idx);
        salt[i] = get_csv_val_r(csv,inf[i].salt_idx);

        for (j = 0; j < n_invars; j++) {
            if (WQ_VarsIdx[j] < 0) k = j; else k = WQ_VarsIdx[j];
            if (inf[i].in_vars[k] == -1 )
                WQ_INF_(wq, i, k) = 0.;
            else
                WQ_INF_(wq, i, k) = get_csv_val_r(csv,inf[i].in_vars[j]);
        }
    }
}
Example #6
0
/******************************************************************************
 *                                                                            *
 ******************************************************************************/
void read_daily_met(int julian, MetDataType *met)
{
    int csv, i, idx, err = 0;
    AED_REAL now, tomorrow, t_val, sol;

    now = julian;
    tomorrow = now + 1.0;
    loaded_day = now;

    dbgprt("read_daily_met (SUBDAY_MET) in\n");

    csv = metf;
    find_day(csv, time_idx, julian);

    for (i = 0; i < n_steps; i++)
        memset(&submet[i], 0, sizeof(MetDataType));

    i = 0;
    while ( (t_val = get_csv_val_r(csv, time_idx)) < tomorrow) {
        if ( i >= n_steps ) {
            int dd,mm,yy;
            calendar_date(now,&yy,&mm,&dd);
            fprintf(stderr, "Warning! Too many steps in met for %4d-%02d-%02d\n", yy,mm,dd);
            break;
        }

        idx = floor((t_val-floor(t_val))*24+1.e-8); // add 1.e-8 to compensate for rounding error
        // fprintf(stderr, "Read met for %16.8f ; %15.12f (%2d)\n", t_val, (t_val-floor(t_val))*24., idx);
        if ( idx != i ) {
            if ( !err ) {
               int dd,mm,yy;
               calendar_date(now,&yy,&mm,&dd);
               fprintf(stderr, "Possible sequence issue in met for day %4d-%02d-%02d\n", yy,mm,dd);
            }
            idx = i;
            err = 1;
        }
        if (idx >= n_steps) {
            int dd,mm,yy;
            calendar_date(now,&yy,&mm,&dd);
            fprintf(stderr, "Step error for %4d-%02d-%02d!\n", yy,mm,dd);
            break;
        }

        // Rain is the exception - goes as is
        submet[idx].Rain        = get_csv_val_r(csv, rain_idx) * rain_factor;
        submet[idx].RelHum      = get_csv_val_r(csv, hum_idx)  * rh_factor;
        if ( submet[idx].RelHum > 100. ) submet[idx].RelHum = 100.;

        if ( lwav_idx != -1 )
            submet[idx].LongWave  = get_csv_val_r(csv, lwav_idx) * lw_factor;
        else
            submet[idx].LongWave  = 0.;
        if ( sw_idx != -1 )
            submet[idx].ShortWave = get_csv_val_r(csv, sw_idx) * sw_factor;
        else
            submet[idx].ShortWave = 0.;

        switch ( rad_mode ) {
            case 0 : // use the value already read.
            case 1 :
            case 2 :
                break;
            case 3 :
            case 4 :
            case 5 :
                sol = calc_bird(Longitude, Latitude, julian, idx*3600, timezone_m);
                if ( rad_mode == 4 )
                    sol = clouded_bird(sol, submet[idx].LongWave);
                if ( rad_mode == 3 )
                    submet[idx].LongWave = cloud_from_bird(sol, submet[idx].ShortWave);
                submet[idx].ShortWave = sol;
                break;
        }

        submet[idx].AirTemp     = get_csv_val_r(csv, atmp_idx) * at_factor;
        submet[idx].WindSpeed   = get_csv_val_r(csv, wind_idx) * wind_factor;

        // Read in rel humidity into svd (%), and convert to satvap
        submet[idx].SatVapDef   =  (submet[idx].RelHum/100.) * saturated_vapour(submet[idx].AirTemp);

        if ( have_snow )
             submet[idx].Snow = get_csv_val_r(csv,snow_idx);
        else submet[idx].Snow = 0. ;

        if ( have_rain_conc ) {
            submet[idx].RainConcPO4 = get_csv_val_r(csv, rpo4_idx);
            submet[idx].RainConcTp  = get_csv_val_r(csv, rtp_idx);
            submet[idx].RainConcNO3 = get_csv_val_r(csv, rno3_idx);
            submet[idx].RainConcNH4 = get_csv_val_r(csv, rnh4_idx);
            submet[idx].RainConcTn  = get_csv_val_r(csv, rtn_idx);
            submet[idx].RainConcSi  = get_csv_val_r(csv, rsi_idx);
        } else {
            submet[idx].RainConcPO4 = 0.;
            submet[idx].RainConcTp  = 0.;
            submet[idx].RainConcNO3 = 0.;
            submet[idx].RainConcNH4 = 0.;
            submet[idx].RainConcTn  = 0.;
            submet[idx].RainConcSi  = 0.;
        }
        i++;

        if (!load_csv_line(csv) ) break;
    }

    *met = submet[0];
}