-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPOP_heat_transport_multitransects.m
3538 lines (3120 loc) · 318 KB
/
POP_heat_transport_multitransects.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
% compute (meridional) heat transport across multiple latitude transects,
% and plot as a function of latitude
path(path,'~/POP/')
path(path,'~/plotting_scripts/')
cd('/indopac/adelman/Global_mesoscale/POP/')
plot_name = 'Atlantic_35.5N_50N';
time_range_start = [1978 01 01];
time_range_end = [1983 01 01];
grid_res = 0.1;
% model year offset
year_offset = 1976;
temp_budget_fileform_1 = '/indopac/adelman/POP/pop.h.nday5.JC.NAtl35_50.';
temp_budget_fileform_2 = '.temp.nc';
% lat_transects_vec = [-34.7; ((-34):2:70)'];
% lon_bounds_array = [[-59; ((-59):4:(-51))'; -50.5; -50; ((-49):4:(-41))'; ((-40.8):0.2:(-40.2))'; -37; -36; -36; -41; -48; ((-52)*ones(3,1)); -58; -77; ((-84)*ones(3,1)); -89; -89; -97; ((-98)*ones(4,1)); -90; -82; -79; -76; -77; -75; -71; -70; -64; -67; -67; -82; -83; -88; -94; -96; -95; -91; -87; -89; -93] [20; (19:(-0.5):18)'; 16.5; 15*ones(3,1); 14; 12; 12; 13; 14; 14; (14:(-1):10)'; 10; 10; 6; -12; -13; -15; ((-16)*ones(5,1)); -15; -14; -12; -9; 35; 36; 36; 28; 27; 42; 40; 38; -4; 2; 4; 9; 21; 25; 31; 22; 24; 13; 17; 22]];
% spatial_scale_separation_vec = [5.0*ones(4,1); (5.4:0.4:9.8)'; (10*ones(5,1)); (9.8:(-0.4):5.4)'; 5.0*ones(21,1)]; % averaging scale to separate large-scale from mesoscale, in degrees longitude
% lat_transects_vec = (20:2:30)';
% lon_bounds_array = [[-97; ((-98)*ones(4,1)); -90] [((-16)*ones(2,1)); -15; -14; -12; -9]];
% spatial_scale_separation_vec = (7.0:(-0.4):5.0)'; % averaging scale to separate large-scale from mesoscale, in degrees longitude
lat_transects_vec = [35.5; 36.5; (38:2:50)'];
lon_bounds_array = [[-76.2; -76.2; -77; -75; -71; -70; -64; -67; -67] [-5.8; -6.0; ((-8)*ones(3,1)); -1; -1; -4; 1.5]];
spatial_scale_separation_vec = 5.0*ones(9,1); % averaging scale to separate large-scale from mesoscale, in degrees longitude
depth_range = [0 6000];
time_scale_separation = (3/12)*365.24; % time scale to separate low frequency from high frequency variability
n_files = time_range_end(1) - time_range_start(1);
time_bound = NaN([0 2]);
file_num_vec = [];
in_file_ind_vec = [];
for file_num_ind = 1:n_files
curr_model_yr = time_range_start(1) + (file_num_ind - 1) - year_offset;
if curr_model_yr < 10
curr_yearstr = ['000',num2str(curr_model_yr)];
else
curr_yearstr = ['00',num2str(curr_model_yr)];
end
curr_filename = [temp_budget_fileform_1,curr_yearstr,temp_budget_fileform_2];
time_bound_curr_source_file = (ncread(curr_filename,'time_bound'))';
time_bound = [time_bound; time_bound_curr_source_file];
file_num_vec = [file_num_vec; (file_num_ind*ones(size(time_bound_curr_source_file)))];
in_file_ind_vec = [in_file_ind_vec; ((1:1:size(time_bound_curr_source_file,1))')];
end
time_datenum = mean(time_bound,2);
datenum_start = (365*(time_range_start(1) - year_offset)) + (datenum([1990 time_range_start(2:3)]) - datenum([1990 01 01]));
datenum_end = (365*(time_range_end(1) - year_offset)) + (datenum([1990 time_range_end(2:3)]) - datenum([1990 01 01]));
% extract POP output
curr_yearstr = '0002';
curr_filename = [temp_budget_fileform_1,curr_yearstr,temp_budget_fileform_2];
longitude = ncread(curr_filename,'TLONG');
land_ind = find(longitude < -1e-5);
longitude(land_ind) = max(max(max(longitude)));
latitude = ncread(curr_filename,'TLAT');
latitude(land_ind) = max(max(max(latitude)));
level = 0.01*ncread(curr_filename,'z_t');
longitude_vel = ncread(curr_filename,'ULONG');
latitude_vel = ncread(curr_filename,'ULAT');
lev_wvel = 0.01*ncread(curr_filename,'z_w_bot');
dz = 0.01*ncread(curr_filename,'dz');
size_array = [size(longitude) length(level) length(time_datenum)];
in_lev_range_ind = find((level - depth_range(1) >= -1e-5) & (level - depth_range(2) <= 1e-5));
in_lev_range_ind = (max([1 (min(in_lev_range_ind) - 1)]):1:min([length(level) (max(in_lev_range_ind) + 2)]))';
in_time_range_ind = find((time_datenum - datenum_start >= -1e-5) & (time_datenum - datenum_end <= 1e-5));
depth_in_range = level(in_lev_range_ind);
time_datenum_in_range = time_datenum(in_time_range_ind);
depth_in_range_wvel = lev_wvel(in_lev_range_ind);
lon_in_range_vel_all = (min(lon_bounds_array(:,1)):grid_res:max(lon_bounds_array(:,2)))';
size_array_all = [length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind) length(in_time_range_ind)];
cumint_vol_flux_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_vol_flux_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_vol_flux_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
vol_transport_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_zonmean_tmean_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_zonmean_tmean_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_zonmean_tmean_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_zonmean_tmean_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_zonmean_lowfreq_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_zonmean_lowfreq_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_zonmean_lowfreq_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_zonmean_lowfreq_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_zonmean_highfreq_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_zonmean_highfreq_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_zonmean_highfreq_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_zonmean_highfreq_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_largescale_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_largescale_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_largescale_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_largescale_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_largescale_tmean_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_largescale_tmean_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_largescale_tmean_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_largescale_tmean_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_largescale_lowfreq_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_largescale_lowfreq_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_largescale_lowfreq_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_largescale_lowfreq_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_largescale_highfreq_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_largescale_highfreq_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_largescale_highfreq_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_largescale_highfreq_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_mesoscale_tmean_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_mesoscale_tmean_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_mesoscale_tmean_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_mesoscale_tmean_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_mesoscale_lowfreq_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_mesoscale_lowfreq_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_mesoscale_lowfreq_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_mesoscale_lowfreq_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_mesoscale_highfreq_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_mesoscale_highfreq_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_mesoscale_highfreq_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_mesoscale_highfreq_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_undef_tmean_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_undef_tmean_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_undef_tmean_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_undef_tmean_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_undef_lowfreq_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_undef_lowfreq_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_undef_lowfreq_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_undef_lowfreq_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_undef_highfreq_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_undef_highfreq_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_undef_highfreq_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_undef_highfreq_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
cumint_heat_flux_all_atdepth_tavg_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_lev_range_ind)]);
cumint_heat_flux_all_across_transect_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all) length(in_time_range_ind)]);
integrated_heat_flux_all_tmean_array = NaN([length(lat_transects_vec) length(lon_in_range_vel_all)]);
heat_transport_all_tseries_array = NaN([length(lat_transects_vec) length(in_time_range_ind)]);
corr_zonmean_all_vec = zeros([length(lat_transects_vec) 1]);
corr_zonmean_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_zonmean_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_largescale_all_vec = zeros([length(lat_transects_vec) 1]);
corr_largescale_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_largescale_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_mesoscale_all_vec = zeros([length(lat_transects_vec) 1]);
corr_mesoscale_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_mesoscale_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_undef_all_vec = zeros([length(lat_transects_vec) 1]);
corr_undef_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_undef_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_largepundef_all_vec = zeros([length(lat_transects_vec) 1]);
corr_largepundef_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_largepundef_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_zonmean_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_zonmean_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_zonmean_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_largescale_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_largescale_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_largescale_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_mesoscale_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_mesoscale_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_mesoscale_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_undef_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_undef_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_undef_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_largepundef_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_largepundef_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_largepundef_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_zonmean_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_zonmean_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_zonmean_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_largescale_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_largescale_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_largescale_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_mesoscale_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_mesoscale_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_mesoscale_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_undef_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_undef_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_undef_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_largepundef_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_largepundef_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_largepundef_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_zonmean_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_zonmean_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_zonmean_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_largescale_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_largescale_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_largescale_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_mesoscale_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_mesoscale_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_mesoscale_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_undef_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_undef_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_undef_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_largepundef_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_largepundef_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_largepundef_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_lowbound_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_zonmean_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_zonmean_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_zonmean_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_largescale_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_largescale_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_largescale_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_mesoscale_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_mesoscale_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_mesoscale_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_undef_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_undef_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_undef_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_largepundef_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_largepundef_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_largepundef_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_lowfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_highfreq_all_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_zonmean_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_zonmean_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_zonmean_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_largescale_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_largescale_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_largescale_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_mesoscale_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_mesoscale_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_mesoscale_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_undef_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_undef_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_undef_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_largepundef_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_largepundef_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_largepundef_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_lowfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
corr_highbound_highfreq_all_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_zonmean_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_zonmean_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_zonmean_lowfreq_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_zonmean_lowfreq_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_zonmean_highfreq_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_zonmean_highfreq_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_largescale_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_largescale_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_largescale_lowfreq_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_largescale_lowfreq_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_largescale_highfreq_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_largescale_highfreq_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_mesoscale_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_mesoscale_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_mesoscale_lowfreq_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_mesoscale_lowfreq_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_mesoscale_highfreq_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_mesoscale_highfreq_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_undef_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_undef_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_undef_lowfreq_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_undef_lowfreq_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_undef_highfreq_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_undef_highfreq_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_largepundef_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_largepundef_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_largepundef_lowfreq_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_largepundef_lowfreq_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_largepundef_highfreq_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_largepundef_highfreq_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_lowfreq_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_lowfreq_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_highfreq_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_highfreq_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_zonmean_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_zonmean_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_zonmean_lowfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_zonmean_lowfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_zonmean_highfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_zonmean_highfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_largescale_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_largescale_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_largescale_lowfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_largescale_lowfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_largescale_highfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_largescale_highfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_mesoscale_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_mesoscale_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_mesoscale_lowfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_mesoscale_lowfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_mesoscale_highfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_mesoscale_highfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_undef_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_undef_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_undef_lowfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_undef_lowfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_undef_highfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_undef_highfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_largepundef_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_largepundef_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_largepundef_lowfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_largepundef_lowfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_largepundef_highfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_largepundef_highfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_lowfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_lowfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
frac_var_explained_highfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
var_ratio_highfreq_ID_vec = zeros([length(lat_transects_vec) 1]);
for transect_ind = 1:length(lat_transects_vec)
size_array = [size(longitude) length(level) length(time_datenum)];
lat_transect = lat_transects_vec(transect_ind);
lon_bounds = lon_bounds_array(transect_ind,:);
spatial_scale_separation = spatial_scale_separation_vec(transect_ind);
if ((mod(lon_bounds(2) - lon_bounds(1) - 1e-5,360) + 1e-5 > mod(max(max(max(longitude))) - lon_bounds(1) - 1e-5,360) + 1e-5) || (mod(lon_bounds(2) - lon_bounds(1) - 1e-5,360) + 1e-5 > mod(lon_bounds(2) - min(min(min(longitude))) - 1e-5,360) + 1e-5))
in_region_grid_ind = find(((longitude - (mod(lon_bounds(1) - min(min(min(longitude))),360) + min(min(min(longitude)))) >= 0) | (longitude - (mod(lon_bounds(2) - min(min(min(longitude))),360) + min(min(min(longitude)))) <= 0)) & (latitude - lat_transect >= (-2*grid_res)) & (latitude - lat_transect <= (2*grid_res)));
else
in_region_grid_ind = find(((longitude - (mod(lon_bounds(1) - min(min(min(longitude))),360) + min(min(min(longitude)))) >= 0) & (longitude - (mod(lon_bounds(2) - min(min(min(longitude))),360) + min(min(min(longitude)))) <= 0)) & (latitude - lat_transect >= (-2*grid_res)) & (latitude - lat_transect <= (2*grid_res)));
end
in_region_i_ind = mod(in_region_grid_ind - 1,size_array(1)) + 1;
in_region_j_ind = ceil(in_region_grid_ind/size_array(1));
% if max(diff(unique(in_region_i_ind))) > 1.5
% curr_unique = unique(in_region_i_ind);
% [~,gap_ind] = max(diff(curr_unique));
% region_i_ind = [(curr_unique(gap_ind + 1):1:size_array(1))'; (1:1:curr_unique(gap_ind))'];
% else
region_i_ind = unique(in_region_i_ind);
% end
start_marker_grid_ind = find((abs((mod(longitude - lon_bounds(1) + 180,360) - 180) - 0) < (0.51*grid_res)) & (latitude - lat_transect >= (-3*grid_res)) & (latitude - lat_transect <= (3*grid_res)));
start_marker_i_ind = mod(start_marker_grid_ind - 1,size_array(1)) + 1;
end_marker_grid_ind = find((abs((mod(longitude - lon_bounds(2) + 180,360) - 180) - (-0)) < (0.51*grid_res)) & (latitude - lat_transect >= (-3*grid_res)) & (latitude - lat_transect <= (3*grid_res)));
end_marker_i_ind = mod(end_marker_grid_ind - 1,size_array(1)) + 1;
if max(diff(unique(start_marker_i_ind))) > 1.5
curr_unique = unique(start_marker_i_ind);
[~,gap_ind] = max(diff(curr_unique));
start_marker_i_ind = [(curr_unique(gap_ind + 1):1:size_array(1))'; (1:1:curr_unique(gap_ind))'];
else
start_marker_i_ind = unique(start_marker_i_ind);
end
if max(diff(unique(end_marker_i_ind))) > 1.5
curr_unique = unique(end_marker_i_ind);
[~,gap_ind] = max(diff(curr_unique));
end_marker_i_ind = [(curr_unique(gap_ind + 1):1:size_array(1))'; (1:1:curr_unique(gap_ind))'];
else
end_marker_i_ind = unique(end_marker_i_ind);
end
% if ((isempty(intersect(start_marker_i_ind,end_marker_i_ind)) == 0) && (isempty(setdiff(region_i_ind,unique([start_marker_i_ind; end_marker_i_ind]))) == 0))
% if start_marker_i_ind(length(start_marker_i_ind)) > end_marker_i_ind(1)
% in_lon_range_ind = [start_marker_i_ind; (start_marker_i_ind(length(start_marker_i_ind)):1:size_array(1))'; (1:1:(end_marker_i_ind(1)))'; end_marker_i_ind];
% else
% in_lon_range_ind = [start_marker_i_ind; ((mod(start_marker_i_ind(length(start_marker_i_ind)) + 1 - 1,size_array(1)) + 1):1:(mod(end_marker_i_ind(1) - 1 - 1,size_array(1)) + 1))'; end_marker_i_ind];
% end
% elseif ((isempty(intersect(start_marker_i_ind,end_marker_i_ind)) == 1) && (isempty(setdiff(region_i_ind,unique([start_marker_i_ind; end_marker_i_ind]))) == 0))
% if isempty(intersect(mod(min(start_marker_i_ind) + [0 1 2] - 1,size_array(1)) + 1,region_i_ind(1))) == 0
% if start_marker_i_ind(length(start_marker_i_ind)) > end_marker_i_ind(1)
% in_lon_range_ind = [start_marker_i_ind; (start_marker_i_ind(length(start_marker_i_ind)):1:size_array(1))'; (1:1:(end_marker_i_ind(1)))'; end_marker_i_ind];
% else
% in_lon_range_ind = [start_marker_i_ind; ((mod(start_marker_i_ind(length(start_marker_i_ind)) + 1 - 1,size_array(1)) + 1):1:(mod(end_marker_i_ind(1) - 1 - 1,size_array(1)) + 1))'; end_marker_i_ind];
% end
% else
% if end_marker_i_ind(length(end_marker_i_ind)) > start_marker_i_ind(1)
% in_lon_range_ind = [end_marker_i_ind; (end_marker_i_ind(length(end_marker_i_ind)):1:size_array(1))'; (1:1:(start_marker_i_ind(1)))'; start_marker_i_ind];
% else
% in_lon_range_ind = [end_marker_i_ind; ((mod(end_marker_i_ind(length(end_marker_i_ind)) + 1 - 1,size_array(1)) + 1):1:(mod(start_marker_i_ind(1) - 1 - 1,size_array(1)) + 1))'; start_marker_i_ind];
% end
% end
% elseif ((isempty(intersect(start_marker_i_ind,end_marker_i_ind)) == 0) && (isempty(setdiff(region_i_ind,unique([start_marker_i_ind; end_marker_i_ind]))) == 1))
% if isempty(intersect(mod(min(start_marker_i_ind) + [0 1 2] - 1,size_array(1)) + 1,region_i_ind(1))) == 0
% first_overlap_ind = find(start_marker_i_ind == end_marker_i_ind(1));
% in_lon_range_ind = [start_marker_i_ind(1:(first_overlap_ind - 1)); end_marker_i_ind];
% else
% first_overlap_ind = find(end_marker_i_ind == start_marker_i_ind(1));
% in_lon_range_ind = [end_marker_i_ind(1:(first_overlap_ind - 1)); start_marker_i_ind];
% end
% elseif ((isempty(intersect(start_marker_i_ind,end_marker_i_ind)) == 1) && (isempty(setdiff(region_i_ind,unique([start_marker_i_ind; end_marker_i_ind]))) == 1))
% if mod(end_marker_i_ind(1) - start_marker_i_ind(length(start_marker_i_ind)),size_array(1)) == 1
% in_lon_range_ind = [start_marker_i_ind; end_marker_i_ind];
% else
% in_lon_range_ind = [end_marker_i_ind; start_marker_i_ind];
% end
% end
curr_unique = unique([region_i_ind; start_marker_i_ind; end_marker_i_ind]);
if diff(lon_bounds) > 359
in_lon_range_ind = [start_marker_i_ind; ((start_marker_i_ind(length(start_marker_i_ind)) + 1):1:size_array(1))'; (1:1:(end_marker_i_ind(1) - 1))'; end_marker_i_ind];
elseif max(diff(curr_unique)) > 2
[~,gap_ind] = max(diff(curr_unique));
if ((ismember(curr_unique(gap_ind + 1),start_marker_i_ind) == 1) || (isempty(find(ismember([1 size_array(1)],curr_unique) == 1,1)) == 0))
in_lon_range_ind = [(curr_unique(gap_ind + 1):1:size_array(1))'; (1:1:curr_unique(gap_ind))'];
else
in_lon_range_ind = (curr_unique(1):1:curr_unique(length(curr_unique)))';
end
else
in_lon_range_ind = (curr_unique(1):1:curr_unique(length(curr_unique)))';
end
% expand the index range to include a buffer
n_i_buffer_ind = 2;
n_j_buffer_ind = 2;
in_lon_range_ind = [(mod(in_lon_range_ind(1) + ((-n_i_buffer_ind):1:(-1))' - 1,size_array(1)) + 1); in_lon_range_ind; (mod(in_lon_range_ind(length(in_lon_range_ind)) + (1:1:n_i_buffer_ind)' - 1,size_array(1)) + 1)]; %#ok<AGROW>
in_lon_range_ind = in_lon_range_ind((in_lon_range_ind >= 1) & (in_lon_range_ind <= size_array(1)));
in_lat_range_ind = [(min(in_region_j_ind) + ((-n_j_buffer_ind):1:(-1))'); unique(in_region_j_ind); (max(in_region_j_ind) + (1:1:n_j_buffer_ind)')];
in_lat_range_ind = in_lat_range_ind((in_lat_range_ind >= 1) & (in_lat_range_ind <= size_array(2)));
% in_lev_range_ind = find((level - depth_range(1) >= -1e-5) & (level - depth_range(2) <= 1e-5));
% in_lev_range_ind = (max([1 (min(in_lev_range_ind) - 1)]):1:min([length(level) (max(in_lev_range_ind) + 2)]))';
% in_time_range_ind = find((time_datenum - datenum_start >= -1e-5) & (time_datenum - datenum_end <= 1e-5));
lon_in_range = longitude(in_lon_range_ind,in_lat_range_ind);
lat_in_range = latitude(in_lon_range_ind,in_lat_range_ind);
depth_in_range = double(level(in_lev_range_ind));
time_datenum_in_range = time_datenum(in_time_range_ind);
time_bound_datenum_in_range = time_bound(in_time_range_ind,:);
file_num_in_range_vec = file_num_vec(in_time_range_ind);
in_file_ind_in_range_vec = in_file_ind_vec(in_time_range_ind);
lon_in_range_vel = longitude_vel(in_lon_range_ind,in_lat_range_ind);
lat_in_range_vel = latitude_vel(in_lon_range_ind,in_lat_range_ind);
% depth_in_range_wvel = double(lev_wvel(in_lev_range_ind));
if ismember(1,in_lev_range_ind) == 1
depth_in_range_wvel = double(cumsum(dz(in_lev_range_ind)));
else
depth_in_range_wvel = double(sum(dz(1:(min(in_lev_range_ind) - 1))) + cumsum(dz(in_lev_range_ind)));
end
size_array = [length(in_lon_range_ind) length(in_lat_range_ind) length(in_lev_range_ind) length(in_time_range_ind)];
delta_t = mean(diff(time_datenum_in_range));
n_depth_subsets = ceil(prod(size_array([1 2]))/(1e4));
size_depth_subset = ceil(size_array(3)/n_depth_subsets);
bottom_depth_in_range = NaN([size_array(1:2) 1 1]);
uvel_in_range = NaN(size_array);
vvel_in_range = NaN(size_array);
temp_in_range = NaN(size_array);
uet_in_range = NaN(size_array);
vnt_in_range = NaN(size_array);
SSH_in_range = NaN([size_array(1:2) 1 size_array(4)]);
hte = NaN([size_array(1:2) 1 1]);
htn = NaN([size_array(1:2) 1 1]);
dxu = NaN([size_array(1:2) 1 1]);
dyu = NaN([size_array(1:2) 1 1]);
tarea = NaN([size_array(1:2) 1 1]);
angle = NaN([size_array(1:2) 1 1]);
% anglet = NaN([size_array(1:2) 1 1]);
for file_num_ind = 1:n_files
curr_model_yr = time_range_start(1) + (file_num_ind - 1) - year_offset;
if curr_model_yr < 10
curr_yearstr = ['000',num2str(curr_model_yr)];
else
curr_yearstr = ['00',num2str(curr_model_yr)];
end
curr_filename = [temp_budget_fileform_1,curr_yearstr,temp_budget_fileform_2];
curr_time_subset_ind = find(file_num_in_range_vec == file_num_ind);
curr_in_time_range_ind = in_file_ind_in_range_vec(curr_time_subset_ind);
for depth_subset_ind = 1:ceil(size_array(3)/size_depth_subset)
curr_subset_ind = ((((depth_subset_ind - 1)*size_depth_subset) + 1):1:min([(depth_subset_ind*size_depth_subset) size_array(3)]))';
curr_in_lev_range_ind = in_lev_range_ind(curr_subset_ind);
if ((length(find(ismember([1 size(longitude,1)],in_lon_range_ind) == 1)) > 1) && ((in_lon_range_ind(1) ~= 1) || (in_lon_range_ind(length(in_lon_range_ind)) ~= size(longitude,1))))
if length(find(diff(in_lon_range_ind) >= 2)) >= 2
disp('Error: multiple gaps')
end
large_gap_ind = find(diff(in_lon_range_ind) >= 2);
if isempty(large_gap_ind) == 0
lon_range_ind_span_1 = max(in_lon_range_ind) - in_lon_range_ind(large_gap_ind + 1) + 1;
lon_range_ind_span_2 = in_lon_range_ind(large_gap_ind) - min(in_lon_range_ind) + 1;
in_lon_range_ind = in_lon_range_ind([((large_gap_ind + 1):1:length(lon_in_range))'; (1:1:large_gap_ind)']);
lon_in_range = lon_in_range([((large_gap_ind + 1):1:length(lon_in_range))'; (1:1:large_gap_ind)'],in_lat_range_ind);
lon_in_range_vel = lon_in_range_vel([((large_gap_ind + 1):1:length(lon_in_range_vel))'; (1:1:large_gap_ind)'],in_lat_range_ind);
end
if isempty(find(diff(in_lon_range_ind) < 0,1)) == 0
lon_range_ind_span_1 = max(in_lon_range_ind) - in_lon_range_ind(1) + 1;
lon_range_ind_span_2 = in_lon_range_ind(length(in_lon_range_ind)) - min(in_lon_range_ind) + 1;
end
lat_range_ind_span = max(in_lat_range_ind) - min(in_lat_range_ind) + 1;
% depth_range_ind_span = max(in_lev_range_ind) - min(in_lev_range_ind) + 1;
depth_range_ind_span = max(curr_in_lev_range_ind) - min(curr_in_lev_range_ind) + 1;
time_range_ind_span = max(curr_in_time_range_ind) - min(curr_in_time_range_ind) + 1;
% start_vec = [in_lon_range_ind(large_gap_ind + 1) min(in_lat_range_ind) min(in_lev_range_ind) min(in_time_range_ind)];
% start_vec = [in_lon_range_ind(large_gap_ind + 1) min(in_lat_range_ind) min(curr_in_lev_range_ind) min(in_time_range_ind)];
start_vec = [in_lon_range_ind(1) min(in_lat_range_ind) min(curr_in_lev_range_ind) min(curr_in_time_range_ind)];
count_vec = [lon_range_ind_span_1 lat_range_ind_span depth_range_ind_span time_range_ind_span];
curr_uvel_in_range = 0.01*double(ncread(curr_filename,'UVEL',start_vec,count_vec));
curr_vvel_in_range = 0.01*double(ncread(curr_filename,'VVEL',start_vec,count_vec));
curr_temp_in_range = double(ncread(curr_filename,'TEMP',start_vec,count_vec));
curr_uet_in_range = double(ncread(curr_filename,'UET',start_vec,count_vec));
curr_vnt_in_range = double(ncread(curr_filename,'VNT',start_vec,count_vec));
if depth_subset_ind == 1
curr_bottom_depth_in_range = 0.01*double(ncread(curr_filename,'HT',start_vec(1:2),count_vec(1:2)));
curr_SSH_in_range = reshape(0.01*double(ncread(curr_filename,'SSH',start_vec([1 2 4]),count_vec([1 2 4]))),[count_vec(1:2) 1 count_vec(4)]);
curr_hte_in_range = 0.01*double(ncread(curr_filename,'HTE',start_vec(1:2),count_vec(1:2)));
curr_htn_in_range = 0.01*double(ncread(curr_filename,'HTN',start_vec(1:2),count_vec(1:2)));
curr_dxu_in_range = 0.01*double(ncread(curr_filename,'DXU',start_vec(1:2),count_vec(1:2)));
curr_dyu_in_range = 0.01*double(ncread(curr_filename,'DYU',start_vec(1:2),count_vec(1:2)));
curr_tarea_in_range = (1e-4)*double(ncread(curr_filename,'TAREA',start_vec(1:2),count_vec(1:2)));
curr_angle_in_range = double(ncread(curr_filename,'ANGLE',start_vec(1:2),count_vec(1:2)));
% curr_anglet_in_range = double(ncread(curr_filename,'ANGLET',start_vec(1:2),count_vec(1:2)));
end
% start_vec = [min(in_lon_range_ind) min(in_lat_range_ind) min(in_lev_range_ind) min(in_time_range_ind)];
start_vec = [min(in_lon_range_ind) min(in_lat_range_ind) min(curr_in_lev_range_ind) min(curr_in_time_range_ind)];
count_vec = [lon_range_ind_span_2 lat_range_ind_span depth_range_ind_span time_range_ind_span];
curr_uvel_in_range_added = 0.01*double(ncread(curr_filename,'UVEL',start_vec,count_vec));
curr_vvel_in_range_added = 0.01*double(ncread(curr_filename,'VVEL',start_vec,count_vec));
curr_temp_in_range_added = double(ncread(curr_filename,'TEMP',start_vec,count_vec));
curr_uet_in_range_added = double(ncread(curr_filename,'UET',start_vec,count_vec));
curr_vnt_in_range_added = double(ncread(curr_filename,'VNT',start_vec,count_vec));
if depth_subset_ind == 1
curr_bottom_depth_in_range_added = 0.01*double(ncread(curr_filename,'HT',start_vec(1:2),count_vec(1:2)));
curr_SSH_in_range_added = reshape(0.01*double(ncread(curr_filename,'SSH',start_vec([1 2 4]),count_vec([1 2 4]))),[count_vec(1:2) 1 count_vec(4)]);
curr_hte_in_range_added = 0.01*double(ncread(curr_filename,'HTE',start_vec(1:2),count_vec(1:2)));
curr_htn_in_range_added = 0.01*double(ncread(curr_filename,'HTN',start_vec(1:2),count_vec(1:2)));
curr_dxu_in_range_added = 0.01*double(ncread(curr_filename,'DXU',start_vec(1:2),count_vec(1:2)));
curr_dyu_in_range_added = 0.01*double(ncread(curr_filename,'DYU',start_vec(1:2),count_vec(1:2)));
curr_tarea_in_range_added = (1e-4)*double(ncread(curr_filename,'TAREA',start_vec(1:2),count_vec(1:2)));
curr_angle_in_range_added = double(ncread(curr_filename,'ANGLE',start_vec(1:2),count_vec(1:2)));
% curr_anglet_in_range_added = double(ncread(curr_filename,'ANGLET',start_vec(1:2),count_vec(1:2)));
end
curr_uvel_in_range = [curr_uvel_in_range; curr_uvel_in_range_added]; %#ok<AGROW>
curr_uvel_in_range(curr_uvel_in_range > 1e15) = 0;
clear curr_uvel_in_range_added
uvel_in_range(:,:,curr_subset_ind,curr_time_subset_ind) = curr_uvel_in_range(:,:,:,curr_in_time_range_ind - min(curr_in_time_range_ind) + 1);
curr_vvel_in_range = [curr_vvel_in_range; curr_vvel_in_range_added]; %#ok<AGROW>
curr_vvel_in_range(curr_vvel_in_range > 1e15) = 0;
clear curr_vvel_in_range_added
vvel_in_range(:,:,curr_subset_ind,curr_time_subset_ind) = curr_vvel_in_range(:,:,:,curr_in_time_range_ind - min(curr_in_time_range_ind) + 1);
curr_temp_in_range = [curr_temp_in_range; curr_temp_in_range_added]; %#ok<AGROW>
curr_temp_in_range(curr_temp_in_range > 1e15) = 0;
clear curr_temp_in_range_added
temp_in_range(:,:,curr_subset_ind,curr_time_subset_ind) = curr_temp_in_range(:,:,:,curr_in_time_range_ind - min(curr_in_time_range_ind) + 1);
curr_uet_in_range = [curr_uet_in_range; curr_uet_in_range_added]; %#ok<AGROW>
curr_uet_in_range(curr_uet_in_range > 1e15) = 0;
clear curr_uet_in_range_added
uet_in_range(:,:,curr_subset_ind,curr_time_subset_ind) = curr_uet_in_range(:,:,:,curr_in_time_range_ind - min(curr_in_time_range_ind) + 1);
curr_vnt_in_range = [curr_vnt_in_range; curr_vnt_in_range_added]; %#ok<AGROW>
curr_vnt_in_range(curr_vnt_in_range > 1e15) = 0;
clear curr_vnt_in_range_added
vnt_in_range(:,:,curr_subset_ind,curr_time_subset_ind) = curr_vnt_in_range(:,:,:,curr_in_time_range_ind - min(curr_in_time_range_ind) + 1);
if depth_subset_ind == 1
curr_bottom_depth_in_range = [curr_bottom_depth_in_range; curr_bottom_depth_in_range_added]; %#ok<AGROW>
curr_bottom_depth_in_range(curr_bottom_depth_in_range > 1e15) = 0;
clear curr_bottom_depth_in_range_added
bottom_depth_in_range(:,:,1,1) = curr_bottom_depth_in_range;
curr_SSH_in_range = [curr_SSH_in_range; curr_SSH_in_range_added]; %#ok<AGROW>
curr_SSH_in_range((curr_SSH_in_range > 1e15) | (isnan(curr_SSH_in_range) == 1)) = 0;
clear curr_SSH_in_range_added
SSH_in_range(:,:,1,curr_time_subset_ind) = curr_SSH_in_range(:,:,:,curr_in_time_range_ind - min(curr_in_time_range_ind) + 1);
curr_hte_in_range = [curr_hte_in_range; curr_hte_in_range_added]; %#ok<AGROW>
curr_hte_in_range(curr_hte_in_range > 1e15) = 0;
clear curr_hte_in_range_added
hte(:,:,1,1) = curr_hte_in_range;
curr_htn_in_range = [curr_htn_in_range; curr_htn_in_range_added]; %#ok<AGROW>
curr_htn_in_range(curr_htn_in_range > 1e15) = 0;
clear curr_htn_in_range_added
htn(:,:,1,1) = curr_htn_in_range;
curr_dxu_in_range = [curr_dxu_in_range; curr_dxu_in_range_added]; %#ok<AGROW>
curr_dxu_in_range(curr_dxu_in_range > 1e15) = 0;
clear curr_dxu_in_range_added
dxu(:,:,1,1) = curr_dxu_in_range;
curr_dyu_in_range = [curr_dyu_in_range; curr_dyu_in_range_added]; %#ok<AGROW>
curr_dyu_in_range(curr_dyu_in_range > 1e15) = 0;
clear curr_dyu_in_range_added
dyu(:,:,1,1) = curr_dyu_in_range;
curr_tarea_in_range = [curr_tarea_in_range; curr_tarea_in_range_added]; %#ok<AGROW>
curr_tarea_in_range(curr_tarea_in_range > 1e15) = 0;
clear curr_tarea_in_range_added
tarea(:,:,1,1) = curr_tarea_in_range;
curr_angle_in_range = [curr_angle_in_range; curr_angle_in_range_added]; %#ok<AGROW>
curr_angle_in_range((curr_angle_in_range > 1e15) | (isnan(curr_angle_in_range) == 1)) = 0;
clear curr_angle_in_range_added
angle(:,:,1,1) = curr_angle_in_range;
% curr_anglet_in_range = [curr_anglet_in_range; curr_anglet_in_range_added]; %#ok<AGROW>
% curr_anglet_in_range((curr_anglet_in_range > 1e15) | (isnan(curr_anglet_in_range) == 1)) = 0;
% clear curr_anglet_in_range_added
% anglet(:,:,1,1) = curr_anglet_in_range;
end
else
lon_range_ind_span = max(in_lon_range_ind) - min(in_lon_range_ind) + 1;
lat_range_ind_span = max(in_lat_range_ind) - min(in_lat_range_ind) + 1;
% depth_range_ind_span = max(in_lev_range_ind) - min(in_lev_range_ind) + 1;
depth_range_ind_span = max(curr_in_lev_range_ind) - min(curr_in_lev_range_ind) + 1;
time_range_ind_span = max(curr_in_time_range_ind) - min(curr_in_time_range_ind) + 1;
% start_vec = [min(in_lon_range_ind) min(in_lat_range_ind) min(in_lev_range_ind) min(in_time_range_ind)];
start_vec = [min(in_lon_range_ind) min(in_lat_range_ind) min(curr_in_lev_range_ind) min(curr_in_time_range_ind)];
count_vec = [lon_range_ind_span lat_range_ind_span depth_range_ind_span time_range_ind_span];
curr_uvel_in_range = 0.01*double(ncread(curr_filename,'UVEL',start_vec,count_vec));
curr_vvel_in_range = 0.01*double(ncread(curr_filename,'VVEL',start_vec,count_vec));
curr_temp_in_range = double(ncread(curr_filename,'TEMP',start_vec,count_vec));
curr_uet_in_range = double(ncread(curr_filename,'UET',start_vec,count_vec));
curr_vnt_in_range = double(ncread(curr_filename,'VNT',start_vec,count_vec));
curr_uvel_in_range(curr_uvel_in_range > 1e15) = 0;
curr_vvel_in_range(curr_vvel_in_range > 1e15) = 0;
curr_temp_in_range(curr_temp_in_range > 1e15) = 0;
curr_uet_in_range(curr_uet_in_range > 1e15) = 0;
curr_vnt_in_range(curr_vnt_in_range > 1e15) = 0;
uvel_in_range(:,:,curr_subset_ind,curr_time_subset_ind) = curr_uvel_in_range(:,:,:,curr_in_time_range_ind - min(curr_in_time_range_ind) + 1);
vvel_in_range(:,:,curr_subset_ind,curr_time_subset_ind) = curr_vvel_in_range(:,:,:,curr_in_time_range_ind - min(curr_in_time_range_ind) + 1);
temp_in_range(:,:,curr_subset_ind,curr_time_subset_ind) = curr_temp_in_range(:,:,:,curr_in_time_range_ind - min(curr_in_time_range_ind) + 1);
uet_in_range(:,:,curr_subset_ind,curr_time_subset_ind) = curr_uet_in_range(:,:,:,curr_in_time_range_ind - min(curr_in_time_range_ind) + 1);
vnt_in_range(:,:,curr_subset_ind,curr_time_subset_ind) = curr_vnt_in_range(:,:,:,curr_in_time_range_ind - min(curr_in_time_range_ind) + 1);
if depth_subset_ind == 1
curr_bottom_depth_in_range = 0.01*double(ncread(curr_filename,'HT',start_vec(1:2),count_vec(1:2)));
curr_SSH_in_range = reshape(0.01*double(ncread(curr_filename,'SSH',start_vec([1 2 4]),count_vec([1 2 4]))),[count_vec(1:2) 1 count_vec(4)]);
curr_hte_in_range = 0.01*double(ncread(curr_filename,'HTE',start_vec(1:2),count_vec(1:2)));
curr_htn_in_range = 0.01*double(ncread(curr_filename,'HTN',start_vec(1:2),count_vec(1:2)));
curr_dxu_in_range = 0.01*double(ncread(curr_filename,'DXU',start_vec(1:2),count_vec(1:2)));
curr_dyu_in_range = 0.01*double(ncread(curr_filename,'DYU',start_vec(1:2),count_vec(1:2)));
curr_tarea_in_range = (1e-4)*double(ncread(curr_filename,'TAREA',start_vec(1:2),count_vec(1:2)));
curr_angle_in_range = double(ncread(curr_filename,'ANGLE',start_vec(1:2),count_vec(1:2)));
% curr_anglet_in_range = double(ncread(curr_filename,'ANGLET',start_vec(1:2),count_vec(1:2)));
curr_bottom_depth_in_range(isnan(curr_bottom_depth_in_range) == 1) = 0;
bottom_depth_in_range(:,:,1,1) = curr_bottom_depth_in_range;
curr_SSH_in_range((curr_SSH_in_range < -999) | (isnan(curr_SSH_in_range) == 1)) = 0;
SSH_in_range(:,:,1,curr_time_subset_ind) = curr_SSH_in_range(:,:,:,curr_in_time_range_ind - min(curr_in_time_range_ind) + 1);
curr_hte_in_range(isnan(curr_hte_in_range) == 1) = 0;
hte(:,:,1,1) = curr_hte_in_range;
curr_htn_in_range(isnan(curr_htn_in_range) == 1) = 0;
htn(:,:,1,1) = curr_htn_in_range;
curr_dxu_in_range(isnan(curr_dxu_in_range) == 1) = 0;
dxu(:,:,1,1) = curr_dxu_in_range;
curr_dyu_in_range(isnan(curr_dyu_in_range) == 1) = 0;
dyu(:,:,1,1) = curr_dyu_in_range;
curr_tarea_in_range(isnan(curr_tarea_in_range) == 1) = 0;
tarea(:,:,1,1) = curr_tarea_in_range;
curr_angle_in_range((curr_angle_in_range > 1e15) | (isnan(curr_angle_in_range) == 1)) = 0;
angle(:,:,1,1) = curr_angle_in_range;
% curr_anglet_in_range((curr_anglet_in_range > 1e15) | (isnan(curr_anglet_in_range) == 1)) = 0;
% anglet(:,:,1,1) = curr_anglet_in_range;
end
end
end
end
angle_imax = NaN(size(angle));
angle_imax(:,2:size_array(2),1,1) = angle(:,2:size_array(2),1,1) - (diff(angle,1,2)/2);
angle_jmax = NaN(size(angle));
angle_jmax(2:size_array(1),:,1,1) = angle(2:size_array(1),:,1,1) - (diff(angle,1,1)/2);
clear curr*
% adjust longitude values to account for branch cut
diff_lon = diff(lon_in_range,1,1);
diff_lon(abs(diff_lon) > 100) = mod(diff_lon(abs(diff_lon) > 100) + 180,360) - 180;
lon_in_range = repmat(lon_in_range(1,:) + (360*round((lon_bounds(1) - lon_in_range(1,:))/360)),[size(lon_in_range,1) 1]) + [zeros([1 size(lon_in_range,2)]); cumsum(diff_lon,1,'forward')];
diff_lon = diff(lon_in_range_vel,1,1);
diff_lon(abs(diff_lon) > 100) = mod(diff_lon(abs(diff_lon) > 100) + 180,360) - 180;
lon_in_range_vel = repmat(lon_in_range_vel(1,:) + (360*round((lon_bounds(1) - lon_in_range_vel(1,:))/360)),[size(lon_in_range_vel,1) 1]) + [zeros([1 size(lon_in_range_vel,2)]); cumsum(diff_lon,1,'forward')];
if ismember(1,in_lev_range_ind) == 1
depth_in_range_wvel_withtop = [0; depth_in_range_wvel];
else
% depth_in_range_wvel_withtop = [double(lev_wvel(min(in_lev_range_ind) - 1)); depth_in_range_wvel];
depth_in_range_wvel_withtop = [sum(dz(1:(min(in_lev_range_ind) - 1))); depth_in_range_wvel];
end
depth_upper_array = depth_range(1)*ones([size_array(1:2) 1]);
depth_lower_array = depth_range(2)*ones([size_array(1:2) 1]);
depth_upper_bound_interp_ind = interp1(depth_in_range_wvel_withtop,1:1:length(depth_in_range_wvel_withtop),reshape(depth_upper_array,[numel(depth_upper_array) 1]));
depth_upper_array = reshape(depth_in_range_wvel_withtop(max([round(depth_upper_bound_interp_ind) ones([length(depth_upper_bound_interp_ind) 1])],[],2)),size(depth_upper_array));
depth_lower_bound_interp_ind = interp1(depth_in_range_wvel_withtop,1:1:length(depth_in_range_wvel_withtop),reshape(depth_lower_array,[numel(depth_lower_array) 1]));
depth_lower_array = reshape(depth_in_range_wvel_withtop(min([round(depth_lower_bound_interp_ind) length(depth_in_range_wvel_withtop)*ones([length(depth_upper_bound_interp_ind) 1])],[],2)),size(depth_lower_array));
bottom_depth_minus_cell_top = repmat(bottom_depth_in_range,[1 1 size_array(3)]) - repmat(reshape(depth_in_range_wvel_withtop(1:size_array(3)),[1 1 size_array(3)]),[size_array(1:2) 1]);
dzt = repmat(reshape(dz(in_lev_range_ind),[1 1 size_array(3)]),[size_array(1:2) 1]);
dzt = reshape(min([reshape(dzt,[prod(size_array(1:3)) 1]) reshape(bottom_depth_minus_cell_top,[prod(size_array(1:3)) 1])],[],2),size_array(1:3));
dzt(dzt < 0) = 0;
% if ismember(1,in_lev_range_ind) == 1
% dzt(:,:,1,:) = dzt(:,:,1,:) + SSH_in_range;
% end
dzu = zeros(size_array(1:3));
dzu(1:(size_array(1) - 1),:,:) = reshape(min([reshape(dzt(1:(size_array(1) - 1),:,:),[prod(size_array(1:3) - [1 0 0]) 1]) reshape(dzt(2:size_array(1),:,:),[prod(size_array(1:3) - [1 0 0]) 1])],[],2),size_array(1:3) - [1 0 0]);
dzv = zeros(size_array(1:3));
dzv(:,1:(size_array(2) - 1),:) = reshape(min([reshape(dzt(:,1:(size_array(2) - 1),:),[prod(size_array(1:3) - [0 1 0]) 1]) reshape(dzt(:,2:size_array(2),:),[prod(size_array(1:3) - [0 1 0]) 1])],[],2),size_array(1:3) - [0 1 0]);
dzu_ugrid = zeros(size(dzt));
dzu_ugrid(:,1:(size_array(2) - 1),:) = reshape(min([reshape(dzu(:,1:(size_array(2) - 1),:),[prod(size_array(1:3) - [0 1 0]) 1]) reshape(dzu(:,2:size_array(2),:),[prod(size_array(1:3) - [0 1 0]) 1])],[],2),size_array(1:3) - [0 1 0]);
dzv_ugrid = zeros(size(dzt));
dzv_ugrid(1:(size_array(1) - 1),:,:) = reshape(min([reshape(dzv(1:(size_array(1) - 1),:,:),[prod(size_array(1:3) - [1 0 0]) 1]) reshape(dzv(2:size_array(1),:,:),[prod(size_array(1:3) - [1 0 0]) 1])],[],2),size_array(1:3) - [1 0 0]);
% compute (weighted) interpolated flux velocities
uvel_interp = NaN(size_array);
uvel_in_range(isnan(uvel_in_range)) = 0;
uvel_interp(:,2:size_array(2),:,:) = ((0.5*repmat(repmat(dyu(:,1:(size_array(2) - 1)),[1 1 size_array(3)]).*dzu_ugrid(:,1:(size_array(2) - 1),:),[1 1 1 size_array(4)]).*uvel_in_range(:,1:(size_array(2) - 1),:,:)) + (0.5*repmat(repmat(dyu(:,2:size_array(2)),[1 1 size_array(3)]).*dzu_ugrid(:,2:size_array(2),:),[1 1 1 size_array(4)]).*uvel_in_range(:,2:size_array(2),:,:)))./repmat(repmat(hte(:,2:size_array(2)),[1 1 size_array(3)]).*dzu(:,2:size_array(2),:),[1 1 1 size_array(4)]);
uvel_interp(isnan(uvel_interp) == 1) = 0;
vvel_interp = NaN(size_array);
vvel_in_range(isnan(vvel_in_range)) = 0;
vvel_interp(2:size_array(1),:,:,:) = ((0.5*repmat(repmat(dxu(1:(size_array(1) - 1),:),[1 1 size_array(3)]).*dzv_ugrid(1:(size_array(1) - 1),:,:),[1 1 1 size_array(4)]).*vvel_in_range(1:(size_array(1) - 1),:,:,:)) + (0.5*repmat(repmat(dxu(2:size_array(1),:),[1 1 size_array(3)]).*dzv_ugrid(2:size_array(1),:,:),[1 1 1 size_array(4)]).*vvel_in_range(2:size_array(1),:,:,:)))./repmat(repmat(htn(2:size_array(1),:),[1 1 size_array(3)]).*dzv(2:size_array(1),:,:),[1 1 1 size_array(4)]);
vvel_interp(isnan(vvel_interp) == 1) = 0;
% compute tracer fluxes in correct units
uT_imax = (repmat(repmat(tarea,[1 1 size_array(3)]).*dzt,[1 1 1 size_array(4)]).*uet_in_range)./repmat(repmat(hte,[1 1 size_array(3)]).*dzu,[1 1 1 size_array(4)]);
uT_imax((isnan(uT_imax) == 1) | (isinf(uT_imax) == 1)) = 0;
vT_jmax = (repmat(repmat(tarea,[1 1 size_array(3)]).*dzt,[1 1 1 size_array(4)]).*vnt_in_range)./repmat(repmat(htn,[1 1 size_array(3)]).*dzv,[1 1 1 size_array(4)]);
vT_jmax((isnan(vT_jmax) == 1) | (isinf(vT_jmax) == 1)) = 0;
clear uet_in_range vnt_in_range
% interpolate from T-grid values
temp_interp_x = NaN(size_array);
temp_interp_x(1:(size_array(1) - 1),:,:,:) = temp_in_range(2:size_array(1),:,:,:) - (diff(temp_in_range,1,1)/2);
temp_interp_x(isnan(temp_interp_x) == 1) = 0;
temp_interp_y = NaN(size_array);
temp_interp_y(:,1:(size_array(2) - 1),:,:,:) = temp_in_range(:,2:size_array(2),:,:) - (diff(temp_in_range,1,2)/2);
temp_interp_y(isnan(temp_interp_y) == 1) = 0;
% transect masks
in_region_ind_1 = find((lon_in_range - (lon_bounds(1) + (360*round((min(min(lon_in_range)) - lon_bounds(1))/360))) >= 0) & (lon_in_range - (lon_bounds(2) + (360*round((max(max(lon_in_range)) - lon_bounds(2))/360))) < 0) & (lat_in_range - lat_transect >= (-2*grid_res)) & (lat_in_range - lat_transect < 0));
in_region_mask_2D = zeros(size_array(1:2));
in_region_mask_2D(in_region_ind_1) = -0.5;
in_region_ind_2 = find((lon_in_range - (lon_bounds(1) + (360*round((min(min(lon_in_range)) - lon_bounds(1))/360))) >= 0) & (lon_in_range - (lon_bounds(2) + (360*round((max(max(lon_in_range)) - lon_bounds(2))/360))) < 0) & (lat_in_range - lat_transect >= 0) & (lat_in_range - lat_transect < (2*grid_res)));
in_region_mask_2D(in_region_ind_2) = 0.5;
depth_upper_cell_top = reshape(max([reshape(repmat(depth_upper_array,[1 1 size_array(3)]),[prod(size_array(1:3)) 1]) reshape(repmat(reshape(depth_in_range_wvel_withtop(1:size_array(3)),[1 1 size_array(3)]),[size_array(1:2) 1]),[prod(size_array(1:3)) 1])],[],2),size_array(1:3));
depth_lower_cell_bottom = reshape(min([reshape(repmat(reshape(min([reshape(depth_lower_array,[prod(size_array([1 2])) 1]) reshape(bottom_depth_in_range,[prod(size_array([1 2])) 1])],[],2),[prod(size_array(1:2)) 1]),[size_array(3) 1]),[prod(size_array(1:3)) 1]) reshape(repmat(reshape(depth_in_range_wvel_withtop(2:(size_array(3) + 1)),[1 1 size_array(3)]),[size_array(1:2) 1]),[prod(size_array(1:3)) 1])],[],2),size_array(1:3));
in_region_mask = repmat(in_region_mask_2D,[1 1 size_array(3)]);
in_region_mask(depth_lower_cell_bottom - depth_upper_cell_top < 1e-5) = 0;
transect_mask_x = zeros(size_array(1:3));
transect_mask_x(1:(size_array(1) - 1),:,:) = diff(in_region_mask,1,1);
transect_mask_x(abs(transect_mask_x) < 0.9) = 0;
transect_mask_y = zeros(size_array(1:3));
transect_mask_y(:,1:(size_array(2) - 1),:) = diff(in_region_mask,1,2);
transect_mask_y(abs(transect_mask_y) < 0.9) = 0;
lon_grid_imax = NaN(size_array(1:2));
lat_grid_imax = NaN(size_array(1:2));
lon_grid_imax(1:(size_array(1) - 1),:) = lon_in_range(2:size_array(1),:) - (diff(lon_in_range,1,1)/2);
lat_grid_imax(1:(size_array(1) - 1),:) = lat_in_range(2:size_array(1),:) - (diff(lat_in_range,1,1)/2);
lon_grid_jmax = NaN(size_array(1:2));
lat_grid_jmax = NaN(size_array(1:2));
lon_grid_jmax(:,1:(size_array(2) - 1)) = lon_in_range(:,2:size_array(2)) - (diff(lon_in_range,1,2)/2);
lat_grid_jmax(:,1:(size_array(2) - 1)) = lat_in_range(:,2:size_array(2)) - (diff(lat_in_range,1,2)/2);
lon_grid_vel_imin = NaN(size_array(1:2));
lon_grid_vel_imin(2:size_array(1),:) = lon_in_range_vel(1:(size_array(1) - 1),:);
lon_grid_vel_jmin = NaN(size_array(1:2));
lon_grid_vel_jmin(:,2:size_array(2)) = lon_in_range_vel(:,1:(size_array(2) - 1));
lon_grid_vel_min_iface = reshape(min([reshape(lon_grid_vel_jmin,[prod(size_array(1:2)) 1]) reshape(lon_in_range_vel,[prod(size_array(1:2)) 1])],[],2),size_array(1:2));
lon_grid_vel_min_jface = reshape(min([reshape(lon_grid_vel_imin,[prod(size_array(1:2)) 1]) reshape(lon_in_range_vel,[prod(size_array(1:2)) 1])],[],2),size_array(1:2));
lon_grid_vel_max_iface = reshape(max([reshape(lon_grid_vel_jmin,[prod(size_array(1:2)) 1]) reshape(lon_in_range_vel,[prod(size_array(1:2)) 1])],[],2),size_array(1:2));
lon_grid_vel_max_jface = reshape(max([reshape(lon_grid_vel_imin,[prod(size_array(1:2)) 1]) reshape(lon_in_range_vel,[prod(size_array(1:2)) 1])],[],2),size_array(1:2));
lat_grid_vel_jmin = NaN(size_array(1:2));
lat_grid_vel_jmin(:,2:size_array(2)) = lat_in_range_vel(:,1:(size_array(2) - 1));
% dist_from_start_bound = NaN([size_array(1:2) 2]);
% dist_from_start_bound(:,:,1) = 111.1*abs((cosd((0.5*lat_transect) + (0.5*lat_grid_imax)).*(lon_grid_imax - lon_bounds(1))) + (1i*(lat_grid_imax - lat_transect)));
% dist_from_start_bound(:,:,2) = 111.1*abs((cosd((0.5*lat_transect) + (0.5*lat_grid_jmax)).*(lon_grid_jmax - lon_bounds(1))) + (1i*(lat_grid_jmax - lat_transect)));
% dist_from_start_imax_jmin = 111.1*abs((cosd((0.5*lat_transect) + (0.5*lat_grid_vel_jmin)).*(lon_in_range_vel - lon_bounds(1))) + (1i*(lat_grid_vel_jmin - lat_transect)));
% dist_from_start_imin_jmax = 111.1*abs((cosd((0.5*lat_transect) + (0.5*lat_in_range_vel)).*(lon_grid_vel_imin - lon_bounds(1))) + (1i*(lat_in_range_vel - lat_transect)));
% find interfaces that are along transect
along_transect_ind = find(abs([sum(transect_mask_x,3) sum(transect_mask_y,3)]) > 0.5);
% [~,sorted_along_transect_ind] = sort(dist_from_start_bound(along_transect_ind),'ascend');
% sorted_transect_ind = along_transect_ind(sorted_along_transect_ind);
% determine start (westernmost) face of transect
curr_array = [reshape(lon_grid_vel_min_iface,[prod(size_array(1:2)) 1]); reshape(lon_grid_vel_min_jface,[prod(size_array(1:2)) 1])];
lon_transect_min = curr_array(along_transect_ind);
[~,start_transect_ind] = min(lon_transect_min);
start_transect_ind = along_transect_ind(start_transect_ind);
if start_transect_ind <= prod(size_array(1:2))
start_lon = lon_grid_vel_jmin(start_transect_ind);
else
start_lon = lon_grid_vel_imin(mod(start_transect_ind - 1,prod(size_array(1:2))) + 1);
end
% recalculate to ensure consistency regardless of exact endpoint locations on land
dist_from_start_bound = NaN([size_array(1:2) 2]);
dist_from_start_bound(:,:,1) = 111.1*abs((cosd((0.5*lat_transect) + (0.5*lat_grid_imax)).*(lon_grid_imax - start_lon)) + (1i*(lat_grid_imax - lat_transect)));
dist_from_start_bound(:,:,2) = 111.1*abs((cosd((0.5*lat_transect) + (0.5*lat_grid_jmax)).*(lon_grid_jmax - start_lon)) + (1i*(lat_grid_jmax - lat_transect)));
dist_from_start_imax_jmin = 111.1*abs((cosd((0.5*lat_transect) + (0.5*lat_grid_vel_jmin)).*(lon_in_range_vel - start_lon)) + (1i*(lat_grid_vel_jmin - lat_transect)));
dist_from_start_imin_jmax = 111.1*abs((cosd((0.5*lat_transect) + (0.5*lat_in_range_vel)).*(lon_grid_vel_imin - start_lon)) + (1i*(lat_in_range_vel - lat_transect)));
% sort transect faces in order
[dist_transect,sorted_along_transect_ind] = sort(dist_from_start_bound(along_transect_ind),'ascend');
sorted_transect_ind = along_transect_ind(sorted_along_transect_ind);
curr_array = [reshape(dist_from_start_imax_jmin,[prod(size_array(1:2)) 1]); reshape(dist_from_start_imin_jmax,[prod(size_array(1:2)) 1])];
dist_from_start_transect_min = curr_array(sorted_transect_ind);
curr_array = [reshape(lon_grid_imax,[prod(size_array(1:2)) 1]); reshape(lon_grid_jmax,[prod(size_array(1:2)) 1])];
lon_transect = curr_array(sorted_transect_ind);
curr_array = [reshape(lon_grid_vel_min_iface,[prod(size_array(1:2)) 1]); reshape(lon_grid_vel_min_jface,[prod(size_array(1:2)) 1])];
lon_transect_min = curr_array(sorted_transect_ind);
curr_array = [reshape(lon_grid_vel_max_iface,[prod(size_array(1:2)) 1]); reshape(lon_grid_vel_max_jface,[prod(size_array(1:2)) 1])];
lon_transect_max = curr_array(sorted_transect_ind);
curr_array = [reshape(hte,[prod(size_array(1:2)) 1]); reshape(htn,[prod(size_array(1:2)) 1])];
dx_transect = curr_array(sorted_transect_ind);
curr_array = [reshape(angle_imax,[prod(size_array(1:2)) 1]); reshape(angle_jmax,[prod(size_array(1:2)) 1])];
angle_transect = curr_array(sorted_transect_ind);
curr_array = [reshape(dzu,[prod(size_array(1:2)) size_array(3)]); reshape(dzv,[prod(size_array(1:2)) size_array(3)])];
dz_transect = curr_array(sorted_transect_ind,:);
curr_array = [reshape(transect_mask_x,[prod(size_array(1:2)) size_array(3)]); reshape(transect_mask_y,[prod(size_array(1:2)) size_array(3)])];
transect_mask = curr_array(sorted_transect_ind,:);
curr_array = [reshape(uvel_interp,[prod(size_array(1:2)) size_array(3:4)]); reshape(vvel_interp,[prod(size_array(1:2)) size_array(3:4)])];
vel_cross_transect = curr_array(sorted_transect_ind,:,:);
curr_array = [reshape(temp_interp_x,[prod(size_array(1:2)) size_array(3:4)]); reshape(temp_interp_y,[prod(size_array(1:2)) size_array(3:4)])];
temp_transect = curr_array(sorted_transect_ind,:,:);
curr_array = [reshape(uT_imax,[prod(size_array(1:2)) size_array(3:4)]); reshape(vT_jmax,[prod(size_array(1:2)) size_array(3:4)])];
velT_cross_transect = curr_array(sorted_transect_ind,:,:);
size_array_transect = [length(sorted_transect_ind) size_array(3:4)];
cumint_area_across_transect = squeeze(cumsum(repmat(dx_transect,[1 size_array_transect(2)]).*dz_transect.*abs(transect_mask),1,'forward'));
vol_flux_across_transect = squeeze(repmat(repmat(dx_transect,[1 size_array_transect(2)]).*dz_transect.*transect_mask,[1 1 size_array_transect(3)]).*vel_cross_transect);
land_mask_vol_flux = ones(size(vol_flux_across_transect));
land_mask_vol_flux(abs(vol_flux_across_transect) < 1e-10) = 0;
dt = 86400*(mean(diff(time_datenum_in_range)))*ones([size_array_transect(3) 1]);
dt(squeeze(sum(sum(land_mask_vol_flux,2),1)) < 0.8*max(squeeze(sum(sum(land_mask_vol_flux,2),1)))) = 0;
cumint_flux_across_transect_atdepth = squeeze(cumsum(vol_flux_across_transect,1,'forward'));
cumint_vol_flux_across_transect = squeeze(sum(cumint_flux_across_transect_atdepth,2));
integrated_vol_flux_tmean = sum(repmat(reshape(dt,[1 size_array_transect(3)]),[size_array_transect(1) 1]).*cumint_vol_flux_across_transect,2)./(sum(repmat(reshape(dt,[1 size_array_transect(3)]),[size_array_transect(1) 1]),2));
vol_transport_tseries = squeeze(cumint_vol_flux_across_transect(size_array_transect(1),:));
temp_flux_across_transect = squeeze(repmat(repmat(dx_transect,[1 size_array_transect(2)]).*abs(transect_mask).*dz_transect,[1 1 size_array_transect(3)]).*temp_transect);
cumint_temp_across_transect_atdepth = squeeze(cumsum(temp_flux_across_transect,1,'forward'));
% temp_integrated_across_transect = sum(cumint_temp_across_transect_atdepth,2);
land_mask_temp_flux = ones(size(temp_flux_across_transect));
land_mask_temp_flux(abs(temp_flux_across_transect) < 1e-10) = 0;
% cumint_temp_flux_across_transect = squeeze(cumsum(sum(temp_flux_across_transect,2),1,'forward'));
length_window = 111.1*cosd(lat_transect)*spatial_scale_separation;
% vel_avg_in_window = NaN(size_array_transect);
% temp_avg_in_window = NaN(size_array_transect);
% for curr_window_ind = 1:size_array_transect(1)
% if max(dist_transect) - dist_from_start_transect_min(curr_window_ind) < length_window - (mean(diff(dist_transect))/2)
% continue
% end
%
% last_window_ind = find(dist_transect < dist_from_start_transect_min(curr_window_ind) + length_window,1,'last');
%
% if curr_window_ind == 1
% vel_avg_in_window(curr_window_ind,:,:) = cumint_flux_across_transect_atdepth(last_window_ind,:,:)./(repmat(cumint_area_across_transect(last_window_ind,:),[1 1 size_array_transect(3)]));
% temp_avg_in_window(curr_window_ind,:,:) = cumint_temp_across_transect_atdepth(last_window_ind,:,:)./(repmat(cumint_area_across_transect(last_window_ind,:),[1 1 size_array_transect(3)]));
% else
% vel_avg_in_window(curr_window_ind,:,:) = (cumint_flux_across_transect_atdepth(last_window_ind,:,:) - cumint_flux_across_transect_atdepth(curr_window_ind - 1,:,:))./(repmat(cumint_area_across_transect(last_window_ind,:) - cumint_area_across_transect(curr_window_ind - 1,:),[1 1 size_array_transect(3)]));
% temp_avg_in_window(curr_window_ind,:,:) = (cumint_temp_across_transect_atdepth(last_window_ind,:,:) - cumint_temp_across_transect_atdepth(curr_window_ind - 1,:,:))./(repmat(cumint_area_across_transect(last_window_ind,:) - cumint_area_across_transect(curr_window_ind - 1,:),[1 1 size_array_transect(3)]));
% end
% end
land_mask = ones(size_array_transect(1:2));
land_mask((squeeze(sum(land_mask_vol_flux,3)) < 0.8*max(max(squeeze(sum(land_mask_vol_flux,3))))) | (squeeze(sum(land_mask_vol_flux,3)) < 0.8*max(max(squeeze(sum(land_mask_temp_flux,3)))))) = 0;
cumint_land_mask = cumsum(land_mask,1,'forward');
% topographically-constrained areas
gap_ind = find(abs(diff(lon_transect)) > 3*median(abs(diff(lon_transect))));
constrained_alldepths_ind = [];
for curr_gap_ind = 1:(length(gap_ind) - 1)
if diff(dist_transect([(gap_ind(curr_gap_ind) + 1) (gap_ind(curr_gap_ind + 1))])) < length_window
constrained_alldepths_ind = [constrained_alldepths_ind; ((gap_ind(curr_gap_ind) + 1):1:(gap_ind(curr_gap_ind + 1)))'];
end
end
boundary_mask = zeros(size_array_transect(1:2));
good_window_mask = ones(size_array_transect(1:2));
for curr_window_ind = 1:size_array_transect(1)
if max(dist_transect) - dist_from_start_transect_min(curr_window_ind) < length_window - (mean(diff(dist_transect))/2)
good_window_mask(curr_window_ind,:) = 0;
continue
end
last_window_ind = find(dist_transect < dist_from_start_transect_min(curr_window_ind) + length_window,1,'last');
if ismember(curr_window_ind,constrained_alldepths_ind) == 1
good_window_mask(curr_window_ind,:) = 0;
continue
end
if curr_window_ind == 1
boundary_mask(curr_window_ind,land_mask(curr_window_ind,:) > 0.5) = 1;
curr_mask = cumint_land_mask(last_window_ind,:);
good_window_mask(curr_window_ind,curr_mask < last_window_ind - 0 - 0.5) = 0;
if ((max(abs(diff(lon_transect(1:last_window_ind)))) > 3*median(abs(diff(lon_transect)))) || (dist_transect(last_window_ind) - dist_from_start_transect_min(curr_window_ind) < length_window - (3*median(abs(diff(dist_transect))))))
good_window_mask(curr_window_ind,:) = 0;
end
else
boundary_mask(curr_window_ind,diff(land_mask(curr_window_ind + [-1 0],:),1,1) > 0.5) = 1;
if abs(diff(lon_transect(curr_window_ind + [-1 0]))) > 3*median(abs(diff(lon_transect)))
boundary_mask(curr_window_ind,abs(land_mask(curr_window_ind,:)) > 1e-5) = 1;
end
if ((last_window_ind == size_array_transect(1)) && (last_last_window_ind < size_array_transect(1)))
boundary_mask(curr_window_ind,land_mask(last_window_ind,:) > 0.5) = -1;
elseif ((last_window_ind < size_array_transect(1)) && (last_last_window_ind < last_window_ind))
boundary_mask(curr_window_ind,diff(land_mask(last_window_ind + [0 1],:),1,1) < -0.5) = -1;
if abs(diff(lon_transect(last_window_ind + [0 1]))) > 3*median(abs(diff(lon_transect)))
boundary_mask(curr_window_ind,land_mask(last_window_ind,:) > 0.5) = -1;
end
end
curr_mask = cumint_land_mask(last_window_ind,:) - cumint_land_mask(curr_window_ind - 1,:);
good_window_mask(curr_window_ind,curr_mask < last_window_ind - (curr_window_ind - 1) - 0.5) = 0;
if max(abs(diff(lon_transect(curr_window_ind:last_window_ind)))) > 3*median(abs(diff(lon_transect)))
good_window_mask(curr_window_ind,:) = 0;
end
if ((last_window_ind < size_array_transect(1)) && (last_last_window_ind == last_window_ind))
if abs(diff(lon_transect(last_window_ind + [0 1]))) > 3*median(abs(diff(lon_transect)))
good_window_mask(curr_window_ind,:) = 0;
end
end
end
last_last_window_ind = last_window_ind;
end
cumint_boundary_mask = cumsum(boundary_mask,1,'forward');
% determine locations for windows of non-overlapping scheme
curr_window_ind_vec = zeros([1 size_array_transect(2)]);
non_overlap_window_mask = zeros(size_array_transect(1:2));
cum_consec_windows = zeros([1 size_array_transect(2)]);
for curr_avg_ind = 1:size_array_transect(1)
if max(dist_transect) - dist_from_start_transect_min(curr_avg_ind) < length_window - (mean(diff(dist_transect))/2)
continue
end
last_window_ind = find(dist_transect < dist_from_start_transect_min(curr_avg_ind) + length_window,1,'last');
% start boundaries
curr_boundary_level_ind = find((abs(boundary_mask(curr_avg_ind,:) - 1) < 1e-5) & (abs(good_window_mask(curr_avg_ind,:) - 1) < 1e-5));
curr_window_ind_vec(curr_boundary_level_ind) = ((size(boundary_mask,1))*(curr_boundary_level_ind - 1)) + curr_avg_ind;
curr_window_ind_no_zero = curr_window_ind_vec(curr_window_ind_vec > 1e-5);
cum_consec_windows(curr_boundary_level_ind) = 1;
% add to counter
non_overlap_window_mask(curr_window_ind_no_zero) = non_overlap_window_mask(curr_window_ind_no_zero) + good_window_mask(curr_avg_ind,ceil(curr_window_ind_no_zero/(size(boundary_mask,1))));
% override good_window_mask to give preference to western boundary window
west_boundary_ind = find((abs(cum_consec_windows(ceil(curr_window_ind_no_zero/(size(boundary_mask,1)))) - 1) < 1e-5) & (abs(good_window_mask(curr_avg_ind,ceil(curr_window_ind_no_zero/(size(boundary_mask,1))))) < 1e-5));
west_boundary_ind_2D = curr_window_ind_no_zero(west_boundary_ind);
try
non_overlap_window_mask(west_boundary_ind_2D) = non_overlap_window_mask(west_boundary_ind_2D) + land_mask(curr_avg_ind,ceil(west_boundary_ind_2D/size_array_transect(1)));
catch
end