1 |
function [PHI,phi,varargout]=gcmfaces_phitheta(T,dT,Theta,varargin); |
2 |
% GCMFACES_PHITHETA parameterized probability distribution diagnostic |
3 |
% |
4 |
% [PHI,phi]=gcmfaces_phitheta(T,dT,Theta) computes the |
5 |
% probabilities that theta<=Theta (PHI) and theta=Theta (phi) |
6 |
% assuming that the theta probably density is homogeneous around T |
7 |
% (i.e., equal to 1/2/dT in the [T-dT T+dT] range). |
8 |
% |
9 |
% [PHI,phi,dPHIdt]=gcmfaces_phitheta(T,dT,Theta,H) additionally |
10 |
% computes the -phi*H rate of change in PHI associated with the |
11 |
% action of H. |
12 |
% |
13 |
% The T input can be from the double or gcmfaces class whereas dT and |
14 |
% Theta must be of the double class. While dT must be a scalar value, |
15 |
% T and/or Theta can have one or several non-singleton dimensions. |
16 |
% In these cases T and Theta dimensions get coumpounded except |
17 |
% for singleton dimensions when T or Theta is a column vector. |
18 |
% |
19 |
% examples: |
20 |
% |
21 |
% T=[3:0.01:10]; dT=0.5; Theta=6; |
22 |
% [PHI,phi]=gcmfaces_phitheta(T,dT,Theta); |
23 |
% |
24 |
% T=[3:0.01:10]'; dT=0.5; Theta=[-3:0.1:30]'; |
25 |
% [PHI,phi]=gcmfaces_phitheta(T,dT,Theta); |
26 |
% |
27 |
% dir0='release2_climatology/nctiles_climatology/'; rhocp=1029.*3994; |
28 |
% SST=read_nctiles([dir0 'THETA/THETA'],'THETA',[],1); |
29 |
% oceQnet=read_nctiles([dir0 'oceQnet/oceQnet'],'oceQnet'); |
30 |
% [PHI,phi,dPHIdt]=gcmfaces_phitheta(SST,0.5,6,1/rhocp*oceQnet); |
31 |
|
32 |
if ~isempty(which('gcmfaces_global')); gcmfaces_global; end; |
33 |
if isempty(which('gcmfaces_global'))&isa(T,'gcmfaces'); |
34 |
error('gcmfaces is missing from Matlab path'); |
35 |
end; |
36 |
|
37 |
if nargin<3; error('incorrect input parameter specification'); end; |
38 |
|
39 |
%identify input dimensions |
40 |
if isa(T,'gcmfaces'); ndimT=size(T{1}); else; ndimT=size(T); end; |
41 |
if ndimT(end)==1; ndimT=length(ndimT)-1; else; ndimT=length(ndimT); end; |
42 |
ndimTheta=length(size(Theta)); |
43 |
|
44 |
%replicate T if needed to coumpound dimensions |
45 |
tmp1=[ones(1,ndimT) size(Theta)]; |
46 |
T=repmat(T,tmp1); |
47 |
for ii=1:nargin-3; |
48 |
varargout{ii}=repmat(varargin{ii},tmp1); |
49 |
end; |
50 |
|
51 |
%replicate Theta if needed to coumpound dimensions |
52 |
tmp1=[[1:ndimT]+ndimTheta [1:ndimTheta]]; |
53 |
Theta=permute(Theta,tmp1); |
54 |
if isa(T,'gcmfaces'); |
55 |
tmp1=size(T{1}); |
56 |
tmp1=[mygrid.ioSize tmp1(3:ndimT) ones(1,ndimTheta)]; |
57 |
Theta=convert2gcmfaces(repmat(Theta,tmp1)); |
58 |
else; |
59 |
tmp1=size(T); |
60 |
tmp1=[tmp1([1:ndimT]) ones(1,ndimTheta)]; |
61 |
Theta=repmat(Theta,tmp1); |
62 |
end; |
63 |
|
64 |
%compte PHI and phi |
65 |
PHI=(Theta-T+dT)/(2*dT); |
66 |
phi=0*T+1/(2*dT); |
67 |
|
68 |
PHI(PHI<0)=0; PHI(PHI>1)=1; |
69 |
phi(PHI==0)=0; phi(PHI==1)=0; |
70 |
|
71 |
%compute transformation rates |
72 |
for ii=1:nargin-3; |
73 |
varargout{ii}=-varargout{ii}.*phi; |
74 |
end; |
75 |
|
76 |
|