コード例 #1
0
ファイル: solve_ion_temp.c プロジェクト: annehutter/21cm_grid
void update_ion_temp(recomb_t *thisRecombRates, double dens_old, double dens, double *Xe_old, double *Xe, double *temp_old, double *temp, double z_old, double z, double gamma, double n, double xray_heating, double Hubble)
{
    int temp_index = temp_recomb_index(thisRecombRates, *temp_old);
    double recomb = thisRecombRates->recHII[temp_index];
    
    *Xe = update_ion_smallXe(n*dens, *Xe_old, recomb, z, z_old, gamma, Hubble);
    *temp = update_temp(dens_old, dens, *Xe_old, *Xe, *temp_old, z, z_old, xray_heating, Hubble);
    
//     printf("Xe_old = %e\t Xe = %e\t z_old = %e\t z = %e\n", *Xe_old, *Xe, z_old, 0.5*(z_old+z));
//     if((*Xe)-(*Xe_old) > 0.1)
//     {
//         update_ion_temp(thisRecombRates, dens_old, dens, Xe_old, Xe, temp_old, temp, z_old, 0.5*(z_old+z), gamma, n, xray_heating, Hubble);
//         update_ion_temp(thisRecombRates, dens_old, dens, Xe_old, Xe, temp_old, temp, 0.5*(z_old+z), z, gamma, n, xray_heating, Hubble);
//     }
    
    if((*Xe) > 0.01)
    {
        *Xe = update_ion_constdens(n*dens*CUB(1.+z_old), *Xe_old, recomb, z, z_old, gamma, Hubble);
        *temp = update_temp(dens_old, dens, *Xe_old, *Xe, *temp_old, z, z_old, xray_heating, Hubble);
    }
    
    if(isnan(*Xe))
    {
        printf("NAN alarm! Xe = %e\t Xe_old = %e\t gamma = %e\t n = %e\t dens = %e\t temp = %e\t recomb = %e\t Hubble = %e\n", *Xe, *Xe_old, gamma, n, dens, *temp_old, recomb, Hubble);
    }
    
    Xe_old = Xe;
    temp_old = temp;
}
コード例 #2
0
ファイル: LiquidTransport.cpp プロジェクト: hkmoffat/cantera
 void LiquidTransport::getSpeciesViscosities(doublereal* visc) { 
   update_temp();
   if (!m_visc_temp_ok) {
     updateViscosity_temp();
   }
   copy(m_viscSpecies.begin(), m_viscSpecies.end(), visc); 
 }
コード例 #3
0
Thermostat_None::Thermostat_None(Box& box, double dt):
		Thermostat(box, dt) {
		update_temp();
		dtime(dt);
		SimBox.update_VerletLists();
		SimBox.calculate_forces_verlet();
	}
コード例 #4
0
ファイル: LiquidTransport.cpp プロジェクト: anujg1991/cantera
  void LiquidTransport::getSpeciesDiffusiveMassFluxes(doublereal* const fluxes) {
    int n, k;

    update_temp();
    update_conc();


    getMixDiffCoeffs(DATA_PTR(m_spwork));


    const array_fp& mw = m_thermo->molecularWeights();
    const doublereal* const y  = m_thermo->massFractions();
    const doublereal rhon = m_thermo->molarDensity();
    // Unroll wrt ndim
    vector_fp sum(m_nDim,0.0);
    for (n = 0; n < m_nDim; n++) {
      for (k = 0; k < m_nsp; k++) {
	fluxes[n*m_nsp + k] = -rhon * mw[k] * m_spwork[k] * m_Grad_X[n*m_nsp + k];
	sum[n] += fluxes[n*m_nsp + k];
      }
    }
    // add correction flux to enforce sum to zero
    for (n = 0; n < m_nDim; n++) {
      for (k = 0; k < m_nsp; k++) {
	fluxes[n*m_nsp + k] -= y[k]*sum[n];
      }
    }
  }
コード例 #5
0
ファイル: LiquidTransport.cpp プロジェクト: anujg1991/cantera
  /*
   * The viscosity is computed using the Wilke mixture rule.
   * \f[
   * \mu = \sum_k \frac{\mu_k X_k}{\sum_j \Phi_{k,j} X_j}.
   * \f]
   * Here \f$ \mu_k \f$ is the viscosity of pure species \e k,
   * and 
   * \f[
   * \Phi_{k,j} = \frac{\left[1 
   * + \sqrt{\left(\frac{\mu_k}{\mu_j}\sqrt{\frac{M_j}{M_k}}\right)}\right]^2}
   * {\sqrt{8}\sqrt{1 + M_k/M_j}}
   * \f] 
   * @see updateViscosity_T();
   */ 
  doublereal LiquidTransport::viscosity() {
        
    update_temp();
    update_conc();

    if (m_visc_mix_ok) return m_viscmix;
  
    // update viscSpecies_[] and m_phi[] if necessary
    if (!m_visc_temp_ok) {
      updateViscosity_temp();
    }

    if (!m_visc_conc_ok) {
      updateViscosities_conc();
    }

    if (viscosityModel_ == LVISC_CONSTANT) {
      return m_viscmix;
    } else if (viscosityModel_ == LVISC_MIXTUREAVG) {
      m_viscmix = dot_product(viscSpecies_, m_molefracs);
    } else if (viscosityModel_ == LVISC_WILKES) {
      multiply(m_phi, DATA_PTR(m_molefracs), DATA_PTR(m_spwork));
      m_viscmix = 0.0;
      for (int k = 0; k < m_nsp; k++) {
	m_viscmix += m_molefracs[k] * viscSpecies_[k]/m_spwork[k]; 
      }
    }
    
    return m_viscmix;
  }
