feat: read necessary grid prop from file
This commit is contained in:
73
src/Fvcom.fs
73
src/Fvcom.fs
@@ -344,6 +344,14 @@ let readBathymetry (ds: DataSet) =
|
||||
Log.Error e.Message
|
||||
Array.empty
|
||||
|
||||
let tryReadBathymetry (ds: DataSet) =
|
||||
if ds.Variables.Contains "h" then
|
||||
ds[ "h" ].GetData()
|
||||
:?> single []
|
||||
|> Some
|
||||
else
|
||||
None
|
||||
|
||||
let readBathymetryAtCenters (ds: DataSet) =
|
||||
let h = readBathymetry ds
|
||||
let lc = ds.Dimensions["nele"].Length
|
||||
@@ -375,6 +383,14 @@ let readSiglev (ds: DataSet) n =
|
||||
Log.Error $"{err}"
|
||||
Array.empty
|
||||
|
||||
let tryReadSiglev (ds: DataSet) n =
|
||||
if ds.Variables.Contains "siglev" then
|
||||
let l = ds.Dimensions["siglev"].Length
|
||||
let siglev = ds[ "siglev" ].GetData([| 0; n |], [| l; 1 |]) :?> single [,]
|
||||
Some siglev[*, 0]
|
||||
else
|
||||
None
|
||||
|
||||
let readSiglay (ds: DataSet) n =
|
||||
try
|
||||
let l = ds.Dimensions["siglay"].Length
|
||||
@@ -385,6 +401,14 @@ let readSiglay (ds: DataSet) n =
|
||||
Log.Error $"{err}"
|
||||
Array.empty
|
||||
|
||||
let tryReadSiglay (ds: DataSet) n =
|
||||
if ds.Variables.Contains "siglay" then
|
||||
let l = ds.Dimensions["siglay"].Length
|
||||
let siglay = ds[ "siglay" ].GetData([| 0; n |], [| l; 1 |]) :?> single [,]
|
||||
Some siglay[*, 0]
|
||||
else
|
||||
None
|
||||
|
||||
let readSiglevAtCenter (ds: DataSet) e =
|
||||
try
|
||||
let nv = ds[ "nv" ].GetData() :?> int [,] |> Array2D.map (fun n -> n - 1)
|
||||
@@ -411,6 +435,18 @@ let readSiglayAtCenter (ds: DataSet) e =
|
||||
Log.Error $"{e}"
|
||||
Array.empty
|
||||
|
||||
let tryReadSiglayAtCenter (ds: DataSet) e =
|
||||
if ds.Variables.Contains "siglay" then
|
||||
let nv = ds[ "nv" ].GetData() :?> int [,] |> Array2D.map (fun n -> n - 1)
|
||||
let s1 = readSiglay ds nv[0, e]
|
||||
let s2 = readSiglay ds nv[1, e]
|
||||
let s3 = readSiglay ds nv[2, e]
|
||||
[| 0 .. s1.Length - 1 |]
|
||||
|> Array.map ( fun i -> (s1[i] + s2[i] + s3[i]) / 3.0f)
|
||||
|> Some
|
||||
else
|
||||
None
|
||||
|
||||
// deprecated
|
||||
let readSiglayCenter = readSiglayAtCenter
|
||||
|
||||
@@ -423,6 +459,14 @@ module Siglay =
|
||||
Log.Error $"{err}"
|
||||
Array2D.zeroCreate 0 0
|
||||
|
||||
let tryReadSiglay (ds: DataSet) =
|
||||
if ds.Variables.Contains "siglay" then
|
||||
ds[ "siglay" ].GetData()
|
||||
:?> single [,]
|
||||
|> Some
|
||||
else
|
||||
None
|
||||
|
||||
let readSiglayAtCenter (ds: DataSet) =
|
||||
let siglay = readSiglay ds
|
||||
try
|
||||
@@ -437,6 +481,13 @@ module Siglay =
|
||||
Log.Error $"{e}"
|
||||
Array2D.zeroCreate 0 0
|
||||
|
||||
let tryReadSiglayAtCenter (ds: DataSet) =
|
||||
if ds.Variables.Contains "siglay" then
|
||||
readSiglayAtCenter ds
|
||||
|> Some
|
||||
else
|
||||
None
|
||||
|
||||
let readUv (ds: DataSet) e t =
|
||||
try
|
||||
let l = ds.Dimensions["siglay"].Length
|
||||
@@ -523,6 +574,7 @@ let getBBox (ds: DataSet) : BBox =
|
||||
BBox.empty
|
||||
|
||||
let getGrid (ds: DataSet) : FvcomGrid =
|
||||
printfn "getGrid"
|
||||
try
|
||||
let x =
|
||||
ds[ "x" ].GetData() :?> single []
|
||||
@@ -538,10 +590,23 @@ let getGrid (ds: DataSet) : FvcomGrid =
|
||||
|> Array.map float
|
||||
let nv = ds[ "nv" ].GetData() :?> int [,]
|
||||
|
||||
let h = readBathymetry ds
|
||||
let siglay = Siglay.readSiglay ds
|
||||
let siglay_c = Siglay.readSiglayAtCenter ds
|
||||
let siglev = ds[ "siglev" ].GetData() :?> single [,]
|
||||
let h =
|
||||
match tryReadBathymetry ds with
|
||||
| Some b -> b
|
||||
| None -> Array.empty
|
||||
let siglay =
|
||||
match Siglay.tryReadSiglay ds with
|
||||
| Some s -> s
|
||||
| None -> Array2D.zeroCreate 0 0
|
||||
let siglay_c =
|
||||
match Siglay.tryReadSiglayAtCenter ds with
|
||||
| Some s -> s
|
||||
| None -> Array2D.zeroCreate 0 0
|
||||
let siglev =
|
||||
if ds.Variables.Contains "siglev" then
|
||||
ds[ "siglev" ].GetData() :?> single [,]
|
||||
else
|
||||
Array2D.zeroCreate 0 0
|
||||
let elem =
|
||||
Array.zip3 nv[0, *] nv[1, *] nv[2, *]
|
||||
|> Array.map (fun (a, b, c) -> a - 1, b - 1, c - 1)
|
||||
|
||||
Reference in New Issue
Block a user