forked from colinsheppard/instream-sd
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathLimitingFunctionProb.m
More file actions
executable file
·123 lines (78 loc) · 2.57 KB
/
Copy pathLimitingFunctionProb.m
File metadata and controls
executable file
·123 lines (78 loc) · 2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
//
// inSTREAM-SD-2D (inSTREAM version 3.1)
// Developed by Lang Railsback & Assoc., Arcata CA for Argonne National Laboratory
// Software maintained by Jackson Scientific Computing, McKinleyville CA;
// This library is distributed without any warranty; without even the
// implied warranty of merchantability or fitness for a particular purpose.
// See file LICENSE for details and terms of copying
//
#import "LimitingFunctionProb.h"
@implementation LimitingFunctionProb
+ createBegin: aZone
{
LimitingFunctionProb* aProb;
aProb = [super createBegin: aZone];
return aProb;
}
- createEnd
{
if([funcList getCount] < 2)
{
[InternalError raiseEvent: "ERROR: LimitingFunctionProb >>>> probName = %s getSurvivalProb funcList has less than 2 members\n", probName];
}
minProbFunc = [funcList getFirst];
return [super createEnd];
}
- setMinSurvProb: (double) aMinSurvProb
{
minSurvProb = aMinSurvProb;
return self;
}
- (id <List>) getMultiFunctionList
{
return funcList;
}
- (double) getSurvivalProb
{
double survProb=1.0;
double survIncreaseFactor=-LARGEINT;
double maxP = -LARGEINT;
id probFunc = nil;
//xprint(minProbFunc);
minSurvProb = [minProbFunc getFuncValue];
if((minSurvProb < 0.0) || (minSurvProb > 1.0))
{
[InternalError raiseEvent: "ERROR: LimitingFunctionProb >>>> minSurvProb in %s is not between zero and one. Value is: %f\n", probName, minSurvProb];
}
//xprint(funcListNdx);
if(funcListNdx == nil)
{
[InternalError raiseEvent: "ERROR: LimitingFunctionProb >>>> funcListNdx is nil\n"];
}
[funcListNdx setLoc: Start];
while(([funcListNdx getLoc] != End) && ((probFunc = [funcListNdx next]) != nil))
{
if(minProbFunc == probFunc) continue;
survIncreaseFactor = [probFunc getFuncValue];
if((survIncreaseFactor < 0.0) || (survIncreaseFactor > 1.0))
{
[InternalError raiseEvent: "ERROR: LimitingFunctionProb >>>> survIncreaseFactor is not between zero and one. Value is: %f\n", survIncreaseFactor];
}
if(survIncreaseFactor > maxP)
{
maxP = survIncreaseFactor;
}
}
survProb = minSurvProb +
((1.0 - minSurvProb) * maxP);
//if((survProb < 0.0) || (survProb > 1.0))
//{
//[InternalError raiseEvent: "ERROR: LimitingFunctionProb >>>> probName = %s >>>> survProb = %f\n", probName, survProb];
//}
return survProb;
}
- (void) drop
{
[super drop];
}
@end