Skip to content

Commit a1c8b95

Browse files
Merge pull request #2133 from OceanParcels/fix_polyteos_kernel
Fix PolyTEOS10-bsq kernel
2 parents 88cd174 + 192c442 commit a1c8b95

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

parcels/application_kernels/TEOSseawaterdensity.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77

88
def PolyTEOS10_bsq(particle, fieldset, time): # pragma: no cover
9-
"""Calculates density based on the polyTEOS10-bsq algorithm from Appendix A.2 of
9+
"""Calculates density based on the polyTEOS10-bsq algorithm from Appendix A.1 and A.2 of
1010
https://www.sciencedirect.com/science/article/pii/S1463500315000566
1111
requires fieldset.abs_salinity and fieldset.cons_temperature Fields in the fieldset
1212
and a particle.density Variable in the ParticleSet
@@ -27,10 +27,20 @@ def PolyTEOS10_bsq(particle, fieldset, time): # pragma: no cover
2727
SA = fieldset.abs_salinity[time, particle.depth, particle.lat, particle.lon]
2828
CT = fieldset.cons_temperature[time, particle.depth, particle.lat, particle.lon]
2929

30-
SAu = 40 * 35.16504 / 35
31-
CTu = 40
30+
SAu = 40.0 * 35.16504 / 35.0
31+
CTu = 40.0
3232
Zu = 1e4
33-
deltaS = 32
33+
deltaS = 32.0
34+
35+
zz = -Z / Zu
36+
R00 = 4.6494977072e01
37+
R01 = -5.2099962525e00
38+
R02 = 2.2601900708e-01
39+
R03 = 6.4326772569e-02
40+
R04 = 1.5616995503e-02
41+
R05 = -1.7243708991e-03
42+
r0 = (((((R05 * zz + R04) * zz + R03) * zz + R02) * zz + R01) * zz + R00) * zz
43+
3444
R000 = 8.0189615746e02
3545
R100 = 8.6672408165e02
3646
R200 = -1.7864682637e03
@@ -90,4 +100,6 @@ def PolyTEOS10_bsq(particle, fieldset, time): # pragma: no cover
90100
rz2 = (R022 * tt + R112 * ss + R012) * tt + (R202 * ss + R102) * ss + R002
91101
rz1 = (((R041 * tt + R131 * ss + R031) * tt + (R221 * ss + R121) * ss + R021) * tt + ((R311 * ss + R211) * ss + R111) * ss + R011) * tt + (((R401 * ss + R301) * ss + R201) * ss + R101) * ss + R001 # fmt: skip
92102
rz0 = (((((R060 * tt + R150 * ss + R050) * tt + (R240 * ss + R140) * ss + R040) * tt + ((R330 * ss + R230) * ss + R130) * ss + R030) * tt + (((R420 * ss + R320) * ss + R220) * ss + R120) * ss + R020) * tt + ((((R510 * ss + R410) * ss + R310) * ss + R210) * ss + R110) * ss + R010) * tt + (((((R600 * ss + R500) * ss + R400) * ss + R300) * ss + R200) * ss + R100) * ss + R000 # fmt: skip
93-
particle.density = ((rz3 * zz + rz2) * zz + rz1) * zz + rz0
103+
r = ((rz3 * zz + rz2) * zz + rz1) * zz + rz0
104+
105+
particle.density = r0 + r

tests/test_kernel_language.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ def generate_fieldset(xdim=2, ydim=2, zdim=2, tdim=1):
458458
pset = ParticleSet(fieldset, pclass=DensParticle, lon=5, lat=5, depth=1000)
459459

460460
pset.execute(PolyTEOS10_bsq, runtime=1)
461-
assert np.allclose(pset[0].density, 1022.85377)
461+
assert np.allclose(pset[0].density, 1027.45140)
462462

463463

464464
@pytest.mark.parametrize("mode", ["scipy", "jit"])

0 commit comments

Comments
 (0)