forked from darwinproject/darwin3
-
Notifications
You must be signed in to change notification settings - Fork 1
/
seaice_readparms.F
1438 lines (1379 loc) · 55 KB
/
seaice_readparms.F
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
#include "SEAICE_OPTIONS.h"
#ifdef ALLOW_AUTODIFF
# include "AUTODIFF_OPTIONS.h"
#endif
CBOP
C !ROUTINE: SEAICE_READPARMS
C !INTERFACE:
SUBROUTINE SEAICE_READPARMS( myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | S/R SEAICE_READPARMS
C | o Routine to read in file data.seaice
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C === Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#ifdef ALLOW_GENERIC_ADVDIFF
# include "GAD.h"
#endif /* ALLOW_GENERIC_ADVDIFF */
#include "SEAICE_SIZE.h"
#include "SEAICE_PARAMS.h"
#include "SEAICE_TRACER.h"
#ifdef ALLOW_COST
# include "SEAICE_COST.h"
#endif
#ifdef ALLOW_MNC
# include "MNC_PARAMS.h"
#endif
#ifdef ALLOW_EXF
# include "EXF_CONSTANTS.h"
#endif /* ALLOW_EXF */
#ifdef ALLOW_AUTODIFF
# include "AUTODIFF_PARAMS.h"
#endif
C !INPUT/OUTPUT PARAMETERS:
C === Routine arguments ===
C myThid :: my Thread Id. number
INTEGER myThid
CEOP
C !LOCAL VARIABLES:
C === Local variables ===
C msgBuf :: Informational/error message buffer
C iUnit :: Work variable for IO unit number
CHARACTER*(MAX_LEN_MBUF) msgBuf
LOGICAL chkFlag
INTEGER iUnit
INTEGER l
#ifdef ALLOW_SITRACER
INTEGER iTracer
#endif
#ifdef ALLOW_COST
INTEGER locDate(4)
#endif /* ALLOW_COST */
INTEGER nRetired, nError
_RL tmp
C- Old parameters (to be retired one day):
_RL SEAICE_availHeatTaper
_RL SEAICE_gamma_t, SEAICE_gamma_t_frz, SEAICE_availHeatFracFrz
C- Retired parameters:
C MAX_TICE :: maximum ice temperature (deg C)
C LAD :: time stepping used for sea-ice advection:
C 1 = LEAPFROG, 2 = BACKWARD EULER.
C SEAICE_freeze :: FREEZING TEMP. OF SEA WATER
_RL SEAICE_sensHeat, SEAICE_latentWater, SEAICE_latentIce
_RL SEAICE_salinity, SIsalFRAC, SIsal0
_RL SEAICE_lhSublim, SEAICE_freeze, MAX_HEFF
_RL areaMin, areaMax, A22, hiceMin, MAX_TICE
LOGICAL SEAICEadvAge
INTEGER SEAICEadvSchAge, LAD, SEAICEturbFluxFormula
INTEGER NPSEUDOTIMESTEPS, SOLV_MAX_ITERS
INTEGER SEAICEnewtonIterMax, SEAICEkrylovIterMax
_RL JFNKgamma_nonlin
_RL SEAICEdiffKhAge
CHARACTER*(MAX_LEN_MBUF) IceAgeFile, IceAgeTrFile(4)
_RL SEAICE_abEps
LOGICAL SEAICEuseAB2
C-- SEAICE parameters
NAMELIST /SEAICE_PARM01/
& SEAICEuseDYNAMICS, SEAICEuseFREEDRIFT, SEAICEuseStrImpCpl,
& SEAICEuseMCS, SEAICEuseMCE, SEAICEuseTD, SEAICEusePL,
& SEAICEuseTEM, SEAICEuseMetricTerms, SEAICEuseTilt,
& useHB87stressCoupling, SEAICEupdateOceanStress,
& usePW79thermodynamics, useMaykutSatVapPoly, SEAICEuseFlooding,
& SEAICErestoreUnderIce, SEAICE_growMeltByConv,
& SEAICE_salinityTracer, SEAICE_ageTracer,
& SEAICEadvHeff, SEAICEadvArea, SEAICEadvSnow,
& SEAICEadvSalt, SEAICEadvAge, SEAICEaddSnowMass,
& SEAICEmomAdvection, SEAICEselectKEscheme, SEAICEselectVortScheme,
& SEAICEhighOrderVorticity, SEAICEupwindVorticity,
& SEAICEuseAbsVorticity, SEAICEuseJamartMomAdv,
& SEAICE_clipVelocities, SEAICE_maskRHS,
& SEAICE_no_slip, SEAICE_2ndOrderBC,
& SEAICEetaZmethod, LAD, IMAX_TICE, postSolvTempIter,
& SEAICEuseFluxForm, SEAICEadvScheme, SEAICEadvSchArea,
& SEAICEadvSchHeff, SEAICEadvSchSnow,
& SEAICEadvSchSalt, SEAICEadvSchAge,
& SEAICEdiffKhHeff, SEAICEdiffKhSnow, SEAICEdiffKhArea,
& SEAICEdiffKhSalt, SEAICEdiffKhAge, DIFF1,
& SEAICE_deltaTtherm, SEAICE_deltaTdyn,
& SEAICE_LSRrelaxU, SEAICE_LSRrelaxV,
& SOLV_MAX_ITERS, SOLV_NCHECK, NPSEUDOTIMESTEPS,
& LSR_ERROR, LSR_mixIniGuess, SEAICEuseMultiTileSolver,
& SEAICE_deltaTevp, SEAICE_elasticParm, SEAICE_evpTauRelax,
& SEAICE_evpDampC, SEAICEnEVPstarSteps,
& SEAICE_evpAlpha, SEAICE_evpBeta,
& SEAICEaEVPcoeff, SEAICEaEVPcStar, SEAICEaEVPalphaMin,
& SEAICE_zetaMin, SEAICE_zetaMaxFac, SEAICEusePicardAsPrecon,
& SEAICEuseKrylov, SEAICEuseJFNK,
& SEAICEnonLinIterMax, SEAICElinearIterMax, SEAICEnonLinTol,
& SEAICEnewtonIterMax, SEAICEkrylovIterMax, JFNKgamma_nonlin,
& SEAICEpreconNL_Iter, SEAICEpreconLinIter,
& SEAICE_JFNK_lsIter, SEAICE_JFNK_lsLmax, SEAICE_JFNK_lsGamma,
& SEAICE_JFNK_tolIter, JFNKres_t,JFNKres_tFac,
& JFNKgamma_lin_min,JFNKgamma_lin_max,
& SEAICE_JFNKepsilon, SEAICE_OLx, SEAICE_OLy,
& SEAICE_JFNKphi, SEAICE_JFNKalpha, SEAICEuseIMEX, SEAICEuseBDF2,
& SEAICEuseLinRemapITD,
& useHibler79IceStrength, SEAICEpartFunc, SEAICEredistFunc,
& SEAICEridgingIterMax, SEAICEsimpleRidging, SEAICEsnowFracRidge,
& SEAICEgStar, SEAICEhStar, SEAICEaStar, SEAICEshearParm,
& SEAICEmuRidging, SEAICEmaxRaft, SEAICE_cf,
& SEAICEuseAB2, SEAICE_abEps,
& SEAICEpresH0, SEAICEpresPow0, SEAICEpresPow1,
& SEAICE_initialHEFF, SEAICEturbFluxFormula,
& SEAICE_areaGainFormula, SEAICE_areaLossFormula,
& SEAICE_doOpenWaterGrowth, SEAICE_doOpenWaterMelt,
& SEAICE_rhoAir, SEAICE_rhoIce, SEAICE_rhoSnow, ICE2WATR,
& SEAICE_cpAir, SEAICEscaleSurfStress,
& SEAICE_drag, SEAICE_waterDrag, SEAICEdWatMin, SEAICE_dryIceAlb,
& SEAICE_wetIceAlb, SEAICE_drySnowAlb, SEAICE_wetSnowAlb, HO,
& SEAICE_drag_south, SEAICE_waterDrag_south,
& SEAICE_dryIceAlb_south, SEAICE_wetIceAlb_south,
& SEAICE_drySnowAlb_south, SEAICE_wetSnowAlb_south, HO_south,
& SEAICE_cBasalStar, SEAICEbasalDragU0, SEAICEbasalDragK1,
& SEAICEbasalDragK2, SEAICE_wetAlbTemp, SEAICE_waterAlbedo,
& SEAICE_strength, SEAICE_cStar, SEAICE_eccen,
& SEAICE_eccfr, SEAICEtdMU, SEAICEmcMu,
& SEAICEpressReplFac, SEAICE_tensilFac, SEAICE_tensilDepth,
& SEAICE_lhFusion, SEAICE_lhEvap, SEAICE_dalton,
& SEAICE_sensHeat, SEAICE_latentWater, SEAICE_latentIce,
& SEAICE_salinity, SIsalFRAC, SIsal0,
& areaMin, areaMax, A22, hiceMin,
& SEAICE_iceConduct, SEAICE_snowConduct,
& SEAICE_emissivity, SEAICE_ice_emiss, SEAICE_snow_emiss,
& SEAICE_snowThick, SEAICE_shortwave, SEAICE_freeze, OCEAN_drag,
& SEAICE_tempFrz0, SEAICE_dTempFrz_dS, SEAICE_salt0,
& SEAICE_saltFrac, SEAICEstressFactor, SEAICE_availHeatTaper,
& SEAICE_mcPheePiston, SEAICE_frazilFrac, SEAICE_mcPheeTaper,
& SEAICE_mcPheeStepFunc, SEAICE_gamma_t, SEAICE_gamma_t_frz,
& SEAICE_availHeatFrac, SEAICE_availHeatFracFrz, SEAICE_PDF,
& AreaFile, HeffFile, uIceFile, vIceFile, HsnowFile, HsaltFile,
& SEAICEheatConsFix, SEAICE_multDim, SEAICE_useMultDimSnow,
& SEAICE_deltaMin, SEAICE_area_reg, SEAICE_hice_reg,
& SEAICE_area_floor, SEAICE_area_max, SEAICE_tauAreaObsRelax,
& SEAICE_airTurnAngle, SEAICE_waterTurnAngle,
& MAX_HEFF, MIN_ATEMP, MIN_LWDOWN, MAX_TICE, MIN_TICE,
& SEAICE_EPS, SEAICE_EPS_SQ,
& SEAICEwriteState, SEAICEuseEVPpickup,
& SEAICEuseEVPstar, SEAICEuseEVPrev,
& SEAICE_monFreq, SEAICE_dumpFreq, SEAICE_taveFreq,
& SEAICE_tave_mnc, SEAICE_dump_mnc, SEAICE_mon_mnc,
#ifdef SEAICE_ITD
& Hlimit_c1, Hlimit_c2, Hlimit_c3, Hlimit,
#endif
& SEAICE_debugPointI, SEAICE_debugPointJ,
& SINegFac
#ifdef ALLOW_COST
NAMELIST /SEAICE_PARM02/
& mult_ice_export, mult_ice, cost_ice_flag,
& costIceStart1, costIceStart2,
& costIceEnd1, costIceEnd2,
& cost_ice_flag,
& SEAICE_clamp_salt, SEAICE_clamp_theta,
& SEAICE_cutoff_area, SEAICE_cutoff_heff,
& mult_smrsst, smrsstbarfile,
& mult_smrsss, smrsssbarfile,
& mult_smrarea, smrareabarfile, smrareadatfile,
& wsmrarea0, wmean_smrarea, smrarea_errfile,
& smrareastartdate1, smrareastartdate2, smrareaperiod
#endif
#ifdef ALLOW_SITRACER
NAMELIST /SEAICE_PARM03/
& SItrFile, SItrName, SItrNameLong, SItrUnit, SItrMate,
& SItrFromOcean0, SItrFromOceanFrac, SItrFromFlood0,
& SItrFromFloodFrac, SItrExpand0,
& IceAgeTrFile, SItrNumInUse
#endif
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
IF ( .NOT.useSEAICE ) THEN
C- pkg SEAICE is not used
_BEGIN_MASTER(myThid)
C- Track pkg activation status:
C print a (weak) warning if data.seaice is found
CALL PACKAGES_UNUSED_MSG( 'useSEAICE', ' ', ' ' )
_END_MASTER(myThid)
RETURN
ENDIF
_BEGIN_MASTER(myThid)
C-- set default sea ice parameters
#ifdef SEAICE_ALLOW_DYNAMICS
SEAICEuseDYNAMICS = .TRUE.
#else
SEAICEuseDYNAMICS = .FALSE.
#endif
SEAICEadjMODE = 0
SEAICEuseFREEDRIFT = .FALSE.
SEAICEuseStrImpCpl = .FALSE.
SEAICEuseTilt = .TRUE.
SEAICEheatConsFix = .FALSE.
SEAICEuseTEM = .FALSE.
SEAICEuseMCS = .FALSE.
SEAICEuseMCE = .FALSE.
SEAICEuseTD = .FALSE.
SEAICEusePL = .FALSE.
SEAICEuseMetricTerms = .TRUE.
SEAICEuseEVPpickup = .TRUE.
SEAICEuseEVPstar = .TRUE.
SEAICEuseEVPrev = .TRUE.
SEAICErestoreUnderIce = .FALSE.
SEAICE_growMeltByConv = .FALSE.
SEAICE_salinityTracer = .FALSE.
SEAICE_ageTracer = .FALSE.
useHB87stressCoupling = .FALSE.
SEAICEupdateOceanStress = .TRUE.
SEAICEscaleSurfStress = .TRUE.
SEAICEaddSnowMass = .TRUE.
usePW79thermodynamics = .TRUE.
C start of ridging parameters
useHibler79IceStrength= .TRUE.
SEAICEsimpleRidging = .TRUE.
C The range of this proportionality constant is 2 to 17
SEAICE_cf = 17. _d 0
C By default use partition function of Thorndyke et al. (1975) ...
SEAICEpartFunc = 0
C and redistribution function of Hibler (1980)
SEAICEredistFunc = 0
SEAICEridgingIterMax = 10
C This parameter is not well constraint (Lipscomb et al. 2007)
SEAICEshearParm = 0.5 _d 0
C Thorndyke et al. (1975)
SEAICEgStar = 0.15 _d 0
C suggested by Hibler (1980), Flato and Hibler (1995)
C SEAICEhStar = 100. _d 0
C but this value of 25 seems to give thinner ridges in better agreement
C with observations (according to Lipscomb et al 2007)
SEAICEhStar = 25. _d 0
C according to Lipscomb et al. (2007) these values for aStar and mu
C are approximately equivalent to gStar=0.15 (aStar = gStar/3) for
C SEAICEpartFunc = 1 ...
SEAICEaStar = 0.05 _d 0
C ... and hStar=25 for SEAICEredistFunc = 1
C Libscomb et al. (2007): mu = 3, 4, 5, 6
C correspond to hStar = 25, 50, 75, 100
SEAICEmuRidging = 3. _d 0
SEAICEmaxRaft = 1. _d 0
SEAICEsnowFracRidge = 0.5 _d 0
SEAICEuseLinRemapITD = .TRUE.
C end ridging parampeters
useMaykutSatVapPoly = .FALSE.
SEAICEuseFluxForm = .TRUE.
SEAICEadvHeff = .TRUE.
SEAICEadvArea = .TRUE.
SEAICEadvSnow = .TRUE.
#ifdef SEAICE_VARIABLE_SALINITY
SEAICEadvSalt = .TRUE.
#else
SEAICEadvSalt = .FALSE.
#endif
SEAICEmomAdvection = .FALSE.
SEAICEselectKEscheme = 1
SEAICEselectVortScheme = 2
SEAICEhighOrderVorticity = .FALSE.
SEAICEupwindVorticity = .FALSE.
SEAICEuseAbsVorticity = .FALSE.
SEAICEuseJamartMomAdv = .FALSE.
SEAICEuseFlooding = .TRUE.
SEAICE_no_slip = .FALSE.
SEAICE_2ndOrderBC = .FALSE.
SEAICE_clipVelocities = .FALSE.
SEAICE_maskRHS = .FALSE.
SEAICEetaZmethod = 3
SEAICEadvScheme = 77
SEAICEadvSchArea = UNSET_I
SEAICEadvSchHeff = UNSET_I
SEAICEadvSchSnow = UNSET_I
SEAICEadvSchSalt = UNSET_I
SEAICEdiffKhArea = UNSET_RL
SEAICEdiffKhHeff = UNSET_RL
SEAICEdiffKhSnow = UNSET_RL
SEAICEdiffKhSalt = UNSET_RL
DIFF1 = UNSET_RL
C-- old DIFF1 default:
c DIFF1 = .004 _d 0
SEAICE_deltaTtherm = dTtracerLev(1)
SEAICE_deltaTdyn = dTtracerLev(1)
SEAICE_deltaTevp = UNSET_RL
SEAICEuseBDF2 = .FALSE.
SEAICEuseKrylov = .FALSE.
C JFNK stuff
SEAICEuseJFNK = .FALSE.
SEAICEuseIMEX = .FALSE.
SEAICE_JFNK_lsIter = UNSET_I
SEAICE_JFNK_lsLmax = 4
SEAICE_JFNK_lsGamma = 0.5 _d 0
SEAICE_JFNK_tolIter = 100
C This should be the default for both JFNK and for LSR but in order
C to not jeopardize any existing results, and because it does not yet
C work for llc/cubed-sphere topologies, we require that the user knows
C what he/she is doing when turning this on.
SEAICE_OLx = OLx-2
SEAICE_OLy = OLy-2
JFNKgamma_nonlin = 1. _d -05
JFNKgamma_lin_min = 0.10 _d 0
JFNKgamma_lin_max = 0.99 _d 0
JFNKres_t = UNSET_RL
JFNKres_tFac = UNSET_RL
SEAICE_JFNKepsilon = 1. _d -06
C factor for inexact Newton forcing, .gt. 0 and .le. 1
SEAICE_JFNKphi = 1. _d 0
C exponent for inexact Newton forcing .gt. 1 and .le. 2
SEAICE_JFNKalpha = 1. _d 0
C Hunke, JCP, 2001 use 615 kg/m^2 for this, but does not recommend using it
SEAICE_evpDampC = -1. _d 0
SEAICE_zetaMin = 0. _d 0
SEAICE_zetaMaxFac = 2.5 _d 8
SEAICEpresH0 = 1. _d 0
SEAICEpresPow0 = 1
SEAICEpresPow1 = 1
SEAICE_evpTauRelax = -1. _d 0
SEAICE_elasticParm = 0.33333333333333333333333333 _d 0
SEAICE_evpAlpha = UNSET_RL
SEAICE_evpBeta = UNSET_RL
SEAICEnEVPstarSteps = UNSET_I
SEAICEaEVPcoeff = UNSET_RL
SEAICEaEVPcStar = UNSET_RL
SEAICEaEVPalphaMin = UNSET_RL
SEAICE_initialHEFF = ZERO
#ifdef SEAICE_ITD
C Coefficients used to calculate sea ice thickness category limits
C after Lipscomb et al. (2001, JGR), Equ. 22
C choose between
C - original parameters of Lipscomb et al. (2001):
C c1=3.0/N, c2=15*c1, c3=3.0
C - and a higher resolution of thin end of ITD:
C c1=1.5/N, c2=42*c1, c3=3.3
DO l = 0, nITD
Hlimit(l) = UNSET_RL
ENDDO
Hlimit_c1 = 3.0
Hlimit_c2 = 15.
Hlimit_c3 = 3.0
#endif
SEAICE_rhoIce = 0.91 _d +03
SEAICE_rhoSnow = 330. _d 0
ICE2WATR = UNSET_RL
SEAICE_drag = 0.001 _d 0
OCEAN_drag = 0.001 _d 0
SEAICE_waterDrag = 0.0055 _d 0
SEAICEdWatMin = 0.25 _d 0
SEAICE_dryIceAlb = 0.75 _d 0
SEAICE_wetIceAlb = 0.66 _d 0
SEAICE_drySnowAlb = 0.84 _d 0
SEAICE_wetSnowAlb = 0.7 _d 0
HO = 0.5 _d 0
SEAICE_drag_south = UNSET_RL
SEAICE_waterDrag_south = UNSET_RL
SEAICE_dryIceAlb_south = UNSET_RL
SEAICE_wetIceAlb_south = UNSET_RL
SEAICE_drySnowAlb_south = UNSET_RL
SEAICE_wetSnowAlb_south = UNSET_RL
HO_south = UNSET_RL
C basal drag parameters following Lemieux et al. (2015)
SEAICE_cBasalStar = UNSET_RL
SEAICEbasalDragU0 = 5. _d -05
SEAICEbasalDragK1 = 8. _d 0
SEAICEbasalDragK2 = 0. _d 0
C Lemieux et al. (2015) recommend: SEAICEbasalDragK2 = 15. _d 0
C
SEAICE_wetAlbTemp = -1. _d -3
#ifdef SEAICE_EXTERNAL_FLUXES
SEAICE_waterAlbedo = UNSET_RL
#else /* if undef SEAICE_EXTERNAL_FLUXES */
SEAICE_waterAlbedo = 0.1 _d +00
#endif /* SEAICE_EXTERNAL_FLUXES */
SEAICE_strength = 2.75 _d +04
SEAICE_cStar = 20. _d 0
SEAICEpressReplFac = 1. _d 0
SEAICE_eccen = 2. _d 0
SEAICE_eccfr = UNSET_RL
SEAICE_tensilFac = 0. _d 0
SEAICE_tensilDepth = 0. _d 0
SEAICEtdMU = 1. _d 0
SEAICEmcMu = 1. _d 0
C coefficients for flux computations/bulk formulae
SEAICE_dalton = 1.75 _d -03
#ifdef ALLOW_EXF
IF ( useEXF ) THEN
C Use parameters that have already been set in data.exf
C to be consistent
SEAICE_rhoAir = atmrho
SEAICE_cpAir = atmcp
SEAICE_lhEvap = flamb
SEAICE_lhFusion = flami
SEAICE_boltzmann = stefanBoltzmann
SEAICE_emissivity = ocean_emissivity
SEAICE_ice_emiss = ice_emissivity
SEAICE_snow_emiss = snow_emissivity
ELSE
#else
IF ( .TRUE. ) THEN
#endif /* ALLOW_EXF */
SEAICE_rhoAir = 1.3 _d 0
SEAICE_cpAir = 1004. _d 0
SEAICE_lhEvap = 2.50 _d 6
SEAICE_lhFusion = 3.34 _d 5
SEAICE_boltzmann = 5.670 _d -08
C old default value of 0.97001763668430343479
SEAICE_emissivity = 5.5 _d -08/5.670 _d -08
SEAICE_ice_emiss = SEAICE_emissivity
SEAICE_snow_emiss = SEAICE_emissivity
ENDIF
SEAICE_iceConduct = 2.1656 _d +00
SEAICE_snowConduct = 3.1 _d -01
SEAICE_snowThick = 0.15 _d 0
SEAICE_shortwave = 0.30 _d 0
SEAICE_salt0 = 0.0 _d 0
SEAICE_saltFrac = 0.0 _d 0
#ifdef SEAICE_ITD
C in case defined(SEAICE_ITD) MULTDIM = nITD (see SEAICE_SIZE.h)
c SEAICE_multDim = MULTDIM
C the switch MULTICATEGORY (and with it parameter MULTDIM) has been retired
C and SEAICE_multDim is now a runtime parameter;
C in case SEAICE_multDim is given in data.seaice it needs to be overwritten
C after PARM01 was read (see below)
SEAICE_multDim = nITD
SEAICE_PDF(1) = 1. _d 0
DO l=2,nITD
SEAICE_PDF(l) = 0. _d 0
ENDDO
#else
SEAICE_multDim = 1
DO l=1,nITD
SEAICE_PDF(l) = UNSET_RL
ENDDO
#endif
SEAICE_useMultDimSnow = .TRUE.
C default to be set later (ocean-seaice turbulent flux coeff):
SEAICE_mcPheeStepFunc = .FALSE.
SEAICE_mcPheeTaper = UNSET_RL
SEAICE_availHeatTaper = UNSET_RL
SEAICE_mcPheePiston = UNSET_RL
SEAICE_frazilFrac = UNSET_RL
SEAICE_gamma_t = UNSET_RL
SEAICE_gamma_t_frz = UNSET_RL
SEAICE_availHeatFrac = UNSET_RL
SEAICE_availHeatFracFrz = UNSET_RL
SEAICE_doOpenWaterGrowth=.TRUE.
SEAICE_doOpenWaterMelt=.FALSE.
SEAICE_areaLossFormula=1
SEAICE_areaGainFormula=1
SEAICE_tempFrz0 = 0.0901 _d 0
SEAICE_dTempFrz_dS = -0.0575 _d 0
C old default for constant freezing point
c SEAICE_tempFrz0 = -1.96 _d 0
c SEAICE_dTempFrz_dS = 0. _d 0
SEAICEstressFactor = 1. _d 0
SEAICE_tauAreaObsRelax = -999. _d 0
AreaFile = ' '
HsnowFile = ' '
HsaltFile = ' '
HeffFile = ' '
uIceFile = ' '
vIceFile = ' '
IMAX_TICE = 10
postSolvTempIter = 2
C LSR parameters
SEAICEuseLSR = .TRUE.
SEAICEusePicardAsPrecon = .FALSE.
SEAICE_LSRrelaxU = 0.95 _d 0
SEAICE_LSRrelaxV = 0.95 _d 0
SOLV_NCHECK= 2
SEAICEnonLinIterMax = UNSET_I
SEAICElinearIterMax = UNSET_I
SEAICEpreconNL_Iter = 0
SEAICEpreconLinIter = 10
#ifdef SEAICE_ALLOW_FREEDRIFT
LSR_mixIniGuess = 0
#else
LSR_mixIniGuess = -1
#endif
LSR_ERROR = 0.00001 _d 0
SEAICEuseMultiTileSolver = .FALSE.
SEAICE_area_floor = siEPS
SEAICE_area_reg = siEPS
SEAICE_hice_reg = 0.05 _d 0
SEAICE_area_max = 1.00 _d 0
SEAICE_airTurnAngle = 0.0 _d 0
SEAICE_waterTurnAngle = 0.0 _d 0
MIN_ATEMP = -50. _d 0
MIN_LWDOWN = 60. _d 0
MIN_TICE = -50. _d 0
SEAICE_deltaMin = UNSET_RL
SEAICE_EPS = 1. _d -10
SEAICE_EPS_SQ = -99999.
SEAICEwriteState = .FALSE.
SEAICE_monFreq = monitorFreq
SEAICE_dumpFreq = dumpFreq
SEAICE_taveFreq = taveFreq
#ifdef ALLOW_MNC
SEAICE_tave_mnc = timeave_mnc
SEAICE_dump_mnc = snapshot_mnc
SEAICE_mon_mnc = monitor_mnc
#else
SEAICE_tave_mnc = .FALSE.
SEAICE_dump_mnc = .FALSE.
SEAICE_mon_mnc = .FALSE.
#endif
SEAICE_debugPointI = UNSET_I
SEAICE_debugPointJ = UNSET_I
SINegFac = 1. _d 0
C- Retired parameters:
c LAD = 2
LAD = UNSET_I
NPSEUDOTIMESTEPS = UNSET_I
SOLV_MAX_ITERS = UNSET_I
SEAICEnewtonIterMax= UNSET_I
SEAICEkrylovIterMax= UNSET_I
JFNKgamma_nonlin = UNSET_RL
c SEAICE_sensHeat = 1.75 _d -03 * 1004 * 1.3
c SEAICE_sensHeat = 2.284 _d +00
SEAICE_sensHeat = UNSET_RL
c SEAICE_latentWater = 1.75 _d -03 * 2.500 _d 06 * 1.3
c SEAICE_latentWater = 5.6875 _d +03
SEAICE_latentWater = UNSET_RL
c SEAICE_latentIce = 1.75 _d -03 * 2.834 _d 06 * 1.3
c SEAICE_latentIce = 6.4474 _d +03
SEAICE_latentIce = UNSET_RL
SEAICE_salinity = UNSET_RL
SIsalFRAC = UNSET_RL
SIsal0 = UNSET_RL
IceAgeFile = ' '
c MAX_TICE = 30. _d 0
MAX_TICE = UNSET_RL
areaMin = UNSET_RL
hiceMin = UNSET_RL
A22 = UNSET_RL
areaMax = UNSET_RL
SEAICE_lhSublim = UNSET_RL
SEAICEadvAge = .TRUE.
SEAICEadvSchAge = UNSET_I
SEAICEdiffKhAge = UNSET_RL
IceAgeTrFile(1) = ' '
IceAgeTrFile(2) = ' '
IceAgeTrFile(3) = ' '
IceAgeTrFile(4) = ' '
SEAICEturbFluxFormula =UNSET_I
SEAICE_freeze = UNSET_RL
MAX_HEFF = UNSET_RL
SEAICEuseAB2 = .FALSE.
SEAICE_abEps = UNSET_RL
C- end retired parameters
#ifdef ALLOW_COST
locDate(1) = 0
locDate(2) = 0
# ifdef ALLOW_CAL
CALL CAL_GETDATE( -1, startTime, locDate, myThid )
# endif /* ALLOW_CAL */
mult_ice_export = 0. _d 0
mult_ice = 0. _d 0
costIceStart1 = locDate(1)
costIceStart2 = locDate(2)
costIceEnd1 = 0
costIceEnd2 = 0
cost_ice_flag = 1
SEAICE_clamp_salt = 27.5 _d 0
SEAICE_clamp_theta = 0.0001 _d 0
SEAICE_cutoff_area = 0.0001 _d 0
SEAICE_cutoff_heff = 0. _d 0
c
mult_smrsst = 0. _d 0
mult_smrsss = 0. _d 0
mult_smrarea = 0. _d 0
wsmrarea0 = 0.5 _d 0
wmean_smrarea = 0.5 _d 0
smrsstbarfile = 'smrsstbar'
smrsssbarfile = 'smrsssbar'
smrareabarfile = 'smrareabar'
smrareadatfile = ' '
smrarea_errfile = ' '
smrareastartdate1 = locDate(1)
smrareastartdate2 = locDate(2)
#endif /* ALLOW_COST */
#ifdef ALLOW_SITRACER
SItrNumInUse=SItrMaxNum
DO iTracer = 1, SItrMaxNum
SItrFile(iTracer) = ' '
SItrName(iTracer) = ' '
SItrNameLong(iTracer) = ' '
SItrUnit(iTracer) = ' '
SItrMate(iTracer) = 'HEFF'
SItrFromOcean0(iTracer) = ZERO
SItrFromOceanFrac(iTracer) = ZERO
SItrFromFlood0(iTracer) = ZERO
SItrFromFloodFrac(iTracer) = ZERO
SItrExpand0(iTracer) = ZERO
ENDDO
#endif /* ALLOW_SITRACER */
nRetired = 0
nError = 0
C Open and read the data.seaice file
WRITE(msgBuf,'(A)')
&' '
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT , myThid)
WRITE(msgBuf,'(A)') ' SEAICE_READPARMS: opening data.seaice'
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT , myThid)
CALL OPEN_COPY_DATA_FILE(
I 'data.seaice', 'SEAICE_READPARMS',
O iUnit,
I myThid )
C-- Read settings from model parameter file "data.seaice".
READ(UNIT=iUnit,NML=SEAICE_PARM01)
#ifdef ALLOW_COST
READ(UNIT=iUnit,NML=SEAICE_PARM02)
#endif /* ALLOW_COST */
#ifdef ALLOW_SITRACER
READ(UNIT=iUnit,NML=SEAICE_PARM03)
#endif /* ALLOW_SITRACER */
#ifdef SINGLE_DISK_IO
CLOSE(iUnit)
#else
CLOSE(iUnit,STATUS='DELETE')
#endif /* SINGLE_DISK_IO */
#ifdef SEAICE_ITD
C SEAICE_multDim has become a runtime parameter but if SEAICE_ITD is defined
C it needs to equal nITD because of shared code (mostly in seaice_growth.F).
C nITD is set in SEAICE_SIZE.h
SEAICE_multDim = nITD
#endif
WRITE(msgBuf,'(A)')
& ' SEAICE_READPARMS: finished reading data.seaice'
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT , myThid)
C-- Set default values (if not specified in data.seaice namelist)
C-- Default for regularizing Delta to remain backward compatible
IF ( SEAICE_deltaMin .EQ. UNSET_RL ) SEAICE_deltaMin = SEAICE_EPS
C-- Default is to have a normal flow rule if SEAICE_eccfr is not set
IF (SEAICE_eccfr .EQ. UNSET_RL ) SEAICE_eccfr = SEAICE_eccen
C-- If no PDF was prescribed use the default uniform pdf
tmp = SEAICE_multDim
DO l = 1, SEAICE_multDim
IF (SEAICE_PDF(l).EQ.UNSET_RL) SEAICE_PDF(l) = ONE/tmp
ENDDO
DO l = SEAICE_multDim+1, nITD
IF (SEAICE_PDF(l).EQ.UNSET_RL) SEAICE_PDF(l) = 0. _d 0
ENDDO
IF (ICE2WATR.EQ.UNSET_RL) ICE2WATR = SEAICE_rhoIce*recip_rhoConst
IF (SEAICE_drag_south .EQ. UNSET_RL)
& SEAICE_drag_south = SEAICE_drag
IF (SEAICE_waterDrag_south .EQ. UNSET_RL)
& SEAICE_waterDrag_south = SEAICE_waterDrag
IF (SEAICE_dryIceAlb_south .EQ. UNSET_RL)
& SEAICE_dryIceAlb_south = SEAICE_dryIceAlb
IF (SEAICE_wetIceAlb_south .EQ. UNSET_RL)
& SEAICE_wetIceAlb_south = SEAICE_wetIceAlb
IF (SEAICE_drySnowAlb_south .EQ. UNSET_RL)
& SEAICE_drySnowAlb_south = SEAICE_drySnowAlb
IF (SEAICE_wetSnowAlb_south .EQ. UNSET_RL)
& SEAICE_wetSnowAlb_south = SEAICE_wetSnowAlb
IF (HO_south .EQ. UNSET_RL)
& HO_south = HO
C Basal drag parameter
IF (SEAICE_cBasalStar .EQ. UNSET_RL)
& SEAICE_cBasalStar = SEAICE_cStar
C Check that requested time step size is supported. The combination
C below is the only one that is supported at this time. Does not
C mean that something fancier will not work, just that it has not
C yet been tried nor thought through.
IF ( SEAICE_deltaTtherm .NE. dTtracerLev(1) .OR.
& SEAICE_deltaTdyn .LT. SEAICE_deltaTtherm .OR.
& (SEAICE_deltaTdyn/SEAICE_deltaTtherm) .NE.
& INT(SEAICE_deltaTdyn/SEAICE_deltaTtherm) ) THEN
WRITE(msgBuf,'(A)')
& 'Unsupported combination of SEAICE_deltaTtherm,'
CALL PRINT_ERROR( msgBuf , myThid)
WRITE(msgBuf,'(A)')
& ' SEAICE_deltaTdyn, and dTtracerLev(1)'
CALL PRINT_ERROR( msgBuf , myThid)
nError = nError + 1
ENDIF
SEAICEuseEVP = .FALSE.
#ifdef SEAICE_ALLOW_EVP
C There are three ways to turn on EVP
C 1. original EVP (Hunke, 2001)
IF ( SEAICE_deltaTevp .NE. UNSET_RL ) SEAICEuseEVP = .TRUE.
C 2. modified EVP (Lemieux et al., 2012) or revised EVP (Bouillon
C et al., 2014) by setting alpha and beta
IF ( SEAICE_evpAlpha .NE. UNSET_RL
& .OR. SEAICE_evpBeta .NE. UNSET_RL ) SEAICEuseEVP = .TRUE.
C 3. adaptive EVP
IF ( SEAICEaEVPcoeff .NE. UNSET_RL ) SEAICEuseEVP = .TRUE.
C if EVP is turned on, a couple of parameters need to be computed
IF ( SEAICEuseEVP ) THEN
IF ( (SEAICE_deltaTdyn/SEAICE_deltaTevp) .NE.
& INT(SEAICE_deltaTdyn/SEAICE_deltaTevp) .AND.
& .NOT. (SEAICEuseEVPstar.OR.SEAICEuseEVPrev) ) THEN
WRITE(msgBuf,'(A)')
& 'SEAICE_deltaTevp must be a factor of SEAICE_deltaTdyn.'
CALL PRINT_ERROR( msgBuf , myThid)
nError = nError + 1
ENDIF
IF ( SEAICE_elasticParm .LE. 0. _d 0 ) THEN
WRITE(msgBuf,'(A)')
& 'SEAICE_elasticParm must greater than 0.'
CALL PRINT_ERROR( msgBuf , myThid)
nError = nError + 1
ENDIF
IF ( SEAICE_evpTauRelax .LE. 0. _d 0 )
& SEAICE_evpTauRelax = SEAICE_deltaTdyn*SEAICE_elasticParm
C determine number of internal steps
IF ( SEAICEnEVPstarSteps.EQ.UNSET_I ) THEN
IF ( SEAICE_deltaTevp.EQ.UNSET_RL ) THEN
WRITE(msgBuf,'(A,A)') 'S/R SEAICE_readparms: Either ',
& 'SEAICEnEVPstarSteps or SEAICE_deltaTevp need to be set.'
CALL PRINT_ERROR( msgBuf , myThid)
nError = nError + 1
ELSE
SEAICEnEVPstarSteps = INT(SEAICE_deltaTdyn/SEAICE_deltaTevp)
ENDIF
ENDIF
C default: evpAlpha = evpBeta
IF ( SEAICE_evpAlpha .NE. UNSET_RL .AND.
& SEAICE_evpBeta .EQ. UNSET_RL ) SEAICE_evpBeta = SEAICE_evpAlpha
IF ( SEAICE_evpBeta .NE. UNSET_RL .AND.
& SEAICE_evpAlpha .EQ. UNSET_RL ) SEAICE_evpAlpha = SEAICE_evpBeta
C derive other parameters
IF ( SEAICE_evpBeta .EQ. UNSET_RL ) THEN
SEAICE_evpBeta = SEAICE_deltaTdyn/SEAICE_deltaTevp
ELSE
SEAICE_deltaTevp = SEAICE_deltaTdyn/SEAICE_evpBeta
ENDIF
IF ( SEAICE_evpAlpha .EQ. UNSET_RL ) THEN
SEAICE_evpAlpha = 2. _d 0 * SEAICE_evpTauRelax/SEAICE_deltaTevp
ELSE
SEAICE_evpTauRelax = 0.5 _d 0 *SEAICE_evpAlpha*SEAICE_deltaTevp
ENDIF
C this turns on adaptive EVP
IF ( SEAICEaEVPcoeff .NE. UNSET_RL ) THEN
IF ( SEAICEaEVPcStar .EQ.UNSET_RL) SEAICEaEVPcStar =4. _d 0
IF (SEAICEaEVPalphaMin.EQ.UNSET_RL) SEAICEaEVPalphaMin=5. _d 0
C requires EVP* to work well, so make sure we set it here (commented out
C for now, but these values are the default values now)
CML SEAICEuseEVPstar = .TRUE.
CML SEAICEuseEVPrev = .TRUE.
C For adaptive EVP we do not need constant parameters alpha and
C beta, because they are computed dynamically. Reset them to
C undefined here, so that we know if something funny is going on.
SEAICE_evpAlpha = UNSET_RL
SEAICE_evpBeta = UNSET_RL
ENDIF
C Check if all parameters are set.
ENDIF
#endif /* SEAICE_ALLOW_EVP */
#ifdef SEAICE_ALLOW_FREEDRIFT
IF ( SEAICEuseFREEDRIFT ) SEAICEuseEVP = .FALSE.
IF ( SEAICEuseFREEDRIFT ) THEN
WRITE(msgBuf,'(A,A)')
& 'WARNING FROM S/R SEAICE_READPARMS:',
& ' switch seaice from LSR or EVP to "free drift"'
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
& SQUEEZE_RIGHT , myThid)
ENDIF
#endif /* SEAICE_ALLOW_FREEDRIFT */
#ifndef SEAICE_ITD
IF ( .NOT.useHibler79IceStrength ) THEN
useHibler79IceStrength = .TRUE.
WRITE(msgBuf,'(A,A)')
& 'WARNING FROM S/R SEAICE_READPARMS:',
& ' resetting useHibler79IceStrength = .TRUE., because'
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
& SQUEEZE_RIGHT , myThid)
WRITE(msgBuf,'(A,A)')
& 'WARNING FROM S/R SEAICE_READPARMS:',
& ' SEAICE_ITD is not defined.'
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
& SQUEEZE_RIGHT , myThid)
ENDIF
#endif /* SEAICE_ITD */
C reset default SEAICEuseLSR according to parameters from namelist
SEAICEuseLSR = .NOT.SEAICEuseFREEDRIFT .AND. .NOT.SEAICEuseEVP
& .AND. .NOT.SEAICEuseJFNK .AND. .NOT. SEAICEuseKrylov
C allow SEAICEuseLSR = .TRUE. if used as a preconditioner for non-linear
C JFNK problem (and Krylov solver is not used)
IF ( SEAICEuseJFNK .AND. SEAICEusePicardAsPrecon .AND.
& .NOT. SEAICEuseKrylov ) SEAICEuseLSR = .TRUE.
IF ( SEAICEuseJFNK .AND. .NOT. SEAICEusePicardAsPrecon )
& SEAICEuseKrylov = .FALSE.
C Set different defaults for different solvers
IF ( SEAICEnonLinIterMax .EQ. UNSET_I ) THEN
C two nonlinear iterations correspond to the original modified
C Euler time stepping scheme of Zhang+Hibler (1997)
IF ( SEAICEuseLSR ) SEAICEnonLinIterMax = 2
IF ( SEAICEuseJFNK.OR.SEAICEuseKrylov ) SEAICEnonLinIterMax = 10
ENDIF
C Make sure that we have least two pseudo time steps for Picard-LSR
IF ( SEAICEuseLSR .AND. .NOT. SEAICEusePicardAsPrecon )
& SEAICEnonLinIterMax = MAX(SEAICEnonLinIterMax,2)
C- different defaults for different linear solvers
IF ( SEAICElinearIterMax .EQ. UNSET_I ) THEN
C maximum number of LSOR steps in default Picard solver
C (=previous default for retired SOLV_MAX_ITERS)
#ifdef ALLOW_AUTODIFF
SEAICElinearIterMax = SOLV_MAX_FIXED
#else
SEAICElinearIterMax = 1500
#endif
C the maximum number of Krylov dimensions of 50 is hard coded in
C S/R SEAICE_FGMRES, so that more than 50 linear iterations will
C restart GMRES
IF ( SEAICEuseJFNK.OR.SEAICEuseKrylov ) SEAICElinearIterMax = 10
ENDIF
C Turn line search with JFNK solver off by default by making this
C number much larger than the maximum allowed Newton iterations
IF ( SEAICE_JFNK_lsIter .EQ. UNSET_I )
& SEAICE_JFNK_lsIter = 2*SEAICEnewtonIterMax
C 2nd order boundary conditions only possible for no_slip,
C and EVP, JFNK, and Krylov solvers
IF ( .NOT. SEAICE_no_slip ) SEAICE_2ndOrderBC = .FALSE.
IF ( SEAICEuseLSR ) SEAICE_2ndOrderBC = .FALSE.
C 2nd order boundary conditions require one more row of overlap for the additive Schwartz method
IF ( SEAICE_2ndOrderBC ) THEN
SEAICE_OLx = OLx-3
SEAICE_OLy = OLy-3
ENDIF
C- The old ways of specifying mcPheeTaper, mcPheePiston & frazilFrac:
C a) prevent multiple specification of the same coeff;
C b) if specified, then try to recover old way of setting & default.
IF ( SEAICE_mcPheeTaper .EQ. UNSET_RL ) THEN
IF ( SEAICE_availHeatTaper.EQ.UNSET_RL ) THEN
SEAICE_mcPheeTaper = 0.0 _d 0
ELSE
SEAICE_mcPheeTaper = SEAICE_availHeatTaper
ENDIF
ELSEIF ( SEAICE_availHeatTaper.NE.UNSET_RL ) THEN
WRITE(msgBuf,'(2A)') 'S/R SEAICE_READPARMS: Cannot specify ',
& 'both SEAICE_mcPheeTaper & SEAICE_availHeatTaper'
CALL PRINT_ERROR( msgBuf , myThid)
nError = nError + 1
ENDIF
C- set SEAICE_frazilFrac if not yet done
IF ( SEAICE_gamma_t_frz .NE. UNSET_RL ) THEN
IF ( SEAICE_frazilFrac .EQ. UNSET_RL ) THEN
SEAICE_frazilFrac = SEAICE_deltaTtherm/SEAICE_gamma_t_frz
ELSE
WRITE(msgBuf,'(2A)') 'S/R SEAICE_READPARMS: Cannot specify ',
& 'both SEAICE_frazilFrac & SEAICE_gamma_t_frz'
CALL PRINT_ERROR( msgBuf , myThid)
nError = nError + 1
ENDIF
ENDIF
IF ( SEAICE_availHeatFracFrz.NE.UNSET_RL ) THEN
IF ( SEAICE_frazilFrac .EQ. UNSET_RL ) THEN
SEAICE_frazilFrac = SEAICE_availHeatFracFrz
ELSE
IF ( SEAICE_gamma_t_frz .EQ. UNSET_RL ) THEN
WRITE(msgBuf,'(2A)') 'S/R SEAICE_READPARMS: Cannot specify ',
& 'both SEAICE_frazilFrac & SEAICE_availHeatFracFrz'
ELSE
WRITE(msgBuf,'(2A)') 'S/R SEAICE_READPARMS: Cannot specify ',
& 'both SEAICE_gamma_t_frz & SEAICE_availHeatFracFrz'
ENDIF
CALL PRINT_ERROR( msgBuf , myThid)
nError = nError + 1
ENDIF
ENDIF
C the default for SEAICE_gamma_t_frz use to be SEAICE_gamma_t:
IF ( SEAICE_gamma_t .NE. UNSET_RL .AND.
& SEAICE_frazilFrac .EQ. UNSET_RL ) THEN
SEAICE_frazilFrac = SEAICE_deltaTtherm/SEAICE_gamma_t
ENDIF
C the default for SEAICE_availHeatFracFrz use to be SEAICE_availHeatFrac:
IF ( SEAICE_availHeatFrac.NE.UNSET_RL .AND.
& SEAICE_frazilFrac .EQ. UNSET_RL ) THEN
SEAICE_frazilFrac = SEAICE_availHeatFrac
ENDIF
IF ( SEAICE_frazilFrac .EQ. UNSET_RL ) THEN
SEAICE_frazilFrac = 1. _d 0
ENDIF
C- start by setting SEAICE_availHeatFrac (used in seaice_init_fixed.F
C to set SEAICE_mcPheePiston once drF is known)
IF ( SEAICE_gamma_t .NE. UNSET_RL ) THEN
IF ( SEAICE_availHeatFrac.EQ.UNSET_RL ) THEN
SEAICE_availHeatFrac = SEAICE_deltaTtherm/SEAICE_gamma_t
ELSE
WRITE(msgBuf,'(2A)') 'S/R SEAICE_READPARMS: Cannot specify ',
& 'both SEAICE_gamma_t & SEAICE_availHeatFrac'
CALL PRINT_ERROR( msgBuf , myThid)
nError = nError + 1
ENDIF
ENDIF
IF ( SEAICE_mcPheePiston .NE. UNSET_RL .AND.
& SEAICE_availHeatFrac.NE. UNSET_RL ) THEN
IF ( SEAICE_gamma_t .EQ. UNSET_RL ) THEN
WRITE(msgBuf,'(2A)') 'S/R SEAICE_READPARMS: Cannot specify ',
& 'both SEAICE_mcPheePiston & SEAICE_availHeatFrac'
ELSE
WRITE(msgBuf,'(2A)') 'S/R SEAICE_READPARMS: Cannot specify ',
& 'both SEAICE_mcPheePiston & SEAICE_gamma_t'
ENDIF
CALL PRINT_ERROR( msgBuf , myThid)
nError = nError + 1
ENDIF
IF ( useThSice ) THEN
C If the thsice package with the Winton thermodynamics is used
C is does not make sense to have the following parameters defined,
C so we reset them here
usePW79thermodynamics = .FALSE.
SEAICEadvHeff = .FALSE.
SEAICEadvArea = .FALSE.
SEAICEadvSnow = .FALSE.
SEAICEadvSalt = .FALSE.
ENDIF
C Set advection schemes to some sensible values if not done in data.seaice
IF ( SEAICEadvSchArea .EQ. UNSET_I )
& SEAICEadvSchArea = SEAICEadvSchHeff
IF ( SEAICEadvSchArea .EQ. UNSET_I )
& SEAICEadvSchArea = SEAICEadvScheme
IF ( SEAICEadvScheme .NE. SEAICEadvSchArea )
& SEAICEadvScheme = SEAICEadvSchArea
IF ( SEAICEadvSchHeff .EQ. UNSET_I )
& SEAICEadvSchHeff = SEAICEadvSchArea
IF ( SEAICEadvSchSnow .EQ. UNSET_I )
& SEAICEadvSchSnow = SEAICEadvSchHeff
IF ( SEAICEadvSchSalt .EQ. UNSET_I )
& SEAICEadvSchSalt = SEAICEadvSchHeff
C Set diffusivity to some sensible values if not done in data.seaice
IF ( SEAICEdiffKhArea .EQ. UNSET_RL )
& SEAICEdiffKhArea = SEAICEdiffKhHeff
IF ( SEAICEdiffKhArea .EQ. UNSET_RL )
& SEAICEdiffKhArea = 0. _d 0
IF ( SEAICEdiffKhHeff .EQ. UNSET_RL )
& SEAICEdiffKhHeff = SEAICEdiffKhArea
IF ( SEAICEdiffKhSnow .EQ. UNSET_RL )
& SEAICEdiffKhSnow = SEAICEdiffKhHeff
IF ( SEAICEdiffKhSalt .EQ. UNSET_RL )
& SEAICEdiffKhSalt = SEAICEdiffKhHeff
IF ( SEAICE_EPS_SQ .EQ. -99999. )
& SEAICE_EPS_SQ = SEAICE_EPS * SEAICE_EPS