Changeset 9361


Ignore:
Timestamp:
2018-02-26T16:33:11+01:00 (2 years ago)
Author:
mathiot
Message:

Correction of issue related to runoff in depth and isf (apparition during METO+MERCATOR merge). Now, filter+correction applied first on emp, then on rnf (if rnf), then on isf (if isf)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90

    r9226 r9361  
    2929   USE sbc_oce        ! Surface boundary condition: ocean fields 
    3030   USE sbcrnf         ! river runoffs 
     31   USE sbcisf         ! ice shelf 
    3132   USE phycst         ! physical constants 
    3233   USE dynadv         ! dynamics: vector invariant versus flux form 
     
    221222            ! => time filter + conservation correction (only at the first level) 
    222223            zcoef = atfp * rdt * r1_rau0 
    223             IF ( .NOT. ln_isf ) THEN   ! if no ice shelf melting 
    224                e3t_b(:,:,1) = e3t_b(:,:,1) - zcoef * ( emp_b(:,:) - emp(:,:) & 
    225                               &                      - rnf_b(:,:) + rnf(:,:) ) * tmask(:,:,1) 
    226             ELSE                     ! if ice shelf melting 
    227                DO jj = 1, jpj 
    228                   DO ji = 1, jpi 
    229                      ikt = mikt(ji,jj) 
    230                      e3t_b(ji,jj,ikt) = e3t_b(ji,jj,ikt) - zcoef * (  emp_b   (ji,jj) - emp   (ji,jj)  & 
    231                         &                                           - rnf_b   (ji,jj) + rnf   (ji,jj)  & 
    232                         &                                           + fwfisf_b(ji,jj) - fwfisf(ji,jj)  ) * tmask(ji,jj,ikt) 
     224 
     225            e3t_b(:,:,1) = e3t_b(:,:,1) - zcoef * ( emp_b(:,:) - emp(:,:) ) * tmask(:,:,1) 
     226 
     227            IF ( ln_rnf ) THEN 
     228               IF( ln_rnf_depth ) THEN 
     229                  DO jk = 1, jpkm1 ! Deal with Rivers separetely, as can be through depth too 
     230                     DO jj = 1, jpj 
     231                        DO ji = 1, jpi 
     232                           IF( jk <=  nk_rnf(ji,jj)  ) THEN 
     233                               e3t_b(ji,jj,jk) =   e3t_b(ji,jj,jk) - zcoef *  ( - rnf_b(ji,jj) + rnf(ji,jj) ) & 
     234                                      &          * ( e3t_n(ji,jj,jk) / h_rnf(ji,jj) ) * tmask(ji,jj,jk) 
     235                           ENDIF 
     236                        ENDDO 
     237                     ENDDO 
     238                  ENDDO 
     239               ELSE 
     240                  e3t_b(:,:,1) = e3t_b(:,:,1) - zcoef *  ( -rnf_b(:,:) + rnf(:,:))*tmask(:,:,1) 
     241               ENDIF 
     242            END IF 
     243 
     244            IF ( ln_isf ) THEN   ! if ice shelf melting 
     245               DO jk = 1, jpkm1 ! Deal with isf separetely, as can be through depth too 
     246                  DO jj = 1, jpj 
     247                     DO ji = 1, jpi 
     248                        IF( misfkt(ji,jj) <= jk .AND. jk <= misfkb(ji,jj) ) THEN 
     249                           e3t_b(ji,jj,jk) =   e3t_b(ji,jj,jk) - zcoef *  ( fwfisf_b(ji,jj) - fwfisf(ji,jj) ) & 
     250                                &          * ( e3t_n(ji,jj,jk) * r1_hisf_tbl(ji,jj) ) * tmask(ji,jj,jk) 
     251                        ENDIF 
     252                     END DO 
    233253                  END DO 
    234254               END DO 
    235                ! Add volume filter correction: compatibility with tracer advection scheme 
    236                ! => time filter + conservation correction (only at the first level) 
    237                zcoef = atfp * rdt * r1_rau0 
    238                IF ( .NOT. ln_isf ) THEN   ! if no ice shelf melting 
    239                   e3t_b(:,:,1) = e3t_b(:,:,1) - zcoef * ( emp_b(:,:) - emp(:,:) & 
    240                                  &                      ) * tmask(:,:,1) 
    241                   IF( ln_rnf_depth ) THEN  
    242                      DO jk = 1, jpkm1 ! Deal with Rivers separetely, as can be through depth too, not sure for ice shelf case yet 
    243                         DO jj = 1, jpj 
    244                            DO ji = 1, jpi 
    245                               IF( mikt(ji,jj) <= jk .and. jk <=  nk_rnf(ji,jj)  ) THEN 
    246                                  e3t_b(ji,jj,jk) =   e3t_b(ji,jj,jk) - zcoef *  ( - rnf_b(ji,jj) + rnf(ji,jj) ) & 
    247                                       &          * ( e3t_n(ji,jj,jk) / h_rnf(ji,jj) ) * tmask(ji,jj,jk) 
    248                               ENDIF 
    249                            ENDDO 
    250                         ENDDO 
    251                      ENDDO 
    252                   ELSE 
    253                       e3t_b(:,:,1) = e3t_b(:,:,1) - zcoef *  ( -rnf_b(:,:) + rnf(:,:))*tmask(:,:,1) 
    254                   ENDIF 
    255                ELSE                     ! if ice shelf melting 
    256                   DO jj = 1, jpj 
    257                      DO ji = 1, jpi 
    258                         ikt = mikt(ji,jj) 
    259                         e3t_b(ji,jj,ikt) = e3t_b(ji,jj,ikt) - zcoef * (  emp_b   (ji,jj) - emp   (ji,jj)  & 
    260                            &                                           - rnf_b   (ji,jj) + rnf   (ji,jj)  & 
    261                            &                                           + fwfisf_b(ji,jj) - fwfisf(ji,jj)  ) * tmask(ji,jj,ikt) 
    262                      END DO 
    263                   END DO 
    264                END IF 
    265255            END IF 
    266256            ! 
Note: See TracChangeset for help on using the changeset viewer.