Changeset 3f198cc in tol for tol_pkg/MulVarFunAprox/DesignC2.Spheric.tol
- Timestamp:
- Dec 23, 2009, 2:25:56 PM (17 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- f389530
- Parents:
- 38052b37
- File:
-
- 1 edited
-
tol_pkg/MulVarFunAprox/DesignC2.Spheric.tol (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tol_pkg/MulVarFunAprox/DesignC2.Spheric.tol
r38052b37 r3f198cc 12 12 ////////////////////////////////////////////////////////////////////////////// 13 13 { 14 //////////////////////////////////////////////////////////////////////////////15 //Configuration parameters16 //////////////////////////////////////////////////////////////////////////////17 Real _.radius;18 Real _.radius.margin;19 Real _.grid.size;20 21 //////////////////////////////////////////////////////////////////////////////22 //Auxiliar members23 //////////////////////////////////////////////////////////////////////////////24 VMatrix _.Y.h = Rand(0,0,0,0);25 VMatrix _.Y.neighbourhood = Rand(0,0,0,0);26 27 14 ////////////////////////////////////////////////////////////////////////////// 28 Real build.stress.points(Real void)15 //Virtual methods 29 16 ////////////////////////////////////////////////////////////////////////////// 30 { 31 Text _MID = "[@DesignC2.Spheric::build.stress.points] "; 32 WriteLn("TRACE "+_MID+"1"); 33 Matrix Y.neighbour.triplet = Group("ConcatRows", For(1,_.H,Matrix(Real h) 34 { 35 Set neighbours = Unique(VRow2Set(SubRow(_.Y.neighbourhood,[[h]]))); 36 Set neighbours.up = Select(neighbours,Real(Real s) { s>h }); 37 Matrix s = SetCol(Sort(neighbours.up,Compare)); 38 Rand(Rows(s),1,h,h)|s|Rand(Rows(s),1,1,1) 39 })); 40 41 WriteLn("TRACE "+_MID+"2"); 42 VMatrix Y.neighbour.1.map = Triplet(Y.neighbour.triplet,_.H,_.H); 43 VMatrix Y.neighbour.2.map = Y.neighbour.1.map*Y.neighbour.1.map; 44 VMatrix Y.neighbour.12.map = Max(Y.neighbour.1.map,Y.neighbour.2.map); 45 Matrix Y.neighbour.12.triplet = VMat2Triplet(Y.neighbour.12.map); 46 VMatrix Z.h.a = Mat2VMat(SubCol(Y.neighbour.12.triplet,[[1]])); 47 VMatrix Z.h.b = Mat2VMat(SubCol(Y.neighbour.12.triplet,[[2]])); 48 VMatrix Y.neighbour.a = SubRow(_.Y,VCol2Set(Z.h.a)); 49 VMatrix Y.neighbour.b = SubRow(_.Y,VCol2Set(Z.h.b)); 50 VMatrix Z.all = (Y.neighbour.a + Y.neighbour.b)*0.5; 51 52 WriteLn("TRACE "+_MID+"3"); 53 VMatrix Z.interior.a = 54 { 55 VMatrix Z.norm2 = RPow(Y.neighbour.a-Z.all,2)*Rand(_.n,1,1,1); 56 VMatrix Z.tao = RPow(Z.norm2,0.5)/_.radius; 57 LE(Z.tao,Rand(VRows(Z.tao),1,1,1)) 58 }; 59 VMatrix Z.interior.b = 60 { 61 VMatrix Z.norm2 = RPow(Y.neighbour.b-Z.all,2)*Rand(_.n,1,1,1); 62 VMatrix Z.tao = RPow(Z.norm2,0.5)/_.radius; 63 LE(Z.tao,Rand(VRows(Z.tao),1,1,1)) 64 }; 65 VMatrix match.interior = Z.interior.a $* Z.interior.b; 66 67 Set sel.interior = MatQuery::SelectMatch(match.interior); 68 VMatrix Z.interior = SubRow(Z.all,sel.interior); 69 VMatrix Z.h.interior = SubRow(Z.h.a | Z.h.b,sel.interior); 70 Set criterium = Range(1,_.n,1); 71 Set sel.unique = Col2Set(Sort(VMat2Mat(Z.interior),criterium,True)); 72 WriteLn("TRACE "+_MID+"4"); 73 VMatrix _.Z := SubRow(Z.interior, sel.unique); 74 VMatrix _.Z.h := SubRow(Z.h.interior, sel.unique); 75 Real _.Tz := VRows(_.Z); 76 VMatrix _.Z.Y.neighbour := 77 { 78 Matrix Z.t = DifEq(1/(1-B),Rand(_.Tz,1,1,1)); 79 Matrix Z.th = (Z.t << Z.t) | 80 VMat2Mat((SubCol(_.Z.h,[[1]])<<SubCol(_.Z.h,[[2]]))); 81 Matrix Z.Y.idx = PivotByRows(Z.th,Sort(Z.th,[[2]])); 82 VMatrix Z.Y.dif = 83 SubRow(_.Z,Col2Set(SubCol(Z.Y.idx,[[1]]))) - 84 SubRow(_.Y,Col2Set(SubCol(Z.Y.idx,[[2]]))); 85 VMatrix Z.Y.norm2 = RPow(Z.Y.dif,2)*Rand(_.n,1,1,1); 86 VMatrix Z.Y.tao = RPow(Z.Y.norm2,0.5)/_.radius; 87 VMatrix Z.Y.match = LE(Z.Y.tao,Rand(VRows(Z.Y.tao),1,1,1)); 88 SubRow(Mat2VMat(Z.Y.idx),MatQuery::SelectMatch(Z.Y.match)) 89 }; 90 VMatrix aux = MatQuery::SortAndCount(SubCol(_.Z.Y.neighbour,[[2]])); 91 VMatrix _.Yt := Triplet(VMat2Mat(SubCol(aux,[[1]])) | 92 Rand(VRows(aux),1,1,1) | 93 VMat2Mat(SubCol(aux,[[2]])),_.H,1); 94 Real _.Mz := Case( 95 prior.Z.order< 0, 0, 96 prior.Z.order==0, _.Tz, 97 prior.Z.order==1, _.Tz*(1+_.n), 98 prior.Z.order==2, _.Tz*(1+_.n*3/2+(1/2)*_.n^2)); 99 _.Tz 100 }; 17 VMatrix get.radius(VMatrix Y.idx); 101 18 102 19 /////////////////////////////////////////////////////////////////////////// 103 Set get.X.weight(Set X.dif )20 Set get.X.weight(Set X.dif, Set X.h) 104 21 /////////////////////////////////////////////////////////////////////////// 105 22 { … … 108 25 { 109 26 VMatrix X.norm2 = RPow(X.dif[i],2)*Rand(_.n,1,1,1); 110 RPow(X.norm2,0.5) /_.radius27 RPow(X.norm2,0.5)$/get.radius(X.h[i]) 111 28 }); 112 29 Set X.tao2 = For(1,_.X.maxNeighbour,VMatrix(Real i) … … 130 47 }; 131 48 /////////////////////////////////////////////////////////////////////////// 132 Set get.X.weight.partial.derivative.1(Set X.dif, Real s)49 Set get.X.weight.partial.derivative.1(Set X.dif, Set X.h, Real s) 133 50 /////////////////////////////////////////////////////////////////////////// 134 51 { … … 137 54 { 138 55 VMatrix X.norm2 = RPow(X.dif[i],2)*Rand(_.n,1,1,1); 139 RPow(X.norm2,0.5) /_.radius56 RPow(X.norm2,0.5)$/get.radius(X.h[i]) 140 57 }); 141 58 Set X.tao2 = For(1,_.X.maxNeighbour,VMatrix(Real i) … … 153 70 Set X.lambda.der = For(1,_.X.maxNeighbour,VMatrix(Real i) 154 71 { 155 RPow(X.match[i] $* (Rand(m,1,1,1)-X.tao2[i]),3)$*SubCol(X.dif[i],[[s]])*8/_.radius 72 RPow(X.match[i] $* 73 (Rand(m,1,1,1)-X.tao2[i]),3) $* 74 (SubCol(X.dif[i],[[s]])*8) $/ get.radius(X.h[i]) 156 75 }); 157 76 VMatrix X.lambda.sum = SetSum(X.lambda);
Note: See TracChangeset
for help on using the changeset viewer.
