w-geo 1.1.19 → 1.1.21
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.
- package/README.md +1 -1
- package/dist/w-geo.umd.js +3 -3
- package/dist/w-geo.umd.js.map +1 -1
- package/docs/-_class.mjs.html +1 -1
- package/docs/calcDepthByDepthStartEnd.mjs.html +1 -1
- package/docs/calcDepthStartEndByConnect.mjs.html +1 -1
- package/docs/calcDepthStartEndByDepth.mjs.html +1 -1
- package/docs/calcDepthStartEndByGroup.mjs.html +1 -1
- package/docs/calcLiquefaction.mjs.html +1 -1
- package/docs/calcVerticalStress.mjs.html +1 -1
- package/docs/checkDepth.mjs.html +1 -1
- package/docs/checkDepthStartEnd.mjs.html +1 -1
- package/docs/complementDepthData.mjs.html +1 -1
- package/docs/groupByDepthStartEnd.mjs.html +1 -1
- package/docs/index.html +1 -1
- package/docs/mergeByDepthStartEnd.mjs.html +1 -1
- package/docs/relaPlasticityParams.mjs.html +1 -1
- package/docs/relaPorousParams.mjs.html +1 -1
- package/docs/sepDepthStartEndByDepth.mjs.html +1 -1
- package/docs/smoothDepthByKey.mjs.html +1 -1
- package/docs/w-geo.html +1 -1
- package/g_6-1-calcLayersByCompress.mjs +11 -0
- package/g_7_1-intrpPsdBySize.mjs +52 -0
- package/{g_7_9-calcPropInterfaceFrictionAngle.mjs → g_7_a1-calcPropInterfaceFrictionAngle.mjs} +1 -1
- package/g_8_1-dtIntrpPsdBySize.mjs +50 -0
- package/package.json +1 -1
- package/src/WGeo.mjs +2 -0
- package/src/calcLayersByCompress.mjs +50 -37
- package/src/dtIntrpPsdBySize.mjs +137 -0
- package/src/intrpPsdBySize.mjs +125 -0
- package/test/dtIntrpPsdBySize.test.mjs +50 -0
- package/test/intrpPsdBySize.test.mjs +29 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import get from 'lodash-es/get.js'
|
|
2
|
+
import size from 'lodash-es/size.js'
|
|
3
|
+
import filter from 'lodash-es/filter.js'
|
|
4
|
+
import map from 'lodash-es/map.js'
|
|
5
|
+
import maxBy from 'lodash-es/maxBy.js'
|
|
6
|
+
import minBy from 'lodash-es/minBy.js'
|
|
7
|
+
import isnum from 'wsemi/src/isnum.mjs'
|
|
8
|
+
import isearr from 'wsemi/src/isearr.mjs'
|
|
9
|
+
import isestr from 'wsemi/src/isestr.mjs'
|
|
10
|
+
import cdbl from 'wsemi/src/cdbl.mjs'
|
|
11
|
+
import interp1 from 'wsemi/src/interp1.mjs'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
function intrpPsdBySize(pfss, psizes, opt = {}) {
|
|
15
|
+
|
|
16
|
+
//keySize
|
|
17
|
+
let keySize = get(opt, 'keySize', '')
|
|
18
|
+
if (!isestr(keySize)) {
|
|
19
|
+
keySize = 'size'
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//keyFraction
|
|
23
|
+
let keyFraction = get(opt, 'keyFraction', '')
|
|
24
|
+
if (!isestr(keyFraction)) {
|
|
25
|
+
keyFraction = 'fraction'
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
//check
|
|
29
|
+
let pfs0 = get(pfss, 0)
|
|
30
|
+
let size0 = get(pfs0, keySize, '')
|
|
31
|
+
let fraction0 = get(pfs0, keyFraction, '')
|
|
32
|
+
if (!isnum(size0)) {
|
|
33
|
+
throw new Error(`pfssp[0][${keySize}] is not an effective number`)
|
|
34
|
+
}
|
|
35
|
+
if (!isnum(fraction0)) {
|
|
36
|
+
throw new Error(`fraction0[0][${keyFraction}] is not an effective number`)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
//check
|
|
40
|
+
if (!isnum(psizes) && !isearr(psizes)) {
|
|
41
|
+
console.log('psizes', psizes)
|
|
42
|
+
throw new Error('psizes is not a number or an effective array')
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
//one
|
|
46
|
+
let one = false
|
|
47
|
+
if (isnum(psizes)) {
|
|
48
|
+
one = true
|
|
49
|
+
psizes = [cdbl(psizes)]
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
//取粒徑size與fraction為數字, 且size大於0(因要轉log內插), fraction要大於等於0, 且無施篩孔時值為-1亦須剔除
|
|
53
|
+
let rs = filter(pfss, (v) => {
|
|
54
|
+
let bs = cdbl(v[keySize]) > 0
|
|
55
|
+
let bf = cdbl(v[keyFraction]) >= 0
|
|
56
|
+
// console.log('bs', bs, v[keySize])
|
|
57
|
+
// console.log('bf', bf, v[keyFraction])
|
|
58
|
+
return bs && bf
|
|
59
|
+
})
|
|
60
|
+
// console.log('rs', rs)
|
|
61
|
+
|
|
62
|
+
//check
|
|
63
|
+
if (size(rs) === 0) {
|
|
64
|
+
console.log('pfss', pfss)
|
|
65
|
+
throw new Error(`invalid rs`)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
//lrs
|
|
69
|
+
let lrs = map(rs, (v) => {
|
|
70
|
+
v[keySize] = Math.log(v[keySize])
|
|
71
|
+
return v
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
//sizeLogMax, sizeLogMin
|
|
75
|
+
let sizeLogMax = maxBy(lrs, keySize)
|
|
76
|
+
let sizeLogMin = minBy(lrs, keySize)
|
|
77
|
+
|
|
78
|
+
//ifs
|
|
79
|
+
let ifs = map(psizes, (psize) => {
|
|
80
|
+
|
|
81
|
+
//sizeLog
|
|
82
|
+
let sizeLog = Math.log(psize)
|
|
83
|
+
// console.log('psize', psize)
|
|
84
|
+
// console.log('sizeLog', sizeLog)
|
|
85
|
+
|
|
86
|
+
//check
|
|
87
|
+
if (sizeLog >= sizeLogMax[keySize]) {
|
|
88
|
+
return sizeLogMax[keyFraction]
|
|
89
|
+
}
|
|
90
|
+
if (sizeLog <= sizeLogMin[keySize]) {
|
|
91
|
+
return sizeLogMin[keyFraction]
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
//interp1
|
|
95
|
+
let optP = {
|
|
96
|
+
keyX: keySize,
|
|
97
|
+
keyY: keyFraction,
|
|
98
|
+
}
|
|
99
|
+
let pfraction = interp1(lrs, sizeLog, optP)
|
|
100
|
+
// console.log('pfraction', pfraction)
|
|
101
|
+
|
|
102
|
+
//check
|
|
103
|
+
if (get(pfraction, 'err')) {
|
|
104
|
+
console.log('lrs', lrs)
|
|
105
|
+
console.log('sizeLog', sizeLog)
|
|
106
|
+
console.log('optP', optP)
|
|
107
|
+
console.log('pfraction', pfraction)
|
|
108
|
+
return null
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return pfraction
|
|
112
|
+
})
|
|
113
|
+
// console.log('ifs', ifs)
|
|
114
|
+
|
|
115
|
+
//r
|
|
116
|
+
let r = ifs
|
|
117
|
+
if (one) {
|
|
118
|
+
r = ifs[0]
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return r
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
export default intrpPsdBySize
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import assert from 'assert'
|
|
2
|
+
import _ from 'lodash-es'
|
|
3
|
+
import w from 'wsemi'
|
|
4
|
+
import dtIntrpPsdBySize from '../src/dtIntrpPsdBySize.mjs'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
describe(`dtIntrpPsdBySize`, function() {
|
|
8
|
+
|
|
9
|
+
let dt = {
|
|
10
|
+
GSD: `[101.6, 76.2, 50.8, 25.4, 19.0, 9.5, 4.75, 2.0, 0.85, 0.425, 0.25, 0.15, 0.106, 0.075, 0.027, 0.018, 0.011, 0.008, 0.006, 0.003, 0.001, 0.0, 0.0, 0.0]`,
|
|
11
|
+
GSP: `[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, -1.0, 100.0, 99.0, 96.0, 86.0, 74.0, 61.0, 51.0, 32.0, 16.0, 0.0, 0.0, 0.0]`,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
let psizes = [
|
|
15
|
+
630,
|
|
16
|
+
200,
|
|
17
|
+
63,
|
|
18
|
+
20,
|
|
19
|
+
6.3,
|
|
20
|
+
2,
|
|
21
|
+
0.63,
|
|
22
|
+
0.2,
|
|
23
|
+
0.063,
|
|
24
|
+
0.02,
|
|
25
|
+
0.0063,
|
|
26
|
+
0.002,
|
|
27
|
+
]
|
|
28
|
+
// let fss = dtIntrpPsdBySize(dt, psizes)
|
|
29
|
+
|
|
30
|
+
let out1 = [
|
|
31
|
+
{ size: 630, fraction: 100 },
|
|
32
|
+
{ size: 200, fraction: 100 },
|
|
33
|
+
{ size: 63, fraction: 99.99999999999999 },
|
|
34
|
+
{ size: 20, fraction: 99.99999999999999 },
|
|
35
|
+
{ size: 6.3, fraction: 100.00000000000001 },
|
|
36
|
+
{ size: 2, fraction: 100 },
|
|
37
|
+
{ size: 0.63, fraction: 100.00000000000001 },
|
|
38
|
+
{ size: 0.2, fraction: 100 },
|
|
39
|
+
{ size: 0.063, fraction: 98.4880247416152 },
|
|
40
|
+
{ size: 0.02, fraction: 88.59851004564663 },
|
|
41
|
+
{ size: 0.0063, fraction: 52.69597513510718 },
|
|
42
|
+
{ size: 0.002, fraction: 26.094876057143324 }
|
|
43
|
+
]
|
|
44
|
+
it(`should return ${out1} when dtIntrpPsdBySize(dt, ${psizes})`, function() {
|
|
45
|
+
let r = dtIntrpPsdBySize(dt, psizes)
|
|
46
|
+
let rr = out1
|
|
47
|
+
assert.strict.deepStrictEqual(r, rr)
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
})
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import assert from 'assert'
|
|
2
|
+
import _ from 'lodash-es'
|
|
3
|
+
import w from 'wsemi'
|
|
4
|
+
import intrpPsdBySize from '../src/intrpPsdBySize.mjs'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
describe(`intrpPsdBySize`, function() {
|
|
8
|
+
|
|
9
|
+
let psd = [101.6, 76.2, 50.8, 25.4, 19.0, 9.5, 4.75, 2.0, 0.85, 0.425, 0.25, 0.15, 0.106, 0.075, 0.027, 0.018, 0.011, 0.008, 0.006, 0.003, 0.001, 0.0, 0.0, 0.0]
|
|
10
|
+
let psf = [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, -1.0, 100.0, 99.0, 96.0, 86.0, 74.0, 61.0, 51.0, 32.0, 16.0, 0.0, 0.0, 0.0]
|
|
11
|
+
let pfss = _.map(psd, (_v, k) => {
|
|
12
|
+
let s = _.get(psd, k)
|
|
13
|
+
let f = _.get(psf, k)
|
|
14
|
+
return {
|
|
15
|
+
size: s,
|
|
16
|
+
fraction: f,
|
|
17
|
+
}
|
|
18
|
+
})
|
|
19
|
+
let psizes = 0.063
|
|
20
|
+
// let r = intrpPsdBySize(pfss, psizes)
|
|
21
|
+
|
|
22
|
+
let out1 = 98.4880247416152
|
|
23
|
+
it(`should return ${out1} when intrpPsdBySize(pfss, ${psizes})`, function() {
|
|
24
|
+
let r = intrpPsdBySize(pfss, psizes)
|
|
25
|
+
let rr = out1
|
|
26
|
+
assert.strict.deepStrictEqual(r, rr)
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
})
|