Source code for NEDAS.models.wrf.namelist

import os
import numpy as np
from NEDAS.utils.conversion import dt1h

[docs] def bool_str(value): if value: return '.true.' else: return '.false.'
[docs] def namelist(m, time, forecast_period, run_dir='.'): next_time = time + forecast_period * dt1h # #wps namelist.wps """ nmlstr = "&share\n" nmlstr += "wrf_core = 'ARW'," nmlstr += "max_dom = 2, nmlstr += "start_date = '2000-01-24_12:00:00','2000-01-24_12:00:00', nmlstr += "end_date = '2000-01-25_12:00:00','2000-01-24_12:00:00', nmlstr += "interval_seconds = 21600 nmlstr += "active_grid = .true., .true., nmlstr += "subgrid_ratio_x = 1 nmlstr += "subgrid_ratio_y = 1 nmlstr += "io_form_geogrid = 2, nmlstr += "opt_output_from_geogrid_path = './', nmlstr += "debug_level = 0 nmlstr += "/\n\n" nmlstr += "&geogrid\n" nmlstr += "parent_id = 1, 1, nmlstr += "parent_grid_ratio = 1, 3, nmlstr += "i_parent_start = 1, 31, nmlstr += "j_parent_start = 1, 17, nmlstr += "s_we = 1, 1, nmlstr += "e_we = 74, 112, nmlstr += "s_sn = 1, 1, nmlstr += "e_sn = 61, 97, nmlstr += "geog_data_res = 'default','default', nmlstr += "dx = 30000, nmlstr += "dy = 30000, nmlstr += "map_proj = 'lambert', nmlstr += "ref_lat = 34.83, nmlstr += "ref_lon = -81.03, nmlstr += "ref_x = 37.0, nmlstr += "ref_y = 30.5, nmlstr += "truelat1 = 30.0, nmlstr += "truelat2 = 60.0, nmlstr += "stand_lon = -98.0, nmlstr += "geog_data_path = '/glade/work/wrfhelp/WPS_GEOG/' nmlstr += "opt_geogrid_tbl_path = 'geogrid/' nmlstr += "/ nmlstr += "geog_data_res = 'modis_lakes+10m','modis_lakes+2m', nmlstr += "geog_data_res = 'usgs_lakes+10m','usgs_lakes+2m', nmlstr += "&ungrib nmlstr += "out_format = 'WPS', nmlstr += "prefix = 'FILE', nmlstr += "ec_rec_len = 26214508, nmlstr += "pmin = 100. nmlstr += "/ nmlstr += "&metgrid nmlstr += "fg_name = 'FILE' nmlstr += "constants_name = './TAVGSFC' nmlstr += "io_form_metgrid = 2, nmlstr += "opt_output_from_metgrid_path = './', nmlstr += "opt_metgrid_tbl_path = 'metgrid/', nmlstr += "process_only_bdy = 5, nmlstr += "/ nmlstr += "&mod_levs nmlstr += "press_pa = 201300 , 200100 , 100000 , nmlstr += "/\n\n" with open(os.path.join(run_dir, 'namelist.wps'), 'wt') as f: f.write(nmlstr) # wrf namelist.input nmlstr = f"&time_control\n" nmlstr += f"run_days = {int(forecast_period/24)},\n" nmlstr += f"run_hours = {int(forecast_period%24)},\n" nmlstr += f"run_minutes = {int(np.round(forecast_period - int(forecast_period)))},\n" nmlstr += f"run_seconds = 0,\n" nmlstr += f"start_year = 2019, 2019, nmlstr += f"start_month = 09, 09, nmlstr += f"start_day = 04, 04, nmlstr += f"start_hour = 12, 12, nmlstr += f"end_year = 2019, 2019, nmlstr += f"end_month = 09, 09, nmlstr += f"end_day = 06, 06, nmlstr += f"end_hour = 00, 00, nmlstr += f"interval_seconds = 10800 nmlstr += f"input_from_file = .true.,.true.,\n" nmlstr += f"history_interval = 60, 60,\n" nmlstr += f"frames_per_outfile = 1, 1,\n" nmlstr += f"restart = .false.,\n" nmlstr += f"restart_interval = 7200,\n" nmlstr += f"io_form_history = 2,\n" nmlstr += f"io_form_restart = 2,\n" nmlstr += f"io_form_input = 2,\n" nmlstr += f"io_form_boundary = 2,\n" nmlstr += f"/\n" nmlstr += "&domains nmlstr += "time_step = 90, nmlstr += "time_step_fract_num = 0, nmlstr += "time_step_fract_den = 1, nmlstr += "max_dom = 2, nmlstr += "e_we = 150, 220, nmlstr += "e_sn = 130, 214, nmlstr += "e_vert = 45, 45, nmlstr += "dzstretch_s = 1.1 nmlstr += "p_top_requested = 5000, nmlstr += "num_metgrid_levels = 34, nmlstr += "num_metgrid_soil_levels = 4, nmlstr += "dx = 15000, nmlstr += "dy = 15000, nmlstr += "grid_id = 1, 2, nmlstr += "parent_id = 0, 1, nmlstr += "i_parent_start = 1, 53, nmlstr += "j_parent_start = 1, 25, nmlstr += "parent_grid_ratio = 1, 3, nmlstr += "parent_time_step_ratio = 1, 3, nmlstr += "feedback = 1, nmlstr += "smooth_option = 0 nmlstr += "/ nmlstr += "&physics nmlstr += "physics_suite = 'CONUS' nmlstr += "mp_physics = -1, -1, nmlstr += "cu_physics = -1, -1, nmlstr += "ra_lw_physics = -1, -1, nmlstr += "ra_sw_physics = -1, -1, nmlstr += "bl_pbl_physics = -1, -1, nmlstr += "sf_sfclay_physics = -1, -1, nmlstr += "sf_surface_physics = -1, -1, nmlstr += "radt = 15, 15, nmlstr += "bldt = 0, 0, nmlstr += "cudt = 0, 0, nmlstr += "icloud = 1, nmlstr += "num_land_cat = 21, nmlstr += "sf_urban_physics = 0, 0, nmlstr += "fractional_seaice = 1, nmlstr += "/ nmlstr += "&fdda nmlstr += "/ nmlstr += "&dynamics nmlstr += "hybrid_opt = 2, nmlstr += "w_damping = 0, nmlstr += "diff_opt = 2, 2, nmlstr += "km_opt = 4, 4, nmlstr += "diff_6th_opt = 0, 0, nmlstr += "iff_6th_factor = 0.12, 0.12, nmlstr += "base_temp = 290. nmlstr += "damp_opt = 3, nmlstr += "zdamp = 5000., 5000., nmlstr += "dampcoef = 0.2, 0.2, nmlstr += "khdif = 0, 0, nmlstr += "kvdif = 0, 0, nmlstr += "non_hydrostatic = .true., .true., nmlstr += "moist_adv_opt = 1, 1, nmlstr += "scalar_adv_opt = 1, 1, nmlstr += "gwd_opt = 1, 0, nmlstr += "/ nmlstr += "&bdy_control nmlstr += "spec_bdy_width = 5, nmlstr += "specified = .true. nmlstr += "/ nmlstr += "&grib2 nmlstr += "/ nmlstr += "&namelist_quilt nmlstr += "nio_tasks_per_group = 0, nmlstr += "nio_groups = 1, nmlstr += "/ with open(os.path.join(run_dir, 'namelist.input'), 'wt') as f: f.write(nmlstr) """