feat: read necessary grid prop from file

This commit is contained in:
Stig Rune Jensen
2023-06-03 11:12:16 +02:00
parent 36bd52d3f1
commit ff947bb364

View File

@@ -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)