def make_variogram_3D(nug, nst, it1, cc1, azi1, dip1, hmax1, hmed1, hmin1,
    it2=1, cc2=0, azi2=0, dip2=0, hmax2=0, hmed2=0, hmin2=0):
    """Make a dictionary of variogram parameters for application with spatial
    estimation and simulation.

    :param nug: Nugget constant (isotropic)
    :param nst: Number of structures (up to 2)
    :param it1: Structure of 1st variogram (1: Spherical, 2: Exponential, 3: Gaussian)
    :param cc1: Contribution of 2nd variogram
    :param azi1: Azimuth of 1st variogram
    :param dip1: Dip of 1st variogram
    :param hmax1: Range in major direction (Horizontal)
    :param hmed1: Range in minor direction (Horizontal)
    :param hmin1: Range in vertical direction
    :param it2: Structure of 2nd variogram (1: Spherical, 2: Exponential, 3: Gaussian)
    :param cc2: Contribution of 2nd variogram
    :param azi2: Azimuth of 2nd variogram
    :param dip1: Dip of 2nd variogram
    :param hmax2: Range in major direction (Horizontal)
    :param hmed2: Range in minor direction (Horizontal)
    :param hmin2: Range in vertical direction
    :return: TODO
    """
    if cc2 == 0:
        nst = 1
    var = dict([('nug', nug), ('nst', nst), ('it1', it1), ('cc1', cc1), (
        'azi1', azi1), ('dip1', dip1), ('hmax1', hmax1), ('hmed1', hmed1),
        ('hmin1', hmin1), ('it2', it2), ('cc2', cc2), ('azi2', azi2), (
        'dip2', dip2), ('hmax2', hmax2), ('hmed2', hmed2), ('hmin2', hmin2)])
    if nug + cc1 + cc2 != 1:
        print(
            '\x1b[0;30;41m make_variogram Warning: sill does not sum to 1.0, do not use in simulation \x1b[0m'
            )
    if (cc1 < 0 or cc2 < 0 or nug < 0 or hmax1 < 0 or hmax2 < 0 or hmin1 < 
        0 or hmin2 < 0):
        print(
            '\x1b[0;30;41m make_variogram Warning: contributions and ranges must be all positive \x1b[0m'
            )
    if hmax1 < hmed1 or hmax2 < hmed2:
        print(
            '\x1b[0;30;41m make_variogram Warning: major range should be greater than minor range \x1b[0m'
            )
    return var
