static QImage betaLabelImage(const QSize& ls) { /* Beta label */ QColor bgc(246, 179, 0); QImage i(ls, QImage::Format_ARGB32); i.fill(Qt::transparent); QPainter p(&i); p.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); p.setPen(Qt::NoPen); /* Background */ p.setBrush(bgc); p.drawRect(0, 0, ls.width(), ls.height()); /* The black stripes */ p.setPen(QPen(QColor(70, 70, 70), 5)); float c = ((float)ls.width() / ls.height()) + 1; float g = (ls.width() / (c - 1)); for (int i = 0; i < c; ++i) p.drawLine((int)(-g / 2 + g * i), ls.height(), (int)(-g / 2 + g * (i + 1)), 0); /* The text */ QFont f = p.font(); f.setBold(true); QPainterPath tp; tp.addText(0, 0, f, "BETA"); QRectF r = tp.boundingRect(); /* Center the text path */ p.translate((ls.width() - r.width()) / 2, ls.height() - (ls.height() - r.height()) / 2); QPainterPathStroker pps; QPainterPath pp = pps.createStroke(tp); p.setPen(QPen(bgc.darker(80), 2, Qt::SolidLine, Qt::RoundCap)); p.drawPath(pp); p.setBrush(Qt::black); p.setPen(Qt::NoPen); p.drawPath(tp); p.end(); /* Smoothing */ QImage i1(ls, QImage::Format_ARGB32); i1.fill(Qt::transparent); QPainter p1(&i1); p1.setCompositionMode(QPainter::CompositionMode_Source); p1.drawImage(0, 0, i); p1.setCompositionMode(QPainter::CompositionMode_DestinationIn); QLinearGradient lg(0, 0, ls.width(), 0); lg.setColorAt(0, QColor(Qt::transparent)); lg.setColorAt(0.20, QColor(Qt::white)); lg.setColorAt(0.80, QColor(Qt::white)); lg.setColorAt(1, QColor(Qt::transparent)); p1.fillRect(0, 0, ls.width(), ls.height(), lg); p1.end(); return i1; }
void WSearchLineEdit::setup(QDomNode node, const SkinContext& context) { // Background color QColor bgc(255,255,255); if (context.hasNode(node, "BgColor")) { bgc.setNamedColor(context.selectString(node, "BgColor")); setAutoFillBackground(true); } QPalette pal = palette(); pal.setBrush(backgroundRole(), WSkinColor::getCorrectColor(bgc)); // Foreground color m_fgc = QColor(0,0,0); if (context.hasNode(node, "FgColor")) { m_fgc.setNamedColor(context.selectString(node, "FgColor")); } bgc = WSkinColor::getCorrectColor(bgc); m_fgc = QColor(255 - bgc.red(), 255 - bgc.green(), 255 - bgc.blue()); pal.setBrush(foregroundRole(), m_fgc); setPalette(pal); }
int main() { core::logger::init(); core::logger::addOutput(&std::cout); graphics::Graphics* gfx = new graphics::Graphics; events::Events ev; bool cont = true; if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) { std::cout << "Couldn't load SDL : " << SDL_GetError() << std::endl; return 1; } cont = gfx->openWindow("Test gui::List", 800, 600); if(!cont) return 1; /* Loading the list */ gui::Theme theme(gfx, "guirc"); if(!theme.load()) { std::cout << "Couldn't load theme." << std::endl; return 1; } TestList list(gfx); theme.apply((gui::List*)&list); int n1 = 1, n2 = 2, n3 = 3, n4 = 4, n5 = 5, n6 = 6, n7 = 7, n8 = 8, n9 = 9, n10 = 10, n11 = 11, n12 = 12, n13 = 13, n14 = 14; /* Loading the items */ list.addItem(0, "Last", 30.0f, &n1); list.addItem(0, "Unte", -5.0f, &n2); list.addItem(0, "Hy everybody out of here", 0.0f, &n3); list.addItem(0, "Hello world", 15.0f, &n4); list.addItem(0, "Raspberry PI", 50.0f, &n5); list.addItem(0, "@Centered widget !", 0.0f, &n6); list.addItem(0, "Middle2", 10.0f, &n7); list.addItem(0, "Middle1", -40.0f, &n8); list.addItem(0, "Linux news and advices", -50.0f, &n9); list.addItem(0, "Play the new DWARVES group game", 10.0f, &n10); list.addItem(0, "Champitoad", -20.0f, &n11); list.addItem(0, "Lucas8", 20.0f, &n12); list.addItem(0, "Second", -50.0f, &n13); list.addItem(0, "First", 0.0f, &n14); /* Loading the gui */ gui::Gui g(gfx); g.main(&list, geometry::Point(50.0f,50.0f), 700.0f, 500.0f); geometry::AABB bg; bg.width = 800.0f; bg.height = 600.0f; graphics::Color bgc(127, 127, 255); ev.openJoysticks(); while(cont) { ev.update(); ev.clearInput(); /* We don't need full input save, so we clear it */ if(ev.isKeyPressed(events::KeyMap::Escape) || ev.isKeyPressed('q')) cont = false; if(ev.keyJustPressed(events::KeyMap::Backspace)) g.focus(!g.focus()); g.update(ev); if(ev.keyJustPressed(' ')) { std::cout << std::dec << "Selected : \"" << list.selectedText() << "\", #" << list.selected() << " (id : " << std::hex << list.selectedID() << ")" << std::endl; } gfx->beginDraw(); gfx->draw(bg, bgc); g.draw(); gfx->endDraw(); SDL_Delay(1000/60); } delete gfx; core::logger::free(); SDL_Quit(); return 0; }
spact() /* Computes cohomology group H^i(P,M) or H^i(Q,M) */ { int i,j,k,l,m,n,ie,ct,cl,fg,wi,wj,*p,*q,*r,*nrpf,*v1,*v2, **swop,homcl,c; char inp; inp= (ch1 && act) ? 0 : 1; /* inp as in calcfm in case ch1 */ if (ingp(inp) == -1) return(-1); if (ch1 && act) { inf3offset=ftell(ip); fclose(ip);} ct=ngens; j=exp; for (i=1;i<=dim;i++) { j++; wt[j]=swt[i]; d1[j]=(sd1[i]>0) ? sd1[i]+exp : 0; d2[j]=sd2[i]; } printf("Computing matrices.\n"); /* Matrices for all pcp gens of P or Q are now computed */ if (maxm<2*facexp) { fprintf(stderr,"Not enough mat space. Increase MSP (of MV or MM).\n"); return(-1); } for (i=facexp;i>=1;i--) if (wt[i]==1) { if (i>ct) { swop=mat[i]; mat[i]=mat[ct]; mat[ct]=swop; for (j=1;j<=dim;j++) if (d2[exp+j]==ct) d2[exp+j]=i; } inv(mat[i],mat[facexp+i]); ct--; } if (ct!=0) {fprintf(stderr,"No of pgens wrong.\n"); return(-1); } for (i=2;i<=facexp;i++) if (wt[i]>1) { p= (d1[i]==d2[i]) ? *powptr[d1[i]] : *(comptr[d1[i]]+d2[i]); q=p+ *p-2; *cp=0; while (--q>p) { k= *(q+1); for (j=1;j<=k;j++) cp[++(*cp)]= *q+facexp; q--; } if (d1[i]==d2[i]) for (j=1;j<=prime;j++) cp[++(*cp)]=d1[i]; else { cp[++(*cp)]=d1[i]+facexp; cp[++(*cp)]=d2[i]+facexp; cp[++(*cp)]=d1[i]; cp[++(*cp)]=d2[i]; } prod(cp,mat[i]); inv(mat[i],mat[i+facexp]); } if (act==0) { op=fopen(outf2,"w"); fprintf(op,"%3d%3d%3d\n",prime,dim,facexp); for (i=1;i<=facexp;i++) printmat(mat[i]); fclose(op); } printf("Computing full pcp.\n"); /* pcp of P or Q in dual action on module is computed from the matrices. */ v1=mat[facexp+1][1]; v2=mat[facexp+1][2]; for (i=1;i<=dim;i++) v1[i]=0; ie=exp; for (i=1;i<=dim;i++) { if (i>1) v1[i-1]=0; v1[i]=1; ie++; for (j=1;j<=facexp;j++) if (comm(v1,v2,mat[j])) { *(comptr[ie]+j)=rpf+1; nrpf=rpf+2; l=0; for (k=1;k<=dim;k++) if ((m=v2[k])!=0) { *(nrpf++)=k+exp; *(nrpf++)=m; l+=2; } *(rpf+1)=l; m= *(nrpf-2); if (d1[m]==ie && d2[m]==j) *rpf=m; else *rpf=0; rpf=nrpf; } } if (ch1==0) { printf("Computing P-homs.\n"); fflush(stdout); homcl=0; /* Hom-P(FM,M) will now be computed as dual of tensor product, using NQA */ if (matcl+1>=mcl) { fprintf(stderr,"Class too big. Increase MCL.\n"); return(-1); } for (cl=matcl+1;cl>1;cl--) { printf("cl=%d.\n",cl); for (fg=facexp+1;dpth[fg]==1 && fg<=exp;fg++) for (i=exp+1;i<=exp+dim;i++) if (wt[i]+1==cl) { if (intgen(i,fg)== -1) return(-1); if ((k=wt[i]+wt[fg])>homcl) { homcl=k; if (homcl+1>=mcl) { fprintf(stderr,"Class too big. Increase MCL.\n"); return(-1); } } } while (fg<=exp) { for (i=exp+1;i<=exp+dim;i++) if (wt[i]+dpth[fg]==cl) { if (dpth[d1[fg]]==dpth[fg]-1) { if (assoc(i,d1[fg],d2[fg])) if (subrel(i,fg)== -1) return(-1); } else if (intgen(i,fg)== -1) return(-1); if ((k=wt[i]+wt[fg])>homcl) { homcl=k; if (homcl+1>=mcl) { fprintf(stderr,"Class too big. Increase MCL.\n"); return(-1); } } } fg++; } for (i=1;i<=facexp;i++) { wi=wt[i]; for (j=facexp+1;j<=exp;j++) { wj=dpth[j]; if (wi+wj>=cl) break; for (k=exp+1;k<=exp+dim;k++) if (wi+wj+wt[k]==cl) if (assoc(k,j,i)) { if ((l=prnrel())==0) goto nextcl; if (l== -1) return(-1); } } } nextcl:; } bgc(); rsp=rpb-rel+1; printf("Computing extensions. nng,homcl=%d,%d\n",nng,homcl); fflush(stdout); stage=2; onng=nng; chpdim=0; chsdim=0; extno=pcptr+ptrsp-onng-1; for (i=1;i<=nng;i++) extno[i]=0; } else { stage=4; printf("Computing first cohomology group.\n"); homcl=matcl; if (homcl+1>=mcl) { fprintf(stderr,"Class too big. Increase MCL.\n"); return(-1); } } /* H^2 or H^1 will now be computed */ for (cl=homcl+1;cl>=2;cl--) { printf("cl=%d\n",cl); if (cl<=matcl+1) { for (i=1;i<=facexp;i++) if (wt[i]==1) for (j=exp+1;j<=exp+dim;j++) if (wt[j]+1==cl) if (intgen(j,i)== -1) return(-1); for (i=1;i<=facexp;i++) { wi=wt[i]; if (wi>1) for (j=exp+1;j<=exp+dim;j++) if (wi+wt[j]==cl) if (assoc(j,d1[i],d2[i])) if (subrel(j,i)== -1) return(-1); } } for (i=1;i<=facexp;i++) for (j=i;j<=facexp;j++) for (k=exp+1;k<=exp+dim;k++) if ((i==j && wt[i]+1+wt[k]==cl) || (i!=j && wt[i]+wt[j]+wt[k]==cl)) if (assoc(k,j,i)) if (ch1) { if ((l=prnrel())==0) goto ncl; if (l== -1) return(-1); } else { l=prnrel(); if (l== -1) return(-1); if (l>1) nchg(); } ncl:; } if (ch1) printf("Cohomology grp has dim %d\n",nng); /* We now no longer need the data for Q in the back of rel. */ rpb=rel+rspk-1; if (act) { if (ch1) onng=nng; else unlink(outf1); } else { if (stage>2) {onng=nng; strcpy(outf1,outf0);} outgp(); if (ch1) { ipcopy=fopen(outf1,"r"); opcopy=fopen(outcopy,"w"); while ((c=getc(ipcopy))!= -1) putc(c,opcopy); fclose(ipcopy); fclose(opcopy); } } return(0); }
int main(int argc, char *argv[]) { /* bgc input and output structures */ bgcin_struct bgcin; bgcout_struct bgcout; /* local control information */ point_struct point; restart_ctrl_struct restart; climchange_struct scc; output_struct output; /* initialization file */ file init; file ndep_file; /* system time variables */ struct tm *tm_ptr; time_t lt; extern signed char summary_sanity; int c; /* for getopt cli argument processing */ extern signed char bgc_verbosity; extern int optind, opterr; unsigned char bgc_ascii = 0; extern char *optarg; extern signed char cli_mode; /* What cli requested mode to run in.*/ int readndepfile = 0; /* Flag to tell the program to read an external NDEP file passed using getpopt -n */ bgcin.ndepctrl.varndep = 0; /* Store command name for use by bgc_print_usage() */ argv_zero = (char *)malloc(strlen(argv[0])+1); strncpy(argv_zero, argv[0], strlen(argv[0])+1); /* Process command line arguments */ opterr = 0; while((c = getopt(argc, argv, "pVsl:v:ugmn:a")) != -1) { switch(c) { case 'V': bgc_printf(BV_ERROR, "BiomeBGC version %s (built %s %s by %s on %s)\n", VERS, __DATE__, __TIME__, USER, HOST); exit(EXIT_SUCCESS); break; case 's': bgc_verbosity = BV_SILENT; break; case 'v': bgc_verbosity = bgc_verbosity_decode(optarg); break; case 'l': bgc_logfile_setup(optarg); bgc_printf(BV_DIAG, "Using logfile for output.\n"); break; case 'p': summary_sanity = SANE; break; case 'u': cli_mode = MODE_SPINUP; break; case 'm': cli_mode = MODE_MODEL; break; case 'g': cli_mode = MODE_SPINNGO; break; case 'a': bgc_ascii = 1; break; case 'n': /* Nitrogen deposition file */ strcpy(ndep_file.name,optarg); bgc_printf(BV_DIAG,"Using annual NDEP file: %s\n",ndep_file.name); readndepfile = 1; bgcin.ndepctrl.varndep = 1; break; case '?': break; default: break; } } bgc_printf(BV_DIAG, "Verbosity Level Set To: %d\n", bgc_verbosity); if (summary_sanity == SANE) bgc_printf(BV_WARN, "Summary outputs will be calculated more sanely. See USAGE.TXT for details\n"); if (cli_mode != MODE_INI) { bgc_printf(BV_WARN, "Overridding ini mode. "); if (cli_mode == MODE_SPINUP) bgc_printf(BV_WARN, "Running in Spinup Mode.\n"); if (cli_mode == MODE_MODEL) bgc_printf(BV_WARN, "Running in Model mode.\n"); if (cli_mode == MODE_SPINNGO) bgc_printf(BV_WARN, "Running in Spin-and-Go mode.\nThe spinup and model will both be run.\n"); } bgc_printf(BV_DIAG, "Done processing CLI arguments.\n"); /* get the system time at start of simulation */ lt = time(NULL); tm_ptr = localtime(<); strcpy(point.systime,asctime(tm_ptr)); /* Andrew tried this, you shouldn't. localtime returns a global extern. */ /* free(tm_ptr); */ output.anncodes = NULL; output.daycodes = NULL; output.bgc_ascii = bgc_ascii; /* initialize the bgcin state variable structures before filling with values from ini file */ if (presim_state_init(&bgcin.ws, &bgcin.cs, &bgcin.ns, &bgcin.cinit)) { bgc_printf(BV_ERROR, "Error in call to presim_state_init() from pointbgc()\n"); exit(EXIT_FAILURE); } /****************************** ** ** ** BEGIN READING INIT FILE ** ** ** ******************************/ /* read the name of the main init file from the command line and store as init.name */ if (optind >= argc ) { bgc_print_usage(); exit(EXIT_FAILURE); } strcpy(init.name, argv[optind]); /* open the main init file for ascii read and check for errors */ if (file_open(&init,'i')) { bgc_printf(BV_ERROR, "Error opening init file, pointbgc.c\n"); exit(EXIT_FAILURE); } /* read the header string from the init file */ if (fgets(point.header, 100, init.ptr)==NULL) { bgc_printf(BV_ERROR, "Error reading header string: pointbgc.c\n"); exit(EXIT_FAILURE); } /* open met file, discard header lines */ if (met_init(init, &point)) { bgc_printf(BV_ERROR, "Error in call to met_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } /* read restart control parameters */ if (restart_init(init, &restart)) { bgc_printf(BV_ERROR, "Error in call to restart_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } /* read simulation timing control parameters */ if (time_init(init, &(bgcin.ctrl))) { bgc_printf(BV_ERROR, "Error in call to epclist_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } /* read scalar climate change parameters */ if (scc_init(init, &scc)) { bgc_printf(BV_ERROR, "Error in call to scc_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } /* read CO2 control parameters */ if (co2_init(init, &(bgcin.co2), bgcin.ctrl.simyears)) { bgc_printf(BV_ERROR, "Error in call to co2_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } if(readndepfile) { if (ndep_init(ndep_file, &(bgcin.ndepctrl))) { bgc_printf(BV_ERROR, "Error in call to ndep_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } } /* read site constants */ if (sitec_init(init, &bgcin.sitec)) { bgc_printf(BV_ERROR, "Error in call to sitec_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } /* read ramped nitrogen deposition block */ if (ramp_ndep_init(init, &bgcin.ramp_ndep)) { bgc_printf(BV_ERROR, "Error in call to ramp_ndep_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } /* read ecophysiological constants */ if (epc_init(init, &bgcin.epc)) { bgc_printf(BV_ERROR, "Error in call to epc_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } /* initialize water state structure */ if (wstate_init(init, &bgcin.sitec, &bgcin.ws)) { bgc_printf(BV_ERROR, "Error in call to wstate_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } /* initialize carbon and nitrogen state structures */ if (cnstate_init(init, &bgcin.epc, &bgcin.cs, &bgcin.cinit, &bgcin.ns)) { bgc_printf(BV_ERROR, "Error in call to cstate_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } /* read the output control information */ if (output_ctrl(init, &output)) { bgc_printf(BV_ERROR, "Error in call to output_ctrl() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } /* initialize output files. Does nothing in spinup mode*/ if (output_init(&output)) { bgc_printf(BV_ERROR, "Error in call to output_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } /* read final line out of init file to test for proper file structure */ if (end_init(init)) { bgc_printf(BV_ERROR, "Error in call to end_init() from pointbgc.c... exiting\n"); exit(EXIT_FAILURE); } fclose(init.ptr); /* read meteorology file, build metarr arrays, compute running avgs */ if (metarr_init(point.metf, &bgcin.metarr, &scc, bgcin.ctrl.metyears)) { bgc_printf(BV_ERROR, "Error in call to metarr_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } fclose(point.metf.ptr); /* copy some of the info from input structure to bgc simulation control structure */ bgcin.ctrl.onscreen = output.onscreen; bgcin.ctrl.dodaily = output.dodaily; bgcin.ctrl.domonavg = output.domonavg; bgcin.ctrl.doannavg = output.doannavg; bgcin.ctrl.doannual = output.doannual; bgcin.ctrl.ndayout = output.ndayout; bgcin.ctrl.nannout = output.nannout; bgcin.ctrl.daycodes = output.daycodes; bgcin.ctrl.anncodes = output.anncodes; bgcin.ctrl.read_restart = restart.read_restart; bgcin.ctrl.write_restart = restart.write_restart; bgcin.ctrl.keep_metyr = restart.keep_metyr; /* copy the output file structures into bgcout */ if (output.dodaily) bgcout.dayout = output.dayout; if (output.domonavg) bgcout.monavgout = output.monavgout; if (output.doannavg) bgcout.annavgout = output.annavgout; if (output.doannual) bgcout.annout = output.annout; if (output.bgc_ascii && output.dodaily) bgcout.dayoutascii = output.dayoutascii; if (output.bgc_ascii && output.domonavg) bgcout.monoutascii = output.monoutascii; if (output.bgc_ascii && output.doannual) bgcout.annoutascii = output.annoutascii; bgcout.anntext = output.anntext; bgcout.bgc_ascii = bgc_ascii; /* if using ramped Ndep, copy preindustrial Ndep into ramp_ndep struct */ if (bgcin.ramp_ndep.doramp) { bgcin.ramp_ndep.preind_ndep = bgcin.sitec.ndep; } /* if using an input restart file, read a record */ if (restart.read_restart) { /* 02/06/04 * The if statement gaurds against core dump on bad restart file. * If spinup exits with error then the norm trys to use the restart, * that has nothing in it, a seg fault occurs. Amac */ if( fread(&(bgcin.restart_input),sizeof(restart_data_struct),1,restart.in_restart.ptr) == 0) { bgc_printf(BV_ERROR, "Error reading restart file! 0 bytes read. Aborting..\n"); exit(EXIT_FAILURE); } } /********************* ** ** ** CALL BIOME-BGC ** ** ** *********************/ /* all initialization complete, call model */ /* either call the spinup code or the normal simulation code */ if (bgcin.ctrl.spinup) { if (bgc(&bgcin, &bgcout,MODE_SPINUP)) { bgc_printf(BV_ERROR, "Error in call to bgc()\n"); exit(EXIT_FAILURE); } bgc_printf(BV_PROGRESS, "SPINUP: residual trend = %.6lf\n",bgcout.spinup_resid_trend); bgc_printf(BV_PROGRESS, "SPINUP: number of years = %d\n",bgcout.spinup_years); } else { if (bgc(&bgcin, &bgcout, MODE_MODEL)) { bgc_printf(BV_ERROR, "Error in call to bgc()\n"); exit(EXIT_FAILURE); } } /* if using an output restart file, write a record */ if (restart.write_restart) { fwrite(&(bgcout.restart_output),sizeof(restart_data_struct),1, restart.out_restart.ptr); } /* Now do the Model part of Spin & Go. */ if (cli_mode == MODE_SPINNGO) { bgc_printf(BV_PROGRESS, "Finished Spinup for Spin 'n Go. Now starting Model run ('Go' part of Spin'n Go)\n"); bgc_printf(BV_PROGRESS, "Assigned bgcout struct to bgcin for spinngo model run\n"); bgcin.ctrl.spinup = 0; output.doannavg = 1; output.doannual = 1; output.dodaily = 1; output.domonavg = 1; if (output_init(&output)) { bgc_printf(BV_ERROR, "Error in call to output_init() from pointbgc.c... Exiting\n"); exit(EXIT_FAILURE); } /* copy some of the info from input structure to bgc simulation control structure */ bgcin.ctrl.dodaily = output.dodaily; bgcin.ctrl.domonavg = output.domonavg; bgcin.ctrl.doannavg = output.doannavg; bgcin.ctrl.doannual = output.doannual; /* copy the output file structures into bgcout */ if (output.dodaily) bgcout.dayout = output.dayout; if (output.domonavg) bgcout.monavgout = output.monavgout; if (output.doannavg) bgcout.annavgout = output.annavgout; if (output.doannual) bgcout.annout = output.annout; if (output.bgc_ascii && output.dodaily) bgcout.dayoutascii = output.dayoutascii; if (output.bgc_ascii && output.domonavg) bgcout.monoutascii = output.monoutascii; if (output.bgc_ascii && output.doannual) bgcout.annoutascii = output.annoutascii; if (output.bgc_ascii && output.doannual) bgcout.anntext = output.anntext; /* initialize output files. Does nothing in spinup mode*/ bgcin.ctrl.read_restart = 1; bgcin.restart_input = bgcout.restart_output; if (bgc(&bgcin, &bgcout, MODE_MODEL)) { bgc_printf(BV_ERROR, "Error in call to bgc()\n"); exit(EXIT_FAILURE); } restart.read_restart = 0; bgcin.ctrl.read_restart = 0; bgc_printf(BV_WARN, "Finished the bgc() Model call in spinngo\n"); } /* post-processing output handling, if any, goes here */ /* free memory */ free(bgcin.metarr.tmax); free(bgcin.metarr.tmin); free(bgcin.metarr.prcp); free(bgcin.metarr.vpd); free(bgcin.metarr.tavg); free(bgcin.metarr.tavg_ra); free(bgcin.metarr.swavgfd); free(bgcin.metarr.par); free(bgcin.metarr.dayl); if (bgcin.co2.varco2) free(bgcin.co2.co2ppm_array); if (bgcin.ndepctrl.varndep) free(bgcin.ndepctrl.ndepyear_array); if (bgcin.ndepctrl.varndep) free(bgcin.ndepctrl.ndep_array); if (output.anncodes != NULL) free(output.anncodes); if (output.daycodes != NULL) free(output.daycodes); /* close files */ if (restart.read_restart) fclose(restart.in_restart.ptr); if (restart.write_restart) { if (fclose(restart.out_restart.ptr) != 0) { bgc_printf(BV_WARN, "Warning, error closing restart file after write: %s\n", strerror(errno)); } } if (output.dodaily) fclose(output.dayout.ptr); if (output.domonavg) fclose(output.monavgout.ptr); if (output.doannavg) fclose(output.annavgout.ptr); if (output.doannual) fclose(output.annout.ptr); /* Close the ASCII output files */ if (output.bgc_ascii && output.dodaily) fclose(output.dayoutascii.ptr); if (output.bgc_ascii && output.domonavg) fclose(output.monoutascii.ptr); if (output.bgc_ascii && output.doannual) fclose(output.annoutascii.ptr); if ( output.bgc_ascii && output.doannual && (fclose(output.anntext.ptr) != 0)) { bgc_printf(BV_WARN, "Warning, error closing ascii annual output file: %s\n", strerror(errno)); } bgc_logfile_finish(); free(argv_zero); return EXIT_SUCCESS; } /* end of main */