void update(float elapsed, TCOD_key_t k, TCOD_mouse_t mouse) { get_from_UI(dens_prev,u_prev,v_prev,elapsed,k,mouse); update_velocity(u,v,u_prev,v_prev,visc,elapsed); update_density(dens,dens_prev,u,v,diff,elapsed); }
Application::Application(int & argc, char ** argv) : QAPP(argc, argv) { HardwareUtils::Instance()->setParent(this); connect(HardwareUtils::Instance(), SIGNAL(networkStatusChanged()), this, SLOT(networkStatusChanged())); connect(HardwareUtils::Instance(), &HardwareUtils::applicationWillResignActive, [=]() { qDebug() << "Application is in background, logout"; startedWithOptHandled = false; logout(); }); connect(HardwareUtils::Instance(), &HardwareUtils::applicationBecomeActive, [=]() { qDebug() << "Application is in foreground, login again"; QTimer::singleShot(0, [=]() { login(get_username(), get_password(), get_hostname()); }); }); QCoreApplication::setOrganizationName("Calaos"); QCoreApplication::setOrganizationDomain("calaos.fr"); QCoreApplication::setApplicationName("CalaosHome"); Common::registerQml(); #ifdef Q_OS_ANDROID QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); QAndroidJniObject resource = activity.callObjectMethod("getResources","()Landroid/content/res/Resources;"); QAndroidJniObject metrics = resource.callObjectMethod("getDisplayMetrics","()Landroid/util/DisplayMetrics;"); update_density(metrics.getField<float>("density")); update_needBackButton(false); // Need to fix a bug on Android where text is scratched at runtime on some devices qputenv("QML_USE_GLYPHCACHE_WORKAROUND", QByteArray("1")); update_isAndroid(true); update_isIOS(false); update_isDesktop(false); #else if (arguments().contains("--force-hdpi")) update_density(2.0); else update_density(1.0); update_needBackButton(true); #ifdef Q_OS_IOS update_isAndroid(false); update_isIOS(true); update_isDesktop(false); #else update_isAndroid(false); update_isIOS(false); update_isDesktop(true); #endif #endif loadSettings(); update_applicationStatus(Common::NotConnected); calaosConnect = new CalaosConnection(this); connect(calaosConnect, SIGNAL(homeLoaded(QVariantMap)), this, SLOT(homeLoaded(QVariantMap))); connect(calaosConnect, SIGNAL(loginFailed()), this, SLOT(loginFailed())); connect(calaosConnect, &CalaosConnection::disconnected, [=]() { update_applicationStatus(Common::NotConnected); }); scenarioModel = new ScenarioModel(&engine, calaosConnect, this); scenarioSortModel = new ScenarioSortModel(&engine, this); scenarioSortModel->setSourceModel(scenarioModel); engine.rootContext()->setContextProperty("scenarioModel", scenarioSortModel); lightOnModel = new LightOnModel(&engine, calaosConnect, this); engine.rootContext()->setContextProperty("lightOnModel", lightOnModel); homeModel = new HomeModel(&engine, calaosConnect, scenarioModel, lightOnModel, this); engine.rootContext()->setContextProperty("homeModel", homeModel); audioModel = new AudioModel(&engine, calaosConnect, this); engine.rootContext()->setContextProperty("audioModel", audioModel); favModel = new FavoritesModel(&engine, calaosConnect, this); engine.rootContext()->setContextProperty("favoritesModel", favModel); favHomeModel = new HomeFavModel(&engine, calaosConnect, this); engine.rootContext()->setContextProperty("favoritesHomeModel", favHomeModel); cameraModel = new CameraModel(&engine, calaosConnect); engine.rootContext()->setContextProperty("cameraModel", cameraModel); engine.rootContext()->setContextProperty("calaosApp", this); engine.load(QUrl(QStringLiteral("qrc:///qml/main.qml"))); //Start autologin QTimer::singleShot(100, [=]() { login(get_username(), get_password(), get_hostname()); }); }
void Application::createQmlApp() { loadSettings(); engine.addImportPath("qrc:/qml/"); connect(HardwareUtils::Instance(), SIGNAL(networkStatusChanged()), this, SLOT(networkStatusChanged())); connect(HardwareUtils::Instance(), SIGNAL(calaosServerDetected()), this, SLOT(calaosServerDetected())); connect(HardwareUtils::Instance(), &HardwareUtils::applicationWillResignActive, [=]() { qDebug() << "Application is in background, logout"; startedWithOptHandled = false; logout(); }); connect(HardwareUtils::Instance(), &HardwareUtils::applicationBecomeActive, [=]() { qDebug() << "Application is in foreground, login again"; QTimer::singleShot(0, [=]() { login(get_username(), get_password(), get_hostname()); }); }); Common::registerQml(); #ifdef Q_OS_ANDROID QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); QAndroidJniObject resource = activity.callObjectMethod("getResources","()Landroid/content/res/Resources;"); QAndroidJniObject metrics = resource.callObjectMethod("getDisplayMetrics","()Landroid/util/DisplayMetrics;"); update_density(metrics.getField<float>("density")); update_needBackButton(false); // Need to fix a bug on Android where text is scratched at runtime on some devices qputenv("QML_USE_GLYPHCACHE_WORKAROUND", QByteArray("1")); update_isAndroid(true); update_isIOS(false); update_isDesktop(false); #else if (arguments().contains("--force-hdpi")) update_density(2.0); else update_density(1.0); update_needBackButton(true); #ifdef Q_OS_IOS update_isAndroid(false); update_isIOS(true); update_isDesktop(false); #else update_isAndroid(false); update_isIOS(false); update_isDesktop(true); #endif #endif update_applicationStatus(Common::NotConnected); calaosConnect = new CalaosConnection(this); connect(calaosConnect, SIGNAL(homeLoaded(QVariantMap)), this, SLOT(homeLoaded(QVariantMap))); connect(calaosConnect, SIGNAL(loginFailed()), this, SLOT(loginFailed())); connect(calaosConnect, &CalaosConnection::disconnected, [=]() { update_applicationStatus(Common::NotConnected); #ifdef CALAOS_DESKTOP HardwareUtils::Instance()->showAlertMessage(tr("Network error"), tr("The connection to calaos_server was lost." "It will reconnect automatically when calaos_server" "is available again."), tr("Close")); //restart autologin, only on desktop to continually try to connect QTimer::singleShot(1000, [=]() { //reload settings in case it was changed loadSettings(); login(get_username(), get_password(), get_hostname()); }); #endif }); scenarioModel = new ScenarioModel(&engine, calaosConnect, this); scenarioSortModel = new ScenarioSortModel(&engine, this); scenarioSortModel->setSourceModel(scenarioModel); engine.rootContext()->setContextProperty("scenarioModel", scenarioSortModel); lightOnModel = new LightOnModel(&engine, calaosConnect, this); engine.rootContext()->setContextProperty("lightOnModel", lightOnModel); homeModel = new HomeModel(&engine, calaosConnect, scenarioModel, lightOnModel, this); engine.rootContext()->setContextProperty("homeModel", homeModel); audioModel = new AudioModel(&engine, calaosConnect, this); engine.rootContext()->setContextProperty("audioModel", audioModel); favModel = new FavoritesModel(&engine, calaosConnect, this); engine.rootContext()->setContextProperty("favoritesModel", favModel); favHomeModel = new HomeFavModel(&engine, calaosConnect, this); engine.rootContext()->setContextProperty("favoritesHomeModel", favHomeModel); cameraModel = new CameraModel(&engine, calaosConnect); engine.rootContext()->setContextProperty("cameraModel", cameraModel); #ifdef CALAOS_DESKTOP CalaosWidgetModel::Instance()->loadFromDisk(); engine.rootContext()->setContextProperty("widgetsModel", CalaosWidgetModel::Instance()); #endif engine.rootContext()->setContextProperty("calaosApp", this); //Register Units singleton //qmlRegisterSingletonType(QUrl("qrc:/qml/Units.qml"), "Units", 1, 0, "Units"); qmlRegisterType<RoomFilterModel>("Calaos", 1, 0, "RoomFilterModel"); #if defined(CALAOS_MOBILE) engine.load(QUrl(QStringLiteral("qrc:///qml/mobile/main.qml"))); #elif defined(CALAOS_DESKTOP) engine.load(QUrl(QStringLiteral("qrc:///qml/desktop/main.qml"))); #else #error "Unknown UI type!" #endif #ifndef CALAOS_DESKTOP //Start autologin, only on mobile. On desktop we wait for calaos_server detection QTimer::singleShot(100, [=]() { login(get_username(), get_password(), get_hostname()); }); #endif }
void compute_density(sim_state_t* s, sim_param_t* params) { int n = s->n; particle_t* p = s->part; particle_t** hash = s->hash; float h = params->h; float h2 = params->h2; // float h3 = params->h3; // float h9 = params->h9; float C = params->C; // Accumulate density info #ifdef USE_BUCKETING /* BEGIN TASK */ // Clear densities to the initial value float rhoAdditive = params->rhoAdditive; for (int i = 0; i < n; ++i) p[i].rho = rhoAdditive; // Start multi-threading #ifdef USE_PARALLEL #pragma omp parallel { // Get the thread id and total threads for work distribution int thread_id = omp_get_thread_num(); int total_threads = omp_get_num_threads(); #else // Thread ID and total threads for non parallel is 0,1 int thread_id = 0; int total_threads = 1; #endif // Setup a neighbor bin store unsigned buckets[MAX_NBR_BINS]; unsigned numbins; // Get the rho accumulator for this thread float* rho = rho_all + thread_id * s->n; memset(rho, 0, sizeof(float) * s->n); // Get the dedupe buffer for this thread char* usedBinID = used_bin_id_flags + (thread_id * HASH_SIZE); // Iterate over each bucket, and within each bucket each particle for (int iter_bucket = thread_id; iter_bucket < HASH_SIZE; iter_bucket += total_threads) { for (particle_t* pi = hash[iter_bucket]; pi != NULL ; pi = pi->next) { unsigned diffPosI = pi - s->part; float* i_rho = rho + diffPosI; // Compute equal and opposite rho additives for the particle, // first get neighbors numbins = particle_neighborhood(buckets, pi, h, usedBinID); for (int j = 0; j < numbins; ++j) { // Get the neighbor particles unsigned bucketid = buckets[j]; for (particle_t* pj = hash[bucketid]; pj != NULL ; pj = pj->next) { unsigned diffPosJ = pj - s->part; float* j_rho = rho + diffPosJ; // Compute density only if appropriate if (pi < pj && abs(pi->ix - pj->ix) <= 1 && abs(pi->iy - pj->iy) <= 1 && abs(pi->iz - pj->iz) <= 1) { update_density(pi, pj, h2, C, i_rho, j_rho); } } } } } // Accumulate the rho for each particle for(int iter_particle = 0; iter_particle < s->n; ++iter_particle) { particle_t* cur_particle = s->part + iter_particle; float rho_add = rho[iter_particle]; if(rho_add != 0) { #ifdef USE_PARALLEL #ifdef USE_LOCKS omp_set_lock(&cur_particle->lock); #endif #endif cur_particle->rho += rho_add; #ifdef USE_PARALLEL #ifdef USE_LOCKS omp_unset_lock(&cur_particle->lock); #endif #endif } } #ifdef USE_PARALLEL } #endif /* END TASK */ #else // Clear densities for (int i = 0; i < n; ++i) p[i].rho = 0; for (int i = 0; i < n; ++i) { particle_t* pi = s->part+i; pi->rho += (315.0/64.0/M_PI) * s->mass / h3; for (int j = i+1; j < n; ++j) { particle_t* pj = s->part+j; update_density(pi, pj, h2, C, &pi->rho, &pj->rho); } } #endif }
void update(lua_State *L, gaszone_type *gz, float elapsed) { add_data(L, gz, gz->dens_prev, gz->u_prev, gz->v_prev, elapsed); update_velocity(gz, gz->u, gz->v, gz->u_prev, gz->v_prev, gz->visc, elapsed); update_density(gz, gz->dens, gz->dens_prev, gz->u, gz->v, gz->diff, elapsed); }