/[ascend]/trunk/ascend4/solver/logrelman.h
ViewVC logotype

Annotation of /trunk/ascend4/solver/logrelman.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (hide annotations) (download) (as text)
Fri Oct 29 20:54:12 2004 UTC (17 years, 8 months ago) by aw0a
File MIME type: text/x-chdr
File size: 5021 byte(s)
Setting up web subdirectory in repository
1 aw0a 1 /*
2     * Logical Relation Manipulator Module
3     * Created: 04/97
4     * Version: $Revision: 1.3 $
5     * Version control file: $RCSfile: logrelman.h,v $
6     * Date last modified: $Date: 1997/07/18 12:14:41 $
7     * Last modified by: $Author: mthomas $
8     *
9     * This file is part of the SLV solver.
10     *
11     * The SLV solver is free software; you can redistribute
12     * it and/or modify it under the terms of the GNU General Public License as
13     * published by the Free Software Foundation; either version 2 of the
14     * License, or (at your option) any later version.
15     *
16     * The SLV solver is distributed in hope that it will be
17     * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
18     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19     * General Public License for more details.
20     *
21     * You should have received a copy of the GNU General Public License
22     * along with the program; if not, write to the Free Software Foundation,
23     * Inc., 675 Mass Ave, Cambridge, MA 02139 USA. Check the file named
24     * COPYING. COPYING is found in ../compiler.
25     *
26     */
27    
28     /*
29     * Contents: Logical Relation manipulator module
30     *
31     * Authors: Vicente Rico-Ramirez based on relman.[ch]
32     *
33     * Dates: 04/97 - original version
34     *
35     * Description: This module will provide supplemental operations for
36     * lofical relations such as evaluation.
37     */
38    
39     #ifndef logrelman__already_included
40     #define logrelman__already_included
41    
42     /*
43     * requires #include "mtx.h"
44     * requires #include "discrete.h"
45     * requires #include "logrel.h"
46     */
47    
48    
49     extern void logrelman_get_incidence(struct logrel_relation *,
50     dis_filter_t *,mtx_matrix_t);
51     /*
52     * logrelman_get_incidence(lrel,filter,matrix)
53     * struct logrel_relation *lrel;
54     * dis_filter_t *filter;
55     * mtx_matrix_t matrix;
56     *
57     * Upon return, coefficient (logrel_n,disvar_n)(using original row and
58     * column numbers) is non-zero if and only if the logical relation lrel
59     * with index logrel_n depends on a discrete variable with index disvar_n.
60     */
61    
62    
63     extern int32 logrelman_eval(struct logrel_relation *, int32 *);
64     /*
65     * logresidual = logrelman_eval(lrel,status)
66     * struct logrel_relation *lrel;
67     * int32 *status;
68     * int32 logresidual;
69     *
70     * The residual of the logical relation is calculated and returned.
71     * In addition to returning the residual, the residual field of the
72     * relation is updated. The status value can be monitored to
73     * determine if any calculation errors were encountered. It will be set
74     * 0 if a calculation results in an error.
75     * The logresidual field of the logical relation is not updated when
76     * an error occurs.
77     */
78    
79    
80     extern boolean logrelman_calc_satisfied(struct logrel_relation *);
81     /*
82     * satisfied = logrelman_calc_satisfied(lrel)
83     * boolean satisfied;
84     *
85     * logrelman_calc_satisfied:
86     * Returns TRUE or FALSE depending on whether the logical relation, whose
87     * boolean residual has been previously calculated, is satisfied based on
88     * the value stored in the residual field. The satisfied field of the
89     * logical relation is also updated.
90     */
91    
92    
93     extern int32 *logrelman_directly_solve(struct logrel_relation *,
94     struct dis_discrete *,
95     int *,int *, int,
96     struct gl_list_t *);
97     /*
98     * solution_list = logrelman_directly_solve(lrel,solvefor,able,nsolns,
99     * perturb,insts)
100     * int32 *solution_list;
101     * struct logrel_relation *lrel;
102     * struct dis_discrete *solvefor;
103     * int *able;
104     * int *nsolns;
105     * int perturb;
106     * struct gl_list_t *insts;
107     *
108     * Attempts to solve the given logical equation for the given variable.
109     * If this function is able to determine the solution set, then *able
110     * is set to TRUE and a newly allocated solution list is returned:
111     * *nsolns will be set to the length of this array.
112     * Otherwise *able is FALSE and NULL is returned. NULL may also be
113     * returned if the solution set is empty.
114     * The flag perturb and the gl_list are used to change the truth
115     * value of some boundaries. This is sometimes useful in
116     * conditional modeling.
117     */
118    
119    
120     extern char *logrelman_make_string_infix(slv_system_t,
121     struct logrel_relation *,int);
122     extern char *logrelman_make_string_postfix(slv_system_t,
123     struct logrel_relation *,int);
124     /*
125     * string = logrelman_make_string_infix(sys,lrel,style)
126     * string = logrelman_make_string_postfix(sys,lrel,style)
127     * int style = FALSE;
128     * char *string;
129     * struct logrel_relation *lrel;
130     *
131     * Creates a sufficiently large string (you must free it when you're
132     * done with it) into which it converts a logical relation.
133     * The string will be terminated with a '\0' character.
134     * The name of a discrete var is context dependent, so you have to
135     * provide the slv_system_t from which you got the logical relation.
136     */
137    
138     #endif /* logrelman__already_included */
139    

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