Ignore:
Timestamp:
Dec 23, 2009, 2:25:56 PM (17 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
f389530
Parents:
38052b37
Message:

Preparando para permitir radio variante en los entornos esféricos

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@1885 be4846ae-f051-483a-831f-b64e7d08527f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tol_pkg/MulVarFunAprox/DesignC2.Spheric.tol

    r38052b37 r3f198cc  
    1212//////////////////////////////////////////////////////////////////////////////
    1313{
    14 //////////////////////////////////////////////////////////////////////////////
    15 //Configuration parameters
    16 //////////////////////////////////////////////////////////////////////////////
    17   Real _.radius;
    18   Real _.radius.margin;
    19   Real _.grid.size;
    20 
    21 //////////////////////////////////////////////////////////////////////////////
    22 //Auxiliar members
    23 //////////////////////////////////////////////////////////////////////////////
    24   VMatrix _.Y.h = Rand(0,0,0,0);
    25   VMatrix _.Y.neighbourhood = Rand(0,0,0,0);
    26 
    2714  //////////////////////////////////////////////////////////////////////////////
    28   Real build.stress.points(Real void)
     15  //Virtual methods
    2916  //////////////////////////////////////////////////////////////////////////////
    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);
    10118
    10219  ///////////////////////////////////////////////////////////////////////////
    103   Set get.X.weight(Set X.dif)
     20  Set get.X.weight(Set X.dif, Set X.h)
    10421  ///////////////////////////////////////////////////////////////////////////
    10522  {
    … …  
    10825    {
    10926      VMatrix X.norm2 = RPow(X.dif[i],2)*Rand(_.n,1,1,1);
    110       RPow(X.norm2,0.5)/_.radius
     27      RPow(X.norm2,0.5)$/get.radius(X.h[i])
    11128    });
    11229    Set X.tao2 = For(1,_.X.maxNeighbour,VMatrix(Real i)
    … …  
    13047  };
    13148  ///////////////////////////////////////////////////////////////////////////
    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)
    13350  ///////////////////////////////////////////////////////////////////////////
    13451  {
    … …  
    13754    {
    13855      VMatrix X.norm2 = RPow(X.dif[i],2)*Rand(_.n,1,1,1);
    139       RPow(X.norm2,0.5)/_.radius
     56      RPow(X.norm2,0.5)$/get.radius(X.h[i])
    14057    });
    14158    Set X.tao2 = For(1,_.X.maxNeighbour,VMatrix(Real i)
    … …  
    15370    Set X.lambda.der = For(1,_.X.maxNeighbour,VMatrix(Real i)
    15471    {
    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])
    15675    });
    15776    VMatrix X.lambda.sum = SetSum(X.lambda);
Note: See TracChangeset for help on using the changeset viewer.