Example #1
0
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
Example #2
0
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()