Beispiel #1
0
STATIC void jclass_attr(mp_obj_t self_in, qstr attr_in, mp_obj_t *dest) {
    if (dest[0] == MP_OBJ_NULL) {
        // load attribute
        mp_obj_jclass_t *self = self_in;
        const char *attr = qstr_str(attr_in);

        jstring field_name = JJ(NewStringUTF, attr);
        jobject field = JJ(CallObjectMethod, self->cls, Class_getField_mid, field_name);
        if (!JJ1(ExceptionCheck)) {
            jfieldID field_id = JJ(FromReflectedField, field);
            jobject obj = JJ(GetStaticObjectField, self->cls, field_id);
            dest[0] = new_jobject(obj);
            return;
        }
        //JJ1(ExceptionDescribe);
        JJ1(ExceptionClear);

        mp_obj_jmethod_t *o = m_new_obj(mp_obj_jmethod_t);
        o->base.type = &jmethod_type;
        o->name = attr_in;
        o->meth = NULL;
        o->obj = self->cls;
        o->is_static = true;
        dest[0] = o;
    }
}
Beispiel #2
0
STATIC void get_jclass_name(jobject obj, char *buf) {
    jclass obj_class = JJ(GetObjectClass, obj);
    jstring name = JJ(CallObjectMethod, obj_class, Class_getName_mid);
    jint len = JJ(GetStringLength, name);
    JJ(GetStringUTFRegion, name, 0, len, buf);
    check_exception();
}
Beispiel #3
0
STATIC void create_jvm() {
    JavaVMInitArgs args;
    JavaVMOption options;
    options.optionString = "-Djava.class.path=.";
    args.version = JNI_VERSION_1_6;
    args.nOptions = 1;
    args.options = &options;
    args.ignoreUnrecognized = 0;

    if (env) {
        return;
    }

    void *libjvm = dlopen(LIBJVM_SO, RTLD_NOW | RTLD_GLOBAL);
    if (!libjvm) {
        nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError, "unable to load libjvm.so, use LD_LIBRARY_PATH"));
    }
    int (*_JNI_CreateJavaVM)(void*, void**, void*) = dlsym(libjvm, "JNI_CreateJavaVM");

    int st = _JNI_CreateJavaVM(&jvm, (void**)&env, &args);
    if (st < 0 || !env) {
        nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError, "unable to create JVM"));
    }

    Class_class = JJ(FindClass, "java/lang/Class");
    jclass method_class = JJ(FindClass, "java/lang/reflect/Method");
    String_class = JJ(FindClass, "java/lang/String");

    jclass Object_class = JJ(FindClass, "java/lang/Object");
    Object_toString_mid = JJ(GetMethodID, Object_class, "toString",
                             "()Ljava/lang/String;");

    Class_getName_mid = (*env)->GetMethodID(env, Class_class, "getName",
                                            "()Ljava/lang/String;");
    Class_getField_mid = (*env)->GetMethodID(env, Class_class, "getField",
                         "(Ljava/lang/String;)Ljava/lang/reflect/Field;");
    Class_getMethods_mid = (*env)->GetMethodID(env, Class_class, "getMethods",
                           "()[Ljava/lang/reflect/Method;");
    Class_getConstructors_mid = (*env)->GetMethodID(env, Class_class, "getConstructors",
                                "()[Ljava/lang/reflect/Constructor;");
    Method_getName_mid = (*env)->GetMethodID(env, method_class, "getName",
                         "()Ljava/lang/String;");

    List_class = JJ(FindClass, "java/util/List");
    List_get_mid = JJ(GetMethodID, List_class, "get",
                      "(I)Ljava/lang/Object;");
    List_set_mid = JJ(GetMethodID, List_class, "set",
                      "(ILjava/lang/Object;)Ljava/lang/Object;");
    List_size_mid = JJ(GetMethodID, List_class, "size",
                       "()I");
    IndexException_class = JJ(FindClass, "java/lang/IndexOutOfBoundsException");
}
Beispiel #4
0
STATIC mp_obj_t jobject_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
    mp_obj_jobject_t *self = self_in;
    mp_uint_t idx = mp_obj_get_int(index);
    char class_name[64];
    get_jclass_name(self->obj, class_name);
    //printf("class: %s\n", class_name);

    if (class_name[0] == '[') {
        if (class_name[1] == 'L' || class_name[1] == '[') {
            if (value == MP_OBJ_NULL) {
                // delete
                assert(0);
            } else if (value == MP_OBJ_SENTINEL) {
                // load
                jobject el = JJ(GetObjectArrayElement, self->obj, idx);
                return new_jobject(el);
            } else {
                // store
                jvalue jval;
                const char *t = class_name + 1;
                py2jvalue(&t, value, &jval);
                JJ(SetObjectArrayElement, self->obj, idx, jval.l);
                return mp_const_none;
            }
        }
        mp_not_implemented("");
    }

    if (!JJ(IsInstanceOf, self->obj, List_class)) {
        return MP_OBJ_NULL;
    }


    if (value == MP_OBJ_NULL) {
        // delete
        assert(0);
    } else if (value == MP_OBJ_SENTINEL) {
        // load
        jobject el = JJ(CallObjectMethod, self->obj, List_get_mid, idx);
        check_exception();
        return new_jobject(el);
    } else {
        // store
        assert(0);
    }


    return MP_OBJ_NULL;
}
Beispiel #5
0
STATIC mp_obj_t jmethod_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) {
    if (n_kw != 0) {
        nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "kwargs not supported"));
    }
    mp_obj_jmethod_t *self = self_in;

    const char *name = qstr_str(self->name);
