I have upgraded suite from UM vn11.4 (u-cf309) to UM vn12.1 (u-da133). The suite is a regional model with GA7 physics, coupled to the KPP mixed-layer ocean model. The suite runs OK (I have managed to run for 3 months); however the ocean model does not appear to be receiving the precipitation field from the atmosphere (see attached plots for comparison – at vn11.4, the KPP precip minus evap. matches the UM P - E, whereas at vn12.1 it matches just -E).
Could you help me to diagnose where this has gone wrong?
For KPP:
P minus E at surface is output directly.
For the UM:
P is the sum of convective rainfall amount (m01s05i201), convective snowfall amount (m01s04i202), stratiform rainfall amount (m01s04i201), stratiform snowfall amount (m01s04i202).
E is the surface upward water flux (m01s03i223), which is the same as the evaporation over open sea (m01s03i232) and -1/L times the surface latent heat flux (m01s03i234).
As we’ve traced the problem back to KPP not receiving the total precipitation field, we’d like to work out:
a) Is the UM outputting the correct precip fields to the coupler? All the STASH requests are there (in the “UPCOUP” usage profile), but is there a way to see what’s actually output during the model run?
b) If the answer to a) is yes, do the fields match the saved precip, or are they zero for some reason?
c) If the fields are correctly output by the UM, does Oasis read them in correctly?
d) If the Oasis reads them in correctly, why doesn’t KPP get them?
Could you please help us with steps a) (interrogating what fields are actually output to the coupler by the UM), c) (checking what the coupler receives), and d) (checking why KPP reads in 0)?
The atmosphere to ocean coupling variables are set in src/control/coupling/oasis3_puta2o.F90. It looks like the calculation of totalrain has been mangled with the upgrade of UM version.
Comparing the code block in Emma’s 11.4 suite to your 12.1 suite, there are a couple of lines missing which means the variable isn’t set properly:
IF (l_train) THEN
DO j=1,oasis_jmt
DO i=1,oasis_imt
rainls(i,j) = c_lsrain(i,j)
IF (l_param_conv) THEN
rainconv(i,j) = c_cvrain(i,j)
ELSE
rainconv(i,j) = 0.0
END IF
IF (l_ctile .AND. fland_loc(i,j) == 1.0) THEN
totalrain(i,j,1)=0.0
ELSE IF (.NOT. l_ctile .AND. land(i,j)>0.99) THEN
- totalrain(i,j,1)=0.0
- ELSE
totalrain(i,j,1)=rainls(i,j)+rainconv(i,j)
END IF
END DO
END DO
END IF
Hopefully it should just be a case of fixing this in the vn12.1_vn12.1_metum-goml branch.