!
! create(var, url, [dims], [xtype], [overwrite], [err]) は
! 場所 url に次元 dims を持った変数を作成し、それを開いた
! ものを var に格納する。型 xtype を省略すると "float" と
! みなされる。既存変数があるとき失敗するが
! overwrite が真であれば続行する。
!

subroutine GTVarCreate(var, url, dims, xtype, long_name, overwrite, err)
    use gtdata_types, only: GT_VARIABLE
    use an_generic, only: Create, put_attr
    use an_types, only: AN_VARIABLE
    use netcdf_f77, only: NF_REAL, NF_INT
    type(GT_VARIABLE), intent(inout):: var
    character(len = *), intent(in):: url
    type(GT_VARIABLE), intent(in), optional:: dims(:)
    character(len = *), intent(in), optional:: xtype
    character(len = *), intent(in), optional:: long_name
    logical, intent(in), optional:: overwrite
    logical, intent(out), optional:: err
    type(AN_VARIABLE), allocatable:: an_dims(:)
    integer:: i
    ! (すべての下位構造を初期化)
    ! an ライブラリを使う場合
    allocate(var%an)
    if (present(dims)) then
        allocate(an_dims(size(dims)))
        an_dims(:) = (/(dims(i)%an, i = 1, size(dims))/)
        call Create(var=var%an, url=url, dims=an_dims, xtype=xtype, &
            & overwrite=overwrite, err=err)
    else
        allocate(an_dims(1)) ! dummy
        call Create(var=var%an, url=url, dims=an_dims(1:0), &
            & xtype=xtype, overwrite=overwrite, err=err)
    endif
    deallocate(an_dims)
    if (present(long_name)) then
        call put_attr(var%an, 'long_name', long_name, err=err)
    endif
end subroutine
