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
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)