time | calls | line |
---|
| | 2 | function [umean,vmean,rhomean,ui,vi,rhoi,Yi] = BGC_DO_simsvdIC (app);
|
| | 3 |
|
| | 4 | %-------------------------------------------------------------------------------
|
| | 5 | % Load realizations.
|
| | 6 | %-------------------------------------------------------------------------------
|
| | 7 |
|
| | 8 | % Load ICs.
|
| | 9 |
|
0.01 | 1 | 10 | load (fullfile(app.DOicDir,'000'));
|
| | 11 |
|
| | 12 | % Set sizes & working storage.
|
| | 13 |
|
| 1 | 14 | Nu = length(u);
|
| 1 | 15 | Nv = length(v);
|
| 1 | 16 | Nrho = length(rho);
|
| | 17 |
|
0.21 | 1 | 18 | var_mat = repmat ( [u./app.sigma_nd(1); v./app.sigma_nd(2); rho./app.sigma_nd(3)] , ...
|
| | 19 | [1 (app.DOnumIC+1)] );
|
| | 20 |
|
| | 21 | % Load remaining realizations.
|
| | 22 |
|
| 1 | 23 | for n = 1:app.DOnumIC
|
1.20 | 120 | 24 | load (fullfile(app.DOicDir,num2str(n,'%3.3d')));
|
0.45 | 120 | 25 | var_mat(:,n+1) = [u./app.sigma_nd(1); v./app.sigma_nd(2); rho./app.sigma_nd(3)];
|
< 0.01 | 120 | 26 | end;
|
| | 27 |
|
| | 28 | %-------------------------------------------------------------------------------
|
| | 29 | % Create modes from SVD.
|
| | 30 | %-------------------------------------------------------------------------------
|
| | 31 |
|
| | 32 | % Remove mean.
|
| | 33 |
|
0.08 | 1 | 34 | var_mean = mean(var_mat,2);
|
| | 35 |
|
0.38 | 1 | 36 | var_mat = var_mat - repmat ( var_mean , [1 (app.DOnumIC+1)] );
|
| | 37 |
|
| 1 | 38 | var_mat = var_mat;
|
| | 39 |
|
| | 40 | % Take SVD.
|
| | 41 |
|
12.17 | 1 | 42 | [Umat, Svals, Vmat] = svd (var_mat, 0);
|
| | 43 |
|
| 1 | 44 | clear var_mat;
|
| | 45 |
|
| | 46 | % Extract redimensionalized modes.
|
| | 47 |
|
| 1 | 48 | umean = var_mean((1:Nu)).*app.sigma_nd(1);
|
| 1 | 49 | vmean = var_mean((Nu+(1:Nv))).*app.sigma_nd(2);
|
< 0.01 | 1 | 50 | rhomean = var_mean((Nu+Nv+(1:Nrho))).*app.sigma_nd(3);
|
| | 51 |
|
| 1 | 52 | clear var_mean
|
| | 53 |
|
| 1 | 54 | mode_ind = 1:app.S(1);
|
| | 55 |
|
0.05 | 1 | 56 | ui = Umat((1:Nu),mode_ind).*app.sigma_nd(1);
|
0.04 | 1 | 57 | vi = Umat((Nu+(1:Nv)),mode_ind).*app.sigma_nd(2);
|
0.05 | 1 | 58 | rhoi = Umat((Nu+Nv+(1:Nrho)),mode_ind).*app.sigma_nd(3);
|
| | 59 |
|
< 0.01 | 1 | 60 | clear Umat Vmat;
|
| | 61 |
|
| | 62 | %-------------------------------------------------------------------------------
|
| | 63 | % Create coefficients from SVD.
|
| | 64 | %-------------------------------------------------------------------------------
|
| | 65 |
|
| 1 | 66 | Yi = zeros (app.MC,app.S(1));
|
| | 67 |
|
| 1 | 68 | for n=1:app.S(1)
|
0.03 | 40 | 69 | Yi(:,n) = sqrt(Svals(n,n)).*normrnd(0,1,app.MC,1);
|
| 40 | 70 | end
|
| | 71 |
|
| 1 | 72 | Yi = Yi.*(sqrt(app.varscale)/ (prod(app.sigma_nd)^(1/length(app.sigma_nd))) ); % if M is realiz matrix, then P=M*M^T/n_r.
|