import java.util.*; import java.io.*; import static java.lang.Math.*; /** * Модель кристаллизации переохлажденных капель водных растворов
* Cristallization Model (CM)

* Источник:
Чукин В.В., Платонова А.С. Кристаллизация переохлажденных капель водных растворов // Естественные и технические науки. - 2009. - №4. - С.231-236.

* Лицензия:
GNU General Public License 3

* Авторы:
* Чукин Владимир Владимирович (chukin@rshu.ru)
* Платонова Анастасия Сергеевна (n-l-s@mail.ru)

* Версия:
2009-12-10 */ public class CM { /** Масса молекулы воды, кг */ public static final double mH2O = 2.99152E-26; /** Постоянная Больцмана, Дж/(кг*К) */ public static final double k = 1.380662E-23; /** Постоянная Планка, Дж*с */ public static final double h = 6.626176E-34; /** Температура плавления льда. * @param aw активность воды * @return температура плавления льда, К */ public static double meltingTemperature(double aw) { double T = 273.16 + 103.6*log(aw) + 15.613*pow(log(aw),2) + 54.118*pow(log(aw),3); if(T>0.0) return T; else return 0.0; } /** Равновесная активность воды. * @param T температура, К * @return равновесное значение активности воды */ public static double equalWaterActivity(double T) { return exp((210368+131.48*T-3323730/T-41729.1*log(T))/(8.31441*T)); } /** Эквивалентная температура * @param T температура, К * @param aw активность воды * @return эквивалентная температура, К */ public static double equalTemperature(double T, double aw) { double Aw = equalWaterActivity(T); double T1 = 273.16 + 103.6*log(1-aw+Aw) + 15.613*pow(log(1-aw+Aw),2) + 54.118*pow(log(1-aw+Aw),3); if(T1>273.15) return 273.15; return T1; } /** Скорость гомогенного образования ледяных ядер. * @param T температура, К * @param aw активность воды * @return скорость гомогенного образования ледяных ядер, м-3с-1 */ public static double getHomogeneousIceNucleationRate(double T, double aw) { T = equalTemperature(T, aw); double rhoWater = 1000.0; double rhoIce = 956.58-0.144886*T; double sigma = 0.00025*T-0.0397875; double Lwi = 6.7E-21; //(-1004209.186+7766.15*T-10.5*T*T)*mH2O; double T0 = 273.16; double J0 = 2*pow(rhoWater/mH2O,2.0/3.0)*rhoWater/rhoIce*k*T/h*pow(sigma/k/T,0.5); double rc = 2.0*sigma*mH2O/(rhoIce*Lwi*log(T0/T)); double w = 1.0; double dGmax = 4.0*PI*rc*rc*sigma*w/3.0; double dGact = 3.6E-20 - 7.3E-22*(T-T0); return J0*exp(-dGmax/k/T)*exp(-dGact/k/T); } /** Температура гомогенной кристаллизации капель. * @param r радиус капли раствора, м * @param aw активность воды * @param dTdt скорость охлаждения, К/с * @return температура гомогенной кристаллизации, К */ public static double homogeneousTemperature(double r, double aw, double dTdt) { int i; int N = 27316; double T = 273.16; double J_hom; double dT = 0.01; double P = 0.0; for(i=0;i=0.5) break; } return T; } /** Скорость гетерогенного образования ледяных ядер. * @param T температура, К * @param aw активность воды * @param alpha удельная поверхностная энергия, Дж/м2 * @return скорость гетерогенного образования ледяных ядер, м-2с-1 */ public static double getHeterogeneousIceNucleationRate(double T, double aw, double alpha) { if(aw!=1.0) T = equalTemperature(T, aw); double rhoWater = 1000.0; double rhoIce = 956.58-0.144886*T; double sigma = 0.00025*T-0.0397875; double Lwi = 7E-23*T-1E-20; //6.7E-21; //(-1004209.186+7766.15*T-10.5*T*T)*mH2O; double T0 = 273.16; double J0 = pow(rhoWater/mH2O,2.0/3.0)*k*T/h; // double rc = 2.0*sigma*mH2O/(rhoIce*Lwi*log(T0/T)); double rc = alpha*pow(mH2O/rhoWater, 2.0/3.0)/(Lwi*log(T0/T)); double dGmax = PI*rc*alpha; double dGact = 3.6E-20 - 7.3E-22*(T-T0); // System.err.printf(Locale.US, "*** %.2f\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\r\n", T, J0, Lwi, rc, dGmax, dGact); return J0*exp(-dGmax/k/T)*exp(-dGact/k/T); } /** Температура гетерогенной кристаллизации капель. * @param r радиус капли раствора, м * @param aw активность воды * @param Na концентрация нерастворимых частиц в капле раствора, м-3 * @param alpha удельная поверхностная энергия, Дж/м2 * @param dTdt скорость охлаждения, К/с * @return температура гетерогенной кристаллизации, К */ public static double heterogeneousTemperature(double r, double aw, double ra, double Na, double alpha, double dTdt) { int i; int N = 27316; double T = 273.16; double J_het; double dT = 0.01; double P = 0.0; for(i=0;i=0.5) break; } return T; } }