New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 5820 for branches/NERC/dev_r5589_is_oce_cpl/NEMOGCM/NEMO/OPA_SRC/DOM/iscplrst.F90 – NEMO

Ignore:
Timestamp:
2015-10-21T18:01:58+02:00 (9 years ago)
Author:
mathiot
Message:

ice sheet coupling: remove some print, fix pb in diahsb if ssmask is modified, rm corner extrapolation + some bug fix in conservation option

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5589_is_oce_cpl/NEMOGCM/NEMO/OPA_SRC/DOM/iscplrst.F90

    r5802 r5820  
    9797         CALL iom_rstput( 0, 0, inum0, 'tem_cor', htsc_iscpl(:,:,:,jp_tem) ) 
    9898         CALL iom_rstput( 0, 0, inum0, 'sal_cor', htsc_iscpl(:,:,:,jp_sal) ) 
    99          CALL iom_rstput( 0, 0, inum0, 'e3t_diff', (e3t_0(:,:,:)*tmask(:,:,:) - ze3t_b(:,:,:)*ztmask_b(:,:,:))*tmask(:,:,:) ) 
    10099         CALL iom_close ( inum0 ) 
    101100      END IF 
     
    191190               summsk=(zsmask0(jip1,jj)+zsmask0(jim1,jj)+zsmask0(ji,jjp1)+zsmask0(ji,jjm1)) 
    192191               IF (zdsmask(ji,jj)==1 .AND. summsk .NE. 0) THEN 
    193                   PRINT *, 'add ssh to 1 cell',ji,jj,narea 
    194                   sshn(ji,jj)=(zssh0(jip1,jj)*zsmask0(jip1,jj)     & 
    195                   &           +zssh0(jim1,jj)*zsmask0(jim1,jj)     & 
    196                   &           +zssh0(ji,jjp1)*zsmask0(ji,jjp1)     & 
    197                   &           +zssh0(ji,jjm1)*zsmask0(ji,jjm1))/summsk 
     192                  sshn(ji,jj)=( zssh0(jip1,jj)*zsmask0(jip1,jj)     & 
     193                  &           + zssh0(jim1,jj)*zsmask0(jim1,jj)     & 
     194                  &           + zssh0(ji,jjp1)*zsmask0(ji,jjp1)     & 
     195                  &           + zssh0(ji,jjm1)*zsmask0(ji,jjm1))/summsk 
    198196                  zsmask1(ji,jj)=1 
    199197               END IF 
     
    209207!============================================================================= 
    210208      IF ( lk_vvl ) THEN 
    211 ! compute fse3t_n 
    212          DO jk = 1,jpk 
    213             fse3t_n(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + sshn(:,:) / ( ht_0(:,:) + 1._wp - ssmask(:,:) ) * tmask(:,:,jk) ) 
    214          END DO 
    215  
    216 ! compute fse3u/v ... (call interpolation vvl) 
    217       ! Reconstruction of all vertical scale factors at now and before time steps 
     209      ! Reconstruction of all vertical scale factors at now time steps 
    218210      ! ============================================================================= 
    219211      ! Horizontal scale factor interpolations 
    220212      ! -------------------------------------- 
     213         DO jk = 1,jpk 
     214            DO jj=1,jpj 
     215               DO ji=1,jpi 
     216                  IF (tmask(ji,jj,1) == 0._wp .OR. ptmask_b(ji,jj,1) == 0._wp) THEN 
     217                     fse3t_n(ji,jj,jk) = e3t_0(ji,jj,jk) * ( 1._wp + sshn(ji,jj) / ( ht_0(ji,jj) + 1._wp - ssmask(ji,jj) ) * tmask(ji,jj,jk) ) 
     218                  ENDIF 
     219               END DO 
     220            END DO 
     221         END DO 
     222 
    221223         CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3u_n(:,:,:), 'U' ) 
    222224         CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3v_n(:,:,:), 'V' ) 
     
    295297      zbvn(:,:)   = SUM(ztrp,DIM=3) 
    296298 
    297 ! Already know ???????? 
     299      ! new water column 
    298300      hu1=0.0_wp ; 
    299301      hv1=0.0_wp ; 
     
    302304        hv1(:,:) = hv1(:,:) + fse3v_n(:,:,jk) * vmask(:,:,jk) 
    303305      END DO 
     306       
     307      ! compute correction       
    304308      zucorr = 0._wp 
    305309      zvcorr = 0._wp 
     
    314318         END DO 
    315319      END DO  
     320       
     321      ! update velocity 
    316322      DO jk  = 1,jpk 
    317323         un(:,:,jk)=(un(:,:,jk) - zucorr(:,:))*umask(:,:,jk) 
     
    333339                      jip1=ji+1; jim1=ji-1; 
    334340                      jjp1=jj+1; jjm1=jj-1; 
    335                       summsk=(ztmask0(jip1,jj,jk)+ztmask0(jim1,jj,jk)+ztmask0(ji,jjp1,jk)+ztmask0(ji,jjm1,jk)) 
    336                       !! horizontal extrapolation 
     341                      summsk= (ztmask0(jip1,jj  ,jk)+ztmask0(jim1,jj  ,jk)+ztmask0(ji  ,jjp1,jk)+ztmask0(ji  ,jjm1,jk)) 
     342                      !! horizontal basic extrapolation 
    337343                      IF (zdmask(ji,jj)==1 .AND. summsk .NE. 0) THEN 
    338                          tsn(ji,jj,jk,1)=( zts0(jip1,jj,jk,1)*ztmask0(jip1,jj,jk)    & 
    339                          &                +zts0(jim1,jj,jk,1)*ztmask0(jim1,jj,jk)    & 
    340                          &                +zts0(ji,jjp1,jk,1)*ztmask0(ji,jjp1,jk)    & 
    341                          &                +zts0(ji,jjm1,jk,1)*ztmask0(ji,jjm1,jk))/summsk 
    342                          tsn(ji,jj,jk,2)=( zts0(jip1,jj,jk,2)*ztmask0(jip1,jj,jk)    & 
    343                          &                +zts0(jim1,jj,jk,2)*ztmask0(jim1,jj,jk)    & 
    344                          &                +zts0(ji,jjp1,jk,2)*ztmask0(ji,jjp1,jk)    & 
    345                          &                +zts0(ji,jjm1,jk,2)*ztmask0(ji,jjm1,jk))/summsk 
     344                         tsn(ji,jj,jk,1)=( zts0(jip1,jj  ,jk,1)*ztmask0(jip1,jj  ,jk) & 
     345                         &                +zts0(jim1,jj  ,jk,1)*ztmask0(jim1,jj  ,jk) & 
     346                         &                +zts0(ji  ,jjp1,jk,1)*ztmask0(ji  ,jjp1,jk) & 
     347                         &                +zts0(ji  ,jjm1,jk,1)*ztmask0(ji  ,jjm1,jk) ) / summsk 
     348                         tsn(ji,jj,jk,2)=( zts0(jip1,jj  ,jk,2)*ztmask0(jip1,jj  ,jk) & 
     349                         &                +zts0(jim1,jj  ,jk,2)*ztmask0(jim1,jj  ,jk) & 
     350                         &                +zts0(ji  ,jjp1,jk,2)*ztmask0(ji  ,jjp1,jk) & 
     351                         &                +zts0(ji  ,jjm1,jk,2)*ztmask0(ji  ,jjm1,jk) ) / summsk 
    346352                         ztmask1(ji,jj,jk)=1 
    347353                      END IF 
     
    358364                         END IF 
    359365                      END IF 
    360                       !! horizontal corner extrapolation if horizontal and vertical failed 
    361                       IF (zdmask(ji,jj)==1 .AND. summsk==0) THEN 
    362                          jip1=ji+1; jim1=ji-1; 
    363                          jjp1=jj+1; jjm1=jj-1; 
    364                          summsk=(ztmask0(jip1,jjp1,jk)+ztmask0(jim1,jjm1,jk)+ztmask0(jim1,jjp1,jk)+ztmask0(jip1,jjm1,jk)) 
    365                          IF (zdmask(ji,jj)==1 .AND. summsk .NE. 0) THEN 
    366                             tsn(ji,jj,jk,1)=( zts0(jip1,jjp1,jk,1)*ztmask0(jip1,jjp1,jk)     & 
    367                             &                +zts0(jim1,jjm1,jk,1)*ztmask0(jim1,jjm1,jk)     & 
    368                             &                +zts0(jim1,jjp1,jk,1)*ztmask0(jim1,jjp1,jk)     & 
    369                             &                +zts0(jip1,jjm1,jk,1)*ztmask0(jip1,jjm1,jk))/summsk 
    370                             tsn(ji,jj,jk,2)=( zts0(jip1,jjp1,jk,2)*ztmask0(jip1,jjp1,jk)     & 
    371                             &                +zts0(jim1,jjm1,jk,2)*ztmask0(jim1,jjm1,jk)     & 
    372                             &                +zts0(jim1,jjp1,jk,2)*ztmask0(jim1,jjp1,jk)     & 
    373                             &                +zts0(jip1,jjm1,jk,2)*ztmask0(jip1,jjm1,jk))/summsk 
    374                             ztmask1(ji,jj,jk)=1 
    375                          END IF 
    376                       END IF 
    377366                  END DO 
    378367              END DO 
     
    392381            DO jj = 1,jpj 
    393382               DO ji = 1,jpi 
    394                   IF (zwmaskn(ji,jj,jk) * zwmaskb(ji,jj,jk) == 1.0_wp ) THEN 
     383                  IF (zwmaskn(ji,jj,jk) * zwmaskb(ji,jj,jk) == 1.0_wp .AND. (tmask(ji,jj,1)==0 .OR. ptmask_b(ji,jj,1)==0) ) THEN 
    395384                     !compute weight 
    396385                     zdzp1 = MAX(0._wp,fsdepw_n(ji,jj,jk+1) - pdepw_b(ji,jj,jk+1)) 
     
    398387                     zdzm1 = MAX(0._wp,pdepw_b(ji,jj,jk  ) - fsdepw_n(ji,jj,jk  )) 
    399388                     IF (zdz .LT. 0.0_wp) THEN  
    400                         PRINT *, 'ERROR dz n ', ji,jj,jk,zdz,fsdepw_n(ji,jj,jk+1),fsdepw_n(ji,jj,jk),fsdepw_n(ji,jj,jk-1) 
    401                         PRINT *, 'ERROR dz n             = ',fse3t_n (ji,jj,jk+1),fse3t_n (ji,jj,jk),fse3t_n (ji,jj,jk-1), sshn(ji,jj) 
    402                         PRINT *, 'ERROR dz b             = ',pdepw_b(ji,jj,jk+1),pdepw_b(ji,jj,jk),pdepw_b(ji,jj,jk-1) 
    403                         PRINT *, 'ERROR dz b             = ',fse3t_b (ji,jj,jk+1),fse3t_b (ji,jj,jk),fse3t_b (ji,jj,jk-1), sshb(ji,jj) 
    404                         PRINT *, 'ERROR dz 0             = ',  e3t_0 (ji,jj,jk+1),  e3t_0 (ji,jj,jk),  e3t_0 (ji,jj,jk-1) 
    405                         PRINT *, 'ERROR dz n             = ',  tmask (ji,jj,jk+1),  tmask (ji,jj,jk),  tmask (ji,jj,jk-1) 
    406                         PRINT *, 'ERROR dz n             = ', zwmaskn(ji,jj,jk+1), zwmaskn(ji,jj,jk), zwmaskn(ji,jj,jk-1) 
    407                         PRINT *, 'ERROR dz b             = ', ptmask_b(ji,jj,jk+1), ptmask_b(ji,jj,jk), ptmask_b(ji,jj,jk-1) 
    408                         PRINT *, 'ERROR dz b             = ', zwmaskb(ji,jj,jk+1), zwmaskb(ji,jj,jk), zwmaskb(ji,jj,jk-1) 
    409                         PRINT *, 'ERROR dz b             = ', gdepw_0(ji,jj,jk+1), gdepw_0(ji,jj,jk), gdepw_0(ji,jj,jk-1) 
    410                         STOP 
     389                        WRITE(numout,*) 'ERROR dz n ', ji,jj,jk,zdz,fsdepw_n(ji,jj,jk+1),fsdepw_n(ji,jj,jk),fsdepw_n(ji,jj,jk-1) 
     390                        WRITE(numout,*) 'ERROR dz n             = ',fse3t_n (ji,jj,jk+1),fse3t_n (ji,jj,jk),fse3t_n (ji,jj,jk-1), sshn(ji,jj) 
     391                        WRITE(numout,*) 'ERROR dz b             = ',pdepw_b(ji,jj,jk+1),pdepw_b(ji,jj,jk),pdepw_b(ji,jj,jk-1) 
     392                        WRITE(numout,*) 'ERROR dz b             = ',fse3t_b (ji,jj,jk+1),fse3t_b (ji,jj,jk),fse3t_b (ji,jj,jk-1), sshb(ji,jj) 
     393                        WRITE(numout,*) 'ERROR dz 0             = ',  e3t_0 (ji,jj,jk+1),  e3t_0 (ji,jj,jk),  e3t_0 (ji,jj,jk-1) 
     394                        WRITE(numout,*) 'ERROR dz n             = ',  tmask (ji,jj,jk+1),  tmask (ji,jj,jk),  tmask (ji,jj,jk-1) 
     395                        WRITE(numout,*) 'ERROR dz n             = ', zwmaskn(ji,jj,jk+1), zwmaskn(ji,jj,jk), zwmaskn(ji,jj,jk-1) 
     396                        WRITE(numout,*) 'ERROR dz b             = ', ptmask_b(ji,jj,jk+1), ptmask_b(ji,jj,jk), ptmask_b(ji,jj,jk-1) 
     397                        WRITE(numout,*) 'ERROR dz b             = ', zwmaskb(ji,jj,jk+1), zwmaskb(ji,jj,jk), zwmaskb(ji,jj,jk-1) 
     398                        WRITE(numout,*) 'ERROR dz b             = ', gdepw_0(ji,jj,jk+1), gdepw_0(ji,jj,jk), gdepw_0(ji,jj,jk-1) 
     399                        CALL ctl_stop( 'STOP', 'rst_iscpl : unable to compute the interpolation' ) 
    411400                     END IF 
    412401                     tsn(ji,jj,jk,jp_tem) = ( zdzp1*tsb(ji,jj,jk+1,jp_tem)      & 
Note: See TracChangeset for help on using the changeset viewer.