forked from lukeshope/hipims-ocl
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathBoundaries.js
79 lines (66 loc) · 2.14 KB
/
Boundaries.js
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
'use strict';
const fs = require('fs');
function Boundaries (definition) {
this.boundaryDefinition = definition;
};
Boundaries.prototype.writeFiles = function(duration, directory, cb) {
var writeRequirements = [];
var writeSatisfied = 0;
var writeComplete = function (err) {
writeSatisfied++;
if (err) {
cb(err);
} else {
if (!writeRequirements.length) {
cb(false);
} else {
(writeRequirements.shift())();
}
}
};
if (this.boundaryDefinition.rainfallIntensity) {
writeRequirements.push(this.writeFilesRainfall.bind(this, duration, directory, writeComplete));
}
if (this.boundaryDefinition.drainageRate) {
writeRequirements.push(this.writeFilesDrainage.bind(this, duration, directory, writeComplete));
}
writeComplete(false);
}
Boundaries.prototype.hasDrainage = function() {
return !!this.boundaryDefinition.drainageRate;
}
Boundaries.prototype.hasRainfall = function() {
return !!this.boundaryDefinition.rainfallIntensity;
}
Boundaries.prototype.writeFilesRainfall = function(duration, directory, cb) {
console.log(' Attempting to write rainfall intensity boundary.');
fs.writeFile(
directory + '/rainfall.csv',
this.getRainfall(duration),
cb
);
}
Boundaries.prototype.writeFilesDrainage = function(duration, directory, cb) {
console.log(' Attempting to write drainage boundary.');
fs.writeFile(
directory + '/drainage.csv',
this.getDrainage(duration),
cb
);
}
Boundaries.prototype.getRainfall = function(duration) {
let csvHeader = 'Time (s),Rainfall intensity (mm/hr)\n';
let csvLines = '';
for (let csvTime = 0.0; csvTime <= duration; csvTime += this.boundaryDefinition.rainfallDuration) {
csvLines += csvTime + ',' + (csvTime < this.boundaryDefinition.rainfallDuration ? this.boundaryDefinition.rainfallIntensity : 0.0) + '\n';
}
return csvHeader + csvLines;
}
Boundaries.prototype.getDrainage = function(duration) {
let csvHeader = 'Time (s),Drainage rate (mm/hr)\n';
let csvLines = '';
csvLines += '0.0,' + this.boundaryDefinition.drainageRate + '\n';
csvLines += duration + ',' + this.boundaryDefinition.drainageRate + '\n'
return csvHeader + csvLines;
}
module.exports = Boundaries;