@@ -635,16 +635,20 @@ subroutine convert_IOB_to_fluxes(IOB, fluxes, index_bounds, Time, valid_time, G,
635
635
endif
636
636
637
637
! Set the wind stresses and ustar.
638
- if (associated (fluxes% ustar) .and. associated (fluxes% ustar_gustless) .and. associated (fluxes% tau_mag)) then
638
+ if (associated (fluxes% ustar) .and. associated (fluxes% ustar_gustless) .and. associated (fluxes% tau_mag) &
639
+ .and. associated (fluxes% tau_mag_gustless) ) then
639
640
call extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, ustar= fluxes% ustar, &
640
- mag_tau= fluxes% tau_mag, gustless_ustar= fluxes% ustar_gustless)
641
+ mag_tau= fluxes% tau_mag, gustless_ustar= fluxes% ustar_gustless, &
642
+ gustless_mag_tau= fluxes% tau_mag_gustless)
641
643
else
642
644
if (associated (fluxes% ustar)) &
643
645
call extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, ustar= fluxes% ustar)
644
646
if (associated (fluxes% ustar_gustless)) &
645
647
call extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, gustless_ustar= fluxes% ustar_gustless)
646
648
if (associated (fluxes% tau_mag)) &
647
649
call extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, mag_tau= fluxes% tau_mag)
650
+ if (associated (fluxes% tau_mag_gustless)) &
651
+ call extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, gustless_mag_tau= fluxes% tau_mag_gustless)
648
652
endif
649
653
650
654
if (coupler_type_initialized(fluxes% tr_fluxes) .and. &
@@ -908,7 +912,7 @@ end subroutine convert_IOB_to_forces
908
912
! ! Ice_ocean_boundary_type into optional argument arrays, including changes of units, sign
909
913
! ! conventions, and putting the fields into arrays with MOM-standard sized halos.
910
914
subroutine extract_IOB_stresses (IOB , index_bounds , Time , G , US , CS , taux , tauy , ustar , &
911
- gustless_ustar , mag_tau , tau_halo )
915
+ gustless_ustar , mag_tau , gustless_mag_tau , tau_halo )
912
916
type (ice_ocean_boundary_type), &
913
917
target , intent (in ) :: IOB ! < An ice-ocean boundary type with fluxes to drive
914
918
! ! the ocean in a coupled model
@@ -931,6 +935,9 @@ subroutine extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, taux, tauy,
931
935
real , dimension (SZI_(G),SZJ_(G)), &
932
936
optional , intent (inout ) :: mag_tau ! < The magintude of the wind stress at tracer points
933
937
! ! including subgridscale variability and gustiness [R Z L T-2 ~> Pa]
938
+ real , dimension (SZI_(G),SZJ_(G)), &
939
+ optional , intent (out ) :: gustless_mag_tau ! < The magintude of the wind stress at tracer points
940
+ ! ! without any contributions from gustiness [R Z L T-2 ~> Pa]
934
941
integer , optional , intent (in ) :: tau_halo ! < The halo size of wind stresses to set, 0 by default.
935
942
936
943
! Local variables
@@ -947,7 +954,7 @@ subroutine extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, taux, tauy,
947
954
real :: tau_mag ! magnitude of the wind stress [R Z L T-2 ~> Pa]
948
955
real :: stress_conversion ! A unit conversion factor from Pa times any stress multiplier [R Z L T-2 Pa-1 ~> 1]
949
956
950
- logical :: do_ustar, do_gustless, do_tau_mag
957
+ logical :: do_ustar, do_gustless, do_tau_mag, do_gustless_tau_mag
951
958
integer :: wind_stagger ! AGRID, BGRID_NE, or CGRID_NE (integers from MOM_domains)
952
959
integer :: i, j, is, ie, js, je, ish, ieh, jsh, jeh, Isqh, Ieqh, Jsqh, Jeqh, i0, j0, halo
953
960
@@ -960,7 +967,8 @@ subroutine extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, taux, tauy,
960
967
IRho0 = US% L_to_Z / CS% Rho0
961
968
stress_conversion = US% Pa_to_RLZ_T2 * CS% wind_stress_multiplier
962
969
963
- do_ustar = present (ustar) ; do_gustless = present (gustless_ustar) ; do_tau_mag = present (mag_tau)
970
+ do_ustar = present (ustar) ; do_gustless = present (gustless_ustar)
971
+ do_tau_mag = present (mag_tau) ; do_gustless_tau_mag = present (gustless_mag_tau)
964
972
965
973
wind_stagger = CS% wind_stagger
966
974
if ((IOB% wind_stagger == AGRID) .or. (IOB% wind_stagger == BGRID_NE) .or. &
@@ -973,7 +981,8 @@ subroutine extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, taux, tauy,
973
981
974
982
! Set surface momentum stress related fields as a function of staggering.
975
983
if (present (taux) .or. present (tauy) .or. &
976
- ((do_ustar .or. do_tau_mag .or. do_gustless) .and. .not. associated (IOB% stress_mag)) ) then
984
+ ((do_ustar .or. do_tau_mag .or. do_gustless .or. do_gustless_tau_mag) &
985
+ .and. .not. associated (IOB% stress_mag)) ) then
977
986
978
987
if (wind_stagger == BGRID_NE) then
979
988
taux_in_B(:,:) = 0.0 ; tauy_in_B(:,:) = 0.0
@@ -1053,7 +1062,7 @@ subroutine extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, taux, tauy,
1053
1062
endif ! endif for extracting wind stress fields with various staggerings
1054
1063
endif
1055
1064
1056
- if (do_ustar .or. do_tau_mag .or. do_gustless) then
1065
+ if (do_ustar .or. do_tau_mag .or. do_gustless .or. do_gustless_tau_mag ) then
1057
1066
! Set surface friction velocity directly or as a function of staggering.
1058
1067
! ustar is required for the bulk mixed layer formulation and other turbulent mixing
1059
1068
! parametizations. The background gustiness (for example with a relatively small value
@@ -1071,6 +1080,8 @@ subroutine extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, taux, tauy,
1071
1080
endif
1072
1081
if (do_tau_mag) &
1073
1082
mag_tau(i,j) = gustiness + US% Pa_to_RLZ_T2* IOB% stress_mag(i- i0,j- j0)
1083
+ if (do_gustless_tau_mag) &
1084
+ gustless_mag_tau(i,j) = US% Pa_to_RLZ_T2* IOB% stress_mag(i- i0,j- j0)
1074
1085
if (do_ustar) &
1075
1086
ustar(i,j) = sqrt (gustiness* IRho0 + IRho0* US% Pa_to_RLZ_T2* IOB% stress_mag(i- i0,j- j0))
1076
1087
enddo ; enddo ; endif
@@ -1097,6 +1108,7 @@ subroutine extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, taux, tauy,
1097
1108
endif
1098
1109
if (do_ustar) ustar(i,j) = sqrt (gustiness* IRho0 + IRho0 * tau_mag)
1099
1110
if (do_tau_mag) mag_tau(i,j) = gustiness + tau_mag
1111
+ if (do_gustless_tau_mag) gustless_mag_tau(i,j) = tau_mag
1100
1112
if (CS% answer_date < 20190101 ) then
1101
1113
if (do_gustless) gustless_ustar(i,j) = sqrt (US% L_to_Z* tau_mag / CS% Rho0)
1102
1114
else
@@ -1110,6 +1122,7 @@ subroutine extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, taux, tauy,
1110
1122
if (CS% read_gust_2d .and. (G% mask2dT(i,j) > 0.0 )) gustiness = CS% gust(i,j)
1111
1123
if (do_ustar) ustar(i,j) = sqrt (gustiness* IRho0 + IRho0 * tau_mag)
1112
1124
if (do_tau_mag) mag_tau(i,j) = gustiness + tau_mag
1125
+ if (do_gustless_tau_mag) gustless_mag_tau(i,j) = tau_mag
1113
1126
if (CS% answer_date < 20190101 ) then
1114
1127
if (do_gustless) gustless_ustar(i,j) = sqrt (US% L_to_Z* tau_mag / CS% Rho0)
1115
1128
else
@@ -1132,6 +1145,7 @@ subroutine extract_IOB_stresses(IOB, index_bounds, Time, G, US, CS, taux, tauy,
1132
1145
1133
1146
if (do_ustar) ustar(i,j) = sqrt (gustiness* IRho0 + IRho0 * tau_mag)
1134
1147
if (do_tau_mag) mag_tau(i,j) = gustiness + tau_mag
1148
+ if (do_gustless_tau_mag) gustless_mag_tau(i,j) = tau_mag
1135
1149
if (CS% answer_date < 20190101 ) then
1136
1150
if (do_gustless) gustless_ustar(i,j) = sqrt (US% L_to_Z* tau_mag / CS% Rho0)
1137
1151
else
0 commit comments