Пример #1
0
def main():
    args = parse_args()

    if 'fort.22' in args.storm:
        bt = BestTrackForcing.from_fort22(
            args.storm,
            nws=int(args.nws),
            start_date=args.start_date,
            end_date=args.end_date,
        )
    else:
        bt = BestTrackForcing(
            args.storm,
            nws=int(args.nws) if args.nws is not None else 20,
            start_date=datetime.strptime(args.start_date, '%Y%m%d%H')
            if args.start_date is not None else None,
            end_date=datetime.strptime(args.end_date, '%Y%m%d%H')
            if args.end_date is not None else None,
        )

    # print fort22
    if not args.quiet:
        print(str(bt))

    # show cheap plot
    if args.plot_track:
        bt.plot_track(show=True)

    # save fort22
    if args.save_path is not None:
        with open(Path(args.save_path), 'w') as output_file:
            output_file.write(str(bt))
Пример #2
0
def test_recompute_velocity():
    output_directory = OUTPUT_DIRECTORY / 'test_recompute_velocity'
    reference_directory = REFERENCE_DIRECTORY / 'test_recompute_velocity'

    if not output_directory.exists():
        output_directory.mkdir(parents=True, exist_ok=True)

    best_track = BestTrackForcing('irma2017', nws=8)

    best_track.dataframe['latitude'][5] += 0.1
    best_track.dataframe['longitude'][5] -= 0.1

    best_track.write(output_directory / 'irma2017_fort.22', overwrite=True)

    check_reference_directory(output_directory, reference_directory)
Пример #3
0
def main():
    # set storm name
    storm_name = 'Sandy2012'

    # set simulation dates
    start_date = datetime(2012, 10, 22)
    end_date = start_date + timedelta(days=5)

    # getting best track
    BT = BestTrackForcing(storm_name, start_date=start_date, end_date=end_date,)

    # write out original fort.22
    BT.write('original.22', overwrite=True)

    # extracting original dataframe
    df_original = BT.df

    # modifying the neccessary variables and
    # writing each to a new fort.22
    variable_list = ['central_pressure', 'max_sustained_wind_speed', 'radius_of_maximum_winds']
    alpha = [0.9, 1.1, 1.1]  # the multiplier for each variable
    for idx, var in enumerate(variable_list):
        print(var)
        # make a deepcopy to preserve the original dataframe
        df_modified = deepcopy(df_original)
        df_modified[var] = df_modified[var] * alpha[idx]
        # reset the dataframe
        BT._df = df_modified
        # write out the modified fort.22
        BT.write(var + '.22', overwrite=True)
Пример #4
0
 def __init__(self, args):
     super().__init__(args)
     bt = BestTrackForcing(self._args.storm_id)
     self.mesh.add_forcing(bt)
     if self._args.start_date is None:
         self._start_date = bt.start_date
         self._end_date = bt.end_date
     else:
         raise NotImplementedError("add custom date times?")
Пример #5
0
def test_plot_besttrack(mocker):
    input_directory = INPUT_DIRECTORY / 'test_plot_besttrack'

    best_track = BestTrackForcing.from_fort22(
        input_directory / 'florence2018_atcf.trk',
        nws=8,
    )

    mocker.patch('matplotlib.pyplot.show')
    best_track.plot_track(coastline=False)
Пример #6
0
    def __init__(self, args):

        LOGGER.info('Init BestTrackRunCommand')
        super().__init__(args)

        LOGGER.info(f'Init BestTrackForcing for {self.args.storm_id}')
        bt = BestTrackForcing(self.args.storm_id)

        LOGGER.info('Clip BestTrackForcing to bbox')
        if self.args.clip:
            bt.clip_to_bbox(self.mesh.get_bbox(output_type='bbox'),
                            self.mesh.crs)

        if args.start_date is None:
            self.start_date = bt.start_date
        else:
            self.start_date = datetime.strptime(args.start_date,
                                                '%%Y-%%m-%%dT%%H')

        if args.run_days is None:
            self.end_date = bt.end_date
        else:
            self.end_date = self.start_date + timedelta(days=args.run_days)

        bt.start_date = self.start_date
        bt.end_date = self.end_date

        self.mesh.add_forcing(bt)
Пример #7
0
def main():
    args = parse_args()
    bt = BestTrackForcing(
        args.storm_id,
        start_date=datetime.strptime(args.start_date, '%Y%m%d%H')
        if args.start_date is not None else None,
        end_date=datetime.strptime(args.end_date, '%Y%m%d%H')
        if args.end_date is not None else None,
    )

    # print fort22
    if not args.quiet:
        print(str(bt))

    # show cheap plot
    if args.plot_track:
        bt.plot_trajectory(show=True)

    # save fort22
    if args.save_path is not None:
        with open(Path(args.save_path), 'w') as output_file:
            output_file.write(str(bt))
Пример #8
0
def test_from_fort22():
    input_directory = INPUT_DIRECTORY / 'test_from_fort22'
    output_directory = OUTPUT_DIRECTORY / 'test_from_fort22'
    reference_directory = REFERENCE_DIRECTORY / 'test_from_fort22'

    if not output_directory.exists():
        output_directory.mkdir(parents=True, exist_ok=True)

    best_track = BestTrackForcing.from_fort22(
        fort22=input_directory / 'irma2017_fort.22', nws=20,
    )

    assert best_track.storm_id == 'AL112017'
    assert best_track.name == 'IRMA'

    best_track.write(output_directory / 'irma2017_fort.22', overwrite=True)

    check_reference_directory(output_directory, reference_directory)
Пример #9
0
def test_from_atcf(mocker):
    input_directory = INPUT_DIRECTORY / 'test_from_atcf'
    output_directory = OUTPUT_DIRECTORY / 'test_from_atcf'
    reference_directory = REFERENCE_DIRECTORY / 'test_from_atcf'

    if not output_directory.exists():
        output_directory.mkdir(parents=True, exist_ok=True)

    best_track = BestTrackForcing.from_atcf_file(
        atcf=input_directory / 'florence2018_atcf.trk', nws=8,
    )

    assert best_track.storm_id is None
    assert best_track.name == 'WRT00001'

    best_track.write(output_directory / 'florence2018_fort.22', overwrite=True)

    check_reference_directory(output_directory, reference_directory)

    mocker.patch('matplotlib.pyplot.show')
    best_track.plot_track(show=True, coastline=False)
Пример #10
0
def main():
    args = parse_args()
    bt = BestTrackForcing(args.storm_id)
    print(bt.fort22)