function [iTr] = ioLb2num( ioLb ); % [iTr] = ioLb2num( ioLb ); % convert MITgcm ptracer-io label (2 characters) to ptracer number % do conversion on individual 2c label % or on character array ( N x 2c ) and then return number array (N x 1) % $Header: /home/ubuntu/mnt/e9_copy/MITgcm/utils/matlab/ioLb2num.m,v 1.1 2007/11/05 17:04:16 jmc Exp $ % $Name: $ if size(ioLb,2) == 1 & size(ioLb,2) == 2, N=1; ioLb=ioLb'; else N=size(ioLb,1); end %- step 1 : convert to 2 ASCII code: j1,j2 jj=double(ioLb); j1=jj(:,1); j2=jj(:,2); %fprintf(['%4i ',c1,c2,' %3i %3i\n'],i,j1,j2); % native2unicode() ; unicode2native() : % 0-9 :: 48-57 % A-Z :: 65-90 % a-z :: 97-122 n0=double('0'); ne=10+n0; n1=double('A'); n2=double('a'); nd=double('-'); %- step 2 : convert to 2 digits k1,k2 (both in [0,61]) iTr=-ones(N,1); k1=j1-n1+36; [J]=find( j1 < ne ); k1(J)=j1(J)-n0; [J]=find( j1 >= n2 ); k1(J)=j1(J)-n2+10; [J]=find( j1 < n0 ); k1(J)=0; k2=j2-n1+36; [I]=find( j2 < ne ); k2(I)=j2(I)-n0; [I]=find( j2 >= n2 ); k2(I)=j2(I)-n2+10; [I]=find( j2 < n0 ); k2(I)=0; %- step 3 : build number in modified 62 base from 2 digits k1,k2 % 620 = 100 + (10*2*26) ; 52 = 26+26 ; 62=10+26+26 iTr= 0 + 62*k1 + k2; [I]=find( j1 < ne & j2 < ne ); iTr(I)= 0 + 10*k1(I) + k2(I); [I]=find( j1 < ne & j2 > ne ); iTr(I)=90 + 52*k1(I) + k2(I); [I]=find( j1 < n0 | j2 < n0 ); iTr(I)=0; return