TEST_F(tempdir, load_time) { char buf[PATH_MAX]; time_t tm = 3; time_t now = time(NULL); snprintf(buf, sizeof(buf), "%s/load", self->path); ASSERT_EQ(0, write_time(buf, 0)); ASSERT_EQ(-1, load_disk_timestamp(buf, &tm)); ASSERT_EQ(3, tm); ASSERT_EQ(0, write_time(buf, INT_MAX)); ASSERT_EQ(-1, load_disk_timestamp(buf, &tm)); ASSERT_EQ(3, tm); ASSERT_EQ(0, write_time(buf, now)); ASSERT_EQ(0, truncate(buf, 2)); ASSERT_EQ(-1, load_disk_timestamp(buf, &tm)); ASSERT_EQ(3, tm); ASSERT_EQ(0, unlink(buf)); ASSERT_EQ(-1, load_disk_timestamp(buf, &tm)); ASSERT_EQ(3, tm); ASSERT_EQ(0, write_time(buf, now)); ASSERT_EQ(0, load_disk_timestamp(buf, &tm)); ASSERT_EQ(now, tm); }
void SerialConsole::commandStatus(const char *, const uint8_t) { DS3231 &rtc = DS3231::get(); State &state = State::get(); ChargeMonitor &cm = ChargeMonitor::get(); uart << PGM << STR_STATUS_TIME; write_time(uart, rtc); uart << CR; uart << PGM << STR_STATUS_TEMP; uart << rtc.readTemp() << 'C' << CR; uart << PGM << (STR_STATUS_J1772); uart << static_cast<char>('A' - 1 + state.j1772) << CR; uart << PGM << (STR_STATUS_CHARGING); if (!cm.isCharging()) uart << PGM << STR_OFF; else uart << cm.chargeCurrent() << "mA"; uart << ' ' << (cm.chargeDuration() / 1000 / 60) << "min "; uart << cm.wattHours() << "Wh" << CR; uart << PGM << (STR_STATUS_READY); uart << static_cast<char>('0' + state.ready) << CR; uart << PGM << (STR_STATUS_MAX_CURRENT); uart << state.max_amps_limit << 'A' << '/'; uart << state.max_amps_target << 'A' << CR; uart << CR; }
int vlogmsg(FILE* fp, const char* tag, const char* fmt, va_list ap){ pthread_mutex_lock(&mutex); write_time(fp); write_tag(fp, tag); /* centered */ int ret = vfprintf(fp, fmt, ap); pthread_mutex_unlock(&mutex); return ret; }
/* Handle showing the clock. */ void show_clock_display( char *a, char *b ){ strcpy(a, "Press 0 for menu" ); write_time(&time, b); int_to_ascii(temperature, b + 11, ' ', 4); b[14] = ' '; b[15] = 'F'; }
TEST_F (tempdir, save_time) { char buf[PATH_MAX]; time_t now = time (NULL); time_t tm; snprintf (buf, sizeof (buf), "%s/save", self->path); ASSERT_EQ (0, write_time (buf, now)); ASSERT_EQ (0, read_time (buf, &tm)); EXPECT_EQ (now, tm); }
void show_stopwatch( char *a, char *b ){ unsigned ds; strcpy(a, "1:On 2:Off 3:Clr"); LOCK_CLOCK(); ds = stopwatch.deci_seconds; UNLOCK_CLOCK(); write_time(&stopwatch, b); b[8] = '.'; int_to_ascii((ds % 600) % 10, b + 9, ' ', 2); }
void write_chat1(struct data_bag bag)//群聊聊天信息记录 { int fd; if((fd=open("group_chat",O_RDWR|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR))==-1) myerr("open",__LINE__); write_time("group_chat"); write(fd,bag.name,strlen(bag.name)+1); write(fd,"说:",4); write(fd,bag.buf,strlen(bag.buf)+1); write(fd,"\n",2); close(fd); }
void write_chat2(struct data_bag bag)//私聊聊天信息记录1 { int fd; if((fd=open(bag.targetname,O_RDWR|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR))==-1) myerr("open",__LINE__); write_time(bag.targetname); write(fd,bag.name,strlen(bag.name)+1); write(fd,"悄悄地对你说:",20); write(fd,bag.buf,strlen(bag.buf)+1); write(fd,"\n",2); close(fd); }
bool log_info(const char *fmt, ...) { if (!Log.inited) return false; va_list ap; write_time(&Log); va_start(ap, fmt); write_msg(&Log, fmt, ap); va_end(ap); return log_to_file(&Log); }
bool log_debug(const char *fmt, ...) { if (!Log.inited || !Log.debug) return false; va_list ap; write_time(&Log); strcat(Log.buffer, "*DEBUG* "); va_start(ap, fmt); write_msg(&Log, fmt, ap); va_end(ap); return log_to_file(&Log); }
bool log_fatal(const char *fmt, ...) { if (!Log.inited) return false; va_list ap; write_time(&Log); strcat(Log.buffer, "*FATAL* "); va_start(ap, fmt); write_msg(&Log, fmt, ap); va_end(ap); return log_to_file(&Log); }
void show_timer( char *a, char *b ){ if (set_timer_position == 0 && timer.hours != MAX_HOURS) { time_t difference; LOCK_CLOCK(); difference.hours = timer.hours - time.hours; difference.deci_seconds = timer.deci_seconds - time.deci_seconds; UNLOCK_CLOCK(); strcpy(a, "Time left:"); write_time(&difference, b); b[8] = '.'; int_to_ascii((difference.deci_seconds % 600) % 10, b + 9, ' ', 2); } else { show_time_prompt("New Timer MM:SS", a, b, set_timer_buffer); } }
void print_sol(struct sol_rec *sp) { char timestr[24]; fprintf(logfp,"%s ",write_time(sp->time,timestr)); if (sp->error[2] != NULLVAL) fprintf(logfp,"%6.3f+%6.3f ",sp->lat,sp->error[2]); else fprintf(logfp,"%6.3f+%6s ",sp->lat,""); if (sp->error[3] != NULLVAL) fprintf(logfp,"%6.3f+%6.3f ",sp->lon,sp->error[3]); else fprintf(logfp,"%6.3f+%6s ",sp->lon,""); if (sp->error[4] != NULLVAL) fprintf(logfp,"%.0f+%4.1f ",sp->depth,sp->error[4]); else fprintf(logfp,"%.0f+%4s ",sp->depth,""); if (sp->sdobs != NULLVAL) fprintf(logfp,"sd=%3.1f\n",sp->sdobs); else fprintf(logfp,"sd=%3s\n",""); return; }
void write_ts(double wrts) { int i,j,k,m; int status; char message[144]; int err; double *wrdy; #ifdef WRTTS wrdy = malloc(sizeof(double)); #endif /********** set means to zero */ /* 2d variables */ if (flags[8]) set_fix_darray2d_zero(mn_eaml); /*--------------------------------------- * * write tracer values on output field * *--------------------------------------*/ printf("write output field\n"); if (flags[8]) add_fix_darray2d(mn_eaml, eaml); //HF outer if, inner for loops, instead of vice versa! //HF think about writing appropriate subroutine(s)!!! if (flags[1]) copy_darray3d(mn_u, u, NZ, NXMEM, NYMEM); /*{ for (k=0;k<NZ;k++) for (i=0;i<NXMEM;i++) for (j=0;j<NYMEM;j++) mn_u[k][i][j] = u[k][i][j]; } */ if (flags[2]) copy_darray3d(mn_v, v, NZ, NXMEM, NYMEM); /* { for (k=0;k<NZ;k++) for (i=0;i<NXMEM;i++) for (j=0;j<NYMEM;j++) mn_v[k][i][j] = v[k][i][j]; }*/ if (flags[3]) { for (k=0;k<NZ;k++) for (i=0;i<NXMEM;i++) for (j=0;j<NYMEM;j++) mn_h[k][i][j] = h[k][i][j]; } if (flags[4]) copy_darray3d(mn_uhtm, uhtm, NZ, NXMEM, NYMEM); /*{ for (k=0;k<NZ;k++) for (i=0;i<NXMEM;i++) for (j=0;j<NYMEM;j++) mn_uhtm[k][i][j] = uhtm[k][i][j]; }*/ if (flags[5]) copy_darray3d(mn_vhtm, vhtm, NZ, NXMEM, NYMEM); /*{ for (k=0;k<NZ;k++) for (i=0;i<NXMEM;i++) for (j=0;j<NYMEM;j++) mn_vhtm[k][i][j] = vhtm[k][i][j]; }*/ if (flags[6]) { for (k=0;k<NZ;k++) for (i=0;i<NXMEM;i++) for (j=0;j<NYMEM;j++) mn_ea[k][i][j] = ea[k][i][j]; } if (flags[7]) { for (k=0;k<NZ;k++) for (i=0;i<NXMEM;i++) for (j=0;j<NYMEM;j++) mn_eb[k][i][j] = Salttm[k][i][j]; } #ifdef AGE if (flags[9]) copy_darray3d(mn_age, age, NZ, NXMEM, NYMEM); #endif if (flags[18]) { for (k=0;k<2;k++) for (i=0;i<NXMEM;i++) for (j=0;j<NYMEM;j++) mn_rml[k][i][j] = rml[k][i][j]; } printf("Writing variables for sub timestep %i out to netCDF\n\n",itts); // open netcdf file for each writing status = nc_open(output_filename, NC_WRITE, &cdfid); if (status != NC_NOERR) { strcpy(message,"Opening file"); strcat(message,output_filename); handle_error(message,status); } *wrdy = wrts; err = write_time(cdfid,fn,timeid[0],nrec, wrdy); if (err == -1) printf("Error writing day.\n"); for (m=0;m<NOVARS;m++) if (flags[m]) { err = write_field(cdfid, fn, vars[m], varinfo[varmap[m]], nrec,var[m]); if (err == -1) printf("Error writing %s.\n",vars[m].name); } close_file(&cdfid, &fn); printf("netcdf record = %d\n",nrec++); }
void keyscan() //按键函数 { if(key1==0) { delay(5); if(key1==0) { keyflag++; //键一按下,标志位加一 while(!key1); if(keyflag==1) { TR0=0; //关中断 write_com(0x80+0x40+14); //调整秒 write_com(0x0f); //光标闪烁 } if(keyflag==2) { write_com(0x80+0x40+11); //调整分 } if(keyflag==3) { write_com(0x80+0x40+8); //调整时 } if(keyflag==4) { write_com(0x80+14); //调整日 } if(keyflag==5) { write_com(0x80+11); //调整月 } if(keyflag==6) { write_com(0x80+8); //调整年 } if(keyflag==7) { keyflag=0; //标志位复位 write_com(0x0c); //关闭光标的闪烁 TR0=1; //重新开启中断,走秒 } } } if(keyflag!=0) { if(key2==0) { delay(5); //松手检测 if(key2==0) //按键二对所调整的数值加一 { while(!key2); if(keyflag==1) { sec++; if(sec==60) sec=0; write_time(14,sec); write_com(0x80+0x40+14); } if(keyflag==2) { min++; if(min==60) min=0; write_time(11,min); write_com(0x80+0x40+11); } if(keyflag==3) { hour++; if(hour==24) hour=0; write_time(8,hour); write_com(0x80+0x40+8); } if(keyflag==4) { day++; if(day==32) day=0; write_date(14,day); write_com(0x80+14); } if(keyflag==5) { month++; if(month==13) month=0; write_date(11,month); write_com(0x80+11); } if(keyflag==6) { year++; if(year==100) year=0; write_date(8,year); write_com(0x80+8); } } } } if(key3==0) { delay(5); if(key3==0) //按键三对所调整的数值减一 { while(!key3); if(keyflag==1) { sec--; if(sec==-1) sec=59; write_time(14,sec); write_com(0x80+0x40+14); } if(keyflag==2) { min--; if(min==-1) min=59; write_time(11,min); write_com(0x80+0x40+11); } if(keyflag==3) { hour--; if(hour==-1) hour=23; write_time(8,hour); write_com(0x80+0x40+8); } if(keyflag==4) { day--; if(day==0) day=31; write_date(14,day); write_com(0x80+15); } if(keyflag==5) { month--; if(month==0) month=12; write_date(11,month); write_com(0x80+11); } if(keyflag==6) { year--; if(year==-1) year=99; write_date(8,year); write_com(0x80+8); } } } }
template<class msg_type> void operator()(msg_type & msg) const { ::time_t val = ::time(0); write_time(msg, val); }
int main(void) { double inmon, tmon; double mon, nxt, lst; double *iyr; double *nyr; double dyr, day; double ndyr; double *dy; double dmon[12]; double dbmon; double yearday; int imon, inxt, ilst; # ifndef WRTTS int itts; /* tracer time step counter */ # endif int nmnfirst; #ifdef SEPFILES double smon, snxt; int ismon, isnxt, ihnxt; #endif #ifndef WRTTS size_t nrec = 0; #endif int err, i, j, k; int cmon; int nmn; double frac; static int m; #ifndef WRTTS int varmap[NOVARS]; FILE *fn; char output_filename[200]; #endif char run_name[200]; char restart_filename[200]; struct vardesc var_out[NOVARS]; #ifndef WRTTS struct varcdfinfo varinfo[NOVARS]; int nvar = 0, cdfid, timeid[2]; #endif extern int flags[NOVARS]; extern int rflags[NOVARS]; //BX-a for testing only int status; char message[144]; //BX-e //BX allocate tracer fields err = alloc_arrays(); if (err) printf("Error allocating arrays.\n"); err = alloc_trac(); if (err) printf("Error allocating tracer field.\n"); iyr = malloc(sizeof(double)); nyr = malloc(sizeof(double)); dy = malloc(sizeof(double)); mlen[0] = 31; /* January */ mlen[1] = 28; /* February */ mlen[2] = 31; /* March */ mlen[3] = 30; /* April */ mlen[4] = 31; /* May */ mlen[5] = 30; /* June */ mlen[6] = 31; /* July */ mlen[7] = 31; /* August */ mlen[8] = 30; /* September */ mlen[9] = 31; /* October */ mlen[10] = 30; /* November */ mlen[11] = 31; /* December */ dmon[0] = 0.0; for (i = 1; i <= 11; i++) { dmon[i] = dmon[i - 1] + mlen[i - 1]; } /*----------------------------------* * * get user input * *----------------------------------*/ { char line[100]; int scan_count, done = 1; printf("Enter directory to use to read.\n"); fgets(directory, sizeof(directory), stdin); directory[strlen(directory) - 1] = '\0'; k = strlen(directory); if (k > 0) if (directory[k - 1] != '/') { directory[k] = '/'; directory[k + 1] = '\0'; printf("Using directory %s first.\n", directory); } strcat(directory, fname); strcpy(fname, directory); printf("file path = %s\n", fname); while (done) { printf( "\nEnter the starting month and the total months to integrate.\n"); fgets(line, sizeof(line), stdin); line[strlen(line) - 1] = '\0'; scan_count = sscanf(line, "%lg, %lg,", &inmon, &tmon); if (scan_count == 2) { if (inmon < 0 || tmon < 0) printf("Negative values not allowed\n"); else done = 0; } else printf("Incorrect number of values, %d, read.\n", scan_count); } printf("\ninitial month = %g \n", inmon); printf("final month = %g \n", inmon + tmon - 1); printf("total months = %g \n\n", tmon); /*----------------------------------- * * set output print flags to 0 * * added restart flags as a restart bug fix until * memory restriction problem is solved 31OCT07 BX * *----------------------------------*/ for (i = 0; i <= NOVARS - 1; i++) flags[i] = 0; for (i = 0; i <= NOVARS - 1; i++) rflags[i] = 0; flags[1] = 0; flags[2] = 0; /* u,v */ rflags[1] = 0; rflags[2] = 0; /* u,v */ flags[0] = 0; flags[3] = 0; /* D, h */ rflags[0] = 0; rflags[3] = 0; /* D, h */ flags[4] = 0; flags[5] = 0; /* uhtm, vhtm */ rflags[4] = 0; rflags[5] = 0; /* uhtm, vhtm */ flags[6] = 0; flags[7] = 0; flags[8] = 0; /* ea, eb, eaml */ flags[18] = 0; /* ML potential density */ rflags[18] = 0; /* ML potential density */ #ifdef AGE flags[9] = 1; rflags[9] = 1; /* ideal age tracer*/ #endif printf("Enter base name for output\n"); fgets(run_name, sizeof(run_name), stdin); run_name[strlen(run_name) - 1] = '\0'; sprintf(output_filename, "%s.%04g.nc", run_name, inmon + tmon - 1); printf("Create NetCDF output file '%s'.\n", output_filename); } // end of block "get user input" //DT lastsave = -1; //DT /*----------------------------------- * * allocate and initialize fields * *----------------------------------*/ read_grid(); printf("Done reading grid or metric file.\n"); set_metrics(); printf("Done setting metrics.\n"); /* Copy the variable descriptions to a list of the actual output variables. */ for (i = 0; i < NOVARS; i++) if (flags[i] > 0) { var_out[nvar] = vars[i]; varmap[i] = nvar; nvar++; } // force float precision output with last argument printf("Making NETCDF %s file\n", output_filename); create_file(output_filename, NETCDF_FILE, var_out, nvar, &fn, &cdfid, timeid, varinfo, 1); // don't force // create_file(output_filename, NETCDF_FILE, var_out, nvar, &fn, &cdfid, timeid, varinfo, 0); printf("Closing file \n"); close_file(&cdfid, &fn); /* Allocate the memory for the fields to be calculated. */ alloc_fields(); /* initialize tracer pointers */ for (m = 0; m < NOVARS; m++) { if (flags[m]) for (k = 0; k < varsize[m]; k++) var[m][k] = 0.0; } /********** set means to zero */ /* 2d variables */ if (flags[8]) set_fix_darray2d_zero(mn_eaml); /* 3d variables */ if (flags[1]) set_darray3d_zero(mn_u, NZ, NXMEM, NYMEM); if (flags[2]) set_darray3d_zero(mn_v, NZ, NXMEM, NYMEM); if (flags[3]) set_darray3d_zero(mn_h, NZ, NXMEM, NYMEM); if (flags[4]) set_darray3d_zero(mn_uhtm, NZ, NXMEM, NYMEM); if (flags[5]) set_darray3d_zero(mn_vhtm, NZ, NXMEM, NYMEM); if (flags[6]) set_darray3d_zero(mn_ea, NZ, NXMEM, NYMEM); if (flags[7]) set_darray3d_zero(mn_eb, NZ, NXMEM, NYMEM); #ifdef AGE if (flags[9]) set_darray3d_zero(mn_age, NZ, NXMEM, NYMEM); #endif printf("Reading bathymetry, D.\n"); // initialize D to be all ocean first for (i = 0; i <= NXMEM - 1; i++) { for (j = 0; j <= NYMEM - 1; j++) { D[i][j] = MINIMUM_DEPTH; } } #ifndef USE_CALC_H printf("calling read_D\n"); read_D(); for (i = 0; i <= NXMEM - 1; i++) for (j = 0; j <= NYMEM - 1; j++) if (D[i][j] < 10.0) D[i][j] = MINIMUM_DEPTH; #endif read_grid(); set_metrics(); dyr = inmon / 12; smon = (double) ((int) inmon % NMONTHS); mon = 12 * modf(dyr, iyr); printf("\n initial mon = %g - %g - %g \n\n", inmon, smon, mon); imon = (int) (mon + 0.00001); /* Begin edit DT */ int iyear = floor((inmon + imon) / 12); theyear = iyear; #ifdef RESTART theyear++; iyear++; #endif /* End edit DT */ inxt = imon + 1; ismon = (int) (smon + 0.00001) % NMONTHS; isnxt = (ismon+1) % NMONTHS; ihnxt = (ismon+2) % NMONTHS; dbmon = (double) inmon; lst = 12 * modf((dbmon - 1 + 12) / 12, iyr); ilst = (int) (lst + 0.00001); // ashao: Read in next month's isopycnal thickness fields // (will be copied at the beginning of the integration) // Done this way so that if hindcasts are used the physical fields switch smoothly // to/from climatological fields //BX files are not in regular order (uvw are midmonth and h starts with last month) currtime = BEGYEAR; if (usehindcast) { // Check to see if simulation started within the hindcast years if ( (currtime >= BEGHIND) || (currtime < (ENDHIND+1) ) ) { hindindex=inmon; read_h(ismon,hend,"hind"); } } else { read_h(ismon, hend,"clim"); } // for files in regular order (h before uvw) use code here //BX // read_uvw(imon,1); //BX // read_h(imon,inxt); #ifdef USE_CALC_H z_sum(h, D); #endif printf("\nSetting up and initializing\n"); #ifdef RESTART initialize(inmon,run_name); #else initialize(imon); #endif nmn = 0; //HF the next line should be in init.h (and be optional!) #undef OUTPUT_IC #ifdef OUTPUT_IC /*----------------------------------- * * write tracer initial conditions * *----------------------------------*/ printf("Writing initial condition variables out to netCDF\n\n",cmon); // open netcdf file for each writing status = nc_open(output_filename, NC_WRITE, &cdfid); if (status != NC_NOERR) { strcpy(message,"Opening file"); strcat(message,output_filename); handle_error(message,status); } err = write_time(cdfid,fn,timeid[0],nrec, dy); if (err == -1) printf("Error writing day.\n"); if (flags[3]) { for (k=0;k<NZ;k++) for (i=0;i<NXMEM;i++) for (j=0;j<NYMEM;j++) mn_h[k][i][j] += h[k][i][j]; } #ifdef AGE if (flags[9]) add_darray3d(mn_age, age, NZ, NXMEM, NYMEM); /*{ for (k=0;k<NZ;k++) for (i=0;i<NXMEM;i++) for (j=0;j<NYMEM;j++) mn_age[k][i][j] += age[k][i][j]; }*/ #endif /* AGE */ for (m=0;m<NOVARS;m++) if (flags[m]) { err = write_field(cdfid, fn, vars[m], varinfo[varmap[m]], nrec,var[m]); if (err == -1) printf("Error writing %s.\n",vars[m].name); } // close file after each writing close_file(&cdfid, &fn); printf("netcdf record = %d\n",nrec++); #endif /* OUTPUT_IC */ /*-------------------------------------------------------------------* * * begin integration loop * *-------------------------------------------------------------------*/ mon = 0.0; /* reiniti */ nmnfirst = 1; for (cmon = inmon; cmon < inmon + tmon; cmon++) { nmn++; dyr = cmon / 12.0; ndyr = (cmon + 1) / 12.0; dbmon = (double) cmon; lst = 12 * modf((dbmon - 1 + 12) / 12, iyr); ilst = (int) (lst + 0.00001); printf("double-mon=%g,lastmon=%g,ilst=%i\n", dbmon, lst, ilst); smon = (double) ((int) cmon % NMONTHS); snxt = (double) ((int) (cmon + 1) % NMONTHS); mon = 12.0 * modf(dyr, iyr); nxt = 12.0 * modf(ndyr, nyr); printf("the current month is %i-%g-%g \n", cmon, smon, mon); printf("the current year is %g \n", *iyr); imon = (int) (mon + 0.00001); inxt = (int) (nxt + 0.00001); ismon = (int) (smon + 0.00001); isnxt = (int) (snxt + 0.00001); yearday = 0; for (i=0;i<=imon;i++) yearday += dmon[imon]; currtime = *iyr + BEGYEAR + yearday/365.0; day = (*iyr) * 365.0 + dmon[imon]; *dy = currtime; printf("the current day is -%g- \n", *dy); printf("the current ismon/smon is -%i-%g- \n", ismon, smon); printf("the next smonth/mean index: -%i- \n", isnxt); dt = ((double) mlen[imon]); dt = dt * 86400 / (double) NTSTEP; for (itts = 1; itts <= NTSTEP; itts++) { printf("\nSub time step number= %i \n", itts); /*----------------------------------- * * get physical fields and bc's * *----------------------------------*/ printf("Month %d timestamp Start: %4.2f End: %4.2f\n",cmon,currtime,currtime+dt/31536000); currtime += dt / 31536000; //ashao: advance currenttime copy_2fix_darray3d(hstart,hend,NZ,NXMEM,NYMEM); copy_2fix_darray3d(h,hstart,NZ,NXMEM,NYMEM); if (usehindcast) { if ( ( cmon >= starthindindex) && ( hindindex <= (numhindmonths-1) )) { printf("Reading in UVW from hindcast\n"); read_uvw(hindindex,"hind"); read_h(hindindex,hend,"hind"); hindindex++; } else { printf("Reading in UVW from climatology\n"); read_uvw(isnxt,"clim"); read_h(isnxt, hend,"clim"); } } else { printf("Reading in UVW from climatology\n"); read_uvw(isnxt,"clim"); read_h(isnxt, hend,"clim"); } printf("Month- hstart:%d hend:%d\n",ismon,isnxt); /*----------------------------------- * * integrate 1 time step * *----------------------------------*/ printf("step fields - day = %g\n\n", day); step_fields(iyear, itts, imon, iterno); // modified ashao /*-------------------------------------------------------------------* * * end integration loop * *-------------------------------------------------------------------*/ /*----------------------------------- * * calculate tracer averages * *----------------------------------*/ printf("calculate tracer averages\n"); if (flags[8]) add_fix_darray2d(mn_eaml, eaml); if (flags[1]) add_darray3d(mn_u, u, NZ, NXMEM, NYMEM); if (flags[2]) add_darray3d(mn_v, v, NZ, NXMEM, NYMEM); if (flags[3]) { for (k = 0; k < NZ; k++) for (i = 0; i < NXMEM; i++) for (j = 0; j < NYMEM; j++) { mn_h[k][i][j] += h[k][i][j]; } } if (flags[4]) add_darray3d(mn_uhtm, uhtm, NZ, NXMEM, NYMEM); if (flags[5]) add_darray3d(mn_vhtm, vhtm, NZ, NXMEM, NYMEM); if (flags[6]) add_darray3d(mn_ea, ea, NZ, NXMEM, NYMEM); if (flags[7]) add_darray3d(mn_eb, eb, NZ, NXMEM, NYMEM); #ifdef AGE //DT // if (flags[9]) add_darray3d(mn_age, age, NZ, NXMEM, NYMEM); if (flags[9]) { for (k = 0; k < NZ; k++) { for (i = 0; i < NXMEM; i++) { for (j = 0; j < NYMEM; j++) { if (age[k][i][j] > 0.0) { { mn_age[k][i][j] += age[k][i][j]; } }}}}} //DT #endif if (flags[18]) { for (k = 0; k < 2; k++) for (i = 0; i < NXMEM; i++) for (j = 0; j < NYMEM; j++) mn_rml[k][i][j] += rml[k][i][j]; } /* calculate the mean */ if (nmn == WRINT && itts == 1) { printf("***nmn= %i, itts= %i, nmnfirst= %i\n", nmn, itts, nmnfirst); frac = 1.0 / ((double) nmn * (double) NTSTEP); if (flags[8]) mult_fix_darray2d(mn_eaml, frac); if (flags[1]) mult_darray3d(mn_u, NZ, NXMEM, NYMEM, frac); if (flags[2]) mult_darray3d(mn_v, NZ, NXMEM, NYMEM, frac); if (flags[3]) mult_darray3d(mn_h, NZ, NXMEM, NYMEM, frac); if (flags[4]) mult_darray3d(mn_uhtm, NZ, NXMEM, NYMEM, frac); if (flags[5]) mult_darray3d(mn_vhtm, NZ, NXMEM, NYMEM, frac); if (flags[6]) mult_darray3d(mn_ea, NZ, NXMEM, NYMEM, frac); if (flags[7]) mult_darray3d(mn_eb, NZ, NXMEM, NYMEM, frac); #ifdef AGE if (flags[9]) mult_darray3d(mn_age, NZ, NXMEM, NYMEM, frac); #endif if (flags[18]) mult_darray3d_mv(mn_rml, 2, NXMEM, NYMEM, frac, D, misval); /*----------------------------------- * * write tracer averages and reset to 0 * *----------------------------------*/ printf("Writing month %i variables out to netCDF\n\n", cmon); status = nc_open(output_filename, NC_WRITE, &cdfid); if (status != NC_NOERR) { strcpy(message, "Opening file"); strcat(message, output_filename); handle_error(message, status); } err = write_time(cdfid, fn, timeid[0], nrec, dy); if (err == -1) printf("Error writing day.\n"); for (m = 0; m < NOVARS; m++) if (flags[m]==1) { printf("m = %d\n",m); err = write_field(cdfid, fn, vars[m], varinfo[varmap[m]], nrec, var[m]); if (err == -1) printf("Error writing %s.\n", vars[m].name); } close_file(&cdfid, &fn); /* reset all means to zero */ nmn = 0; if (flags[8]) set_fix_darray2d_zero(mn_eaml); if (flags[1]) set_darray3d_zero(mn_u, NZ, NXMEM, NYMEM); if (flags[2]) set_darray3d_zero(mn_v, NZ, NXMEM, NYMEM); if (flags[3]) set_darray3d_zero(mn_h, NZ, NXMEM, NYMEM); if (flags[4]) set_darray3d_zero(mn_uhtm, NZ, NXMEM, NYMEM); if (flags[5]) set_darray3d_zero(mn_vhtm, NZ, NXMEM, NYMEM); if (flags[6]) set_darray3d_zero(mn_ea, NZ, NXMEM, NYMEM); if (flags[7]) set_darray3d_zero(mn_eb, NZ, NXMEM, NYMEM); if (flags[18]) set_darray3d_zero(mn_rml, 2, NXMEM, NYMEM); #ifdef AGE if (flags[9]) set_darray3d_zero(mn_age, NZ, NXMEM, NYMEM); #endif // begin ashao // end ashao printf("netcdf record = %d\n", nrec + 1); nrec++; } /* end if nmn==WRITEINT */ /*-------------------------------------------------------------------* * * end integration loop * *-------------------------------------------------------------------*/ } /* end itts loop over NTSTEP */ } /* end while */ //BX-a /*----------------------------------- * * write restart file * *----------------------------------*/ // First write the up-to-date tracer values to the mean fields. // In order to save memory the instantaneous values for the // restart will be written on mean fields in the restart file. printf("start of array copying\n"); //HF #ifdef SMOOTH_REST copy_fix_darray3d(mn_h, h, NZ, NXMEM, NYMEM); //HF #endif #ifdef AGE copy_darray3d(mn_age, age, NZ, NXMEM, NYMEM); #endif for (k = 0; k < NZ; k++) { for (i = 0; i < NXMEM; i++) { for (j = 0; j < NYMEM; j++) { } /* for j loop */ } /* for i loop */ } /* for k loop */ // Second, create restart file name and open file sprintf(restart_filename, "restart.%s.%04d.nc", run_name, cmon); printf("Writing NetCDF restart file '%s'.\n\n", restart_filename); /* Copy the variable descriptions to a list of the actual restart variables. */ nvar = 0; for (i = 0; i < NOVARS; i++) if (rflags[i] > 0) { var_out[nvar] = vars[i]; varmap[i] = nvar; nvar++; } // do NOT force float precision output with last argument create_file(restart_filename, NETCDF_FILE, var_out, nvar, &fn, &cdfid, timeid, varinfo, 0); for (m = 0; m < NOVARS; m++) if (rflags[m]) { err = write_field(cdfid, &fn, vars[m], varinfo[varmap[m]], 0, var[m]); if (err == -1) printf("Error writing %s.\n", vars[m].name); } close_file(&cdfid, &fn); printf("\n programme termine normallement. \n"); return (0); }
void rc_logger_open(const char *level) { int slave_tty; struct termios tt; struct winsize ws; char *buffer; struct pollfd fd[2]; int s = 0; size_t bytes; int i; FILE *log = NULL; if (!rc_conf_yesno("rc_logger")) return; if (pipe(signal_pipe) == -1) eerrorx("pipe: %s", strerror(errno)); for (i = 0; i < 2; i++) if ((s = fcntl (signal_pipe[i], F_GETFD, 0) == -1 || fcntl (signal_pipe[i], F_SETFD, s | FD_CLOEXEC) == -1)) eerrorx("fcntl: %s", strerror (errno)); if (isatty(STDOUT_FILENO)) { tcgetattr(STDOUT_FILENO, &tt); ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws); if (openpty(&rc_logger_tty, &slave_tty, NULL, &tt, &ws)) return; } else if (openpty(&rc_logger_tty, &slave_tty, NULL, NULL, NULL)) return; if ((s = fcntl(rc_logger_tty, F_GETFD, 0)) == 0) fcntl(rc_logger_tty, F_SETFD, s | FD_CLOEXEC); if ((s = fcntl(slave_tty, F_GETFD, 0)) == 0) fcntl(slave_tty, F_SETFD, s | FD_CLOEXEC); rc_logger_pid = fork(); switch (rc_logger_pid) { case -1: eerror("fork: %s", strerror(errno)); break; case 0: rc_in_logger = true; close(signal_pipe[1]); signal_pipe[1] = -1; runlevel = level; if ((log = fopen(LOGFILE, "a"))) write_time(log, "started"); else { free(logbuf); logbuf_size = BUFSIZ * 10; logbuf = xmalloc(sizeof (char) * logbuf_size); logbuf_len = 0; } buffer = xmalloc(sizeof (char) * BUFSIZ); fd[0].fd = signal_pipe[0]; fd[0].events = fd[1].events = POLLIN; fd[0].revents = fd[1].revents = 0; if (rc_logger_tty >= 0) fd[1].fd = rc_logger_tty; for (;;) { if ((s = poll(fd, rc_logger_tty >= 0 ? 2 : 1, -1)) == -1) { eerror("poll: %s", strerror(errno)); break; } else if (s == 0) continue; if (fd[1].revents & (POLLIN | POLLHUP)) { memset(buffer, 0, BUFSIZ); bytes = read(rc_logger_tty, buffer, BUFSIZ); if (write(STDOUT_FILENO, buffer, bytes) == -1) eerror("write: %s", strerror(errno)); if (log) write_log(fileno (log), buffer, bytes); else { if (logbuf_size - logbuf_len < bytes) { logbuf_size += BUFSIZ * 10; logbuf = xrealloc(logbuf, sizeof(char ) * logbuf_size); } memcpy(logbuf + logbuf_len, buffer, bytes); logbuf_len += bytes; } } /* Only SIGTERMS signals come down this pipe */ if (fd[0].revents & (POLLIN | POLLHUP)) break; } free(buffer); if (logbuf) { if ((log = fopen(LOGFILE, "a"))) { write_time(log, "started"); write_log(fileno(log), logbuf, logbuf_len); } free(logbuf); } if (log) { write_time(log, "stopped"); fclose(log); } /* Try and cat our new logfile to a more permament location and then punt it */ if (system(MOVELOG) == -1) eerror("system: %s: %s", MOVELOG, strerror(errno)); exit(0); /* NOTREACHED */ default: setpgid(rc_logger_pid, 0); fd_stdout = dup(STDOUT_FILENO); fd_stderr = dup(STDERR_FILENO); if ((s = fcntl(fd_stdout, F_GETFD, 0)) == 0) fcntl(fd_stdout, F_SETFD, s | FD_CLOEXEC); if ((s = fcntl(fd_stderr, F_GETFD, 0)) == 0) fcntl(fd_stderr, F_SETFD, s | FD_CLOEXEC); dup2(slave_tty, STDOUT_FILENO); dup2(slave_tty, STDERR_FILENO); if (slave_tty != STDIN_FILENO && slave_tty != STDOUT_FILENO && slave_tty != STDERR_FILENO) close(slave_tty); close(signal_pipe[0]); signal_pipe[0] = -1; break; } }
void LcdStateRunning::drawDefault() { const State &state = State::get(); const ChargeMonitor &chargeMonitor = ChargeMonitor::get(); DS3231 &rtc = DS3231::get(); uint8_t amps = state.max_amps_limit; if (ChargeMonitor::get().isCharging()) amps = chargeMonitor.chargeCurrent() / 1000; lcd.move(0,0); write_time(lcd, rtc); lcd.write(' '); write_num(lcd, rtc.readTemp()); lcd.write(0xDF); lcd.write(' '); lcd.write(CustomCharacters::SEPARATOR); lcd.write(' '); if (amps) write_num(lcd, amps); else lcd.write("--"); lcd.write('A'); lcd.move(0,1); switch (state.j1772) { case J1772Pilot::UNKNOWN: case J1772Pilot::STATE_E: lcd.setBacklight(LCD16x2::RED); center_P(lcd, STR_ERROR_STATE); break; case J1772Pilot::STATE_A: lcd.setBacklight(LCD16x2::GREEN); if (chargeMonitor.chargeDuration() == 0) { center_P(lcd, STR_NOT_CONNECTED); } else { lcd.write_P(STR_CHARGED); if (display_state.get()) { lcd.write(' '); write_duration(lcd, chargeMonitor.chargeDuration()); spaces(lcd, 3); } else { write_kwh(lcd, chargeMonitor.wattHours()); } } break; case J1772Pilot::STATE_B: lcd.setBacklight(LCD16x2::GREEN); center_P(lcd, STR_CONNECTED); break; case J1772Pilot::STATE_C: { lcd.setBacklight(LCD16x2::CYAN); if (display_state.get()) lcd.write_P(STR_CHARGING); else write_kwh(lcd, chargeMonitor.wattHours()); lcd.write(CustomCharacters::SEPARATOR); write_duration(lcd, chargeMonitor.chargeDuration()); break; } case J1772Pilot::STATE_D: lcd.setBacklight(LCD16x2::RED); center_P(lcd, STR_VENT_REQUIRED); break; case J1772Pilot::DIODE_CHECK_FAILED: lcd.setBacklight(LCD16x2::RED); center_P(lcd, STR_DIODE_CHECK_FAILED); break; case J1772Pilot::NOT_READY: case J1772Pilot::IMPLAUSIBLE: break; } }
void print_pha(int numphas, struct pha_rec p[]) { int i; int ndef; char timestr[24]; struct pha_rec temp_pha; fprintf(logfp,"RDID NET STA REP ISC TIME "); fprintf(logfp," DELTA FACT WT RESID AMP PER MAG\n"); ndef=0; for (i=0; i< numphas; i++){ fprintf(logfp,"%-9d ",p[i].rdid); if (strcmp(p[i].net,"")) fprintf(logfp,"%-5s ",p[i].net); else fprintf(logfp,"%5s ",""); fprintf(logfp,"%-5s ",p[i].sta); if (p[i].comp) fprintf(logfp,"%c ",p[i].comp); else fprintf(logfp," "); fprintf(logfp,"%-5s ",p[i].rep_phase); fprintf(logfp,"%-5s ",p[i].phase); fprintf(logfp,"%23s ",write_time(p[i].time,timestr)); fprintf(logfp,"%7.3f ",p[i].delta); if (p[i].purged) fprintf(logfp,"PURGE "); else if (p[i].duplicate == 1) fprintf(logfp,"DUPLI "); else fprintf(logfp,"%0.3f ",p[i].weight_factor); fprintf(logfp,"%0.4f ",p[i].weight); if (p[i].resid != NULLVAL) fprintf(logfp,"%+8.4f ",p[i].resid); else fprintf(logfp,"%8s ",""); if (p[i].numamps>0){ if (p[i].a[0].amp!=NULLVAL) fprintf(logfp,"%8.1f ",p[i].a[0].amp); else fprintf(logfp,"%8s ",""); if (p[i].a[0].per!=NULLVAL) fprintf(logfp,"%4.1f ",p[i].a[0].per); else fprintf(logfp,"%4s ",""); } else fprintf(logfp,"%8s %4s ","",""); if (p[i].bodymag) fprintf(logfp,"%4.2fb ",p[i].bodymag); if (p[i].surfmag) fprintf(logfp,"%4.2fS ",p[i].surfmag); fprintf(logfp,"\n"); if (p[i].weight > 0) ndef++; } fprintf(logfp,"ndef=%d\n",ndef); return; }
void keyscan() { static int flag=0,flag_ymd=0; if(s1==0) //功能键s1 { delay(10); if(s1==0) { while(!s1); flag++; di(); if(flag==1) { flag_ds=1; write_com(0x80+0x40+10); write_com(0x0f); diii(); } if(flag==2) { write_com(0x80+0x40+7); } if(flag==3) { write_com(0x80+0x40+4); } if(flag==4)//week { write_com(0x80+12); flag_ymd=1; } if(flag==5) //day { write_com(0x80+9); flag_ymd=2; } if(flag==6) //moth { write_com(0x80+6); flag_ymd=3; } if(flag==7) //year { write_com(0x80+3); flag_ymd=4; } if(flag==8) { diii(); flag=0; flag_ds=0; flag_ymd=0; write_com(0x0c); write_ds(0,miao); write_ds(2,fen); write_ds(4,shi); write_ds(6,week); write_ds(7,day); write_ds(8,moth); write_ds(9,year); } } } if(flag!=0) { if(s2==0) //加数键s2 加数键s2 加数键s2 加数键s2 { delay(5); if(s2==0) { while(!s2); di(); if(flag_ymd==0) { /*****************************/ if(flag==1) { miao++; if(miao==60) { miao=0; } write_time(10,miao,2); write_com(0x80+0x40+10); } if(flag==2) { fen++; if(fen==60) { fen=0; } write_time(7,fen,2); write_com(0x80+0x40+7); } if(flag==3) { shi++; if(shi==24) { shi=0; } write_time(4,shi,2); write_com(0x80+0x40+4); } /**************************/ } if(flag_ymd==1) { week++; if(week==8) { week=1; } write_week(week); write_com(0x80+12); } if(flag_ymd==2) { day++; if(day==32) { day=1; } write_time(9,day,1); write_com(0x80+9); } if(flag_ymd==3) { moth++; if(moth==13) { moth=1; } write_time(6,moth,1); write_com(0x80+6); } if(flag_ymd==4) { year++; if(year==30) { year=1; } write_time(3,year,1); write_com(0x80+3); } } } //加数 if(s3==0) //减数键s3 减数键s3 减数键s3 减数键s3 { delay(5); if(s3==0) { while(!s3); di(); if(flag_ymd==0) { /*************************************/ if(flag==1) { miao--; if(miao==60||miao<0) { miao=0; } write_time(10,miao,2); write_com(0x80+0x40+10); } if(flag==2) { fen--; if(fen==60||fen<0) { fen=0; } write_time(7,fen,2); write_com(0x80+0x40+7); } if(flag==3) { shi--; if(shi==24||shi<0) { shi=0; } write_time(4,shi,2); write_com(0x80+0x40+4); } /*******************************************/ } if(flag_ymd==1) { week--; if(week==0) { week=7; } write_week(week); write_com(0x80+12); } if(flag_ymd==2) { day--; if(day==0) { day=31; } write_time(9,day,1); write_com(0x80+9); } if(flag_ymd==3) { moth--; if(moth==0) { moth=12; } write_time(6,moth,1); write_com(0x80+6); } if(flag_ymd==4) { year--; if(year==0) { year=30; } write_time(3,year,1); write_com(0x80+3); } } } //减数 } }
void rc_logger_open(const char *level) { int slave_tty; struct termios tt; struct winsize ws; char buffer[BUFSIZ]; struct pollfd fd[2]; int s = 0; size_t bytes; int i; FILE *log = NULL; FILE *plog = NULL; const char *logfile; int log_error = 0; if (!rc_conf_yesno("rc_logger")) return; if (pipe(signal_pipe) == -1) eerrorx("pipe: %s", strerror(errno)); for (i = 0; i < 2; i++) if ((s = fcntl (signal_pipe[i], F_GETFD, 0) == -1 || fcntl (signal_pipe[i], F_SETFD, s | FD_CLOEXEC) == -1)) eerrorx("fcntl: %s", strerror (errno)); if (isatty(STDOUT_FILENO)) { tcgetattr(STDOUT_FILENO, &tt); ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws); if (openpty(&rc_logger_tty, &slave_tty, NULL, &tt, &ws)) return; } else if (openpty(&rc_logger_tty, &slave_tty, NULL, NULL, NULL)) return; if ((s = fcntl(rc_logger_tty, F_GETFD, 0)) == 0) fcntl(rc_logger_tty, F_SETFD, s | FD_CLOEXEC); if ((s = fcntl(slave_tty, F_GETFD, 0)) == 0) fcntl(slave_tty, F_SETFD, s | FD_CLOEXEC); rc_logger_pid = fork(); switch (rc_logger_pid) { case -1: eerror("fork: %s", strerror(errno)); break; case 0: rc_in_logger = true; close(signal_pipe[1]); signal_pipe[1] = -1; runlevel = level; if ((log = fopen(TMPLOG, "ae"))) write_time(log, "started"); else { free(logbuf); logbuf_size = BUFSIZ * 10; logbuf = xmalloc(sizeof (char) * logbuf_size); logbuf_len = 0; } fd[0].fd = signal_pipe[0]; fd[0].events = fd[1].events = POLLIN; fd[0].revents = fd[1].revents = 0; if (rc_logger_tty >= 0) fd[1].fd = rc_logger_tty; for (;;) { if ((s = poll(fd, rc_logger_tty >= 0 ? 2 : 1, -1)) == -1) { eerror("poll: %s", strerror(errno)); break; } else if (s == 0) continue; if (fd[1].revents & (POLLIN | POLLHUP)) { memset(buffer, 0, BUFSIZ); bytes = read(rc_logger_tty, buffer, BUFSIZ); if (write(STDOUT_FILENO, buffer, bytes) == -1) eerror("write: %s", strerror(errno)); if (log) write_log(fileno (log), buffer, bytes); else { if (logbuf_size - logbuf_len < bytes) { logbuf_size += BUFSIZ * 10; logbuf = xrealloc(logbuf, sizeof(char ) * logbuf_size); } memcpy(logbuf + logbuf_len, buffer, bytes); logbuf_len += bytes; } } /* Only SIGTERMS signals come down this pipe */ if (fd[0].revents & (POLLIN | POLLHUP)) break; } if (logbuf) { if ((log = fopen(TMPLOG, "ae"))) { write_time(log, "started"); write_log(fileno(log), logbuf, logbuf_len); } free(logbuf); } if (log) { write_time(log, "stopped"); fclose(log); } /* Append the temporary log to the real log */ logfile = rc_conf_value("rc_log_path"); if (logfile == NULL) logfile = DEFAULTLOG; if (!strcmp(logfile, TMPLOG)) { eerror("Cowardly refusing to concatenate a logfile into itself."); eerrorx("Please change rc_log_path to something other than %s to get rid of this message", TMPLOG); } if ((plog = fopen(logfile, "ae"))) { if ((log = fopen(TMPLOG, "re"))) { while ((bytes = fread(buffer, sizeof(*buffer), BUFSIZ, log)) > 0) { if (fwrite(buffer, sizeof(*buffer), bytes, plog) < bytes) { log_error = 1; eerror("Error: write(%s) failed: %s", logfile, strerror(errno)); break; } } } else { log_error = 1; eerror("Error: fopen(%s) failed: %s", TMPLOG, strerror(errno)); } fclose(log); fclose(plog); } else { /* * logfile or its basedir may be read-only during sysinit and * shutdown so skip the error in this case */ if (errno != EROFS && ((strcmp(level, RC_LEVEL_SHUTDOWN) != 0) && (strcmp(level, RC_LEVEL_SYSINIT) != 0))) { log_error = 1; eerror("Error: fopen(%s) failed: %s", logfile, strerror(errno)); } } /* Try to keep the temporary log in case of errors */ if (!log_error) { if (errno != EROFS && ((strcmp(level, RC_LEVEL_SHUTDOWN) != 0) && (strcmp(level, RC_LEVEL_SYSINIT) != 0))) if (unlink(TMPLOG) == -1) eerror("Error: unlink(%s) failed: %s", TMPLOG, strerror(errno)); } else if (exists(TMPLOG)) eerrorx("Warning: temporary logfile left behind: %s", TMPLOG); exit(0); /* NOTREACHED */ default: setpgid(rc_logger_pid, 0); fd_stdout = dup(STDOUT_FILENO); fd_stderr = dup(STDERR_FILENO); if ((s = fcntl(fd_stdout, F_GETFD, 0)) == 0) fcntl(fd_stdout, F_SETFD, s | FD_CLOEXEC); if ((s = fcntl(fd_stderr, F_GETFD, 0)) == 0) fcntl(fd_stderr, F_SETFD, s | FD_CLOEXEC); dup2(slave_tty, STDOUT_FILENO); dup2(slave_tty, STDERR_FILENO); if (slave_tty != STDIN_FILENO && slave_tty != STDOUT_FILENO && slave_tty != STDERR_FILENO) close(slave_tty); close(signal_pipe[0]); signal_pipe[0] = -1; break; } }