forked from NOAA-GFDL/SIS2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ice_shortwave_dEdd.F90
2379 lines (2145 loc) · 100 KB
/
ice_shortwave_dEdd.F90
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
!=======================================================================
!BOP
!
! !MODULE: ice_shortwave_dEdd - reflected, transmitted, and absorbed solar rad
!
! !DESCRIPTION:
!
! The albedo and absorbed/transmitted flux parameterizations for
! snow over ice, bare ice and ponded ice. By Delta-Eddington method
!
! The Delta-Eddington method is described here:
!
! Briegleb, B. P., and B. Light (2007): A Delta-Eddington Multiple
! Scattering Parameterization for Solar Radiation in the Sea Ice
! Component of the Community Climate System Model, NCAR Technical
! Note NCAR/TN-472+STR February 2007
!
! !REVISION HISTORY:
! SVN:$Id: ice_shortwave_dEdd.F90,v 1.1.2.1 2013/06/18 21:07:10 nnz Exp $
!
! name: originally ice_albedo
!
! authors: Bruce P. Briegleb, NCAR
! Elizabeth C. Hunke and William H. Lipscomb, LANL
! 2005, WHL: Moved absorbed_solar from ice_therm_vertical to this
! module and changed name from ice_albedo
! 2006, WHL: Added Delta Eddington routines from Bruce Briegleb
! 2006, ECH: Changed data statements in Delta Eddington routines (no
! longer hardwired)
! Converted to free source form (F90)
! 2007, BPB: Completely updated Delta-Eddington code, so that:
! (1) multiple snow layers enabled (i.e. nslyr > 1)
! (2) included SSL for snow surface absorption
! (3) added Sswabs for internal snow layer absorption
! (4) variable sea ice layers allowed (i.e. not hardwired)
! (5) updated all inherent optical properties
! (6) included algae absorption for sea ice lowest layer
! (7) very complete internal documentation included
! 2007, ECH: Improved efficiency
!
! !INTERFACE:
!
module ice_shortwave_dEdd
!
! !USES:
!
!EOP
!
implicit none
save
integer, parameter :: char_len = 80, &
char_len_long = 256, &
log_kind = kind(.true.), &
int_kind = selected_int_kind(6), &
real_kind = selected_real_kind(6), &
dbl_kind = selected_real_kind(13), &
r16_kind = selected_real_kind(26)
integer (kind=int_kind), parameter :: &
ncat = 5 , & ! number of categories
nilyr = 4 , & ! number of ice layers per category
nslyr = 1 !, & ! number of snow layers per category
real (kind=dbl_kind), parameter :: & ! currently used only
awtvdr = 0.00318_dbl_kind, &! visible, direct ! for history and
awtidr = 0.00182_dbl_kind, &! near IR, direct ! diagnostics
awtvdf = 0.63282_dbl_kind, &! visible, diffuse
awtidf = 0.36218_dbl_kind ! near IR, diffuse
real (kind=dbl_kind), parameter :: &
Timelt = 0.0_dbl_kind ,&! melting temperature, ice top surface (C)
rhos = 330.0_dbl_kind !,&! density of snow (kg/m^3)
real (kind=dbl_kind), parameter :: &
c0 = 0.0_dbl_kind, &
c1 = 1.0_dbl_kind, &
c1p5 = 1.5_dbl_kind, &
c2 = 2.0_dbl_kind, &
c3 = 3.0_dbl_kind, &
c4 = 4.0_dbl_kind, &
c10 = 10.0_dbl_kind, &
p01 = 0.01_dbl_kind, &
p5 = 0.5_dbl_kind, &
p75 = 0.75_dbl_kind, &
eps11 = 1.0e-11_dbl_kind, &
eps13 = 1.0e-13_dbl_kind, &
eps16 = 1.0e-16_dbl_kind, &
puny = eps11!, &
real (kind=dbl_kind) :: &
exp_min= exp(-c10) ! minimum exponential value
! melt pond tuning parameters, set in namelist
real (kind=dbl_kind) :: &
R_ice , & ! sea ice tuning parameter; +1 > 1sig increase in albedo
R_pnd , & ! ponded ice tuning parameter; +1 > 1sig increase in albedo
R_snw ! snow tuning parameter; +1 > ~.01 change in broadband albedo
!=======================================================================
contains
!=======================================================================
!BOP
!
! !IROUTINE: shortwave_dEdd0 - driver for Delta-Eddington shortwave
!
! !INTERFACE:
!
subroutine shortwave_dEdd0 (nx_block, ny_block, &
icells, indxi, &
indxj, coszen, &
aice, vice, &
vsno, fs, &
rhosnw, rsnw, &
fp, hp, &
swvdr, swvdf, &
swidr, swidf, &
alvdr, alvdf, &
alidr, alidf, &
fswsfc, fswint, &
fswthru, Sswabs, &
Iswabs, albice, &
albsno, albpnd)
!
! !DESCRIPTION:
!
! Compute snow/bare ice/ponded ice shortwave albedos, absorbed and transmitted
! flux using the Delta-Eddington solar radiation method as described in:
!
! "A Delta-Eddington Multiple Scattering Parameterization for Solar Radiation
! in the Sea Ice Component of the Community Climate System Model"
! B.P.Briegleb and B.Light NCAR/TN-472+STR February 2007
!
! Compute shortwave albedos and fluxes for three surface types:
! snow over ice, bare ice and ponded ice.
!
! Albedos and fluxes are output for later use by thermodynamic routines.
! Invokes three calls to compute_dEdd, which sets inherent optical properties
! appropriate for the surface type. Within compute_dEdd, a call to solution_dEdd
! evaluates the Delta-Eddington solution. The final albedos and fluxes are then
! evaluated in compute_dEdd. Albedos and fluxes are transferred to output in
! this routine.
!
! NOTE regarding albedo diagnostics: This method yields zero albedo values
! if there is no incoming solar and thus the albedo diagnostics are masked
! out when the sun is below the horizon. To estimate albedo from the history
! output (post-processing), compute ice albedo using
! (1 - albedo)*swdn = swabs. -ECH
!
! !REVISION HISTORY:
!
! author: Bruce P. Briegleb, NCAR
! update: 8 February 2007
!
! !USES:
!
! use ice_calendar
! BPB 8 February 2007 For diagnostic prints
! use ice_diagnostics
!
! !INPUT/OUTPUT PARAMETERS:
!
integer (kind=int_kind), &
intent(in) :: &
nx_block, ny_block, & ! block dimensions
icells ! number of ice-covered grid cells
integer (kind=int_kind), dimension (nx_block*ny_block), &
intent(in) :: &
indxi , & ! compressed indices for ice-covered cells
indxj
real (kind=dbl_kind), dimension (nx_block,ny_block), &
intent(in) :: &
coszen , & ! cosine of solar zenith angle
aice , & ! concentration of ice
vice , & ! volume of ice
vsno , & ! volume of snow
fs ! horizontal coverage of snow
real (kind=dbl_kind), dimension (nx_block,ny_block,nslyr), &
intent(in) :: &
rhosnw , & ! density in snow layer (kg/m3)
rsnw ! grain radius in snow layer (m)
real (kind=dbl_kind), dimension (nx_block,ny_block), &
intent(in) :: &
fp , & ! pond fractional coverage (0 to 1)
hp , & ! pond depth (m)
swvdr , & ! sw down, visible, direct (W/m^2)
swvdf , & ! sw down, visible, diffuse (W/m^2)
swidr , & ! sw down, near IR, direct (W/m^2)
swidf ! sw down, near IR, diffuse (W/m^2)
real (kind=dbl_kind), dimension (nx_block,ny_block), &
intent(out) :: &
alvdr , & ! visible, direct, albedo (fraction)
alvdf , & ! visible, diffuse, albedo (fraction)
alidr , & ! near-ir, direct, albedo (fraction)
alidf , & ! near-ir, diffuse, albedo (fraction)
fswsfc , & ! SW absorbed at snow/bare ice/pondedi ice surface (W m-2)
fswint , & ! SW interior absorption (below surface, above ocean,W m-2)
fswthru ! SW through snow/bare ice/ponded ice into ocean (W m-2)
real (kind=dbl_kind), dimension (nx_block,ny_block,nslyr), &
intent(out) :: &
Sswabs ! SW absorbed in snow layer (W m-2)
real (kind=dbl_kind), dimension (nx_block,ny_block,nilyr), &
intent(out) :: &
Iswabs ! SW absorbed in ice layer (W m-2)
real (kind=dbl_kind), dimension (nx_block,ny_block), &
intent(out) :: &
albice , & ! bare ice albedo, for history
albsno , & ! snow albedo, for history
albpnd ! pond albedo, for history
!
!EOP
!
! !LOCAL PARAMETERS:
!
real (kind=dbl_kind),dimension (nx_block,ny_block) :: &
fnidr ! fraction of direct to total down surface flux in nir
real (kind=dbl_kind), dimension(nx_block,ny_block) :: &
hs , & ! snow thickness (all snow layers, m)
hi , & ! ice thickness (all sea ice layers, m)
fi ! snow/bare ice fractional coverage (0 to 1)
integer (kind=int_kind), dimension(nx_block,ny_block) :: &
srftyp ! surface type over ice: (0=air, 1=snow, 2=pond)
integer (kind=int_kind) :: &
i , & ! longitude index
j , & ! latitude index
ij , & ! horizontal index, combines i and j loops
k , & ! level index
icells_DE ! number of cells in Delta-Eddington calculation
integer (kind=int_kind), dimension (nx_block*ny_block) :: &
indxi_DE , & ! compressed indices for Delta-Eddington cells
indxj_DE
real (kind=dbl_kind) :: &
hpmin , & ! minimum allowed melt pond depth
hsmax , & ! maximum snow depth below which Sswabs adjustment
hs_ssl , & ! assumed snow surface scattering layer for Sswabs adj
frcadj ! fractional Sswabs adjustment
data hpmin / .005_dbl_kind /
data hs_ssl / .040_dbl_kind /
! for printing points
integer (kind=int_kind) :: &
n ! point number for prints
logical (kind=log_kind) :: &
dbug ! true/false flag
real (kind=dbl_kind) :: &
swdn , & ! swvdr(i,j)+swvdf(i,j)+swidr(i,j)+swidf(i,j)
swab , & ! fswsfc(i,j)+fswint(i,j)+fswthru(i,j)
swalb ! (1.-swab/(swdn+.0001))
! for history
real (kind=dbl_kind), dimension (nx_block,ny_block) :: &
avdrl , & ! visible, direct, albedo (fraction)
avdfl , & ! visible, diffuse, albedo (fraction)
aidrl , & ! near-ir, direct, albedo (fraction)
aidfl ! near-ir, diffuse, albedo (fraction)
!-----------------------------------------------------------------------
do j = 1, ny_block
do i = 1, nx_block
! zero storage albedos and fluxes for accumulation over surface types:
hs(i,j) = c0
hi(i,j) = c0
fi(i,j) = c0
srftyp(i,j) = 0
alvdr(i,j) = c0
alvdf(i,j) = c0
alidr(i,j) = c0
alidf(i,j) = c0
avdrl(i,j) = c0
avdfl(i,j) = c0
aidrl(i,j) = c0
aidfl(i,j) = c0
fswsfc(i,j) = c0
fswint(i,j) = c0
fswthru(i,j) = c0
! compute fraction of nir down direct to total over all points:
fnidr(i,j) = c0
if( swidr(i,j) + swidf(i,j) > puny ) then
fnidr(i,j) = swidr(i,j)/(swidr(i,j)+swidf(i,j))
endif
albice(i,j) = c0
albsno(i,j) = c0
albpnd(i,j) = c0
enddo
enddo
Sswabs(:,:,:) = c0
Iswabs(:,:,:) = c0
! compute shortwave radiation accounting for snow/ice (both snow over
! ice and bare ice) and ponded ice (if any):
!DIR$ CONCURRENT !Cray
!cdir nodep !NEC
!ocl novrec !Fujitsu
! find bare ice points
icells_DE = 0
do ij = 1, icells
i = indxi(ij)
j = indxj(ij)
! sea ice points with sun above horizon
if (aice(i,j) > puny .and. coszen(i,j) > puny) then
! evaluate sea ice thickness and fraction
hi(i,j) = vice(i,j) / aice(i,j)
fi(i,j) = c1 - fs(i,j) - fp(i,j)
! bare sea ice points
if(fi(i,j) > c0) then
icells_DE = icells_DE + 1
indxi_DE(icells_DE) = i
indxj_DE(icells_DE) = j
! bare ice
srftyp(i,j) = 0
endif ! fi > 0
endif ! aice > 0 and coszen > 0
enddo ! ij
! calculate bare sea ice
call compute_dEdd0 &
(nx_block,ny_block, &
icells_DE, indxi_DE, indxj_DE, fnidr, coszen, &
swvdr, swvdf, swidr, swidf, srftyp, &
hs, rhosnw, rsnw, hi, hp, &
fi, avdrl, avdfl, &
aidrl, aidfl, &
fswsfc, fswint, &
fswthru, Sswabs, &
Iswabs)
!DIR$ CONCURRENT !Cray
!cdir nodep !NEC
!ocl novrec !Fujitsu
do ij = 1, icells_DE
i = indxi_DE(ij)
j = indxj_DE(ij)
alvdr(i,j) = alvdr(i,j) + avdrl(i,j) *fi(i,j)
alvdf(i,j) = alvdf(i,j) + avdfl(i,j) *fi(i,j)
alidr(i,j) = alidr(i,j) + aidrl(i,j) *fi(i,j)
alidf(i,j) = alidf(i,j) + aidfl(i,j) *fi(i,j)
! for history
albice(i,j) = albice(i,j) &
+ awtvdr*avdrl(i,j) + awtidr*aidrl(i,j) &
+ awtvdf*avdfl(i,j) + awtidf*aidfl(i,j)
enddo
!DIR$ CONCURRENT !Cray
!cdir nodep !NEC
!ocl novrec !Fujitsu
! find snow-covered ice points
icells_DE = 0
do ij = 1, icells
i = indxi(ij)
j = indxj(ij)
! sea ice points with sun above horizon
if (aice(i,j) > puny .and. coszen(i,j) > puny) then
! evaluate snow thickness
hs(i,j) = vsno(i,j) / aice(i,j)
! snow-covered sea ice points
if(fs(i,j) > c0) then
icells_DE = icells_DE + 1
indxi_DE(icells_DE) = i
indxj_DE(icells_DE) = j
! snow-covered ice
srftyp(i,j) = 1
endif ! fs > 0
endif ! aice > 0 and coszen > 0
enddo ! ij
! calculate snow covered sea ice
call compute_dEdd0 &
(nx_block,ny_block, &
icells_DE, indxi_DE, indxj_DE, fnidr, coszen, &
swvdr, swvdf, swidr, swidf, srftyp, &
hs, rhosnw, rsnw, hi, hp, &
fs, avdrl, avdfl, &
aidrl, aidfl, &
fswsfc, fswint, &
fswthru, Sswabs, &
Iswabs)
!DIR$ CONCURRENT !Cray
!cdir nodep !NEC
!ocl novrec !Fujitsu
do ij = 1, icells_DE
i = indxi_DE(ij)
j = indxj_DE(ij)
alvdr(i,j) = alvdr(i,j) + avdrl(i,j) *fs(i,j)
alvdf(i,j) = alvdf(i,j) + avdfl(i,j) *fs(i,j)
alidr(i,j) = alidr(i,j) + aidrl(i,j) *fs(i,j)
alidf(i,j) = alidf(i,j) + aidfl(i,j) *fs(i,j)
! for history
albsno(i,j) = albsno(i,j) &
+ awtvdr*avdrl(i,j) + awtidr*aidrl(i,j) &
+ awtvdf*avdfl(i,j) + awtidf*aidfl(i,j)
enddo
!DIR$ CONCURRENT !Cray
!cdir nodep !NEC
!ocl novrec !Fujitsu
! find ponded points
icells_DE = 0
do ij = 1, icells
i = indxi(ij)
j = indxj(ij)
hi(i,j) = c0
! sea ice points with sun above horizon
if (aice(i,j) > puny .and. coszen(i,j) > puny) then
hi(i,j) = vice(i,j) / aice(i,j)
! if non-zero pond fraction and sufficient pond depth
if( fp(i,j) > puny .and. hp(i,j) > hpmin ) then
icells_DE = icells_DE + 1
indxi_DE(icells_DE) = i
indxj_DE(icells_DE) = j
! ponded ice
srftyp(i,j) = 2
endif
endif ! aice > puny, coszen > puny
enddo ! ij
! calculate ponded ice
call compute_dEdd0 &
(nx_block,ny_block, &
icells_DE, indxi_DE, indxj_DE, fnidr, coszen, &
swvdr, swvdf, swidr, swidf, srftyp, &
hs, rhosnw, rsnw, hi, hp, &
fp, avdrl, avdfl, &
aidrl, aidfl, &
fswsfc, fswint, &
fswthru, Sswabs, &
Iswabs)
!DIR$ CONCURRENT !Cray
!cdir nodep !NEC
!ocl novrec !Fujitsu
do ij = 1, icells_DE
i = indxi_DE(ij)
j = indxj_DE(ij)
alvdr(i,j) = alvdr(i,j) + avdrl(i,j) *fp(i,j)
alvdf(i,j) = alvdf(i,j) + avdfl(i,j) *fp(i,j)
alidr(i,j) = alidr(i,j) + aidrl(i,j) *fp(i,j)
alidf(i,j) = alidf(i,j) + aidfl(i,j) *fp(i,j)
! for history
albpnd(i,j) = albpnd(i,j) &
+ awtvdr*avdrl(i,j) + awtidr*aidrl(i,j) &
+ awtvdf*avdfl(i,j) + awtidf*aidfl(i,j)
enddo
end subroutine shortwave_dEdd0
!=======================================================================
!BOP
!
! !IROUTINE: compute_dEdd0 - evaluate Delta-Edd IOPs and compute solution
!
! !INTERFACE:
!
subroutine compute_dEdd0 &
(nx_block,ny_block, &
icells_DE, indxi_DE, indxj_DE, fnidr, coszen, &
swvdr, swvdf, swidr, swidf, srftyp, &
hs, rhosnw, rsnw, hi, hp, &
fi, alvdr, alvdf, &
alidr, alidf, &
fswsfc, fswint, &
fswthru, Sswabs, &
Iswabs)
!
! !DESCRIPTION:
!
! Evaluate snow/ice/ponded ice inherent optical properties (IOPs), and
! then calculate the multiple scattering solution by calling solution_dEdd.
!
! !REVISION HISTORY:
!
! author: Bruce P. Briegleb, NCAR
! update: 8 February 2007
!
! !USES:
!
! use ice_therm_vertical, only: heat_capacity
!
! !INPUT/OUTPUT PARAMETERS:
!
integer (kind=int_kind), &
intent(in) :: &
nx_block, ny_block, & ! block dimensions
icells_DE ! number of sea ice grid cells for surface type
integer (kind=int_kind), dimension(nx_block*ny_block), &
intent(in) :: &
indxi_DE, & ! compressed indices for sea ice cells for surface type
indxj_DE
real (kind=dbl_kind), dimension (nx_block,ny_block), &
intent(in) :: &
fnidr , & ! fraction of direct to total down flux in nir
coszen , & ! cosine solar zenith angle
swvdr , & ! shortwave down at surface, visible, direct (W/m^2)
swvdf , & ! shortwave down at surface, visible, diffuse (W/m^2)
swidr , & ! shortwave down at surface, near IR, direct (W/m^2)
swidf ! shortwave down at surface, near IR, diffuse (W/m^2)
integer (kind=int_kind), dimension(nx_block,ny_block), &
intent(in) :: &
srftyp ! surface type over ice: (0=air, 1=snow, 2=pond)
real (kind=dbl_kind), dimension(nx_block,ny_block), &
intent(in) :: &
hs ! snow thickness (m)
real (kind=dbl_kind), dimension (nx_block,ny_block,nslyr), &
intent(in) :: &
rhosnw , & ! snow density in snow layer (kg/m3)
rsnw ! snow grain radius in snow layer (m)
real (kind=dbl_kind), dimension(nx_block,ny_block), &
intent(in) :: &
hi , & ! ice thickness (m)
hp , & ! pond depth (m)
fi ! snow/bare ice fractional coverage (0 to 1)
real (kind=dbl_kind), dimension (nx_block,ny_block), &
intent(inout) :: &
alvdr , & ! visible, direct, albedo (fraction)
alvdf , & ! visible, diffuse, albedo (fraction)
alidr , & ! near-ir, direct, albedo (fraction)
alidf , & ! near-ir, diffuse, albedo (fraction)
fswsfc , & ! SW absorbed at snow/bare ice/pondedi ice surface (W m-2)
fswint , & ! SW interior absorption (below surface, above ocean,W m-2)
fswthru ! SW through snow/bare ice/ponded ice into ocean (W m-2)
real (kind=dbl_kind), dimension (nx_block,ny_block,nslyr), &
intent(inout) :: &
Sswabs ! SW absorbed in snow layer (W m-2)
real (kind=dbl_kind), dimension (nx_block,ny_block,nilyr), &
intent(inout) :: &
Iswabs ! SW absorbed in ice layer (W m-2)
!
!EOP
!-----------------------------------------------------------------------
!
! Set up optical property profiles, based on snow, sea ice and ponded
! ice IOPs from:
!
! Briegleb, B. P., and B. Light (2007): A Delta-Eddington Multiple
! Scattering Parameterization for Solar Radiation in the Sea Ice
! Component of the Community Climate System Model, NCAR Technical
! Note NCAR/TN-472+STR February 2007
!
! Computes column Delta-Eddington radiation solution for specific
! surface type: either snow over sea ice, bare sea ice, or ponded sea ice.
!
! Divides solar spectrum into 3 intervals: 0.2-0.7, 0.7-1.19, and
! 1.19-5.0 micro-meters. The latter two are added (using an assumed
! partition of incident shortwave in the 0.7-5.0 micro-meter band between
! the 0.7-1.19 and 1.19-5.0 micro-meter band) to give the final output
! of 0.2-0.7 visible and 0.7-5.0 near-infrared albedos and fluxes.
!
! Specifies vertical layer optical properties based on input snow depth,
! density and grain radius, along with ice and pond depths, then computes
! layer by layer Delta-Eddington reflectivity, transmissivity and combines
! layers (done by calling routine solution_dEdd). Finally, surface albedos
! and internal fluxes/flux divergences are evaluated.
!
! Description of the level and layer index conventions. This is
! for the standard case of one snow layer and four sea ice layers.
!
! Please read the following; otherwise, there is 99.9% chance you
! will be confused about indices at some point in time........ :)
!
! CICE4.0 snow treatment has one snow layer above the sea ice. This
! snow layer has finite heat capacity, so that surface absorption must
! be distinguished from internal. The Delta-Eddington solar radiation
! thus adds extra surface scattering layers to both snow and sea ice.
! Note that in the following, we assume a fixed vertical layer structure
! for the radiation calculation. In other words, we always have the
! structure shown below for one snow and four sea ice layers, but for
! ponded ice the pond fills "snow" layer 1 over the sea ice, and for
! bare sea ice the top layers over sea ice are treated as transparent air.
!
! SSL = surface scattering layer for either snow or sea ice
! DL = drained layer for sea ice immediately under sea ice SSL
! INT = interior layers for sea ice below the drained layer.
!
! Notice that the radiation level starts with 0 at the top. Thus,
! the total number radiation layers is klev+1, where klev is the
! sum of nslyr, the number of CCSM snow layers, and nilyr, the
! number of CCSM sea ice layers, plus the sea ice SSL:
! klev = 1 + nslyr + nilyr
!
! For the standard case illustrated below, nslyr=1, nilyr=4,
! and klev=6, with the number of layer interfaces klevp=klev+1.
! Layer interfaces are the surfaces on which reflectivities,
! transmissivities and fluxes are evaluated.
!
! CCSM3 Sea Ice Model Delta-Eddington Solar Radiation
! Layers and Interfaces
! Layer Index Interface Index
! --------------------- --------------------- 0
! 0 \\\ snow SSL \\\
! snow layer 1 --------------------- 1
! 1 rest of snow layer
! +++++++++++++++++++++ +++++++++++++++++++++ 2
! 2 \\\ sea ice SSL \\\
! sea ice layer 1 --------------------- 3
! 3 sea ice DL
! --------------------- --------------------- 4
!
! sea ice layer 2 4 sea ice INT
!
! --------------------- --------------------- 5
!
! sea ice layer 3 5 sea ice INT
!
! --------------------- --------------------- 6
!
! sea ice layer 4 6 sea ice INT
!
! --------------------- --------------------- 7
!
! When snow lies over sea ice, the radiation absorbed in the
! snow SSL is used for surface heating, and that in the rest
! of the snow layer for its internal heating. For sea ice in
! this case, all of the radiant heat absorbed in both the
! sea ice SSL and the DL are used for sea ice layer 1 heating.
!
! When pond lies over sea ice, and for bare sea ice, all of the
! radiant heat absorbed within and above the sea ice SSL is used
! for surface heating, and that absorbed in the sea ice DL is
! used for sea ice layer 1 heating.
!
! Basically, vertical profiles of the layer extinction optical depth (tau),
! single scattering albedo (w0) and asymmetry parameter (g) are required over
! the klev+1 layers, where klev+1 = 2 + nslyr + nilyr. All of the surface type
! information and snow/ice iop properties are evaulated in this routine, so
! the tau,w0,g profiles can be passed to solution_dEdd for multiple scattering
! evaluation. Snow, bare ice and ponded ice iops are contained in data arrays
! in this routine.
!
!-----------------------------------------------------------------------
!
! !LOCAL PARAMETERS
!
integer (kind=int_kind) :: &
i , & ! longitude index
j , & ! latitude index
k , & ! level index
ij , & ! horizontal index, combines i and j loops
ns , & ! spectral index
nr , & ! index for grain radius tables
ksa , & ! index for snow internal absorption
ki , & ! index for sea ice internal absorption
km , & ! k starting index for snow, sea ice internal absorption
kp , & ! k+1 or k+2 index for snow, sea ice internal absorption
ksrf , & ! level index for surface absorption
ksnow , & ! level index for snow density and grain size
kii ! level starting index for sea ice (nslyr+1)
integer (kind=int_kind), parameter :: &
klev = nslyr + nilyr + 1 , & ! number of radiation layers - 1
klevp = klev + 1 ! number of radiation interfaces - 1
! (0 layer is included also)
integer (kind=int_kind), parameter :: &
nspint = 3 , & ! number of solar spectral intervals
nmbrad = 32 ! number of snow grain radii in tables
real (kind=dbl_kind), dimension(icells_DE) :: &
avdr , & ! visible albedo, direct (fraction)
avdf , & ! visible albedo, diffuse (fraction)
aidr , & ! near-ir albedo, direct (fraction)
aidf ! near-ir albedo, diffuse (fraction)
real (kind=dbl_kind), dimension(icells_DE) :: &
fsfc , & ! shortwave absorbed at snow/bare ice/ponded ice surface (W m-2)
fint , & ! shortwave absorbed in interior (below surface but above ocean, W m-2)
fthru ! shortwave through snow/bare ice/ponded ice to ocean (W/m^2)
real (kind=dbl_kind), dimension(icells_DE,nslyr) :: &
Sabs ! shortwave absorbed in snow layer (W m-2)
real (kind=dbl_kind), dimension(icells_DE,nilyr) :: &
Iabs ! shortwave absorbed in ice layer (W m-2)
real (kind=dbl_kind), dimension (icells_DE,nspint) :: &
wghtns ! spectral weights
real (kind=dbl_kind), parameter :: &
cp67 = 0.67_dbl_kind , & ! nir band weight parameter
cp33 = 0.33_dbl_kind , & ! nir band weight parameter
cp78 = 0.78_dbl_kind , & ! nir band weight parameter
cp22 = 0.22_dbl_kind , & ! nir band weight parameter
cp01 = 0.01_dbl_kind ! for ocean visible albedo
real (kind=dbl_kind), dimension (0:klev,icells_DE) :: &
tau , & ! layer extinction optical depth
w0 , & ! layer single scattering albedo
g ! layer asymmetry parameter
! following arrays are defined at model interfaces; 0 is the top of the
! layer above the sea ice; klevp is the sea ice/ocean interface.
real (kind=dbl_kind), dimension (0:klevp,icells_DE) :: &
trndir , & ! solar beam down transmission from top
trntdr , & ! total transmission to direct beam for layers above
trndif , & ! diffuse transmission to diffuse beam for layers above
rupdir , & ! reflectivity to direct radiation for layers below
rupdif , & ! reflectivity to diffuse radiation for layers below
rdndif ! reflectivity to diffuse radiation for layers above
real (kind=dbl_kind) :: &
refk ! interface k multiple scattering term
real (kind=dbl_kind), dimension (0:klevp,icells_DE) :: &
fdirup , & ! up flux at model interface due to direct beam at top surface
fdirdn , & ! down flux at model interface due to direct beam at top surface
fdifup , & ! up flux at model interface due to diffuse beam at top surface
fdifdn ! down flux at model interface due to diffuse beam at top surface
! inherent optical property (iop) arrays for snow
real (kind=dbl_kind), dimension (nspint) :: &
Qs , & ! Snow extinction efficiency
ks , & ! Snow extinction coefficient (/m)
ws , & ! Snow single scattering albedo
gs ! Snow asymmetry parameter
real (kind=dbl_kind), dimension (nmbrad) :: &
rsnw_tab ! snow grain radius for each table entry (micro-meters)
real (kind=dbl_kind), dimension (nspint,nmbrad) :: &
Qs_tab , & ! extinction efficiency for each snow grain radius
ws_tab , & ! single scatter albedo for each snow grain radius
gs_tab ! assymetry parameter for each snow grain radius
real (kind=dbl_kind) :: &
delr , & ! snow grain radius interpolation parameter
rhoi , & ! pure ice density (kg/m3)
fr , & ! snow grain adjustment factor
fr_max , & ! snow grain adjustment factor max
fr_min ! snow grain adjustment factor min
! inherent optical property (iop) arrays for ice and ponded ice
! mn = specified mean (or base) value
real (kind=dbl_kind), dimension (nspint) :: &
ki_ssl_mn , & ! Surface-scattering-layer ice extinction coefficient (/m)
wi_ssl_mn , & ! Surface-scattering-layer ice single scattering albedo
gi_ssl_mn , & ! Surface-scattering-layer ice asymmetry parameter
ki_dl_mn , & ! Drained-layer ice extinction coefficient (/m)
wi_dl_mn , & ! Drained-layer ice single scattering albedo
gi_dl_mn , & ! Drained-layer ice asymmetry parameter
ki_int_mn , & ! Interior-layer ice extinction coefficient (/m)
wi_int_mn , & ! Interior-layer ice single scattering albedo
gi_int_mn , & ! Interior-layer ice asymmetry parameter
ki_p_ssl_mn , & ! Ice under pond surface-scattering-layer extinction coefficient (/m)
wi_p_ssl_mn , & ! Ice under pond surface-scattering-layer single scattering albedo
gi_p_ssl_mn , & ! Ice under pond surface-scattering-layer asymmetry parameter
ki_p_int_mn , & ! Ice under pond interior extinction coefficient (/m)
wi_p_int_mn , & ! Ice under pond interior single scattering albedo
gi_p_int_mn ! Ice under pond interior asymmetry parameter
! actual used ice and ponded ice IOPs, allowing for tuning
! modifications of the above "_mn" value
real (kind=dbl_kind), dimension (nspint) :: &
ki_ssl , & ! Surface-scattering-layer ice extinction coefficient (/m)
wi_ssl , & ! Surface-scattering-layer ice single scattering albedo
gi_ssl , & ! Surface-scattering-layer ice asymmetry parameter
ki_dl , & ! Drained-layer ice extinction coefficient (/m)
wi_dl , & ! Drained-layer ice single scattering albedo
gi_dl , & ! Drained-layer ice asymmetry parameter
ki_int , & ! Interior-layer ice extinction coefficient (/m)
wi_int , & ! Interior-layer ice single scattering albedo
gi_int , & ! Interior-layer ice asymmetry parameter
ki_p_ssl , & ! Ice under pond srf scat layer extinction coefficient (/m)
wi_p_ssl , & ! Ice under pond srf scat layer single scattering albedo
gi_p_ssl , & ! Ice under pond srf scat layer asymmetry parameter
ki_p_int , & ! Ice under pond extinction coefficient (/m)
wi_p_int , & ! Ice under pond single scattering albedo
gi_p_int ! Ice under pond asymmetry parameter
real (kind=dbl_kind) :: &
hi_ssl , & ! sea ice surface scattering layer thickness (m)
hs_ssl , & ! snow surface scattering layer thickness (m)
dz , & ! snow, sea ice or pond water layer thickness
dz_ssl , & ! snow or sea ice surface scattering layer thickness
fs ! scaling factor to reduce (nilyr<4) or increase (nilyr>4) DL
! extinction coefficient to maintain DL optical depth constant
! with changing number of sea ice layers, to approximately
! conserve computed albedo for constant physical depth of sea
! ice when the number of sea ice layers vary
real (kind=dbl_kind) :: &
kalg , & ! algae absorption coefficient for 0.5 m thick layer
sig , & ! scattering coefficient for tuning
kabs , & ! absorption coefficient for tuning
sigp ! modified scattering coefficient for tuning
! inherent optical property (iop) arrays for pond water and underlying ocean
real (kind=dbl_kind), dimension (nspint) :: &
kw , & ! Pond water extinction coefficient (/m)
ww , & ! Pond water single scattering albedo
gw ! Pond water asymmetry parameter
real (kind=dbl_kind), dimension (icells_DE) :: &
albodr , & ! spectral ocean albedo to direct rad
albodf ! spectral ocean albedo to diffuse rad
! tuning parameters
real (kind=dbl_kind) :: &
fp_ice , & ! ice fraction of scat coeff for + stn dev in alb
fm_ice , & ! ice fraction of scat coeff for - stn dev in alb
fp_pnd , & ! ponded ice fraction of scat coeff for + stn dev in alb
fm_pnd ! ponded ice fraction of scat coeff for - stn dev in alb
! for melt pond transition to bare sea ice for small pond depths
real (kind=dbl_kind) :: &
hpmin , & ! minimum allowed melt pond depth (m)
hp0 , & ! melt pond depth below which iops are weighted bare ice + pond (m)
sig_i , & ! ice scattering coefficient (/m)
sig_p , & ! pond scattering coefficient (/m)
kext ! weighted extinction coefficient (/m)
! snow grain radii (micro-meters) for table
data rsnw_tab/ &
5._dbl_kind, 7._dbl_kind, 10._dbl_kind, 15._dbl_kind, &
20._dbl_kind, 30._dbl_kind, 40._dbl_kind, 50._dbl_kind, &
65._dbl_kind, 80._dbl_kind, 100._dbl_kind, 120._dbl_kind, &
140._dbl_kind, 170._dbl_kind, 200._dbl_kind, 240._dbl_kind, &
290._dbl_kind, 350._dbl_kind, 420._dbl_kind, 500._dbl_kind, &
570._dbl_kind, 660._dbl_kind, 760._dbl_kind, 870._dbl_kind, &
1000._dbl_kind, 1100._dbl_kind, 1250._dbl_kind, 1400._dbl_kind, &
1600._dbl_kind, 1800._dbl_kind, 2000._dbl_kind, 2500._dbl_kind/
! snow extinction efficiency (unitless)
data Qs_tab/ &
2.131798_dbl_kind, 2.187756_dbl_kind, 2.267358_dbl_kind, &
2.104499_dbl_kind, 2.148345_dbl_kind, 2.236078_dbl_kind, &
2.081580_dbl_kind, 2.116885_dbl_kind, 2.175067_dbl_kind, &
2.062595_dbl_kind, 2.088937_dbl_kind, 2.130242_dbl_kind, &
2.051403_dbl_kind, 2.072422_dbl_kind, 2.106610_dbl_kind, &
2.039223_dbl_kind, 2.055389_dbl_kind, 2.080586_dbl_kind, &
2.032383_dbl_kind, 2.045751_dbl_kind, 2.066394_dbl_kind, &
2.027920_dbl_kind, 2.039388_dbl_kind, 2.057224_dbl_kind, &
2.023444_dbl_kind, 2.033137_dbl_kind, 2.048055_dbl_kind, &
2.020412_dbl_kind, 2.028840_dbl_kind, 2.041874_dbl_kind, &
2.017608_dbl_kind, 2.024863_dbl_kind, 2.036046_dbl_kind, &
2.015592_dbl_kind, 2.022021_dbl_kind, 2.031954_dbl_kind, &
2.014083_dbl_kind, 2.019887_dbl_kind, 2.028853_dbl_kind, &
2.012368_dbl_kind, 2.017471_dbl_kind, 2.025353_dbl_kind, &
2.011092_dbl_kind, 2.015675_dbl_kind, 2.022759_dbl_kind, &
2.009837_dbl_kind, 2.013897_dbl_kind, 2.020168_dbl_kind, &
2.008668_dbl_kind, 2.012252_dbl_kind, 2.017781_dbl_kind, &
2.007627_dbl_kind, 2.010813_dbl_kind, 2.015678_dbl_kind, &
2.006764_dbl_kind, 2.009577_dbl_kind, 2.013880_dbl_kind, &
2.006037_dbl_kind, 2.008520_dbl_kind, 2.012382_dbl_kind, &
2.005528_dbl_kind, 2.007807_dbl_kind, 2.011307_dbl_kind, &
2.005025_dbl_kind, 2.007079_dbl_kind, 2.010280_dbl_kind, &
2.004562_dbl_kind, 2.006440_dbl_kind, 2.009333_dbl_kind, &
2.004155_dbl_kind, 2.005898_dbl_kind, 2.008523_dbl_kind, &
2.003794_dbl_kind, 2.005379_dbl_kind, 2.007795_dbl_kind, &
2.003555_dbl_kind, 2.005041_dbl_kind, 2.007329_dbl_kind, &
2.003264_dbl_kind, 2.004624_dbl_kind, 2.006729_dbl_kind, &
2.003037_dbl_kind, 2.004291_dbl_kind, 2.006230_dbl_kind, &
2.002776_dbl_kind, 2.003929_dbl_kind, 2.005700_dbl_kind, &
2.002590_dbl_kind, 2.003627_dbl_kind, 2.005276_dbl_kind, &
2.002395_dbl_kind, 2.003391_dbl_kind, 2.004904_dbl_kind, &
2.002071_dbl_kind, 2.002922_dbl_kind, 2.004241_dbl_kind/
! snow single scattering albedo (unitless)
data ws_tab/ &
0.9999994_dbl_kind, 0.9999673_dbl_kind, 0.9954589_dbl_kind, &
0.9999992_dbl_kind, 0.9999547_dbl_kind, 0.9938576_dbl_kind, &
0.9999990_dbl_kind, 0.9999382_dbl_kind, 0.9917989_dbl_kind, &
0.9999985_dbl_kind, 0.9999123_dbl_kind, 0.9889724_dbl_kind, &
0.9999979_dbl_kind, 0.9998844_dbl_kind, 0.9866190_dbl_kind, &
0.9999970_dbl_kind, 0.9998317_dbl_kind, 0.9823021_dbl_kind, &
0.9999960_dbl_kind, 0.9997800_dbl_kind, 0.9785269_dbl_kind, &
0.9999951_dbl_kind, 0.9997288_dbl_kind, 0.9751601_dbl_kind, &
0.9999936_dbl_kind, 0.9996531_dbl_kind, 0.9706974_dbl_kind, &
0.9999922_dbl_kind, 0.9995783_dbl_kind, 0.9667577_dbl_kind, &
0.9999903_dbl_kind, 0.9994798_dbl_kind, 0.9621007_dbl_kind, &
0.9999885_dbl_kind, 0.9993825_dbl_kind, 0.9579541_dbl_kind, &
0.9999866_dbl_kind, 0.9992862_dbl_kind, 0.9541924_dbl_kind, &
0.9999838_dbl_kind, 0.9991434_dbl_kind, 0.9490959_dbl_kind, &
0.9999810_dbl_kind, 0.9990025_dbl_kind, 0.9444940_dbl_kind, &
0.9999772_dbl_kind, 0.9988171_dbl_kind, 0.9389141_dbl_kind, &
0.9999726_dbl_kind, 0.9985890_dbl_kind, 0.9325819_dbl_kind, &
0.9999670_dbl_kind, 0.9983199_dbl_kind, 0.9256405_dbl_kind, &
0.9999605_dbl_kind, 0.9980117_dbl_kind, 0.9181533_dbl_kind, &
0.9999530_dbl_kind, 0.9976663_dbl_kind, 0.9101540_dbl_kind, &
0.9999465_dbl_kind, 0.9973693_dbl_kind, 0.9035031_dbl_kind, &
0.9999382_dbl_kind, 0.9969939_dbl_kind, 0.8953134_dbl_kind, &
0.9999289_dbl_kind, 0.9965848_dbl_kind, 0.8865789_dbl_kind, &
0.9999188_dbl_kind, 0.9961434_dbl_kind, 0.8773350_dbl_kind, &
0.9999068_dbl_kind, 0.9956323_dbl_kind, 0.8668233_dbl_kind, &
0.9998975_dbl_kind, 0.9952464_dbl_kind, 0.8589990_dbl_kind, &
0.9998837_dbl_kind, 0.9946782_dbl_kind, 0.8476493_dbl_kind, &
0.9998699_dbl_kind, 0.9941218_dbl_kind, 0.8367318_dbl_kind, &
0.9998515_dbl_kind, 0.9933966_dbl_kind, 0.8227881_dbl_kind, &
0.9998332_dbl_kind, 0.9926888_dbl_kind, 0.8095131_dbl_kind, &
0.9998148_dbl_kind, 0.9919968_dbl_kind, 0.7968620_dbl_kind, &
0.9997691_dbl_kind, 0.9903277_dbl_kind, 0.7677887_dbl_kind/
! snow asymmetry parameter (unitless)
data gs_tab / &
0.859913_dbl_kind, 0.848003_dbl_kind, 0.824415_dbl_kind, &
0.867130_dbl_kind, 0.858150_dbl_kind, 0.848445_dbl_kind, &
0.873381_dbl_kind, 0.867221_dbl_kind, 0.861714_dbl_kind, &
0.878368_dbl_kind, 0.874879_dbl_kind, 0.874036_dbl_kind, &
0.881462_dbl_kind, 0.879661_dbl_kind, 0.881299_dbl_kind, &
0.884361_dbl_kind, 0.883903_dbl_kind, 0.890184_dbl_kind, &
0.885937_dbl_kind, 0.886256_dbl_kind, 0.895393_dbl_kind, &
0.886931_dbl_kind, 0.887769_dbl_kind, 0.899072_dbl_kind, &
0.887894_dbl_kind, 0.889255_dbl_kind, 0.903285_dbl_kind, &
0.888515_dbl_kind, 0.890236_dbl_kind, 0.906588_dbl_kind, &
0.889073_dbl_kind, 0.891127_dbl_kind, 0.910152_dbl_kind, &
0.889452_dbl_kind, 0.891750_dbl_kind, 0.913100_dbl_kind, &
0.889730_dbl_kind, 0.892213_dbl_kind, 0.915621_dbl_kind, &
0.890026_dbl_kind, 0.892723_dbl_kind, 0.918831_dbl_kind, &
0.890238_dbl_kind, 0.893099_dbl_kind, 0.921540_dbl_kind, &
0.890441_dbl_kind, 0.893474_dbl_kind, 0.924581_dbl_kind, &
0.890618_dbl_kind, 0.893816_dbl_kind, 0.927701_dbl_kind, &
0.890762_dbl_kind, 0.894123_dbl_kind, 0.930737_dbl_kind, &
0.890881_dbl_kind, 0.894397_dbl_kind, 0.933568_dbl_kind, &
0.890975_dbl_kind, 0.894645_dbl_kind, 0.936148_dbl_kind, &
0.891035_dbl_kind, 0.894822_dbl_kind, 0.937989_dbl_kind, &
0.891097_dbl_kind, 0.895020_dbl_kind, 0.939949_dbl_kind, &
0.891147_dbl_kind, 0.895212_dbl_kind, 0.941727_dbl_kind, &
0.891189_dbl_kind, 0.895399_dbl_kind, 0.943339_dbl_kind, &
0.891225_dbl_kind, 0.895601_dbl_kind, 0.944915_dbl_kind, &
0.891248_dbl_kind, 0.895745_dbl_kind, 0.945950_dbl_kind, &
0.891277_dbl_kind, 0.895951_dbl_kind, 0.947288_dbl_kind, &
0.891299_dbl_kind, 0.896142_dbl_kind, 0.948438_dbl_kind, &
0.891323_dbl_kind, 0.896388_dbl_kind, 0.949762_dbl_kind, &
0.891340_dbl_kind, 0.896623_dbl_kind, 0.950916_dbl_kind, &
0.891356_dbl_kind, 0.896851_dbl_kind, 0.951945_dbl_kind, &
0.891386_dbl_kind, 0.897399_dbl_kind, 0.954156_dbl_kind/
! ice surface scattering layer (ssl) iops (units of k = /m)
data ki_ssl_mn / 1000.1_dbl_kind, 1003.7_dbl_kind, 7042._dbl_kind/
data wi_ssl_mn / .9999_dbl_kind, .9963_dbl_kind, .9088_dbl_kind/
data gi_ssl_mn / .94_dbl_kind, .94_dbl_kind, .94_dbl_kind/
! ice drained layer (dl) iops (units of k = /m)
data ki_dl_mn / 100.2_dbl_kind, 107.7_dbl_kind, 1309._dbl_kind /
data wi_dl_mn / .9980_dbl_kind, .9287_dbl_kind, .0305_dbl_kind /
data gi_dl_mn / .94_dbl_kind, .94_dbl_kind, .94_dbl_kind /
! ice interior layer (int) iops (units of k = /m)
data ki_int_mn / 20.2_dbl_kind, 27.7_dbl_kind, 1445._dbl_kind /
data wi_int_mn / .9901_dbl_kind, .7223_dbl_kind, .0277_dbl_kind /
data gi_int_mn / .94_dbl_kind, .94_dbl_kind, .94_dbl_kind /
! ponded ice surface scattering layer (ssl) iops (units of k = /m)
data ki_p_ssl_mn / 70.2_dbl_kind, 77.7_dbl_kind, 1309._dbl_kind/
data wi_p_ssl_mn / .9972_dbl_kind, .9009_dbl_kind, .0305_dbl_kind/
data gi_p_ssl_mn / .94_dbl_kind, .94_dbl_kind, .94_dbl_kind /
! ponded ice interior layer (int) iops (units of k = /m)
data ki_p_int_mn / 20.2_dbl_kind, 27.7_dbl_kind, 1445._dbl_kind/
data wi_p_int_mn / .9901_dbl_kind, .7223_dbl_kind, .0277_dbl_kind/
data gi_p_int_mn / .94_dbl_kind, .94_dbl_kind, .94_dbl_kind /
! pond water iops (units of k = /m)
data kw / 0.20_dbl_kind, 12.0_dbl_kind, 729._dbl_kind /
data ww / 0.00_dbl_kind, 0.00_dbl_kind, 0.00_dbl_kind /
data gw / 0.00_dbl_kind, 0.00_dbl_kind, 0.00_dbl_kind /
! snow data
data hs_ssl / 0.040_dbl_kind / ! snow surface scattering layer thickness (m)
data rhoi /917.0_dbl_kind / ! snow mass density (kg/m3)
data fr_max / 1.00_dbl_kind / ! snow grain adjustment factor max
data fr_min / 0.80_dbl_kind / ! snow grain adjustment factor min
! ice data
data hi_ssl / 0.050_dbl_kind / ! sea ice surface scattering layer thickness (m)
data kalg / 0.60_dbl_kind / ! for 0.5 m path of 75 mg Chl a / m2
! ice and pond scat coeff fractional change for +- one-sigma in albedo
data fp_ice / 0.15_dbl_kind /
data fm_ice / 0.15_dbl_kind /
data fp_pnd / 2.00_dbl_kind /
data fm_pnd / 0.50_dbl_kind /