Example #1
0
struct	daily_clim_object *construct_daily_clim(
												FILE	*base_station_file,
												char	*file_prefix,
												struct	date	start_date,
												long	duration)
{
	/*--------------------------------------------------------------*/
	/*	local function declarations.								*/
	/*--------------------------------------------------------------*/
	double	*construct_clim_sequence( char *, struct date, long);
	void	*alloc(	size_t, char *, char *);
	/*--------------------------------------------------------------*/
	/*	local variable declarations 								*/
	/*--------------------------------------------------------------*/
	int	i;
	int	num_non_critical_sequences;
	char  record[MAXSTR];
	char	sequence_name[256];
	struct daily_clim_object	*daily_clim;
	char	file_name[256];
	/*--------------------------------------------------------------*/
	/*	Attempt to open the daily clim sequence file for each		*/
	/*	critical clim parameter and read them in.					*/
	/*--------------------------------------------------------------*/
	/*	Allocate the daily clim object.								*/
	/*--------------------------------------------------------------*/
	daily_clim = (struct daily_clim_object *)
		alloc(1*sizeof(struct daily_clim_object),"daily_clim",
		"construct_daily_clim" );
	
	/*--------------------------------------------------------------*/
	/*	Attempt to open the daily clim sequence file for each		*/
	/*	critical clim parameter and read them in.					*/
	/*--------------------------------------------------------------*/
	strcpy(file_name, file_prefix);
	daily_clim[0].tmin = construct_clim_sequence(
		(char *)strcat(file_name,".tmin"),
		start_date,
		duration);
	strcpy(file_name, file_prefix);
	daily_clim[0].tmax = construct_clim_sequence(
		(char *)strcat(file_name,".tmax"),
		start_date,
		duration);
	strcpy(file_name, file_prefix);
	daily_clim[0].rain = construct_clim_sequence(
		(char *)strcat(file_name,".rain"),
		start_date,
		duration);
	/*--------------------------------------------------------------*/
	/*	initialize the rest of the clim sequences as null	*/
	/*--------------------------------------------------------------*/
	daily_clim[0].atm_trans = NULL;
	daily_clim[0].CO2 = NULL;
	daily_clim[0].cloud_fraction = NULL;
	daily_clim[0].cloud_opacity = NULL;
	daily_clim[0].dayl = NULL;
	daily_clim[0].Delta_T = NULL;
	daily_clim[0].dewpoint = NULL;
	daily_clim[0].base_station_effective_lai = NULL;
	daily_clim[0].Kdown_diffuse = NULL;
	daily_clim[0].Kdown_direct = NULL;
	daily_clim[0].LAI_scalar = NULL;
	daily_clim[0].Ldown = NULL;
	daily_clim[0].PAR_diffuse = NULL;
	daily_clim[0].PAR_direct = NULL;
	daily_clim[0].daytime_rain_duration = NULL;
	daily_clim[0].relative_humidity = NULL;
	daily_clim[0].snow = NULL;
	daily_clim[0].tdewpoint = NULL;
	daily_clim[0].tday = NULL;
	daily_clim[0].tnight = NULL;
	daily_clim[0].tnightmax = NULL;
	daily_clim[0].tavg = NULL;
	daily_clim[0].tsoil = NULL;
	daily_clim[0].vpd = NULL;
	daily_clim[0].wind = NULL;
	daily_clim[0].wind_direction = NULL;
	daily_clim[0].ndep_NO3 = NULL;
	daily_clim[0].ndep_NH4 = NULL;
	daily_clim[0].lapse_rate_tmax = NULL;
	daily_clim[0].lapse_rate_tmin = NULL;
	
	/*--------------------------------------------------------------*/
	/*	Read the still open base station file for the number of		*/
	/*	non-critical parameters.									*/
	/*--------------------------------------------------------------*/
	fscanf(base_station_file,"%d", &num_non_critical_sequences);
	read_record(base_station_file, record);

	printf("\n Non critical sequences %d", num_non_critical_sequences); 
	/*--------------------------------------------------------------*/
	/*	Loop through all of the non-critical sequences and attempt	*/
	/*	to construct them.											*/
	/*--------------------------------------------------------------*/
	for ( i=0 ; i<num_non_critical_sequences ; i++ ){
		/*--------------------------------------------------------------*/
		/*		read in the non-critical_sequence name.					*/
		/*--------------------------------------------------------------*/
		fscanf(base_station_file,"%s",sequence_name);
		printf(" \n %s", sequence_name);
		read_record(base_station_file, record);
		/*--------------------------------------------------------------*/
		/*		test the sequence name and create it if it is valid.	*/
		/*		otherwise report a warning.								*/
		/*--------------------------------------------------------------*/
		if ( strcmp(sequence_name,"dayl") == 0 ){
			strcpy(file_name, file_prefix);
			printf("\n Reading day length sequence ");
			daily_clim[0].dayl = construct_clim_sequence(
				(char *)strcat(file_name,".dayl"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"daytime_rain_duration") == 0 ){
			strcpy(file_name, file_prefix);
			printf("\n Reading rain duration sequence");
			daily_clim[0].daytime_rain_duration = construct_clim_sequence(
				(char *)strcat(file_name,".daytime_rain_duration"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"LAI_scalar") == 0 ){
			strcpy(file_name, file_prefix);
			daily_clim[0].LAI_scalar = construct_clim_sequence(
				(char *)strcat(file_name,".LAI_scalar"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"Ldown") == 0 ) {
			strcpy(file_name, file_prefix);
			daily_clim[0].Ldown = construct_clim_sequence(
				(char *)strcat(file_name,".Ldown"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"Kdown_diffuse") == 0 ) {
			strcpy(file_name, file_prefix);
			daily_clim[0].Kdown_diffuse = construct_clim_sequence(
				(char *)strcat(file_name,".Kdown_diffuse"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"Kdown_direct") == 0 ) {
			strcpy(file_name, file_prefix);
			daily_clim[0].Kdown_direct = construct_clim_sequence(
				(char *)strcat(file_name,".Kdown_direct"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"PAR_diffuse") == 0 ) {
			strcpy(file_name, file_prefix);
			daily_clim[0].PAR_diffuse = construct_clim_sequence(
				(char *)strcat(file_name,".PAR_diffuse"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"PAR_direct") == 0 ) {
			strcpy(file_name, file_prefix);
			daily_clim[0].PAR_direct = construct_clim_sequence(
				(char *)strcat(file_name,".PAR_direct"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"relative_humidity") == 0 ) {
			strcpy(file_name, file_prefix);
			daily_clim[0].relative_humidity = construct_clim_sequence(
				(char *)strcat(file_name,".relative_humidity"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"tday") == 0 ){
			strcpy(file_name, file_prefix);
			daily_clim[0].tday = construct_clim_sequence(
				(char *)strcat(file_name,".tday"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"tnightmax") == 0 ){
			strcpy(file_name, file_prefix);
			daily_clim[0].tnightmax = construct_clim_sequence(
				(char *)strcat(file_name,".tnightmax"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"tsoil") == 0 ){
			strcpy(file_name, file_prefix);
			daily_clim[0].tsoil = construct_clim_sequence(
				(char *)strcat(file_name,".tsoil"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"CO2") == 0 ){
			strcpy(file_name, file_prefix);
			daily_clim[0].CO2 = construct_clim_sequence(
				(char *)strcat(file_name,".CO2"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"vpd") == 0 ){
			strcpy(file_name, file_prefix);
			daily_clim[0].vpd = construct_clim_sequence(
				(char *)strcat(file_name,".vpd"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"tavg") == 0 ){
			strcpy(file_name, file_prefix);
			daily_clim[0].tavg = construct_clim_sequence(
				(char *)strcat(file_name,".tavg"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"snow") == 0 ) {
			strcpy(file_name, file_prefix);
			daily_clim[0].snow = construct_clim_sequence(
				(char *)strcat(file_name,".snow"),
				start_date,
				duration);
		}

		else if ( strcmp(sequence_name,"wind") == 0 ){
			strcpy(file_name, file_prefix);
			daily_clim[0].wind = construct_clim_sequence(
				(char *)strcat(file_name,".wind"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"wind_direction") == 0 ){
			strcpy(file_name, file_prefix);
			daily_clim[0].wind_direction = construct_clim_sequence(
				(char *)strcat(file_name,".wind_direction"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"ndep_NH4") == 0 ){
			strcpy(file_name, file_prefix);
			daily_clim[0].ndep_NH4 = construct_clim_sequence(
				(char *)strcat(file_name,".ndep_NH4"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"ndep_NO3") == 0 ){
			strcpy(file_name, file_prefix);
			daily_clim[0].ndep_NO3 = construct_clim_sequence(
				(char *)strcat(file_name,".ndep_NO3"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"lapse_rate_tmax") == 0 ){
			strcpy(file_name, file_prefix);
			daily_clim[0].lapse_rate_tmax = construct_clim_sequence(
				(char *)strcat(file_name,".lapse_rate_tmax"),
				start_date,
				duration);
		}
		else if ( strcmp(sequence_name,"lapse_rate_tmin") == 0 ){
			strcpy(file_name, file_prefix);
			daily_clim[0].lapse_rate_tmin = construct_clim_sequence(
				(char *)strcat(file_name,".lapse_rate_tmin"),
				start_date,
				duration);
		}
		else  fprintf(stderr,
			"WARNING -  clim sequence %s not found.\n",sequence_name);
	} /*end for*/
	return(daily_clim);
} /*end construct_daily_clim*/
Example #2
0
struct	yearly_clim_object *construct_yearly_clim(
												  FILE	*base_station_file,
												  char	*file_prefix,
												  struct	date	start_date,
												  long	duration, 
												int clim_repeat_flag)
{
	/*--------------------------------------------------------------*/
	/*	local function declarations.								*/
	/*--------------------------------------------------------------*/
	double	*construct_clim_sequence( char *, struct date, long, int);
	void	*alloc(	size_t, char *, char *);
	
	/*--------------------------------------------------------------*/
	/*	local variable declarations 								*/
	/*--------------------------------------------------------------*/
	int	i;
	int	num_non_critical_sequences;
	char  record[MAXSTR];
	char	sequence_name[256];
	char	file_name[256];
	struct yearly_clim_object	*yearly_clim;
	
	/*--------------------------------------------------------------*/
	/*	Allocate the yearly clim object.								*/
	/*--------------------------------------------------------------*/
	yearly_clim = (struct yearly_clim_object *)
		alloc(1*sizeof(struct yearly_clim_object),
		"yearly_clim","construct_yearly_clim");
	
	/*--------------------------------------------------------------*/
	/*	Attempt to open the yearly clim sequence file for each		*/
	/*	critical clim parameter and read them in.					*/
	/*																*/
	/*	At the moment there are no critical clim parameters.		*/
	/*--------------------------------------------------------------*/
	
	/*--------------------------------------------------------------*/
	/*	Initialize non-critical sequences			*/
	/*--------------------------------------------------------------*/
	yearly_clim[0].temp = NULL;
	
	/*--------------------------------------------------------------*/
	/*	Read the still open base station file for the number of		*/
	/*	non-critical parameters.									*/
	/*--------------------------------------------------------------*/
	fscanf(base_station_file,"%d", &num_non_critical_sequences);
	read_record(base_station_file, record);
	
	/*--------------------------------------------------------------*/
	/*	Loop through all of the non-critical sequences and attempt	*/
	/*	to construct them.											*/
	/*--------------------------------------------------------------*/
	for ( i=0 ; i<num_non_critical_sequences ; i++ ){
		/*--------------------------------------------------------------*/
		/*		read in the non-critical_sequence name.					*/
		/*--------------------------------------------------------------*/
		fscanf(base_station_file,"%s",sequence_name);
		read_record(base_station_file, record);
		
		/*--------------------------------------------------------------*/
		/*		test the sequence name and create it if it is valid.	*/
		/*		otherwise report a warning.								*/
		/*--------------------------------------------------------------*/
		if ( strcmp(sequence_name,"temp" ) == 0){
			strcpy(file_name, file_prefix);
			yearly_clim[0].temp = construct_clim_sequence(
				(char *)strcat(file_name,".temp"),
				start_date,
				duration, clim_repeat_flag);
		}
		else{
			fprintf(stderr,
				"WARNING -  clim sequence %s not found./n",sequence_name);
		} /*end if-else*/
	} /*end for*/
	return(yearly_clim);
} /*end construct_yearly_clim*/