//    jstring meth_name = JJ(NewStringUTF, name);

    jclass obj_class = self->obj;
    if (!self->is_static) {
        obj_class = JJ(GetObjectClass, self->obj);
    }
    jarray methods = JJ(CallObjectMethod, obj_class, Class_getMethods_mid);

    return call_method(self->obj, name, methods, false, n_args, args);
}
Beispiel #6
0
STATIC mp_obj_t new_jobject(jobject jo) {
    if (jo == NULL) {
        return mp_const_none;
    } else if (JJ(IsInstanceOf, jo, String_class)) {
        const char *s = JJ(GetStringUTFChars, jo, NULL);
        mp_obj_t ret = mp_obj_new_str(s, strlen(s), false);
        JJ(ReleaseStringUTFChars, jo, s);
        return ret;
    } else if (JJ(IsInstanceOf, jo, Class_class)) {
        return new_jclass(jo);
    } else {
        mp_obj_jobject_t *o = m_new_obj(mp_obj_jobject_t);
        o->base.type = &jobject_type;
        o->obj = jo;
        return o;
    }

}
Beispiel #7
0
STATIC mp_obj_t jclass_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) {
    if (n_kw != 0) {
        nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "kwargs not supported"));
    }
    mp_obj_jclass_t *self = self_in;

    jarray methods = JJ(CallObjectMethod, self->cls, Class_getConstructors_mid);

    return call_method(self->cls, NULL, methods, true, n_args, args);
}
Beispiel #8
0
STATIC mp_obj_t jclass_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) {
    if (n_kw != 0) {
        mp_raise_TypeError("kwargs not supported");
    }
    mp_obj_jclass_t *self = self_in;

    jarray methods = JJ(CallObjectMethod, self->cls, Class_getConstructors_mid);

    return call_method(self->cls, NULL, methods, true, n_args, args);
}
void OpenSMOKE_KPP_SingleReactor::PrintDeFalco(const int position, BzzMatrixSparse C_, OpenSMOKE_KPP_ReactorNetwork& network, ofstream &fDeFalco, ofstream &fDeFalco2)
{
	// Reactions
	kinetics->UpdateProperties(omega_, temperature_, pressure_, R_);
	
	// Get dR_over_domega
	BzzMatrix JJ(omega_.Size(),omega_.Size());
	kinetics->GetFormationRatesDerivatives(omega_, temperature_, pressure_, JJ);

	// JJ = dR_over_domega * volume
	JJ *= volume_;

	fDeFalco << "Cell           " << position << endl;
	fDeFalco << "MassFractions  " << omega_.Size() << endl;
	for(int j=1;j<=omega_.Size();j++)
		fDeFalco << setw(4) << left << j << setw(16) << left << omega_[j] << endl;
	fDeFalco << "FormationRates " << omega_.Size() << endl;
	for(int j=1;j<=omega_.Size();j++)
		fDeFalco << setw(4) << left << j << setw(16) << left << R_[j]*volume_ << endl;
	fDeFalco << "Jacobian       " << omega_.Size() << " " << omega_.Size() << endl;
	for(int j=1;j<=omega_.Size();j++)
		for(int k=1;k<=omega_.Size();k++)
			fDeFalco << setw(4) << left << j << setw(4) << left << k << setw(16) << left << JJ[j][k] << endl;

	fDeFalco2 << "Cell           " << position << endl;
	for(int j=1;j<=omega_.Size();j++)
	{
		double* ptrVal;
		int i, k;
		double val;

		double sum_total_out = 0.;
		double sum_total = 0.;
		C_.BeginScanning();
		while(ptrVal = C_.Scanning(&i,&k,&val))
		{
			if (i==position && k!=position)
				sum_total_out += -C_(position, k)*network.reactors(k).omega()[j];
//			if (i==position && k!=position)
//				sum_total += -C_(position, k);

		}

		fDeFalco2 << setw(4) << left << j << setw(16) << left << omega_[j];
//		fDeFalco2 <<                         setw(16) << left << -C_(position, position)*omega_[j];
//		fDeFalco2 <<                         setw(16) << left << sum_total_out;
		fDeFalco2 <<                         setw(16) << left << -C_(position, position)*omega_[j] + sum_total_out;
		fDeFalco2 <<                         setw(16) << left << fIn_[j];
		fDeFalco2 <<                         setw(16) << left <<  R_[j]*volume_;
		fDeFalco2 <<                         setw(16) << left <<  R_[j]*volume_ + fIn_[j] + sum_total_out -C_(position, position)*omega_[j];
//		fDeFalco2 <<                         setw(16) << left <<  -C_(position, position);
//		fDeFalco2 <<                         setw(16) << left <<  sum_total;
		fDeFalco2 << endl;
	}
}
Beispiel #10
0
STATIC mp_obj_t mod_jni_cls(mp_obj_t cls_name_in) {
    const char *cls_name = mp_obj_str_get_str(cls_name_in);
    if (!env) {
        create_jvm();
    }
    jclass cls = JJ(FindClass, cls_name);

    mp_obj_jclass_t *o = m_new_obj(mp_obj_jclass_t);
    o->base.type = &jclass_type;
    o->cls = cls;
    return o;
}
Beispiel #11
0
STATIC void check_exception(void) {
    jobject exc = JJ1(ExceptionOccurred);
    if (exc) {
        //JJ1(ExceptionDescribe);
        mp_obj_t py_e = new_jobject(exc);
        JJ1(ExceptionClear);
        if (JJ(IsInstanceOf, exc, IndexException_class)) {
            nlr_raise(mp_obj_new_exception_arg1(&mp_type_IndexError, py_e));
        }
        nlr_raise(mp_obj_new_exception_arg1(&mp_type_Exception, py_e));
    }
}
Beispiel #12
0
STATIC mp_obj_t mod_jni_array(mp_obj_t type_in, mp_obj_t size_in) {
    if (!env) {
        create_jvm();
    }
    mp_int_t size = mp_obj_get_int(size_in);
    jobject res = NULL;

    if (MP_OBJ_IS_TYPE(type_in, &jclass_type)) {

        mp_obj_jclass_t *jcls = type_in;
        res = JJ(NewObjectArray, size, jcls->cls, NULL);

    } else if (MP_OBJ_IS_STR(type_in)) {
        const char *type = mp_obj_str_get_str(type_in);
        switch (*type) {
        case 'Z':
            res = JJ(NewBooleanArray, size);
            break;
        case 'B':
            res = JJ(NewByteArray, size);
            break;
        case 'C':
            res = JJ(NewCharArray, size);
            break;
        case 'S':
            res = JJ(NewShortArray, size);
            break;
        case 'I':
            res = JJ(NewIntArray, size);
            break;
        case 'J':
            res = JJ(NewLongArray, size);
            break;
        case 'F':
            res = JJ(NewFloatArray, size);
            break;
        case 'D':
            res = JJ(NewDoubleArray, size);
            break;
        }

    }

    return new_jobject(res);
}
Beispiel #13
0
STATIC mp_obj_t jobject_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
    mp_obj_jobject_t *self = self_in;
    if (!JJ(IsInstanceOf, self->obj, List_class)) {
        return MP_OBJ_NULL;
    }

    mp_uint_t idx = mp_obj_get_int(index);

    if (value == MP_OBJ_NULL) {
        // delete
        assert(0);
    } else if (value == MP_OBJ_SENTINEL) {
        // load
        jobject el = JJ(CallObjectMethod, self->obj, List_get_mid, idx);
        check_exception();
        return new_jobject(el);
    } else {
        // store
        assert(0);
    }


