Source code for NEDAS.models.qg.fortran.namelist

import os

[docs] def value_str(value): # convert values to string in namelist if isinstance(value, bool): if value: vstr = 'T' else: vstr = 'F' elif isinstance(value, str): vstr = "'"+value+"'" else: vstr = f'{value}' return vstr
[docs] def namelist(conf_dict, time, forecast_period, psi_init_type, member=0, dt_ratio=1, run_dir='.'): """Generate namelist for qg model Input: - m: Model class object with model configurations - dt_ratio: factor to multiply dt with """ # model time step dt = conf_dict['dt'] * dt_ratio forecast_days = float(forecast_period) / 24 dt_days = dt / conf_dict['tscale'] # number of time steps to run total_counts = forecast_days / dt_days #random number based on member and time idum = 1000*member + 100*time.month + 10*time.day + time.hour #initialize energy only if at creation of initial condition #while during cycling, read the input from previous cycle and don't normalize energy if psi_init_type == 'read': initialize_energy = False else: initialize_energy = True # start building the namelist content nmlstr = " &run_params\n" nmlstr += " kmax = "+value_str(conf_dict['kmax'])+"\n" nmlstr += " nz = "+value_str(conf_dict['nz'])+"\n" nmlstr += " F = "+value_str(conf_dict['F'])+"\n" nmlstr += " beta = "+value_str(conf_dict['beta'])+"\n" nmlstr += " adapt_dt = "+value_str(conf_dict['adapt_dt'])+"\n" nmlstr += " dt = "+value_str(dt)+"\n" nmlstr += " psi_init_file = 'input'\n" nmlstr += " psi_init_type = "+value_str(psi_init_type)+"\n" nmlstr += " initialize_energy = "+value_str(initialize_energy)+"\n" nmlstr += " e_o = "+value_str(conf_dict['e_o'])+"\n" nmlstr += " k_o = "+value_str(conf_dict['k_o'])+"\n" nmlstr += " delk = "+value_str(conf_dict['delk'])+"\n" nmlstr += " m_o = "+value_str(conf_dict['m_o'])+"\n" nmlstr += " z_o = "+value_str(conf_dict['z_o'])+"\n" nmlstr += " strat_type = "+value_str(conf_dict['strat_type'])+"\n" nmlstr += " deltc = "+value_str(conf_dict['deltc'])+"\n" nmlstr += " ubar_type = "+value_str(conf_dict['ubar_type'])+"\n" nmlstr += " delu = "+value_str(conf_dict['delu'])+"\n" nmlstr += " uscale = "+value_str(conf_dict['uscale'])+"\n" nmlstr += " use_topo = "+value_str(conf_dict['use_topo'])+"\n" nmlstr += " topo_type = "+value_str(conf_dict['topo_type'])+"\n" nmlstr += " k_o_topo = "+value_str(conf_dict['k_o_topo'])+"\n" nmlstr += " del_topo = "+value_str(conf_dict['del_topo'])+"\n" nmlstr += " use_forcing = "+value_str(conf_dict['use_forcing'])+"\n" nmlstr += " norm_forcing = "+value_str(conf_dict['norm_forcing'])+"\n" nmlstr += " forc_coef = "+value_str(conf_dict['forc_coef'])+"\n" nmlstr += " forc_corr = "+value_str(conf_dict['forc_corr'])+"\n" nmlstr += " kf_min = "+value_str(conf_dict['kf_min'])+"\n" nmlstr += " kf_max = "+value_str(conf_dict['kf_max'])+"\n" nmlstr += " filter_type = "+value_str(conf_dict['filter_type'])+"\n" nmlstr += " filter_exp = "+value_str(conf_dict['filter_exp'])+"\n" nmlstr += " filt_tune = "+value_str(conf_dict['filt_tune'])+"\n" nmlstr += " k_cut = "+value_str(conf_dict['k_cut'])+"\n" nmlstr += " rho_slope = "+value_str(conf_dict['rho_slope'])+"\n" nmlstr += " bot_drag = "+value_str(conf_dict['bot_drag'])+"\n" nmlstr += " therm_drag = "+value_str(conf_dict['therm_drag'])+"\n" nmlstr += " idum = "+value_str(idum)+"\n" nmlstr += " total_counts = "+value_str(total_counts)+"\n" nmlstr += " write_step = "+value_str(total_counts)+"\n" nmlstr += " diag1_step = "+value_str(total_counts)+"\n" nmlstr += " diag2_step = "+value_str(total_counts)+"\n" nmlstr += " /" # write the namelist to input.nml file with open(os.path.join(run_dir, 'input.nml'), 'wt') as f: f.write(nmlstr)