; docformat = 'rst' ;+ ;Takes in an input vector then it determines its dimensions and determines ;the values of each of the dimensions of the vector. This supports a vector ;with a maximum dimensionality of four dimensions. ; ; :Examples: ; resolve_grid, v, x=x, y=y, z=z, w=w, n_dimension_vec=n_dimension_vec ;- ;+ ; :Params: ; v : in, required, type=vector of int or vector of double ; Input vector to resolve dimensionality and dimensional values. ; ; :Keywords: ; x : out, optional, type=int or double ; Scalar value of the x-dimension of the vector. ; y : out, optional, type=int or double ; Scalar value of the y-dimension of the vector. ; z : out, optional, type=int or double ; Scalar value of the z-dimension of the vector. ; w : out, optional, type=int or double ; Scalar value of the w-dimension of the vector. ; n_dimension_vec : out, optional, type=int or double ; Number of dimensions of the vector. ;- pro resolve_grid,v,x=x,y=y,z=z,w=w,n_dimension_vec=n_dimension_vec s=size(v,/dim) ndims=n_elements(s)-1 n_dimension_vec=s[ndims] case ndims of -1: begin message,"Must pass a vector or grid of vectors" return end 0: begin if n_dimension_vec ge 1 then x=v[0]; if n_dimension_vec ge 2 then y=v[1]; if n_dimension_vec ge 3 then z=v[2]; if n_dimension_vec ge 4 then w=v[3]; end 1: begin if n_dimension_vec ge 1 then x=v[*,0]; if n_dimension_vec ge 2 then y=v[*,1]; if n_dimension_vec ge 3 then z=v[*,2]; if n_dimension_vec ge 4 then w=v[*,3]; end 2: begin if n_dimension_vec ge 1 then x=v[*,*,0]; if n_dimension_vec ge 2 then y=v[*,*,1]; if n_dimension_vec ge 3 then z=v[*,*,2]; if n_dimension_vec ge 4 then w=v[*,*,3]; end 3: begin if n_dimension_vec ge 1 then x=v[*,*,*,0]; if n_dimension_vec ge 2 then y=v[*,*,*,1]; if n_dimension_vec ge 3 then z=v[*,*,*,2]; if n_dimension_vec ge 4 then w=v[*,*,*,3]; end else: begin message,"Unsupported grid dimension" end endcase end