Exemplo n.º 1
0
# Position vectors
Zeta01=smarr.MutableDenseNDimArray([zeta01_x,zeta01_y])
Zeta02=smarr.MutableDenseNDimArray([zeta02_x,zeta02_y])

# define order of derivation
ZetaAllList=[zeta01_x,zeta02_x,zeta01_y,zeta02_y]

# Delta vector (and derivative)
Dzeta=Zeta02-Zeta01
Dzeta_unit=Dzeta/sm.sqrt(linfunc.scalar_product(Dzeta,Dzeta))
#Dzeta_unit=Dzeta_unit.simplify()

# Normal
Norm=linfunc.matrix_product(Kskew2D,Dzeta_unit)
Norm=linfunc.simplify(Norm)

### check norm
assert linfunc.scalar_product(Norm,Dzeta).simplify()==0, 'Norm is wrong'
assert linfunc.scalar_product(Norm,Dzeta_unit).simplify()==0, 'Norm is wrong'
assert linfunc.scalar_product(Norm,Norm).simplify()==1, 'Normal is not unit length'

# Normal velocity
Vperp=linfunc.scalar_product(Norm,V0)



### Derivatives / with verification
# derX[i,j] is the derivative of X[i] w.r.t ZetaAllList[j]

# Normal
Exemplo n.º 2
0
R02 = ZetaCB - Zeta02


# Velocity induced by a segment
def Vind_segment(R, cf, g):
    BiotTerm = cf * g * R / linfunc.scalar_product(R, R)
    Qind = linfunc.matrix_product(Kskew2D, BiotTerm)
    return linfunc.simplify(Qind)


# Full vortex velocity
Qind_vortex = Vind_segment(R01, CF, Gamma) - Vind_segment(R02, CF, Gamma)

# Joukovski force
Fjouk = -gamma_s * linfunc.matrix_product(Kskew2D, Qind_vortex)
Fjouk = linfunc.simplify(Fjouk)

### Derivative
Der = sm.derive_by_array(Fjouk, ZetaAllList).transpose()  # 2x6
#Der=linfunc.simplify(Der)

### Verification
BiotTerm_vortex = +CF*Gamma*R01/linfunc.scalar_product(R01,R01) \
         -CF*Gamma*R02/linfunc.scalar_product(R02,R02)
derBiotTerm = sm.derive_by_array(BiotTerm_vortex, ZetaAllList).transpose()
derQind = linfunc.matrix_product(Kskew2D, derBiotTerm)
Der2 = -gamma_s * linfunc.matrix_product(Kskew2D, derQind)

check = linfunc.simplify(Der - Der2)
assert linfunc.scalar_product(check,
                              check) == 0, 'Derivatives are not the same'
Exemplo n.º 3
0
def Vind_segment(R, cf, g):
    BiotTerm = cf * g * R / linfunc.scalar_product(R, R)
    Qind = linfunc.matrix_product(Kskew2D, BiotTerm)
    return linfunc.simplify(Qind)
Exemplo n.º 4
0
# Position vectors
Zeta01=smarr.MutableDenseNDimArray([zeta01_x,zeta01_y])
Zeta02=smarr.MutableDenseNDimArray([zeta02_x,zeta02_y])

# define order of derivation
ZetaAllList=[zeta01_x,zeta02_x,zeta01_y,zeta02_y]

# Delta vector (and derivative)
Dzeta=Zeta02-Zeta01
Area=sm.sqrt(linfunc.scalar_product(Dzeta,Dzeta))
Dzeta_unit=Dzeta/Area

# Normal
Norm=linfunc.matrix_product(Kskew2D,Dzeta_unit)
Norm=linfunc.simplify(Norm)

### check norm
assert linfunc.scalar_product(Norm,Dzeta).simplify()==0, 'Norm is wrong'
assert linfunc.scalar_product(Norm,Dzeta_unit).simplify()==0, 'Norm is wrong'
assert linfunc.scalar_product(Norm,Norm).simplify()==1, 'Normal is not unit length'


# Normal by Area derivative
NA=Area*Norm
derNA=sm.derive_by_array(NA,ZetaAllList).transpose()
derNA=linfunc.simplify(derNA)

# Verify Normal by Area derivative
derDzeta=sm.derive_by_array(Dzeta,ZetaAllList).transpose()
derDzeta=linfunc.simplify(derDzeta)