コード例 #1
0
ファイル: Analyze.py プロジェクト: philscher/gkc
def getDispersionGyro1(theta, eta, kx, ky, doGyro1=False):

  from PyPPL import PlasmaDispersion, getZero, Gamma0,Gamma1
  from numpy import exp
  kp  = np.sqrt(2.) * theta * ky 
  b   = kx**2 + ky**2
  kyp = ky/kp
  lambda_D2 = 0. 
  G0    = Gamma0(b)
  G0mG1 = Gamma0(b) - Gamma1(b)

  def DR_Gyro(w):
        
      zeta = w / kp
      Z = PlasmaDispersion(zeta) 
     
      if (doGyro1):
        Lambda = lambda_D2 * b + exp(b) * (1. + 1. - G0) 
        R =   - (1. - eta/2. * (1. + b))*kyp * Z \
                - eta * kyp * (zeta + zeta**2 * Z) + zeta * Z + 1. +  Lambda 
      else :
        Lambda = lambda_D2 *b  + (1. - G0) + 1.
        R =   - (1. - eta/2.)*kyp * G0 * Z +   eta * kyp * b * G0mG1 * Z   \
                - eta * kyp * G0 * ( zeta +  zeta**2 * Z) +  zeta * Z * G0  + G0  +  Lambda 
      return R
        
        # Take care of extra pie due to normalization
  if   ky > 0.33 : init = [0.05+0.05j, 0.0+0.0j, 0.1+0.1j]
  elif ky < 0.15 : init = [0.01+0.01j, -0.01+0.01j, 0.0+0.0j]
  else           : init = [0.000+0.04j, 0.002+0.045j, 0.001+0.035j]
  
  return getZero(DR_Gyro, init=init)
コード例 #2
0
ファイル: Analyze.py プロジェクト: zwghit/gkc
def getDispersionGyro1(theta, eta, kx, ky, doGyro1=False):

    from PyPPL import PlasmaDispersion, getZero, Gamma0, Gamma1
    from numpy import exp
    kp = np.sqrt(2.) * theta * ky
    b = kx**2 + ky**2
    kyp = ky / kp
    lambda_D2 = 0.
    G0 = Gamma0(b)
    G0mG1 = Gamma0(b) - Gamma1(b)

    def DR_Gyro(w):

        zeta = w / kp
        Z = PlasmaDispersion(zeta)

        if (doGyro1):
            Lambda = lambda_D2 * b + exp(b) * (1. + 1. - G0)
            R =   - (1. - eta/2. * (1. + b))*kyp * Z \
                    - eta * kyp * (zeta + zeta**2 * Z) + zeta * Z + 1. +  Lambda
        else:
            Lambda = lambda_D2 * b + (1. - G0) + 1.
            R =   - (1. - eta/2.)*kyp * G0 * Z +   eta * kyp * b * G0mG1 * Z   \
                    - eta * kyp * G0 * ( zeta +  zeta**2 * Z) +  zeta * Z * G0  + G0  +  Lambda
        return R

        # Take care of extra pie due to normalization

    if ky > 0.33: init = [0.05 + 0.05j, 0.0 + 0.0j, 0.1 + 0.1j]
    elif ky < 0.15: init = [0.01 + 0.01j, -0.01 + 0.01j, 0.0 + 0.0j]
    else: init = [0.000 + 0.04j, 0.002 + 0.045j, 0.001 + 0.035j]

    return getZero(DR_Gyro, init=init)
