Giter VIP home page Giter VIP logo

climt's Introduction

climt

PyPI Continuous Integration Continuous Integration Coverage Documentation Status Zenodo DOI

./docs/climt_logo.jpg

climt is a Toolkit for building Earth system models in Python. climt stands for Climate Modelling and Diagnostics Toolkit -- it is meant both for creating models and for generating diagnostics (radiative fluxes for an atmospheric column, for example). However, since it might eventually include model components for purposes other than climate modelling (local area models, large-eddy simulation), we prefer to keep the abbreviation un-expanded!

climt hopes to enable researchers to easily perform online analysis and make modifications to existing models by increasing the ease with which models can be understood and modified. It also enables educators to write accessible models that serve as an entry point for students into Earth system modeling, while also containing state-of-the-art components.

Initially climt contains only components for the atmosphere, and does not yet include a coupler. But there are plans to extend climt to a fully coupled Earth system model in the future. The toolkit is also written in such a way that it could enable the development of non-climate models (e.g. weather prediction, large-eddy simulation). To do so requires only that the prognostic and diagnostic schemes are wrapped into the correct Python-accessible interface.

climt builds on sympl, which provides the base classes and array and constants handling functionality. Thanks to sympl and Pint, climt is also a fully units aware model. It is useful to know how sympl works to use climt better. Read more about sympl at https://sympl.readthedocs.io.

Installation

Note - The GFS dynamical core has been made into a seperate package called gfs_dynamical_core for ease of maintenance. If you need the dynamical core, please install this package from source or directly using pip. Doing this will automatically install climt as well.

pip install gfs_dynamical_core

climt can be installed directly from the python package index using pip.

pip install climt

should work on most systems. From version 0.9.2 onwards, this command will install binary wheels, eliminating the requirement of a compiler on your system.

Detailed instructions for Mac and Linux systems are available in the documentation.

Features

  • climt is fully units-aware!
  • Uses the xarray DataArray abstraction to build self describing model arrays.
  • Provides different levels of abstraction towards building a climate model.
  • Like sympl, climt consciously uses descriptive names in the user API to ensure model scripts are self-documenting.
  • Allows for quick prototyping of earth system model components.
  • Provides a clean and convenient interface to add new components.

Citing climt

If you use climt in your research, please cite the following paper documenting sympl and climt

https://www.geosci-model-dev.net/11/3781/2018/

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

climt's People

Contributors

ai33l avatar joymonteiro avatar lkluft avatar mcgibbon avatar monalivadje avatar sallyda avatar skosukhin avatar suhasdl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

climt's Issues

rename solar_cycle_fraction

In the RRTM SW wrapper, solar_cycle_fraction could use a more descriptive name, which specifically says what cycle it's a fraction of. But I don't know what that cycle is. What would be a good name?

Require minimum horizontal dim size for GFS

The GFS code will crash if the horizontal dimensions are not sufficiently large. I don't know exactly the minimum value, but it's more than 8 and less than or equal to 18. We should add checks to GFS that will raise informative exceptions if the minimum size is not met, to avoid a non-descriptive segmentation fault.

@JoyMonteiro do you know the minimum size?

Initialize horizontal grid externally to GFS

Currently GFS has an internal representation for longitude and latitude which appear to never be put into the state, and the initialization code simply sets latitude and longitude to zero. Instead the initialization code should set a lat/lon grid, and GFS should run checks to make sure that the grid passed is as expected when it is called. Ideally on the first call, GFS would read the model state to determine the appropriate Fortran initialization arguments for the grid, and call those.

Ozone profile data missing

  • CliMT version: Latest
  • Python version: 3
  • Operating System: Colaboratory

Description

Trying to load the default state, but the file is missing

What I Did

 state = get_default_state([simple_physics, convection,
                                 radiation_lw, radiation_sw, slab])

Error:

  No such file or directory: '/usr/local/lib/python3.6/dist-packages/climt/_data/ozone_profile.npy  

pip install can't find required libraries

  • CliMT version: 0.9.1
  • Python version: 2.7.13
  • Operating System: CentOS

Description

Trying to pip install CliMT. Got some GCC errors, particularly the following:

    gcc: error: /tmp/pip-build-k_D69F/climt/climt/_lib/Linux//libgfs_dycore.a: No such file or directory
    gcc: error: /tmp/pip-build-k_D69F/climt/climt/_lib/Linux//libshtns_omp.a: No such file or directory
    gcc: error: /tmp/pip-build-k_D69F/climt/climt/_lib/Linux//libfftw3_omp.a: No such file or directory
    gcc: error: /tmp/pip-build-k_D69F/climt/climt/_lib/Linux//libfftw3.a: No such file or directory
    gcc: error: /tmp/pip-build-k_D69F/climt/climt/_lib/Linux//libopenblas.a: No such file or directory
    error: command 'gcc' failed with exit status 1

Maybe there are files missing in the manifest? I'm attaching the full log from the pip install.

log.txt

Refactor Emanuel convection to support non-contiguous arrays

Currently the Emanuel convection Fortran code is written to only work on contiguous vertical columns. Since the GFS dynamical core only works on contiguous horizontal slices, that means array copying has to occur between calls to these two components. We could re-factor the Emanuel Fortran code to avoid this.

Simplify code structure of components using Sympl helper functions

Currently the component objects used by CliMT (e.g. ClimtPrognostic) are fairly complex, in that they give user components inherited methods that aren't explicitly defined but will be used within their code. The objects also use multiple inheritance, which can be confusing to scientific programmers with less knowledge of object-oriented programming, and less readable even if they are knowledgeable.

Since Sympl added some helper functions for retrieving/storing numpy arrays in states, the functionality these structures currently give can be provided without any new classes. We should refactor the code to use this new style.

solar constant

Hi,
I am working on a simple model using RRTMG thanks to the nice python wrapper you have written :) I would like to use it with a constant solar constant (no variability), but a different value to the standard one. I am currently using CliMT version 0.9.1 and have achieved this by changing the value in the init of the RRTMGShortwave class. I notice you have changed this in the development version of CliMT.
Please could you make a more user friendly way of changing this value? The aim is to make our model easy for other people to use, so that they run our model with CliMT installed but without needing to edit it.
Thanks,
Sally

Add support for additional tracers to Emanuel Convection

What the title says. This should be done by taking in specifications of arbitrary tracers to be advected at initialization time, which get added into the properties dictionaries. These can be packed into whatever kind of array the Fortran code requires.

Option on DcmipInitialConditions unclear

The DcmipInitialConditions object has an option add_perturbation with the docstring Whether a perturbation must be added. Only applies to the baroclinic wave test.. What does this mean? what does it mean for a perturbation to need to be added? A perturbation on the normal initial conditions? What kind of perturbation? We should clear up this description.

Remove all required tracers from GFS

The Fortran code for GFS appears to never actually use any of the tracers (including specific humidity), other than to assign them into its tracer arrays and advect those arrays. We should refactor the code so that all tracer array preparation occurs in Python, and the Fortran code can accept zero-sized tracer arrays. Then GFS will use only the tracers registered with Sympl. CliMT could choose to register certain tracers with Sympl.

Passing physical constants

I've been wondering whether passing in physical constants on initialization to components is actually a good idea. Perhaps we should always use the constant included in sympl.default_constants? This would greatly simplify the docstrings and call signatures of components, and more effectively ensures consistent models.

If people really want to, they should be able to give components different values by having different ones in default_constants on initialization. We can accomplish this by storing the current value in self._constant_name on initialization, like we do already.

pip install fails on older Cython

  • CliMT version: 0.9.1
  • Python version: 2.7.13
  • Operating System: CentOS

Description

