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

📄 t_nc.c

📁 一个用来实现偏微分方程中网格的计算库
💻 C
📖 第 1 页 / 共 2 页
字号:
	{0, 0, 0},};static const char chs[] = {'A','B', ((char)0xff) };static const size_t s_start[] = {0,1};static const size_t s_edges[] = {NUM_RECS, SIZE_1 - 1};static char sentence[NUM_RECS* SIZE_1 -1] =	"The red death had long devastated the country.";static const short shs[] = {97, 99};static const int birthday = 82555;#define M_E	2.7182818284590452354static const float e = (float) M_E;static const double pinot = 3.25;static const double zed = 0.0;/*ARGSUSED*/intmain(int ac, char *av[]){	int ret;	int	 id;	char buf[256];#ifdef SYNCDEBUG	char *str = "one";#endif	int ii;	size_t ui;	const struct tcdfvar *tvp = testvars;	union getret got;	const size_t initialsz = 8192;	size_t chunksz = 8192;	size_t align = 8192/32;	ret = nc__create(fname,NC_NOCLOBBER, initialsz, &chunksz, &id);	if(ret != NC_NOERR) {		(void) fprintf(stderr, "trying again\n");		ret = nc__create(fname,NC_CLOBBER, initialsz, &chunksz, &id);	}	if(ret != NC_NOERR) 		exit(ret);		assert( nc_put_att_text(id, NC_GLOBAL,		"TITLE", 12, "another name") == NC_NOERR);	assert( nc_get_att_text(id, NC_GLOBAL,		"TITLE", buf) == NC_NOERR);/*	(void) printf("title 1 \"%s\"\n", buf); */	assert( nc_put_att_text(id, NC_GLOBAL,		"TITLE", strlen(fname), fname) == NC_NOERR);	assert( nc_get_att_text(id, NC_GLOBAL,		"TITLE", buf) == NC_NOERR);	buf[strlen(fname)] = 0;/*	(void) printf("title 2 \"%s\"\n", buf); */	assert( strcmp(fname, buf) == 0);	createtestdims(id, NUM_DIMS, sizes, dim_names);	testdims(id, NUM_DIMS, sizes, dim_names);	createtestvars(id, testvars, NUM_TESTVARS);  	{ 	int ifill = -1; double dfill = -9999; 	assert( nc_put_att_int(id, Long_id, 		_FillValue, NC_INT, 1, &ifill) == NC_NOERR); 	assert( nc_put_att_double(id, Double_id, 		_FillValue, NC_DOUBLE, 1, &dfill) == NC_NOERR); 	}#ifdef REDEF	assert( nc__enddef(id, 0, align, 0, 2*align) == NC_NOERR );	assert( nc_put_var1_int(id, Long_id, indices[3], &birthday) 		== NC_NOERR );	fill_seq(id);	assert( nc_redef(id) == NC_NOERR );/*	assert( nc_rename_dim(id,2, "a long dim name") == NC_NOERR); */#endif	assert( nc_rename_dim(id,1, "IXX") == NC_NOERR);	assert( nc_inq_dim(id, 1, buf, &ui) == NC_NOERR);	(void) printf("dimrename: %s\n", buf);	assert( nc_rename_dim(id,1, dim_names[1]) == NC_NOERR);#ifdef ATTRX	assert( nc_rename_att(id, 1, "UNITS", "units") == NC_NOERR);	assert( nc_del_att(id, 4, "FIELDNAM")== NC_NOERR);	assert( nc_del_att(id, 2, "SCALEMIN")== NC_NOERR);	assert( nc_del_att(id, 2, "SCALEMAX")== NC_NOERR);#endif /* ATTRX */	assert( nc__enddef(id, 0, align, 0, 2*align) == NC_NOERR );#ifndef REDEF	fill_seq(id);	assert( nc_put_var1_int(id, Long_id, indices[3], &birthday)== NC_NOERR );#endif	assert( nc_put_vara_schar(id, Byte_id, s_start, s_edges,		(signed char *)sentence)		== NC_NOERR);	assert( nc_put_var1_schar(id, Byte_id, indices[6], (signed char *)(chs+1))		== NC_NOERR);	assert( nc_put_var1_schar(id, Byte_id, indices[5], (signed char *)chs)		== NC_NOERR);	assert( nc_put_vara_text(id, Char_id, s_start, s_edges, sentence)		== NC_NOERR);	assert( nc_put_var1_text(id, Char_id, indices[6], (chs+1))		== NC_NOERR) ;	assert( nc_put_var1_text(id, Char_id, indices[5], chs)		== NC_NOERR);	assert( nc_put_var1_short(id, Short_id, indices[4], shs)		== NC_NOERR);	assert( nc_put_var1_float(id, Float_id, indices[2], &e)		== NC_NOERR);	assert( nc_put_var1_double(id, Double_id, indices[1], &zed)		== NC_NOERR);	assert( nc_put_var1_double(id, Double_id, indices[0], &pinot)		== NC_NOERR);#ifdef SYNCDEBUG	(void) printf("Hit Return to sync\n");	gets(str);	nc_sync(id,0);	(void) printf("Sync done. Hit Return to continue\n");	gets(str);#endif /* SYNCDEBUG */	ret = nc_close(id);	(void) printf("nc_close ret = %d\n\n", ret);/* *	read it */	ret = nc__open(fname,NC_NOWRITE, &chunksz, &id);	if(ret != NC_NOERR)	{		(void) printf("Could not open %s: %s\n", fname,			nc_strerror(ret));		exit(1);	}	(void) printf("reopen id = %d for filename %s\n",		id, fname);	/*	NC	*/ 	(void) printf("NC ");	assert( nc_inq(id, &(cdesc->num_dims), &(cdesc->num_vars),		&(cdesc->num_attrs), &(cdesc->xtendim) ) == NC_NOERR);	assert((size_t) cdesc->num_dims == num_dims);	assert(cdesc->num_attrs == 1);	assert(cdesc->num_vars == NUM_TESTVARS);	(void) printf("done\n");		/*	GATTR	*/	(void) printf("GATTR ");	assert( nc_inq_attname(id, NC_GLOBAL, 0, adesc->mnem) == 0);	assert(strcmp("TITLE",adesc->mnem) == 0);	assert( nc_inq_att(id, NC_GLOBAL, adesc->mnem, &(adesc->type), &(adesc->len))== NC_NOERR);	assert( adesc->type == NC_CHAR );	assert( adesc->len == strlen(fname) );	assert( nc_get_att_text(id, NC_GLOBAL, "TITLE", buf)== NC_NOERR);	buf[adesc->len] = 0;	assert( strcmp(fname, buf) == 0);	/*	VAR	*/	(void) printf("VAR ");	assert( cdesc->num_vars == NUM_TESTVARS );	for(ii = 0; ii < cdesc->num_vars; ii++, tvp++ ) 	{		int jj;		assert( nc_inq_var(id, ii,			vdesc->mnem,			&(vdesc->type),			&(vdesc->ndims),			vdesc->dims,			&(vdesc->num_attrs)) == NC_NOERR);		if(strcmp(tvp->mnem , vdesc->mnem) != 0)		{			(void) printf("attr %d mnem mismatch %s, %s\n",				ii, tvp->mnem, vdesc->mnem);			continue;		}		if(tvp->type != vdesc->type)		{			(void) printf("attr %d type mismatch %d, %d\n",				ii, (int)tvp->type, (int)vdesc->type);			continue;		}		for(jj = 0; jj < vdesc->ndims; jj++ )		{			if(tvp->dims[jj] != vdesc->dims[jj] )			{		(void) printf(		"inconsistent dim[%d] for variable %d: %d != %d\n",		jj, ii, tvp->dims[jj], vdesc->dims[jj] );			continue;			}		}		/* VATTR */		(void) printf("VATTR\n");		for(jj=0; jj<vdesc->num_attrs; jj++ ) 		{			assert( nc_inq_attname(id, ii, jj, adesc->mnem) == NC_NOERR);			if( strcmp(adesc->mnem, reqattr[jj]) != 0 )			{				(void) printf("var %d attr %d mismatch %s != %s\n",					ii, jj, adesc->mnem, reqattr[jj] );				break;			}		}		if( nc_inq_att(id, ii, reqattr[0], &(adesc->type), &(adesc->len))			!= -1) {		assert( adesc->type == NC_CHAR );		assert( adesc->len == strlen(tvp->units) );	 	assert( nc_get_att_text(id,ii,reqattr[0],buf)== NC_NOERR); 		buf[adesc->len] = 0;		assert( strcmp(tvp->units, buf) == 0);		}		if(			nc_inq_att(id, ii, reqattr[1], &(adesc->type), &(adesc->len))			!= -1)		{		assert( adesc->type == NC_DOUBLE );		assert( adesc->len == 1 );	 	assert( nc_get_att_double(id, ii, reqattr[1], &got.dbl)== NC_NOERR);		chkgot(adesc->type, got, tvp->validmin);		}		if(			nc_inq_att(id, ii, reqattr[2], &(adesc->type), &(adesc->len))			!= -1)		{		assert( adesc->type == NC_DOUBLE );		assert( adesc->len == 1 );	 	assert( nc_get_att_double(id, ii, reqattr[2], &got.dbl)== NC_NOERR);		chkgot(adesc->type, got, tvp->validmax);		}		if(			nc_inq_att(id, ii, reqattr[3], &(adesc->type), &(adesc->len))			!= -1)		{		assert( adesc->type == NC_DOUBLE );		assert( adesc->len ==1 );	 	assert( nc_get_att_double(id, ii, reqattr[3], &got.dbl)== NC_NOERR);		chkgot(adesc->type, got, tvp->scalemin);		}		if(			nc_inq_att(id, ii, reqattr[4], &(adesc->type), &(adesc->len))			!= -1)		{		assert( adesc->type == NC_DOUBLE );		assert( adesc->len == 1 );	 	assert( nc_get_att_double(id, ii, reqattr[4], &got.dbl)== NC_NOERR);		chkgot(adesc->type, got, tvp->scalemax);		}		if( nc_inq_att(id, ii, reqattr[5], &(adesc->type), &(adesc->len))== NC_NOERR)		{		assert( adesc->type == NC_CHAR );		assert( adesc->len == strlen(tvp->fieldnam) );	 	assert( nc_get_att_text(id,ii,reqattr[5],buf)== NC_NOERR); 		buf[adesc->len] = 0;		assert( strcmp(tvp->fieldnam, buf) == 0);		}	}	(void) printf("fill_seq ");	check_fill_seq(id);	(void) printf("Done\n");	assert( nc_get_var1_double(id, Double_id, indices[0], &got.dbl)== NC_NOERR);	(void) printf("got val = %f\n", got.dbl );	assert( nc_get_var1_double(id, Double_id, indices[1], &got.dbl)== NC_NOERR);	(void) printf("got val = %f\n", got.dbl );	assert( nc_get_var1_float(id, Float_id, indices[2], &got.fl[0])== NC_NOERR);	(void) printf("got val = %f\n", got.fl[0] );	assert( nc_get_var1_int(id, Long_id, indices[3], &got.in[0])== NC_NOERR);	(void) printf("got val = %d\n", got.in[0] );	assert( nc_get_var1_short(id, Short_id, indices[4], &got.sh[0])== NC_NOERR);	(void) printf("got val = %d\n", got.sh[0] );	assert( nc_get_var1_text(id, Char_id, indices[5], &got.by[0]) == NC_NOERR);	(void) printf("got NC_CHAR val = %c (0x%02x) \n",		 got.by[0] , got.by[0]);	assert( nc_get_var1_text(id, Char_id, indices[6], &got.by[0]) == NC_NOERR);	(void) printf("got NC_CHAR val = %c (0x%02x) \n",		 got.by[0], got.by[0] );	(void) memset(buf,0,sizeof(buf));	assert( nc_get_vara_text(id, Char_id, s_start, s_edges, buf) == NC_NOERR);	(void) printf("got NC_CHAR val = \"%s\"\n", buf);	assert( nc_get_var1_schar(id, Byte_id, indices[5],			(signed char *)&got.by[0])== NC_NOERR);	(void) printf("got val = %c (0x%02x) \n", got.by[0] , got.by[0]);	assert( nc_get_var1_schar(id, Byte_id, indices[6],			(signed char *)&got.by[0])== NC_NOERR);	(void) printf("got val = %c (0x%02x) \n", got.by[0], got.by[0] );	(void) memset(buf,0,sizeof(buf));	assert( nc_get_vara_schar(id, Byte_id, s_start, s_edges,			(signed char *)buf)== NC_NOERR );	(void) printf("got val = \"%s\"\n", buf);	{		double dbuf[NUM_RECS * SIZE_1 * SIZE_2];		assert(nc_get_var_double(id, Float_id, dbuf) == NC_NOERR);		(void) printf("got vals = %f ... %f\n", dbuf[0],			 dbuf[NUM_RECS * SIZE_1 * SIZE_2 -1] );	}	ret = nc_close(id);	(void) printf("re nc_close ret = %d\n", ret);	return 0;}

⌨️ 快捷键说明

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