Skip to content

Commit 50215f8

Browse files
committed
Add read function for surge.data
Also switches other functions that were using _convert_line to _parse_value
1 parent 7b0cb6e commit 50215f8

File tree

1 file changed

+42
-12
lines changed

1 file changed

+42
-12
lines changed

src/python/geoclaw/data.py

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"""
3030

3131
import os
32+
from pathlib import Path
3233
import numpy as np
3334
import warnings
3435

@@ -575,6 +576,43 @@ def __init__(self):
575576
self.add_attribute('storm_specification_type', 0) # Type of parameterized storm
576577
self.add_attribute("storm_file", None) # File containing data
577578

579+
def read(self, path: Path=Path("surge.data"), force: bool=False):
580+
"""Read surge data file"""
581+
582+
with Path(path).open() as data_file:
583+
# Header
584+
data_file.readline()
585+
data_file.readline()
586+
data_file.readline()
587+
data_file.readline()
588+
data_file.readline()
589+
data_file.readline()
590+
591+
self.wind_forcing = bool(data_file.readline())
592+
self.drag_law = int(data_file.readline().split("=:")[0])
593+
self.pressure_forcing = bool(data_file.readline().split("=:")[0])
594+
self.rotation_override = data_file.readline().split("=:")[0]
595+
data_file.readline()
596+
597+
self.wind_index = int(data_file.readline().split("=:")[0]) - 1
598+
self.pressure_index = int(data_file.readline().split("=:")[0]) - 1
599+
self.display_landfall_time = bool(data_file.readline().split("=:")[0])
600+
data_file.readline()
601+
602+
# AMR parameters
603+
self.wind_refine = self._parse_value(data_file.readline())
604+
self.R_refine = self._parse_value(data_file.readline())
605+
data_file.readline()
606+
607+
# Storm specification
608+
self.storm_specification_type = int(data_file.readline().split("=:")[0])
609+
line = data_file.readline().split("=:")[0]
610+
if line[0] == "'":
611+
self.storm_file = line.strip()[1:-1]
612+
else:
613+
raise IOError("Error reading storm file name.")
614+
615+
578616
def write(self, out_file='surge.data', data_source="setrun.py"):
579617
"""Write out the data file to the path given"""
580618

@@ -697,21 +735,14 @@ def read(self, path="friction.data", force=False):
697735
# Regions
698736
self.friction_regions = []
699737
for n in range(num_regions):
700-
lower = self._convert_line(data_file.readline())
701-
upper = self._convert_line(data_file.readline())
702-
depths = self._convert_line(data_file.readline())
703-
coeff = self._convert_line(data_file.readline())
738+
lower = self._parse_value(data_file.readline())
739+
upper = self._parse_value(data_file.readline())
740+
depths = self._parse_value(data_file.readline())
741+
coeff = self._parse_value(data_file.readline())
704742
self.friction_regions.append([lower, upper, depths, coeff])
705743
data_file.readline()
706744
self.friction_files = [] # Is not supported
707745

708-
def _convert_line(self, line):
709-
values = []
710-
for value in line.split("=:")[0].split(" "):
711-
if len(value) > 1:
712-
values.append(float(value))
713-
return values
714-
715746

716747
def write(self, out_file='friction.data', data_source='setrun.py'):
717748

@@ -911,4 +942,3 @@ def write(self,out_file='bouss.data',data_source='setrun.py'):
911942
self.data_write('bouss_min_depth')
912943

913944
self.close_data_file()
914-

0 commit comments

Comments
 (0)