def default_absorbers(Tatm,
                ozone_file = 'apeozone_cam3_5_54.nc',
                verbose = True,):
    '''Initialize a dictionary of well-mixed radiatively active gases
    All values are volumetric mixing ratios.

    Ozone is set to a climatology.

    All other gases are assumed well-mixed:

        - CO2
        - CH4
        - N2O
        - O2
        - CFC11
        - CFC12
        - CFC22
        - CCL4

    Specific values are based on the AquaPlanet Experiment protocols,
    except for O2 which is set the realistic value 0.21
    (affects the RRTMG scheme).
    '''
    absorber_vmr = {}
    absorber_vmr['CO2']   = 348. / 1E6
    absorber_vmr['CH4']   = 1650. / 1E9
    absorber_vmr['N2O']   = 306. / 1E9
    absorber_vmr['O2']    = 0.21
    absorber_vmr['CFC11'] = 0.
    absorber_vmr['CFC12'] = 0.
    absorber_vmr['CFC22'] = 0.
    absorber_vmr['CCL4']  = 0.

    # Ozone: start with all zeros, interpolate to data if we can
    xTatm = Tatm.to_xarray()
    O3 = 0. * xTatm
    if ozone_file is not None:
        ozonefilepath = os.path.join(os.path.dirname(__file__), 'data', 'ozone', ozone_file)
        remotepath_http = 'http://thredds.atmos.albany.edu:8080/thredds/fileServer/CLIMLAB/ozone/' + ozone_file
        remotepath_opendap = 'http://thredds.atmos.albany.edu:8080/thredds/dodsC/CLIMLAB/ozone/' + ozone_file
        ozonedata, path = load_data_source(local_path=ozonefilepath,
                                     remote_source_list=[remotepath_http, remotepath_opendap],
                                     open_method=xr.open_dataset,
                                     remote_kwargs={'engine':'pydap'},
                                     verbose=verbose,)
        ##  zonal and time average
        ozone_zon = ozonedata.OZONE.mean(dim=('time','lon')).transpose('lat','lev')
        if ('lat' in xTatm.dims):
            O3source = ozone_zon
        else:
            weight = np.cos(np.deg2rad(ozonedata.lat))
            ozone_global = (ozone_zon * weight).mean(dim='lat') / weight.mean(dim='lat')
            O3source = ozone_global
        try:
            O3 = O3source.interp_like(xTatm)
            # There will be NaNs for gridpoints outside the ozone file domain
            assert not np.any(np.isnan(O3))
        except:
            warnings.warn('Some grid points are beyond the bounds of the ozone file. Ozone values will be extrapolated.')
            try:
                # passing fill_value=None to the underlying scipy interpolator
                # will result in extrapolation instead of NaNs
                O3 = O3source.interp_like(xTatm, kwargs={'fill_value':None})
                assert not np.any(np.isnan(O3))
            except:
                warnings.warn('Interpolation of ozone data failed. Setting O3 to zero instead.')
                O3 = 0. * xTatm
    absorber_vmr['O3'] = O3.values
    return absorber_vmr
Initialize a dictionary of well-mixed radiatively active gases
    All values are volumetric mixing ratios.

    Ozone is set to a climatology.

    All other gases are assumed well-mixed:

        - CO2
        - CH4
        - N2O
        - O2
        - CFC11
        - CFC12
        - CFC22
        - CCL4

    Specific values are based on the AquaPlanet Experiment protocols,
    except for O2 which is set the realistic value 0.21
    (affects the RRTMG scheme).