コード例 #3
0
def getDispersion(ky, parameters):

    from PyPPL import PlasmaDispersion, getZero, Gamma0, Gamma1
    from numpy import exp

    mode = parameters['mode']
    m_ie = parameters['m_ie']
    tau = parameters['tau']
    kx = parameters['kx']
    kp = parameters['kp']

    beta = parameters['beta']
    lambda_D = parameters['lambdaD']
    rhoLn = parameters['rhoLn']
    rhoLT = parameters['rhoLT']

    def DR_Smoly(w):

        k_ortho2 = kx**2 + ky**2
        mass_e = 1. / m_ie

        # ion  diamagnetic frequency
        w_ni = -ky / kp * rhoLn * 0.5
        w_Ti = -ky / kp * rhoLT * 0.5
        s_i = w
        b_i = (kx**2 + ky**2) / 2.

        w_ni = -ky / kp * rhoLn
        w_Ti = -ky / kp * rhoLT
        s_i = w / sqrt(2.)
        b_i = (kx**2 + ky**2)

        #electron
        w_ne = ky / kp * rhoLn
        w_Te = ky / kp * rhoLT
        s_e = w / sqrt(2. / mass_e)
        b_e = (kx**2 + ky**2) * mass_e

        # Plasma skin depth
        delta = tau / (beta) / m_ie  #sqrt(m_ie)

        ######################## Dispersion relation for gyrokinetic EM mode

        # settings for the ions

        Gamma_0i = Gamma0(b_i)
        Gamma_1i = Gamma1(b_i)
        Z_i = PlasmaDispersion(s_i)

        l_i = 1. - (1. - w_ni / w) * Gamma_0i - w_Ti / w * (Gamma_0i -
                                                            Gamma_1i) * b_i

        D_i = (1. - w_ni/w) * ( 1. + s_i * Z_i) * Gamma_0i  + w_Ti/w * s_i * \
               (0.5 * Z_i - s_i - s_i**2 * Z_i ) * Gamma_0i \
               + w_Ti/w *  ( 1. + s_i * Z_i) * ( Gamma_0i - Gamma_1i) * b_i

        # settings for the electrons
        Gamma_0e = Gamma0(b_e)
        Gamma_1e = Gamma1(b_e)
        Z_e = PlasmaDispersion(s_e)

        l_e = 1. - (1. - w_ne / w) * Gamma_0e - w_Te / w * (Gamma_0e -
                                                            Gamma_1e) * b_e

        D_e = (1. - w_ne/w) * ( 1. + s_e * Z_e) * Gamma_0e  + w_Te/w * s_e * \
             (0.5 * Z_e - s_e - s_e**2 * Z_e ) * Gamma_0e \
             + w_Te/w * ( 1. + s_e * Z_e) * ( Gamma_0e - Gamma_1e) * b_e

        #############################################################
        # Standard Dispersion relation
        if (mode == "EM"):
            d =    k_ortho2 * delta**2 * (l_i * tau + l_e + D_i * tau + D_e ) - 2 * s_e**2 * (D_i * tau + D_e) * (l_i * tau + l_e ) \
                 + k_ortho2 * lambda_D**2 * ( k_ortho2 * delta**2 - 2 * s_e**2 * (D_i * tau + D_e))

        # approximation for electrons
        elif (mode == "ETG"):
            d = 1. + l_e + D_e + lambda_D**2 * k_ortho2

        # bad charge is wrong sign
        elif (mode == "ITG"):
            d = 1. + l_i + D_i + lambda_D**2 * k_ortho2
        # simplified ITG dispersion relation
        # approximation for electrons
        elif (mode == "ITGe"):
            d = l_e + D_e + tau * (l_i + D_i)
        else:
            raise NameError('No such Dispersion Relation')

        return d

    # Take care of extra pie due to normalization
    if (mode == "EM"):
        #init, solver =  (-0.01 +.005j, -0.015 + 0.008j, 0.008 + 0.002j), 'muller'
        init, solver = (-0.1 + .05j, -0.2 + 0.08j, -0.00 + 0.02j), 'muller'
        if ky < 2.:
            init, solver = (0.02 - .02j, 0.04 + 0.04j, 0.01 - 0.0j), 'muller'
        else:
            #goes init, solver =  ( -0.4 - .012j,  -0.1 - 0.03j,  -0.2 - 0.012j), 'muller'
            init, solver = (-0.4 - .012j, -0.1 - 0.03j,
                            -0.2 - 0.012j), 'muller'
    else:
        init, solver = (0.01 + .0026j, 0.02 + 0.03j, 0.015 + 0.01j), 'muller'

    #init, solver =  0.01 + .03j, 'muller'

    return getZero(DR_Smoly, init=init, solver=solver)
