[an error occurred while processing this directive] *Met Dept Home *NCAS-Climate *NCAS-CMS *FAMOUS Wiki *QUEST ESM
[an error occurred while processing this directive]

MOSES 2.2 Fixes

The example job bit compares over pe configs & restart frequencies. It includes the following new modsets:

  • are2f406.1 - Updated version of are2f406.
    [1] Fixes sub-surface runoff diagnostic (8,205).

  • initveg_fix.mod - New mod.
    [2] Fixes vegetation restart inconsistency.

  • newdecks.1 - Updated version of newdecks.
    [3] Fixes U & V wind comp diags (0,2) and (0,3).
    [4] Fixes 10m U & V wind comp diags (3,225), (3,226).

These mods can be found on puma under /home/annnette/moses/mods/standard

1. Sub-surface Runoff

The sub-surface runoff is calculated in SOIL_HYD over "soil points"; Non-soil points are set to zero. Soil points are flagged as such in HYDR_CTL IF (D1(JVOL_SMC_SAT+I-1).NE. 0.0). MOSES 2.2 adds an extra clause in HYDROL so that SOIL_HYD is only called IF(SOIL_PTS .NE. 0). This means that if there are no soil pts on the processor, SUB_SURF_ROFF is never set and will contain rubbish.

For coupled models such as FAMOUS, 8205 is also a coupling field and so any strange values could filter through to other fields.

To fix this problem, we have followed the approach used in vn5.5 of the UM, which is to set SUB_SURF_ROFF to 0. in HYDROL if there are no soil pts and the STASH flag is on.

!-----------------------------------------------------------------------
! Update the layer soil moisture contents and calculate the
! gravitational drainage.
!-----------------------------------------------------------------------
      IF (SOIL_PTS.NE.0) THEN 
      CALL SOIL_HYD (NPNTS,NSHYD,SOIL_PTS,SOIL_INDEX,B,DZSOIL,
     &               EXT,DSMC_DT,SATCON,SATHH,TIMESTEP,V_SAT,
     &               SUB_SURF_ROFF,SMCL,STHU,SURF_ROFF,W_FLUX,
     &               STF_SUB_SURF_ROFF,LTIMER)

      ELSE 

!-----------------------------------------------------------------------
! If required by STASH flag and there are no soil points, 
! set sub-surface runoff to zero.
!-----------------------------------------------------------------------
        IF(STF_SUB_SURF_ROFF) THEN   
          DO I=1,NPNTS  
            SUB_SURF_ROFF(I)=0.0
          ENDDO 
        ENDIF   

      ENDIF    

2. Vegetation Restart Fix

The problem was found to be in the routine INITIAL which is called every time a run is started or restarted. It calls INIT_VEG which updates STASH diagnostics 230 and 234. These diagnostics are also updated by VEG_CTL in the main atmosphere loop. In this case however VEG_CTL is not called leading to inconsistencies.

As a solution, I followed the 6.1 code, which only calls INIT_VEG at the first timestep. However, this would still lead to inconsistencies if a new NRUN were started.

Correction in mod initveg_fix.mod:

*ID INITVEG_FIX
*/
*/ A mod for MOSES2.2.
*/ Only call INIT_VEG at timestep 0 (as in 6.1 code).
*/ Avoids bit comparison issues with restart frequency.
*/
*/ Annette Osprey 26-Feb-07
*/
*DECLARE INITIAL1
*D ABX1F404.224
      IF (L_VEG_FRACS .AND. STEPim(a_im) == 0 ) THEN

3. Boundary Layer U/V Wind Fix

I tracked the error down to SF_EXPL, which is a new deck introduced by the modset newdecks. There is a point in the code where the North south halos need to be swapped before interpolation from the pressure to UV grid.

Corrected by replacing mod newdecks with newdecks.1. There is only 1 line which differs. Line 4532 of the original mod is:

      CALL SWAPBOUNDS(RHOKM_1(P1),ROW_LENGTH,N_U_ROWS,1,0,1)

This is replaced with the lines:

! Call fixed to swap north/south halos as well (Annette Osprey - 13/04/07)
      CALL SWAPBOUNDS(RHOKM_1(U1),ROW_LENGTH,N_U_ROWS,1,1,1)

4. U/V 10m Winds

Follwowing diagnostics did not b/c across pes:

  • 3225: 10m wind u-comp
  • 3226: 10m wind v-comp
  • 3249: 10m wind speed

Problem in SF_EXPL routine with CDR10M_UV field. Before interpolation from P to UV grid, CDR10M should have halos swapped. Added call to SWAPBOUNDS before P_TO_UV (new code in red):

      IF (SU10. OR. SV10)THEN
*IF DEF,MPP
        ! Fix diags by swapping halos
        CALL SWAPBOUNDS(CDR10M(U1),ROW_LENGTH,N_U_ROWS,1,1,1)
*ENDIF

*IF -DEF,SCMA
        CALL P_TO_UV (CDR10M(P1),CDR10M_UV(U1+ROW_LENGTH),P_POINTS,
     &     U_POINTS,ROW_LENGTH,N_P_ROWS)
!

[an error occurred while processing this directive]