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 10251 for branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/NEMO/NST_SRC/agrif_lim2_interp.F90 – NEMO

Ignore:
Timestamp:
2018-10-29T15:20:26+01:00 (5 years ago)
Author:
kingr
Message:

Rolled back to r10247 - i.e., undid merge of pkg br and 3.6_stable br

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/NEMO/NST_SRC/agrif_lim2_interp.F90

    r10248 r10251  
    99   !!            3.4   !  09-2012  (R. Benshila, C. Herbaut) update and EVP 
    1010   !!---------------------------------------------------------------------- 
    11 #if defined key_agrif && defined key_lim2  
     11#if defined key_agrif && defined key_lim2 
    1212   !!---------------------------------------------------------------------- 
    1313   !!   'key_lim2'  :                                 LIM 2.0 sea-ice model 
     
    4141   PUBLIC interp_adv_ice 
    4242 
    43    REAL(wp), DIMENSION(:,:)  , ALLOCATABLE, PRIVATE :: uice_agr, vice_agr 
    44    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, PRIVATE :: tabice_agr  
    45  
    46  
    4743   !!---------------------------------------------------------------------- 
    4844   !! NEMO/NST 3.4 , NEMO Consortium (2012) 
     
    6965      u_ice_nst(:,:) = 0. 
    7066      v_ice_nst(:,:) = 0. 
    71       CALL Agrif_Bc_variable( u_ice_id ,procname=interp_u_ice, calledweight=1. ) 
    72       CALL Agrif_Bc_variable( v_ice_id ,procname=interp_v_ice, calledweight=1. ) 
     67      CALL Agrif_Bc_variable( u_ice_nst, u_ice_id ,procname=interp_u_ice, calledweight=1. ) 
     68      CALL Agrif_Bc_variable( v_ice_nst, v_ice_id ,procname=interp_v_ice, calledweight=1. ) 
    7369      Agrif_SpecialValue=0. 
    7470      Agrif_UseSpecialValue = .FALSE. 
     
    142138      !!  we are in inside a new parent ice time step 
    143139      !!----------------------------------------------------------------------- 
     140      REAL(wp), DIMENSION(jpi,jpj) :: zuice, zvice 
    144141      INTEGER :: ji,jj 
    145142      REAL(wp) :: zrhox, zrhoy 
     
    158155         Agrif_SpecialValue=-9999. 
    159156         Agrif_UseSpecialValue = .TRUE. 
    160          IF( .NOT. ALLOCATED(uice_agr) )THEN 
    161             ALLOCATE(uice_agr(jpi,jpj), vice_agr(jpi,jpj)) 
    162          ENDIF 
    163          uice_agr = 0. 
    164          vice_agr = 0. 
    165          CALL Agrif_Bc_variable(u_ice_id,procname=interp_u_ice, calledweight=1.) 
    166          CALL Agrif_Bc_variable(v_ice_id,procname=interp_v_ice, calledweight=1.) 
     157         zuice = 0. 
     158         zvice = 0. 
     159         CALL Agrif_Bc_variable(zuice,u_ice_id,procname=interp_u_ice, calledweight=1.) 
     160         CALL Agrif_Bc_variable(zvice,v_ice_id,procname=interp_v_ice, calledweight=1.) 
    167161         Agrif_SpecialValue=0. 
    168162         Agrif_UseSpecialValue = .FALSE. 
    169163         !   
    170164         zrhox = agrif_rhox() ;    zrhoy = agrif_rhoy()       
    171          uice_agr(:,:) =  uice_agr(:,:)/(zrhoy*e2u(:,:))*umask(:,:,1) 
    172          vice_agr(:,:) =  vice_agr(:,:)/(zrhox*e1v(:,:))*vmask(:,:,1) 
     165         zuice(:,:) =  zuice(:,:)/(zrhoy*e2u(:,:))*umask(:,:,1) 
     166         zvice(:,:) =  zvice(:,:)/(zrhox*e1v(:,:))*vmask(:,:,1) 
    173167         ! fill  boundaries 
    174168         DO jj = 1, jpj 
    175169            DO ji = 1, 2 
    176                u_ice_oe(ji,  jj,2) = uice_agr(ji       ,jj)  
    177                u_ice_oe(ji+2,jj,2) = uice_agr(nlci+ji-3,jj) 
     170               u_ice_oe(ji,  jj,2) = zuice(ji       ,jj)  
     171               u_ice_oe(ji+2,jj,2) = zuice(nlci+ji-3,jj) 
    178172            END DO 
    179173         END DO 
    180174         DO jj = 1, jpj 
    181             v_ice_oe(2,jj,2) = vice_agr(2     ,jj)  
    182             v_ice_oe(4,jj,2) = vice_agr(nlci-1,jj) 
     175            v_ice_oe(2,jj,2) = zvice(2     ,jj)  
     176            v_ice_oe(4,jj,2) = zvice(nlci-1,jj) 
    183177         END DO 
    184178         DO ji = 1, jpi 
    185             u_ice_sn(ji,2,2) = uice_agr(ji,2     )  
    186             u_ice_sn(ji,4,2) = uice_agr(ji,nlcj-1) 
     179            u_ice_sn(ji,2,2) = zuice(ji,2     )  
     180            u_ice_sn(ji,4,2) = zuice(ji,nlcj-1) 
    187181         END DO 
    188182         DO jj = 1, 2 
    189183            DO ji = 1, jpi 
    190                v_ice_sn(ji,jj  ,2) = vice_agr(ji,jj       )  
    191                v_ice_sn(ji,jj+2,2) = vice_agr(ji,nlcj+jj-3) 
     184               v_ice_sn(ji,jj  ,2) = zvice(ji,jj       )  
     185               v_ice_sn(ji,jj+2,2) = zvice(ji,nlcj+jj-3) 
    192186            END DO 
    193187         END DO 
     
    340334      !!  we are in inside a new parent ice time step 
    341335     !!----------------------------------------------------------------------- 
     336      REAL(wp), DIMENSION(jpi,jpj,7) :: ztab  
    342337      INTEGER :: ji,jj,jn 
    343338      !!----------------------------------------------------------------------- 
     
    350345         adv_ice_sn(:,:,:,1) =  adv_ice_sn(:,:,:,2) 
    351346         ! interpolation of boundaries 
    352          IF(.NOT.ALLOCATED(tabice_agr))THEN 
    353             ALLOCATE(tabice_agr(jpi,jpj,7))    
    354          ENDIF 
    355          tabice_agr(:,:,:) = 0. 
     347         ztab(:,:,:) = 0. 
    356348         Agrif_SpecialValue=-9999. 
    357349         Agrif_UseSpecialValue = .TRUE. 
    358          CALL Agrif_Bc_variable( adv_ice_id ,procname=interp_adv_ice,calledweight=1. ) 
     350         CALL Agrif_Bc_variable( ztab, adv_ice_id ,procname=interp_adv_ice,calledweight=1. ) 
    359351         Agrif_SpecialValue=0. 
    360352         Agrif_UseSpecialValue = .FALSE. 
     
    364356            DO jj = 1, jpj 
    365357               DO ji=1,2 
    366                   adv_ice_oe(ji  ,jj,jn,2) = tabice_agr(ji       ,jj,jn)  
    367                   adv_ice_oe(ji+2,jj,jn,2) = tabice_agr(nlci-2+ji,jj,jn) 
     358                  adv_ice_oe(ji  ,jj,jn,2) = ztab(ji       ,jj,jn)  
     359                  adv_ice_oe(ji+2,jj,jn,2) = ztab(nlci-2+ji,jj,jn) 
    368360               END DO 
    369361            END DO 
     
    373365            Do jj =1,2 
    374366               DO ji = 1, jpi 
    375                   adv_ice_sn(ji,jj  ,jn,2) = tabice_agr(ji,jj       ,jn)  
    376                   adv_ice_sn(ji,jj+2,jn,2) = tabice_agr(ji,nlcj-2+jj,jn) 
     367                  adv_ice_sn(ji,jj  ,jn,2) = ztab(ji,jj       ,jn)  
     368                  adv_ice_sn(ji,jj+2,jn,2) = ztab(ji,nlcj-2+jj,jn) 
    377369               END DO 
    378370            END DO 
     
    392384      INTEGER :: ji,jj,jn 
    393385      REAL(wp) :: zalpha 
    394       REAL(wp), DIMENSION(jpi,jpj,7) :: tabice_agr  
     386      REAL(wp), DIMENSION(jpi,jpj,7) :: ztab  
    395387      !!-----------------------------------------------------------------------       
    396388      ! 
     
    399391      zalpha = REAL(lim_nbstep,wp) / (Agrif_Rhot()*Agrif_PArent(nn_fsbc)/REAL(nn_fsbc)) 
    400392      ! 
    401       tabice_agr(:,:,:) = 0.e0 
     393      ztab(:,:,:) = 0.e0 
    402394      DO jn =1,7 
    403395         DO jj =1,2 
    404396            DO ji = 1, jpi 
    405                tabice_agr(ji,jj        ,jn) = (1-zalpha)*adv_ice_sn(ji,jj  ,jn,1) + zalpha*adv_ice_sn(ji,jj  ,jn,2)  
    406                tabice_agr(ji,nlcj-2+jj ,jn) = (1-zalpha)*adv_ice_sn(ji,jj+2,jn,1) + zalpha*adv_ice_sn(ji,jj+2,jn,2)  
     397               ztab(ji,jj        ,jn) = (1-zalpha)*adv_ice_sn(ji,jj  ,jn,1) + zalpha*adv_ice_sn(ji,jj  ,jn,2)  
     398               ztab(ji,nlcj-2+jj ,jn) = (1-zalpha)*adv_ice_sn(ji,jj+2,jn,1) + zalpha*adv_ice_sn(ji,jj+2,jn,2)  
    407399            END DO 
    408400         END DO 
     
    412404         DO jj = 1, jpj 
    413405            DO ji=1,2 
    414                tabice_agr(ji       ,jj,jn) = (1-zalpha)*adv_ice_oe(ji  ,jj,jn,1) + zalpha*adv_ice_oe(ji  ,jj,jn,2)  
    415                tabice_agr(nlci-2+ji,jj,jn) = (1-zalpha)*adv_ice_oe(ji+2,jj,jn,1) + zalpha*adv_ice_oe(ji+2,jj,jn,2)  
    416             END DO 
    417          END DO 
    418       END DO 
    419       ! 
    420       CALL parcoursT( tabice_agr(:,:, 1), frld  ) 
    421       CALL parcoursT( tabice_agr(:,:, 2), hicif ) 
    422       CALL parcoursT( tabice_agr(:,:, 3), hsnif ) 
    423       CALL parcoursT( tabice_agr(:,:, 4), tbif(:,:,1) ) 
    424       CALL parcoursT( tabice_agr(:,:, 5), tbif(:,:,2) ) 
    425       CALL parcoursT( tabice_agr(:,:, 6), tbif(:,:,3) ) 
    426       CALL parcoursT( tabice_agr(:,:, 7), qstoif ) 
     406               ztab(ji       ,jj,jn) = (1-zalpha)*adv_ice_oe(ji  ,jj,jn,1) + zalpha*adv_ice_oe(ji  ,jj,jn,2)  
     407               ztab(nlci-2+ji,jj,jn) = (1-zalpha)*adv_ice_oe(ji+2,jj,jn,1) + zalpha*adv_ice_oe(ji+2,jj,jn,2)  
     408            END DO 
     409         END DO 
     410      END DO 
     411      ! 
     412      CALL parcoursT( ztab(:,:, 1), frld  ) 
     413      CALL parcoursT( ztab(:,:, 2), hicif ) 
     414      CALL parcoursT( ztab(:,:, 3), hsnif ) 
     415      CALL parcoursT( ztab(:,:, 4), tbif(:,:,1) ) 
     416      CALL parcoursT( ztab(:,:, 5), tbif(:,:,2) ) 
     417      CALL parcoursT( ztab(:,:, 6), tbif(:,:,3) ) 
     418      CALL parcoursT( ztab(:,:, 7), qstoif ) 
    427419      ! 
    428420   END SUBROUTINE agrif_trp_lim2 
     
    507499 
    508500 
    509    SUBROUTINE interp_u_ice( tabres, i1, i2, j1, j2, before ) 
     501   SUBROUTINE interp_u_ice( tabres, i1, i2, j1, j2 ) 
    510502      !!----------------------------------------------------------------------- 
    511503      !!                     *** ROUTINE interp_u_ice *** 
     
    513505      INTEGER, INTENT(in) :: i1, i2, j1, j2 
    514506      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 
    515       LOGICAL, INTENT(in) :: before 
    516507      !! 
    517508      INTEGER :: ji,jj 
     
    519510      ! 
    520511#if defined key_lim2_vp 
    521       IF( before ) THEN 
    522          DO jj=MAX(j1,2),j2 
    523             DO ji=MAX(i1,2),i2 
    524                IF( tmu(ji,jj) == 0. ) THEN 
    525                   tabres(ji,jj) = -9999. 
    526                ELSE 
    527                   tabres(ji,jj) = e2f(ji-1,jj-1) * u_ice(ji,jj) 
    528                ENDIF 
    529             END DO 
    530          END DO 
    531       ENDIF 
     512      DO jj=MAX(j1,2),j2 
     513         DO ji=MAX(i1,2),i2 
     514            IF( tmu(ji,jj) == 0. ) THEN 
     515               tabres(ji,jj) = -9999. 
     516            ELSE 
     517               tabres(ji,jj) = e2f(ji-1,jj-1) * u_ice(ji,jj) 
     518            ENDIF 
     519         END DO 
     520      END DO 
    532521#else 
    533       IF( before ) THEN 
    534          DO jj= j1, j2 
    535             DO ji= i1, i2 
    536                IF( umask(ji,jj,1) == 0. ) THEN 
    537                   tabres(ji,jj) = -9999. 
    538                ELSE 
    539                   tabres(ji,jj) = e2u(ji,jj) * u_ice(ji,jj) 
    540                ENDIF 
    541             END DO 
    542          END DO 
    543       ENDIF 
     522      DO jj= j1, j2 
     523         DO ji= i1, i2 
     524            IF( umask(ji,jj,1) == 0. ) THEN 
     525               tabres(ji,jj) = -9999. 
     526            ELSE 
     527               tabres(ji,jj) = e2u(ji,jj) * u_ice(ji,jj) 
     528            ENDIF 
     529         END DO 
     530      END DO 
    544531#endif 
    545532   END SUBROUTINE interp_u_ice 
    546533 
    547534 
    548    SUBROUTINE interp_v_ice( tabres, i1, i2, j1, j2, before ) 
     535   SUBROUTINE interp_v_ice( tabres, i1, i2, j1, j2 ) 
    549536      !!----------------------------------------------------------------------- 
    550537      !!                    *** ROUTINE interp_v_ice *** 
     
    552539      INTEGER, INTENT(in) :: i1, i2, j1, j2 
    553540      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 
    554       LOGICAL, INTENT(in) :: before 
    555541      !! 
    556542      INTEGER :: ji, jj 
     
    558544      ! 
    559545#if defined key_lim2_vp 
    560       IF( before ) THEN 
    561          DO jj=MAX(j1,2),j2 
    562             DO ji=MAX(i1,2),i2 
    563                IF( tmu(ji,jj) == 0. ) THEN 
    564                   tabres(ji,jj) = -9999. 
    565                ELSE 
    566                   tabres(ji,jj) = e1f(ji-1,jj-1) * v_ice(ji,jj) 
    567                ENDIF 
    568             END DO 
    569          END DO 
    570       ENDIF    
     546      DO jj=MAX(j1,2),j2 
     547         DO ji=MAX(i1,2),i2 
     548            IF( tmu(ji,jj) == 0. ) THEN 
     549               tabres(ji,jj) = -9999. 
     550            ELSE 
     551               tabres(ji,jj) = e1f(ji-1,jj-1) * v_ice(ji,jj) 
     552            ENDIF 
     553         END DO 
     554      END DO 
    571555#else 
    572       IF( before ) THEN 
    573          DO jj= j1 ,j2 
    574             DO ji = i1, i2 
    575                IF( vmask(ji,jj,1) == 0. ) THEN 
    576                   tabres(ji,jj) = -9999. 
    577                ELSE 
    578                   tabres(ji,jj) = e1v(ji,jj) * v_ice(ji,jj) 
    579                ENDIF 
    580             END DO 
    581          END DO 
    582       ENDIF 
     556      DO jj= j1 ,j2 
     557         DO ji = i1, i2 
     558            IF( vmask(ji,jj,1) == 0. ) THEN 
     559               tabres(ji,jj) = -9999. 
     560            ELSE 
     561               tabres(ji,jj) = e1v(ji,jj) * v_ice(ji,jj) 
     562            ENDIF 
     563         END DO 
     564      END DO 
    583565#endif 
    584566   END SUBROUTINE interp_v_ice 
    585567 
    586568 
    587    SUBROUTINE interp_adv_ice( tabres, i1, i2, j1, j2, before ) 
     569   SUBROUTINE interp_adv_ice( tabres, i1, i2, j1, j2 ) 
    588570      !!----------------------------------------------------------------------- 
    589571      !!                    *** ROUTINE interp_adv_ice ***                            
     
    595577      INTEGER, INTENT(in) :: i1, i2, j1, j2 
    596578      REAL(wp), DIMENSION(i1:i2,j1:j2,7), INTENT(inout) :: tabres 
    597       LOGICAL, INTENT(in) :: before 
    598579      !! 
    599580      INTEGER :: ji, jj, jk 
    600581      !!----------------------------------------------------------------------- 
    601582      ! 
    602       IF( before ) THEN 
    603          DO jj=j1,j2 
    604             DO ji=i1,i2 
    605                IF( tms(ji,jj) == 0. ) THEN 
    606                   tabres(ji,jj,:) = -9999.  
    607                ELSE 
    608                   tabres(ji,jj, 1) = frld  (ji,jj) 
    609                   tabres(ji,jj, 2) = hicif (ji,jj) 
    610                   tabres(ji,jj, 3) = hsnif (ji,jj) 
    611                   tabres(ji,jj, 4) = tbif  (ji,jj,1) 
    612                   tabres(ji,jj, 5) = tbif  (ji,jj,2) 
    613                   tabres(ji,jj, 6) = tbif  (ji,jj,3) 
    614                   tabres(ji,jj, 7) = qstoif(ji,jj) 
    615                ENDIF 
    616             END DO 
    617          END DO 
    618       ENDIF 
     583      DO jj=j1,j2 
     584         DO ji=i1,i2 
     585            IF( tms(ji,jj) == 0. ) THEN 
     586               tabres(ji,jj,:) = -9999.  
     587            ELSE 
     588               tabres(ji,jj, 1) = frld  (ji,jj) 
     589               tabres(ji,jj, 2) = hicif (ji,jj) 
     590               tabres(ji,jj, 3) = hsnif (ji,jj) 
     591               tabres(ji,jj, 4) = tbif  (ji,jj,1) 
     592               tabres(ji,jj, 5) = tbif  (ji,jj,2) 
     593               tabres(ji,jj, 6) = tbif  (ji,jj,3) 
     594               tabres(ji,jj, 7) = qstoif(ji,jj) 
     595            ENDIF 
     596         END DO 
     597      END DO 
    619598      ! 
    620599   END SUBROUTINE interp_adv_ice 
Note: See TracChangeset for help on using the changeset viewer.