📄 compute_treeline.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <vicNl.h>
static char vcid[] = "$";
void compute_treeline(atmos_data_struct *atmos,
dmy_struct *dmy,
double avgJulyAirTemp,
double *Tfactor,
char *AboveTreeLine)
/**********************************************************************
compute_treeline.c Keith Cherkauer March 12, 2003
This routine computes the annual average July temperature for the
current gridcell. The temperature is than lapsed to determine the
elevation at which the annual average temperature is equal to 10C.
Snow elevation bands above this elevation are considered to be above
the treeline. When gridcell data is output at the end of each time
step, vegetation types with overstory will be excluded from the
variable averages of snow bands higher than the treeline (e.g. decidous
trees will be removed from high elevation snow bands, while grass
and shrubs will remain). This is to serve as a preliminary fix for
high elevation "glaciers", a more permanent version would actually
allow for vegetation types to be excluded from various snow bands.
Modifications:
16-Jun-04 Added extra input parameter (avgJulyAirTemp) and logic to
handle it in the event JULY_TAVG_SUPPLIED is TRUE. TJB
************************************************************************/
{
extern option_struct options;
extern global_param_struct global_param;
extern int NR, NF;
double MonthSum;
double AnnualSum;
int MonthCnt;
int AnnualCnt;
int rec;
int band;
int i;
if (options.JULY_TAVG_SUPPLIED) {
// use supplied average annual July air temperature
AnnualSum = avgJulyAirTemp;
}
else {
// compute average annual July air temperature from forcing
AnnualSum = 0;
AnnualCnt = 0;
rec = 0;
while ( rec < global_param.nrecs ) {
if ( dmy[rec].month == 7 ) {
MonthSum = 0;
MonthCnt = 0;
while ( dmy[rec].month == 7 ) {
for (i = 0; i < NF; i++) {
MonthSum += atmos[rec].air_temp[i];
MonthCnt++;
}
rec++;
}
if ( MonthCnt > 0 ) {
// Sum monthly average July temperature
AnnualSum += MonthSum / (double)MonthCnt;
AnnualCnt++;
}
}
rec++;
}
// Compute average annual July air temperature
if ( AnnualCnt > 0 )
AnnualSum /= (double)AnnualCnt;
}
// Lapse average annual July air temperature to 10C and determine elevation
for ( band = 0; band < options.SNOW_BAND; band++ ) {
if ( AnnualSum + Tfactor[band] <= 10. )
// Band is above treeline
AboveTreeLine[band] = TRUE;
else
AboveTreeLine[band] = FALSE;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -