Advertisement
Guest User

Untitled

a guest
Apr 11th, 2019
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Julia 6.08 KB | None | 0 0
  1. module testMC36SM
  2. using LinearAlgebra
  3. export run
  4. function run()
  5.     println("starting..")
  6.     vj = LinRange(0, 120, 100);
  7.     gj = zeros(length(vj))
  8.     parAllFast = [ .15 28 20e-9 20e-9/10 800 50 .5 -1;       .15 28 20e-9 20e-9/10 800 50 .5 1 ];
  9.     parAllSlow = [ .1 36 100e-9 1e-15 1e10 1e10 .5 -1;       .1 36 100e-9 1e-15 1e10 1e10 .5 1 ];
  10.     par = [parAllFast; parAllSlow];
  11.     pc1c2 = 0;
  12.     pc2c1 = 0;
  13.     pc1c2 = 0.01;
  14.     pc2c1 = 0.001;
  15.     ppp = zeros(36);
  16.     ppp[1] = 1;
  17.     for i = 1:length(vj)
  18.         gj[i] = MC36SM_Mindaugo_SS(vj[i], par, ppp, pc1c2, pc2c1);
  19.     end
  20.     println("done.")
  21.     return vj, gj
  22. end
  23.  
  24. function MC36SM_Mindaugo_SS(vj::Float64, par::Array{Float64,2}, p::Array{Float64}, pc1c2::Float64, pc2c1::Float64)
  25.     PPP = zeros(36,36);
  26.     p1 = 0;
  27.     p2 = 0;
  28.     p3 = 0;
  29.     p4 = 0;
  30.  
  31.     A = par[:,1]';
  32.    v0 = par[:,2]';
  33.     Go = par[:,3]';
  34.    Gc = par[:,4]';
  35.     Ro = par[:,5]';
  36.    Rc = par[:,6]';
  37.     Pt = par[:,7]';
  38.    P = par[:,8]';;
  39.  
  40.    K = Pt[1];
  41.    g = zeros(36,4);
  42.    v = zeros(36,4);
  43.    k = zeros(36,4);
  44.    R = zeros(36,4);
  45.  
  46.    # //states conductances
  47.    for i1=1:2
  48.        for i2=1:3
  49.            for i3=1:3
  50.                for i4=1:2
  51.                    if (i1==1)
  52.                        g[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,1]=Go[1];
  53.                        R[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,1]=Ro[1];
  54.                    else
  55.                        g[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,1]=Gc[1];
  56.                        R[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,1]=Rc[1];
  57.                    end
  58.                    if (i2==1)
  59.                        g[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,2]=Go[2];
  60.                        R[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,2]=Ro[2];
  61.                    else
  62.                        g[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,2]=Gc[2];
  63.                        R[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,2]=Rc[2];
  64.                    end
  65.                    if (i3==1)
  66.                        g[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,3]=Go[3];
  67.                        R[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,3]=Ro[3];
  68.                    else
  69.                        g[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,3]=Gc[3];
  70.                        R[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,3]=Rc[3];
  71.                    end
  72.                    if (i4==1)
  73.                        g[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,4]=Go[4];
  74.                        R[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,4]=Ro[4];
  75.                    else
  76.                        g[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,4]=Gc[4];
  77.                        R[(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1,4]=Rc[4];
  78.                    end
  79.                end
  80.            end
  81.        end
  82.    end
  83.  
  84.    for a = 1:4 #// voltages and rectification
  85.        gg = 1 ./ sum( (1 ./ g), dims = 2 ); #sums rows
  86.        v=vj*[gg gg gg gg]./g;
  87.        g=g .* exp.(v./R);
  88.    end
  89.  
  90.    for i = 1:36
  91.        for j = 1:4
  92.            k[i,j] = exp(A[j] * (v[i,j] * P[j] - v0[j]));
  93.        end
  94.    end
  95.  
  96.    # //------------Matrica P-------------------------------------------------
  97.    for i1=1:2 for i2=1:3 for i3=1:3 for i4=1:2
  98.     for j1=1:2 for j2=1:3 for j3=1:3 for j4=1:2
  99.       i=(i1-1)*18+(i2-1)*6+(i3-1)*2+(i4-1)*1+1;
  100.       j=(j1-1)*18+(j2-1)*6+(j3-1)*2+(j4-1)*1+1;
  101.  
  102.  
  103.       # %-------be Pt---------------------
  104.       # % p1
  105.        if (i1==1)
  106.            if (j1==1)
  107.                p1=(1-K*k[i,1]/(1+k[i,1]));
  108.            else
  109.                p1=K*k[i,1]/(1+k[i,1]);
  110.            end
  111.        else
  112.            if (j1==2)
  113.                p1=(1-K/(1+k[i,1]));
  114.            else
  115.                p1=K/(1+k[i,1]);
  116.            end
  117.        end
  118.    # %------------------------------
  119.    #   % p2
  120.        if (i2==1)
  121.            if (j2==1)
  122.                p2=(1-K*k[i,2]/(1+k[i,2]));
  123.            end
  124.            if (j2==2)
  125.                p2=K*k[i,2]/(1+k[i,2]);
  126.            end
  127.            if (j2==3)
  128.                p2=0;
  129.            end
  130.        end
  131.  
  132.        if (i2==2)
  133.            if (j2==1)
  134.                p2=(K/(1+k[i,2]))*(1-pc1c2);
  135.            end
  136.            if (j2==2)
  137.                p2=(1-K/(1+k[i,2]))*(1-pc1c2);
  138.            end
  139.            if (j2==3)
  140.                p2=pc1c2;
  141.            end
  142.        end
  143.  
  144.        if (i2==3)
  145.            if (j2==1)
  146.                p2=0;
  147.            end
  148.            if (j2==2)
  149.                p2=pc2c1;
  150.            end
  151.            if (j2==3)
  152.                p2=1-pc2c1;
  153.            end
  154.        end
  155.      # %----------------------------------------
  156.      # % p3
  157.        if (i3==1)
  158.            if (j3==1)
  159.                p3=(1-K*k[i,3]/(1+k[i,3]));
  160.            end
  161.            if (j3==2)
  162.                p3=K*k[i,3]/(1+k[i,3]);
  163.            end
  164.            if (j3==3)
  165.                p3=0;
  166.            end
  167.        end
  168.  
  169.        if (i3==2)
  170.            if (j3==1)
  171.                p3=(K/(1+k[i,3]))*(1-pc1c2);
  172.            end
  173.            if (j3==2)
  174.                p3=(1-K/(1+k[i,3]))*(1-pc1c2);
  175.            end
  176.            if (j3==3)
  177.                p3=pc1c2;
  178.            end
  179.        end
  180.  
  181.        if (i3==3)
  182.            if (j3==1)
  183.                p3=0;
  184.            end
  185.            if (j3==2)
  186.                p3=pc2c1;
  187.            end
  188.            if (j3==3)
  189.                p3=1-pc2c1;
  190.            end
  191.        end
  192.      # %----------------------------
  193.      # %p4
  194.        if (i4==1)
  195.            if (j4==1)
  196.                p4=(1-K*k[i,4]/(1+k[i,4]));
  197.            else
  198.                p4=K*k[i,4]/(1+k[i,4]);
  199.            end
  200.        else
  201.            if (j4==2)
  202.                p4=(1-K/(1+k[i,4]));
  203.            else
  204.                p4=K/(1+k[i,4]);
  205.            end
  206.        end
  207.  
  208.     PPP[i,j]=p1*p2*p3*p4;
  209.  
  210.    end
  211.    end
  212.    end
  213.    end
  214.    end
  215.    end
  216.    end
  217.    end
  218.  
  219.    d_g = 100000;
  220.    g_old = 100000;
  221.    g_final = 0;
  222.    i = 0;
  223.    p_ = copy(p) #36-vec
  224.    ggg = 1 ./ sum( (1 ./ g), dims=2 ); #%sums rows
  225.    while (d_g / (g_old + g_final) > .001e-5)
  226.        i = i + 1;
  227.        #p=p*PPP;
  228.        mul!(p_, PPP', p)
  229.       p, p_ = p_, p
  230.      
  231.       g_final = dot(ggg, p) #(p*ggg)[1];
  232.       d_g = abs(g_old - g_final);
  233.       g_old = g_final;
  234.   end
  235.   return g_final;
  236. end
  237. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement