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.Monomial.Spheric.Grid.tol

    r38052b37 r3f198cc  
    1414//////////////////////////////////////////////////////////////////////////////
    1515{
     16  @IndexedGrid.Border _.grid;
    1617//////////////////////////////////////////////////////////////////////////////
    1718//Configuration parameters
    1819//////////////////////////////////////////////////////////////////////////////
    19   @IndexedGrid.Border _.grid;
     20  Real _.radius;
     21  Real _.radius.margin;
     22  Real _.grid.size;
    2023
    2124//////////////////////////////////////////////////////////////////////////////
    2225//Auxiliar members
    2326//////////////////////////////////////////////////////////////////////////////
     27  VMatrix _.Y.h = Rand(0,0,0,0);
     28  VMatrix _.Y.neighbourhood = Rand(0,0,0,0);
    2429
    2530  ////////////////////////////////////////////////////////////////////////////
    … …  
    4550
    4651  //////////////////////////////////////////////////////////////////////////////
     52  VMatrix get.radius(VMatrix Y.idx)
     53  //////////////////////////////////////////////////////////////////////////////
     54  {
     55    Constant(VRows(Y.idx),1,_.radius)
     56  };
     57
     58  //////////////////////////////////////////////////////////////////////////////
    4759  VMatrix closest.reference.index(VMatrix X)
    4860  //////////////////////////////////////////////////////////////////////////////
    … …  
    6880    VMatrix _.Yj := Mat2VMat(SetMat([[EvalSet(X.class,Card)]]),1);
    6981    Real _.H := _.grid::_.H
     82  };
     83
     84  //////////////////////////////////////////////////////////////////////////////
     85  Real build.stress.points(Real void)
     86  //////////////////////////////////////////////////////////////////////////////
     87  {
     88    Text _MID = "[@DesignC2.Spheric::build.stress.points] ";
     89    WriteLn("TRACE "+_MID+"1");
     90    Matrix Y.neighbour.triplet = Group("ConcatRows", For(1,_.H,Matrix(Real h)
     91    {
     92      Set neighbours = Unique(VRow2Set(SubRow(_.Y.neighbourhood,[[h]])));
     93      Set neighbours.up = Select(neighbours,Real(Real s) { s>h });
     94      Matrix s = SetCol(Sort(neighbours.up,Compare));
     95      Rand(Rows(s),1,h,h)|s|Rand(Rows(s),1,1,1)
     96    }));
     97
     98    WriteLn("TRACE "+_MID+"2");
     99    VMatrix Y.neighbour.1.map = Triplet(Y.neighbour.triplet,_.H,_.H);
     100    VMatrix Y.neighbour.2.map = Y.neighbour.1.map*Y.neighbour.1.map;
     101    VMatrix Y.neighbour.12.map = Max(Y.neighbour.1.map,Y.neighbour.2.map);
     102    Matrix Y.neighbour.12.triplet = VMat2Triplet(Y.neighbour.12.map);
     103    VMatrix Z.h.a = Mat2VMat(SubCol(Y.neighbour.12.triplet,[[1]]));
     104    VMatrix Z.h.b = Mat2VMat(SubCol(Y.neighbour.12.triplet,[[2]]));
     105    VMatrix Y.neighbour.a = SubRow(_.Y,VCol2Set(Z.h.a));
     106    VMatrix Y.neighbour.b = SubRow(_.Y,VCol2Set(Z.h.b));
     107    VMatrix Z.all = (Y.neighbour.a + Y.neighbour.b)*0.5;
     108
     109    WriteLn("TRACE "+_MID+"3");
     110    VMatrix Z.interior.a =
     111    {
     112      VMatrix Z.norm2 = RPow(Y.neighbour.a-Z.all,2)*Rand(_.n,1,1,1);
     113      VMatrix Z.tao = RPow(Z.norm2,0.5)/_.radius;
     114      LE(Z.tao,Rand(VRows(Z.tao),1,1,1))
     115    };
     116    VMatrix Z.interior.b =
     117    {
     118      VMatrix Z.norm2 = RPow(Y.neighbour.b-Z.all,2)*Rand(_.n,1,1,1);
     119      VMatrix Z.tao = RPow(Z.norm2,0.5)/_.radius;
     120      LE(Z.tao,Rand(VRows(Z.tao),1,1,1))
     121    };
     122    VMatrix match.interior = Z.interior.a $* Z.interior.b;
     123
     124    Set sel.interior = MatQuery::SelectMatch(match.interior);
     125    VMatrix Z.interior = SubRow(Z.all,sel.interior);
     126    VMatrix Z.h.interior = SubRow(Z.h.a | Z.h.b,sel.interior);
     127    Set criterium = Range(1,_.n,1);
     128    Set sel.unique = Col2Set(Sort(VMat2Mat(Z.interior),criterium,True));
     129    WriteLn("TRACE "+_MID+"4");
     130    VMatrix _.Z := SubRow(Z.interior, sel.unique);
     131    VMatrix _.Z.h := SubRow(Z.h.interior, sel.unique);
     132    Real _.Tz := VRows(_.Z);
     133    VMatrix _.Z.Y.neighbour :=
     134    {
     135      Matrix Z.t = DifEq(1/(1-B),Rand(_.Tz,1,1,1));
     136      Matrix Z.th = (Z.t << Z.t) |
     137       VMat2Mat((SubCol(_.Z.h,[[1]])<<SubCol(_.Z.h,[[2]])));
     138      Matrix Z.Y.idx = PivotByRows(Z.th,Sort(Z.th,[[2]]));
     139      VMatrix Z.Y.dif =
     140       SubRow(_.Z,Col2Set(SubCol(Z.Y.idx,[[1]]))) -
     141       SubRow(_.Y,Col2Set(SubCol(Z.Y.idx,[[2]])));
     142        VMatrix Z.Y.norm2 = RPow(Z.Y.dif,2)*Rand(_.n,1,1,1);
     143        VMatrix Z.Y.tao = RPow(Z.Y.norm2,0.5)/_.radius;
     144        VMatrix Z.Y.match = LE(Z.Y.tao,Rand(VRows(Z.Y.tao),1,1,1));
     145      SubRow(Mat2VMat(Z.Y.idx),MatQuery::SelectMatch(Z.Y.match))
     146    };
     147    VMatrix aux = MatQuery::SortAndCount(SubCol(_.Z.Y.neighbour,[[2]]));
     148    VMatrix _.Yt := Triplet(VMat2Mat(SubCol(aux,[[1]])) | 
     149                            Rand(VRows(aux),1,1,1) |
     150                            VMat2Mat(SubCol(aux,[[2]])),_.H,1);
     151    Real _.Mz := Case(
     152      prior.Z.order< 0, 0,
     153      prior.Z.order==0, _.Tz,
     154      prior.Z.order==1, _.Tz*(1+_.n),
     155      prior.Z.order==2, _.Tz*(1+_.n*3/2+(1/2)*_.n^2));
     156    _.Tz
    70157  };
    71158
Note: See TracChangeset for help on using the changeset viewer.