pip install fails when using Cython 0.23. Updating to Cython 0.27.3 fixed this issue. Should probably require a newer version of Cython (I don't know how new).

What I Did

[mcgibbon@stcu python]$ pip install climt
Collecting climt
  Downloading climt-0.9.1.tar.gz (20.9MB)
    100% |████████████████████████████████| 20.9MB 20kB/s
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-djV6KO/climt/setup.py", line 5, in <module>
        from Cython.Build.Distutils import build_ext as native_build_ext
    ImportError: No module named Distutils

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-djV6KO/climt/

RRTMG .pyx files exist in two places

Currently _rrtmg_lw.pyx exists in both e.g. climt/_components/rrtmg/lw and in climt/_lib/rrtmg/lw (similarly for _rrtmg_sw.pyx). I'm sure only one of these is actually used - we should delete the other one.

Which one is actually used?

Swap array ordering on components

One thing we've worried about a lot in working on CliMT is array ordering, especially C versus F ordering. After looking at the code, what we're currently doing is a little strange, and could be okay, but we should think about it and decide if we want to change it. Our two main considerations are that we want to minimize array copying, and we want things to work.

TL;DR: We should probably swap the dimension ordering on components.

How things currently work:

  • We decided on a consistent dimension ordering among components, so that swapping dimensions between components isn't necessary. Currently that's [horizontal, vertical] or [x, y, z], in C-ordering.
  • The column-wise Fortran codes are generally written to take in arrays in [horizontal, vertical] (or [column, vertical]) order in F-ordering. This corresponds to [vertical, horizontal] in C-ordering. If we had any non-one number of columns passed into the Fortran codes, this would cause an error. However, the way we've written the wrappers, they pass in one column at a time to the Fortran code, so the ordering of the Fortran dimensions is actually irrelevant.

Some changes we might want to make:

  • The code might run faster if we passed in multiple columns to the Fortran code at once, but I'm not sure. This would require testing. It would be the difference between applying a function F to each column of the model sequentially, and taking all columns and applying each step of the function F to all those columns at once. If we wanted to do this, we would need to switch CliMT's array ordering to be [vertical, horizontal].
  • I suppose we should probably just do whatever the dynamical core does? Which I think involves switching CliMT's array ordering to be [vertical, horizontal]. If we don't, we definitely need to copy when calling the dynamical core. If we switch the ordering for this reason, we must pass multiple columns at once to the Fortran codes, or we'd again have array copying.
  • After switching, CliMT's Python and Fortran codes would use the same memory ordering arrays, [vertical, horizontal] in the C-ordered Python code, and [horizontal, vertical] in the F-ordered Fortran code.

Refactor RRTMG to avoid copying data

Currently the RRTMG wrappers create two sets of arrays when calling RRTMG. One that gets returned to Sympl, and one that gets passed to the Fortran code to get set. It should be possible to use the same arrays for both, in a way that uses C-ordering in Python and F-ordering in the Fortran code.

I'll try to do this refactor once things are updated for Sympl 0.4.0.

surface_specific_humidity missing

  • CliMT version: Latest
  • Python version: 3
  • Operating System: Linux

Description

I'm trying to use CliMT for convection development, but it does not get the surface specific humidity from the default state for some reason.

Relevant part of the code:

rad_sw = RRTMGShortwave()
rad_lw = RRTMGLongwave()
convection = EmanuelConvection()
slab = SlabSurface()
simple_physics = SimplePhysics(use_external_surface_specific_humidity=False)
time_stepper = AdamsBashforth([rad_sw, rad_lw, convection, slab])
timestep = timedelta(hours=3)

mid_levels = {'label': 'mid_level',
              'values': np.arange(60),
              'units': ''}

int_levels = {'label': 'interface_level',
              'values': np.arange(61),
              'units': ''}
state = get_default_state([rad_sw, rad_lw, convection, slab], mid_levels=mid_levels, interface_levels=int_levels)


for i in range(101):
  
    convection.current_time_step = timestep
    diagnostics, state = time_stepper(state, timestep)
    state.update(diagnostics)
    diagnostics, new_state = simple_physics(state, timestep)
    state.update(diagnostics)
    if i % 2 == 0:
        monitor.store(state)

I get the following error:

/usr/local/lib/python3.6/dist-packages/climt/_components/simple_physics/component.py in __call__(self, state, timestep)
    201         T = get_numpy_array(state['air_temperature'].to_units('degK'), ['x', 'y', 'z'])
    202         q = get_numpy_array(state['specific_humidity'].to_units('g/g'), ['x', 'y', 'z'])
--> 203         q_surface = get_numpy_array(state['surface_specific_humidity'].to_units('g/g'), ['x', 'y'])
    204 
    205         Ts = get_numpy_array(state['surface_temperature'].to_units('degK'), ['x', 'y'])

KeyError: 'surface_specific_humidity'

Complex GFS case: tracers prognosed by contained Prognostic

As we update GFS, we should ensure we solve the following case. A Prognostic may prognose some quantity X that is registered as a tracer with GFS. We need to ensure that its tendency is added to its corresponding entry in tracer tendencies in GFS.

RRTMG options should be descriptive strings when possible

Currently kwargs for RRMTG are integers, which requires a user to read the docstring to understand what the code is doing. Where possible, we should try to use descriptive strings or booleans.

I'll work on this in my refactor of RRTMG to use the new _properties dictionaries.

Upgrading to sympl 0.4.0

sympl 0.4.0 will bring a lot of changes which are incompatible with climt as it currently is. We will need to

  • Change code so that 'x', 'y' wildcards are no longer used anywhere. This will require registering dimension names in get_default_state() which will be used to create the *_properties during run time.
  • Get rid of all irrelevant code in ArrayHandler.
  • Change all components to use the array_call interface
  • New TimeSteppers won't work in convection schemes. Need to write new ones.

Not directly related, but desirable:

  • If possible, figure out and move most memory allocation to 'c' format

I will keep updating this list as and when I figure out new requirements.

Components could avoid some copying

Currently calls to Emanuel convection will initialize 1-d arrays to which each column gets copied and then operated on by the Fortran code. We could instead directly pass a reference to each column to the Fortran code, avoiding a copy of something like 10 variables.

There may be other objects where this is also the case.

This isn't very high priority for me right now (it affects performance only) and I don't currently have an environment set up to compile and run CliMT, and I'm in the process of working on a very large number of changes for Sympl 0.4.0, so I won't be working on this right now, but it's something we should do at some point.

Some questions about GFS

As I'm looking to refactor GFS to fit the new Sympl version, a few questions are coming up.

  1. What should GFS really be? Is it an Implicit or a TimeStepper? Right now I'm leaning towards an Implicit for certain reasons. Specifically, you cannot supply GFS with an arbitrary Prognostic that computes a tendency for an arbitrary quantity and expect it will time step it. GFS will only step forward specific quantities as well as tracers.

  2. It seems to me that it is not actually necessary for those four quantities to be tracers in GFS. There is some Fortran code that keeps track of which index is which quantity. But as far as I can tell those indices are never used in GFS, which makes sense, since they're passive tracers. When I refactor, I plan to refactor the code so no tracers are mandatory.

  3. There are lines

        raw_output_arrays['air_pressure_on_interface_levels'][:] = \
            raw_output_arrays['air_pressure_on_interface_levels'][:, :, ::-1]

which flip the vertical ordering of air_pressure_on_interface_levels, but similar lines do not flip the vertical ordering for any other variables. What vertical ordering does GFS require, and is it different for different variables?

  1. What is the purpose of the following:
        mylist = ['air_pressure']

        for quantity in mylist:
            raw_output_arrays[quantity][:] = raw_input_arrays[quantity][:]

        [...]

        for quantity in mylist:
            raw_input_arrays[quantity][:] = raw_output_arrays[quantity][:]

Descriptive variable names in SCM example

In the example script radiative_equilibrium_rrtmg.py, the names tp_profiles and mol_profiles could be more descriptive. Perhaps they should be named thermodynamic_profiles and mole_fraction_profiles? The arrays could also be saved in a npz file, which allows dictionary lookup on its contents, so that the standalone npz file describes what's inside it without needing to know beforehand.

Inconsistent `stellar_irradiance` and downwelling shortwave flux

  • CliMT version: 0.9.1
  • Python version: 3.6.3
  • Operating System: Red Hat Enterprise Linux Server release 6.9 (Santiago)

Description

First of all thanks for the awesome work you are doing! 👍

I am using CliMT as a wrapper for RRTMG to calculate radiative fluxes and heatingrates. For my calculations I need to change the stellar_irradiance to different values (working together with Sally, #19 ). While doing so I found a disagreement between the stellar_irradiance and the downwelling shortwave flux at the top of the atmosphere. For a zenith angle of 0 degree both values should be exactly the same.

What I Did

When using the CliMT default state the stellar_irradiance is set to 1367.0 but the downwelling shortwave flux calculated is 1414.91 which seems odd. I found that the factor of 1.035 between both values is consistent when using other stellar_irradiance values, too. This may point to an issue with the normalisation of the irradiance?

Unfortunately our calls to CliMT are deeply embedded in our model setup which makes it hard to copy and paste the affected code. My test simulation basically consists of a standard atmosphere without any aerosols or CFCs.

It would be really cool if you could reproduce the bug. Even if not you may have some ideas what could cause this behaviour. I am happy to provide further information when needed!

Cheers,
Lukas

How to cite CliMT?

Hey,

I have a more general issue absolutely unrelated to the code 😉

We developed a simple climate model using the radiation part of CliMT. As we are about to publish first results I want to know if there is a preferred way to cite or at least acknowledge your work?

Cheers,
Lukas

Centralize initialization information

Some objects like RRTMG have information about default initial values. This should probably be moved to the central location where this information is stored in CliMT, so that it is in one easier-to-find place. At least, it doesn't make sense to specify some default values/initialization functions for quantities but not others. Another solution would be to specify initialization values/functions for all quantities within all objects.

Update CliMT initialization handling and component dimensions

I'm proposing the following changes to the way properties dictionaries and initialization are configured on CliMT, which I can hopefully implement in a fairly short period of time.

Components:

  • require specific dimension names if they care about that dimension in some way, for example the dynamical core likely cares what the horizontal and vertical dimensions are, and will have no wildcards. The dimension names should be static (not customizable), so that they are guaranteed to be properly documenting.
  • use "*" to collect any dimensions they do not care about. For example, a column parameterization would for a mid-level variable require dims to be ["*", "mid_levels"]. SimplePhysics should likely be like this, since it only needs latitude as a variable and doesn't care about the configuration of the latitudinal grid (as I understand it).
  • make it so the default grid specification from get_default_state should not result in array copying on input when collecting dimensions using ["*", "mid_levels"]. This is pretty easy to achieve.
  • specify their properties dictionaries explicitly, potentially with the use of helper functions to reduce boilerplate code. I will figure out those helper functions by initially writing out the properties for a component manually, and thinking about how any unnecessary boilerplate could be reduced. I will look at the existing functions that do this for reference.
  • check arrays for contiguity before passing into any Fortran code, and copy the data to a contiguous array if necessary using np.ascontiguousarray. The default array configuration should not result in copying after collecting dimensions using ["*", "mid_levels"] (this should also be pretty easy to achieve).

Initialization:

  • should have a simple mode as it currently does where you just pass in a set of components and get a reasonable global state.
  • should have an additional mode where you use one function to get a "grid" state (that sets longitude and latitude with the number of dimensions you want), and that "grid" state can be used to get the full state. This could look something like:
grid_state = get_grid(*args, **kwargs)
state = get_default_state(component_list, grid_state=grid_state)
  • This mode would allow users to manually specify their horizontal and vertical grids, but still get the utility of automatic default variables. The grid state could have only a vertical dimension with longitude and latitude as 0-dimensional scalars if a user wants a single-column model.

Ideally I can implement all of this in about a week for @JoyMonteiro to review, including the changes necessary on all components.

Ensuring non-negativity of tracers for GFS

Should GFS actually be the component to ensure that moisture and other tracers are non-negative, or should there be a component called after GFS which does so? For example, a user might have tracers which are okay to go negative, or might want to ensure global conservation of moisture. Currently the only way to modify this behavior is to modify GFS, but instead it could be that the user swaps out different components outside of the model. We could have a flag make_tracers_nonnegative=False (or True) on initialization if you like.

Only update spectral arrays that have been modified

In GFS, currently if any arrays have been modified then all spectral arrays will be re-generated. However, we only need to re-generate those spectral arrays whose physical counterpart has been modified.

Implement full DCMIP initial conditions

There's a note in the DcmipInitialConditions code that said "TODO: Implement full DCMIP ICs". I'm deleting that comment and opening an issue here so we can better track it.

Outdated docs?

The docs seem to be outdated for EmanuelConvection. No idea why, if you're using autodoc.

Refactor IceSheet to use array parallelism

Currently the IceSheet object operates on each column within a Python for loop. Many of the operations could be written using array parallelism, which would run a lot faster. This would be purely a performance enhancement.

Possible bug in GFS tracer advection

Lines 171-174 of phy_run_hs.f90:

do trac=2,ntrac
    temp_grid_tracer(:,:) = dtracergdt(:,:,k,ntrac)
        call grdtospec(temp_grid_tracer, spectral_tracer_tend(:,k,ntrac))
enddo

I suspect that the lines within this do loop should be referring to trac and not ntrac, so that they actually iterate over the tracers instead of repeatedly processing the final tracer?

Using CliMT for correlation between convection and CO2

  • CliMT version: Latest
  • Python version: 3
  • Operating System: Unbutu on Virtual Machine

Description

I am trying to use CliMT in order to see how the SST and CO2 effect atmospheric convection.
I've tried using your slab example from GitHub with some CO2 changes and SST forcing inside the loop - but I get no change in the convection heating rate, and numerical blowup after ~150 iterations (after debugging I saw that it might be because there is one value of temperature on ~500mb that is decreasing faster then the rest of the column).

Any Ideas what is wrong?
Or any suggestions on how to see the convection and its relation to CO2 and SST in CliMT?

What I Did

from sympl import (
    DataArray, AdamsBashforth, PlotFunctionMonitor, RelaxationPrognostic)
from climt import RRTMGShortwave, RRTMGLongwave, get_default_state, EmanuelConvection, SlabSurface, SimplePhysics
import numpy as np
from datetime import timedelta
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import math

%matplotlib notebook


def plot_function(fig, state):
    ax = fig.add_subplot(2, 2, 1)
    ax.plot(
        state['convective_heating_rate'].to_units('degK day^-1').values.flatten(),
        state['air_pressure'].to_units('mbar').values.flatten(), '-o')
    ax.set_title('Conv. heating rate')
    ax.set_xlabel('K/day')
    ax.set_ylabel('millibar')
    ax.grid()

    ax.axes.invert_yaxis()
    ax = fig.add_subplot(2, 2, 2)
    ax.plot(
        state['air_temperature'].values.flatten(),
        state['air_pressure'].to_units('mbar').values.flatten(), '-o')
    ax.set_title('Air temperature')
    ax.axes.invert_yaxis()
    ax.set_xlabel('K')
    ax.grid()

    ax = fig.add_subplot(2, 2, 3)
    ax.plot(
        state['longwave_heating_rate'].values.flatten(),
        state['air_pressure'].to_units('mbar').values.flatten(), '-o',
        label='LW')
    ax.plot(
        state['shortwave_heating_rate'].values.flatten(),
        state['air_pressure'].to_units('mbar').values.flatten(), '-o',
        label='SW')
    ax.set_title('LW and SW Heating rates')
    ax.legend()
    ax.axes.invert_yaxis()
    ax.set_xlabel('K/day')
    ax.grid()
    ax.set_ylabel('millibar')

    ax = fig.add_subplot(2, 2, 4)
    net_flux = (state['upwelling_longwave_flux_in_air'] +
                state['upwelling_shortwave_flux_in_air'] -
                state['downwelling_longwave_flux_in_air'] -
                state['downwelling_shortwave_flux_in_air'])
    ax.plot(
        net_flux.values.flatten(),
        state['air_pressure_on_interface_levels'].to_units('mbar').values.flatten(), '-o')
    ax.set_title('Net Flux')
    ax.axes.invert_yaxis()
    ax.set_xlabel('W/m^2')
    ax.grid()
    fig.tight_layout()

tp_profiles = np.load('thermodynamic_profiles.npz')
mol_profiles = np.load('molecule_profiles.npz')
air_temperature = tp_profiles['air_temperature']
air_temperature.shape


timestep = timedelta(minutes=5)

convection = EmanuelConvection()
radiation_sw = RRTMGShortwave()
radiation_lw = RRTMGLongwave()
slab = SlabSurface()

time_stepper = AdamsBashforth([convection, radiation_lw, radiation_sw, slab])

convection.current_time_step = timestep

mids = 60

mid_levels = {'label': 'mid_level',
              'values': np.arange(mids),
              'units': ''}

int_levels = {'label': 'interface_level',
              'values': np.arange(mids + 1),
              'units': ''}



# --- Getting THe Default State from CliMT ---- #

state = get_default_state([convection,
                           radiation_lw, radiation_sw, slab],mid_levels=mid_levels, interface_levels=int_levels)


# ---- Air Temperature & SST ----- #

state['air_temperature'].values[:] = 270


# ---- Specific Humidity ---- #

state['specific_humidity'].loc[dict(mid_levels=slice(0, 10))] = 0.015
state['specific_humidity'].loc[dict(mid_levels=slice(10, 30))] = 0.01

#----- CO2 Profiles ---- #

CO2 = mol_profiles['carbon_dioxide']   #Realistic CO2 Profile


# ------ ALbedo, Zenith & Others --- #

state['zenith_angle'].values[:] = np.pi/4
state['surface_temperature'].values[:] = 300.
state['ocean_mixed_layer_thickness'].values[:] = 50
state['area_type'].values[:] = 'sea'
state['surface_albedo_for_direct_shortwave'].values[:] = 0.5
state['surface_albedo_for_direct_near_infrared'].values[:] = 0.5
state['surface_albedo_for_diffuse_shortwave'].values[:] = 0.5



# ----------------------- #
# ---- Looping Again ---- #
# ----------------------- #

monitor = PlotFunctionMonitor(plot_function)

frames = 300

xt = np.zeros( (frames,mids) )
yt = np.zeros( (frames,mids) )
convt = np.zeros( (frames,mids) )

for i in range(frames):
    if i%27 == 0 :
        print(i)
    convection.current_time_step = timestep
    diagnostics, new_state = time_stepper(state, timestep)
    state.update(diagnostics)
    if i % 20 == 0:
        monitor.store(state)
    state.update(new_state)
    state['eastward_wind'].values[:] = 2.
    state['surface_temperature'].values[:] = 280.  # Forcing SST
    
    xt[i,:] = state['air_temperature']
    yt[i,:] = state['air_pressure'].to_units('mbar')
    convt[i,:] = state['convective_heating_rate'].to_units('degK hour^-1')    

Incompatibility with Sympl v0.3.1

  • CliMT version: Latest develop branch
  • Python version: 3.6.3
  • Operating System: Linux

Description

After updating to Sympl v0.3.1 it is no longer possible to import CliMT.

The problem is (amongst others) located at line:

self._original_constants = deepcopy(sympl.default_constants)
self.current_constants = sympl.default_constants

I don't know if this is fixed in #18 to be honest I lost track of that PR 😉

What I Did

import climt

Outcome

AttributeError                            Traceback (most recent call last)                                                      
<ipython-input-3-e4ba426e2011> in <module>()                    
----> 1 import climt            

/mnt/lustre02/work/um0878/users/lkluft/dev/climt/climt/__init__.py in <module>()                                                 
      4 from sympl import set_constant                          
      5                         
----> 6 from ._core import (    
      7     get_default_state, mass_to_volume_mixing_ratio,     
      8     get_interface_values, constant_library,             

/mnt/lustre02/work/um0878/users/lkluft/dev/climt/climt/_core/__init__.py in <module>()                                           
      8     ClimtSpectralDynamicalCore                          
      9 )                       
---> 10 from .constants import (constant_library, get_constant, 
     11                         reset_constant_library, list_available_constants,                                                
     12                         add_constants_from_dict, set_constants_from_dict)                                                

/mnt/lustre02/work/um0878/users/lkluft/dev/climt/climt/_core/constants.py in <module>()                                          
    116                         
    117                         
--> 118 constant_library = ConstantLibrary()                    
    119                         
    120                         

/mnt/lustre02/work/um0878/users/lkluft/dev/climt/climt/_core/constants.py in __init__(self)                                      
     82     def __init__(self): 
     83                         
---> 84         self.__init_constant_library()                  
     85                         
     86     def __init_constant_library(self):                  

/mnt/lustre02/work/um0878/users/lkluft/dev/climt/climt/_core/constants.py in __init_constant_library(self)                       
     89         """             
     90                         
---> 91         self._original_constants = deepcopy(sympl.default_constants)                                                     
     92         self.current_constants = sympl.default_constants
     93                         

AttributeError: module 'sympl' has no attribute 'default_constants'      

Cheers,
Lukas

RRTMG extra dimension handling

Two main points here:

  • I may have found a bug, details below.
  • The number of shortwave bands should be hard set by us somehow, since it is defined by a parameter in the Fortran code that can't be edited during runtime. This makes sense, if you consider that there's no way for us to configure what frequencies the shortwave bands correspond to.

In rrtmg_sw_rad.f90, the comments say the following:

! This call to RRTMG_SW must be preceeded by a call to the module
!     mcica_subcol_gen_sw.f90 to run the McICA sub-column cloud generator,
!     which will provide the cloud physical or cloud optical properties
!     on the RRTMG quadrature point (ngptsw) dimension.

However, we never call mcica_subcol_gen_sw. That file produces all arrays that are meant to be of dimension ngptsw. Whatever we're doing is something quite weird.

For example, tracking cloud fraction, at the component interface we have 'cloud_area_fraction_in_atmosphere_layer' which becomes cloud_fraction in the cython wrapper, of dimension [mid_levels, lat, lon] at that point in Fortran ordering. That is passed to the parameter cldfmcl in the Fortran code, which is supposed to be of dimension [ngptsw, ncol, nlay]. We've told the Fortran code that ncol is 1 and nlay is the number of vertical levels, so we can pass a column at a time. So through this we pass in an array that doesn't even have a ngptsw dimension to the Fortran code that wants such a dimension. I feel like I'm missing something here, since that seems like the code shouldn't run at all.

I'll continue digging through this.

Use base class docstrings

Currently there are many component docstrings on __init__, __call__ or array_call methods which don't really say much of anything useful that the base class docstrings don't already say. For those components, we should remove the docstring entirely so that Sphinx will use the base class docstrings (which are written to be generic enough to apply to any component). The important part of the documentation is present in the *_properties dictionaries of the components.

We also could think about a way to include those property dictionaries in the documentation, but that's a separate issue.

SCM example is missing data files

When running radiative_equilibrium_rrtmg.py in examples, I get this traceback:

Traceback (most recent call last):
  File "radiative_equilibrium_rrtmg.py", line 32, in <module>
    tp_profiles = np.loadtxt('tp_profiles').transpose()
  File "/home/disk/eos4/mcgibbon/anaconda/lib/python2.7/site-packages/numpy/lib/npyio.py", line 858, in loadtxt
    fh = iter(open(fname, 'U'))
IOError: [Errno 2] No such file or directory: 'tp_profiles'

It seems the data files for this example are missing from the repo. This could be fixed alongside #2.

Installation on Windows

  • CliMT version: latest
  • Python version: 3.6.4 (Anaconda)
  • Operating System: Windows 7 (Cygwin)

Description

Installation of CliMT into an Anaconda Python environment on a Windows system.

What I Did

I tested the installation process on a Windows laptop, to verify that this is possible. I used an installation of Cygwin which (I think) has the necessary C and Fortran compilers installed.

$ curl  -OL https://github.com/CliMT/climt/tarball/master
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   126    0   126    0     0    126      0 --:--:-- --:--:-- --:--:--   384
100 27.4M    0 27.4M    0     0  1170k      0 --:--:--  0:00:24 --:--:-- 1055k

$ ls -l
total 28100
-rwxr-xr-x 1 DELL None 28773453 Apr  5 11:01 master

$ mv master master.tar.gz

$ gzip -d master.tar.gz

$ tar -xf master.tar

$ cd CliMT-climt-fb3369d/

$ pip install -r requirements_dev.txt
Requirement already satisfied: pip>=8.1.2 in c:\home\miniconda\lib\site-packages (from -r requirements_dev.txt (line 1))
Collecting bumpversion>=0.5.3 (from -r requirements_dev.txt (line 2))
  Downloading bumpversion-0.5.3-py2.py3-none-any.whl
Requirement already satisfied: wheel>=0.29.0 in c:\home\miniconda\lib\site-packages (from -r requirements_dev.txt (line 3))
Collecting watchdog>=0.8.3 (from -r requirements_dev.txt (line 4))
  Downloading watchdog-0.8.3.tar.gz (83kB)
Collecting flake8>=2.6.0 (from -r requirements_dev.txt (line 5))
  Downloading flake8-3.5.0-py2.py3-none-any.whl (69kB)
Collecting tox>=2.3.1 (from -r requirements_dev.txt (line 6))
  Downloading tox-3.0.0-py2.py3-none-any.whl (60kB)
Requirement already satisfied: coverage>=4.1 in c:\home\miniconda\lib\site-packages (from -r requirements_dev.txt (line 7))
Collecting Sphinx>=1.5.1 (from -r requirements_dev.txt (line 8))
  Downloading Sphinx-1.7.2-py2.py3-none-any.whl (1.9MB)
Requirement already satisfied: cryptography>=1.6 in c:\home\miniconda\lib\site-packages (from -r requirements_dev.txt (line 9))
Collecting PyYAML>=3.11 (from -r requirements_dev.txt (line 10))
  Downloading PyYAML-3.12.tar.gz (253kB)
Collecting pytest>=2.9.2 (from -r requirements_dev.txt (line 11))
  Downloading pytest-3.5.0-py2.py3-none-any.whl (194kB)
Collecting pytest-cov>=2.4.0 (from -r requirements_dev.txt (line 12))
  Downloading pytest_cov-2.5.1-py2.py3-none-any.whl
Collecting mock>=2.0.0 (from -r requirements_dev.txt (line 13))
  Downloading mock-2.0.0-py2.py3-none-any.whl (56kB)
Collecting xarray>=0.8.2 (from -r requirements_dev.txt (line 14))
  Downloading xarray-0.10.2-py2.py3-none-any.whl (411kB)
Requirement already satisfied: scipy>=0.18.1 in c:\home\miniconda\lib\site-packages (from -r requirements_dev.txt (line 15))
Requirement already satisfied: numpy>=0.10 in c:\home\miniconda\lib\site-packages (from -r requirements_dev.txt (line 16))
Collecting cython>=0.25 (from -r requirements_dev.txt (line 17))
  Downloading Cython-0.28.1-cp36-cp36m-win_amd64.whl (2.5MB)
Collecting ipython>=5.3.0 (from -r requirements_dev.txt (line 18))
  Downloading ipython-6.3.1-py3-none-any.whl (749kB)
Collecting coveralls (from -r requirements_dev.txt (line 19))
  Downloading coveralls-1.3.0-py2.py3-none-any.whl
Collecting sympl==0.3.2 (from -r requirements_dev.txt (line 20))
  Downloading sympl-0.3.2.tar.gz (82kB)
Collecting argh>=0.24.1 (from watchdog>=0.8.3->-r requirements_dev.txt (line 4))
  Downloading argh-0.26.2-py2.py3-none-any.whl
Collecting pathtools>=0.1.1 (from watchdog>=0.8.3->-r requirements_dev.txt (line 4))
  Downloading pathtools-0.1.2.tar.gz
Collecting pycodestyle<2.4.0,>=2.0.0 (from flake8>=2.6.0->-r requirements_dev.txt (line 5))
  Downloading pycodestyle-2.3.1-py2.py3-none-any.whl (45kB)
Collecting mccabe<0.7.0,>=0.6.0 (from flake8>=2.6.0->-r requirements_dev.txt (line 5))
  Downloading mccabe-0.6.1-py2.py3-none-any.whl
Collecting pyflakes<1.7.0,>=1.5.0 (from flake8>=2.6.0->-r requirements_dev.txt (line 5))
  Downloading pyflakes-1.6.0-py2.py3-none-any.whl (227kB)
Collecting pluggy<1.0,>=0.3.0 (from tox>=2.3.1->-r requirements_dev.txt (line 6))
  Downloading pluggy-0.6.0.tar.gz
Requirement already satisfied: six in c:\home\miniconda\lib\site-packages (from tox>=2.3.1->-r requirements_dev.txt (line 6))
Collecting py>=1.4.17 (from tox>=2.3.1->-r requirements_dev.txt (line 6))
  Downloading py-1.5.3-py2.py3-none-any.whl (84kB)
Collecting virtualenv>=1.11.2 (from tox>=2.3.1->-r requirements_dev.txt (line 6))
  Downloading virtualenv-15.2.0-py2.py3-none-any.whl (2.6MB)
Collecting Pygments>=2.0 (from Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
  Downloading Pygments-2.2.0-py2.py3-none-any.whl (841kB)
Collecting docutils>=0.11 (from Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
  Downloading docutils-0.14-py3-none-any.whl (543kB)
Collecting colorama>=0.3.5; sys_platform == "win32" (from Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
  Downloading colorama-0.3.9-py2.py3-none-any.whl
Collecting snowballstemmer>=1.1 (from Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
  Downloading snowballstemmer-1.2.1-py2.py3-none-any.whl (64kB)
Requirement already satisfied: requests>=2.0.0 in c:\home\miniconda\lib\site-packages (from Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
Collecting alabaster<0.8,>=0.7 (from Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
  Downloading alabaster-0.7.10-py2.py3-none-any.whl
Collecting Jinja2>=2.3 (from Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
  Downloading Jinja2-2.10-py2.py3-none-any.whl (126kB)
Requirement already satisfied: setuptools in c:\home\miniconda\lib\site-packages (from Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
Collecting sphinxcontrib-websupport (from Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
  Downloading sphinxcontrib_websupport-1.0.1-py2.py3-none-any.whl
Collecting packaging (from Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
  Downloading packaging-17.1-py2.py3-none-any.whl
Collecting babel!=2.0,>=1.3 (from Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
  Downloading Babel-2.5.3-py2.py3-none-any.whl (6.8MB)
Collecting imagesize (from Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
  Downloading imagesize-1.0.0-py2.py3-none-any.whl
Requirement already satisfied: idna>=2.1 in c:\home\miniconda\lib\site-packages (from cryptography>=1.6->-r requirements_dev.txt (line 9))
Requirement already satisfied: asn1crypto>=0.21.0 in c:\home\miniconda\lib\site-packages (from cryptography>=1.6->-r requirements_dev.txt (line 9))
Requirement already satisfied: cffi>=1.7 in c:\home\miniconda\lib\site-packages (from cryptography>=1.6->-r requirements_dev.txt (line 9))
Collecting more-itertools>=4.0.0 (from pytest>=2.9.2->-r requirements_dev.txt (line 11))
  Downloading more_itertools-4.1.0-py3-none-any.whl (47kB)
Collecting attrs>=17.4.0 (from pytest>=2.9.2->-r requirements_dev.txt (line 11))
  Downloading attrs-17.4.0-py2.py3-none-any.whl
Collecting pbr>=0.11 (from mock>=2.0.0->-r requirements_dev.txt (line 13))
  Downloading pbr-4.0.1-py2.py3-none-any.whl (97kB)
Requirement already satisfied: pandas>=0.18.0 in c:\home\miniconda\lib\site-packages (from xarray>=0.8.2->-r requirements_dev.txt (line 14))
Collecting prompt-toolkit<2.0.0,>=1.0.15 (from ipython>=5.3.0->-r requirements_dev.txt (line 18))
  Downloading prompt_toolkit-1.0.15-py3-none-any.whl (247kB)
Collecting backcall (from ipython>=5.3.0->-r requirements_dev.txt (line 18))
  Downloading backcall-0.1.0.tar.gz
Collecting simplegeneric>0.8 (from ipython>=5.3.0->-r requirements_dev.txt (line 18))
  Downloading simplegeneric-0.8.1.zip
Collecting traitlets>=4.2 (from ipython>=5.3.0->-r requirements_dev.txt (line 18))
  Downloading traitlets-4.3.2-py2.py3-none-any.whl (74kB)
Collecting pickleshare (from ipython>=5.3.0->-r requirements_dev.txt (line 18))
  Downloading pickleshare-0.7.4-py2.py3-none-any.whl
Collecting decorator (from ipython>=5.3.0->-r requirements_dev.txt (line 18))
  Downloading decorator-4.2.1-py2.py3-none-any.whl
Collecting jedi>=0.10 (from ipython>=5.3.0->-r requirements_dev.txt (line 18))
  Downloading jedi-0.11.1-py2.py3-none-any.whl (250kB)
Collecting docopt>=0.6.1 (from coveralls->-r requirements_dev.txt (line 19))
  Downloading docopt-0.6.2.tar.gz
Collecting pint>=0.7.0 (from sympl==0.3.2->-r requirements_dev.txt (line 20))
  Downloading Pint-0.8.1.tar.gz (162kB)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\home\miniconda\lib\site-packages (from requests>=2.0.0->Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
Requirement already satisfied: urllib3<1.23,>=1.21.1 in c:\home\miniconda\lib\site-packages (from requests>=2.0.0->Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
Requirement already satisfied: certifi>=2017.4.17 in c:\home\miniconda\lib\site-packages (from requests>=2.0.0->Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
Collecting MarkupSafe>=0.23 (from Jinja2>=2.3->Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
  Downloading MarkupSafe-1.0.tar.gz
Collecting pyparsing>=2.0.2 (from packaging->Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
  Downloading pyparsing-2.2.0-py2.py3-none-any.whl (56kB)
Requirement already satisfied: pytz>=0a in c:\home\miniconda\lib\site-packages (from babel!=2.0,>=1.3->Sphinx>=1.5.1->-r requirements_dev.txt (line 8))
Requirement already satisfied: pycparser in c:\home\miniconda\lib\site-packages (from cffi>=1.7->cryptography>=1.6->-r requirements_dev.txt (line 9))
Requirement already satisfied: python-dateutil>=2 in c:\home\miniconda\lib\site-packages (from pandas>=0.18.0->xarray>=0.8.2->-r requirements_dev.txt (line 14))
Collecting wcwidth (from prompt-toolkit<2.0.0,>=1.0.15->ipython>=5.3.0->-r requirements_dev.txt (line 18))
  Downloading wcwidth-0.1.7-py2.py3-none-any.whl
Collecting ipython-genutils (from traitlets>=4.2->ipython>=5.3.0->-r requirements_dev.txt (line 18))
  Downloading ipython_genutils-0.2.0-py2.py3-none-any.whl
Collecting parso==0.1.1 (from jedi>=0.10->ipython>=5.3.0->-r requirements_dev.txt (line 18))
  Downloading parso-0.1.1-py2.py3-none-any.whl (91kB)
Building wheels for collected packages: watchdog, PyYAML, sympl, pathtools, pluggy, backcall, simplegeneric, docopt, pint, MarkupSafe
  Running setup.py bdist_wheel for watchdog: started
  Running setup.py bdist_wheel for watchdog: finished with status 'done'
  Stored in directory: C:\Users\DELL\AppData\Local\pip\Cache\wheels\3c\9c\be\e82ae5a37c19baf8abe88623d1f47d2d502bed7b54d4f34740
  Running setup.py bdist_wheel for PyYAML: started
  Running setup.py bdist_wheel for PyYAML: finished with status 'done'
  Stored in directory: C:\Users\DELL\AppData\Local\pip\Cache\wheels\2c\f7\79\13f3a12cd723892437c0cfbde1230ab4d82947ff7b3839a4fc
  Running setup.py bdist_wheel for sympl: started
  Running setup.py bdist_wheel for sympl: finished with status 'done'
  Stored in directory: C:\Users\DELL\AppData\Local\pip\Cache\wheels\86\d9\36\b6f9e125078a00d09ec0da8dfb305ecb0c8e12be1b0d3477c0
  Running setup.py bdist_wheel for pathtools: started
  Running setup.py bdist_wheel for pathtools: finished with status 'done'
  Stored in directory: C:\Users\DELL\AppData\Local\pip\Cache\wheels\60\0d\2a\ffe065d190b580be6af9a862c68ed6a8a89c1778bd5c7ba7b8
  Running setup.py bdist_wheel for pluggy: started
  Running setup.py bdist_wheel for pluggy: finished with status 'done'
  Stored in directory: C:\Users\DELL\AppData\Local\pip\Cache\wheels\df\44\8e\e136760ae525eac46b3e3db643ef58ff1753177b5a722b0c96
  Running setup.py bdist_wheel for backcall: started
  Running setup.py bdist_wheel for backcall: finished with status 'done'
  Stored in directory: C:\Users\DELL\AppData\Local\pip\Cache\wheels\31\1a\df\e00993943d21a761e0427b04884965a11cb3ccdc5b3812a2e5
  Running setup.py bdist_wheel for simplegeneric: started
  Running setup.py bdist_wheel for simplegeneric: finished with status 'done'
  Stored in directory: C:\Users\DELL\AppData\Local\pip\Cache\wheels\7b\31\08\c85e74c84188cbec6a6827beec4d640f2bd78ae003dc1ec09d
  Running setup.py bdist_wheel for docopt: started
  Running setup.py bdist_wheel for docopt: finished with status 'done'
  Stored in directory: C:\Users\DELL\AppData\Local\pip\Cache\wheels\b2\16\5f\c33a2bb5f2dce71205f8e65cbfd05647d79d441282be31fd82
  Running setup.py bdist_wheel for pint: started
  Running setup.py bdist_wheel for pint: finished with status 'done'
  Stored in directory: C:\Users\DELL\AppData\Local\pip\Cache\wheels\eb\4a\fd\4598c33759911844c4b34e87fbd9106bb5919f82af165937bb
  Running setup.py bdist_wheel for MarkupSafe: started
  Running setup.py bdist_wheel for MarkupSafe: finished with status 'done'
  Stored in directory: C:\Users\DELL\AppData\Local\pip\Cache\wheels\88\a7\30\e39a54a87bcbe25308fa3ca64e8ddc75d9b3e5afa21ee32d57
Successfully built watchdog PyYAML sympl pathtools pluggy backcall simplegeneric docopt pint MarkupSafe
Installing collected packages: bumpversion, PyYAML, argh, pathtools, watchdog, pycodestyle, mccabe, pyflakes, flake8, pluggy, py, virtualenv, tox, Pygments, docutils, colorama, snowballstemmer, alabaster, MarkupSafe, Jinja2, sphinxcontrib-websupport, pyparsing, packaging, babel, imagesize, Sphinx, more-itertools, attrs, pytest, pytest-cov, pbr, mock, xarray, cython, wcwidth, prompt-toolkit, backcall, simplegeneric, ipython-genutils, decorator, traitlets, pickleshare, parso, jedi, ipython, docopt, coveralls, pint, sympl
Successfully installed Jinja2-2.10 MarkupSafe-1.0 PyYAML-3.12 Pygments-2.2.0 Sphinx-1.7.2 alabaster-0.7.10 argh-0.26.2 attrs-17.4.0 babel-2.5.3 backcall-0.1.0 bumpversion-0.5.3 colorama-0.3.9 coveralls-1.3.0 cython-0.28.1 decorator-4.2.1 docopt-0.6.2 docutils-0.14 flake8-3.5.0 imagesize-1.0.0 ipython-6.3.1 ipython-genutils-0.2.0 jedi-0.11.1 mccabe-0.6.1 mock-2.0.0 more-itertools-4.1.0 packaging-17.1 parso-0.1.1 pathtools-0.1.2 pbr-4.0.1 pickleshare-0.7.4 pint-0.8.1 pluggy-0.6.0 prompt-toolkit-1.0.15 py-1.5.3 pycodestyle-2.3.1 pyflakes-1.6.0 pyparsing-2.2.0 pytest-3.5.0 pytest-cov-2.5.1 simplegeneric-0.8.1 snowballstemmer-1.2.1 sphinxcontrib-websupport-1.0.1 sympl-0.3.2 tox-3.0.0 traitlets-4.3.2 virtualenv-15.2.0 watchdog-0.8.3 wcwidth-0.1.7 xarray-0.10.2

$ /cygdrive/c/home/miniconda/python setup.py install
Compilers:  gcc gfortran
running install
running bdist_egg
running egg_info
creating climt.egg-info
writing climt.egg-info\PKG-INFO
writing dependency_links to climt.egg-info\dependency_links.txt
writing requirements to climt.egg-info\requires.txt
writing top-level names to climt.egg-info\top_level.txt
writing manifest file 'climt.egg-info\SOURCES.txt'
reading manifest file 'climt.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.so' under directory 'climt'
warning: no files found matching '*.dylib' under directory 'climt'
warning: no files found matching '*.pyd' under directory 'climt'
no previously-included directories found matching 'climt\_lib\lib'
no previously-included directories found matching 'climt\_lib\share'
no previously-included directories found matching 'climt\_lib\include'
no previously-included directories found matching 'climt\_lib\bin'
no previously-included directories found matching 'climt\_lib\Open*'
no previously-included directories found matching 'climt\_lib\fftw*'
no previously-included directories found matching 'climt\_lib\shtns*'
warning: no previously-included files found matching 'climt\_lib\.configured*'
warning: no previously-included files found matching 'climt\_lib\log'
warning: no previously-included files matching '*.pyc' found under directory 'climt'
warning: no previously-included files matching '*.mod' found under directory 'climt'
warning: no previously-included files matching '*.o' found under directory 'climt'
warning: no previously-included files matching '*.c' found under directory 'climt'
warning: no previously-included files matching '__pycache__' found under directory '*'
no previously-included directories found matching 'tests\__pycache__'
warning: no files found matching '*.jpg' under directory 'docs'
warning: no files found matching '*.png' under directory 'docs'
warning: no files found matching '*.gif' under directory 'docs'
writing manifest file 'climt.egg-info\SOURCES.txt'
installing library code to build\bdist.win-amd64\egg
running install_lib
running build_py
creating build
creating build\lib.win-amd64-3.6
creating build\lib.win-amd64-3.6\climt
copying climt\__init__.py -> build\lib.win-amd64-3.6\climt
creating build\lib.win-amd64-3.6\climt\_components
copying climt\_components\_berger_solar_insolation.pyx -> build\lib.win-amd64-3.6\climt\_components
creating build\lib.win-amd64-3.6\climt\_components\dcmip
copying climt\_components\dcmip\_dcmip.pyx -> build\lib.win-amd64-3.6\climt\_components\dcmip
creating build\lib.win-amd64-3.6\climt\_components\emanuel
copying climt\_components\emanuel\_emanuel_convection.pyx -> build\lib.win-amd64-3.6\climt\_components\emanuel
creating build\lib.win-amd64-3.6\climt\_components\gfs
copying climt\_components\gfs\_gfs_dynamics.pyx -> build\lib.win-amd64-3.6\climt\_components\gfs
creating build\lib.win-amd64-3.6\climt\_components\rrtmg
creating build\lib.win-amd64-3.6\climt\_components\rrtmg\lw
copying climt\_components\rrtmg\lw\_rrtmg_lw.pyx -> build\lib.win-amd64-3.6\climt\_components\rrtmg\lw
creating build\lib.win-amd64-3.6\climt\_components\rrtmg\sw
copying climt\_components\rrtmg\sw\_rrtmg_sw.pyx -> build\lib.win-amd64-3.6\climt\_components\rrtmg\sw
creating build\lib.win-amd64-3.6\climt\_components\simple_physics
copying climt\_components\simple_physics\_simple_physics.pyx -> build\lib.win-amd64-3.6\climt\_components\simple_physics
copying climt\_components\__init__.py -> build\lib.win-amd64-3.6\climt\_components
copying climt\_components\berger_solar_insolation.py -> build\lib.win-amd64-3.6\climt\_components
copying climt\_components\grid_scale_condensation.py -> build\lib.win-amd64-3.6\climt\_components
copying climt\_components\held_suarez.py -> build\lib.win-amd64-3.6\climt\_components
copying climt\_components\radiation.py -> build\lib.win-amd64-3.6\climt\_components
copying climt\_components\slab_surface.py -> build\lib.win-amd64-3.6\climt\_components
copying climt\_components\surface_ice.py -> build\lib.win-amd64-3.6\climt\_components
copying climt\_components\dcmip\__init__.py -> build\lib.win-amd64-3.6\climt\_components\dcmip
copying climt\_components\dcmip\component.py -> build\lib.win-amd64-3.6\climt\_components\dcmip
copying climt\_components\emanuel\__init__.py -> build\lib.win-amd64-3.6\climt\_components\emanuel
copying climt\_components\emanuel\component.py -> build\lib.win-amd64-3.6\climt\_components\emanuel
copying climt\_components\gfs\__init__.py -> build\lib.win-amd64-3.6\climt\_components\gfs
copying climt\_components\gfs\component.py -> build\lib.win-amd64-3.6\climt\_components\gfs
creating build\lib.win-amd64-3.6\climt\_components\instellation
copying climt\_components\instellation\__init__.py -> build\lib.win-amd64-3.6\climt\_components\instellation
copying climt\_components\instellation\component.py -> build\lib.win-amd64-3.6\climt\_components\instellation
creating build\lib.win-amd64-3.6\climt\_components\monitors
copying climt\_components\monitors\__init__.py -> build\lib.win-amd64-3.6\climt\_components\monitors
copying climt\_components\rrtmg\__init__.py -> build\lib.win-amd64-3.6\climt\_components\rrtmg
copying climt\_components\rrtmg\rrtmg_common.py -> build\lib.win-amd64-3.6\climt\_components\rrtmg
copying climt\_components\rrtmg\lw\__init__.py -> build\lib.win-amd64-3.6\climt\_components\rrtmg\lw
copying climt\_components\rrtmg\lw\component.py -> build\lib.win-amd64-3.6\climt\_components\rrtmg\lw
copying climt\_components\rrtmg\sw\__init__.py -> build\lib.win-amd64-3.6\climt\_components\rrtmg\sw
copying climt\_components\rrtmg\sw\component.py -> build\lib.win-amd64-3.6\climt\_components\rrtmg\sw
creating build\lib.win-amd64-3.6\climt\_components\second_best
copying climt\_components\second_best\__init__.py -> build\lib.win-amd64-3.6\climt\_components\second_best
copying climt\_components\simple_physics\__init__.py -> build\lib.win-amd64-3.6\climt\_components\simple_physics
copying climt\_components\simple_physics\component.py -> build\lib.win-amd64-3.6\climt\_components\simple_physics
creating build\lib.win-amd64-3.6\climt\_core
copying climt\_core\__init__.py -> build\lib.win-amd64-3.6\climt\_core
copying climt\_core\climt_components.py -> build\lib.win-amd64-3.6\climt\_core
copying climt\_core\constants.py -> build\lib.win-amd64-3.6\climt\_core
copying climt\_core\initialization.py -> build\lib.win-amd64-3.6\climt\_core
copying climt\_core\util.py -> build\lib.win-amd64-3.6\climt\_core
creating build\lib.win-amd64-3.6\climt\_data
copying climt\_data\__init__.py -> build\lib.win-amd64-3.6\climt\_data
copying climt\_data\ozone_profile.npy -> build\lib.win-amd64-3.6\climt\_data
creating build\lib.win-amd64-3.6\climt\_lib
copying climt\_lib\Makefile -> build\lib.win-amd64-3.6\climt\_lib
creating build\lib.win-amd64-3.6\climt\_lib\Darwin
copying climt\_lib\Darwin\.temp -> build\lib.win-amd64-3.6\climt\_lib\Darwin
creating build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\Makefile -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\Makefile.conf -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\Makefile.conf.gfortran -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\Makefile.conf.ifort -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\driver.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\dyn_finalize.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\dyn_init.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\dyn_run.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\finalize.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\gfs_namelist -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\grid_data.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\init.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\kinds.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\params.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\phy_data.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\phy_data_stub.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\phy_finalize.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\phy_finalize_stub.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\phy_init.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\phy_init_stub.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\phy_run.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\phy_run_hs.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\phy_run_stub.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\physcons.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\pressure_data.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\run.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\semimp_data.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\shtns.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
copying climt\_lib\GFS\spectral_data.f90 -> build\lib.win-amd64-3.6\climt\_lib\GFS
creating build\lib.win-amd64-3.6\climt\_lib\Linux
copying climt\_lib\Linux\.temp -> build\lib.win-amd64-3.6\climt\_lib\Linux
creating build\lib.win-amd64-3.6\climt\_lib\Windows
copying climt\_lib\Windows\.temp -> build\lib.win-amd64-3.6\climt\_lib\Windows
creating build\lib.win-amd64-3.6\climt\_lib\dcmip
copying climt\_lib\dcmip\Makefile -> build\lib.win-amd64-3.6\climt\_lib\dcmip
copying climt\_lib\dcmip\dcmip_initial_conditions_test_1_2_3_v5.f90 -> build\lib.win-amd64-3.6\climt\_lib\dcmip
copying climt\_lib\dcmip\dcmip_initial_conditions_test_4_v3.f90 -> build\lib.win-amd64-3.6\climt\_lib\dcmip
copying climt\_lib\dcmip\dcmip_initial_conditions_test_5_v1.f90 -> build\lib.win-amd64-3.6\climt\_lib\dcmip
creating build\lib.win-amd64-3.6\climt\_lib\emanuel
copying climt\_lib\emanuel\Makefile -> build\lib.win-amd64-3.6\climt\_lib\emanuel
copying climt\_lib\emanuel\convect43c.f90 -> build\lib.win-amd64-3.6\climt\_lib\emanuel
creating build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\Makefile -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\_rrtm_lw.pyx -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\mcica_random_numbers.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\mcica_subcol_gen_lw.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\parkind.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\parrrtm.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_cld.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_con.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg01.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg02.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg03.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg04.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg05.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg06.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg07.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg08.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg09.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg10.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg11.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg12.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg13.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg14.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg15.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_kg16.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_ncpar.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_ref.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_tbl.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_vsn.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrlw_wvn.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrtmg_lw_cldprmc.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrtmg_lw_cldprop.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrtmg_lw_init.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrtmg_lw_k_g.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrtmg_lw_rad.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrtmg_lw_rad.nomcica.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrtmg_lw_read_nc.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrtmg_lw_rtrn.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrtmg_lw_rtrnmc.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrtmg_lw_rtrnmr.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrtmg_lw_setcoef.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\rrtmg_lw_taumol.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
copying climt\_lib\rrtmg_lw\setup.py -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_lw
creating build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\Makefile -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\README -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\_rrtm_sw.pyx -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\mcica_random_numbers.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\mcica_subcol_gen_sw.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\parkind.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\parrrsw.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_aer.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_cld.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_con.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg16.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg17.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg18.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg19.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg20.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg21.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg22.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg23.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg24.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg25.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg26.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg27.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg28.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_kg29.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_ncpar.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_ref.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_tbl.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_vsn.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrsw_wvn.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrtmg_sw_cldprmc.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrtmg_sw_cldprop.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrtmg_sw_init.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrtmg_sw_k_g.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrtmg_sw_rad.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrtmg_sw_rad.nomcica.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrtmg_sw_reftra.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrtmg_sw_setcoef.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrtmg_sw_spcvmc.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrtmg_sw_spcvrt.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrtmg_sw_taumol.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\rrtmg_sw_vrtqdr.f90 -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
copying climt\_lib\rrtmg_sw\setup.py -> build\lib.win-amd64-3.6\climt\_lib\rrtmg_sw
creating build\lib.win-amd64-3.6\climt\_lib\simple_physics
copying climt\_lib\simple_physics\Makefile -> build\lib.win-amd64-3.6\climt\_lib\simple_physics
copying climt\_lib\simple_physics\simple_physics_custom.f90 -> build\lib.win-amd64-3.6\climt\_lib\simple_physics
copying climt\_lib\simple_physics\simple_physics_v5_1.f90 -> build\lib.win-amd64-3.6\climt\_lib\simple_physics
running build_ext
error: [WinError 2] The system cannot find the file specified

$ which build_ext
which: no build_ext in (/usr/local/bin:/usr/bin:/cygdrive/c/ProgramData/Oracle/Java/javapath:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0:/cygdrive/c/Program Files (x86)/Intel/OpenCL SDK/2.0/bin/x86:/cygdrive/c/Program Files (x86)/Intel/OpenCL SDK/2.0/bin/x64:/cygdrive/c/Program Files/MATLAB/R2016a/bin:/cygdrive/c/scala/bin:/cygdrive/c/Go/bin:/cygdrive/c/home/miniconda:/cygdrive/c/home/miniconda/Scripts:/cygdrive/c/home/miniconda/Library/bin:/cygdrive/c/Program Files (x86)/NetCDF:/cygdrive/c/Program Files/Docker Toolbox:/cygdrive/c/Apache/apache-maven-3.3.9/bin)

My take at this point is that there's something amiss with my Cygwin installation and Anaconda environment integration, i.e. Cygwin is sometimes using its own version of Python and other times using the Anaconda Python. This appears to be tricky to disentangle (after an hour or so of reinstalling Cygwin, monkeying with paths, etc. I'm still not out of the woods), but it looks like there's hope.

Move -O3 flag to FFLAGS

Currently it is difficult to manually set, for example -O0 for debugging. If it is included in FFLAGS in setup.py, then when setup.py runs it will be added to lines that already include -O3. These instances of -O3 should be removed from those files and put in FFLAGS in setup.py instead.

Compilation of rrtmg_sw fails

In the RRTMG shortwave setup.py, 'rrtmg_sw_taumol.f90' needs to be compiled before 'rrtmg_sw_spcvrt.f90' because the second one depends on the first. If not, compilation fails the first time setup.py is called. This can be fixed by changing the order of the files in the list in setup.py.

RRTMG stores constants at initialization

Currently RRMTG uses constants that are set at initialization, and will not have its results reflect updates to constants (by set_constant) that occur between calls. In other components I just had the constant setting code get called at the start of every call, but it's not obvious to me that calling initialise_rrtm_radiation at the start of every function call is safe. Is it safe?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.