|
|
1.1 ! root 1: //Conductivity example. ! 2: //Parameters --- ! 3: rho //radius of cylindrical inclusion ! 4: n //number of terms in solution ! 5: m //number of boundary points ! 6: //initialize operation counter ! 7: flop = <0 0>; ! 8: //initialize variables ! 9: m1 = round(m/3); //number of points on each straight edge ! 10: m2 = m - m1; //number of points with Dirichlet conditions ! 11: pi = 4*atan(1); ! 12: //generate points in Cartesian coordinates ! 13: //right hand edge ! 14: for i = 1:m1, x(i) = 1; y(i) = (1-rho)*(i-1)/(m1-1); ! 15: //top edge ! 16: for i = m2+1:m, x(i) = (1-rho)*(m-i)/(m-m2-1); y(i) = 1; ! 17: //circular edge ! 18: for i = m1+1:m2, t = pi/2*(i-m1)/(m2-m1+1); ... ! 19: x(i) = 1-rho*sin(t); y(i) = 1-rho*cos(t); ! 20: //convert to polar coordinates ! 21: for i = 1:m-1, th(i) = atan(y(i)/x(i)); ... ! 22: r(i) = sqrt(x(i)**2+y(i)**2); ! 23: th(m) = pi/2; r(m) = 1; ! 24: //generate matrix ! 25: //Dirichlet conditions ! 26: for i = 1:m2, for j = 1:n, k = 2*j-1; ... ! 27: a(i,j) = r(i)**k*cos(k*th(i)); ! 28: //Neumann conditions ! 29: for i = m2+1:m, for j = 1:n, k = 2*j-1; ... ! 30: a(i,j) = k*r(i)**(k-1)*sin((k-1)*th(i)); ! 31: //generate right hand side ! 32: for i = 1:m2, b(i) = 1; ! 33: for i = m2+1:m, b(i) = 0; ! 34: //solve for coefficients ! 35: c = A$b ! 36: //compute effective conductivity ! 37: c(2:2:n) = -c(2:2:n) ! 38: sigma = sum(c) ! 39: //output total operation count ! 40: ops = flop(2)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.