コード例 #4
0
ファイル: Analyze.py プロジェクト: philscher/gkc
def getDispersion(ky, parameters):  
  
  from PyPPL import PlasmaDispersion, getZero, Gamma0,Gamma1
  from numpy import exp

  mode     = parameters['mode']
  m_ie     = parameters['m_ie']
  tau      = parameters['tau']
  kx       = parameters['kx']
  kp       = parameters['kp']
    
  
  beta     = parameters['beta']
  lambda_D = parameters['lambdaD']
  rhoLn    = parameters['rhoLn']
  rhoLT    = parameters['rhoLT']

  def DR_Smoly(w):

    k_ortho2 = kx**2 + ky**2
    mass_e   = 1./m_ie

    # ion  diamagnetic frequency
    w_ni    = - ky/kp * rhoLn * 0.5
    w_Ti    = - ky/kp * rhoLT * 0.5 
    s_i     = w 
    b_i     = (kx**2 + ky**2)/ 2.
    
    w_ni    = - ky/kp * rhoLn 
    w_Ti    = - ky/kp * rhoLT 
    s_i     = w / sqrt(2.) 
    b_i     = (kx**2 + ky**2)
        
    #electron
    w_ne   = ky/kp * rhoLn 
    w_Te   = ky/kp * rhoLT
    s_e    =  w / sqrt(2./mass_e)  
    b_e    = (kx**2 + ky**2) * mass_e
        
    # Plasma skin depth
    delta =  tau/(beta) / m_ie #sqrt(m_ie)
    
    ######################## Dispersion relation for gyrokinetic EM mode
    
    # settings for the ions
    
    Gamma_0i = Gamma0(b_i) 
    Gamma_1i = Gamma1(b_i)
    Z_i      = PlasmaDispersion(s_i)
   
    
    l_i = 1. - (1. - w_ni / w) * Gamma_0i - w_Ti/w * (Gamma_0i - Gamma_1i ) * b_i
    
    D_i = (1. - w_ni/w) * ( 1. + s_i * Z_i) * Gamma_0i  + w_Ti/w * s_i * \
           (0.5 * Z_i - s_i - s_i**2 * Z_i ) * Gamma_0i \
           + w_Ti/w *  ( 1. + s_i * Z_i) * ( Gamma_0i - Gamma_1i) * b_i

    # settings for the electrons
    Gamma_0e = Gamma0(b_e) 
    Gamma_1e = Gamma1(b_e) 
    Z_e      = PlasmaDispersion(s_e) 
    
    l_e = 1. - (1. - w_ne / w) * Gamma_0e - w_Te/w * (Gamma_0e - Gamma_1e ) * b_e
    
    D_e = (1. - w_ne/w) * ( 1. + s_e * Z_e) * Gamma_0e  + w_Te/w * s_e * \
         (0.5 * Z_e - s_e - s_e**2 * Z_e ) * Gamma_0e \
         + w_Te/w * ( 1. + s_e * Z_e) * ( Gamma_0e - Gamma_1e) * b_e


    #############################################################
    # Standard Dispersion relation
    if(mode == "EM"):
            d =    k_ortho2 * delta**2 * (l_i * tau + l_e + D_i * tau + D_e ) - 2 * s_e**2 * (D_i * tau + D_e) * (l_i * tau + l_e ) \
                 + k_ortho2 * lambda_D**2 * ( k_ortho2 * delta**2 - 2 * s_e**2 * (D_i * tau + D_e)) 
    
        # approximation for electrons
    elif(mode == "ETG"):
            d =  1. + l_e + D_e + lambda_D**2 * k_ortho2 
   
    # bad charge is wrong sign
    elif(mode == "ITG"):
            d =  1. + l_i + D_i + lambda_D**2 * k_ortho2 
    # simplified ITG dispersion relation
    # approximation for electrons
    elif(mode == "ITGe"):
            d =  l_e + D_e + tau * (l_i + D_i) 
    else: 
         raise NameError('No such Dispersion Relation')
   
    return d
  
  # Take care of extra pie due to normalization
  if (mode == "EM"):
    #init, solver =  (-0.01 +.005j, -0.015 + 0.008j, 0.008 + 0.002j), 'muller'
    init, solver =  (-0.1 +.05j, -0.2 + 0.08j, -0.00 + 0.02j), 'muller'
    if ky < 2.:
         init, solver =  ( 0.02 -.02j,  0.04 + 0.04j,  0.01 - 0.0j), 'muller'
    else : 
         #goes init, solver =  ( -0.4 - .012j,  -0.1 - 0.03j,  -0.2 - 0.012j), 'muller'
         init, solver =  ( -0.4 - .012j,  -0.1 - 0.03j,  -0.2 - 0.012j), 'muller'
  else : 
    init, solver =  (0.01 +.0026j, 0.02 + 0.03j, 0.015 + 0.01j), 'muller'
  
  #init, solver =  0.01 + .03j, 'muller'
  
  return getZero(DR_Smoly, init=init, solver=solver)