Ejemplo n.º 1
0
def run_storm_job(first_storm=0,
                  last_storm=0,
                  wind_model='holland80',
                  amr_level=2):
    r"""
    Setup jobs to run at specific storm start and end.  
    """

    # Path to file containing log of storms run
    path = os.path.join(os.environ.get('DATA_PATH',
                                       os.getcwd()), "square_basin",
                        "square-basin-storm-%i-%i" % (first_storm, last_storm),
                        "run_log.txt")

    if not os.path.exists(path):
        os.makedirs(os.path.dirname(path))

    # File to tracy synthetic storm in atcf format
    tracy_atcf_path = 'data/tracy_synthetic_atcf.storm'

    # Establish a control form of tracy
    control = Storm(path=tracy_atcf_path, file_format='ATCF')
    control.read_atcf(path=tracy_atcf_path)

    # Change tracy to piece wise constant wind curve
    u0 = control.max_wind_speed[1]
    control.max_wind_speed = piecewise_wind_curve(u0, control.max_wind_speed)
    control.write("data/tracy_geoclaw.storm", file_format="geoclaw")

    # Get a general storm path
    #data_path = os.path.join(os.getcwd(), "../../../data")
    #storms_path = os.path.join(data_path, "storms")
    #tracks = os.path.join(storms_path, "geoclaw-mumbai-tracks")
    tracks = os.path.join(os.getcwd(), "data", "synthetic_storm_files")

    num_storms = 1000

    #storm_gauges = [(72.811790, 18.936508), (72.972316, 18.997762),
    #                (72.819311, 18.818044)]
    #regions_data = []

    #regions_data.append([2, 5, 70, 75, 17, 22])
    ## Mumbai
    #regions_data.append([4, 7, 72.6, 73, 18.80, 19.15])

    storm_gauges = None
    regions_data = None

    num_storms = 1000

    with open(path, 'w') as run_log_file:
        jobs = []

        for n in range(0, num_storms):

            storm = copy.copy(control)
            mws = copy.copy(control.max_wind_speed)
            mws = perturb_wind(mws)
            C0 = 218.3784 * numpy.ones(len(mws))
            mwr = C0 - 1.2014 * mws + (mws / 10.9884)**2 - (
                mws / 35.3052)**3 - 145.5090 * numpy.cos(
                    control.eye_location[:, 1] * 0.0174533)

            storm.max_wind_speed = mws
            #storm.max_wind_radius = mwr

            # Name storm file and write to log
            storm_name = 'SquareBasin_%s.storm' % str(n)
            run_log_file.write("%s %s\n" % (n, '%s' % storm_name))

            # Add job to queue
            jobs.append(
                StormJob(run_number=n,
                         storm_directory=tracks,
                         storm_object=storm,
                         wind_model=wind_model,
                         amr_level=amr_level,
                         storm_ensemble_type="Synthetic",
                         region="SquareBasin",
                         gauges=storm_gauges,
                         regions=regions_data))
            #num_storms = 1

            if n == num_storms - 1:
                #controller = StormHabaneroBatchController(jobs)
                controller = batch.HabaneroBatchController(jobs)
                controller.email = '*****@*****.**'
                print(controller)
                controller.run()
                jobs = []
                break
    return jobs
Ejemplo n.º 2
0
        error = numpy.random.normal(loc=1)
        max_wind_speed[i] = max_wind_speed[i] + error

    return max_wind_speed


directory = "data/synthetic_storm_files"
if not os.path.exists(os.path.join(os.getcwd(), directory)):
    os.makedirs(directory)

# File to tracy synthetic storm in atcf format
tracy_atcf_path = 'data/tracy_synthetic_atcf.storm'

# Establish a control form of tracy
control = Storm(path=tracy_atcf_path, file_format='ATCF')
control.read_atcf(path=tracy_atcf_path)

# Change tracy to piece wise constant wind curve
u0 = control.max_wind_speed[1]
control.max_wind_speed = piecewise_wind_curve(u0, control.max_wind_speed)
control.write("data/tracy_geoclaw.storm", file_format="geoclaw")

perturbed_radii = []
perturbed_winds = []

# Create storm objects with perturbed wind data
for i in range(0, 1000):
    storm = copy.copy(control)
    mws = copy.copy(control.max_wind_speed)
    mws = perturb_wind(mws)
    C0 = 218.3784 * numpy.ones(len(mws))