// load transponders int loadTransponders() { bool satcleared = 0; scnt = 0; t_satellite_position position = 0; //first postion dprintf(DEBUG_NORMAL, "getServices:loadTransponders:\n"); select_transponders.clear(); fake_tid = fake_nid = 0; if(!satcleared) satellitePositions.clear(); satcleared = 1; fe_type_t fe_type = FE_QAM; // parse sat tp for(int i = 0; i < FrontendCount; i++) { CFrontend * fe = getFE(i); fe_type = fe->getInfo()->type; //parseScanInputXml(i); parseScanInputXml(fe_type); if ( scanInputParser != NULL ) { xmlNodePtr search = xmlDocGetRootElement(scanInputParser)->xmlChildrenNode; while (search) { if (!(strcmp(xmlGetName(search), "sat"))) { // position position = xmlGetSignedNumericAttribute(search, "position", 10); char * name = xmlGetAttribute(search, "name"); if(satellitePositions.find(position) == satellitePositions.end()) { init_sat(position); } // name satellitePositions[position].name = name; // type satellitePositions[position].type = DVB_S; } else if(!(strcmp(xmlGetName(search), "cable"))) { //flags ??? //satfeed ??? char * name = xmlGetAttribute(search, "name"); if(satellitePositions.find(position) == satellitePositions.end()) { init_sat(position); } // name satellitePositions[position].name = name; // type //needed to resort list for scan menue satellitePositions[position].type = DVB_C; } else if(!(strcmp(xmlGetName(search), "terrestrial"))) { char * name = xmlGetAttribute(search, "name"); if(satellitePositions.find(position) == satellitePositions.end()) { init_sat(position); } // name satellitePositions[position].name = name; // type //needed to resort list for scan menue satellitePositions[position].type = DVB_T; } // parse sat TP ParseSatTransponders(fe_type, search, position); position++; search = search->xmlNextNode; } } } // satip if(g_settings.satip_allow_satip) { if(g_settings.satip_serverbox_type == DVB_C) fe_type = FE_QAM; else if(g_settings.satip_serverbox_type == DVB_S) fe_type = FE_QPSK; else if(g_settings.satip_serverbox_type == DVB_T) fe_type = FE_OFDM; parseScanInputXml(fe_type); if ( scanInputParser != NULL ) { xmlNodePtr search = xmlDocGetRootElement(scanInputParser)->xmlChildrenNode; while (search) { if (!(strcmp(xmlGetName(search), "sat"))) { // position position = xmlGetSignedNumericAttribute(search, "position", 10); char * name = xmlGetAttribute(search, "name"); if(satellitePositions.find(position) == satellitePositions.end()) { init_sat(position); } // name satellitePositions[position].name = name; // type satellitePositions[position].type = DVB_S; } else if(!(strcmp(xmlGetName(search), "cable"))) { //flags ??? //satfeed ??? char * name = xmlGetAttribute(search, "name"); if(satellitePositions.find(position) == satellitePositions.end()) { init_sat(position); } // name satellitePositions[position].name = name; // type //needed to resort list for scan menue satellitePositions[position].type = DVB_C; } else if(!(strcmp(xmlGetName(search), "terrestrial"))) { char * name = xmlGetAttribute(search, "name"); if(satellitePositions.find(position) == satellitePositions.end()) { init_sat(position); } // name satellitePositions[position].name = name; // type //needed to resort list for scan menue satellitePositions[position].type = DVB_T; } // parse sat TP ParseSatTransponders(fe_type, search, position); position++; search = search->xmlNextNode; } } } return 0; }
// load services int loadServices(bool only_current) { xmlDocPtr parser; scnt = 0; dprintf(DEBUG_NORMAL, "getServices:loadServices:\n"); if(only_current) goto do_current; // parse services.xml parser = parseXmlFile(SERVICES_XML); if (parser != NULL) { xmlNodePtr search = xmlDocGetRootElement(parser)->xmlChildrenNode; while (search) { if (!(strcmp(xmlGetName(search), "sat"))) { // position t_satellite_position position = xmlGetSignedNumericAttribute(search, "position", 10); char * name = xmlGetAttribute(search, "name"); if(satellitePositions.find(position) == satellitePositions.end()) { init_sat(position); satellitePositions[position].name = name; } } // jump to the next node search = search->xmlNextNode; } FindTransponder( xmlDocGetRootElement(parser)->xmlChildrenNode ); xmlFreeDoc(parser); } // load motor position for(int i = 0; i < FrontendCount; i++) { if( getFE(i)->getInfo()->type == FE_QPSK) { loadMotorPositions(); break; } } dprintf(DEBUG_NORMAL, "[zapit] %d services loaded (%d)...\n", scnt, allchans.size()); do_current: dprintf(DEBUG_DEBUG, "loading current services\n"); if (scanSDT && (parser = parseXmlFile(CURRENTSERVICES_XML))) { newfound = 0; dprintf(DEBUG_INFO, "[getservices] " CURRENTSERVICES_XML " found.\n"); FindTransponder( xmlDocGetRootElement(parser)->xmlChildrenNode ); xmlFreeDoc(parser); unlink(CURRENTSERVICES_XML); if(newfound) SaveServices(true); //FIXME for second tuner } if(!only_current) { parser = parseXmlFile(MYSERVICES_XML); if (parser != NULL) { FindTransponder(xmlDocGetRootElement(parser)->xmlChildrenNode); xmlFreeDoc(parser); } } return 0; }
void upscale(const Opm::parameter::ParameterGroup& param) { // Control structure. std::vector<double> saturations; Opm::SparseTable<double> all_pdrops; bool from_file = param.has("sat_pdrop_filename"); if (from_file) { std::string filename = param.get<std::string>("sat_pdrop_filename"); std::ifstream file(filename.c_str()); if (!file) { OPM_THROW(std::runtime_error, "Could not open file " << filename); } readControl(file, saturations, all_pdrops); } else { // Get a linear range of saturations. int num_sats = param.getDefault("num_sats", 4); double min_sat = param.getDefault("min_sat", 0.2); double max_sat = param.getDefault("max_sat", 0.8); saturations.resize(num_sats); for (int i = 0; i < num_sats; ++i) { double factor = num_sats == 1 ? 0 : double(i)/double(num_sats - 1); saturations[i] = (1.0 - factor)*min_sat + factor*max_sat; } // Get a logarithmic range of pressure drops. int num_pdrops = param.getDefault("num_pdrops", 5); double log_min_pdrop = std::log(param.getDefault("min_pdrop", 1e2)); double log_max_pdrop = std::log(param.getDefault("max_pdrop", 1e6)); std::vector<double> pdrops; pdrops.resize(num_pdrops); for (int i = 0; i < num_pdrops; ++i) { double factor = num_pdrops == 1 ? 0 : double(i)/double(num_pdrops - 1); pdrops[i] = std::exp((1.0 - factor)*log_min_pdrop + factor*log_max_pdrop); } // Assign the same pressure drops to all saturations. for (int i = 0; i < num_sats; ++i) { all_pdrops.appendRow(pdrops.begin(), pdrops.end()); } } int flow_direction = param.getDefault("flow_direction", 0); // Print the saturations and pressure drops. // writeControl(std::cout, saturations, all_pdrops); // Initialize upscaler. typedef SteadyStateUpscaler<Traits> Upscaler; typedef typename Upscaler::permtensor_t permtensor_t; Upscaler upscaler; upscaler.init(param); // First, compute an upscaled permeability. permtensor_t upscaled_K = upscaler.upscaleSinglePhase(); permtensor_t upscaled_K_copy = upscaled_K; upscaled_K_copy *= (1.0/(Opm::prefix::milli*Opm::unit::darcy)); std::cout.precision(15); std::cout << "Upscaled K in millidarcy:\n" << upscaled_K_copy << std::endl; std::cout << "Upscaled porosity: " << upscaler.upscalePorosity() << std::endl; // Create output streams for upscaled relative permeabilities std::string kr_filename = param.getDefault<std::string>("kr_filename", "upscaled_relperm"); std::string krw_filename = kr_filename + "_water"; std::string kro_filename = kr_filename + "_oil"; std::ofstream krw_out(krw_filename.c_str()); std::ofstream kro_out(kro_filename.c_str()); krw_out << "# Result from steady state upscaling" << std::endl; krw_out << "# Pressuredrop Sw Krxx Kryy Krzz" << std::endl; kro_out << "# Result from steady state upscaling" << std::endl; kro_out << "# Pressuredrop Sw Krxx Kryy Krzz" << std::endl; krw_out.precision(15); krw_out.setf(std::ios::scientific | std::ios::showpoint); kro_out.precision(15); kro_out.setf(std::ios::scientific | std::ios::showpoint); //#endif // Then, compute some upscaled relative permeabilities. int num_cells = upscaler.grid().size(0); int num_sats = saturations.size(); for (int i = 0; i < num_sats; ++i) { // Starting every computation with a trio of uniform profiles. std::vector<double> init_sat(num_cells, saturations[i]); const Opm::SparseTable<double>::row_type pdrops = all_pdrops[i]; int num_pdrops = pdrops.size(); for (int j = 0; j < num_pdrops; ++j) { double pdrop = pdrops[j]; std::pair<permtensor_t, permtensor_t> lambda = upscaler.upscaleSteadyState(flow_direction, init_sat, saturations[i], pdrop, upscaled_K); double usat = upscaler.lastSaturationUpscaled(); std::cout << "\n\nTensor of upscaled relperms for initial saturation " << saturations[i] << ", real steady-state saturation " << usat << " and pressure drop " << pdrop << ":\n\n[water]\n" << lambda.first << "\n[oil]\n" << lambda.second << std::endl; // Changing initial saturations for next pressure drop to equal the steady state of the last init_sat = upscaler.lastSaturationState(); writeRelPerm(krw_out, lambda.first , usat, pdrop); writeRelPerm(kro_out, lambda.second, usat, pdrop); } } }