00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00021
00022
00023 #include <stdio.h>
00024 #include <stdlib.h>
00025 #include <math.h>
00026 #include <string.h>
00027
00028
00029 #include <netcdf.h>
00030
00031
00032 #include "sundials_types.h"
00033 #include "cvode.h"
00034 #include "cvode_dense.h"
00035 #include "nvector_serial.h"
00036
00037
00038 #include "pihm.h"
00039 #include "calib.h"
00040 #include "print.h"
00041
00042
00043 #define NDIMS 2
00045 #define ERR(e) {printf("Error: %s\n", nc_strerror(e)); return;}
00046
00047
00048
00049 FILE *isStatePtr, *satStatePtr, *usatStatePtr, *surfStatePtr;
00050 FILE *et0Ptr, *et1Ptr, *et2Ptr, *netPrecipPtr, *infilPtr, *rechargePtr;
00051 FILE *rivHeadPtr;
00052 FILE *rivFlowPtr, *rivBasePtr, *rivSurfPtr;
00053
00054
00055 char *isStateFile, *satStateFile, *usatStateFile, *surfStateFile;
00056 char *et0File, *et1File, *et2File, *netPrecipFile, *infilFile, *rechargeFile;
00057 char *rivHeadFile;
00058 char *rivFlowFile, *rivBaseFile, *rivSurfFile;
00059
00060 FILE *initPtr;
00061 char *initFile;
00063
00064 static double *tempIS, *tempSatState, *tempUsatState, *tempSurfState;
00065 static double *tempET0, *tempET1, *tempET2, *tempNetPpt, *tempInfil, *tempRecharge;
00066 static double *tempFlow, *tempBase, *tempSurf, *tempHead;
00067
00068
00069 int NUMELE;
00070 int NUMRIV;
00072
00073 int retval;
00076
00077 int isStateID, satStateID, usatStateID, surfStateID;
00078 int et0ID, et1ID, et2ID, netPrecipID, infilID, rechargeID;
00079 int rivHeadID;
00080 int rivFlowID, rivBaseID, rivSurfID;
00081
00082 int ele_dimid;
00083 int rec_dimid;
00084 int dimids[NDIMS];
00085 int startEle[NDIMS];
00086 int countEle[NDIMS];
00087 int startRiv[NDIMS];
00088 int countRiv[NDIMS];
00090
00091 int isState_varid, satState_varid, usatState_varid, surfState_varid;
00092 int et0_varid, et1_varid, et2_varid, netPrecip_varid, infil_varid, recharge_varid;
00093 int rivHead_varid;
00094 int rivFlow_varid, rivBase_varid, rivSurf_varid;
00095
00096
00097
00098
00099
00100
00101 void FPrint(Model_Data mData, N_Vector CV_Y, realtype t)
00103
00107 {
00108
00109 if(FPRINT_MODE==TXT){
00110 if(ISState==YEA){
00111 printIS(mData, isStatePtr, t);
00112 }
00113 if(SatState==YEA){
00114 printSatState(mData, CV_Y, satStatePtr, t);
00115 }
00116 if(UsatState==YEA){
00117 printUsatState(mData, CV_Y, usatStatePtr, t);
00118 }
00119 if(SurfState==YEA){
00120 printSurfState(mData, CV_Y, surfStatePtr, t);
00121 }
00122
00123 if(ET0==YEA){
00124 printET0(mData, et0Ptr, t);
00125 }
00126 if(ET1==YEA){
00127 printET1(mData, et1Ptr, t);
00128 }
00129 if(ET2==YEA){
00130 printET2(mData, et2Ptr, t);
00131 }
00132 if(NetPpt==YEA){
00133 printNetPpt(mData, netPrecipPtr, t);
00134 }
00135 if(Infil==YEA){
00136 printInfil(mData, infilPtr, t);
00137 }
00138 if(RECHARGE==YEA){
00139 printRecharge(mData, rechargePtr, t);
00140 }
00141
00142 if(RivFlow==YEA){
00143 printRiverFlow(mData, CV_Y, rivFlowPtr, t);
00144 }
00145 if(RivBase==YEA){
00146 printRiverBase(mData, rivBasePtr, t);
00147 }
00148 if(RivSurf==YEA){
00149 printRiverSurf(mData, rivSurfPtr, t);
00150 }
00151 if(RivHead==YEA){
00152 printRiverHead(mData, CV_Y, rivHeadPtr, t);
00153 }
00154 }
00155
00156
00157
00158
00159 if(FPRINT_MODE==CDF){
00160 if(ISState==YEA){
00161 printIScdf(mData, isStateID, isState_varid, t);
00162 }
00163 if(SatState==YEA){
00164 printSatStatecdf(mData, CV_Y, satStateID, satState_varid, t);
00165 }
00166 if(UsatState==YEA){
00167 printUsatStatecdf(mData, CV_Y, usatStateID, usatState_varid, t);
00168 }
00169 if(SurfState==YEA){
00170 printSurfStatecdf(mData, CV_Y, surfStateID, surfState_varid, t);
00171 }
00172
00173 if(ET0==YEA){
00174 printET0cdf(mData, et0ID, et0_varid, t);
00175 }
00176 if(ET1==YEA){
00177 printET1cdf(mData, et1ID, et1_varid, t);
00178 }
00179 if(ET2==YEA){
00180 printET2cdf(mData, et2ID, et2_varid, t);
00181 }
00182 if(NetPpt==YEA){
00183 printNetPptcdf(mData, netPrecipID, netPrecip_varid, t);
00184 }
00185 if(Infil==YEA){
00186 printInfilcdf(mData, infilID, infil_varid, t);
00187 }
00188 if(RECHARGE==YEA){
00189 printRechargecdf(mData, rechargeID, recharge_varid, t);
00190 }
00191
00192
00193 if(RivFlow==YEA){
00194 printRiverFlowcdf(mData, CV_Y, rivFlowID, rivFlow_varid, t);
00195 }
00196 if(RivBase==YEA){
00197 printRiverBasecdf(mData, rivBaseID, rivBase_varid, t);
00198 }
00199 if(RivSurf==YEA){
00200 printRiverSurfcdf(mData, rivSurfID, rivSurf_varid, t);
00201 }
00202 if(RivHead==YEA){
00203 printRiverHeadcdf(mData, CV_Y, rivHeadID, rivHead_varid, t);
00204 }
00205 }
00206
00207
00208 }
00209
00210
00211
00212
00213
00214
00215 void FPrintInitFile(Model_Data mData, Control_Data cData, N_Vector CV_Y, int i)
00217
00222 {
00223 int j;
00224 char tmpFileName[100];
00225 setFileName(tmpFileName);
00226 initFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00227 strcpy(initFile, tmpFileName);
00228 strcat(initFile, ".init.end");
00229 initPtr=fopen(initFile, "w");
00230
00231 fprintf(initPtr,"%lf\n",cData.Tout[i]);
00232 for(j=0; j<mData->NumEle; j++)
00233 {
00234 fprintf(initPtr,"%lf\t%lf\t%lf\t%lf\t%lf\n",mData->EleIS[j],mData->EleSnow[j],NV_Ith_S(CV_Y,j), NV_Ith_S(CV_Y,j+mData->NumEle), NV_Ith_S(CV_Y,j+2*mData->NumEle));
00235 }
00236 for(j=0; j<mData->NumRiv; j++)
00237 {
00238 fprintf(initPtr,"%lf\n",NV_Ith_S(CV_Y, j+3*mData->NumEle));
00239 }
00240 fflush(initPtr);
00241 }
00242
00243
00244
00245
00246
00247 void FPrintInit(Model_Data mData)
00249
00251 {
00252 int i;
00253 char tmpFileName[100];
00254 setFileName(tmpFileName);
00255
00256 NUMELE=mData->NumEle;
00257 NUMRIV=mData->NumRiv;
00258
00259 countEle[0]=1;
00260 countEle[1]=NUMELE;
00261 startEle[1]=0;
00262 countRiv[0]=1;
00263 countRiv[1]=NUMRIV;
00264 startEle[1]=0;
00265
00266 if(FPRINT_MODE==TXT){
00267
00268 if(ISState==YEA){
00269 isStateFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00270 strcpy(isStateFile, tmpFileName);
00271 strcat(isStateFile, ".is.txt");
00272 isStatePtr=fopen(isStateFile, "w");
00273
00274 tempIS=(double *)malloc(mData->NumEle * sizeof(double));
00275 for(i=0; i<mData->NumEle; i++)
00276 tempIS[i]=0.0;
00277 }
00278 if(SatState==YEA){
00279 satStateFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00280 strcpy(satStateFile, tmpFileName);
00281 strcat(satStateFile, ".sat.txt");
00282 satStatePtr=fopen(satStateFile, "w");
00283
00284 tempSatState=(double *)malloc(mData->NumEle * sizeof(double));
00285 for(i=0; i<mData->NumEle; i++)
00286 tempSatState[i]=0.0;
00287 }
00288 if(UsatState==YEA){
00289 usatStateFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00290 strcpy(usatStateFile, tmpFileName);
00291 strcat(usatStateFile, ".usat.txt");
00292 usatStatePtr=fopen(usatStateFile, "w");
00293
00294 tempUsatState=(double *)malloc(mData->NumEle * sizeof(double));
00295 for(i=0; i<mData->NumEle; i++)
00296 tempUsatState[i]=0.0;
00297 }
00298 if(SurfState==YEA){
00299 surfStateFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00300 strcpy(surfStateFile, tmpFileName);
00301 strcat(surfStateFile, ".surf.txt");
00302 surfStatePtr=fopen(surfStateFile, "w");
00303
00304 tempSurfState=(double *)malloc(mData->NumEle * sizeof(double));
00305 for(i=0; i<mData->NumEle; i++)
00306 tempSurfState[i]=0.0;
00307 }
00308
00309
00310 if(ET0==YEA){
00311 et0File = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00312 strcpy(et0File, tmpFileName);
00313 strcat(et0File, ".et0.txt");
00314 et0Ptr=fopen(et0File, "w");
00315
00316 tempET0=(double *)malloc(mData->NumEle * sizeof(double));
00317 for(i=0; i<mData->NumEle; i++)
00318 tempET0[i]=0.0;
00319 }
00320 if(ET1==YEA){
00321 et1File = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00322 strcpy(et1File, tmpFileName);
00323 strcat(et1File, ".et1.txt");
00324 et1Ptr=fopen(et1File, "w");
00325
00326 tempET1=(double *)malloc(mData->NumEle * sizeof(double));
00327 for(i=0; i<mData->NumEle; i++)
00328 tempET1[i]=0.0;
00329 }
00330 if(ET2==YEA){
00331 et2File = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00332 strcpy(et2File, tmpFileName);
00333 strcat(et2File, ".et2.txt");
00334 et2Ptr=fopen(et2File, "w");
00335
00336 tempET2=(double *)malloc(mData->NumEle * sizeof(double));
00337 for(i=0; i<mData->NumEle; i++)
00338 tempET2[i]=0.0;
00339 }
00340 if(NetPpt==YEA){
00341 netPrecipFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00342 strcpy(netPrecipFile, tmpFileName);
00343 strcat(netPrecipFile, ".netPrecip.txt");
00344 netPrecipPtr=fopen(netPrecipFile, "w");
00345
00346 tempNetPpt=(double *)malloc(mData->NumEle * sizeof(double));
00347 for(i=0; i<mData->NumEle; i++)
00348 tempNetPpt[i]=0.0;
00349 }
00350 if(Infil==YEA){
00351 infilFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00352 strcpy(infilFile, tmpFileName);
00353 strcat(infilFile, ".infil.txt");
00354 infilPtr=fopen(infilFile, "w");
00355
00356 tempInfil=(double *)malloc(mData->NumEle * sizeof(double));
00357 for(i=0; i<mData->NumEle; i++)
00358 tempInfil[i]=0.0;
00359 }
00360 if(RECHARGE==YEA){
00361 rechargeFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00362 strcpy(rechargeFile, tmpFileName);
00363 strcat(rechargeFile, ".recharge.txt");
00364 rechargePtr=fopen(rechargeFile, "w");
00365
00366 tempRecharge=(double *)malloc(mData->NumEle * sizeof(double));
00367 for(i=0; i<mData->NumEle; i++)
00368 tempRecharge[i]=0.0;
00369 }
00370
00371
00372 if(RivHead==YEA){
00373 rivHeadFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00374 strcpy(rivHeadFile, tmpFileName);
00375 strcat(rivHeadFile, ".rivHead.txt");
00376 rivHeadPtr=fopen(rivHeadFile, "w");
00377
00378 tempHead=(double *)malloc(mData->NumRiv * sizeof(double));
00379 for(i=0; i<mData->NumRiv; i++)
00380 tempHead[i]=0.0;
00381 }
00382
00383
00384 if(RivFlow==YEA){
00385 rivFlowFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00386 strcpy(rivFlowFile, tmpFileName);
00387 strcat(rivFlowFile, ".rivFlow.txt");
00388 rivFlowPtr=fopen(rivFlowFile, "w");
00389
00390 tempFlow=(double *)malloc(mData->NumRiv * sizeof(double));
00391 for(i=0; i<mData->NumRiv; i++)
00392 tempFlow[i]=0.0;
00393 }
00394 if(RivBase==YEA){
00395 rivBaseFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00396 strcpy(rivBaseFile, tmpFileName);
00397 strcat(rivBaseFile, ".rivBase.txt");
00398 rivBasePtr=fopen(rivBaseFile, "w");
00399
00400 tempBase=(double *)malloc(mData->NumRiv * sizeof(double));
00401 for(i=0; i<mData->NumRiv; i++)
00402 tempBase[i]=0.0;
00403 }
00404 if(RivSurf==YEA){
00405 rivSurfFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00406 strcpy(rivSurfFile, tmpFileName);
00407 strcat(rivSurfFile, ".rivSurf.txt");
00408 rivSurfPtr=fopen(rivSurfFile, "w");
00409
00410 tempSurf=(double *)malloc(mData->NumRiv * sizeof(double));
00411 for(i=0; i<mData->NumRiv; i++)
00412 tempSurf[i]=0.0;
00413 }
00414 }
00415
00416
00417
00418
00419 if(FPRINT_MODE==CDF){
00420
00421 if(ISState==YEA){
00422 isStateFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00423 strcpy(isStateFile, tmpFileName);
00424 strcat(isStateFile, ".is.nc");
00425 if ((retval = nc_create(isStateFile, NC_CLOBBER, &isStateID)))
00426 ERR(retval);
00427 if ((retval = nc_def_dim(isStateID, "Elements" , NUMELE, &ele_dimid)))
00428 ERR(retval);
00429 if ((retval = nc_def_dim(isStateID, "Time", NC_UNLIMITED, &rec_dimid)))
00430 ERR(retval);
00431 dimids[0]=rec_dimid;
00432 dimids[1]=ele_dimid;
00433 if((retval = nc_def_var(isStateID, "Interception_Storage_State", NC_DOUBLE, NDIMS, dimids, &isState_varid)))
00434 ERR(retval);
00435 if ((retval = nc_enddef(isStateID)))
00436 ERR(retval);
00437
00438 tempIS=(double *)malloc(mData->NumEle * sizeof(double));
00439 for(i=0; i<mData->NumEle; i++)
00440 tempIS[i]=0.0;
00441 }
00442 if(SatState==YEA){
00443 satStateFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00444 strcpy(satStateFile, tmpFileName);
00445 strcat(satStateFile, ".sat.nc");
00446 if ((retval = nc_create(satStateFile, NC_CLOBBER, &satStateID)))
00447 ERR(retval);
00448 if ((retval = nc_def_dim(satStateID, "Elements" , NUMELE, &ele_dimid)))
00449 ERR(retval);
00450 if ((retval = nc_def_dim(satStateID, "time", NC_UNLIMITED, &rec_dimid)))
00451 ERR(retval);
00452 dimids[0]=rec_dimid;
00453 dimids[1]=ele_dimid;
00454 if((retval = nc_def_var(satStateID, "Saturated_Zone_State", NC_DOUBLE, NDIMS, dimids, &satState_varid)))
00455 ERR(retval);
00456 if ((retval = nc_enddef(satStateID)))
00457 ERR(retval);
00458
00459 tempSatState=(double *)malloc(mData->NumEle * sizeof(double));
00460 for(i=0; i<mData->NumEle; i++)
00461 tempSatState[i]=0.0;
00462 }
00463 if(UsatState==YEA){
00464 usatStateFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00465 strcpy(usatStateFile, tmpFileName);
00466 strcat(usatStateFile, ".usat.nc");
00467 if ((retval = nc_create(usatStateFile, NC_CLOBBER, &usatStateID)))
00468 ERR(retval);
00469 if ((retval = nc_def_dim(usatStateID, "Elements" , NUMELE, &ele_dimid)))
00470 ERR(retval);
00471 if ((retval = nc_def_dim(usatStateID, "time", NC_UNLIMITED, &rec_dimid)))
00472 ERR(retval);
00473 dimids[0]=rec_dimid;
00474 dimids[1]=ele_dimid;
00475 if((retval = nc_def_var(usatStateID, "Unsaturated_Zone_State", NC_DOUBLE, NDIMS, dimids, &usatState_varid)))
00476 ERR(retval);
00477 if ((retval = nc_enddef(usatStateID)))
00478 ERR(retval);
00479
00480 tempUsatState=(double *)malloc(mData->NumEle * sizeof(double));
00481 for(i=0; i<mData->NumEle; i++)
00482 tempUsatState[i]=0.0;
00483 }
00484 if(SurfState==YEA){
00485 surfStateFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00486 strcpy(surfStateFile, tmpFileName);
00487 strcat(surfStateFile, ".surf.nc");
00488 if ((retval = nc_create(surfStateFile, NC_CLOBBER, &surfStateID)))
00489 ERR(retval);
00490 if ((retval = nc_def_dim(surfStateID, "Elements" , NUMELE, &ele_dimid)))
00491 ERR(retval);
00492 if ((retval = nc_def_dim(surfStateID, "time", NC_UNLIMITED, &rec_dimid)))
00493 ERR(retval);
00494 dimids[0]=rec_dimid;
00495 dimids[1]=ele_dimid;
00496 if((retval = nc_def_var(surfStateID, "Surface_Flow_State", NC_DOUBLE, NDIMS, dimids, &surfState_varid)))
00497 ERR(retval);
00498 if ((retval = nc_enddef(surfStateID)))
00499 ERR(retval);
00500
00501 tempSurfState=(double *)malloc(mData->NumEle * sizeof(double));
00502 for(i=0; i<mData->NumEle; i++)
00503 tempSurfState[i]=0.0;
00504 }
00505
00506
00507 if(ET0==YEA){
00508 et0File = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00509 strcpy(et0File, tmpFileName);
00510 strcat(et0File, ".et0.nc");
00511 if ((retval = nc_create(et0File, NC_CLOBBER, &et0ID)))
00512 ERR(retval);
00513 if ((retval = nc_def_dim(et0ID, "Elements" , NUMELE, &ele_dimid)))
00514 ERR(retval);
00515 if ((retval = nc_def_dim(et0ID, "time", NC_UNLIMITED, &rec_dimid)))
00516 ERR(retval);
00517 dimids[0]=rec_dimid;
00518 dimids[1]=ele_dimid;
00519 if((retval = nc_def_var(et0ID, "ET0", NC_DOUBLE, NDIMS, dimids, &et0_varid)))
00520 ERR(retval);
00521 if ((retval = nc_enddef(et0ID)))
00522 ERR(retval);
00523
00524 tempET0=(double *)malloc(mData->NumEle * sizeof(double));
00525 for(i=0; i<mData->NumEle; i++)
00526 tempET0[i]=0.0;
00527 }
00528 if(ET1==YEA){
00529 et1File = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00530 strcpy(et1File, tmpFileName);
00531 strcat(et1File, ".et1.nc");
00532 if ((retval = nc_create(et1File, NC_CLOBBER, &et1ID)))
00533 ERR(retval);
00534 if ((retval = nc_def_dim(et1ID, "Elements" , NUMELE, &ele_dimid)))
00535 ERR(retval);
00536 if ((retval = nc_def_dim(et1ID, "time", NC_UNLIMITED, &rec_dimid)))
00537 ERR(retval);
00538 dimids[0]=rec_dimid;
00539 dimids[1]=ele_dimid;
00540 if((retval = nc_def_var(et1ID, "ET1", NC_DOUBLE, NDIMS, dimids, &et1_varid)))
00541 ERR(retval);
00542 if ((retval = nc_enddef(et1ID)))
00543 ERR(retval);
00544
00545 tempET1=(double *)malloc(mData->NumEle * sizeof(double));
00546 for(i=0; i<mData->NumEle; i++)
00547 tempET1[i]=0.0;
00548 }
00549 if(ET2==YEA){
00550 et2File = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00551 strcpy(et2File, tmpFileName);
00552 strcat(et2File, ".et2.nc");
00553 if ((retval = nc_create(et2File, NC_CLOBBER, &et2ID)))
00554 ERR(retval);
00555 if ((retval = nc_def_dim(et2ID, "Elements" , NUMELE, &ele_dimid)))
00556 ERR(retval);
00557 if ((retval = nc_def_dim(et2ID, "time", NC_UNLIMITED, &rec_dimid)))
00558 ERR(retval);
00559 dimids[0]=rec_dimid;
00560 dimids[1]=ele_dimid;
00561 if((retval = nc_def_var(et2ID, "ET2", NC_DOUBLE, NDIMS, dimids, &et2_varid)))
00562 ERR(retval);
00563 if ((retval = nc_enddef(et2ID)))
00564 ERR(retval);
00565
00566 tempET2=(double *)malloc(mData->NumEle * sizeof(double));
00567 for(i=0; i<mData->NumEle; i++)
00568 tempET2[i]=0.0;
00569 }
00570 if(NetPpt==YEA){
00571 netPrecipFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00572 strcpy(netPrecipFile, tmpFileName);
00573 strcat(netPrecipFile, ".netPrecip.nc");
00574 if ((retval = nc_create(netPrecipFile, NC_CLOBBER, &netPrecipID)))
00575 ERR(retval);
00576 if ((retval = nc_def_dim(netPrecipID, "Elements" , NUMELE, &ele_dimid)))
00577 ERR(retval);
00578 if ((retval = nc_def_dim(netPrecipID, "time", NC_UNLIMITED, &rec_dimid)))
00579 ERR(retval);
00580 dimids[0]=rec_dimid;
00581 dimids[1]=ele_dimid;
00582 if((retval = nc_def_var(netPrecipID, "Net_Precipitation", NC_DOUBLE, NDIMS, dimids, &netPrecip_varid)))
00583 ERR(retval);
00584 if ((retval = nc_enddef(netPrecipID)))
00585 ERR(retval);
00586
00587 tempNetPpt=(double *)malloc(mData->NumEle * sizeof(double));
00588 for(i=0; i<mData->NumEle; i++)
00589 tempNetPpt[i]=0.0;
00590 }
00591 if(Infil==YEA){
00592 infilFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00593 strcpy(infilFile, tmpFileName);
00594 strcat(infilFile, ".infil.nc");
00595 if ((retval = nc_create(infilFile, NC_CLOBBER, &infilID)))
00596 ERR(retval);
00597 if ((retval = nc_def_dim(infilID, "Elements" , NUMELE, &ele_dimid)))
00598 ERR(retval);
00599 if ((retval = nc_def_dim(infilID, "time", NC_UNLIMITED, &rec_dimid)))
00600 ERR(retval);
00601 dimids[0]=rec_dimid;
00602 dimids[1]=ele_dimid;
00603 if((retval = nc_def_var(infilID, "Infiltration", NC_DOUBLE, NDIMS, dimids, &infil_varid)))
00604 ERR(retval);
00605 if ((retval = nc_enddef(infilID)))
00606 ERR(retval);
00607
00608 tempInfil=(double *)malloc(mData->NumEle * sizeof(double));
00609 for(i=0; i<mData->NumEle; i++)
00610 tempInfil[i]=0.0;
00611 }
00612 if(RECHARGE==YEA){
00613 rechargeFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00614 strcpy(rechargeFile, tmpFileName);
00615 strcat(rechargeFile, ".recharge.nc");
00616 if ((retval = nc_create(rechargeFile, NC_CLOBBER, &rechargeID)))
00617 ERR(retval);
00618 if ((retval = nc_def_dim(rechargeID, "Elements" , NUMELE, &ele_dimid)))
00619 ERR(retval);
00620 if ((retval = nc_def_dim(rechargeID, "time", NC_UNLIMITED, &rec_dimid)))
00621 ERR(retval);
00622 dimids[0]=rec_dimid;
00623 dimids[1]=ele_dimid;
00624 if((retval = nc_def_var(rechargeID, "Recharge2GW", NC_DOUBLE, NDIMS, dimids, &recharge_varid)))
00625 ERR(retval);
00626 if ((retval = nc_enddef(rechargeID)))
00627 ERR(retval);
00628
00629 tempRecharge=(double *)malloc(mData->NumEle * sizeof(double));
00630 for(i=0; i<mData->NumEle; i++)
00631 tempRecharge[i]=0.0;
00632 }
00633
00634
00635 if(RivHead==YEA){
00636 rivHeadFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00637 strcpy(rivHeadFile, tmpFileName);
00638 strcat(rivHeadFile, ".rivHead.nc");
00639 if ((retval = nc_create(rivHeadFile, NC_CLOBBER, &rivHeadID)))
00640 ERR(retval);
00641 if ((retval = nc_def_dim(rivHeadID, "RiverSegments" , NUMRIV, &ele_dimid)))
00642 ERR(retval);
00643 if ((retval = nc_def_dim(rivHeadID, "time", NC_UNLIMITED, &rec_dimid)))
00644 ERR(retval);
00645 dimids[0]=rec_dimid;
00646 dimids[1]=ele_dimid;
00647 if((retval = nc_def_var(rivHeadID, "RivState", NC_DOUBLE, NDIMS, dimids, &rivHead_varid)))
00648 ERR(retval);
00649 if ((retval = nc_enddef(rivHeadID)))
00650 ERR(retval);
00651
00652 tempHead=(double *)malloc(mData->NumRiv * sizeof(double));
00653 for(i=0; i<mData->NumRiv; i++)
00654 tempHead[i]=0.0;
00655 }
00656
00657
00658 if(RivFlow==YEA){
00659 rivFlowFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00660 strcpy(rivFlowFile, tmpFileName);
00661 strcat(rivFlowFile, ".rivFlow.nc");
00662 if ((retval = nc_create(rivFlowFile, NC_CLOBBER, &rivFlowID)))
00663 ERR(retval);
00664 if ((retval = nc_def_dim(rivFlowID, "RiverSegments" , NUMRIV, &ele_dimid)))
00665 ERR(retval);
00666 if ((retval = nc_def_dim(rivFlowID, "time", NC_UNLIMITED, &rec_dimid)))
00667 ERR(retval);
00668 dimids[0]=rec_dimid;
00669 dimids[1]=ele_dimid;
00670 if((retval = nc_def_var(rivFlowID, "RivFlow", NC_DOUBLE, NDIMS, dimids, &rivFlow_varid)))
00671 ERR(retval);
00672 if ((retval = nc_enddef(rivFlowID)))
00673 ERR(retval);
00674
00675 tempFlow=(double *)malloc(mData->NumRiv * sizeof(double));
00676 for(i=0; i<mData->NumRiv; i++)
00677 tempFlow[i]=0.0;
00678 }
00679 if(RivBase==YEA){
00680 rivBaseFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00681 strcpy(rivBaseFile, tmpFileName);
00682 strcat(rivBaseFile, ".rivBase.nc");
00683 if ((retval = nc_create(rivBaseFile, NC_CLOBBER, &rivBaseID)))
00684 ERR(retval);
00685 if ((retval = nc_def_dim(rivBaseID, "RiverSegments" , NUMRIV, &ele_dimid)))
00686 ERR(retval);
00687 if ((retval = nc_def_dim(rivBaseID, "time", NC_UNLIMITED, &rec_dimid)))
00688 ERR(retval);
00689 dimids[0]=rec_dimid;
00690 dimids[1]=ele_dimid;
00691 if((retval = nc_def_var(rivBaseID, "Base2Riv", NC_DOUBLE, NDIMS, dimids, &rivBase_varid)))
00692 ERR(retval);
00693 if ((retval = nc_enddef(rivBaseID)))
00694 ERR(retval);
00695
00696 tempBase=(double *)malloc(mData->NumRiv * sizeof(double));
00697 for(i=0; i<mData->NumRiv; i++)
00698 tempBase[i]=0.0;
00699 }
00700 if(RivSurf==YEA){
00701 rivSurfFile = (char *)malloc(sizeof(char)*(20+strlen(tmpFileName)));
00702 strcpy(rivSurfFile, tmpFileName);
00703 strcat(rivSurfFile, ".rivSurf.nc");
00704 if ((retval = nc_create(rivSurfFile, NC_CLOBBER, &rivSurfID)))
00705 ERR(retval);
00706 if ((retval = nc_def_dim(rivSurfID, "RiverSegments" , NUMRIV, &ele_dimid)))
00707 ERR(retval);
00708 if ((retval = nc_def_dim(rivSurfID, "time", NC_UNLIMITED, &rec_dimid)))
00709 ERR(retval);
00710 dimids[0]=rec_dimid;
00711 dimids[1]=ele_dimid;
00712 if((retval = nc_def_var(rivSurfID, "Over2Riv", NC_DOUBLE, NDIMS, dimids, &rivSurf_varid)))
00713 ERR(retval);
00714 if ((retval = nc_enddef(rivSurfID)))
00715 ERR(retval);
00716
00717 tempSurf=(double *)malloc(mData->NumRiv * sizeof(double));
00718 for(i=0; i<mData->NumRiv; i++)
00719 tempSurf[i]=0.0;
00720 }
00721
00722 }
00723
00724 }
00725
00726
00727
00728
00729
00730 void FPrintCloseAll(void)
00732 {
00733
00734 if(FPRINT_MODE==TXT){
00735 if(ISState==YEA)
00736 fclose(isStatePtr);
00737 if(SatState==YEA)
00738 fclose(satStatePtr);
00739 if(UsatState==YEA)
00740 fclose(usatStatePtr);
00741 if(SurfState==YEA)
00742 fclose(surfStatePtr);
00743 if(ET0==YEA)
00744 fclose(et0Ptr);
00745 if(ET1==YEA)
00746 fclose(et1Ptr);
00747 if(ET2==YEA)
00748 fclose(et2Ptr);
00749 if(NetPpt==YEA)
00750 fclose(netPrecipPtr);
00751 if(Infil==YEA)
00752 fclose(infilPtr);
00753 if(RECHARGE==YEA)
00754 fclose(rechargePtr);
00755 if(RivHead==YEA)
00756 fclose(rivHeadPtr);
00757 if(RivFlow==YEA)
00758 fclose(rivFlowPtr);
00759 if(RivBase==YEA)
00760 fclose(rivBasePtr);
00761 if(RivSurf==YEA)
00762 fclose(rivSurfPtr);
00763 }
00764
00765
00766 if(FPRINT_MODE==CDF){
00767 if(ISState==YEA)
00768 ncclose(isStateID);
00769 if(SatState==YEA)
00770 ncclose(satStateID);
00771 if(UsatState==YEA)
00772 ncclose(usatStateID);
00773 if(SurfState==YEA)
00774 ncclose(surfStateID);
00775 if(ET0==YEA)
00776 ncclose(et0ID);
00777 if(ET1==YEA)
00778 ncclose(et1ID);
00779 if(ET2==YEA)
00780 ncclose(et2ID);
00781 if(NetPpt==YEA)
00782 ncclose(netPrecipID);
00783 if(Infil==YEA)
00784 ncclose(infilID);
00785 if(RECHARGE==YEA)
00786 ncclose(rechargeID);
00787 if(RivHead==YEA)
00788 ncclose(rivHeadID);
00789 if(RivFlow==YEA)
00790 ncclose(rivFlowID);
00791 if(RivBase==YEA)
00792 ncclose(rivBaseID);
00793 if(RivSurf==YEA)
00794 ncclose(rivSurfID);
00795 }
00796
00797 }
00798
00799 realtype FPrint_CS_AreaOrPerem(int rivOrder, realtype rivDepth, realtype rivCoeff, realtype a_pBool)
00801
00806 {
00807 realtype rivArea, rivPerem, eq_Wid, EPSILON=0.05;
00808 switch(rivOrder)
00809 {
00810 case 1:
00811 rivArea = rivDepth*rivCoeff;
00812 rivPerem= 2.0*rivDepth+rivCoeff;
00813 eq_Wid=rivCoeff;
00814 return (a_pBool==1?rivArea:(a_pBool==2?rivPerem:eq_Wid));
00815 case 2:
00816 rivArea = pow(rivDepth,2)/rivCoeff;
00817 rivPerem = 2.0*rivDepth*pow(1+pow(rivCoeff,2),0.5)/rivCoeff;
00818 eq_Wid=2.0*pow(rivDepth+EPSILON,1/(rivOrder-1))/pow(rivCoeff,1/(rivOrder-1));
00819 return (a_pBool==1?rivArea:(a_pBool==2?rivPerem:eq_Wid));
00820 case 3:
00821 rivArea = 4*pow(rivDepth,1.5)/(3*pow(rivCoeff,0.5));
00822 rivPerem =(pow(rivDepth*(1+4*rivCoeff*rivDepth)/rivCoeff,0.5))+(log(2*pow(rivCoeff*rivDepth,0.5)+pow(1+4*rivCoeff*rivDepth,0.5))/(2*rivCoeff));
00823 eq_Wid=2.0*pow(rivDepth+EPSILON,1/(rivOrder-1))/pow(rivCoeff,1/(rivOrder-1));
00824 return (a_pBool==1?rivArea:(a_pBool==2?rivPerem:eq_Wid));
00825 case 4:
00826 rivArea = 3*pow(rivDepth,4.0/3.0)/(2*pow(rivCoeff,1.0/3.0));
00827 rivPerem = 2*((pow(rivDepth*(1+9*pow(rivCoeff,2.0/3.0)*rivDepth),0.5)/3)+(log(3*pow(rivCoeff,1.0/3.0)*pow(rivDepth,0.5)+pow(1+9*pow(rivCoeff,2.0/3.0)*rivDepth,0.5))/(9*pow(rivCoeff,1.0/3.0))));
00828 eq_Wid=2.0*pow(rivDepth+EPSILON,1/(rivOrder-1))/pow(rivCoeff,1/(rivOrder-1));
00829 return (a_pBool==1?rivArea:(a_pBool==2?rivPerem:eq_Wid));
00830 default:
00831 printf("\n Relevant Values entered are wrong");
00832 printf("\n Depth: %lf\tCoeff: %lf\tOrder: %d\t");
00833 return 0;
00834 }
00835 }
00836
00837 realtype FPrint_OverlandFlow(int loci, int locj, int surfmode, realtype avg_y, realtype grad_y, realtype avg_sf, realtype alfa, realtype beta, realtype crossA, realtype avg_rough, int eletypeBool, realtype avg_perem)
00838
00839
00852 {
00853 realtype flux;
00854 int locBool;
00855 float hydRadius;
00856
00857 if(fabs(grad_y) <= avg_sf)
00858 {
00859 flux = 0;
00860 }
00861 else
00862 {
00863 if(grad_y > 0)
00864 {
00865 locBool=1;
00866 }
00867 else if(grad_y < 0)
00868 {
00869 locBool=-1;
00870 }
00871 switch(surfmode)
00872 {
00873 case 1:
00874 if(eletypeBool==1)
00875 {
00876
00877 alfa = sqrt(locBool*grad_y)/avg_rough;
00878 beta = pow(avg_y, 2.0/3.0);
00879 flux = locBool*alfa*beta*crossA;
00880 break;
00881 }
00882 else
00883 {
00884
00885
00886
00887
00888 hydRadius = (avg_perem>0?crossA/avg_perem:0);
00889 flux = locBool*sqrt(locBool*grad_y)*crossA*pow(hydRadius,2.0/3.0)/avg_rough;
00890 break;
00891 }
00892 case 2:
00893 if(eletypeBool==1)
00894 {
00895
00896 alfa = pow(pow(avg_y, 1.0/3.0),2)/(1.0*avg_rough);
00897 beta = alfa;
00898 flux = locBool*crossA*beta*sqrt(locBool*grad_y);
00899 break;
00900 }
00901 else
00902 {
00903
00904
00905
00906
00907 hydRadius = (avg_perem>0?crossA/avg_perem:0);
00908 flux = locBool*sqrt(locBool*grad_y)*crossA*pow(hydRadius,2.0/3.0)/(1.0*avg_rough);
00909 break;
00910 }
00911 default:
00912 if(eletypeBool==1)
00913 {
00914 printf("Fatal Error: Surface Overland Mode Type Is Wrong!");
00915 }
00916 else
00917 {
00918 printf("Fatal Error: River Routing Mode Type Is Wrong!");
00919 }
00920 exit(1);
00921 }
00922 }
00923 return flux;
00924 }
00925
00926
00927 void printRiverFlow(Model_Data mData, N_Vector CV_Y, FILE *flow_file, realtype t)
00929
00934 {
00935 int i;
00936 realtype TotalY_Riv, Perem, TotalY_Riv_down, Perem_down, Avg_Perem, Avg_Y_Riv, Avg_Rough, Distance, Dif_Y_Riv, Avg_Sf, CrossA, Alfa, Beta;
00937 realtype Flux;
00938 for(i=0; i<mData->NumRiv; i++)
00939 {
00940 TotalY_Riv = NV_Ith_S(CV_Y, i + 3*mData->NumEle) + mData->Riv[i].zmin;
00941 Perem = FPrint_CS_AreaOrPerem(mData->Riv_Shape[mData->Riv[i].shape - 1].interpOrd,NV_Ith_S(CV_Y, i + 3*mData->NumEle),mData->Riv_Shape[mData->Riv[i].shape - 1].coeff,2);
00942 if(mData->Riv[i].down > 0)
00943 {
00944 TotalY_Riv_down = NV_Ith_S(CV_Y, mData->Riv[i].down - 1 + 3*mData->NumEle) + mData->Riv[mData->Riv[i].down - 1].zmin;
00945 Perem_down = FPrint_CS_AreaOrPerem(mData->Riv_Shape[mData->Riv[mData->Riv[i].down - 1].shape - 1].interpOrd,NV_Ith_S(CV_Y, mData->Riv[i].down - 1 + 3*mData->NumEle),mData->Riv_Shape[mData->Riv[mData->Riv[i].down - 1].shape - 1].coeff,2);
00946 Avg_Perem = (Perem + Perem_down)/2.0;
00947 if(mData->Riv[mData->Riv[i].down - 1].zmin>mData->Riv[i].zmin)
00948 {
00949 if(mData->Riv[mData->Riv[i].down - 1].zmin > TotalY_Riv)
00950 {
00951 Avg_Y_Riv=NV_Ith_S(CV_Y, mData->Riv[i].down - 1 + 3*mData->NumEle)/2;
00952 }
00953 else
00954 {
00955 Avg_Y_Riv=(TotalY_Riv-mData->Riv[mData->Riv[i].down - 1].zmin+NV_Ith_S(CV_Y, mData->Riv[i].down - 1 + 3*mData->NumEle))/2;
00956 }
00957 }
00958 else
00959 {
00960 if(mData->Riv[i].zmin>TotalY_Riv_down)
00961 {
00962 Avg_Y_Riv=NV_Ith_S(CV_Y, i + 3*mData->NumEle)/2;
00963 }
00964 else
00965 {
00966 Avg_Y_Riv=(NV_Ith_S(CV_Y, i + 3*mData->NumEle)+TotalY_Riv_down-mData->Riv[i].zmin)/2;
00967 }
00968 }
00969 Avg_Rough = (mData->Riv_Mat[mData->Riv[i].material - 1].Rough + mData->Riv_Mat[mData->Riv[mData->Riv[i].down - 1].material-1].Rough)/2.0;
00970
00971 Distance = (mData->Riv[i].Length+mData->Riv[mData->Riv[i].down - 1].Length)/2;
00972
00973 Dif_Y_Riv = (TotalY_Riv - TotalY_Riv_down)/Distance;
00974
00975 Avg_Sf = (mData->Riv_Mat[mData->Riv[i].material - 1].Sf + mData->Riv_Mat[mData->Riv[mData->Riv[i].down - 1].material-1].Sf)/2.0;
00976
00977 CrossA = FPrint_CS_AreaOrPerem(mData->Riv_Shape[mData->Riv[i].shape - 1].interpOrd,Avg_Y_Riv,mData->Riv_Shape[mData->Riv[i].shape - 1].coeff,1);
00978 Flux = FPrint_OverlandFlow(i,1,mData->RivMode, Avg_Y_Riv,Dif_Y_Riv,Avg_Sf,Alfa,Beta,CrossA,Avg_Rough,0,Avg_Perem);
00979
00980 if(NV_Ith_S(CV_Y, i + 3*mData->NumEle) <= 0 && Flux > 0)
00981 {
00982 Flux = 0.0;
00983 }
00984 else if(NV_Ith_S(CV_Y, mData->Riv[i].down - 1 + 3*mData->NumEle) <= 0 && Flux < 0)
00985 {
00986 Flux = 0.0;
00987 }
00988 }
00989 else
00990 {
00991 Flux = 0.0;
00992 }
00993
00994 tempFlow[i]+=Flux/RivFlowT;
00995 if(((int) t)%RivFlowT==0){
00996 fprintf(flow_file, "%lf\t", tempFlow[i]);
00997 tempFlow[i]=0.0;
00998 }
00999 }
01000
01001 if(((int) t)%RivFlowT==0){
01002 fprintf(flow_file, "\n");
01003 }
01004 }
01005
01006
01007 void printRiverFlowcdf(Model_Data mData, N_Vector CV_Y, int ncid, int data_varid, realtype t)
01009
01015 {
01016 int i;
01017 static int call=0;
01018 float *data;
01019 realtype TotalY_Riv, Perem, TotalY_Riv_down, Perem_down, Avg_Perem, Avg_Y_Riv, Avg_Rough, Distance, Dif_Y_Riv, Avg_Sf, CrossA, Alfa, Beta;
01020 realtype Flux;
01021 for(i=0; i<mData->NumRiv; i++)
01022 {
01023 TotalY_Riv = NV_Ith_S(CV_Y, i + 3*mData->NumEle) + mData->Riv[i].zmin;
01024 Perem = FPrint_CS_AreaOrPerem(mData->Riv_Shape[mData->Riv[i].shape - 1].interpOrd,NV_Ith_S(CV_Y, i + 3*mData->NumEle),mData->Riv_Shape[mData->Riv[i].shape - 1].coeff,2);
01025 if(mData->Riv[i].down > 0)
01026 {
01027 TotalY_Riv_down = NV_Ith_S(CV_Y, mData->Riv[i].down - 1 + 3*mData->NumEle) + mData->Riv[mData->Riv[i].down - 1].zmin;
01028 Perem_down = FPrint_CS_AreaOrPerem(mData->Riv_Shape[mData->Riv[mData->Riv[i].down - 1].shape - 1].interpOrd,NV_Ith_S(CV_Y, mData->Riv[i].down - 1 + 3*mData->NumEle),mData->Riv_Shape[mData->Riv[mData->Riv[i].down - 1].shape - 1].coeff,2);
01029 Avg_Perem = (Perem + Perem_down)/2.0;
01030 if(mData->Riv[mData->Riv[i].down - 1].zmin>mData->Riv[i].zmin)
01031 {
01032 if(mData->Riv[mData->Riv[i].down - 1].zmin > TotalY_Riv)
01033 {
01034 Avg_Y_Riv=NV_Ith_S(CV_Y, mData->Riv[i].down - 1 + 3*mData->NumEle)/2;
01035 }
01036 else
01037 {
01038 Avg_Y_Riv=(TotalY_Riv-mData->Riv[mData->Riv[i].down - 1].zmin+NV_Ith_S(CV_Y, mData->Riv[i].down - 1 + 3*mData->NumEle))/2;
01039 }
01040 }
01041 else
01042 {
01043 if(mData->Riv[i].zmin>TotalY_Riv_down)
01044 {
01045 Avg_Y_Riv=NV_Ith_S(CV_Y, i + 3*mData->NumEle)/2;
01046 }
01047 else
01048 {
01049 Avg_Y_Riv=(NV_Ith_S(CV_Y, i + 3*mData->NumEle)+TotalY_Riv_down-mData->Riv[i].zmin)/2;
01050 }
01051 }
01052 Avg_Rough = (mData->Riv_Mat[mData->Riv[i].material - 1].Rough + mData->Riv_Mat[mData->Riv[mData->Riv[i].down - 1].material-1].Rough)/2.0;
01053
01054 Distance = (mData->Riv[i].Length+mData->Riv[mData->Riv[i].down - 1].Length)/2;
01055
01056 Dif_Y_Riv = (TotalY_Riv - TotalY_Riv_down)/Distance;
01057
01058 Avg_Sf = (mData->Riv_Mat[mData->Riv[i].material - 1].Sf + mData->Riv_Mat[mData->Riv[mData->Riv[i].down - 1].material-1].Sf)/2.0;
01059
01060 CrossA = FPrint_CS_AreaOrPerem(mData->Riv_Shape[mData->Riv[i].shape - 1].interpOrd,Avg_Y_Riv,mData->Riv_Shape[mData->Riv[i].shape - 1].coeff,1);
01061 Flux = FPrint_OverlandFlow(i,1,mData->RivMode, Avg_Y_Riv,Dif_Y_Riv,Avg_Sf,Alfa,Beta,CrossA,Avg_Rough,0,Avg_Perem);
01062
01063 if(NV_Ith_S(CV_Y, i + 3*mData->NumEle) <= 0 && Flux > 0)
01064 {
01065 Flux = 0.0;
01066 }
01067 else if(NV_Ith_S(CV_Y, mData->Riv[i].down - 1 + 3*mData->NumEle) <= 0 && Flux < 0)
01068 {
01069 Flux = 0.0;
01070 }
01071 }
01072 else
01073 {
01074 Flux = 0.0;
01075 }
01076
01077 tempFlow[i]+=Flux/RivFlowT;
01078
01079 }
01080
01081 if(((int) t)%RivFlowT==0){
01082 startRiv[0]=call++;
01083 if((retval = nc_put_vara_double(ncid, data_varid, startRiv, countRiv, &tempFlow[0])))
01084 ERR(retval);
01085 for(i=0; i<mData->NumRiv; i++)
01086 tempFlow[i]=0.0;
01087 }
01088 }
01089
01090
01091 void printRiverBase(Model_Data mData, FILE *rivBaseFile, realtype t)
01093
01097 {
01098 int i;
01099 for(i=0; i<mData->NumRiv; i++){
01100 tempBase[i]+=(mData->FluxRiv[i][4]+mData->FluxRiv[i][5])/RivBaseT;
01101 if(((int) t)%RivBaseT==0){
01102 fprintf(rivBaseFile, "%lf\t", tempBase[i]);
01103 tempBase[i]=0.0;
01104 }
01105 }
01106 if(((int) t)%RivBaseT==0){
01107 fprintf(rivBaseFile, "\n");
01108 }
01109 }
01110
01111
01112 void printRiverBasecdf(Model_Data mData, int ncid, int data_varid, realtype t)
01114
01119 {
01120 int i;
01121 static int call=0;
01122 float *data;
01123 for(i=0; i<mData->NumRiv; i++){
01124 tempBase[i]+=(mData->FluxRiv[i][4]+mData->FluxRiv[i][5])/RivBaseT;
01125 }
01126 if(((int) t)%RivBaseT==0){
01127 startRiv[0]=call++;
01128 if((retval = nc_put_vara_double(ncid, data_varid, startRiv, countRiv, &tempBase[0])))
01129 ERR(retval);
01130 for(i=0; i<mData->NumRiv; i++)
01131 tempBase[i]=0.0;
01132 }
01133 }
01134
01135
01136 void printRiverSurf(Model_Data mData, FILE *rivSurfFile, realtype t)
01138
01142 {
01143 int i;
01144 for(i=0; i<mData->NumRiv; i++){
01145 tempSurf[i]+=(mData->FluxRiv[i][2]+mData->FluxRiv[i][3])/RivSurfT;
01146 if(((int) t)%RivSurfT==0){
01147 fprintf(rivSurfFile, "%lf\t", tempSurf[i]);
01148 tempSurf[i]=0.0;
01149 }
01150 }
01151 if(((int) t)%RivSurfT==0){
01152 fprintf(rivSurfFile, "\n");
01153 }
01154 }
01155
01156
01157 void printRiverSurfcdf(Model_Data mData, int ncid, int data_varid, realtype t)
01159
01164 {
01165 int i;
01166 static int call=0;
01167 float *data;
01168 for(i=0; i<mData->NumRiv; i++){
01169 tempSurf[i]+=(mData->FluxRiv[i][2]+mData->FluxRiv[i][3])/RivSurfT;
01170 }
01171 if(((int) t)%RivSurfT==0){
01172 startRiv[0]=call++;
01173 if((retval = nc_put_vara_double(ncid, data_varid, startRiv, countRiv, &tempSurf[0])))
01174 ERR(retval);
01175 for(i=0; i<mData->NumRiv; i++)
01176 tempSurf[i]=0.0;
01177 }
01178 }
01179
01180
01181 void printRiverHead(Model_Data mData, N_Vector CV_Y, FILE *rivHeadFile, realtype t)
01183
01188 {
01189 int i;
01190 for(i=0; i<mData->NumRiv; i++){
01191 tempHead[i]+=NV_Ith_S(CV_Y, 3*mData->NumEle + i)/RivHeadT;
01192 if(((int) t)%RivHeadT==0){
01193 fprintf(rivHeadFile, "%lf\t", tempHead[i]);
01194 tempHead[i]=0.0;
01195 }
01196 }
01197 if(((int) t)%RivHeadT==0){
01198 fprintf(rivHeadFile, "\n");
01199 }
01200 }
01201
01202
01203 void printRiverHeadcdf(Model_Data mData, N_Vector CV_Y, int ncid, int data_varid, realtype t)
01205
01211 {
01212 int i;
01213 static int call=0;
01214 float *data;
01215 for(i=0; i<mData->NumRiv; i++){
01216 tempHead[i]+=NV_Ith_S(CV_Y, 3*mData->NumEle + i)/RivHeadT;
01217 }
01218 if(((int) t)%RivHeadT==0){
01219 startRiv[0]=call++;
01220 if((retval = nc_put_vara_double(ncid, data_varid, startRiv, countRiv, &tempHead[0])))
01221 ERR(retval);
01222 for(i=0; i<mData->NumRiv; i++)
01223 tempHead[i]=0.0;
01224 }
01225 }
01226
01227
01228 void printIS(Model_Data mData, FILE *isFile, realtype t)
01230
01234 {
01235 int i;
01236 for(i=0; i<mData->NumEle; i++){
01237 tempIS[i]+=mData->EleIS[i]/ISStateT;
01238 if(((int) t)%ISStateT==0){
01239 fprintf(isFile, "%lf\t", tempIS[i]);
01240 tempIS[i]=0.0;
01241 }
01242 }
01243 if(((int) t)%ISStateT==0){
01244 fprintf(isFile, "\n");
01245 }
01246 }
01247
01248
01249 void printIScdf(Model_Data mData, int ncid, int data_varid, realtype t)
01251
01256 {
01257 int i;
01258 static int call=0;
01259 float *data;
01260 for(i=0; i<mData->NumEle; i++){
01261 tempIS[i]+=mData->EleIS[i]/ISStateT;
01262 }
01263 if(((int) t)%ISStateT==0){
01264 startEle[0]=call++;
01265 if((retval = nc_put_vara_double(ncid, data_varid, startEle, countEle, &tempIS[0])))
01266 ERR(retval);
01267 for(i=0; i<mData->NumEle; i++)
01268 tempIS[i]=0.0;
01269 }
01270 }
01271
01272
01273 void printSatState(Model_Data mData, N_Vector CV_Y, FILE *file, realtype t)
01275
01280 {
01281 int i;
01282 for(i=0; i<mData->NumEle; i++){
01283 tempSatState[i]+=NV_Ith_S(CV_Y, 2*mData->NumEle + i)/SatStateT;
01284 if(((int) t)%SatStateT==0){
01285 fprintf(file, "%lf\t", tempSatState[i]);
01286 tempSatState[i]=0.0;
01287 }
01288 }
01289 if(((int) t)%SatStateT==0){
01290 fprintf(file, "\n");
01291 }
01292 }
01293
01294
01295 void printSatStatecdf(Model_Data mData, N_Vector CV_Y, int ncid, int data_varid, realtype t)
01297
01303 {
01304 int i;
01305 static int call=0;
01306 float *data;
01307 for(i=0; i<mData->NumEle; i++){
01308 tempSatState[i]+=NV_Ith_S(CV_Y, 2*mData->NumEle + i)/SatStateT;
01309 }
01310 if(((int) t)%SatStateT==0){
01311 startEle[0]=call++;
01312 if((retval = nc_put_vara_double(ncid, data_varid, startEle, countEle, &tempSatState[0])))
01313 ERR(retval);
01314 for(i=0; i<mData->NumEle; i++)
01315 tempSatState[i]=0.0;
01316 }
01317 }
01318
01319
01320 void printUsatState(Model_Data mData, N_Vector CV_Y, FILE *file, realtype t)
01322
01327 {
01328 int i;
01329 for(i=0; i<mData->NumEle; i++){
01330 tempUsatState[i]+=NV_Ith_S(CV_Y, 1*mData->NumEle + i)/UsatStateT;
01331 if(((int) t)%UsatStateT==0){
01332 fprintf(file, "%lf\t", tempUsatState[i]);
01333 tempUsatState[i]=0.0;
01334 }
01335 }
01336 if(((int) t)%UsatStateT==0){
01337 fprintf(file, "\n");
01338 }
01339 }
01340
01341
01342 void printUsatStatecdf(Model_Data mData, N_Vector CV_Y, int ncid, int data_varid, realtype t)
01344
01350 {
01351 int i;
01352 static int call=0;
01353 float *data;
01354 for(i=0; i<mData->NumEle; i++){
01355 tempUsatState[i]+=NV_Ith_S(CV_Y, 1*mData->NumEle + i)/UsatStateT;
01356 }
01357 if(((int) t)%UsatStateT==0){
01358 startEle[0]=call++;
01359 if((retval = nc_put_vara_double(ncid, data_varid, startEle, countEle, &tempUsatState[0])))
01360 ERR(retval);
01361 for(i=0; i<mData->NumEle; i++)
01362 tempUsatState[i]=0.0;
01363 }
01364 }
01365
01366
01367 void printSurfState(Model_Data mData, N_Vector CV_Y, FILE *file, realtype t)
01369
01374 {
01375 int i;
01376 for(i=0; i<mData->NumEle; i++){
01377 tempSurfState[i]+=NV_Ith_S(CV_Y, i)/SurfStateT;
01378 if(((int) t)%SurfStateT==0){
01379 fprintf(file, "%lf\t", tempSurfState[i]);
01380 tempSurfState[i]=0.0;
01381 }
01382 }
01383 if(((int) t)%SurfStateT==0){
01384 fprintf(file, "\n");
01385 }
01386 }
01387
01388
01389 void printSurfStatecdf(Model_Data mData, N_Vector CV_Y, int ncid, int data_varid, realtype t)
01391
01397 {
01398 int i;
01399 static int call=0;
01400 float *data;
01401 for(i=0; i<mData->NumEle; i++){
01402 tempSurfState[i]+=NV_Ith_S(CV_Y, i)/SurfStateT;
01403 }
01404 if(((int) t)%SurfStateT==0){
01405 startEle[0]=call++;
01406 if((retval = nc_put_vara_double(ncid, data_varid, startEle, countEle, &tempSurfState[0])))
01407 ERR(retval);
01408 for(i=0; i<mData->NumEle; i++)
01409 tempSurfState[i]=0.0;
01410 }
01411 }
01412
01413
01414 void printET0(Model_Data mData, FILE *file, realtype t)
01416
01420 {
01421 int i;
01422 for(i=0; i<mData->NumEle; i++){
01423 tempET0[i]+=(mData->EleET[i][0]*mData->Ele[i].VegFrac)/ET0T;
01424 if(((int) t)%ET0T==0){
01425 fprintf(file, "%lf\t", tempET0[i]);
01426 tempET0[i]=0.0;
01427 }
01428 }
01429 if(((int) t)%ET0T==0){
01430 fprintf(file, "\n");
01431 }
01432 }
01433
01434
01435 void printET0cdf(Model_Data mData, int ncid, int data_varid, realtype t)
01437
01442 {
01443 int i;
01444 static int call=0;
01445 float *data;
01446 for(i=0; i<mData->NumEle; i++){
01447 tempET0[i]+=(mData->EleET[i][0]*mData->Ele[i].VegFrac)/ET0T;
01448 }
01449 if(((int) t)%ET0T==0){
01450 startEle[0]=call++;
01451 if((retval = nc_put_vara_double(ncid, data_varid, startEle, countEle, &tempET0[0])))
01452 ERR(retval);
01453 for(i=0; i<mData->NumEle; i++)
01454 tempET0[i]=0.0;
01455 }
01456 }
01457
01458
01459 void printET1(Model_Data mData, FILE *file, realtype t)
01461
01465 {
01466 int i;
01467 for(i=0; i<mData->NumEle; i++){
01468 tempET1[i]+=mData->EleET[i][1]/ET1T;
01469 if(((int) t)%ET1T==0){
01470 fprintf(file, "%lf\t", tempET1[i]);
01471 tempET1[i]=0.0;
01472 }
01473 }
01474 if(((int) t)%ET1T==0){
01475 fprintf(file, "\n");
01476 }
01477 }
01478
01479
01480 void printET1cdf(Model_Data mData, int ncid, int data_varid, realtype t)
01482
01487 {
01488 int i;
01489 static int call=0;
01490 float *data;
01491 data = (float *)malloc(mData->NumEle * sizeof(float));
01492 for(i=0; i<mData->NumEle; i++){
01493 tempET1[i]+=mData->EleET[i][1]/ET1T;
01494 }
01495 if(((int) t)%ET1T==0){
01496 startEle[0]=call++;
01497 if((retval = nc_put_vara_double(ncid, data_varid, startEle, countEle, &tempET1[0])))
01498 ERR(retval);
01499 for(i=0; i<mData->NumEle; i++)
01500 tempET1[i]=0.0;
01501 }
01502 }
01503
01504
01505 void printET2(Model_Data mData, FILE *file, realtype t)
01507
01511 {
01512 int i;
01513 for(i=0; i<mData->NumEle; i++){
01514 tempET2[i]+=mData->EleET[i][2]/ET2T;
01515 if(((int) t)%ET2T==0){
01516 fprintf(file, "%lf\t", tempET2[i]);
01517 tempET2[i]=0.0;
01518 }
01519 }
01520 if(((int) t)%ET2T==0){
01521 fprintf(file, "\n");
01522 }
01523 }
01524
01525
01526 void printET2cdf(Model_Data mData, int ncid, int data_varid, realtype t)
01528
01533 {
01534 int i;
01535 static int call=0;
01536 float *data;
01537 for(i=0; i<mData->NumEle; i++){
01538 tempET2[i]+=mData->EleET[i][2]/ET2T;
01539 }
01540 if(((int) t)%ET2T==0){
01541 startEle[0]=call++;
01542 if((retval = nc_put_vara_double(ncid, data_varid, startEle, countEle, &tempET2[0])))
01543 ERR(retval);
01544 for(i=0; i<mData->NumEle; i++)
01545 tempET2[i]=0.0;
01546 }
01547 }
01548
01549
01550 void printNetPpt(Model_Data mData, FILE *file, realtype t)
01552
01556 {
01557 int i;
01558 for(i=0; i<mData->NumEle; i++){
01559 tempNetPpt[i] += mData->EleNetPrep[i] / NetPptT;
01560 if(((int) t)%NetPptT==0){
01561 fprintf(file, "%lf\t", tempNetPpt[i]);
01562 tempNetPpt[i]=0.0;
01563 }
01564 }
01565 if(((int) t)%NetPptT==0){
01566 fprintf(file, "\n");
01567 }
01568 }
01569
01570
01571 void printNetPptcdf(Model_Data mData, int ncid, int data_varid, realtype t)
01573
01578 {
01579 int i;
01580 static int call=0;
01581 float *data;
01582 for(i=0; i<mData->NumEle; i++){
01583 tempNetPpt[i] += mData->EleNetPrep[i] / NetPptT;
01584 }
01585 if(((int) t)%NetPptT==0){
01586 startEle[0]=call++;
01587 if((retval = nc_put_vara_double(ncid, data_varid, startEle, countEle, &tempNetPpt[0])))
01588 ERR(retval);
01589 for(i=0; i<mData->NumEle; i++)
01590 tempNetPpt[i]=0.0;
01591 }
01592 }
01593
01594
01595 void printInfil(Model_Data mData, FILE *file, realtype t)
01597
01601 {
01602 int i;
01603 for(i=0; i<mData->NumEle; i++){
01604 tempInfil[i] += mData->EleVic[i] / InfilT;
01605 if(((int) t)%InfilT==0){
01606 fprintf(file, "%lf\t", tempInfil[i]);
01607 tempInfil[i]=0.0;
01608 }
01609 }
01610 if(((int) t)%InfilT==0){
01611 fprintf(file, "\n");
01612 }
01613 }
01614
01615
01616 void printInfilcdf(Model_Data mData, int ncid, int data_varid, realtype t)
01618
01623 {
01624 int i;
01625 static int call=0;
01626 float *data;
01627 for(i=0; i<mData->NumEle; i++){
01628 tempInfil[i] += mData->EleVic[i] / InfilT;
01629 }
01630 if(((int) t)%InfilT==0){
01631 startEle[0]=call++;
01632 if((retval = nc_put_vara_double(ncid, data_varid, startEle, countEle, &tempInfil[0])))
01633 ERR(retval);
01634 for(i=0; i<mData->NumEle; i++)
01635 tempInfil[i]=0.0;
01636 }
01637 }
01638
01639
01640 void printRecharge(Model_Data mData, FILE *file, realtype t)
01642
01646 {
01647 int i;
01648 for(i=0; i<mData->NumEle; i++){
01649 tempRecharge[i] += mData->Recharge[i] / RECHARGET;
01650 if(((int) t)%RECHARGET==0){
01651 fprintf(file, "%lf\t", tempRecharge[i]);
01652 tempRecharge[i]=0.0;
01653 }
01654 }
01655 if(((int) t)%RECHARGET==0){
01656 fprintf(file, "\n");
01657 }
01658 }
01659
01660
01661 void printRechargecdf(Model_Data mData, int ncid, int data_varid, realtype t)
01663
01668 {
01669 int i;
01670 static int call=0;
01671 float *data;
01672 for(i=0; i<mData->NumEle; i++){
01673 tempRecharge[i] += mData->Recharge[i] / RECHARGET;
01674 }
01675 if(((int) t)%RECHARGET==0){
01676 startEle[0]=call++;
01677 if((retval = nc_put_vara_double(ncid, data_varid, startEle, countEle, &tempRecharge[0])))
01678 ERR(retval);
01679 for(i=0; i<mData->NumEle; i++)
01680 tempRecharge[i]=0.0;
01681 }
01682 }