[cmor] 92/190: adding a test case for climatology issue
Alastair McKinstry
mckinstry at moszumanska.debian.org
Tue Jul 21 12:54:41 UTC 2015
This is an automated email from the git hooks/post-receive script.
mckinstry pushed a commit to branch debian/master
in repository cmor.
commit 56f682935cb3056c2df50d53ab2b71f6f19e386e
Author: Charles Doutriaux <doutriaux1 at llnl.gov>
Date: Wed Feb 23 15:33:14 2011 -0800
adding a test case for climatology issue
---
Test/climatology_test.c | 194 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 194 insertions(+)
diff --git a/Test/climatology_test.c b/Test/climatology_test.c
new file mode 100644
index 0000000..7fa419d
--- /dev/null
+++ b/Test/climatology_test.c
@@ -0,0 +1,194 @@
+/*
+ * climatology_test.c
+ */
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cmor.h"
+
+/*
+ * global attributes for dataset.
+ */
+static char *experiment_id = "historical";
+static char *institution = "MIROC(AORI, NIES and JAMSTEC)";
+static char *source = "MIROC4h 2009";
+static char *calendar = "gregorian";
+static int realization = 1;
+static char *contact = "anonymous";
+static char *history = NULL;
+static char *comment = NULL;
+static char *references = NULL;
+static char *model_id = "MIROC4h";
+static char *forcing = "GHG";
+static int initialization_method = 1;
+static int physics_version = 1;
+static char *institute_id = "MIROC";
+static char *parent_experiment_id = "pre-industrial control";
+static char *parent_experiment_rip = "r1i1p1";
+static double branch_time = 36500.;
+
+
+static int
+setup(void)
+{
+ int status;
+ int message = CMOR_NORMAL;
+ int action = CMOR_REPLACE_3;
+
+ status = cmor_setup(NULL, &action, &message, NULL, NULL, NULL);
+ if (status != 0) {
+ fprintf(stderr, "cmor_setup() failed.\n");
+ return -1;
+ }
+
+ status = cmor_dataset(
+ "./",
+ experiment_id,
+ institution,
+ source,
+ calendar,
+ realization,
+ contact,
+ history,
+ comment,
+ references,
+ 0,
+ 0,
+ NULL,
+ model_id,
+ forcing,
+ initialization_method,
+ physics_version,
+ institute_id,
+ parent_experiment_id,
+ &branch_time,
+ parent_experiment_rip);
+
+ if (status != 0) {
+ fprintf(stderr, "cmor_dataset(): failed.\n");
+ return -1;
+ }
+ return 0;
+}
+
+
+void
+fill_values(float *data, size_t size1, size_t size2, double v0, double step)
+{
+ int n, i;
+
+ for (n = 0; n < size2; n++)
+ for (i = 0; i < size1; i++)
+ *data++ = (float)(v0 + n * step);
+}
+
+
+int
+test_convert(void)
+{
+#define NLON 4
+#define NLAT 2
+#define NPLEV 17
+ static double lon[] = {0., 90., 180., 270.};
+ static double lat[] = {-45., 45.};
+ static double lon_bnds[] = { -45., 45, 135., 225., 315.};
+ static double lat_bnds[] = { -90., 0, 90.};
+ static double plevs[] = {
+ 1000., 925., 850., 700., 600., 500., 400., 300.,
+ 250., 200., 150., 100., 70., 50., 30., 20., 10.
+ };
+ double time[] = {
+ 380.5, 410., 439.5, 470., 500.5, 531.,
+ 561.5, 592.5, 623., 653.5, 684., 714.5
+ };
+ double time_bnds[] = { /* climatorogical bounds (1951-1960) */
+ 365., 3683., /* 1951-01-01, 1960-02-01 */
+ 396., 3712., /* 1951-02-01, 1960-03-01 */
+ 424., 3743.,
+ 455., 3773.,
+ 485., 3804.,
+ 516., 3834.,
+ 546., 3865.,
+ 577., 3896.,
+ 608., 3926.,
+ 638., 3957.,
+ 669., 3987.,
+ 699., 4018. /* 1951-12-01, 1961-01-01 */
+ };
+ int i, axis_ids[4];
+ struct {
+ char *name, *units;
+ double *values, *bnds;
+ size_t len;
+ } dims[] = {
+ {"plevs", "hPa", plevs, NULL, NPLEV},
+ {"latitude", "degrees_north", lat, lat_bnds, NLAT},
+ {"longitude", "degrees_east", lon, lon_bnds, NLON}
+ };
+ float miss = -999.f;
+ float co2[NLON * NLAT * NPLEV];
+ const int UNLIMITED = 0;
+ int varid;
+
+ assert(sizeof plevs / sizeof plevs[0] == NPLEV);
+ assert(sizeof lat / sizeof lat[0] == NLAT);
+ assert(sizeof lon / sizeof lon[0] == NLON);
+ assert(sizeof lat_bnds / sizeof lat_bnds[0] == NLAT + 1);
+ assert(sizeof lon_bnds / sizeof lon_bnds[0] == NLON + 1);
+
+ if (cmor_axis(axis_ids, "time2", "days since 1950-1-1", UNLIMITED,
+ NULL, 'd', NULL, 0, NULL) != 0) {
+ fprintf(stderr, "failed to setup time-axis.\n");
+ return -1;
+ }
+ for (i = 0; i < 3; i++)
+ if (cmor_axis(axis_ids + 1 + i,
+ dims[i].name, dims[i].units, dims[i].len,
+ dims[i].values, 'd', dims[i].bnds,
+ dims[i].bnds ? 1 : 0, NULL) != 0) {
+ fprintf(stderr, "failed to setup axis(%s).\n", dims[i].name);
+ return -1;
+ }
+
+ if (cmor_variable(&varid, "co2Clim", "1e-6",
+ 4, axis_ids,
+ 'f', &miss,
+ NULL, NULL, "CO2", NULL, NULL) != 0) {
+ fprintf(stderr, "failed to setup var.\n");
+ return -1;
+ }
+
+ /*
+ * write a variable for each time.
+ */
+ for (i = 0; i < 12; i++) {
+ fill_values(co2, NLON * NLAT, NPLEV, 300. + i, .01);
+
+ if (cmor_write(varid, co2, 'f', NULL, 1,
+ time + i, time_bnds + 2 * i, NULL) != 0) {
+ fprintf(stderr, "failed to write var(t=%d).\n", i);
+ return -1;
+ }
+ }
+ return 0;
+}
+
+
+int
+main(int argc, char **argv)
+{
+ int table_id, rval;
+
+ if (setup() < 0)
+ exit(1);
+
+ if (cmor_load_table("Tables/CMIP5_Amon", &table_id) != 0) {
+ fprintf(stderr, "cmor_load_table() failed.\n");
+ exit(1);
+ }
+ rval = test_convert();
+ cmor_close();
+ printf(rval == 0 ? "SUCCESSFUL END\n" : "ABNORMAL END\n");
+ return 0;
+}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/cmor.git
More information about the debian-science-commits
mailing list