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 14200 for NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/NST/agrif_oce_interp.F90 – NEMO

Ignore:
Timestamp:
2020-12-17T15:36:44+01:00 (4 years ago)
Author:
mcastril
Message:

Merging r14117 through r14199 into dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/NST/agrif_oce_interp.F90

    r14086 r14200  
    7676      IF(lwp) WRITE(numout,*) ' ' 
    7777 
    78       IF ( ln_rstart ) &  
    79          & CALL ctl_stop('AGRIF hot start should be desactivated in restarting mode') 
    80  
    8178      IF ( .NOT.Agrif_Parent(l_1st_euler) ) &  
    8279         & CALL ctl_stop('AGRIF hot start requires to force Euler first step on parent') 
     
    8683      Agrif_UseSpecialValue = .TRUE. 
    8784 
    88       ts(:,:,:,:,:) = 0.0_wp 
    89       uu(:,:,:,:)   = 0.0_wp 
    90       vv(:,:,:,:)   = 0.0_wp  
    91       ssh(:,:,:)    = 0._wp 
     85      ts(:,:,:,:,Kbb) = 0.0_wp 
     86      uu(:,:,:,Kbb)   = 0.0_wp 
     87      vv(:,:,:,Kbb)   = 0.0_wp  
    9288        
    9389      Krhs_a = Kbb   ;   Kmm_a = Kbb 
    9490 
    9591      CALL Agrif_Init_Variable(tsini_id, procname=interptsn) 
    96       CALL Agrif_Init_Variable(sshini_id, procname=interpsshn) 
    9792 
    9893      Agrif_UseSpecialValue = ln_spc_dyn 
     
    108103      Krhs_a = Kaa   ;   Kmm_a = Kmm 
    109104 
    110       ssh(:,:,Kbb) = ssh(:,:,Kbb) * tmask(:,:,1) 
    111  
    112105      DO jn = 1, jpts 
    113106         ts(:,:,:,jn,Kbb) = ts(:,:,:,jn,Kbb) * tmask(:,:,:) 
     
    118111      CALL lbc_lnk_multi( 'agrif_istate_oce', uu(:,:,:  ,Kbb), 'U', -1.0_wp , vv(:,:,:,Kbb), 'V', -1.0_wp ) 
    119112      CALL lbc_lnk( 'agrif_istate_oce', ts(:,:,:,:,Kbb), 'T',  1.0_wp ) 
    120       CALL lbc_lnk( 'agrif_istate_oce', ssh(:,:,Kbb), 'T', 1.0_wp ) 
    121113 
    122114   END SUBROUTINE Agrif_istate_oce 
    123115 
    124116 
    125    SUBROUTINE Agrif_istate_ssh( Kbb, Kmm ) 
     117   SUBROUTINE Agrif_istate_ssh( Kbb, Kmm, Kaa ) 
    126118      !!---------------------------------------------------------------------- 
    127119      !!                 *** ROUTINE agrif_istate_ssh *** 
     
    132124      IMPLICIT NONE 
    133125      ! 
    134       INTEGER, INTENT(in)  :: Kbb, Kmm  
     126      INTEGER, INTENT(in)  :: Kbb, Kmm, Kaa  
    135127      !!---------------------------------------------------------------------- 
    136128      IF(lwp) WRITE(numout,*) ' ' 
     
    139131      IF(lwp) WRITE(numout,*) ' ' 
    140132 
    141       IF ( ln_rstart ) &  
    142          & CALL ctl_stop('AGRIF hot start should be desactivated in restarting mode') 
    143  
    144133      IF ( .NOT.Agrif_Parent(l_1st_euler) ) &  
    145134         & CALL ctl_stop('AGRIF hot start requires to force Euler first step on parent') 
    146135 
    147       Kmm_a = Kmm 
    148       ssh(:,:,Kmm) = 0._wp 
    149  
     136      Krhs_a = Kbb   ;   Kmm_a = Kbb 
     137      ! 
    150138      Agrif_SpecialValue    = 0._wp 
    151139      Agrif_UseSpecialValue = .TRUE. 
    152140      l_ini_child           = .TRUE. 
    153141      ! 
     142      ssh(:,:,Kbb) = 0._wp 
    154143      CALL Agrif_Init_Variable(sshini_id, procname=interpsshn) 
    155144      ! 
    156145      Agrif_UseSpecialValue = .FALSE. 
    157146      l_ini_child           = .FALSE. 
    158       CALL lbc_lnk( 'dom_vvl_rst', ssh(:,:,Kmm), 'T', 1._wp ) 
     147      ! 
     148      Krhs_a = Kaa   ;   Kmm_a = Kmm 
     149      ! 
     150      CALL lbc_lnk( 'Agrif_istate_ssh', ssh(:,:,Kbb), 'T', 1._wp ) 
     151      ! 
     152      ssh(:,:,Kmm) = ssh(:,:,Kbb) 
     153      ssh(:,:,Kaa) = 0._wp 
    159154 
    160155   END SUBROUTINE Agrif_istate_ssh 
     
    203198 
    204199      IF( .NOT.ln_dynspg_ts ) THEN ! Get transports 
    205          ubdy(:,:) = 0._wp   ;   vbdy(:,:) = 0._wp  
     200         ubdy(:,:) = 0._wp    ;  vbdy(:,:) = 0._wp 
     201         utint_stage(:,:) = 0 ;  vtint_stage(:,:) = 0 
    206202         CALL Agrif_Bc_variable( unb_interp_id, procname=interpunb ) 
    207203         CALL Agrif_Bc_variable( vnb_interp_id, procname=interpvnb ) 
     
    274270         IF( .NOT.ln_dynspg_ts ) THEN  
    275271            DO ji = mi0(ibdy1), mi1(ibdy2) 
    276                uu_b(ji,:,Krhs_a) = 0._wp 
    277                DO jk = 1, jpkm1 
    278                   DO jj = 1, jpj 
    279                      uu_b(ji,jj,Krhs_a) = uu_b(ji,jj,Krhs_a) + e3u(ji,jj,jk,Krhs_a) * uu(ji,jj,jk,Krhs_a) * umask(ji,jj,jk) 
    280                   END DO 
    281                END DO 
    282272               DO jj = 1, jpj 
    283273                  uu_b(ji,jj,Krhs_a) = ubdy(ji,jj) * r1_hu(ji,jj,Krhs_a) 
     
    304294         ! 
    305295         ibdy1 = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox()  
    306          ibdy2 = jpiglo - ( nn_hls + 1 )              ! 
     296         ibdy2 = jpiglo - ( nn_hls + 1 )      
     297         ! 
    307298         IF( .NOT.ln_dynspg_ts ) THEN  
    308299            DO ji = mi0(ibdy1), mi1(ibdy2) 
    309                vv_b(ji,:,Krhs_a) = 0._wp 
    310                DO jk = 1, jpkm1 
    311                   DO jj = 1, jpj 
    312                      vv_b(ji,jj,Krhs_a) = vv_b(ji,jj,Krhs_a) + e3v(ji,jj,jk,Krhs_a) * vv(ji,jj,jk,Krhs_a) * vmask(ji,jj,jk) 
    313                   END DO 
    314                END DO 
    315300               DO jj = 1, jpj 
    316301                  vv_b(ji,jj,Krhs_a) = vbdy(ji,jj) * r1_hv(ji,jj,Krhs_a) 
     
    318303            END DO 
    319304         ENDIF 
    320  
     305         ! 
    321306         DO ji = mi0(ibdy1), mi1(ibdy2) 
    322307            zvb(ji,:) = 0._wp 
     
    345330         IF( .NOT.ln_dynspg_ts ) THEN 
    346331            DO jj = mj0(jbdy1), mj1(jbdy2) 
    347                vv_b(:,jj,Krhs_a) = 0._wp 
    348                DO jk = 1, jpkm1 
    349                   DO ji = 1, jpi 
    350                      vv_b(ji,jj,Krhs_a) = vv_b(ji,jj,Krhs_a) + e3v(ji,jj,jk,Krhs_a) * vv(ji,jj,jk,Krhs_a) * vmask(ji,jj,jk) 
    351                   END DO 
    352                END DO 
    353                DO ji=1,jpi 
    354                   vv_b(ji,jj,Krhs_a) = vv_b(ji,jj,Krhs_a) * r1_hv(ji,jj,Krhs_a)  
    355                   uu_b(ji,jj,Krhs_a) = uu_b(ji,jj,Krhs_a) * r1_hu(ji,jj,Krhs_a) 
     332               DO ji = 1, jpi 
     333                  uu_b(ji,jj,Krhs_a) = ubdy(ji,jj) * r1_hu(ji,jj,Krhs_a) 
     334                  vv_b(ji,jj,Krhs_a) = vbdy(ji,jj) * r1_hv(ji,jj,Krhs_a) 
    356335               END DO 
    357336            END DO 
     
    401380         IF( .NOT.ln_dynspg_ts ) THEN 
    402381            DO jj = mj0(jbdy1), mj1(jbdy2) 
    403                vv_b(:,jj,Krhs_a) = 0._wp 
    404                DO jk = 1, jpkm1 
    405                   DO ji = 1, jpi 
    406                      vv_b(ji,jj,Krhs_a) = vv_b(ji,jj,Krhs_a) + e3v(ji,jj,jk,Krhs_a) * vv(ji,jj,jk,Krhs_a) * vmask(ji,jj,jk) 
    407                   END DO 
    408                END DO 
    409                DO ji=1,jpi 
     382               DO ji = 1, jpi 
    410383                  vv_b(ji,jj,Krhs_a) = vbdy(ji,jj) * r1_hv(ji,jj,Krhs_a) 
    411384               END DO 
     
    432405         jbdy1 = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()   
    433406         jbdy2 = jpjglo - ( nn_hls + 1 ) 
     407         ! 
    434408         IF( .NOT.ln_dynspg_ts ) THEN 
    435409            DO jj = mj0(jbdy1), mj1(jbdy2) 
    436                uu_b(:,jj,Krhs_a) = 0._wp 
    437                DO jk = 1, jpkm1 
    438                   DO ji = 1, jpi 
    439                      uu_b(ji,jj,Krhs_a) = uu_b(ji,jj,Krhs_a) + e3u(ji,jj,jk,Krhs_a) * uu(ji,jj,jk,Krhs_a) * umask(ji,jj,jk) 
    440                   END DO 
    441                END DO 
    442                DO ji=1,jpi 
     410               DO ji = 1, jpi 
    443411                  uu_b(ji,jj,Krhs_a) = ubdy(ji,jj) * r1_hu(ji,jj,Krhs_a) 
    444412               END DO 
    445413            END DO 
    446414         ENDIF 
    447  
     415         ! 
    448416         DO jj = mj0(jbdy1), mj1(jbdy2) 
    449417            zub(:,jj) = 0._wp 
     
    651619      IF( ll_int_cons ) THEN  ! Conservative interpolation 
    652620         IF ( lk_tint2d_notinterp ) THEN 
     621            Agrif_UseSpecialValue = .FALSE. 
    653622            CALL Agrif_Bc_variable( ub2b_interp_id, calledweight=1._wp, procname=interpub2b_const ) 
    654623            CALL Agrif_Bc_variable( vb2b_interp_id, calledweight=1._wp, procname=interpvb2b_const )  
    655624            ! Divergence conserving correction terms: 
    656             CALL Agrif_Bc_variable(    ub2b_cor_id, calledweight=1._wp, procname=        ub2b_cor ) 
    657             CALL Agrif_Bc_variable(    vb2b_cor_id, calledweight=1._wp, procname=        vb2b_cor ) 
     625            IF ( Agrif_Rhox()>1 ) CALL Agrif_Bc_variable(    ub2b_cor_id, calledweight=1._wp, procname=ub2b_cor ) 
     626            IF ( Agrif_Rhoy()>1 ) CALL Agrif_Bc_variable(    vb2b_cor_id, calledweight=1._wp, procname=vb2b_cor ) 
    658627         ELSE 
    659628            ! order matters here !!!!!! 
     
    990959      ELSE 
    991960         IF( l_ini_child ) THEN 
    992             ssh(i1:i2,j1:j2,Kmm_a) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 
     961            ssh(i1:i2,j1:j2,Krhs_a) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 
    993962         ELSE 
    994963            hbdy(i1:i2,j1:j2) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 
     
    14381407         ptab(:,:) = 0._wp 
    14391408         DO ji=i1+1,i2-1 
    1440             DO jj=j1+1,j2 
     1409            DO jj=j1+1,j2-1 
    14411410               ptab(ji,jj) = 0.25_wp*( ( vb2_b(ji+1,jj  )*e1v(ji+1,jj  )   &  
    14421411                           &            -vb2_b(ji-1,jj  )*e1v(ji-1,jj  ) ) & 
     
    15421511         ptab(:,:) = 0._wp 
    15431512         DO ji=i1+1,i2-1 
    1544             DO jj=j1+1,j2 
     1513            DO jj=j1+1,j2-1 
    15451514               ptab(ji,jj) = 0.25_wp*( ( ub2_b(ji  ,jj+1)*e2u(ji  ,jj+1)   &  
    15461515                           &            -ub2_b(ji  ,jj-1)*e2u(ji  ,jj-1) ) & 
Note: See TracChangeset for help on using the changeset viewer.