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
|
/* For copyright information, see olden_v1.0/COPYRIGHT */
/*
* power.h
*
* By: Martin C. Carlisle
* 6/15/94
*
* Header file for the Power Pricing problem
* adapted from code by Steve Lumetta, Sherry Li, and Ismail Khalil
* University of California at Berkeley
*
*/
typedef struct demand {
double P;
double Q;
} Demand;
#ifndef PLAIN
#include "future-cell.h"
#include "mem-ref.h"
typedef struct fc_demand {
future_cell_impl impl;
Demand value; /* cell's value */
} future_cell_demand;
#endif
#ifdef PLAIN
#include <time.h>
#define local
#define mymalloc malloc
#define CMMD_node_timer_clear(x) (void)0
#define TIMESTART(clk) {clk=(double)clock();}
#define TIMESTOP(clk) {clk=1000000.0 * ((double)clock()-(clk))/CLOCKS_PER_SEC;}
extern double wallclock;
#define timer_start(x) TIMESTART(wallclock)
#define timer_stop(x) TIMESTOP(wallclock)
#define timer_elapsed(x) (wallclock / 1000.0)
#endif
#include "math.h"
#include <stdlib.h> // malloc
#include <stdio.h> // printf
#ifndef NULL
#define NULL 0
#endif
#define NUM_FEEDERS 10
#define LATERALS_PER_FEEDER 20
#define BRANCHES_PER_LATERAL 5
#define LEAVES_PER_BRANCH 10
#define F_EPSILON 0.000001
#define G_EPSILON 0.000001
#define H_EPSILON 0.000001
#define ROOT_EPSILON 0.00001
typedef struct root {
Demand D;
double theta_R;
double theta_I;
Demand last;
double last_theta_R;
double last_theta_I;
struct lateral *feeders[NUM_FEEDERS];
} *Root;
typedef struct lateral {
Demand D;
double alpha;
double beta;
double R;
double X;
struct lateral *next_lateral;
struct branch *branch;
} *Lateral;
typedef struct branch {
Demand D;
double alpha;
double beta;
double R;
double X;
struct branch *next_branch;
struct leaf *leaves[LEAVES_PER_BRANCH];
} *Branch;
typedef struct leaf {
Demand D;
double pi_R;
double pi_I;
} *Leaf;
#ifdef PLAIN
#define ALLOC(pn,sz) malloc(sz)
#define chatting printf
#define __NumNodes 1
#define __MyNodeId 0
#endif
/* Prototypes */
Root build_tree();
Lateral build_lateral(int i, int num);
Branch build_branch(int i, int j, int num);
Leaf build_leaf();
void Compute_Tree(Root r);
Demand Compute_Lateral(Lateral l, double theta_R, double theta_I,
double pi_R, double pi_I);
Demand Compute_Branch(Branch b, double theta_R, double theta_I,
double pi_R, double pi_I);
Demand Compute_Leaf(Leaf l, double pi_R, double pi_I);
|