1
#include "gov_ornl_ccs_AdiosVarinfo.h"
3
#include <adios_read.h>
7
* Class: gov_ornl_ccs_AdiosVarinfo
8
* Method: adios_inq_var
9
* Signature: (JJLjava/lang/String;)I
11
JNIEXPORT jint JNICALL Java_gov_ornl_ccs_AdiosVarinfo_adios_1inq_1var
12
(JNIEnv * env, jobject obj, jlong gp, jstring varname)
21
str = env->GetStringUTFChars(varname, &isCopy);
22
if (str == NULL) return -1; /* OutOfMemoryError already thrown */
24
vp = adios_inq_var((ADIOS_GROUP *)gp, str);
25
env->ReleaseStringUTFChars(varname, str);
27
cls = env->GetObjectClass(obj);
32
fid = env->GetFieldID(cls, "vp", "J");
33
env->SetLongField(obj, fid, (jlong)vp);
35
fid = env->GetFieldID(cls, "grpid", "I");
36
env->SetIntField(obj, fid, vp->grpid);
38
fid = env->GetFieldID(cls, "varid", "I");
39
env->SetIntField(obj, fid, vp->varid);
41
fid = env->GetFieldID(cls, "type", "I");
42
env->SetIntField(obj, fid, vp->type);
44
fid = env->GetFieldID(cls, "ndim", "I");
45
env->SetIntField(obj, fid, vp->ndim);
47
fid = env->GetFieldID(cls, "timedim", "I");
48
env->SetIntField(obj, fid, vp->timedim);
50
jlongArray dims = env->NewLongArray(vp->ndim);
51
env->SetLongArrayRegion(dims, 0, vp->ndim, (jlong *) vp->dims);
53
fid = env->GetFieldID(cls, "dims", "[J");
54
env->SetObjectField(obj, fid, dims);
57
int size = adios_type_size(vp->type, NULL);
58
jbyteArray value = env->NewByteArray(size);
59
env->SetByteArrayRegion(value, 0, size, (jbyte *) vp->value);
61
fid = env->GetFieldID(cls, "value", "[B");
62
env->SetObjectField(obj, fid, value);
69
* Class: gov_ornl_ccs_AdiosVarinfo
70
* Method: adios_free_varinfo
73
JNIEXPORT jint JNICALL Java_gov_ornl_ccs_AdiosVarinfo_adios_1free_1varinfo
74
(JNIEnv * env, jobject obj)
80
cls = env->GetObjectClass(obj);
81
fid = env->GetFieldID(cls, "vp", "J");
82
vp = env->GetLongField(obj, fid);
84
adios_free_varinfo((ADIOS_VARINFO*)vp);
86
env->SetLongField(obj, fid, 0);
92
* Class: gov_ornl_ccs_AdiosVarinfo
93
* Method: adios_read_var_byid
94
* Signature: (JI[J[J)[D
96
JNIEXPORT jdoubleArray JNICALL Java_gov_ornl_ccs_AdiosVarinfo_adios_1read_1var_1byid
97
(JNIEnv * env, jobject obj, jlong gp, jint varid, jlongArray start, jlongArray count)
99
jint len = env->GetArrayLength(count);
101
if (len != env->GetArrayLength(start))
104
jlong *startarr = env->GetLongArrayElements(start, NULL);
105
jlong *countarr = env->GetLongArrayElements(count, NULL);
108
for (jint i = 0; i < len; i++)
109
ncount *= countarr[i];
111
jdoubleArray result = env->NewDoubleArray(ncount);
112
jdouble *data = env->GetDoubleArrayElements(result, NULL);
114
int64_t nbytes = adios_read_var_byid((ADIOS_GROUP*)gp, (int) varid, (uint64_t *)startarr, (uint64_t *)countarr, (void *)data);
116
env->ReleaseLongArrayElements(start, startarr, 0);
117
env->ReleaseLongArrayElements(count, countarr, 0);
118
env->ReleaseDoubleArrayElements(result, data, 0);
123
#define READ_ARRAY(JTYPE, CTYPE) \
124
/* std::cout << __FUNCTION__ << "..." << std::endl; */ \
126
jint len = env->GetArrayLength(count); \
127
if (len != env->GetArrayLength(start)) return 0; \
128
jlong *startarr = env->GetLongArrayElements(start, NULL); \
129
jlong *countarr = env->GetLongArrayElements(count, NULL); \
131
for (jint i = 0; i < len; i++) ncount *= countarr[i]; \
132
JTYPE *data = env->Get ##CTYPE ##ArrayElements(val, NULL); \
133
result = adios_read_var_byid((ADIOS_GROUP*)gp, (int) varid, (uint64_t *)startarr, (uint64_t *)countarr, (void *)data); \
134
env->ReleaseLongArrayElements(start, startarr, 0); \
135
env->ReleaseLongArrayElements(count, countarr, 0); \
136
env->Release ##CTYPE ##ArrayElements(val, data, 0); \
139
#define FUNC_READ_ARRAY(FNAME, JTYPE, CTYPE) \
140
JNIEXPORT jint JNICALL FNAME \
141
(JNIEnv * env, jobject obj, jlong gp, jint varid, jlongArray start, jlongArray count, JTYPE ##Array val) \
143
READ_ARRAY(JTYPE, CTYPE); \
147
* Class: gov_ornl_ccs_AdiosVarinfo
149
* Signature: (JI[J[J[B)I
153
Java_gov_ornl_ccs_AdiosVarinfo_adios_1read__JI_3J_3J_3B,
158
Java_gov_ornl_ccs_AdiosVarinfo_adios_1read__JI_3J_3J_3I,
163
Java_gov_ornl_ccs_AdiosVarinfo_adios_1read__JI_3J_3J_3J,
168
Java_gov_ornl_ccs_AdiosVarinfo_adios_1read__JI_3J_3J_3F,
173
Java_gov_ornl_ccs_AdiosVarinfo_adios_1read__JI_3J_3J_3D,