Пример #1
0
 def get_component_instance(self):
     # Create Radiation Prognostic
     radiation = climt.RRTMGLongwave()
     # Create Convection Prognostic
     convection = climt.EmanuelConvection()
     # Create a SimplePhysics Prognostic
     boundary_layer = TimeDifferencingWrapper(climt.SimplePhysics())
     return GFSDynamicalCore([radiation, convection, boundary_layer])
Пример #2
0
    def __init__(self,
                 dt_seconds=1800,
                 nx=64,
                 ny=32,
                 nz=10,
                 state=None,
                 input_fields_to_store=input_vars,
                 output_fields_to_store=output_vars,
                 input_save_fn=None,
                 output_save_fn=None,
                 save_interval=6,
                 convection=None,
                 extra_components=[]):
        """
        Initialize model. Uses SSTs from Andersen and Kuang 2012.
        Creates initial state unless state is given.
        """
        climt.set_constants_from_dict(
            {'stellar_irradiance': {
                'value': 200,
                'units': 'W m^-2'
            }})

        self.model_time_step = timedelta(seconds=dt_seconds)
        self.step_counter = 0
        self.save_interval = save_interval

        # Create components
        if convection is None:
            convection = climt.EmanuelConvection(
                tendencies_in_diagnostics=True)
        simple_physics = TimeDifferencingWrapper(
            climt.SimplePhysics(tendencies_in_diagnostics=True))

        radiation = climt.GrayLongwaveRadiation(tendencies_in_diagnostics=True)

        components = [simple_physics, radiation, convection] + extra_components

        self.dycore = climt.GFSDynamicalCore(components,
                                             number_of_damped_levels=2)
        grid = climt.get_grid(nx=nx, ny=ny, nz=nz)

        if state is None:
            self.create_initial_state(grid)
        else:
            self.state = state

        if not input_save_fn is None:
            self.input_netcdf_monitor = NetCDFMonitor(
                input_save_fn,
                write_on_store=True,
                store_names=input_fields_to_store)
        if not output_save_fn is None:
            self.output_netcdf_monitor = NetCDFMonitor(
                output_save_fn,
                write_on_store=True,
                store_names=output_fields_to_store)
Пример #3
0
def test_scaling_implicit_output():

    simple_physics = climt.SimplePhysics()

    simple_physics = simple_physics.scaled_version(output_scale_factors=dict(
        air_temperature=0))

    state = climt.get_default_state([simple_physics])

    diagnostics, output = simple_physics(state, timedelta(hours=1))

    assert np.all(output['air_temperature'].values == 0)
fields_to_store = ['air_temperature', 'air_pressure', 'eastward_wind',
                   'northward_wind', 'air_pressure_on_interface_levels',
                   'surface_pressure', 'upwelling_longwave_flux_in_air',
                   'specific_humidity', 'surface_temperature',
                   'latitude', 'longitude',
                   'convective_heating_rate']

climt.set_constants_from_dict({
    'stellar_irradiance': {'value': 200, 'units': 'W m^-2'}})

model_time_step = timedelta(seconds=600)
# Create components


convection = climt.EmanuelConvection()
simple_physics = TimeDifferencingWrapper(climt.SimplePhysics())

constant_duration = 6

radiation_lw = UpdateFrequencyWrapper(
    climt.RRTMGLongwave(), constant_duration*model_time_step)

radiation_sw = UpdateFrequencyWrapper(
    climt.RRTMGShortwave(), constant_duration*model_time_step)

slab_surface = climt.SlabSurface()

dycore = climt.GFSDynamicalCore(
    [simple_physics, slab_surface, radiation_sw,
     radiation_lw, convection], number_of_damped_levels=5
)
Пример #5
0
    {'stellar_irradiance': {
        'value': 200,
        'units': 'W m^-2'
    }})

# Create components
dycore = climt.GFSDynamicalCore(number_of_longitudes=128,
                                number_of_latitudes=62,
                                number_of_damped_levels=5,
                                time_step=1200.)

model_time_step = dycore._time_step

convection = climt.EmanuelConvection(
    convective_momentum_transfer_coefficient=1)
simple_physics = climt.SimplePhysics()

simple_physics = simple_physics.prognostic_version()
simple_physics.current_time_step = model_time_step
convection.current_time_step = model_time_step

# run radiation once every hour
constant_duration = 3

radiation_lw = climt.RRTMGLongwave()
radiation_lw = radiation_lw.piecewise_constant_version(constant_duration *
                                                       model_time_step)

radiation_sw = climt.RRTMGShortwave(use_solar_constant_from_fortran=False)
radiation_sw = radiation_sw.piecewise_constant_version(constant_duration *
                                                       model_time_step)
Пример #6
0
 def get_component_instance(self):
     return climt.SimplePhysics(boundary_layer=False)
Пример #7
0
 def get_component_instance(self):
     return climt.SimplePhysics(boundary_layer=False,
                                use_external_surface_specific_humidity=True)