Advertisement
kestutisma

Untitled

Jul 26th, 2018
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const GATES = 4;
  2. const T = 1000;
  3. // fast, slow
  4. go_ = 1.179709368300604e-06 * 2.017070982139932 * 2.678224120996112 * 2.786216107542795 * 1.5;
  5. var A = [.1, .1, .1, .1];
  6. var V0 = [36, 36, 48, 48];
  7. var go = [go_, go_, 1e10, 1e10];
  8. var gc = [go_ / 1e10, go_ / 1e10, go_ / 1e10, go_ / 1e10];
  9. var ro = [1e10, 1e10, 1e10, 1e10];
  10. var rc = [1e10, 1e10, 1e10, 1e10];
  11. var P = [-1, 1, -1, 1];
  12. var pt = .03;
  13.  
  14. par = [...A, ...V0, ...go, ...gc, ...ro, ...rc, ...P];
  15.  
  16. let q = new Array(36).fill(0);
  17. q[0] = 1;
  18. let vj = new Array(T);
  19. let gj = new Array(T);
  20. let pc1c2 = 0.01;
  21. let pc2c1 = 0.00001;
  22.  
  23. let ggg = new Array(36);
  24.  
  25. // postMessage([1, { text: "Hello from worker..\n" }]);
  26. console.log("Starting..");
  27. for (let t = 0; t < T; t++) {
  28.     if (t < 250)
  29.         vj[t] = 0;
  30.     else if (t < 500)
  31.         vj[t] = 60 * (t - 250) / 250;
  32.     else if (t < 750)
  33.         vj[t] = 0;
  34.     else if (t < T)
  35.         vj[t] = -60 * (t - 750) / 250;
  36.     gj[t] = 0;
  37. }
  38. const t_start = Date.now();
  39. for (let t = 0; t < T; t++) {
  40.     if ((t + 1) * 100 / T % 10 === 0) {
  41.         // postMessage([3, { text: (t + 1) * 100 / T }]);
  42.     }
  43.     // code
  44.     gj[t] = MC36SM_Mindaugo_SS(vj[t], par, q, pt, pc1c2, pc2c1);
  45. }
  46. t_end = Date.now();
  47. // postMessage([2, { T: T, gj: gj, vj: vj, text: "Time required for execution: " + (t_end - t_start) / 1000 + " seconds." }]);
  48. console.log("Time required for execution: " + (t_end - t_start) / 1000 + " seconds.");
  49.  
  50.  
  51. function MC36SM_Mindaugo_SS(vj, par, p, Pt, pc1c2, pc2c1) {
  52.     A = par.slice(0, 4);
  53.     v0 = par.slice(4, 8);
  54.     Go = par.slice(8, 12);
  55.     Gc = par.slice(12, 16);
  56.     Ro = par.slice(16, 20);
  57.     Rc = par.slice(20, 24);
  58.     P = par.slice(24, 28);
  59.  
  60.     //  let g[36][4] = {};// initialize to 0
  61.     let g = new Array(36);
  62.     let v = new Array(36);
  63.     let k = new Array(36);
  64.     let R = new Array(36);
  65.     for (let i = 0; i < 36; i++) {
  66.         g[i] = new Array(4).fill(0);
  67.         v[i] = new Array(4).fill(0);
  68.         k[i] = new Array(4).fill(0);
  69.         R[i] = new Array(4).fill(0);
  70.     }
  71.  
  72.     //states conductances
  73.     for (let i1 = 0; i1 < 2; i1++)
  74.         for (let i2 = 0; i2 < 3; i2++)
  75.             for (let i3 = 0; i3 < 3; i3++)
  76.                 for (let i4 = 0; i4 < 2; i4++) {
  77.                     if (i1 == 0) {
  78.                         g[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][0] = Go[0];
  79.                         R[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][0] = Ro[0];
  80.                     }
  81.                     else {
  82.                         g[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][0] = Gc[0];
  83.                         R[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][0] = Rc[0];
  84.                     }
  85.                     if (i2 == 0) {
  86.                         g[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][1] = Go[1];
  87.                         R[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][1] = Ro[1];
  88.                     }
  89.                     else {
  90.                         g[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][1] = Gc[1];
  91.                         R[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][1] = Rc[1];
  92.                     }
  93.                     if (i3 == 0) {
  94.                         g[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][2] = Go[2];
  95.                         R[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][2] = Ro[2];
  96.                     }
  97.                     else {
  98.                         g[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][2] = Gc[2];
  99.                         R[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][2] = Rc[2];
  100.                     }
  101.                     if (i4 == 0) {
  102.                         g[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][3] = Go[3];
  103.                         R[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][3] = Ro[3];
  104.                     }
  105.                     else {
  106.                         g[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][3] = Gc[3];
  107.                         R[i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1][3] = Rc[3];
  108.                     }
  109.  
  110.                 }
  111.  
  112.     let h = new Array(36);
  113.     for (let i = 0; i < 36; i++) {
  114.         h[i] = new Array(4).fill(0);
  115.     }
  116.     for (let i = 0; i < 4; i++)     for (let j = 0; j < 36; j++)        h[j][i] = g[j][i];
  117.  
  118.     for (let a = 0; a < 4; a++) // voltages and rectification
  119.     {
  120.         let gg = new Array(36).fill(0);
  121.         for (let i = 0; i < 36; i++)        //gg = 1. / sum(1. / g, 2); %sums rows
  122.         {
  123.             for (let j = 0; j < 4; j++)
  124.                 gg[i] += 1 / g[i][j];
  125.             gg[i] = 1 / gg[i];
  126.         }
  127.         for (let i = 0; i < 4; i++) //v=vj*[gg gg gg gg]./g;
  128.             for (let j = 0; j < 36; j++)
  129.                 v[j][i] = vj * gg[j] / g[j][i];
  130.         for (let i = 0; i < 4; i++) //g=g.*Math.exp(v./R);
  131.             for (let j = 0; j < 36; j++)
  132.                 g[j][i] = h[j][i] * Math.exp(v[j][i] / R[j][i]);
  133.     }
  134.  
  135.     for (let i = 0; i < 36; i++) //k=Math.exp(repmat(A,16,1).*(v.*repmat(P,16,1)-repmat(v0,16,1)));
  136.         for (let j = 0; j < 4; j++)
  137.             k[i][j] = Math.exp(A[j] * (v[i][j] * P[j] - v0[j]));
  138.  
  139.     let K = Pt;
  140.     let PPP = new Array(36);
  141.     for (let i = 0; i < 36; i++) {
  142.         PPP[i] = new Array(36).fill(0);
  143.     }
  144.     //------------Matrica P-------------------------------------------------
  145.     let l = pc1c2 / pc2c1;
  146.     let p1, p2, p3, p4;
  147.     for (let i1 = 0; i1 < 2; i1++)
  148.         for (let i2 = 0; i2 < 3; i2++)
  149.             for (let i3 = 0; i3 < 3; i3++)
  150.                 for (let i4 = 0; i4 < 2; i4++)
  151.                     for (let j1 = 0; j1 < 2; j1++)
  152.                         for (let j2 = 0; j2 < 3; j2++)
  153.                             for (let j3 = 0; j3 < 3; j3++)
  154.                                 for (let j4 = 0; j4 < 2; j4++) {
  155.                                     let i = i1 * 18 + i2 * 6 + i3 * 2 + i4 * 1;
  156.                                     let j = j1 * 18 + j2 * 6 + j3 * 2 + j4 * 1;
  157.                                     ////////////// p1
  158.                                     if (i1 == 0) {
  159.                                         if (j1 == 0)
  160.                                             p1 = (1 - K * k[i][0] / (1 + k[i][0]));
  161.                                         else
  162.                                             p1 = K * k[i][0] / (1 + k[i][0]);
  163.                                     }
  164.                                     else {
  165.                                         if (j1 == 1)
  166.                                             p1 = (1 - K / (1 + k[i][0]));
  167.                                         else
  168.                                             p1 = K / (1 + k[i][0]);
  169.                                     }
  170.                                     ///////////////p2
  171.                                     if (i2 == 0) {
  172.                                         if (j2 == 0)
  173.                                             p2 = (1 - K * k[i][1] / (1 + k[i][1]));
  174.                                         if (j2 == 1)
  175.                                             p2 = K * k[i][1] / (1 + k[i][1]);
  176.                                         if (j2 == 2)
  177.                                             p2 = 0;
  178.                                     }
  179.                                     else if (i2 == 1) {
  180.                                         if (j2 == 0)
  181.                                             p2 = (K / (1 + k[i][1])) * (1 - pc1c2);
  182.                                         if (j2 == 1)
  183.                                             p2 = (1 - K / (1 + k[i][1])) * (1 - pc1c2);
  184.                                         if (j2 == 2)
  185.                                             p2 = pc1c2;
  186.                                     }
  187.                                     else if (i2 == 2) {
  188.                                         if (j2 == 0)
  189.                                             p2 = 0;
  190.                                         if (j2 == 1)
  191.                                             p2 = pc2c1;
  192.                                         if (j2 == 2)
  193.                                             p2 = 1 - pc2c1;
  194.                                     }
  195.                                     ////////////////p3
  196.                                     if (i3 == 0) {
  197.                                         if (j3 == 0)
  198.                                             p3 = (1 - K * k[i][2] / (1 + k[i][2]));
  199.                                         if (j3 == 1)
  200.                                             p3 = K * k[i][2] / (1 + k[i][2]);
  201.                                         if (j3 == 2)
  202.                                             p3 = 0;
  203.                                     }
  204.                                     else if (i3 == 1) {
  205.                                         if (j3 == 0) //c1->o
  206.                                             p3 = (K / (1 + k[i][2])) * (1 - pc1c2);
  207.                                         if (j3 == 1)
  208.                                             p3 = (1 - K / (1 + k[i][2])) * (1 - pc1c2);
  209.                                         if (j3 == 2)
  210.                                             p3 = pc1c2;
  211.                                     }
  212.                                     else if (i3 == 2) {
  213.                                         if (j3 == 0)
  214.                                             p3 = 0;
  215.                                         if (j3 == 1)
  216.                                             p3 = pc2c1;
  217.                                         if (j3 == 2)
  218.                                             p3 = 1 - pc2c1;
  219.                                     }
  220.                                     /////////////////p4
  221.                                     if (i4 == 0) {
  222.                                         if (j4 == 0)
  223.                                             p4 = (1 - K * k[i][3] / (1 + k[i][3]));
  224.                                         else
  225.                                             p4 = K * k[i][3] / (1 + k[i][3]);
  226.                                     }
  227.                                     else {
  228.                                         if (j4 == 1)
  229.                                             p4 = (1 - K / (1 + k[i][3]));
  230.                                         else
  231.                                             p4 = K / (1 + k[i][3]);
  232.                                     }
  233.                                     PPP[i][j] = p1 * p2 * p3 * p4;
  234.                                 }
  235.  
  236.     // -------------- SS skaiciavimas
  237.     let d_g = 100000;
  238.     let g_old = 100000;
  239.     let g_final = 0;
  240.     let i = 0;
  241.     while (d_g / (g_old + g_final) > .001e-5) {
  242.         i++;
  243.         let q = new Array(36).fill(0);
  244.         for (let j = 0; j < 36; j++) for (let i = 0; i < 36; i++)    q[j] += p[i] * PPP[i][j]; // q=p*PPP;
  245.         for (let j = 0; j < 36; j++)  ggg[j] = 0;
  246.         for (let i = 0; i < 36; i++)        //ggg = 1. / sum(1. / g, 2); %sums rows
  247.         {
  248.             for (let j = 0; j < 4; j++) ggg[i] += 1 / g[i][j];
  249.             ggg[i] = 1 / ggg[i];
  250.         }
  251.  
  252.         g_final = 0;
  253.         for (let j = 0; j < 36; j++) //g_final = q*ggg';
  254.             g_final += q[j] * ggg[j];
  255.  
  256.         for (let i = 0; i < 36; i++)    p[i] = q[i]; //grazina p
  257.  
  258.         d_g = Math.abs(g_old - g_final);
  259.         g_old = g_final;
  260.     }
  261.     return g_final;
  262. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement