/[ascend]/trunk/models/johnpye/fprops/rundata.h
ViewVC logotype

Annotation of /trunk/models/johnpye/fprops/rundata.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2662 - (hide annotations) (download) (as text)
Fri Jan 18 00:34:51 2013 UTC (9 years, 6 months ago) by jpye
File MIME type: text/x-chdr
File size: 5359 byte(s)
Added some C tests for sat and solve_ph routines.
Added parameter 'source' to fprops_fluid, to allow data with a particular source to be specified (optionally). This allows forced testing explicitly of the RPP data even when Helmholtz data is also available.
Tweaked some convergence parameters in sat.c and solve_ph.c to get convergence across broader range of parameters for more fluids (more testing required).
1 jpye 2654 /* ASCEND modelling environment
2     Copyright (C) 2011 Carnegie Mellon University
3    
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2, or (at your option)
7     any later version.
8    
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12     GNU General Public License for more details.
13    
14     You should have received a copy of the GNU General Public License
15 jpye 2661 along with this program. If not, see <http://www.gnu.org/licenses/>.
16 jpye 2654 *//** @file
17     This file contains declarations of the data structures passed to
18     functions that EVALUATE fluid properties. We allow from some preprocessing of
19     data loaded from input files, if deisred/needed.
20    
21     Data declarations as provided in input files are given in filedata.h
22     */
23    
24     #ifndef FPROPS_RUNDATA_H
25     #define FPROPS_RUNDATA_H
26    
27     #include "common.h"
28    
29     /* TODO remove this dependency eventually (some helmholtz data objects are not yet being copied into new structures*/
30     #include "filedata.h"
31    
32    
33     /** Power terms for phi0 (including polynomial) */
34     typedef struct Cp0RunPowTerm_struct{
35     double a;
36     double p;
37     } Phi0RunPowTerm;
38    
39     /** Planck-Einstein aka 'exponential' terms for phi0 */
40     typedef struct Cp0RunExpTerm_struct{
41     double n;
42     double gamma;
43     } Phi0RunExpTerm;
44    
45     /**
46     Zero-pressure specific heat capacity data for a fluid
47    
48     There is no 'R' or 'cp0star' in this structure. If cp0star != R in the filedata, that
49     difference will be corrected for when this structure is created.
50     */
51     typedef struct Phi0RunData_struct{
52     double c; /**< second integration constant in phi0, value determined by reference point for entropy */
53     double m; /**< first integration constant in phi0, value determined by reference point for enthalpy */
54    
55     unsigned np; /**< number of power terms */
56     Phi0RunPowTerm *pt; /**< power term data, may be NULL if np == 0 */
57     unsigned ne; /**< number of Planck-Einstein aka 'exponential' terms */
58     Phi0RunExpTerm *et; /**< exponential term data, maybe NULL if ne == 0 */
59     } Phi0RunData;
60    
61     typedef struct HelmholtzRunData_struct{
62     double rho_star;/**< normalisation density, kg/m3 */
63     double T_star; /**< normalisation temperature, K */
64    
65     //REMOVED: double p_t; /**< triple-point pressure */
66    
67     unsigned np; /**< number of power terms in residual equation */
68     const HelmholtzPowTerm *pt; /**< power term data for residual eqn, maybe NULL if np == 0 */
69     unsigned ng; /**< number of critical terms of the first kind */
70     const HelmholtzGausTerm *gt; /**< critical terms of the first kind */
71     unsigned nc; /**< number of critical terms of the second kind */
72     const HelmholtzCritTerm *ct; /**< critical terms of the second kind */
73     } HelmholtzRunData;
74    
75     typedef struct PengrobRunData_struct{
76     double aTc; /**< value of 'a' when evaluated at T = T_c */
77     double b; /**< coeficient 'b' in PR EOS */
78     double kappa; /** parameter used in a(T) */
79     } PengrobRunData;
80    
81     typedef union CorrelationUnion_union{
82     HelmholtzRunData *helm;
83     PengrobRunData *pengrob;
84     /* maybe more later */
85     } CorrelationUnion;
86    
87     /* TODO Regarding Cp0Data: some source publications present Cp0 data eg in the
88     form of polynomials etc, and others present phi0 data (nondimensionalised ideal
89     helmholtz energy). There is a straightforward conversion between the two, see
90     precalc.c (although that is still incomplete). What is not clear is whether it
91     is better to keep phi0 or cp0 values in the runtime data here. */
92    
93     /** All runtime 'core' data for all possible correlations, with exception of correlation-type-ID, function pointers and metadata */
94     typedef struct FluidData_struct{
95     /* common data across all correlations */
96     double R; /**< specific gas constant */
97     double M; /**< molar mass, kg/kmol */
98     double T_t; /**< triple-point temperature */
99     double T_c; /**< critical temperature */
100     double p_c; /**< critical pressure */
101     double rho_c; /**< critical density */
102     double omega; /**< acentric factor (possibly calculated from correlation data)*/
103     Phi0RunData *cp0; /* data for ideal component of Helmholtz energy */
104    
105     /* correlation-specific stuff here */
106     CorrelationUnion corr;
107     } FluidData;
108    
109    
110     /* Definition of a fluid property function pointer */
111     typedef double PropEvalFn(double,double,const FluidData *data, FpropsError *err);
112    
113     /** @return psat */
114     typedef double SatEvalFn(double T,double *rhof, double *rhog, const FluidData *data, FpropsError *err);
115    
116     /**
117     Structure containing all the necessary data and metadata for run-time
118     calculation of fluid properties.
119     */
120     typedef struct PureFluid_struct{
121     const char *name;
122 jpye 2662 const char *source;
123 jpye 2654 EosType type;
124 jpye 2662 FluidData *data; // everything we need at runtime in the following functions should be in here
125 jpye 2654 //Pointers to departure functions
126     PropEvalFn *p_fn;
127     PropEvalFn *u_fn;
128     PropEvalFn *h_fn;
129     PropEvalFn *s_fn;
130     PropEvalFn *a_fn;
131     PropEvalFn *cv_fn;
132     PropEvalFn *cp_fn;
133     PropEvalFn *w_fn;
134     PropEvalFn *g_fn;
135     PropEvalFn *alphap_fn;
136     PropEvalFn *betap_fn;
137     PropEvalFn *dpdrho_T_fn; // this derivative is required for saturation properties by Akasaka method
138     SatEvalFn *sat_fn; // function to return {psat,rhof,rhog}(T) for this pure fluid
139     } PureFluid;
140    
141     #endif

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22