return MP_OBJ_NULL;
}
Beispiel #14
0
STATIC mp_obj_t jobject_unary_op(mp_uint_t op, mp_obj_t self_in) {
    mp_obj_jobject_t *self = self_in;
    switch (op) {
        case MP_UNARY_OP_BOOL:
        case MP_UNARY_OP_LEN: {
            jint len = JJ(CallIntMethod, self->obj, List_size_mid);
            if (op == MP_UNARY_OP_BOOL) {
                return mp_obj_new_bool(len != 0);
            }
            return MP_OBJ_NEW_SMALL_INT(len);
        }
        default:
            return MP_OBJ_NULL; // op not supported
    }
}
Beispiel #15
0
 bool _send(T& t, M& method, JJ, const VV& value, int id)
 {
   if ( method.get_aspect().template get<_id_>().has(id) )
   {
     method.get_aspect().template get<_id_>().pop(id);
     
     if ( t.get_aspect().template get<_send_custom_error_>()( t, JJ(), value, id ) )
       return true;
     
     method.get_aspect().template get<_error_fail_>()( t, method, value, id );
   }
   else
     method.get_aspect().template get< _invalid_error_id_ >()( t, method, value, id );
   
   return false;
 }
Beispiel #16
0
static int  rmd320_compress(hash_state *md, unsigned char *buf)
#endif
{
   ulong32 aa,bb,cc,dd,ee,aaa,bbb,ccc,ddd,eee,tmp,X[16];
   int i;

   /* load words X */
   for (i = 0; i < 16; i++){
      LOAD32L(X[i], buf + (4 * i));
   }

   /* load state */
   aa = md->rmd320.state[0];
   bb = md->rmd320.state[1];
   cc = md->rmd320.state[2];
   dd = md->rmd320.state[3];
   ee = md->rmd320.state[4];
   aaa = md->rmd320.state[5];
   bbb = md->rmd320.state[6];
   ccc = md->rmd320.state[7];
   ddd = md->rmd320.state[8];
   eee = md->rmd320.state[9];

   /* round 1 */
   FF(aa, bb, cc, dd, ee, X[ 0], 11);
   FF(ee, aa, bb, cc, dd, X[ 1], 14);
   FF(dd, ee, aa, bb, cc, X[ 2], 15);
   FF(cc, dd, ee, aa, bb, X[ 3], 12);
   FF(bb, cc, dd, ee, aa, X[ 4],  5);
   FF(aa, bb, cc, dd, ee, X[ 5],  8);
   FF(ee, aa, bb, cc, dd, X[ 6],  7);
   FF(dd, ee, aa, bb, cc, X[ 7],  9);
   FF(cc, dd, ee, aa, bb, X[ 8], 11);
   FF(bb, cc, dd, ee, aa, X[ 9], 13);
   FF(aa, bb, cc, dd, ee, X[10], 14);
   FF(ee, aa, bb, cc, dd, X[11], 15);
   FF(dd, ee, aa, bb, cc, X[12],  6);
   FF(cc, dd, ee, aa, bb, X[13],  7);
   FF(bb, cc, dd, ee, aa, X[14],  9);
   FF(aa, bb, cc, dd, ee, X[15],  8);

   /* parallel round 1 */
   JJJ(aaa, bbb, ccc, ddd, eee, X[ 5],  8);
   JJJ(eee, aaa, bbb, ccc, ddd, X[14],  9);
   JJJ(ddd, eee, aaa, bbb, ccc, X[ 7],  9);
   JJJ(ccc, ddd, eee, aaa, bbb, X[ 0], 11);
   JJJ(bbb, ccc, ddd, eee, aaa, X[ 9], 13);
   JJJ(aaa, bbb, ccc, ddd, eee, X[ 2], 15);
   JJJ(eee, aaa, bbb, ccc, ddd, X[11], 15);
   JJJ(ddd, eee, aaa, bbb, ccc, X[ 4],  5);
   JJJ(ccc, ddd, eee, aaa, bbb, X[13],  7);
   JJJ(bbb, ccc, ddd, eee, aaa, X[ 6],  7);
   JJJ(aaa, bbb, ccc, ddd, eee, X[15],  8);
   JJJ(eee, aaa, bbb, ccc, ddd, X[ 8], 11);
   JJJ(ddd, eee, aaa, bbb, ccc, X[ 1], 14);
   JJJ(ccc, ddd, eee, aaa, bbb, X[10], 14);
   JJJ(bbb, ccc, ddd, eee, aaa, X[ 3], 12);
   JJJ(aaa, bbb, ccc, ddd, eee, X[12],  6);

   tmp = aa; aa = aaa; aaa = tmp;

   /* round 2 */
   GG(ee, aa, bb, cc, dd, X[ 7],  7);
   GG(dd, ee, aa, bb, cc, X[ 4],  6);
   GG(cc, dd, ee, aa, bb, X[13],  8);
   GG(bb, cc, dd, ee, aa, X[ 1], 13);
   GG(aa, bb, cc, dd, ee, X[10], 11);
   GG(ee, aa, bb, cc, dd, X[ 6],  9);
   GG(dd, ee, aa, bb, cc, X[15],  7);
   GG(cc, dd, ee, aa, bb, X[ 3], 15);
   GG(bb, cc, dd, ee, aa, X[12],  7);
   GG(aa, bb, cc, dd, ee, X[ 0], 12);
   GG(ee, aa, bb, cc, dd, X[ 9], 15);
   GG(dd, ee, aa, bb, cc, X[ 5],  9);
   GG(cc, dd, ee, aa, bb, X[ 2], 11);
   GG(bb, cc, dd, ee, aa, X[14],  7);
   GG(aa, bb, cc, dd, ee, X[11], 13);
   GG(ee, aa, bb, cc, dd, X[ 8], 12);

   /* parallel round 2 */
   III(eee, aaa, bbb, ccc, ddd, X[ 6],  9);
   III(ddd, eee, aaa, bbb, ccc, X[11], 13);
   III(ccc, ddd, eee, aaa, bbb, X[ 3], 15);
   III(bbb, ccc, ddd, eee, aaa, X[ 7],  7);
   III(aaa, bbb, ccc, ddd, eee, X[ 0], 12);
   III(eee, aaa, bbb, ccc, ddd, X[13],  8);
   III(ddd, eee, aaa, bbb, ccc, X[ 5],  9);
   III(ccc, ddd, eee, aaa, bbb, X[10], 11);
   III(bbb, ccc, ddd, eee, aaa, X[14],  7);
   III(aaa, bbb, ccc, ddd, eee, X[15],  7);
   III(eee, aaa, bbb, ccc, ddd, X[ 8], 12);
   III(ddd, eee, aaa, bbb, ccc, X[12],  7);
   III(ccc, ddd, eee, aaa, bbb, X[ 4],  6);
   III(bbb, ccc, ddd, eee, aaa, X[ 9], 15);
   III(aaa, bbb, ccc, ddd, eee, X[ 1], 13);
   III(eee, aaa, bbb, ccc, ddd, X[ 2], 11);

   tmp = bb; bb = bbb; bbb = tmp;

   /* round 3 */
   HH(dd, ee, aa, bb, cc, X[ 3], 11);
   HH(cc, dd, ee, aa, bb, X[10], 13);
   HH(bb, cc, dd, ee, aa, X[14],  6);
   HH(aa, bb, cc, dd, ee, X[ 4],  7);
   HH(ee, aa, bb, cc, dd, X[ 9], 14);
   HH(dd, ee, aa, bb, cc, X[15],  9);
   HH(cc, dd, ee, aa, bb, X[ 8], 13);
   HH(bb, cc, dd, ee, aa, X[ 1], 15);
   HH(aa, bb, cc, dd, ee, X[ 2], 14);
   HH(ee, aa, bb, cc, dd, X[ 7],  8);
   HH(dd, ee, aa, bb, cc, X[ 0], 13);
   HH(cc, dd, ee, aa, bb, X[ 6],  6);
   HH(bb, cc, dd, ee, aa, X[13],  5);
   HH(aa, bb, cc, dd, ee, X[11], 12);
   HH(ee, aa, bb, cc, dd, X[ 5],  7);
   HH(dd, ee, aa, bb, cc, X[12],  5);

   /* parallel round 3 */
   HHH(ddd, eee, aaa, bbb, ccc, X[15],  9);
   HHH(ccc, ddd, eee, aaa, bbb, X[ 5],  7);
   HHH(bbb, ccc, ddd, eee, aaa, X[ 1], 15);
   HHH(aaa, bbb, ccc, ddd, eee, X[ 3], 11);
   HHH(eee, aaa, bbb, ccc, ddd, X[ 7],  8);
   HHH(ddd, eee, aaa, bbb, ccc, X[14],  6);
   HHH(ccc, ddd, eee, aaa, bbb, X[ 6],  6);
   HHH(bbb, ccc, ddd, eee, aaa, X[ 9], 14);
   HHH(aaa, bbb, ccc, ddd, eee, X[11], 12);
   HHH(eee, aaa, bbb, ccc, ddd, X[ 8], 13);
   HHH(ddd, eee, aaa, bbb, ccc, X[12],  5);
   HHH(ccc, ddd, eee, aaa, bbb, X[ 2], 14);
   HHH(bbb, ccc, ddd, eee, aaa, X[10], 13);
   HHH(aaa, bbb, ccc, ddd, eee, X[ 0], 13);
   HHH(eee, aaa, bbb, ccc, ddd, X[ 4],  7);
   HHH(ddd, eee, aaa, bbb, ccc, X[13],  5);

   tmp = cc; cc = ccc; ccc = tmp;

   /* round 4 */
   II(cc, dd, ee, aa, bb, X[ 1], 11);
   II(bb, cc, dd, ee, aa, X[ 9], 12);
   II(aa, bb, cc, dd, ee, X[11], 14);
   II(ee, aa, bb, cc, dd, X[10], 15);
   II(dd, ee, aa, bb, cc, X[ 0], 14);
   II(cc, dd, ee, aa, bb, X[ 8], 15);
   II(bb, cc, dd, ee, aa, X[12],  9);
   II(aa, bb, cc, dd, ee, X[ 4],  8);
   II(ee, aa, bb, cc, dd, X[13],  9);
   II(dd, ee, aa, bb, cc, X[ 3], 14);
   II(cc, dd, ee, aa, bb, X[ 7],  5);
   II(bb, cc, dd, ee, aa, X[15],  6);
   II(aa, bb, cc, dd, ee, X[14],  8);
   II(ee, aa, bb, cc, dd, X[ 5],  6);
   II(dd, ee, aa, bb, cc, X[ 6],  5);
   II(cc, dd, ee, aa, bb, X[ 2], 12);

   /* parallel round 4 */
   GGG(ccc, ddd, eee, aaa, bbb, X[ 8], 15);
   GGG(bbb, ccc, ddd, eee, aaa, X[ 6],  5);
   GGG(aaa, bbb, ccc, ddd, eee, X[ 4],  8);
   GGG(eee, aaa, bbb, ccc, ddd, X[ 1], 11);
   GGG(ddd, eee, aaa, bbb, ccc, X[ 3], 14);
   GGG(ccc, ddd, eee, aaa, bbb, X[11], 14);
   GGG(bbb, ccc, ddd, eee, aaa, X[15],  6);
   GGG(aaa, bbb, ccc, ddd, eee, X[ 0], 14);
   GGG(eee, aaa, bbb, ccc, ddd, X[ 5],  6);
   GGG(ddd, eee, aaa, bbb, ccc, X[12],  9);
   GGG(ccc, ddd, eee, aaa, bbb, X[ 2], 12);
   GGG(bbb, ccc, ddd, eee, aaa, X[13],  9);
   GGG(aaa, bbb, ccc, ddd, eee, X[ 9], 12);
   GGG(eee, aaa, bbb, ccc, ddd, X[ 7],  5);
   GGG(ddd, eee, aaa, bbb, ccc, X[10], 15);
   GGG(ccc, ddd, eee, aaa, bbb, X[14],  8);

   tmp = dd; dd = ddd; ddd = tmp;

   /* round 5 */
   JJ(bb, cc, dd, ee, aa, X[ 4],  9);
   JJ(aa, bb, cc, dd, ee, X[ 0], 15);
   JJ(ee, aa, bb, cc, dd, X[ 5],  5);
   JJ(dd, ee, aa, bb, cc, X[ 9], 11);
   JJ(cc, dd, ee, aa, bb, X[ 7],  6);
   JJ(bb, cc, dd, ee, aa, X[12],  8);
   JJ(aa, bb, cc, dd, ee, X[ 2], 13);
   JJ(ee, aa, bb, cc, dd, X[10], 12);
   JJ(dd, ee, aa, bb, cc, X[14],  5);
   JJ(cc, dd, ee, aa, bb, X[ 1], 12);
   JJ(bb, cc, dd, ee, aa, X[ 3], 13);
   JJ(aa, bb, cc, dd, ee, X[ 8], 14);
   JJ(ee, aa, bb, cc, dd, X[11], 11);
   JJ(dd, ee, aa, bb, cc, X[ 6],  8);
   JJ(cc, dd, ee, aa, bb, X[15],  5);
   JJ(bb, cc, dd, ee, aa, X[13],  6);

   /* parallel round 5 */
   FFF(bbb, ccc, ddd, eee, aaa, X[12] ,  8);
   FFF(aaa, bbb, ccc, ddd, eee, X[15] ,  5);
   FFF(eee, aaa, bbb, ccc, ddd, X[10] , 12);
   FFF(ddd, eee, aaa, bbb, ccc, X[ 4] ,  9);
   FFF(ccc, ddd, eee, aaa, bbb, X[ 1] , 12);
   FFF(bbb, ccc, ddd, eee, aaa, X[ 5] ,  5);
   FFF(aaa, bbb, ccc, ddd, eee, X[ 8] , 14);
   FFF(eee, aaa, bbb, ccc, ddd, X[ 7] ,  6);
   FFF(ddd, eee, aaa, bbb, ccc, X[ 6] ,  8);
   FFF(ccc, ddd, eee, aaa, bbb, X[ 2] , 13);
   FFF(bbb, ccc, ddd, eee, aaa, X[13] ,  6);
   FFF(aaa, bbb, ccc, ddd, eee, X[14] ,  5);
   FFF(eee, aaa, bbb, ccc, ddd, X[ 0] , 15);
   FFF(ddd, eee, aaa, bbb, ccc, X[ 3] , 13);
   FFF(ccc, ddd, eee, aaa, bbb, X[ 9] , 11);
   FFF(bbb, ccc, ddd, eee, aaa, X[11] , 11);

   tmp = ee; ee = eee; eee = tmp;

   /* combine results */
   md->rmd320.state[0] += aa;
   md->rmd320.state[1] += bb;
   md->rmd320.state[2] += cc;
   md->rmd320.state[3] += dd;
   md->rmd320.state[4] += ee;
   md->rmd320.state[5] += aaa;
   md->rmd320.state[6] += bbb;
   md->rmd320.state[7] += ccc;
   md->rmd320.state[8] += ddd;
   md->rmd320.state[9] += eee;

   return CRYPT_OK;
}
Beispiel #17
0
void CURRENT::pbc()
{
  // add all the field of the "current" field of the periodic boundary region so
  // that the contribution J(0)=J(0)+J(N-1) J(N-1)=J(0) and J(1)=J(1)+J(Nx)
  // same is done also for the charge density components of the field
  int i, j, k, c;
  int Nx, Ny, Nz, Nc = Ncomp;
  int Ngx, Ngy, Ngz, sendcount;
  int dimensions = mygrid->getDimensionality();
  int edge = mygrid->getEdge();
  int Nxchng = 2 * edge + 1;//, istart=(Nxchng-1)/2;
  // number of points to exchange
  // (i.e. -2,-1,0,1,2 e.g istart, istart+1,istart+2,istart+3,istart+(Nxchng-1)    
  double *send_buffer, *recv_buffer;
  MPI_Status status;
  int iright, ileft;
  Nx = mygrid->Nloc[0];
  Ny = mygrid->Nloc[1];
  Nz = mygrid->Nloc[2];
  Ngx = N_grid[0];
  Ngy = N_grid[1];
  Ngz = N_grid[2];

  if (dimensions == 3)
  {
    //send boundaries along z

    sendcount = Ngx*Ngy*Nxchng*Nc;
    send_buffer = (double *)malloc(sendcount*sizeof(double));
    recv_buffer = (double *)malloc(sendcount*sizeof(double));

    // ======   send right: send_buff=right_edge
    for (k = 0; k < Nxchng; k++)
      for (j = 0; j < Ngy; j++)
        for (i = 0; i < Ngx; i++)
          for (c = 0; c < Nc; c++)
          {
            send_buffer[c + i*Nc + j*Nc*Ngx + k*Nc*Ngx*Ngy] = JJ(c, i - edge, j - edge, (Nz - 1) - edge + k);
          }

    // ====== send edge to right receive from left
    MPI_Cart_shift(mygrid->cart_comm, 2, 1, &ileft, &iright);
    memset((void*)recv_buffer, 0, sendcount*sizeof(double));
    MPI_Sendrecv(send_buffer, sendcount, MPI_DOUBLE, iright, 13,
      recv_buffer, sendcount, MPI_DOUBLE, ileft, 13,
      MPI_COMM_WORLD, &status);

    // ====== add recv_buffer to left_edge and send back to left the result
    for (k = 0; k < Nxchng; k++)
      for (j = 0; j < Ngy; j++)
        for (i = 0; i < Ngx; i++)
          for (c = 0; c < Nc; c++)
          {
            JJ(c, i - edge, j - edge, k - edge) += recv_buffer[c + i*Nc + j*Nc*Ngx + k*Nc*Ngx*Ngy];
            send_buffer[c + i*Nc + j*Nc*Ngx + k*Nc*Ngx*Ngy] = JJ(c, i - edge, j - edge, k - edge);
          }

    // ====== send to left receive from right
    memset((void*)recv_buffer, 0, sendcount*sizeof(double));
    MPI_Sendrecv(send_buffer, sendcount, MPI_DOUBLE, ileft, 13,
      recv_buffer, sendcount, MPI_DOUBLE, iright, 13,
      MPI_COMM_WORLD, &status);
    // ====== copy recv_buffer to the right edge
    for (k = 0; k < Nxchng; k++)
      for (j = 0; j < Ngy; j++)
        for (i = 0; i < Ngx; i++)
          for (c = 0; c < Nc; c++)
          {
            JJ(c, i - edge, j - edge, (Nz - 1) - edge + k) = recv_buffer[c + i*Nc + j*Nc*Ngx + k*Nc*Ngx*Ngy];
          }

    // ===== finished, now free the send  recv buffers
    free(send_buffer);
    free(recv_buffer);

  }
  if (dimensions >= 2)
  {
    // ===============    send boundaries along y  ============

    sendcount = Ngx*Nxchng*Ngz*Nc;
    send_buffer = (double *)malloc(sendcount*sizeof(double));
    recv_buffer = (double *)malloc(sendcount*sizeof(double));

    // ======   send right: send_buff=right_edge
    for (k = 0; k < Ngz; k++)
      for (j = 0; j < Nxchng; j++)
        for (i = 0; i < Ngx; i++)
          for (c = 0; c < Nc; c++)
          {
            send_buffer[c + i*Nc + j*Nc*Ngx + k*Nc*Ngx*Nxchng] = JJ(c, i - edge, (Ny - 1) - edge + j, k - edge);
          }

    // ====== send edge to right receive from left
    MPI_Cart_shift(mygrid->cart_comm, 1, 1, &ileft, &iright);
    memset((void*)recv_buffer, 0, sendcount*sizeof(double));
    MPI_Sendrecv(send_buffer, sendcount, MPI_DOUBLE, iright, 13,
      recv_buffer, sendcount, MPI_DOUBLE, ileft, 13,
      MPI_COMM_WORLD, &status);

    // ====== add recv_buffer to left_edge and send back to left the result
    for (k = 0; k < Ngz; k++)
      for (j = 0; j < Nxchng; j++)
        for (i = 0; i < Ngx; i++)
          for (c = 0; c < Nc; c++)
          {
            JJ(c, i - edge, j - edge, k - edge) += recv_buffer[c + i*Nc + j*Nc*Ngx + k*Nc*Ngx*Nxchng];
            send_buffer[c + i*Nc + j*Nc*Ngx + k*Nc*Ngx*Nxchng] = JJ(c, i - edge, j - edge, k - edge);
          }

    // ====== send to left receive from right
    memset((void*)recv_buffer, 0, sendcount*sizeof(double));
    MPI_Sendrecv(send_buffer, sendcount, MPI_DOUBLE, ileft, 13,
      recv_buffer, sendcount, MPI_DOUBLE, iright, 13,
      MPI_COMM_WORLD, &status);
    // ====== copy recv_buffer to the right edge
    for (k = 0; k < Ngz; k++)
      for (j = 0; j < Nxchng; j++)
        for (i = 0; i < Ngx; i++)
          for (c = 0; c < Nc; c++)
          {
            JJ(c, i - edge, (Ny - 1) - edge + j, k - edge) = recv_buffer[c + i*Nc + j*Nc*Ngx + k*Nc*Ngx*Nxchng];
          }

    // ===== finished, now free the send  recv buffers
    free(send_buffer);
    free(recv_buffer);
  }

  //send boundaries along x
  sendcount = Nxchng*Ngy*Ngz*Nc;
  send_buffer = (double *)malloc(sendcount*sizeof(double));
  recv_buffer = (double *)malloc(sendcount*sizeof(double));

  // ======   send right: send_buff=right_edge
  for (k = 0; k < Ngz; k++)
    for (j = 0; j < Ngy; j++)
      for (i = 0; i < Nxchng; i++)
        for (c = 0; c < Nc; c++)
        {
          send_buffer[c + i*Nc + j*Nc*Nxchng + k*Nc*Nxchng*Ngy] = JJ(c, (Nx - 1) - edge + i, j - edge, k - edge);
        }

  // ====== send edge to right receive from left
  MPI_Cart_shift(mygrid->cart_comm, 0, 1, &ileft, &iright);
  memset((void*)recv_buffer, 0, sendcount*sizeof(double));
  MPI_Sendrecv(send_buffer, sendcount, MPI_DOUBLE, iright, 13,
    recv_buffer, sendcount, MPI_DOUBLE, ileft, 13,
    MPI_COMM_WORLD, &status);

  // ====== add recv_buffer to left_edge and send back to left the result
  for (k = 0; k < Ngz; k++)
    for (j = 0; j < Ngy; j++)
      for (i = 0; i < Nxchng; i++)
        for (c = 0; c < Nc; c++)
        {
          JJ(c, i - edge, j - edge, k - edge) += recv_buffer[c + i*Nc + j*Nc*Nxchng + k*Nc*Nxchng*Ngy];
          send_buffer[c + i*Nc + j*Nc*Nxchng + k*Nc*Nxchng*Ngy] = JJ(c, i - edge, j - edge, k - edge);
        }

  // ====== send to left receive from right
  memset((void*)recv_buffer, 0, sendcount*sizeof(double));
  MPI_Sendrecv(send_buffer, sendcount, MPI_DOUBLE, ileft, 13,
    recv_buffer, sendcount, MPI_DOUBLE, iright, 13,
    MPI_COMM_WORLD, &status);

  // ====== copy recv_buffer to the right edge
  for (k = 0; k < Ngz; k++)
    for (j = 0; j < Ngy; j++)
      for (i = 0; i < Nxchng; i++)
        for (c = 0; c < Nc; c++)
        {
          JJ(c, (Nx - 1) - edge + i, j - edge, k - edge) = recv_buffer[c + i*Nc + j*Nc*Nxchng + k*Nc*Nxchng*Ngy];
        }

  // ===== finished, now free the send  recv buffers
  free(send_buffer);
  free(recv_buffer);

}
Beispiel #18
0
STATIC void print_jobject(const mp_print_t *print, jobject obj) {
    jobject str_o = JJ(CallObjectMethod, obj, Object_toString_mid);
    const char *str = JJ(GetStringUTFChars, str_o, NULL);
    mp_printf(print, str);
    JJ(ReleaseStringUTFChars, str_o, str);
}
Beispiel #19
0
STATIC bool py2jvalue(const char **jtypesig, mp_obj_t arg, jvalue *out) {
    const char *arg_type = *jtypesig;
    mp_obj_type_t *type = mp_obj_get_type(arg);

    if (type == &mp_type_str) {
        if (IMATCH(arg_type, "java.lang.String") || IMATCH(arg_type, "java.lang.Object")) {
            out->l = JJ(NewStringUTF, mp_obj_str_get_str(arg));
        } else {
            return false;
        }
    } else if (type == &mp_type_int) {
        if (IMATCH(arg_type, "int") || IMATCH(arg_type, "long")) {
            // TODO: Java long is 64-bit actually
            out->j = mp_obj_get_int(arg);
        } else {
            return false;
        }
    } else if (type == &jobject_type) {
        bool is_object = false;
        const char *expected_type = arg_type;
        while (1) {
            if (isalpha(*arg_type)) {
            } else if (*arg_type == '.') {
                is_object = true;
            } else {
                break;
            }
            arg_type++;
        }
        if (!is_object) {
            return false;
        }
        mp_obj_jobject_t *jo = arg;
        if (!MATCH(expected_type, "java.lang.Object")) {
            char class_name[64];
            get_jclass_name(jo->obj, class_name);
            //printf("Arg class: %s\n", class_name);
            if (strcmp(class_name, expected_type) != 0) {
                return false;
            }
        }
        out->l = jo->obj;
    } else if (type == &mp_type_bool) {
        if (IMATCH(arg_type, "boolean")) {
            out->z = arg == mp_const_true;
        } else {
            return false;
        }
    } else if (arg == mp_const_none) {
        //printf("TODO: Check java arg type!!\n");
        while (isalpha(*arg_type) || *arg_type == '.') {
            arg_type++;
        }
        out->l = NULL;
    } else {
        nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "arg type not supported"));
    }

    *jtypesig = arg_type;
    return true;
}
Beispiel #20
0
STATIC mp_obj_t call_method(jobject obj, const char *name, jarray methods, bool is_constr, mp_uint_t n_args, const mp_obj_t *args) {
    jvalue jargs[n_args];
//    printf("methods=%p\n", methods);
    jsize num_methods = JJ(GetArrayLength, methods);
    for (int i = 0; i < num_methods; i++) {
        jobject meth = JJ(GetObjectArrayElement, methods, i);
        jobject name_o = JJ(CallObjectMethod, meth, Object_toString_mid);
        const char *decl = JJ(GetStringUTFChars, name_o, NULL);
        const char *arg_types = strchr(decl, '(') + 1;
        //const char *arg_types_end = strchr(arg_types, ')');
//        printf("method[%d]=%p %s\n", i, meth, decl);

        const char *meth_name = NULL;
        const char *ret_type = NULL;
        if (!is_constr) {
            meth_name = strprev(arg_types, '.') + 1;
            ret_type = strprev(meth_name, ' ') - 1;
            ret_type = strprev(ret_type, ' ') + 1;

            int name_len = strlen(name);
            if (strncmp(name, meth_name, name_len/*arg_types - meth_name - 1*/) || meth_name[name_len] != '('/*(*/) {
                goto next_method;
            }
        }
//        printf("method[%d]=%p %s\n", i, meth, decl);
//        printf("!!!%s\n", arg_types);
//        printf("name=%p meth_name=%s\n", name, meth_name);

        bool found = true;
        for (int i = 0; i < n_args && *arg_types != ')'; i++) {
            if (!py2jvalue(&arg_types, args[i], &jargs[i])) {
                goto next_method;
            }

            if (*arg_types == ',') {
                arg_types++;
            }
        }

        if (*arg_types != ')') {
            goto next_method;
        }

        if (found) {
//            printf("found!\n");
            jmethodID method_id = JJ(FromReflectedMethod, meth);
            jobject res;
            mp_obj_t ret;
            if (is_constr) {
                JJ(ReleaseStringUTFChars, name_o, decl);
                res = JJ(NewObjectA, obj, method_id, jargs);
                return new_jobject(res);
            } else {
                if (MATCH(ret_type, "void")) {
                    JJ(CallVoidMethodA, obj, method_id, jargs);
                    check_exception();
                    ret = mp_const_none;
                } else if (MATCH(ret_type, "int")) {
                    jint res = JJ(CallIntMethodA, obj, method_id, jargs);
                    check_exception();
                    ret = mp_obj_new_int(res);
                } else if (MATCH(ret_type, "boolean")) {
                    jboolean res = JJ(CallBooleanMethodA, obj, method_id, jargs);
                    check_exception();
                    ret = mp_obj_new_bool(res);
                } else if (is_object_type(ret_type)) {
                    res = JJ(CallObjectMethodA, obj, method_id, jargs);
                    check_exception();
                    ret = new_jobject(res);
                } else {
                    JJ(ReleaseStringUTFChars, name_o, decl);
                    nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "cannot handle return type"));
                }

                JJ(ReleaseStringUTFChars, name_o, decl);
                JJ(DeleteLocalRef, name_o);
                JJ(DeleteLocalRef, meth);
                return ret;
            }
        }

next_method:
        JJ(ReleaseStringUTFChars, name_o, decl);
        JJ(DeleteLocalRef, name_o);
        JJ(DeleteLocalRef, meth);
    }

    nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "method not found"));
}