! Copyright (C) GFD Dennou Club, 2000.  All rights reserved.
!
! 独立変数 create
!
! 長さ length の自分自身を次元とする変数を作成する。
! 長さ length = 0 の変数は可変長である。
! 次元変数は自動生成されることが多いため、変数名部を欠く指定に対しては
! 名前を自動生成する。
!
subroutine GTVarCreateD(var, url, length, xtype, long_name, overwrite, err)
    use dc_string
    use gtdata_types, only: GT_VARIABLE
    use gtdata_generic, only: GtDataTmpNam
    use an_generic, only: Create, Put_Attr
    use dc_url, only: UrlSplit, UrlMerge
    type(GT_VARIABLE), intent(inout):: var
    character(len = *), intent(in):: url
    integer, intent(in):: length
    character(len = *), intent(in), optional:: xtype
    character(len = *), intent(in), optional:: long_name
    logical, intent(in), optional:: overwrite
    logical, intent(out), optional:: err
    type(VSTRING):: fnam, vnam, newUrl
    ! URL の検査
    call UrlSplit(var_str(url), file=fnam, var=vnam)
    if (vnam == "") then
        newUrl = GtDataTmpNam(file=fnam, base=var_str("dim"))
    else
        newUrl = url
    endif
    ! すべてのタイプのポインタを初期化する
    nullify(var%an)
    ! an 形式が選択される場合は
    allocate(var%an)
    call Create(var=var%an, url=vchar(newurl, len(newurl)), &
        & length=length, xtype=xtype, overwrite=overwrite, err=err)
    if (present(long_name)) call put_attr(var%an, 'long_name', long_name, err=err)
end subroutine
