示例#1
0
    def recalc(self):
        xvalues = self.rib1.profile_2d.XValues
        #Map Ballooning

        if len(self.miniribs) == 0:  # In case there is no midrib, The Cell represents itself!
            self._cells = [self]  # The cell itself is its cell, clear?
            self._phi = [self.rib1.ballooning(x)+self.rib2.ballooning(x) for x in xvalues]
            self._yvalues = [0, 1]
        else:
            ballooning = [self.rib1.ballooning[x]+self.rib2.ballooning[x] for x in xvalues]
            self._cells = []
            miniribs = sorted(self.miniribs, key=lambda rib: rib.xvalue)    # sort for cell-wide (x) argument.
            self._yvalues = [0] + [i.xvalue for i in miniribs] + [1]

            prof1 = self.rib1.profile_3d
            for minirib in miniribs:
                big = self._midrib(minirib.xvalue, True).data  # SUPER!!!?
                small = self._midrib(minirib.xvalue, False).data

                for i in range(len(big)):  # Calculate Rib
                    fakt = minirib.function(xvalues[i])  # factor ballooned/unb. (0-1)
                    point = small[i]+fakt*(big[i]-small[i])
                    minirib.data.append(point)

                prof2 = minirib
                self._cells.append(BasicCell(prof1, prof2, []))  # leave ballooning empty
                prof1 = prof2

            #Last Sub-Cell
            self._cells.append(BasicCell(prof1, self.rib2.profile_3d, []))

            # Calculate ballooning for each x-value
            # Hamilton Principle:
            #       http://en.wikipedia.org/wiki/Hamilton%27s_principle
            #       http://en.wikipedia.org/wiki/Hamilton%E2%80%93Jacobi_equation
            # b' = b
            # f' = f*(l/l') [f=b/l]
            for i in range(len(prof1.data)):
                bl = ballooning[i]+1  # B/L old
                l = norm(self.prof2.data[i]-self.prof1.data[i])  # L
                lnew = sum([norm(c.prof1.data[i]-c.prof2.data[i]) for c in self._cells])  # L-NEW
                for c in self._cells:
                    c._phi.append(arsinc(1/(bl*l/lnew)))  # B/L NEW
示例#2
0
 def _calcballooning(self):
     xvalues = self.rib1.profile_2d.XValues
     balloon = [self.rib1.ballooning[i] + self.rib2.ballooning[i] for i in xvalues]
     self._phi = [arsinc(1/(1+i)) for i in balloon]
     BasicCell._calcballooning(self)