def read_recording_data(data, path=None): """ Reads in ``fort.15`` and stores the following in data as a :class:`~polyadcirc.pyADCIRC.basic.time` object (``DT``, ``STATIM``, ``RNDAY``, ``DRAMP``) Calulcates and stores: * recording[key] = (meas_locs, total_obs, irtype) * stations[key] = list() of locations :type data: :class:`~polyadcirc.run_framework.domain` :param data: object to store reference to :class:`~polyadcirc.pyADCIRC.basic.time` :type path: string or None :param path: directory containing ``fort.15`` file :return: reference to ``data.recording`` and ``data.stations`` :rtype: :class:`~polyadcirc.pyADCIRC.basic.time` """ if path is None: path = os.getcwd() file_name = os.path.join(path, 'fort.15') data.stations = {} data.recording = {} with open(file_name, 'r+') as fid: line = fid.readline() while line != '': if line.find('DT') >= 0: line = line.partition('!') dt = float(line[0].strip()) # pylint: disable=C0103 elif line.find('IHOT') >= 0: line = line.partition('!') ihot = int(line[0].strip()) data.ihot = ihot elif line.find('STATIM') >= 0: line = line.partition('!') statim = float(line[0].strip()) elif line.find('RNDAY') >= 0: line = line.partition('!') rnday = float(line[0].strip()) elif line.find('DRAMP') >= 0: line = line.partition('!') dramp = np.fromstring(line[0].strip(), sep=' ') #float(line[0].strip()) data.time = basic.time(dt, statim, rnday, dramp) elif line.find('H0') >= 0: line = line.partition('!')[0] line = np.fromstring(line, sep=' ') data.h0 = np.fromstring(line[0])[0] elif line.find('UNIT 61') >= 0: line = line.partition('!') _read_record(fid, 'fort61', line, data) elif line.find('UNIT 62') >= 0: line = line.partition('!') _read_record(fid, 'fort62', line, data) elif line.find('NOUTC') >= 0: line = line.partition('!') #_read_record(fid, 'fort91', line, dt, data) elif line.find('UNIT 71/72') >= 0: line = line.partition('!') _read_record7(fid, 'fort71', 'fort72', line, data) elif line.find('NOUTGE') >= 0: line = line.partition('!') _read_record(fid, 'fort63', line, data) elif line.find('UNIT 64') >= 0: line = line.partition('!') _read_record(fid, 'fort64', line, data) elif line.find('NOUTGC') >= 0: line = line.partition('!') #_read_record(fid, 'fort93', line, dt, data) elif line.find('UNIT 73/74') >= 0: line = line.partition('!') _read_record7(fid, 'fort73', 'fort74', line, data) line = fid.readline() return data.time
def subdomain(fulldomain_path, subdomain_path): """ Create a modifed ``fort.15`` for the subdomain at ``subdomain_path``. * Reduce RNDAY by 0.05% * Set NBFR to 0 * Remove periodic forcing boundary frequencies * Remove recording stations outside of the subdomain grid and update the number of stations accordingly :param int flag: type of subdomain 0 - ellipse, 1 - circle :param string fulldomain_path: fulldomain dir containing ``fort.15`` file :param string subdomain_path: subdomain dir containing ``fort.15`` file """ class fdata(object): """ Storage class for station information """ def __init__(self): self.stations = {} self.recording = {} data = fdata() fullfile = os.path.join(fulldomain_path, 'fort.15') subfile = os.path.join(subdomain_path, 'fort.15') with open(fullfile, 'r') as fid_read, open(subfile, 'w') as fid_write: line = fid_read.readline() while line != '': if line.find('DT') >= 0: fid_write.write(line) line = line.partition('!') dt = float(line[0].strip()) # pylint: disable=C0103 elif line.find('STATIM') >= 0: fid_write.write(line) line = line.partition('!') statim = float(line[0].strip()) elif line.find('RNDAY') >= 0: line = line.partition('!') rnday = float(line[0].strip())*0.995 fid_write.write(' {:<6.3f} {:>30}{}'.format(rnday, '!', line[-1])) elif line.find('DRAMP') >= 0: fid_write.write(line) line = line.partition('!') dramp = np.fromstring(line[0].strip(), sep=' ', dtype=float) data.time = basic.time(dt, statim, rnday, dramp) elif line.find('NBFR') >= 0: line = line.partition('!') fid_write.write(' {:<35d} {}{}'.format(0, '!', line[-1])) line = line[0] while not line.find('ANGINN') >= 0: line = fid_read.readline() fid_write.write(line) elif line.find('NFFR') >= 0: while not line.find('NOUTE') >= 0: line = fid_read.readline() fid_write.write(line) line = line.partition('!') description = _read_record(fid_read, 'fort61', line, data) _write_record(fid_write, 'fort61', description, data) elif line.find('UNIT 62') >= 0: fid_write.write(line) line = line.partition('!') description = _read_record(fid_read, 'fort62', line, data) _write_record(fid_write, 'fort62', description, data) elif line.find('NOUTC') >= 0: fid_write.write(line) line = line.partition('!') #description = _read_record(fid_read, 'fort91', line, dt, data) #_write_record(fid_write, 'fort91', description, data) elif line.find('UNIT 71/72') >= 0: fid_write.write(line) line = line.partition('!') description = _read_record7(fid_read, 'fort71', 'fort72', line, data) _write_record(fid_write, 'fort71', description, data) else: fid_write.write(line) line = fid_read.readline()