コード例 #6
0
ファイル: GeneralInfo.cpp プロジェクト: doremi/pxgui
void GeneralInfo::onTimerEvent()
{
    time_t t;
    char buf[32];
    struct tm *tm;

    t = time(NULL);
    tm = localtime(&t);

    snprintf(buf, sizeof(buf), "%s%02d:%02d:%02d",
             (tm->tm_hour < 12 ? "上午" : "下午"),
             (tm->tm_hour < 12 ? tm->tm_hour : tm->tm_hour - 12),
             tm->tm_min, tm->tm_sec);

    text_data[TIME]->settext(buf);

#ifdef BUILD_FOR_ANDROID
    update_temp();

    update_sysfs(SB_SYSFS_PATH_BATTERY_VOLTAGE, BATTVOL);
    update_sysfs(USB_LIMIT_CURRENT, ILIMITUSB);
    update_sysfs(SB_SYSFS_PATH_BATTERY_CURRENT, BATTCUR);
    update_sysfs(SB_SYSFS_PATH_BATTERY_CAPACITY, BATTCAP);
#endif

    refresh_all();
}
コード例 #7
0
ファイル: os.c プロジェクト: BatteryPower/Reflow_Oven_Kit
void run_tasks()
{
	if(task_flags & task_15ms_flag)
	{

		Page_Event_Handler();
		led_state_machine();
		run_oven_state_machine();
		task_flags &=~task_15ms_flag;

	}

	if(task_flags & task_32ms_flag)
	{
		task_flags &=~task_32ms_flag;
		update_temp();

	}

	if(task_flags & task_62ms_flag)
	{
		if(Get_LED_Timer_Status())
		{
			GLED_Sequence();
			RLED_Sequence();
			BLED_Sequence();
			task_flags &=~task_62ms_flag;
		}

	}


	if(task_flags & task_250ms_flag)
	{

		task_flags &=~task_250ms_flag;
	}

	if(task_flags & task_500ms_flag)
	{
		setColor16(COLOR_16_WHITE);
		get_system_time_string(text_buffer);
		drawString(10,160,text_buffer);
		print_oven_data();
		if(task_flags & graph_update)
		{
			update_graph();
			task_flags &= ~graph_update;
		}

		task_flags &=~task_500ms_flag;
		//RLED_OUT ^= RLED;
	}

}
コード例 #8
0
ファイル: LiquidTransport.cpp プロジェクト: hkmoffat/cantera
  void LiquidTransport::getBinaryDiffCoeffs(size_t ld, doublereal* d) {
    update_temp();

    // if necessary, evaluate the binary diffusion coefficents
    // from the polynomial fits
    if (!m_diff_temp_ok) updateDiff_temp();
    doublereal pres = m_thermo->pressure();

    doublereal rp = 1.0/pres;
    for (size_t i = 0; i < m_nsp; i++)
      for (size_t j = 0; j < m_nsp; j++) {
	d[ld*j + i] = rp * m_bdiff(i,j);
      }
  }
コード例 #9
0
ファイル: Nose_Hoover.cpp プロジェクト: paddy3/StarPolymersMD
Nose_Hoover::Nose_Hoover(Box& box, double dt, double temp, double a_q1, double a_q2 )
    : Thermostat(box, dt),
      TargetTemperature(temp)
    , q1(a_q1)
    , q2(a_q2)
    , xi1(0.0)
    , xi2(0.0)
    , nuxi1(0.0)
    , nuxi2(0.0)
    , g1(0.0)
    , g2(0.0) {
    DeltaTHalf = 0.5*dt;
    DeltaT4 = 0.5*DeltaTHalf;
    DeltaT8 = 0.5*DeltaT4;
    update_temp();
    dtime(dt);
    SimBox.calculate_forces();
}
コード例 #10
0
ファイル: clock.c プロジェクト: hulifox008/arm-clock
int clock_main()
{
    sys_init();
    gpio_init();
    timer0_init();
    lcd_init();

    ds1623_init();

    lcd_fill_rect(0, 0, 240, 320, 0x0000);
    int i = 0;
    for(;;)
    {
        ms_delay(1000);
        update_clock();
        update_temp();
    }
    return 0;
}
コード例 #11
0
ファイル: LiquidTransport.cpp プロジェクト: hkmoffat/cantera
  /*
   * The thermal conductivity is computed from the following mixture rule:
   * \[
   * \lambda = 0.5 \left( \sum_k X_k \lambda_k 
   * + \frac{1}{\sum_k X_k/\lambda_k}\right)
   * \]
   */
  doublereal LiquidTransport::thermalConductivity() {
   
    update_temp();
    update_conc();

    if (!m_cond_temp_ok) {
      updateCond_temp();
    } 
    if (!m_cond_mix_ok) {
      doublereal sum1 = 0.0, sum2 = 0.0;
      for (size_t k = 0; k < m_nsp; k++) {
	sum1 += m_molefracs[k] * m_condSpecies[k];
	sum2 += m_molefracs[k] / m_condSpecies[k];
      }
      m_lambda = 0.5*(sum1 + 1.0/sum2);
      m_cond_mix_ok = true;
    }

    return m_lambda;
  }
