Skip to content

Commit 6948cb7

Browse files
committed
+Replaced optional pres_scale args with US args
Replaced the remaining pres_scale arguments the various calculate_density and calc_spec_vol routines in MOM_EOS.F90 with new optional unit_scale_type arguments. When the scale and US arguments are present, density is scaled by the product of the indicated scaling factors. Calls to these routines in 11 files were modified accordingly. All answers are bitwise identical.
1 parent fb820c1 commit 6948cb7

12 files changed

+195
-206
lines changed

src/core/MOM_isopycnal_slopes.F90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ subroutine calc_isoneutral_slopes(G, GV, US, h, e, tv, dt_kappa_smooth, &
176176
S_u(I) = 0.25*((S(i,j,k) + S(i+1,j,k)) + (S(i,j,k-1) + S(i+1,j,k-1)))
177177
enddo
178178
call calculate_density_derivs(T_u, S_u, pres_u, drho_dT_u, drho_dS_u, (is-IsdB+1)-1, ie-is+2, &
179-
tv%eqn_of_state, scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
179+
tv%eqn_of_state, US=US)
180180
endif
181181

182182
do I=is-1,ie
@@ -262,7 +262,7 @@ subroutine calc_isoneutral_slopes(G, GV, US, h, e, tv, dt_kappa_smooth, &
262262
S_v(i) = 0.25*((S(i,j,k) + S(i,j+1,k)) + (S(i,j,k-1) + S(i,j+1,k-1)))
263263
enddo
264264
call calculate_density_derivs(T_v, S_v, pres_v, drho_dT_v, drho_dS_v, is, ie-is+1, &
265-
tv%eqn_of_state, scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
265+
tv%eqn_of_state, US=US)
266266
endif
267267
do i=is,ie
268268
if (use_EOS) then

src/equation_of_state/MOM_EOS.F90

Lines changed: 161 additions & 148 deletions
Large diffs are not rendered by default.

src/initialization/MOM_coord_initialization.F90

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,7 @@ subroutine set_coord_from_TS_ref(Rlay, g_prime, GV, US, param_file, eqn_of_state
240240
! The uppermost layer's density is set here. Subsequent layers' !
241241
! densities are determined from this value and the g values. !
242242
! T0 = 28.228 ; S0 = 34.5848 ; Pref = P_Ref
243-
call calculate_density(T_ref, S_ref, P_ref, Rlay(1), eqn_of_state, &
244-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
243+
call calculate_density(T_ref, S_ref, P_ref, Rlay(1), eqn_of_state, US=US)
245244

246245
! These statements set the layer densities. !
247246
do k=2,nz ; Rlay(k) = Rlay(k-1) + g_prime(k)*(GV%Rho0/GV%g_Earth) ; enddo
@@ -292,7 +291,7 @@ subroutine set_coord_from_TS_profile(Rlay, g_prime, GV, US, param_file, eqn_of_s
292291
! These statements set the interface reduced gravities. !
293292
g_prime(1) = g_fs
294293
do k=1,nz ; Pref(k) = P_Ref ; enddo
295-
call calculate_density(T0, S0, Pref, Rlay, 1, nz, eqn_of_state, scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
294+
call calculate_density(T0, S0, Pref, Rlay, 1, nz, eqn_of_state, US=US)
296295
do k=2,nz; g_prime(k) = (GV%g_Earth/(GV%Rho0)) * (Rlay(k) - Rlay(k-1)) ; enddo
297296

298297
call callTree_leave(trim(mdl)//'()')
@@ -372,8 +371,7 @@ subroutine set_coord_from_TS_range(Rlay, g_prime, GV, US, param_file, eqn_of_sta
372371

373372
g_prime(1) = g_fs
374373
do k=1,nz ; Pref(k) = P_Ref ; enddo
375-
call calculate_density(T0, S0, Pref, Rlay, k_light, nz-k_light+1, eqn_of_state, &
376-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
374+
call calculate_density(T0, S0, Pref, Rlay, k_light, nz-k_light+1, eqn_of_state, US=US)
377375
! Extrapolate target densities for the variable density mixed and buffer layers.
378376
do k=k_light-1,1,-1
379377
Rlay(k) = 2.0*Rlay(k+1) - Rlay(k+2)

src/initialization/MOM_state_initialization.F90

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1601,10 +1601,8 @@ subroutine initialize_temp_salt_fit(T, S, G, GV, US, param_file, eqn_of_state, P
16011601
T0(k) = T_Ref
16021602
enddo
16031603

1604-
call calculate_density(T0(1), S0(1), pres(1), rho_guess(1), eqn_of_state, &
1605-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
1606-
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, 1, 1, eqn_of_state, &
1607-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
1604+
call calculate_density(T0(1), S0(1), pres(1), rho_guess(1), eqn_of_state, US=US)
1605+
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, 1, 1, eqn_of_state, US=US)
16081606

16091607
if (fit_salin) then
16101608
! A first guess of the layers' temperatures.
@@ -1613,10 +1611,8 @@ subroutine initialize_temp_salt_fit(T, S, G, GV, US, param_file, eqn_of_state, P
16131611
enddo
16141612
! Refine the guesses for each layer.
16151613
do itt=1,6
1616-
call calculate_density(T0, S0, pres, rho_guess, 1, nz, eqn_of_state, &
1617-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
1618-
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, 1, nz, eqn_of_state, &
1619-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
1614+
call calculate_density(T0, S0, pres, rho_guess, 1, nz, eqn_of_state, US=US)
1615+
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, 1, nz, eqn_of_state, US=US)
16201616
do k=1,nz
16211617
S0(k) = max(0.0, S0(k) + (GV%Rlay(k) - rho_guess(k)) / drho_dS(k))
16221618
enddo
@@ -1627,10 +1623,8 @@ subroutine initialize_temp_salt_fit(T, S, G, GV, US, param_file, eqn_of_state, P
16271623
T0(k) = T0(1) + (GV%Rlay(k) - rho_guess(1)) / drho_dT(1)
16281624
enddo
16291625
do itt=1,6
1630-
call calculate_density(T0, S0, pres, rho_guess, 1, nz, eqn_of_state, &
1631-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
1632-
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, 1, nz, eqn_of_state, &
1633-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
1626+
call calculate_density(T0, S0, pres, rho_guess, 1, nz, eqn_of_state, US=US)
1627+
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, 1, nz, eqn_of_state, US=US)
16341628
do k=1,nz
16351629
T0(k) = T0(k) + (GV%Rlay(k) - rho_guess(k)) / drho_dT(k)
16361630
enddo

src/parameterizations/vertical/MOM_diabatic_aux.F90

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -458,8 +458,7 @@ subroutine insert_brine(h, tv, G, GV, US, fluxes, nkmb, CS, dt, id_brine_lay)
458458
if ((G%mask2dT(i,j) > 0.0) .and. dzbr(i) < brine_dz .and. salt(i) > 0.) then
459459
s_new = S(i,k) + salt(i) / (GV%H_to_RZ * h_2d(i,k))
460460
t0 = T(i,k)
461-
call calculate_density(t0, s_new, tv%P_Ref, R_new, tv%eqn_of_state, &
462-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
461+
call calculate_density(t0, s_new, tv%P_Ref, R_new, tv%eqn_of_state, US=US)
463462
if (R_new < 0.5*(Rcv(i,k)+Rcv(i,k+1)) .and. s_new<s_max) then
464463
dzbr(i) = dzbr(i)+h_2d(i,k)
465464
inject_layer(i,j) = min(inject_layer(i,j),real(k))

src/parameterizations/vertical/MOM_diabatic_driver.F90

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ module MOM_diabatic_driver
3535
use MOM_entrain_diffusive, only : entrainment_diffusive, entrain_diffusive_init
3636
use MOM_entrain_diffusive, only : entrain_diffusive_end, entrain_diffusive_CS
3737
use MOM_EOS, only : calculate_density, calculate_TFreeze
38-
use MOM_EOS, only : calculate_specific_vol_derivs
3938
use MOM_error_handler, only : MOM_error, FATAL, WARNING, callTree_showQuery,MOM_mesg
4039
use MOM_error_handler, only : callTree_enter, callTree_leave, callTree_waypoint
4140
use MOM_file_parser, only : get_param, log_version, param_file_type, read_param

src/parameterizations/vertical/MOM_geothermal.F90

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ subroutine geothermal(h, tv, dt, ea, eb, G, GV, US, CS, halo)
199199

200200
if (nkmb > 0) then
201201
call calculate_density(tv%T(:,j,nkmb), tv%S(:,j,nkmb), p_Ref(:), Rcv_BL(:), isj, iej-isj+1, &
202-
tv%eqn_of_state, scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
202+
tv%eqn_of_state, US=US)
203203
else
204204
Rcv_BL(:) = -1.0
205205
endif
@@ -245,11 +245,11 @@ subroutine geothermal(h, tv, dt, ea, eb, G, GV, US, CS, halo)
245245
Rcv = 0.0 ; dRcv_dT = 0.0 ! Is this OK?
246246
else
247247
call calculate_density(tv%T(i,j,k), tv%S(i,j,k), tv%P_Ref, &
248-
Rcv, tv%eqn_of_state, scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
248+
Rcv, tv%eqn_of_state, US=US)
249249
T2(1) = tv%T(i,j,k) ; S2(1) = tv%S(i,j,k)
250250
T2(2) = tv%T(i,j,k_tgt) ; S2(2) = tv%S(i,j,k_tgt)
251251
call calculate_density_derivs(T2(:), S2(:), p_Ref(:), dRcv_dT_, dRcv_dS_, 1, 2, &
252-
tv%eqn_of_state, scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
252+
tv%eqn_of_state, US=US)
253253
dRcv_dT = 0.5*(dRcv_dT_(1) + dRcv_dT_(2))
254254
endif
255255

src/parameterizations/vertical/MOM_kappa_shear.F90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -911,7 +911,7 @@ subroutine kappa_shear_column(kappa, tke, dt, nzc, f2, surface_pres, &
911911
Sal_int(K) = 0.5*(Sal(k-1) + Sal(k))
912912
enddo
913913
call calculate_density_derivs(T_int, Sal_int, pressure, dbuoy_dT, dbuoy_dS, 2, nzc-1, &
914-
tv%eqn_of_state, scale=-g_R0*US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
914+
tv%eqn_of_state, US=US, scale=-g_R0)
915915
else
916916
do K=1,nzc+1 ; dbuoy_dT(K) = -g_R0 ; dbuoy_dS(K) = 0.0 ; enddo
917917
endif

src/parameterizations/vertical/MOM_set_viscosity.F90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1397,7 +1397,7 @@ subroutine set_viscous_ML(u, v, h, tv, forces, visc, dt, G, GV, US, CS, symmetri
13971397

13981398
if (use_EOS) then
13991399
call calculate_density_derivs(T_EOS, S_EOS, forces%p_surf(:,j), dR_dT, dR_dS, &
1400-
Isq-G%IsdB+1, Ieq-Isq+1, tv%eqn_of_state, scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_PA)
1400+
Isq-G%IsdB+1, Ieq-Isq+1, tv%eqn_of_state, US=US)
14011401
endif
14021402

14031403
do I=Isq,Ieq ; if (do_i(I)) then
@@ -1634,7 +1634,7 @@ subroutine set_viscous_ML(u, v, h, tv, forces, visc, dt, G, GV, US, CS, symmetri
16341634

16351635
if (use_EOS) then
16361636
call calculate_density_derivs(T_EOS, S_EOS, forces%p_surf(:,j), dR_dT, dR_dS, &
1637-
is-G%IsdB+1, ie-is+1, tv%eqn_of_state, scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_PA)
1637+
is-G%IsdB+1, ie-is+1, tv%eqn_of_state, US=US)
16381638
endif
16391639

16401640
do i=is,ie ; if (do_i(i)) then

src/tracer/MOM_tracer_Z_init.F90

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -801,10 +801,9 @@ subroutine determine_temperature(temp, salt, R_tgt, p_ref, niter, land_fill, h,
801801
adjust_salt = .true.
802802
iter_loop: do itt = 1,niter
803803
do k=1, nz
804-
call calculate_density(T(:,k), S(:,k), press, rho(:,k), 1, nx, eos, &
805-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
804+
call calculate_density(T(:,k), S(:,k), press, rho(:,k), 1, nx, eos, US=US)
806805
call calculate_density_derivs(T(:,k), S(:,k), press, drho_dT(:,k), drho_dS(:,k), 1, nx, &
807-
eos, scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
806+
eos, US=US)
808807
enddo
809808
do k=k_start,nz ; do i=1,nx
810809

@@ -832,10 +831,9 @@ subroutine determine_temperature(temp, salt, R_tgt, p_ref, niter, land_fill, h,
832831

833832
if (adjust_salt .and. old_fit) then ; do itt = 1,niter
834833
do k=1, nz
835-
call calculate_density(T(:,k), S(:,k), press, rho(:,k), 1, nx, eos, &
836-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
834+
call calculate_density(T(:,k), S(:,k), press, rho(:,k), 1, nx, eos, US=US)
837835
call calculate_density_derivs(T(:,k), S(:,k), press, drho_dT(:,k), drho_dS(:,k), 1, nx, &
838-
eos, scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
836+
eos, US=US)
839837
enddo
840838
do k=k_start,nz ; do i=1,nx
841839
! if (abs(rho(i,k)-R_tgt(k))>tol_rho .and. hin(i,k)>h_massless .and. abs(T(i,k)-land_fill) < epsln ) then

src/user/DOME_initialization.F90

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -359,17 +359,13 @@ subroutine DOME_set_OBC_data(OBC, tv, G, GV, US, param_file, tr_Reg)
359359
! target density and a salinity of 35 psu. This code is taken from
360360
! USER_initialize_temp_sal.
361361
pres(:) = tv%P_Ref ; S0(:) = 35.0 ; T0(1) = 25.0
362-
call calculate_density(T0(1), S0(1), pres(1), rho_guess(1), tv%eqn_of_state, &
363-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
364-
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, 1, 1, tv%eqn_of_state, &
365-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
362+
call calculate_density(T0(1), S0(1), pres(1), rho_guess(1), tv%eqn_of_state, US=US)
363+
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, 1, 1, tv%eqn_of_state, US=US)
366364

367365
do k=1,nz ; T0(k) = T0(1) + (GV%Rlay(k)-rho_guess(1)) / drho_dT(1) ; enddo
368366
do itt=1,6
369-
call calculate_density(T0, S0, pres, rho_guess, 1, nz, tv%eqn_of_state, &
370-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
371-
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, 1, nz, tv%eqn_of_state, &
372-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
367+
call calculate_density(T0, S0, pres, rho_guess, 1, nz, tv%eqn_of_state, US=US)
368+
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, 1, nz, tv%eqn_of_state, US=US)
373369
do k=1,nz ; T0(k) = T0(k) + (GV%Rlay(k)-rho_guess(k)) / drho_dT(k) ; enddo
374370
enddo
375371

src/user/benchmark_initialization.F90

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,8 @@ subroutine benchmark_initialize_thickness(h, G, GV, US, param_file, eqn_of_state
152152
pres(k) = P_Ref ; S0(k) = 35.0
153153
enddo
154154
T0(k1) = 29.0
155-
call calculate_density(T0(k1), S0(k1), pres(k1), rho_guess(k1), eqn_of_state, &
156-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
157-
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, k1, 1, eqn_of_state, &
158-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
155+
call calculate_density(T0(k1), S0(k1), pres(k1), rho_guess(k1), eqn_of_state, US=US)
156+
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, k1, 1, eqn_of_state, US=US)
159157

160158
! A first guess of the layers' temperatures.
161159
do k=1,nz
@@ -164,10 +162,8 @@ subroutine benchmark_initialize_thickness(h, G, GV, US, param_file, eqn_of_state
164162

165163
! Refine the guesses for each layer.
166164
do itt=1,6
167-
call calculate_density(T0, S0, pres, rho_guess, 1, nz, eqn_of_state, &
168-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
169-
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, 1, nz, eqn_of_state, &
170-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
165+
call calculate_density(T0, S0, pres, rho_guess, 1, nz, eqn_of_state, US=US)
166+
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, 1, nz, eqn_of_state, US=US)
171167
do k=1,nz
172168
T0(k) = T0(k) + (GV%Rlay(k) - rho_guess(k)) / drho_dT(k)
173169
enddo
@@ -261,10 +257,8 @@ subroutine benchmark_init_temperature_salinity(T, S, G, GV, US, param_file, &
261257
enddo
262258

263259
T0(k1) = 29.0
264-
call calculate_density(T0(k1), S0(k1), pres(k1), rho_guess(k1), eqn_of_state, &
265-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
266-
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, k1, 1, eqn_of_state, &
267-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
260+
call calculate_density(T0(k1), S0(k1), pres(k1), rho_guess(k1), eqn_of_state, US=US)
261+
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, k1, 1, eqn_of_state, US=US)
268262

269263
! A first guess of the layers' temperatures. !
270264
do k=1,nz
@@ -273,10 +267,8 @@ subroutine benchmark_init_temperature_salinity(T, S, G, GV, US, param_file, &
273267

274268
! Refine the guesses for each layer. !
275269
do itt = 1,6
276-
call calculate_density(T0,S0,pres,rho_guess,1,nz,eqn_of_state, &
277-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
278-
call calculate_density_derivs(T0,S0,pres,drho_dT,drho_dS,1,nz,eqn_of_state, &
279-
scale=US%kg_m3_to_R, pres_scale=US%RL2_T2_to_Pa)
270+
call calculate_density(T0, S0, pres, rho_guess, 1, nz, eqn_of_state, US=US)
271+
call calculate_density_derivs(T0, S0, pres, drho_dT, drho_dS, 1, nz, eqn_of_state, US=US)
280272
do k=1,nz
281273
T0(k) = T0(k) + (GV%Rlay(k) - rho_guess(k)) / drho_dT(k)
282274
enddo

0 commit comments

Comments
 (0)