@@ -20,7 +20,7 @@ module MOM_internal_tides
20
20
use MOM_grid, only : ocean_grid_type
21
21
use MOM_int_tide_input, only: int_tide_input_CS, get_input_TKE, get_barotropic_tidal_vel
22
22
use MOM_io, only : slasher, MOM_read_data, file_exists, axis_info
23
- use MOM_io, only : set_axis_info, get_axis_info
23
+ use MOM_io, only : set_axis_info, get_axis_info, stdout
24
24
use MOM_restart, only : register_restart_field, MOM_restart_CS, restart_init, save_restart
25
25
use MOM_restart, only : lock_check, restart_registry_lock
26
26
use MOM_spatial_means, only : global_area_integral
@@ -148,6 +148,7 @@ module MOM_internal_tides
148
148
real :: q_itides ! < fraction of local dissipation [nondim]
149
149
real :: En_sum ! < global sum of energy for use in debugging, in MKS units [H Z2 T-2 L2 ~> m5 s-2 or J]
150
150
real :: En_underflow ! < A minuscule amount of energy [H Z2 T-2 ~> m3 s-2 or J m-2]
151
+ integer :: En_restart_power ! < A power factor of 2 by which to multiply the energy in restart [nondim]
151
152
type (time_type), pointer :: Time = > NULL () ! < A pointer to the model's clock.
152
153
character (len= 200 ) :: inputdir ! < directory to look for coastline angle file
153
154
real :: decay_rate ! < A constant rate at which internal tide energy is
@@ -308,6 +309,8 @@ subroutine propagate_int_tide(h, tv, Nb, Rho_bot, dt, G, GV, US, inttide_input_C
308
309
real :: I_D_here ! The inverse of the local water column thickness [H-1 ~> m-1 or m2 kg-1]
309
310
real :: I_mass ! The inverse of the local water mass [R-1 Z-1 ~> m2 kg-1]
310
311
real :: I_dt ! The inverse of the timestep [T-1 ~> s-1]
312
+ real :: En_restart_factor ! A multiplicative factor of the form 2**En_restart_power [nondim]
313
+ real :: I_En_restart_factor ! The inverse of the restart mult factor [nondim]
311
314
real :: freq2 ! The frequency squared [T-2 ~> s-2]
312
315
real :: PE_term ! total potential energy of profile [R Z ~> kg m-2]
313
316
real :: KE_term ! total kinetic energy of profile [R Z ~> kg m-2]
@@ -347,6 +350,8 @@ subroutine propagate_int_tide(h, tv, Nb, Rho_bot, dt, G, GV, US, inttide_input_C
347
350
en_subRO = 1e-30 * J_m2_to_HZ2_T2
348
351
349
352
I_dt = 1.0 / dt
353
+ En_restart_factor = 2 ** CS% En_restart_power
354
+ I_En_restart_factor = 1.0 / En_restart_factor
350
355
351
356
! initialize local arrays
352
357
TKE_itidal_input(:,:,:) = 0 .
@@ -360,30 +365,30 @@ subroutine propagate_int_tide(h, tv, Nb, Rho_bot, dt, G, GV, US, inttide_input_C
360
365
361
366
! Rebuild energy density array from multiple restarts
362
367
do fr= 1 ,CS% nFreq ; do a= 1 ,CS% nAngle ; do j= jsd,jed ; do i= isd,ied
363
- CS% En(i,j,a,fr,1 ) = CS% En_restart_mode1(i,j,a,fr)
368
+ CS% En(i,j,a,fr,1 ) = CS% En_restart_mode1(i,j,a,fr) * I_En_restart_factor
364
369
enddo ; enddo ; enddo ; enddo
365
370
366
371
if (CS% nMode >= 2 ) then
367
372
do fr= 1 ,CS% nFreq ; do a= 1 ,CS% nAngle ; do j= jsd,jed ; do i= isd,ied
368
- CS% En(i,j,a,fr,2 ) = CS% En_restart_mode2(i,j,a,fr)
373
+ CS% En(i,j,a,fr,2 ) = CS% En_restart_mode2(i,j,a,fr) * I_En_restart_factor
369
374
enddo ; enddo ; enddo ; enddo
370
375
endif
371
376
372
377
if (CS% nMode >= 3 ) then
373
378
do fr= 1 ,CS% nFreq ; do a= 1 ,CS% nAngle ; do j= jsd,jed ; do i= isd,ied
374
- CS% En(i,j,a,fr,3 ) = CS% En_restart_mode3(i,j,a,fr)
379
+ CS% En(i,j,a,fr,3 ) = CS% En_restart_mode3(i,j,a,fr) * I_En_restart_factor
375
380
enddo ; enddo ; enddo ; enddo
376
381
endif
377
382
378
383
if (CS% nMode >= 4 ) then
379
384
do fr= 1 ,CS% nFreq ; do a= 1 ,CS% nAngle ; do j= jsd,jed ; do i= isd,ied
380
- CS% En(i,j,a,fr,4 ) = CS% En_restart_mode4(i,j,a,fr)
385
+ CS% En(i,j,a,fr,4 ) = CS% En_restart_mode4(i,j,a,fr) * I_En_restart_factor
381
386
enddo ; enddo ; enddo ; enddo
382
387
endif
383
388
384
389
if (CS% nMode >= 5 ) then
385
390
do fr= 1 ,CS% nFreq ; do a= 1 ,CS% nAngle ; do j= jsd,jed ; do i= isd,ied
386
- CS% En(i,j,a,fr,5 ) = CS% En_restart_mode5(i,j,a,fr)
391
+ CS% En(i,j,a,fr,5 ) = CS% En_restart_mode5(i,j,a,fr) * I_En_restart_factor
387
392
enddo ; enddo ; enddo ; enddo
388
393
endif
389
394
@@ -501,7 +506,7 @@ subroutine propagate_int_tide(h, tv, Nb, Rho_bot, dt, G, GV, US, inttide_input_C
501
506
call hchksum(CS% En(:,:,:,1 ,1 ), " EnergyIntTides af halo" , G% HI, haloshift= 0 , scale= HZ2_T2_to_J_m2)
502
507
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq
503
508
call sum_En(G, GV, US, CS, CS% En(:,:,:,fr,m), ' prop_int_tide: after forcing' )
504
- if (is_root_pe()) print * , ' prop_int_tide: after forcing' , CS% En_sum
509
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' prop_int_tide: after forcing' , CS% En_sum
505
510
enddo ; enddo
506
511
endif
507
512
@@ -528,7 +533,7 @@ subroutine propagate_int_tide(h, tv, Nb, Rho_bot, dt, G, GV, US, inttide_input_C
528
533
call hchksum(CS% En(:,:,:,1 ,1 ), " EnergyIntTides af refr" , G% HI, haloshift= 0 , scale= HZ2_T2_to_J_m2)
529
534
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq
530
535
call sum_En(G, GV, US, CS, CS% En(:,:,:,fr,m), ' prop_int_tide: after 1/2 refraction' )
531
- if (is_root_pe()) print * , ' prop_int_tide: after 1/2 refraction' , CS% En_sum
536
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' prop_int_tide: after 1/2 refraction' , CS% En_sum
532
537
enddo ; enddo
533
538
! Check for En<0 - for debugging, delete later
534
539
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq ; do a= 1 ,CS% nAngle
@@ -558,7 +563,7 @@ subroutine propagate_int_tide(h, tv, Nb, Rho_bot, dt, G, GV, US, inttide_input_C
558
563
call hchksum(CS% En(:,:,:,1 ,1 ), " EnergyIntTides af halo R" , G% HI, haloshift= 0 , scale= HZ2_T2_to_J_m2)
559
564
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq
560
565
call sum_En(G, GV, US, CS, CS% En(:,:,:,fr,m), ' prop_int_tide: after correct halo rotation' )
561
- if (is_root_pe()) print * , ' prop_int_tide: after correct halo rotation' , CS% En_sum
566
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' prop_int_tide: after correct halo rotation' , CS% En_sum
562
567
enddo ; enddo
563
568
endif
564
569
@@ -589,7 +594,7 @@ subroutine propagate_int_tide(h, tv, Nb, Rho_bot, dt, G, GV, US, inttide_input_C
589
594
call hchksum(CS% En(:,:,:,1 ,1 ), " EnergyIntTides af prop" , G% HI, haloshift= 0 , scale= HZ2_T2_to_J_m2)
590
595
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq
591
596
call sum_En(G, GV, US, CS, CS% En(:,:,:,fr,m), ' prop_int_tide: after propagate' )
592
- if (is_root_pe()) print * , ' prop_int_tide: after propagate' , CS% En_sum
597
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' prop_int_tide: after propagate' , CS% En_sum
593
598
enddo ; enddo
594
599
! Check for En<0 - for debugging, delete later
595
600
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq ; do a= 1 ,CS% nAngle
@@ -631,7 +636,7 @@ subroutine propagate_int_tide(h, tv, Nb, Rho_bot, dt, G, GV, US, inttide_input_C
631
636
call hchksum(CS% En(:,:,:,1 ,1 ), " EnergyIntTides af refr2" , G% HI, haloshift= 0 , scale= HZ2_T2_to_J_m2)
632
637
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq
633
638
call sum_En(G, GV, US, CS, CS% En(:,:,:,fr,m), ' prop_int_tide: after 2/2 refraction' )
634
- if (is_root_pe()) print * , ' prop_int_tide: after 2/2 refraction' , CS% En_sum
639
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' prop_int_tide: after 2/2 refraction' , CS% En_sum
635
640
enddo ; enddo
636
641
! Check for En<0 - for debugging, delete later
637
642
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq ; do a= 1 ,CS% nAngle
@@ -687,9 +692,9 @@ subroutine propagate_int_tide(h, tv, Nb, Rho_bot, dt, G, GV, US, inttide_input_C
687
692
call hchksum(CS% En(:,:,:,1 ,1 ), " EnergyIntTides after leak" , G% HI, haloshift= 0 , scale= HZ2_T2_to_J_m2)
688
693
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq
689
694
call sum_En(G, GV, US, CS, CS% En(:,:,:,fr,m), ' prop_int_tide: after background drag' )
690
- if (is_root_pe()) print * , ' prop_int_tide: after background drag' , CS% En_sum
695
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' prop_int_tide: after background drag' , CS% En_sum
691
696
call sum_En(G, GV, US, CS, CS% TKE_leak_loss(:,:,:,fr,m) * dt, ' prop_int_tide: loss after background drag' )
692
- if (is_root_pe()) print * , ' prop_int_tide: loss after background drag' , CS% En_sum
697
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' prop_int_tide: loss after background drag' , CS% En_sum
693
698
enddo ; enddo
694
699
! Check for En<0 - for debugging, delete later
695
700
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq ; do a= 1 ,CS% nAngle
@@ -858,7 +863,7 @@ subroutine propagate_int_tide(h, tv, Nb, Rho_bot, dt, G, GV, US, inttide_input_C
858
863
call hchksum(CS% En(:,:,:,1 ,1 ), " EnergyIntTides after wave" , G% HI, haloshift= 0 , scale= HZ2_T2_to_J_m2)
859
864
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq
860
865
call sum_En(G, GV, US, CS, CS% En(:,:,:,fr,m), ' prop_int_tide: before Froude drag' )
861
- if (is_root_pe()) print * , ' prop_int_tide: before Froude drag' , CS% En_sum
866
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' prop_int_tide: before Froude drag' , CS% En_sum
862
867
enddo ; enddo
863
868
! save loss term for online budget, may want to add a debug flag later
864
869
do m= 1 ,CS% nMode ; do fr= 1 ,CS% nFreq
@@ -932,9 +937,9 @@ subroutine propagate_int_tide(h, tv, Nb, Rho_bot, dt, G, GV, US, inttide_input_C
932
937
call hchksum(CS% En(:,:,:,1 ,1 ), " EnergyIntTides after froude" , G% HI, haloshift= 0 , scale= HZ2_T2_to_J_m2)
933
938
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq
934
939
call sum_En(G, GV, US, CS, CS% En(:,:,:,fr,m), ' prop_int_tide: after Froude drag' )
935
- if (is_root_pe()) print * , ' prop_int_tide: after Froude drag' , CS% En_sum
940
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' prop_int_tide: after Froude drag' , CS% En_sum
936
941
call sum_En(G, GV, US, CS, CS% TKE_Froude_loss(:,:,:,fr,m) * dt, ' prop_int_tide: loss after Froude drag' )
937
- if (is_root_pe()) print * , ' prop_int_tide: loss after Froude drag' , CS% En_sum
942
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' prop_int_tide: loss after Froude drag' , CS% En_sum
938
943
enddo ; enddo
939
944
! save loss term for online budget, may want to add a debug flag later
940
945
do m= 1 ,CS% nMode ; do fr= 1 ,CS% nFreq
@@ -1015,7 +1020,7 @@ subroutine propagate_int_tide(h, tv, Nb, Rho_bot, dt, G, GV, US, inttide_input_C
1015
1020
CS% TKE_quad_loss_glo_dt(fr,m) - CS% TKE_itidal_loss_glo_dt(fr,m) - &
1016
1021
CS% TKE_Froude_loss_glo_dt(fr,m) - CS% TKE_residual_loss_glo_dt(fr,m) - &
1017
1022
CS% En_end_glo(fr,m)
1018
- if (is_root_pe()) print * , " error in Energy budget" , CS% error_mode(fr,m)
1023
+ if (is_root_pe()) write (stdout, ' (A,F18.10) ' ) , " error in Energy budget" , CS% error_mode(fr,m)
1019
1024
enddo ; enddo
1020
1025
endif
1021
1026
@@ -1048,37 +1053,32 @@ subroutine propagate_int_tide(h, tv, Nb, Rho_bot, dt, G, GV, US, inttide_input_C
1048
1053
call post_data(CS% id_En_mode(fr,m), tot_En, CS% diag)
1049
1054
endif ; enddo ; enddo
1050
1055
1051
- ! fix underflows
1052
- do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq ; do a= 1 ,CS% nAngle ; do j= jsd,jed ; do i= isd,ied
1053
- if (abs (CS% En(i,j,a,fr,m)) < CS% En_underflow) CS% En(i,j,a,fr,m) = 0.0
1054
- enddo ; enddo ; enddo ; enddo ; enddo
1055
-
1056
1056
! split energy array into multiple restarts
1057
1057
do fr= 1 ,CS% Nfreq ; do a= 1 ,CS% nAngle ; do j= jsd,jed ; do i= isd,ied
1058
- CS% En_restart_mode1(i,j,a,fr) = CS% En(i,j,a,fr,1 )
1058
+ CS% En_restart_mode1(i,j,a,fr) = CS% En(i,j,a,fr,1 ) * En_restart_factor
1059
1059
enddo ; enddo ; enddo ; enddo
1060
1060
1061
1061
if (CS% nMode >= 2 ) then
1062
1062
do fr= 1 ,CS% Nfreq ; do a= 1 ,CS% nAngle ; do j= jsd,jed ; do i= isd,ied
1063
- CS% En_restart_mode2(i,j,a,fr) = CS% En(i,j,a,fr,2 )
1063
+ CS% En_restart_mode2(i,j,a,fr) = CS% En(i,j,a,fr,2 ) * En_restart_factor
1064
1064
enddo ; enddo ; enddo ; enddo
1065
1065
endif
1066
1066
1067
1067
if (CS% nMode >= 3 ) then
1068
1068
do fr= 1 ,CS% Nfreq ; do a= 1 ,CS% nAngle ; do j= jsd,jed ; do i= isd,ied
1069
- CS% En_restart_mode3(i,j,a,fr) = CS% En(i,j,a,fr,3 )
1069
+ CS% En_restart_mode3(i,j,a,fr) = CS% En(i,j,a,fr,3 ) * En_restart_factor
1070
1070
enddo ; enddo ; enddo ; enddo
1071
1071
endif
1072
1072
1073
1073
if (CS% nMode >= 4 ) then
1074
1074
do fr= 1 ,CS% Nfreq ; do a= 1 ,CS% nAngle ; do j= jsd,jed ; do i= isd,ied
1075
- CS% En_restart_mode4(i,j,a,fr) = CS% En(i,j,a,fr,4 )
1075
+ CS% En_restart_mode4(i,j,a,fr) = CS% En(i,j,a,fr,4 ) * En_restart_factor
1076
1076
enddo ; enddo ; enddo ; enddo
1077
1077
endif
1078
1078
1079
1079
if (CS% nMode >= 5 ) then
1080
1080
do fr= 1 ,CS% Nfreq ; do a= 1 ,CS% nAngle ; do j= jsd,jed ; do i= isd,ied
1081
- CS% En_restart_mode5(i,j,a,fr) = CS% En(i,j,a,fr,5 )
1081
+ CS% En_restart_mode5(i,j,a,fr) = CS% En(i,j,a,fr,5 ) * En_restart_factor
1082
1082
enddo ; enddo ; enddo ; enddo
1083
1083
endif
1084
1084
@@ -1608,23 +1608,23 @@ subroutine get_lowmode_diffusivity(G, GV, h, tv, US, h_bot, k_bot, j, N2_lay, N2
1608
1608
enddo
1609
1609
1610
1610
if (abs (verif_N - 1.0 ) > threshold_verif) then
1611
- print * , i, j, verif_N
1611
+ write (stdout, ' (I5,I5,F18.10) ' ) , i, j, verif_N
1612
1612
call MOM_error(FATAL, " mismatch integral for N profile" )
1613
1613
endif
1614
1614
if (abs (verif_N2 - 1.0 ) > threshold_verif) then
1615
- print * , i, j, verif_N2
1615
+ write (stdout, ' (I5,I5,F18.10) ' ) , i, j, verif_N2
1616
1616
call MOM_error(FATAL, " mismatch integral for N2 profile" )
1617
1617
endif
1618
1618
if (abs (verif_bbl - 1.0 ) > threshold_verif) then
1619
- print * , i, j, verif_bbl
1619
+ write (stdout, ' (I5,I5,F18.10) ' ) , i, j, verif_bbl
1620
1620
call MOM_error(FATAL, " mismatch integral for bbl profile" )
1621
1621
endif
1622
1622
if (abs (verif_stl1 - 1.0 ) > threshold_verif) then
1623
- print * , i, j, verif_stl1
1623
+ write (stdout, ' (I5,I5,F18.10) ' ) , i, j, verif_stl1
1624
1624
call MOM_error(FATAL, " mismatch integral for stl1 profile" )
1625
1625
endif
1626
1626
if (abs (verif_stl2 - 1.0 ) > threshold_verif) then
1627
- print * , i, j, verif_stl2
1627
+ write (stdout, ' (I5,I5,F18.10) ' ) , i, j, verif_stl2
1628
1628
call MOM_error(FATAL, " mismatch integral for stl2 profile" )
1629
1629
endif
1630
1630
@@ -2104,7 +2104,7 @@ subroutine propagate(En, cn, freq, dt, G, GV, US, CS, NAngle, residual_loss)
2104
2104
if (CS% debug) then
2105
2105
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq
2106
2106
call sum_En(G, GV, US, CS, CS% En(:,:,:,fr,m), ' propagate: top of routine' )
2107
- if (is_root_pe()) print * , ' propagate: top of routine' , CS% En_sum
2107
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' propagate: top of routine' , CS% En_sum
2108
2108
enddo ; enddo
2109
2109
endif
2110
2110
@@ -2176,7 +2176,7 @@ subroutine propagate(En, cn, freq, dt, G, GV, US, CS, NAngle, residual_loss)
2176
2176
if (CS% debug) then
2177
2177
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq
2178
2178
call sum_En(G, GV, US, CS, CS% En(:,:,:,fr,m), ' propagate: after propagate_x' )
2179
- if (is_root_pe()) print * , ' propagate: after propagate_x' , CS% En_sum
2179
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' propagate: after propagate_x' , CS% En_sum
2180
2180
enddo ; enddo
2181
2181
endif
2182
2182
@@ -2187,7 +2187,7 @@ subroutine propagate(En, cn, freq, dt, G, GV, US, CS, NAngle, residual_loss)
2187
2187
if (CS% debug) then
2188
2188
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq
2189
2189
call sum_En(G, GV, US, CS, CS% En(:,:,:,fr,m), ' propagate: after halo update' )
2190
- if (is_root_pe()) print * , ' propagate: after halo update' , CS% En_sum
2190
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' propagate: after halo update' , CS% En_sum
2191
2191
enddo ; enddo
2192
2192
endif
2193
2193
! Apply propagation in y-direction (reflection included)
@@ -2206,7 +2206,7 @@ subroutine propagate(En, cn, freq, dt, G, GV, US, CS, NAngle, residual_loss)
2206
2206
if (CS% debug) then
2207
2207
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq
2208
2208
call sum_En(G, GV, US, CS, CS% En(:,:,:,fr,m), ' propagate: after propagate_y' )
2209
- if (is_root_pe()) print * , ' propagate: after propagate_y' , CS% En_sum
2209
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' propagate: after propagate_y' , CS% En_sum
2210
2210
enddo ; enddo
2211
2211
endif
2212
2212
@@ -2215,7 +2215,7 @@ subroutine propagate(En, cn, freq, dt, G, GV, US, CS, NAngle, residual_loss)
2215
2215
if (CS% debug) then
2216
2216
do m= 1 ,CS% nMode ; do fr= 1 ,CS% Nfreq
2217
2217
call sum_En(G, GV, US, CS, CS% En(:,:,:,fr,m), ' propagate: bottom of routine' )
2218
- if (is_root_pe()) print * , ' propagate: bottom of routine' , CS% En_sum
2218
+ if (is_root_pe()) write (stdout, ' (A,E18.10) ' ) , ' propagate: bottom of routine' , CS% En_sum
2219
2219
enddo ; enddo
2220
2220
endif
2221
2221
@@ -3573,8 +3573,10 @@ subroutine internal_tides_init(Time, G, GV, US, param_file, diag, CS)
3573
3573
do_not_log= .not. CS% apply_Froude_drag)
3574
3574
call get_param(param_file, mdl, " EN_UNDERFLOW" , CS% En_underflow, &
3575
3575
" A small energy density below which Energy is set to zero." , &
3576
- units= " J m-2" , default= 1.0e-100 , scale= J_m2_to_HZ2_T2, &
3577
- do_not_log= .not. CS% apply_Froude_drag)
3576
+ units= " J m-2" , default= 1.0e-100 , scale= J_m2_to_HZ2_T2)
3577
+ call get_param(param_file, mdl, " EN_RESTART_POWER" , CS% En_restart_power, &
3578
+ " A power factor to save larger values x 2**(power) in restart files." , &
3579
+ units= " nondim" , default= 0 )
3578
3580
call get_param(param_file, mdl, " CDRAG" , CS% cdrag, &
3579
3581
" CDRAG is the drag coefficient relating the magnitude of " // &
3580
3582
" the velocity field to the bottom stress." , &
0 commit comments