コード例 #12
0
ファイル: LiquidTransport.cpp プロジェクト: hkmoffat/cantera
  /*
   * The viscosity is computed using the Wilke mixture rule.
   * \f[
   * \mu = \sum_k \frac{\mu_k X_k}{\sum_j \Phi_{k,j} X_j}.
   * \f]
   * Here \f$ \mu_k \f$ is the viscosity of pure species \e k,
   * and 
   * \f[
   * \Phi_{k,j} = \frac{\left[1 
   * + \sqrt{\left(\frac{\mu_k}{\mu_j}\sqrt{\frac{M_j}{M_k}}\right)}\right]^2}
   * {\sqrt{8}\sqrt{1 + M_k/M_j}}
   * \f] 
   * @see updateViscosity_T();
   */ 
  doublereal LiquidTransport::viscosity() {
        
    update_temp();
    update_conc();

    if (m_visc_mix_ok) return m_viscmix;
  
    // update m_viscSpecies[] if necessary
    if (!m_visc_temp_ok) {
      updateViscosity_temp();
    }

    if (!m_visc_conc_ok) {
      updateViscosities_conc();
    }

    /* We still need to implement interaction parameters */
    /* This constant viscosity model has no input */
    if (viscosityModel_ == LVISC_CONSTANT) {

      err("constant viscosity not implemented for LiquidTransport.");
      //return m_viscmix;

    } else if (viscosityModel_ == LVISC_AVG_ENERGIES) {

      m_viscmix = exp( dot_product(m_logViscSpecies, m_molefracs) );

    } else if (viscosityModel_ == LVISC_INTERACTION) {

      // log_visc_mix = sum_i (X_i log_visc_i) + sum_i sum_j X_i X_j G_ij
      double interaction = dot_product(m_logViscSpecies, m_molefracs);
      for (size_t i = 0; i < m_nsp; i++) 
	for (size_t j = 0; j < i; j++ )
	  interaction += m_molefracs[i] * m_molefracs[j] 
	    * ( m_visc_Sij(i,j) + m_visc_Eij(i,j) / m_temp );
      m_viscmix = exp( interaction );

    }
    
    return m_viscmix;
  }
コード例 #13
0
ファイル: LiquidTransport.cpp プロジェクト: anujg1991/cantera
  /**
   * Mixture-averaged diffusion coefficients [m^2/s]. 
   *
   * For the single species case or the pure fluid case
   * the routine returns the self-diffusion coefficient.
   * This is need to avoid a Nan result in the formula
   * below.
   */
  void LiquidTransport::getMixDiffCoeffs(doublereal* const d) {

    update_temp();
    update_conc();

    // update the binary diffusion coefficients if necessary
    if (!m_diff_temp_ok) {
      updateDiff_temp();
    }
 
    int k, j;
    doublereal mmw = m_thermo->meanMolecularWeight();
    doublereal sumxw_tran = 0.0;
    doublereal sum2;
 
    if (m_nsp == 1) {
      d[0] = m_bdiff(0,0);
    } else {
      for (k = 0; k < m_nsp; k++) {
	sumxw_tran += m_molefracs_tran[k] * m_mw[k];
      }
      for (k = 0; k < m_nsp; k++) {
	sum2 = 0.0;
	for (j = 0; j < m_nsp; j++) {
	  if (j != k) {
	    sum2 += m_molefracs_tran[j] / m_bdiff(j,k);
	  }
	}
	// Because we use m_molefracs_tran, sum2 must be positive definate
	// if (sum2 <= 0.0) {
	//  d[k] = m_bdiff(k,k);
	//  } else {
	d[k] = (sumxw_tran - m_molefracs_tran[k] * m_mw[k])/(mmw * sum2);
	//  }
      }
    }
  }
コード例 #14
0
ファイル: watchface-c.c プロジェクト: gborobio73/watchface-c
static void inbox_received_callback(DictionaryIterator *iterator, void *context) {
  update_temp(iterator, context);

}