// 01.10.2014. Авторские и имущественные права на программный код // переданы А.Е.Акимову-Тимьянову как одному из основных соавторов // со всеми вытекающими из этого правами для развития его научно- // исследовательской работы в НИИММ при МГУ. Текущая версия // объявляется последней, распространяемой как freeware OpenSource GNU PL. // Дальнейшие версии неидентифицируются и не подлежат распространению // иначе как с согласия правопреемников В.В.Пекунова, оставляюего за собой // право на модернизацию кода в лично научных и иных некоммерческих целях, // и правообладателя. // Для компиляции требуется предварительная обработка файла // транслятором процедур с повторным входом (можно скачать // с сайта автора архив Reenterable.zip, размещенный по // ссылке http://pekunov.chat.ru/Progs/Reenterable.zip // Транслятор компилируется в Lazarus или с помощью Free Pascal. // Далее обрабатываем программу: Reenterable.exe Modelling.cpp run.cpp // Компилируем run.cpp и запускаем результат. // To compile this program it is necessarry to handle its file // by means of reenterable procedures preprocessor (you can get it // from the archive Reenterable.zip at the author site. The link: // http://pekunov.chat.ru/Progs/Reenterable.zip // Preprocessor can be built by Lazarus or Free Pascal of the last versions. // Start preprocessing using command: Reenterable.exe Modelling.cpp run.cpp // Then compile please run.cpp and execute the result. /* V0.981 beta2. 14.08.2014. Почти полноценная версия. Не хватает лишь подсчета времени по модели. */ // Сброс данных в файл, во избежание. XML??? // Индукция лин. классиф. правил, вероятностей. // Время -- !!! // map -- кэш для правил. // set -- для выделения общих частей, например. // голосование за дуги??? // Фильтрация значений. Взаимные ссылки. // introducevar(name,expression) // Сейчас может быть что-то не так при счете с компиляцией и без. Типы? Пороги? // Порог 0.1. Сделать настраиваемым в модели. В системе -- увеличить или уменьшить? // Расчет порогов вероятностей в зависомости от входных переменных. // Интерполяция векторов данных по входным данным и параметрам алгоритма. Промежуточных // или конечных. Вешать ее на дуги!!! // post-conditioning // + Еще один вариант -- автоматически вешать RegisterVariable на индукцию по следующей дуге, // если она введена не до появления модели, конечно. // + interpret induct funcs... // + fun[i]==null!!! point into loop!!! Register with parameter -- induct!!! // + Перестал работать FindRelation с пустым Declined // + Проверить формулы для исключаемой переменной... // + entry/exit -- паразитные переходы // + Интерполятор дает неверные значения!!! Diff-модель. // Советы RegisterVariable -- by means of which function we shall predict? sin,cos,log,... LIST // + Порядок для RegisterVar при индукте!!! Иначе нет логики в зависимостях!!! // getValue() -- conditioning // _N/=10 -- 3 points -- problems with correlations??? // CUDA. Построение модели, работа модели. Параллельный обсчет МГУА, например. Полином? // Завсисмости по данным надо учесть. #include "metalyer-p.h" using namespace std; // extern void cudaGetLU(int NN, int * iRow, float * LU); void Subroutine() { // MarkModelPoint("Subroutine"); } int MAIN(); int main() { map::iterator iLibs; int result = MAIN(); FreeModel(); for (iLibs = Libs.begin(); iLibs!=Libs.end(); iLibs++) FreeLibrary(iLibs->second); return result; } typedef __declspec(dllimport) double (*MyModel)(double ___min, double ___max, int &_N); typedef __declspec(dllimport) double (*GearModel)(double ___min, double ___max, int &_j); typedef __declspec(dllimport) double (*MatrixModel)(double ___min, double ___max, double &_N); typedef __declspec(dllimport) double (*DiffModel)(double ___min, double ___max, double &_X, double &_Y); typedef __declspec(dllimport) double (*DiffModelN)(double ___min, double ___max, int &_N, double &_X, double &_Y); typedef __declspec(dllimport) double (*LastModel)(double ___min, double ___max, double &_N); #define main MAIN // #include "kinetic.h" void QuickSort(int * a, int Left, int Right) { int i,j,p,s;; i=Left; j=Right; p=a[(Left+Right) / 2]; do { while (a[i] V0(100), V1(100), Z(100); reenterable ModelLoop(int _N, double & X) { if (_N <= 100) { StartModel(); RegisterVariable("N",_N); X=200.0; RegisterVariable("X",X,true); for (int i=0; i<_N; i++) { X += 0.1*(-(V0[i] = X)); } RegisterVariable("Y",X,true); plan_last(_N*2, X); } } int main() { /* double TT; float TTT0[NNNB*NNN1*NNN2]; memset(TTT0,0,NNNB*NNN1*NNN2*sizeof(float)); for (int i=0; iCH3+HO2"); Translate (1, "CH3+O2->CH3OO"); Translate (2, "CH3OO->CH2O+OH"); Translate (3, "CH4+OH->CH3+H2O"); Translate (4, "CH2O+OH->H2O+HCO"); Translate (5, "CH2O+O2->HCO+HO2"); Translate (6, "HCO+O2->CO+HO2"); Translate (7, "CH4+HO2->H2O2+CH3"); Translate (8, "CH2O+HO2->H2O2+HCO"); Translate (9, "CO+OH->CO2+H"); Translate (10, "CH4+H->CH3+H2"); Translate (11, "CH2O+H->HCO+H2"); Translate (12, "2CH3->C2H6"); Translate (13, "2HO2->H2O2+O2"); Translate (14, "OH+HO2->H2O+O2"); Translate (15, "H+HO2->H2+O2"); Translate (16, "CH3+HO2->CH4+O2"); ReTranslate(); AllocateKineticBySubsts(); EndTime = 1e-3; // vremya interirovaniya Tk = 1300.0; // Temperatura provediya reaksii v K for (int i = 0; i < NASubst; i++) Conc0[i] = 0.0; LossPrecision = 0; // nachalnie znacheniya konzentrasii for (int j = 0; j<8; j++) { Conc0[0] = 1.0*j/19*0.41*1e-4; Conc0[1] = 1.0*(19-j)/19*0.71*0.41*1e-4; StartModel(); RegisterVariable("j",j); // CreateContext("GEAR",1,"j"); // T = milliseconds(); OneTaktKinetic(0,Adams_Rozhkov_Method); // T = milliseconds()-T; if (LossPrecision) { cout << " Oshibka vichislenii : " << (KinErrorInfo.LossH==0 ? " slishkom mnogo iterasii" : " poterya tochnosti - shag po vremeni stremitcya k nulu ") << "\n"; cout << " Vichisleniya prervani v moment t=" << KinErrorInfo.ReachTau << ". Vipolnino "<< Iters <<" iterasi\n"; } for (int i=0; i=1; _N /= 2) // cout<<"QS MODEL = "<=1; _N /= 5) { StartModel(); RegisterVariable("_N",0.1*_N); //T = milliseconds(); MarkModelPoint("Entry", true); for (int j=0; j<_N; j++) { for (int i=0; i<_N; i++) { double A = 1.0, B = 5.5, k1 = 0.1, k2 = 0.2, k3 = 0.05, k4 = 0.1; double U = 5.0*j/_N; double V = 5.0*i/_N; double t = 0.0; double TMAX = 0.01; double tau = 0.001; for (; t=1; _N /= 5) { double __N = 0.1*_N; cout<<"Matrix MODEL = "<=1; _N /= 5) { double __N = 0.1*_N; int Can = 0.5*MMODEL(0.01,10000.0,__N)>OMPDelay; cout<<"Matrix ["<<_N<<","<<_N<<"]. Parallelizing potentially gives "<<(Can ? "best" : "worst")<<" results"<=-100000?"":"Ух ты!!!")<<(Timings[_N-1]=pm::ModelTime)<=-100000?"":"Мдаааааа!!!")<<(Timings[_N-1]=pm::ModelTime)<