⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 get_global_param.c

📁 超强的大尺度水文模拟工具
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>#include <stdlib.h>#include <vicNl.h>#include <string.h> static char vcid[] = "$Id: get_global_param.c,v 4.2.2.5 2004/05/10 20:13:06 tbohn Exp $";/********************************************************************//*			GLOBAL VARIABLES                            *//********************************************************************/int NR;		      /* array index for atmos struct that indicates			 the model step avarage or sum */int NF;		      /* array index loop counter limit for atmos			 struct that indicates the SNOW_STEP values */ global_param_struct get_global_param(filenames_struct *names,                                     FILE             *gp)/**********************************************************************  get_global_param	Keith Cherkauer	            March 1998  This routine reads the VIC model global control file, getting  values for global parameters, model options, and debugging controls.  Modifications:  7-19-96 Modified to read time step		        KAC  4-5-98  Modified to read model options and debugging          controls from a single file                   KAC  01-20-00 modified to work with new radiation estimation routines,           new simplified frozen soil moisture, and new new open           format forcing file rad routines.              KAC  06-03-03 modified to handle both ASCII and BINARY state files.  KAC  09-02-2003 Moved COMPUTE_TREELINE flag from user_def.h to the              options structure.  Now when not set to FALSE, the              value indicates the default above treeline vegetation             if no usable vegetation types are in the grid cell              (i.e. everything has a canopy).  A negative value               will cause the model to use bare soil.  Make sure that              positive index value refer to a non-canopied vegetation             type in the vegetation library.                   KAC  10-Oct-03 Modified to understand the ARNO_PARAMS option.	TJB  10-May-04 Modified to display compile-time and run-time options	    if VERBOSE is set to TRUE.				TJB**********************************************************************/{  extern option_struct    options;  extern param_set_struct param_set;#if LINK_DEBUG  extern debug_struct     debug;#endif  extern int              NF, NR;  char cmdstr[MAXSTRING];  char optstr[MAXSTRING];  char flgstr[MAXSTRING];  char ErrStr[MAXSTRING];  int  file_num;  int  field;  int  i;  global_param_struct global;  /** Initialize non-global parameters **/  global.endmonth      = MISSING;  global.endday        = MISSING;  global.endyear       = MISSING;  global.skipyear      = 0;  for(i = 0; i < 2; i++) {    global.forcemonth[i] = 1;    global.forceday[i]   = 1;    global.forceyear[i]  = MISSING;    global.forcehour[i]  = 0;    global.forceskip[i]  = 0;  }  file_num             = 0;  global.nrecs         = MISSING;  strcpy(names->forcing[1],"FALSE");#if SAVE_STATE  global.stateyear = MISSING;  strcpy(global.statename, "NONE");#endif  /** Read through global control file to find parameters **/  fgets(cmdstr,MAXSTRING,gp);  while(!feof(gp)) {    if(cmdstr[0]!='#' && cmdstr[0]!='\n' && cmdstr[0]!='\0') {      sscanf(cmdstr,"%s",optstr);      /*******************************        Get Model Global Parameters	*****************************/      if(strcasecmp("NLAYER",optstr)==0) {        sscanf(cmdstr,"%*s %i",&options.Nlayer);      }      else if(strcasecmp("TIME_STEP",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.dt);      }      else if(strcasecmp("RESOLUTION",optstr)==0) {        sscanf(cmdstr,"%*s %f",&global.resolution);      }      else if(strcasecmp("STARTYEAR",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.startyear);      }      else if(strcasecmp("STARTMONTH",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.startmonth);      }      else if(strcasecmp("STARTDAY",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.startday);      }      else if(strcasecmp("STARTHOUR",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.starthour);      }      else if(strcasecmp("ENDYEAR",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.endyear);      }      else if(strcasecmp("ENDMONTH",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.endmonth);      }      else if(strcasecmp("ENDDAY",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.endday);      }      else if(strcasecmp("SKIPYEAR",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.skipyear);      }      else if(strcasecmp("FORCEYEAR",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.forceyear[file_num]);      }      else if(strcasecmp("FORCEMONTH",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.forcemonth[file_num]);      }      else if(strcasecmp("FORCEDAY",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.forceday[file_num]);      }      else if(strcasecmp("FORCEHOUR",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.forcehour[file_num]);      }      else if(strcasecmp("NRECS",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.nrecs);      }      else if(strcasecmp("WIND_H",optstr)==0) {        sscanf(cmdstr,"%*s %lf",&global.wind_h);      }      else if(strcasecmp("MEASURE_H",optstr)==0) {        sscanf(cmdstr,"%*s %lf",&global.measure_h);      }      else if(strcasecmp("NODES",optstr)==0) {        sscanf(cmdstr,"%*s %i",&options.Nnode);      }      else if(strcasecmp("MIN_RAIN_TEMP",optstr)==0) {        sscanf(cmdstr,"%*s %lf",&global.MIN_RAIN_TEMP);      }      else if(strcasecmp("MAX_SNOW_TEMP",optstr)==0) {        sscanf(cmdstr,"%*s %lf",&global.MAX_SNOW_TEMP);      }      /********************        Get Model Options	******************/      else if(strcasecmp("FULL_ENERGY",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("TRUE",flgstr)==0) {	  options.FULL_ENERGY=TRUE; 	  options.QUICK_FLUX=TRUE;	  options.GRND_FLUX=TRUE;	}	else options.FULL_ENERGY = FALSE;      }      else if(strcasecmp("FROZEN_SOIL",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("TRUE",flgstr)==0) {	  options.FROZEN_SOIL=TRUE;	  options.QUICK_FLUX=FALSE;	  options.GRND_FLUX=TRUE;	}        else options.FROZEN_SOIL = FALSE;      }      else if(strcasecmp("NOFLUX",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("TRUE",flgstr)==0) options.NOFLUX=TRUE;        else options.NOFLUX = FALSE;      }      else if(strcasecmp("DIST_PRCP",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("TRUE",flgstr)==0) options.DIST_PRCP=TRUE;        else options.DIST_PRCP = FALSE;      }      else if(strcasecmp("COMPRESS",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("TRUE",flgstr)==0) options.COMPRESS=TRUE;        else options.COMPRESS = FALSE;      }      else if(strcasecmp("CORRPREC",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("TRUE",flgstr)==0) options.CORRPREC=TRUE;        else options.CORRPREC = FALSE;      }      else if(strcasecmp("PRT_SNOW_BAND",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("TRUE",flgstr)==0) options.PRT_SNOW_BAND=TRUE;        else options.PRT_SNOW_BAND = FALSE;      }      else if(strcasecmp("GRID_DECIMAL",optstr)==0) {        sscanf(cmdstr,"%*s %i",&options.GRID_DECIMAL);      }      else if(strcasecmp("SNOW_BAND",optstr)==0) {	sscanf(cmdstr,"%*s %i %s",&options.SNOW_BAND,names->snow_band);      }      else if(strcasecmp("BINARY_OUTPUT",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("TRUE",flgstr)==0) options.BINARY_OUTPUT=TRUE;        else options.BINARY_OUTPUT = FALSE;      }      else if(strcasecmp("ARC_SOIL",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("TRUE",flgstr)==0) options.ARC_SOIL=TRUE;        else options.ARC_SOIL = FALSE;      }      else if(strcasecmp("SNOW_STEP",optstr)==0) {	sscanf(cmdstr,"%*s %i",&options.SNOW_STEP);      }      else if(strcasecmp("ROOT_ZONES",optstr)==0) {	sscanf(cmdstr,"%*s %i",&options.ROOT_ZONES);      }      else if(strcasecmp("PREC_EXPT",optstr)==0) {	sscanf(cmdstr,"%*s %f",&options.PREC_EXPT);      }      else if(strcasecmp("MIN_WIND_SPEED",optstr)==0) {	sscanf(cmdstr,"%*s %f",&options.MIN_WIND_SPEED);      }      else if(strcasecmp("GRND_FLUX",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("TRUE",flgstr)==0) options.GRND_FLUX=TRUE;        else options.GRND_FLUX = FALSE;      }      else if(strcasecmp("QUICK_FLUX",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("TRUE",flgstr)==0) options.QUICK_FLUX=TRUE;        else options.QUICK_FLUX = FALSE;      }      else if(strcasecmp("MOISTFRACT",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("TRUE",flgstr)==0) options.MOISTFRACT=TRUE;        else options.MOISTFRACT = FALSE;      }      else if(strcasecmp("ARNO_PARAMS",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("TRUE",flgstr)==0) options.ARNO_PARAMS=TRUE;        else options.ARNO_PARAMS = FALSE;      }#if SAVE_STATE      else if(strcasecmp("INIT_STATE",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("FALSE",flgstr)==0) options.INIT_STATE=FALSE;        else {	  options.INIT_STATE = TRUE;	  strcpy(names->init_state,flgstr);	}      }      else if(strcasecmp("BINARY_STATE_FILE",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);        if(strcasecmp("FALSE",flgstr)==0) options.BINARY_STATE_FILE=FALSE;	else options.BINARY_STATE_FILE=TRUE;      }      else if(strcasecmp("STATENAME",optstr)==0) {        sscanf(cmdstr,"%*s %s",global.statename);      }      else if(strcasecmp("STATEYEAR",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.stateyear);      }      else if(strcasecmp("STATEMONTH",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.statemonth);      }      else if(strcasecmp("STATEDAY",optstr)==0) {        sscanf(cmdstr,"%*s %i",&global.stateday);      }#endif      else if(strcasecmp("COMPUTE_TREELINE",optstr)==0) {        sscanf(cmdstr,"%*s %s",flgstr);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -