function new_FieldSpec_geom(unusable, geom, vertical_grid, vertical_dim_spec, typekind, ungridded_dims, &
standard_name, long_name, units, &
attributes, regrid_param, default_value) result(field_spec)
type(FieldSpec) :: field_spec
class(KeywordEnforcer), optional, intent(in) :: unusable
type(ESMF_Geom), optional, intent(in) :: geom
class(VerticalGrid), optional, intent(in) :: vertical_grid
type(VerticalDimSpec), intent(in) :: vertical_dim_spec
type(ESMF_Typekind_Flag), intent(in) :: typekind
type(UngriddedDims), intent(in) :: ungridded_dims
character(*), optional, intent(in) :: standard_name
character(*), optional, intent(in) :: units
character(*), optional, intent(in) :: long_name
type(StringVector), optional, intent(in) :: attributes
type(EsmfRegridderParam), optional, intent(in) :: regrid_param
! optional args last
real, optional, intent(in) :: default_value
integer :: status
if (present(geom)) field_spec%geom = geom
if (present(vertical_grid)) field_spec%vertical_grid = vertical_grid
field_spec%vertical_dim_spec = vertical_dim_spec
field_spec%typekind = typekind
field_spec%ungridded_dims = ungridded_dims
if (present(standard_name)) field_spec%standard_name = standard_name
if (present(long_name)) field_spec%long_name = long_name
if (present(units)) field_spec%units = units
if (present(attributes)) field_spec%attributes = attributes
! regrid_param
field_spec%regrid_param = EsmfRegridderParam() ! use default regrid method
if (present(regrid_param)) field_spec%regrid_param = regrid_param
if (present(default_value)) field_spec%default_value = default_value
end function new_FieldSpec_geom