bifacial-radiance 0.5.1__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bifacial_radiance/HPCScripts/BasicSimulations/addNewModule.py +15 -0
- bifacial_radiance/HPCScripts/BasicSimulations/dask_on_node.sh +11 -0
- bifacial_radiance/HPCScripts/BasicSimulations/run_sbatch.sbatch +51 -0
- bifacial_radiance/HPCScripts/BasicSimulations/simulate_fixedtilt_gencumsky.py +110 -0
- bifacial_radiance/HPCScripts/BasicSimulations/simulate_fixedtilt_gendaylit.py +102 -0
- bifacial_radiance/HPCScripts/BasicSimulations/simulate_tracking_gendaylit.py +126 -0
- bifacial_radiance/HPCScripts/Other Examples (unorganized)/PuertoRico.py +168 -0
- bifacial_radiance/HPCScripts/Other Examples (unorganized)/PuertoRico_2.py +166 -0
- bifacial_radiance/HPCScripts/Other Examples (unorganized)/PuertoRico_Original.py +195 -0
- bifacial_radiance/HPCScripts/Other Examples (unorganized)/basic_module_sampling.py +154 -0
- bifacial_radiance/HPCScripts/Other Examples (unorganized)/compile_B.py +162 -0
- bifacial_radiance/HPCScripts/Other Examples (unorganized)/compile_Cases.py +122 -0
- bifacial_radiance/HPCScripts/Other Examples (unorganized)/compile_CasesMonth.py +142 -0
- bifacial_radiance/HPCScripts/Other Examples (unorganized)/compile_PRNew.py +91 -0
- bifacial_radiance/HPCScripts/Other Examples (unorganized)/compile_PRNewP2.py +95 -0
- bifacial_radiance/HPCScripts/Other Examples (unorganized)/compile_TreeResults.py +108 -0
- bifacial_radiance/HPCScripts/Other Examples (unorganized)/compile_basic_module_sampling.py +103 -0
- bifacial_radiance/HPCScripts/Other Examples (unorganized)/simulate_JackHourly.py +160 -0
- bifacial_radiance/HPCScripts/Other Examples (unorganized)/simulate_improvedArray_Oct2127.py +623 -0
- bifacial_radiance/TEMP/.gitignore +4 -0
- bifacial_radiance/__init__.py +24 -0
- bifacial_radiance/data/CEC Modules.csv +16860 -0
- bifacial_radiance/data/default.ini +65 -0
- bifacial_radiance/data/falsecolor.exe +0 -0
- bifacial_radiance/data/gencumsky/License.txt +54 -0
- bifacial_radiance/data/gencumsky/Makefile +17 -0
- bifacial_radiance/data/gencumsky/README.txt +9 -0
- bifacial_radiance/data/gencumsky/Solar Irradiation Modelling.doc +0 -0
- bifacial_radiance/data/gencumsky/Sun.cpp +118 -0
- bifacial_radiance/data/gencumsky/Sun.h +45 -0
- bifacial_radiance/data/gencumsky/average_val.awk +3 -0
- bifacial_radiance/data/gencumsky/cPerezSkyModel.cpp +238 -0
- bifacial_radiance/data/gencumsky/cPerezSkyModel.h +57 -0
- bifacial_radiance/data/gencumsky/cSkyVault.cpp +536 -0
- bifacial_radiance/data/gencumsky/cSkyVault.h +86 -0
- bifacial_radiance/data/gencumsky/climateFile.cpp +312 -0
- bifacial_radiance/data/gencumsky/climateFile.h +37 -0
- bifacial_radiance/data/gencumsky/cumulative.cal +177 -0
- bifacial_radiance/data/gencumsky/cumulative.rad +14 -0
- bifacial_radiance/data/gencumsky/cumulativesky_rotated.rad +2 -0
- bifacial_radiance/data/gencumsky/gencumulativesky +0 -0
- bifacial_radiance/data/gencumsky/gencumulativesky.cpp +269 -0
- bifacial_radiance/data/gencumsky/make_gencumskyexe.py +107 -0
- bifacial_radiance/data/gencumsky/paths.h +62 -0
- bifacial_radiance/data/gencumulativesky +0 -0
- bifacial_radiance/data/gencumulativesky.exe +0 -0
- bifacial_radiance/data/ground.rad +83 -0
- bifacial_radiance/data/module.json +103 -0
- bifacial_radiance/gui.py +1696 -0
- bifacial_radiance/images/fig1_fixed_small.gif +0 -0
- bifacial_radiance/images/fig2_tracked_small.gif +0 -0
- bifacial_radiance/load.py +1156 -0
- bifacial_radiance/main.py +5673 -0
- bifacial_radiance/mismatch.py +461 -0
- bifacial_radiance/modelchain.py +299 -0
- bifacial_radiance/module.py +1427 -0
- bifacial_radiance/performance.py +466 -0
- bifacial_radiance/spectral_utils.py +555 -0
- bifacial_radiance-0.5.1.dist-info/METADATA +129 -0
- bifacial_radiance-0.5.1.dist-info/RECORD +63 -0
- bifacial_radiance-0.5.1.dist-info/WHEEL +6 -0
- bifacial_radiance-0.5.1.dist-info/licenses/LICENSE +30 -0
- bifacial_radiance-0.5.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
#include "climateFile.h"
|
|
2
|
+
#include <stdio.h>
|
|
3
|
+
#include <iostream>
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
#include "paths.h"
|
|
7
|
+
|
|
8
|
+
cClimateFile::cClimateFile(void)
|
|
9
|
+
{
|
|
10
|
+
// set pointers to point to zero initially
|
|
11
|
+
m_ptIgh=0;
|
|
12
|
+
m_ptIdh=0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
cClimateFile::~cClimateFile(void)
|
|
16
|
+
{
|
|
17
|
+
delete[] m_ptIgh;
|
|
18
|
+
delete[] m_ptIdh;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
bool cClimateFile::ReadClimateFile(char *FileName, int HourConvention, eClimateFileFormat ClimateFileFormat,double StartTime, double EndTime, int StartDay, int EndDay, int StartMonth, int EndMonth)
|
|
22
|
+
{
|
|
23
|
+
FILE *InputFile;
|
|
24
|
+
char *Line = new char[1000];
|
|
25
|
+
|
|
26
|
+
int hour,day;
|
|
27
|
+
int i;
|
|
28
|
+
float n1,n2,n3,n4,n5,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16;
|
|
29
|
+
char line_string[1000]="";
|
|
30
|
+
char s7[1000]="";
|
|
31
|
+
|
|
32
|
+
// open file (checking that you can...)
|
|
33
|
+
if ((InputFile=LoadFile(FileName))==NULL)
|
|
34
|
+
{
|
|
35
|
+
fprintf(stderr,"Error opening: %s\n",FileName);
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
rewind(InputFile);
|
|
39
|
+
// TODO: Add error checking
|
|
40
|
+
|
|
41
|
+
// get rid of old climate data
|
|
42
|
+
delete[] m_ptIgh;
|
|
43
|
+
delete[] m_ptIdh;
|
|
44
|
+
|
|
45
|
+
//Assume we've got 8760 points
|
|
46
|
+
m_NumPoints=8760;
|
|
47
|
+
|
|
48
|
+
double *Col1 = new double[m_NumPoints];
|
|
49
|
+
double *Col2 = new double[m_NumPoints];
|
|
50
|
+
|
|
51
|
+
// read in points for each hour of each day
|
|
52
|
+
// points are assumed to be at 0:30, 1:30, ... from 1st Jan to 3st Dec
|
|
53
|
+
// The function assumes a full hourly annual data file with 8760 lines.
|
|
54
|
+
|
|
55
|
+
//if EPW file format
|
|
56
|
+
if (ClimateFileFormat==GLOBAL_DIFFUSE_EPW)
|
|
57
|
+
{
|
|
58
|
+
//skip file header:
|
|
59
|
+
for (i=0; i<8; i++)
|
|
60
|
+
{
|
|
61
|
+
fscanf(InputFile,"%*[^\n]");
|
|
62
|
+
fscanf(InputFile,"%*[\n\r]");
|
|
63
|
+
}
|
|
64
|
+
for (day=0; day<365; day++)
|
|
65
|
+
{
|
|
66
|
+
for (hour=0; hour<24; hour++)
|
|
67
|
+
{
|
|
68
|
+
|
|
69
|
+
fscanf(InputFile,"%f,%f,%f,%f,%f,%s",&n1,&n2,&n3,&n4,&n5,&line_string[0]);
|
|
70
|
+
//replace ',' with ' '
|
|
71
|
+
for (i=0;i<1000;i++){
|
|
72
|
+
if(line_string[i] == ',')
|
|
73
|
+
line_string[i] = ' ';
|
|
74
|
+
}
|
|
75
|
+
if (sscanf(line_string,"%s %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f",
|
|
76
|
+
&s7[0],&n7,&n8,&n9,&n10,&n11,&n12,&n13,&n14,&n15,&n16,&n1,&n1,&n1,&n1,&n1,&n1,&n1,&n1,&n1,&n1,&n1,&n1,&n1,&n1,&n1)== EOF)
|
|
77
|
+
{
|
|
78
|
+
// ran out of file
|
|
79
|
+
fprintf(stderr,"Error processing climate file %s\n",FileName);
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
// StartDay, EndDay, StartMonth, EndMonth);
|
|
83
|
+
if(hour>= (StartTime) && hour< (EndTime-1))
|
|
84
|
+
{
|
|
85
|
+
if(JulianDate(StartMonth, StartDay)<=JulianDate(EndMonth, EndDay))
|
|
86
|
+
{
|
|
87
|
+
if(day>=JulianDate(StartMonth, StartDay) && day<=JulianDate(EndMonth, EndDay))
|
|
88
|
+
{
|
|
89
|
+
Col1[day*24+hour]=n14;
|
|
90
|
+
Col2[day*24+hour]=n16;
|
|
91
|
+
}
|
|
92
|
+
} else if(JulianDate(StartMonth, StartDay)>JulianDate(EndMonth, EndDay))
|
|
93
|
+
{
|
|
94
|
+
if(day>=JulianDate(StartMonth, StartDay) || day<=JulianDate(EndMonth, EndDay))
|
|
95
|
+
{
|
|
96
|
+
Col1[day*24+hour]=n14;
|
|
97
|
+
Col2[day*24+hour]=n16;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//printf("%.0f %.0f %.0f %.0f %.0f\n",n2,n3,n4,Col1[day*24+hour],Col2[day*24+hour]);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
}else{
|
|
108
|
+
for (day=0; day<365; day++)
|
|
109
|
+
{
|
|
110
|
+
for (hour=0; hour<24; hour++)
|
|
111
|
+
{
|
|
112
|
+
if (fgets(Line,100,InputFile)==NULL)
|
|
113
|
+
{
|
|
114
|
+
// ran out of file
|
|
115
|
+
fprintf(stderr,"Error processing climate file %s\n",FileName);
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
sscanf(Line,"%lf %lf\n",&Col1[day*24+hour],&Col2[day*24+hour]);
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Now convert data into appropriate form
|
|
127
|
+
if (ClimateFileFormat==GLOBAL_DIFFUSE || ClimateFileFormat==GLOBAL_DIFFUSE_EPW)
|
|
128
|
+
{
|
|
129
|
+
m_ptIgh=Col1;
|
|
130
|
+
m_ptIdh=Col2;
|
|
131
|
+
|
|
132
|
+
}
|
|
133
|
+
else if (ClimateFileFormat == DIRECTHORIZONTAL_DIFFUSE)
|
|
134
|
+
{
|
|
135
|
+
m_ptIdh=Col2;
|
|
136
|
+
for (i=0; i<m_NumPoints; i++)
|
|
137
|
+
{
|
|
138
|
+
Col1[i]=Col1[i]+Col2[i];
|
|
139
|
+
}
|
|
140
|
+
m_ptIgh=Col1;
|
|
141
|
+
}
|
|
142
|
+
else
|
|
143
|
+
{
|
|
144
|
+
// ran out of file
|
|
145
|
+
fprintf(stderr,"Unknown climate file format!\n");
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
if (!ValidateData())
|
|
151
|
+
{
|
|
152
|
+
fprintf(stderr,"Invalid Data!\n");
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
fclose(InputFile);
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
bool cClimateFile::ValidateData()
|
|
161
|
+
{
|
|
162
|
+
// TODO: Write this function!
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
int cClimateFile::JulianDate(int month, int day)
|
|
167
|
+
{
|
|
168
|
+
// calculate julian date
|
|
169
|
+
int jd=0;
|
|
170
|
+
if(month==1)
|
|
171
|
+
jd=day;
|
|
172
|
+
if(month==2)
|
|
173
|
+
jd=31+day;
|
|
174
|
+
if(month==3)
|
|
175
|
+
jd=59+day;
|
|
176
|
+
if(month==4)
|
|
177
|
+
jd=90+day;
|
|
178
|
+
if(month==5)
|
|
179
|
+
jd=120+day;
|
|
180
|
+
if(month==6)
|
|
181
|
+
jd=151+day;
|
|
182
|
+
if(month==7)
|
|
183
|
+
jd=181+day;
|
|
184
|
+
if(month==8)
|
|
185
|
+
jd=212+day;
|
|
186
|
+
if(month==9)
|
|
187
|
+
jd=243+day;
|
|
188
|
+
if(month==10)
|
|
189
|
+
jd=273+day;
|
|
190
|
+
if(month==11)
|
|
191
|
+
jd=304+day;
|
|
192
|
+
if(month==12)
|
|
193
|
+
jd=334+day;
|
|
194
|
+
return (jd-1);
|
|
195
|
+
}
|
|
196
|
+
double cClimateFile::GetDirectRad(double hour, int day)
|
|
197
|
+
{
|
|
198
|
+
// interpolate linearly between two closest hours
|
|
199
|
+
double hourdiff, hour1;
|
|
200
|
+
int pointer;
|
|
201
|
+
|
|
202
|
+
// find the half hour before current time (climate file has data for 0:30, 1:30,2:30, etc...)
|
|
203
|
+
hour1=(int)hour;
|
|
204
|
+
hourdiff=hour-hour1;
|
|
205
|
+
if (hourdiff >= 0.5) hour1+= 0.5;
|
|
206
|
+
else hour1-=0.5;
|
|
207
|
+
|
|
208
|
+
pointer=(day-1)*24+(int)(hour1-0.5);
|
|
209
|
+
|
|
210
|
+
// if pointer < 0, don't have data for specified day
|
|
211
|
+
if (pointer < 0) return -9999;
|
|
212
|
+
|
|
213
|
+
float ratio, diff;
|
|
214
|
+
|
|
215
|
+
ratio=hour-hour1;
|
|
216
|
+
// TODO: CHeck this (first/last hours of day)
|
|
217
|
+
diff=(m_ptIgh[pointer+1]-m_ptIdh[pointer+1])-(m_ptIgh[pointer]-m_ptIdh[pointer]);
|
|
218
|
+
|
|
219
|
+
return (m_ptIgh[pointer]-m_ptIdh[pointer]) + diff*ratio;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
double cClimateFile::GetDiffuseRad(double hour, int day)
|
|
223
|
+
{
|
|
224
|
+
// interpolate linearly between two closest hours
|
|
225
|
+
float hour1, hourdiff;
|
|
226
|
+
int pointer;
|
|
227
|
+
|
|
228
|
+
// find the half hour before current time (climate file has data for 0:30, 1:30,2:30, etc...)
|
|
229
|
+
hour1=int(hour);
|
|
230
|
+
hourdiff=hour-hour1;
|
|
231
|
+
if (hourdiff >= 0.5) hour1+= 0.5;
|
|
232
|
+
else hour1-=0.5;
|
|
233
|
+
|
|
234
|
+
pointer=(day-1)*24+(int)(hour1-0.5);
|
|
235
|
+
|
|
236
|
+
// if pointer < 0, don't have data for specified day
|
|
237
|
+
if (pointer < 0) return -9999;
|
|
238
|
+
|
|
239
|
+
float ratio, diff;
|
|
240
|
+
|
|
241
|
+
ratio=hour-hour1;
|
|
242
|
+
diff=m_ptIdh[pointer+1]-m_ptIdh[pointer];
|
|
243
|
+
|
|
244
|
+
return m_ptIdh[pointer] + diff*ratio;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
double cClimateFile::GetGlobalRad(double hour, int day)
|
|
248
|
+
{
|
|
249
|
+
// interpolate linearly between two closest hours
|
|
250
|
+
float hour1, hourdiff;
|
|
251
|
+
int pointer;
|
|
252
|
+
|
|
253
|
+
// find the half hour before current time (climate file has data for 0:30, 1:30,2:30, etc...)
|
|
254
|
+
hour1=int(hour);
|
|
255
|
+
hourdiff=hour-hour1;
|
|
256
|
+
if (hourdiff >= 0.5) hour1+= 0.5;
|
|
257
|
+
else hour1-=0.5;
|
|
258
|
+
|
|
259
|
+
pointer=(day-1)*24+(int)(hour1-0.5);
|
|
260
|
+
|
|
261
|
+
// if pointer < 0, don't have data for specified day
|
|
262
|
+
if (pointer < 0) return -9999;
|
|
263
|
+
|
|
264
|
+
float ratio, diff;
|
|
265
|
+
|
|
266
|
+
ratio=hour-hour1;
|
|
267
|
+
diff=m_ptIgh[pointer+1]-m_ptIgh[pointer];
|
|
268
|
+
return m_ptIgh[pointer] + diff*ratio;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
// THIS ROUTINE 'BORROWED' FROM GENDAYLIT
|
|
273
|
+
//FILE* cClimateFile::LoadFile( char *fname) /* find file and open for reading */
|
|
274
|
+
//{
|
|
275
|
+
// FILE *fp;
|
|
276
|
+
// char pname[MAXPATH];
|
|
277
|
+
// char *libpath=NULL;
|
|
278
|
+
// register char *sp, *cp;
|
|
279
|
+
|
|
280
|
+
// if (fname == NULL)
|
|
281
|
+
// return(NULL);
|
|
282
|
+
|
|
283
|
+
// if (ISDIRSEP(fname[0]) || fname[0] == '.') /* absolute path */
|
|
284
|
+
// return(fopen(fname, "r"));
|
|
285
|
+
|
|
286
|
+
// if (libpath == NULL) { /* get search path */
|
|
287
|
+
// libpath = getenv(ULIBVAR);
|
|
288
|
+
// if (libpath == NULL)
|
|
289
|
+
// libpath = DEFPATH;
|
|
290
|
+
// }
|
|
291
|
+
/* check search path */
|
|
292
|
+
// sp = libpath;
|
|
293
|
+
// do {
|
|
294
|
+
// cp = pname;
|
|
295
|
+
// while (*sp && (*cp = *sp++) != PATHSEP)
|
|
296
|
+
// cp++;
|
|
297
|
+
// if (cp > pname && !ISDIRSEP(cp[-1]))
|
|
298
|
+
// *cp++ = DIRSEP;
|
|
299
|
+
// strcpy(cp, fname);
|
|
300
|
+
// if ((fp = fopen(pname, "r")) != NULL)
|
|
301
|
+
// return(fp); /* got it! */
|
|
302
|
+
// } while (*sp);
|
|
303
|
+
// /* not found */
|
|
304
|
+
// return(NULL);
|
|
305
|
+
//}
|
|
306
|
+
|
|
307
|
+
FILE* cClimateFile::LoadFile( char *fname) /*open file for reading*/
|
|
308
|
+
{ FILE *Datei;
|
|
309
|
+
Datei = fopen(fname, "r");
|
|
310
|
+
if ( Datei == NULL) fprintf(stderr, "fatal warning FUNCTION LoadFile: open of %s for input failed.\n",fname);
|
|
311
|
+
return Datei;}
|
|
312
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#include <stdio.h>
|
|
2
|
+
#include <stdlib.h>
|
|
3
|
+
|
|
4
|
+
class cClimateFile
|
|
5
|
+
{
|
|
6
|
+
public:
|
|
7
|
+
enum eClimateFileFormat { GLOBAL_DIFFUSE, DIRECTHORIZONTAL_DIFFUSE,GLOBAL_DIFFUSE_EPW };
|
|
8
|
+
|
|
9
|
+
cClimateFile(void);
|
|
10
|
+
~cClimateFile(void);
|
|
11
|
+
|
|
12
|
+
// read in climate file
|
|
13
|
+
// must specify the hour numbering convention -1 = hour beginning, 0 = centered, 1 = hour ending
|
|
14
|
+
bool ReadClimateFile(char *FileName, int HourConvention, eClimateFileFormat ClimateFileFormat,double StartTime, double EndTime, int StartDay, int EndDay, int StartMonth, int EndMonth);
|
|
15
|
+
|
|
16
|
+
// check that the currently stored data is valid
|
|
17
|
+
bool ValidateData();
|
|
18
|
+
|
|
19
|
+
//caclulate julian date
|
|
20
|
+
int JulianDate(int month, int day);
|
|
21
|
+
//int cClimateFile::JulianDate(int month, int day);
|
|
22
|
+
|
|
23
|
+
// return direct radiation for a given day (Ibh=Igh-Idh)
|
|
24
|
+
// day 1 = 1st jan, hour is 0-23
|
|
25
|
+
double GetDirectRad(double hour, int day);
|
|
26
|
+
double GetDiffuseRad(double hour, int day);
|
|
27
|
+
double GetGlobalRad(double hour, int day);
|
|
28
|
+
|
|
29
|
+
private:
|
|
30
|
+
// climate data
|
|
31
|
+
double *m_ptIgh, *m_ptIdh;
|
|
32
|
+
// number of data points (almost certainly = 24*365=8760)
|
|
33
|
+
int m_NumPoints;
|
|
34
|
+
|
|
35
|
+
FILE *LoadFile(char *fname);
|
|
36
|
+
|
|
37
|
+
};
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
{ This .cal file was generated automatically by gencumulativesky }
|
|
2
|
+
{ a.out +s2 -a 51.5 -h -0. -o 5.32 -G ./cardiff.txt }
|
|
3
|
+
|
|
4
|
+
skybright=row0+row1+row2+row3+row4+row5+row6+row7;
|
|
5
|
+
|
|
6
|
+
row0=if(and(alt-0, 12-alt),select(floor(0.5+az/12.00)+1,
|
|
7
|
+
147651.992082,
|
|
8
|
+
148103.246847,
|
|
9
|
+
150502.848057,
|
|
10
|
+
155558.154335,
|
|
11
|
+
164752.750913,
|
|
12
|
+
180226.864316,
|
|
13
|
+
197570.397547,
|
|
14
|
+
212571.942436,
|
|
15
|
+
222715.516579,
|
|
16
|
+
229380.244970,
|
|
17
|
+
234364.512080,
|
|
18
|
+
238724.153999,
|
|
19
|
+
241687.185432,
|
|
20
|
+
243156.625884,
|
|
21
|
+
244030.858216,
|
|
22
|
+
245287.056661,
|
|
23
|
+
247567.996594,
|
|
24
|
+
250779.009968,
|
|
25
|
+
253345.247304,
|
|
26
|
+
253483.003437,
|
|
27
|
+
251441.577429,
|
|
28
|
+
248002.276951,
|
|
29
|
+
241899.370743,
|
|
30
|
+
231427.225726,
|
|
31
|
+
213790.778047,
|
|
32
|
+
191226.997091,
|
|
33
|
+
171722.489942,
|
|
34
|
+
159518.523684,
|
|
35
|
+
152621.012229,
|
|
36
|
+
149021.950490,
|
|
37
|
+
147651.992082),0);
|
|
38
|
+
|
|
39
|
+
row1=if(and(alt-12, 24-alt),select(floor(0.5+az/12.00)+1,
|
|
40
|
+
134651.743021,
|
|
41
|
+
135053.083596,
|
|
42
|
+
137437.590856,
|
|
43
|
+
142420.217077,
|
|
44
|
+
151274.635553,
|
|
45
|
+
165867.004901,
|
|
46
|
+
187839.978362,
|
|
47
|
+
209363.153328,
|
|
48
|
+
225731.564198,
|
|
49
|
+
236851.521055,
|
|
50
|
+
243759.655986,
|
|
51
|
+
250020.623769,
|
|
52
|
+
255473.229880,
|
|
53
|
+
259620.185535,
|
|
54
|
+
262936.931112,
|
|
55
|
+
265882.298494,
|
|
56
|
+
267908.171928,
|
|
57
|
+
269448.819016,
|
|
58
|
+
270151.095768,
|
|
59
|
+
269505.390092,
|
|
60
|
+
266983.874338,
|
|
61
|
+
261333.811133,
|
|
62
|
+
252929.903479,
|
|
63
|
+
233597.041538,
|
|
64
|
+
206371.066468,
|
|
65
|
+
178675.901426,
|
|
66
|
+
159135.575806,
|
|
67
|
+
147001.511408,
|
|
68
|
+
139925.800854,
|
|
69
|
+
136142.123374,
|
|
70
|
+
134651.743021),0);
|
|
71
|
+
|
|
72
|
+
row2=if(and(alt-24, 36-alt),select(floor(0.5+az/15.00)+1,
|
|
73
|
+
125460.067551,
|
|
74
|
+
126133.634995,
|
|
75
|
+
129825.423207,
|
|
76
|
+
137678.123424,
|
|
77
|
+
151862.426574,
|
|
78
|
+
174915.500053,
|
|
79
|
+
205419.015484,
|
|
80
|
+
231446.717882,
|
|
81
|
+
247028.536763,
|
|
82
|
+
255945.617304,
|
|
83
|
+
263118.023397,
|
|
84
|
+
268575.983401,
|
|
85
|
+
272514.849105,
|
|
86
|
+
275030.006794,
|
|
87
|
+
276372.309258,
|
|
88
|
+
275336.988349,
|
|
89
|
+
270847.601692,
|
|
90
|
+
260369.168109,
|
|
91
|
+
233101.528953,
|
|
92
|
+
193610.515939,
|
|
93
|
+
163540.284837,
|
|
94
|
+
144358.286209,
|
|
95
|
+
133324.367364,
|
|
96
|
+
127615.967316,
|
|
97
|
+
125460.067551),0);
|
|
98
|
+
|
|
99
|
+
row3=if(and(alt-36, 48-alt),select(floor(0.5+az/15.00)+1,
|
|
100
|
+
120757.784075,
|
|
101
|
+
121324.947226,
|
|
102
|
+
124596.806475,
|
|
103
|
+
131288.409911,
|
|
104
|
+
142715.794089,
|
|
105
|
+
160550.960188,
|
|
106
|
+
185946.724621,
|
|
107
|
+
216780.394666,
|
|
108
|
+
240382.834313,
|
|
109
|
+
257157.830766,
|
|
110
|
+
264688.413196,
|
|
111
|
+
270191.252794,
|
|
112
|
+
275185.652566,
|
|
113
|
+
277586.860612,
|
|
114
|
+
276764.236991,
|
|
115
|
+
274128.718481,
|
|
116
|
+
266130.058101,
|
|
117
|
+
240671.534981,
|
|
118
|
+
206302.822953,
|
|
119
|
+
175137.206287,
|
|
120
|
+
152331.985627,
|
|
121
|
+
137185.051179,
|
|
122
|
+
127891.996560,
|
|
123
|
+
122785.088706,
|
|
124
|
+
120757.784075),0);
|
|
125
|
+
|
|
126
|
+
row4=if(and(alt-48, 60-alt),select(floor(0.5+az/20.00)+1,
|
|
127
|
+
120553.214945,
|
|
128
|
+
121701.979622,
|
|
129
|
+
127264.207825,
|
|
130
|
+
138523.623777,
|
|
131
|
+
157362.196532,
|
|
132
|
+
184812.504009,
|
|
133
|
+
218174.248601,
|
|
134
|
+
244754.046815,
|
|
135
|
+
260098.694850,
|
|
136
|
+
268529.254096,
|
|
137
|
+
270470.791981,
|
|
138
|
+
260536.512623,
|
|
139
|
+
234959.274998,
|
|
140
|
+
200472.817437,
|
|
141
|
+
168938.370311,
|
|
142
|
+
145955.737209,
|
|
143
|
+
131451.317663,
|
|
144
|
+
123544.008800,
|
|
145
|
+
120553.214945),0);
|
|
146
|
+
|
|
147
|
+
row5=if(and(alt-60, 72-alt),select(floor(0.5+az/30.00)+1,
|
|
148
|
+
125136.944026,
|
|
149
|
+
127825.032912,
|
|
150
|
+
138889.529604,
|
|
151
|
+
159856.698781,
|
|
152
|
+
189095.038539,
|
|
153
|
+
217166.299527,
|
|
154
|
+
231209.021293,
|
|
155
|
+
224177.613259,
|
|
156
|
+
198836.252107,
|
|
157
|
+
168210.150741,
|
|
158
|
+
144143.189720,
|
|
159
|
+
130187.870112,
|
|
160
|
+
125136.944026),0);
|
|
161
|
+
|
|
162
|
+
row6=if(and(alt-72, 84-alt),select(floor(0.5+az/60.00)+1,
|
|
163
|
+
135639.142343,
|
|
164
|
+
143917.146301,
|
|
165
|
+
168017.896278,
|
|
166
|
+
185262.329733,
|
|
167
|
+
172003.700483,
|
|
168
|
+
146816.867657,
|
|
169
|
+
135639.142343),0);
|
|
170
|
+
|
|
171
|
+
row7=if(alt-84,154421.194038,0);
|
|
172
|
+
|
|
173
|
+
alt=asin(Dz)*180/PI;
|
|
174
|
+
|
|
175
|
+
az=if(azi,azi,azi+360);
|
|
176
|
+
azi=atan2(Dx,Dy)*180/PI;
|
|
177
|
+
|
|
Binary file
|