3 rho_sa_sa, rho_sa_h, rho_h_h)
31 real (r8),
intent(in) :: sa, ct, p
32 real (r8),
intent(out),
optional :: rho_sa_sa, rho_sa_h, rho_h_h
34 integer :: iflag1, iflag2
35 real (r8) :: rec_v, rec_v2, rec_v3, v_h, v_h_h, v_sa, v_sa_h, v_sa_sa
38 if (
present(rho_sa_sa) .or.
present(rho_sa_h)) iflag1 = ibset(iflag1,1)
39 if (
present(rho_sa_h) .or.
present(rho_h_h)) iflag1 = ibset(iflag1,2)
44 if (
present(rho_sa_sa)) iflag2 = ibset(iflag2,1)
45 if (
present(rho_sa_h)) iflag2 = ibset(iflag2,2)
46 if (
present(rho_h_h)) iflag2 = ibset(iflag2,3)
55 if (
present(rho_sa_sa)) rho_sa_sa = -v_sa_sa*rec_v2 + 2.0_r8*v_sa*v_sa*rec_v3
57 if (
present(rho_sa_h)) rho_sa_h = -v_sa_h*rec_v2 + 2.0_r8*v_sa*v_h*rec_v3
59 if (
present(rho_h_h)) rho_h_h = -v_h_h*rec_v2 + 2.0_r8*v_h*v_h*rec_v3
elemental subroutine gsw_rho_second_derivatives_wrt_enthalpy(sa, ct, p, rho_sa_sa, rho_sa_h, rho_h_h)