mirror of
https://github.com/Cantera/cantera.git
synced 2025-02-25 18:55:29 -06:00
*** empty log message ***
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#define DLL_IMPORT __declspec(dllimport)
|
||||
#define DLL_EXPORT __declspec(dllexport)
|
||||
#pragma warning(disable:4786)
|
||||
#pragma warning(disable:4267)
|
||||
#pragma warning(disable:4503)
|
||||
#else
|
||||
#define DLL_EXPORT
|
||||
|
||||
@@ -978,7 +978,7 @@ extern "C" {
|
||||
|
||||
int DLL_EXPORT showCanteraErrors() {
|
||||
showErrors();
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DLL_EXPORT addCanteraDirectory(int buflen, char* buf) {
|
||||
|
||||
@@ -1,214 +1,219 @@
|
||||
//
|
||||
#ifdef WIN32
|
||||
#pragma warning(disable:4786)
|
||||
/*Warning messages that are identified as Warning C4786: are created
|
||||
when MSVC generates extremely long names that it uses for debugging
|
||||
purposes. The long names are generated by the template expansion
|
||||
process and the warning messages normally can be ignored. Since these
|
||||
warnings tend to hide more interesting warning/error messages, you may
|
||||
wish to suppress the warning*/
|
||||
when MSVC generates extremely long names that it uses for debugging
|
||||
purposes. The long names are generated by the template expansion
|
||||
process and the warning messages normally can be ignored. Since these
|
||||
warnings tend to hide more interesting warning/error messages, you may
|
||||
wish to suppress the warning*/
|
||||
|
||||
// precompiled headers
|
||||
#include "stdafx.h"
|
||||
|
||||
#endif
|
||||
|
||||
#include <cantera/Cantera.h>
|
||||
#include <cantera/IdealGasMix.h>
|
||||
#include <cantera/transport.h>
|
||||
#include <cantera/equilibrium.h>
|
||||
#include <cantera/onedim.h>
|
||||
|
||||
// include additional header files here if needed
|
||||
#ifdef WIN32
|
||||
#include <conio.h>
|
||||
#endif
|
||||
void demo() {
|
||||
try {
|
||||
int i;
|
||||
IdealGasMix gas("gri30.cti","gri30_mix");
|
||||
|
||||
doublereal temp = 300.0; // K
|
||||
doublereal pressure = 1.0*OneAtm; //atm
|
||||
doublereal uin=0.3; //m/sec
|
||||
|
||||
gas.setState_TPX(temp, pressure, "CH4:1.0, O2:2.0, N2:7.52");
|
||||
int nsp = gas.nSpecies();
|
||||
|
||||
vector_fp x;
|
||||
x.resize(nsp);
|
||||
|
||||
doublereal phi=1.1;
|
||||
cout << "Enter phi: ";
|
||||
cin >> phi;
|
||||
cout << endl;
|
||||
|
||||
doublereal C_atoms=1.0;
|
||||
doublereal H_atoms=4.0;
|
||||
doublereal ax=C_atoms+H_atoms/4.0;
|
||||
doublereal fa_stoic=1.0/(4.76*ax);
|
||||
for(int k=0;k<nsp;k++){
|
||||
if(k==gas.speciesIndex("CH4")){ x[k]=1.0; }
|
||||
else if(k==gas.speciesIndex("O2")){ x[k]=0.21/phi/fa_stoic; }
|
||||
else if(k==gas.speciesIndex("N2")){ x[k]=0.79/phi/fa_stoic; }
|
||||
else{ x[k]=0.0; }
|
||||
}
|
||||
gas.setState_TPX(temp,pressure,x.begin());
|
||||
doublereal rho_in=gas.density();
|
||||
|
||||
double *yin=new double[nsp];
|
||||
gas.getMassFractions(yin);
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
try {
|
||||
int i;
|
||||
// your code goes here
|
||||
IdealGasMix gas("gri30.cti","gri30_mix");
|
||||
//IdealGasMix gas("temp_phi_1.0_sp.cti","gas");
|
||||
|
||||
doublereal temp = 300.0; // K
|
||||
doublereal pressure = 1.0*OneAtm; //atm
|
||||
doublereal uin=0.3; //m/sec
|
||||
|
||||
gas.setState_TPX(temp, pressure, "CH4:1.0, O2:2.0, N2:7.52");
|
||||
int nsp = gas.nSpecies();
|
||||
|
||||
vector_fp x;
|
||||
x.resize(nsp);
|
||||
|
||||
doublereal phi=1.1;
|
||||
cout << "Enter phi: ";
|
||||
cin >> phi;
|
||||
cout << endl;
|
||||
|
||||
doublereal C_atoms=1.0;
|
||||
doublereal H_atoms=4.0;
|
||||
doublereal ax=C_atoms+H_atoms/4.0;
|
||||
doublereal fa_stoic=1.0/(4.76*ax);
|
||||
for(int k=0;k<nsp;k++){
|
||||
if(k==gas.speciesIndex("CH4")){ x[k]=1.0; }
|
||||
else if(k==gas.speciesIndex("O2")){ x[k]=0.21/phi/fa_stoic; }
|
||||
else if(k==gas.speciesIndex("N2")){ x[k]=0.79/phi/fa_stoic; }
|
||||
else{ x[k]=0.0;
|
||||
}
|
||||
}
|
||||
gas.setState_TPX(temp,pressure,x.begin());
|
||||
doublereal rho_in=gas.density();
|
||||
|
||||
//vector<doublereal> yin;
|
||||
double *yin=new double[nsp];
|
||||
gas.getMassFractions(yin);
|
||||
|
||||
try {
|
||||
equilibrate(gas,HP);
|
||||
}
|
||||
catch (CanteraError) {
|
||||
showErrors(cout);
|
||||
}
|
||||
double *yout=new double[nsp];
|
||||
gas.getMassFractions(yout);
|
||||
doublereal rho_out = gas.density();
|
||||
doublereal Tad=gas.temperature();
|
||||
cout << phi<<' '<<Tad<<endl;
|
||||
|
||||
double Tin=temp;
|
||||
double Tout=Tad;
|
||||
double breakpt=0.2;
|
||||
//============= build each domain ========================
|
||||
|
||||
|
||||
//-------- step 1: create the stagnation flow -------------
|
||||
|
||||
AxiStagnFlow flow(&gas);
|
||||
|
||||
// create an initial grid
|
||||
//doublereal z[] = {0.0, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009,0.0095, 0.01};
|
||||
int nz=5;
|
||||
doublereal lz=0.02;
|
||||
doublereal *z=new double[nz+1];
|
||||
doublereal dz=lz/((doublereal)(nz-1));
|
||||
for(int iz=0;iz<nz;iz++){
|
||||
z[iz]=((doublereal)iz)*dz;
|
||||
}
|
||||
//add one node onto end of domain to help with zero gradient at outlet
|
||||
z[nz]=lz*1.05;
|
||||
nz++;
|
||||
|
||||
flow.setupGrid(nz, z);
|
||||
|
||||
// specify the objects to use to compute kinetic rates and
|
||||
// transport properties
|
||||
|
||||
Transport* tr = newTransportMgr("Mix", &gas);
|
||||
flow.setTransport(*tr);
|
||||
flow.setKinetics(gas);
|
||||
flow.setPressure(pressure);
|
||||
|
||||
//------- step 2: create the inlet -----------------------
|
||||
|
||||
Inlet1D inlet;
|
||||
|
||||
inlet.setMoleFractions(x.begin());
|
||||
doublereal mdot=uin*rho_in;
|
||||
inlet.setMdot(mdot);
|
||||
inlet.setTemperature(temp);
|
||||
|
||||
|
||||
//------- step 3: create the outlet ---------------------
|
||||
|
||||
Outlet1D outlet;
|
||||
|
||||
//=================== create the container and insert the domains =====
|
||||
|
||||
vector<Domain1D*> domains;
|
||||
domains.push_back(&inlet);
|
||||
domains.push_back(&flow);
|
||||
domains.push_back(&outlet);
|
||||
|
||||
OneDim flamesim(domains);
|
||||
|
||||
Sim1D flame(domains);
|
||||
|
||||
//----------- Supply initial guess----------------------
|
||||
|
||||
vector_fp locs;
|
||||
vector_fp value;
|
||||
|
||||
locs.resize(3);
|
||||
value.resize(3);
|
||||
|
||||
//ramp values from inlet to adiabatic flame conditions
|
||||
// over 70% of domain and then level off at equilibrium
|
||||
double z1=0.7;
|
||||
|
||||
double uout;
|
||||
uout=inlet.mdot()/rho_out;
|
||||
uin=inlet.mdot()/rho_in;
|
||||
locs[0]=0.0; locs[1]=z1; locs[2]=1.0;
|
||||
value[0]=uin; value[1]=uout; value[2]=uout;
|
||||
flame.setInitialGuess("u",locs,value);
|
||||
|
||||
value[0]=temp; value[1]=Tad; value[2]=Tad;
|
||||
flame.setInitialGuess("T",locs,value);
|
||||
|
||||
for(i=0;i<nsp;i++){
|
||||
value[0]=yin[i]; value[1]=yout[i]; value[2]=yout[i];
|
||||
flame.setInitialGuess(gas.speciesName(i),locs,value);
|
||||
}
|
||||
|
||||
inlet.setMoleFractions(x.begin());
|
||||
inlet.setMdot(mdot);
|
||||
inlet.setTemperature(temp);
|
||||
|
||||
flame.showSolution();
|
||||
|
||||
int flowdomain=1;
|
||||
double ratio=10.0;
|
||||
double slope=0.2;
|
||||
double curve=0.02;
|
||||
double prune=-0.00005;
|
||||
|
||||
flame.setRefineCriteria(flowdomain,ratio,slope,curve,prune);
|
||||
|
||||
int loglevel=1;
|
||||
bool refine_grid = true;
|
||||
|
||||
/* Solve species*/
|
||||
flow.fixTemperature();
|
||||
refine_grid=false;
|
||||
flame.solve(loglevel,refine_grid);
|
||||
|
||||
/* Solve freely propagating flame*/
|
||||
/* Linearally interpolate to find location where this temperature would exist
|
||||
temperature at this location will then be fixed for remainder of calculation.*/
|
||||
|
||||
flow.solveEnergyEqn();
|
||||
refine_grid=true;
|
||||
flame.setFixedTemperature(900.0);
|
||||
flame.setAdiabaticFlame();
|
||||
flame.solve(loglevel=1,refine_grid);
|
||||
|
||||
int np=flow.nPoints();
|
||||
vector<doublereal> zvec,Tvec,COvec,CO2vec,Uvec;
|
||||
|
||||
printf("\n%9s\t%8s\t%5s\t%7s\n","z (m)", "T (K)", "U (m/s)", "Y(CO)");
|
||||
for(int n=0;n<np;n++){
|
||||
Tvec.push_back(flame.value(flowdomain,flow.componentIndex("T"),n));
|
||||
COvec.push_back(flame.value(flowdomain,flow.componentIndex("CO"),n));
|
||||
CO2vec.push_back(flame.value(flowdomain,flow.componentIndex("CO2"),n));
|
||||
Uvec.push_back(flame.value(flowdomain,flow.componentIndex("u"),n));
|
||||
zvec.push_back(flow.grid(n));
|
||||
printf("%9.6f\t%8.3f\t%5.3f\t%7.5f\n",flow.grid(n),Tvec[n],Uvec[n],COvec[n]);
|
||||
}
|
||||
|
||||
cout << endl<<"Adiabatic flame temperature from equilibrium is: "<<Tad<<endl;
|
||||
cout << "Flame speed for phi="<<phi<<" is "<<Uvec[0]<<" m/s."<<endl;
|
||||
|
||||
return 0;
|
||||
equilibrate(gas,HP);
|
||||
}
|
||||
catch (CanteraError) {
|
||||
showErrors(cerr);
|
||||
cerr << "program terminating." << endl;
|
||||
return -1;
|
||||
showErrors(cout);
|
||||
}
|
||||
double *yout=new double[nsp];
|
||||
gas.getMassFractions(yout);
|
||||
doublereal rho_out = gas.density();
|
||||
doublereal Tad=gas.temperature();
|
||||
cout << phi<<' '<<Tad<<endl;
|
||||
|
||||
double Tin=temp;
|
||||
double Tout=Tad;
|
||||
double breakpt=0.2;
|
||||
|
||||
//============= build each domain ========================
|
||||
|
||||
|
||||
//-------- step 1: create the flow -------------
|
||||
|
||||
AxiStagnFlow flow(&gas);
|
||||
|
||||
// create an initial grid
|
||||
int nz=5;
|
||||
doublereal lz=0.02;
|
||||
doublereal *z=new double[nz+1];
|
||||
doublereal dz=lz/((doublereal)(nz-1));
|
||||
for(int iz=0;iz<nz;iz++){
|
||||
z[iz]=((doublereal)iz)*dz;
|
||||
}
|
||||
//add one node onto end of domain to help with zero gradient at outlet
|
||||
z[nz]=lz*1.05;
|
||||
nz++;
|
||||
|
||||
flow.setupGrid(nz, z);
|
||||
|
||||
// specify the objects to use to compute kinetic rates and
|
||||
// transport properties
|
||||
|
||||
Transport* tr = newTransportMgr("Mix", &gas);
|
||||
flow.setTransport(*tr);
|
||||
flow.setKinetics(gas);
|
||||
flow.setPressure(pressure);
|
||||
|
||||
//------- step 2: create the inlet -----------------------
|
||||
|
||||
Inlet1D inlet;
|
||||
|
||||
inlet.setMoleFractions(x.begin());
|
||||
doublereal mdot=uin*rho_in;
|
||||
inlet.setMdot(mdot);
|
||||
inlet.setTemperature(temp);
|
||||
|
||||
|
||||
//------- step 3: create the outlet ---------------------
|
||||
|
||||
Outlet1D outlet;
|
||||
|
||||
//=================== create the container and insert the domains =====
|
||||
|
||||
vector<Domain1D*> domains;
|
||||
domains.push_back(&inlet);
|
||||
domains.push_back(&flow);
|
||||
domains.push_back(&outlet);
|
||||
|
||||
OneDim flamesim(domains);
|
||||
|
||||
Sim1D flame(domains);
|
||||
|
||||
//----------- Supply initial guess----------------------
|
||||
|
||||
vector_fp locs;
|
||||
vector_fp value;
|
||||
|
||||
locs.resize(3);
|
||||
value.resize(3);
|
||||
|
||||
//ramp values from inlet to adiabatic flame conditions
|
||||
// over 70% of domain and then level off at equilibrium
|
||||
double z1=0.7;
|
||||
|
||||
double uout;
|
||||
uout=inlet.mdot()/rho_out;
|
||||
uin=inlet.mdot()/rho_in;
|
||||
locs[0]=0.0; locs[1]=z1; locs[2]=1.0;
|
||||
value[0]=uin; value[1]=uout; value[2]=uout;
|
||||
flame.setInitialGuess("u",locs,value);
|
||||
|
||||
value[0]=temp; value[1]=Tad; value[2]=Tad;
|
||||
flame.setInitialGuess("T",locs,value);
|
||||
|
||||
for(i=0;i<nsp;i++){
|
||||
value[0]=yin[i]; value[1]=yout[i]; value[2]=yout[i];
|
||||
flame.setInitialGuess(gas.speciesName(i),locs,value);
|
||||
}
|
||||
|
||||
inlet.setMoleFractions(x.begin());
|
||||
inlet.setMdot(mdot);
|
||||
inlet.setTemperature(temp);
|
||||
|
||||
flame.showSolution();
|
||||
|
||||
int flowdomain=1;
|
||||
double ratio=10.0;
|
||||
double slope=0.2;
|
||||
double curve=0.02;
|
||||
double prune=-0.00005;
|
||||
|
||||
flame.setRefineCriteria(flowdomain,ratio,slope,curve,prune);
|
||||
|
||||
int loglevel=1;
|
||||
bool refine_grid = true;
|
||||
|
||||
/* Solve species*/
|
||||
flow.fixTemperature();
|
||||
refine_grid=false;
|
||||
flame.solve(loglevel,refine_grid);
|
||||
|
||||
/* Solve freely propagating flame*/
|
||||
|
||||
/* Linearally interpolate to find location where this
|
||||
temperature would exist. The temperature at this
|
||||
location will then be fixed for remainder of
|
||||
calculation.*/
|
||||
|
||||
flow.solveEnergyEqn();
|
||||
refine_grid=true;
|
||||
flame.setFixedTemperature(900.0);
|
||||
flame.setAdiabaticFlame();
|
||||
flame.solve(loglevel=1,refine_grid);
|
||||
|
||||
int np=flow.nPoints();
|
||||
vector<doublereal> zvec,Tvec,COvec,CO2vec,Uvec;
|
||||
|
||||
printf("\n%9s\t%8s\t%5s\t%7s\n","z (m)", "T (K)", "U (m/s)", "Y(CO)");
|
||||
for(int n=0;n<np;n++){
|
||||
Tvec.push_back(flame.value(flowdomain,flow.componentIndex("T"),n));
|
||||
COvec.push_back(flame.value(flowdomain,flow.componentIndex("CO"),n));
|
||||
CO2vec.push_back(flame.value(flowdomain,flow.componentIndex("CO2"),n));
|
||||
Uvec.push_back(flame.value(flowdomain,flow.componentIndex("u"),n));
|
||||
zvec.push_back(flow.grid(n));
|
||||
printf("%9.6f\t%8.3f\t%5.3f\t%7.5f\n",flow.grid(n),Tvec[n],Uvec[n],COvec[n]);
|
||||
}
|
||||
|
||||
cout << endl<<"Adiabatic flame temperature from equilibrium is: "<<Tad<<endl;
|
||||
cout << "Flame speed for phi="<<phi<<" is "<<Uvec[0]<<" m/s."<<endl;
|
||||
|
||||
// return 0;
|
||||
}
|
||||
catch (CanteraError) {
|
||||
showErrors(cerr);
|
||||
cerr << "program terminating." << endl;
|
||||
//return -1;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef WIN32
|
||||
int _tmain(int argc, _TCHAR* argv[])
|
||||
{
|
||||
return demo();
|
||||
}
|
||||
#else
|
||||
int main() {
|
||||
return demo();
|
||||
#endif
|
||||
|
||||
|
||||
@@ -5,8 +5,10 @@ mex -I../../../build/include private/ctmethods.cpp ...
|
||||
private/xmlmethods.cpp private/phasemethods.cpp ...
|
||||
private/thermomethods.cpp private/kineticsmethods.cpp ...
|
||||
private/transportmethods.cpp private/reactormethods.cpp ...
|
||||
private/reactornetmethods.cpp ...
|
||||
private/wallmethods.cpp private/flowdevicemethods.cpp ...
|
||||
private/onedimmethods.cpp private/surfmethods.cpp private/write.cpp ...
|
||||
private/funcmethods.cpp ...
|
||||
private/onedimmethods.cpp private/surfmethods.cpp ...
|
||||
../../../build/lib/i686-pc-win32/clib.lib ...
|
||||
../../../build/lib/i686-pc-win32/oneD.lib ...
|
||||
../../../build/lib/i686-pc-win32/zeroD.lib ...
|
||||
@@ -17,8 +19,6 @@ mex -I../../../build/include private/ctmethods.cpp ...
|
||||
../../../build/lib/i686-pc-win32/ctlapack.lib ...
|
||||
../../../build/lib/i686-pc-win32/ctmath.lib ...
|
||||
../../../build/lib/i686-pc-win32/ctblas.lib ...
|
||||
../../../build/lib/i686-pc-win32/tpx.lib ...
|
||||
../../../build/lib/i686-pc-win32/dformd.lib ...
|
||||
../../../build/lib/i686-pc-win32/dfconsol.lib ...
|
||||
../../../build/lib/i686-pc-win32/dfport.lib
|
||||
../../../build/lib/i686-pc-win32/tpx.lib
|
||||
disp('done.');
|
||||
exit;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from distutils.core import setup, Extension
|
||||
|
||||
libdir = ['C:/cygwin/home/Dave/dv/sf/cantera/build/lib/i686-pc-win32']
|
||||
libdir = ['../../build/lib/i686-pc-win32']
|
||||
|
||||
setup(name="Cantera",
|
||||
version="1.5.4",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Implementation file for class Constituents
|
||||
*/
|
||||
|
||||
/* $Author$
|
||||
/* $Author$
|
||||
* $Date$
|
||||
* $Revision$
|
||||
*
|
||||
|
||||
@@ -169,7 +169,7 @@ namespace Cantera {
|
||||
|
||||
/// Return a const reference to phase n.
|
||||
//const phase_t& phase(index_t n) const {
|
||||
// if (!m_init) init();
|
||||
// if (!m_init) init();
|
||||
// m_phase[n]->setState_TPX(m_temp,
|
||||
// m_press, m_moleFractions.begin() + m_spstart[n]);
|
||||
// return *m_phase[n];
|
||||
|
||||
@@ -463,7 +463,7 @@ namespace Cantera {
|
||||
* a power law expression involving the species vector.
|
||||
*/
|
||||
void add(int rxn, const vector_int& k, const vector_fp& order) {
|
||||
m_n[rxn] = k.size();
|
||||
m_n[rxn] = static_cast<int>(k.size());
|
||||
switch (k.size()) {
|
||||
case 1:
|
||||
m_loc[rxn] = static_cast<int>(m_c1_list.size());
|
||||
|
||||
@@ -35,6 +35,7 @@ using namespace ct;
|
||||
|
||||
#ifdef WIN32
|
||||
#define TYPENAME_KEYWORD
|
||||
#pragma warning(disable:4267)
|
||||
#else
|
||||
#define TYPENAME_KEYWORD typename
|
||||
#endif
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#ifdef WIN32
|
||||
#pragma warning(disable:4786)
|
||||
#pragma warning(disable:4503)
|
||||
#pragma warning(disable:4267)
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
64
License.rtf
64
License.rtf
@@ -1,33 +1,31 @@
|
||||
{\rtf1\mac\ansicpg10000\cocoartf102
|
||||
{\fonttbl\f0\froman\fcharset77 TimesNewRomanPSMT;\f1\ftech\fcharset2 Symbol;\f2\fmodern\fcharset77 CourierNewPSMT;
|
||||
}
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
\margl1318\margr1318\vieww11740\viewh9860\viewkind1\viewscale100
|
||||
\deftab720
|
||||
\pard\pardeftab720\ri2340\sb100\sa100\qj
|
||||
|
||||
\f0\fs26 \cf0 \
|
||||
\pard\pardeftab720\ri2340\sb100\sa100\ql\qnatural
|
||||
\cf0 Copyright (c) 2001-2004, California Institute of Technology\uc0\u8232 All rights reserved.\
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\
|
||||
\pard\pardeftab720\ri2340\ql\qnatural
|
||||
|
||||
\f1\fs22 \cf0 \
|
||||
\'b7
|
||||
\f0\fs26 Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. \
|
||||
|
||||
\f1\fs22 \
|
||||
\'b7
|
||||
\f0\fs26 Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. \
|
||||
|
||||
\f1\fs22 \
|
||||
\'b7
|
||||
\f0\fs26 Neither the name of the California Institute of Technology nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. \
|
||||
\pard\pardeftab720\ri2340\sb100\sa100\ql\qnatural
|
||||
\cf0 \
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\
|
||||
\pard\pardeftab720\ri2340\ql\qnatural
|
||||
|
||||
\f2\fs22 \cf0 \
|
||||
\
|
||||
}
|
||||
{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f90\froman\fcharset238\fprq2 Times New Roman CE;}
|
||||
{\f91\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f93\froman\fcharset161\fprq2 Times New Roman Greek;}{\f94\froman\fcharset162\fprq2 Times New Roman Tur;}{\f95\froman\fcharset177\fprq2 Times New Roman (Hebrew);}
|
||||
{\f96\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f97\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f98\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;
|
||||
\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;
|
||||
\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\*\cs10 \additive \ssemihidden
|
||||
Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
|
||||
\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}}{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\rsidtbl \rsid602915\rsid8664322}
|
||||
{\*\generator Microsoft Word 11.0.5604;}{\info{\title Copyright (c) 2001-2004, California Institute of Technology}{\author Dave Goodwin}{\operator Dave Goodwin}{\creatim\yr2004\mo12\dy12\hr16\min15}{\revtim\yr2004\mo12\dy12\hr16\min15}{\version2}
|
||||
{\edmins3}{\nofpages1}{\nofwords228}{\nofchars1300}{\*\company Caltech}{\nofcharsws1525}{\vern24689}}\margl1318\margr1318 \widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120\dgvspace120
|
||||
\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\nolnhtadjtbl\rsidroot8664322 \fet0\sectd \linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2
|
||||
\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6
|
||||
\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang
|
||||
{\pntxtb (}{\pntxta )}}\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid602915 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid8664322\charrsid602915
|
||||
\par }{\insrsid2033138\charrsid602915 Copyright (c) 2001-2004, California Institute of Technology}{\insrsid602915 . }{\insrsid2033138\charrsid602915 All rights reserved.}{\insrsid2033138
|
||||
\par }{\insrsid602915\charrsid602915
|
||||
\par }{\insrsid2033138\charrsid602915 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
\par
|
||||
\par \u-4064\'3fRedistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
\par
|
||||
\par Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
\par
|
||||
\par \u-4064\'3fNeither the name of the California Institute of Technology nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
\par
|
||||
\par THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, D
|
||||
A
|
||||
TA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBIL
|
||||
ITY OF SUCH DAMAGE.
|
||||
\par
|
||||
\par
|
||||
\par }}
|
||||
Reference in New Issue
Block a user