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 9031 for branches/2017/dev_merge_2017/NEMOGCM/NEMO/NST_SRC/agrif_top_update.F90 – NEMO

Ignore:
Timestamp:
2017-12-14T11:10:02+01:00 (6 years ago)
Author:
timgraham
Message:

Resolved AGRIF conflicts

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/NST_SRC/agrif_top_update.F90

    r9019 r9031  
    2626   PUBLIC Agrif_Update_Trc 
    2727 
    28    INTEGER, PUBLIC ::   nbcline_trc = 0   !: ??? 
    29  
    3028   !!---------------------------------------------------------------------- 
    3129   !! NEMO/NST 4.0 , NEMO Consortium (2017) 
     
    3533CONTAINS 
    3634 
    37    SUBROUTINE Agrif_Update_Trc( kt ) 
     35   SUBROUTINE Agrif_Update_Trc( ) 
    3836      !!---------------------------------------------------------------------- 
    3937      !!                   *** ROUTINE Agrif_Update_Trc *** 
    4038      !!---------------------------------------------------------------------- 
    41       INTEGER, INTENT(in) ::   kt 
    42       !!---------------------------------------------------------------------- 
    43       !  
    44       IF((Agrif_NbStepint() .NE. (Agrif_irhot()-1)).AND.(kt /= 0)) RETURN 
     39      !  
     40      IF (Agrif_Root()) RETURN  
     41      ! 
    4542#if defined TWO_WAY    
    4643      Agrif_UseSpecialValueInUpdate = .TRUE. 
    4744      Agrif_SpecialValueFineGrid    = 0._wp 
    4845      !  
    49       IF( MOD(nbcline_trc,nbclineupdate) == 0 ) THEN 
    5046# if ! defined DECAL_FEEDBACK 
    51          CALL Agrif_Update_Variable(trn_id, procname=updateTRC ) 
     47      CALL Agrif_Update_Variable(trn_id, procname=updateTRC ) 
     48!      CALL Agrif_Update_Variable( trn_id, locupdate=(/0,2/), procname=updateTRC ) 
    5249# else 
    53          CALL Agrif_Update_Variable(trn_id, locupdate=(/1,0/),procname=updateTRC ) 
     50      CALL Agrif_Update_Variable(trn_id, locupdate=(/1,0/),procname=updateTRC ) 
     51!      CALL Agrif_Update_Variable( trn_id, locupdate=(/1,2/), procname=updateTRC ) 
    5452# endif 
     53      ! 
     54      Agrif_UseSpecialValueInUpdate = .FALSE. 
     55      ! 
     56#endif 
     57      ! 
     58   END SUBROUTINE Agrif_Update_Trc 
     59 
     60#ifdef key_vertical 
     61   SUBROUTINE updateTRC( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before ) 
     62      !!--------------------------------------------- 
     63      !!           *** ROUTINE updateT *** 
     64      !!--------------------------------------------- 
     65      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2 
     66      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 
     67      LOGICAL, INTENT(in) :: before 
     68      !! 
     69      INTEGER :: ji,jj,jk,jn 
     70      REAL(wp), DIMENSION(i1:i2,j1:j2,1:jpk,n1:n2) :: tabres_child 
     71      REAL(wp) :: h_in(k1:k2) 
     72      REAL(wp) :: h_out(1:jpk) 
     73      INTEGER  :: N_in, N_out 
     74      REAL(wp) :: h_diff 
     75      REAL(wp) :: zrho_xy 
     76      REAL(wp) :: tabin(k1:k2,n1:n2) 
     77      !!--------------------------------------------- 
     78      ! 
     79      IF (before) THEN 
     80         AGRIF_SpecialValue = -999._wp 
     81         zrho_xy = Agrif_rhox() * Agrif_rhoy()  
     82         DO jn = n1,n2-1 
     83            DO jk=k1,k2 
     84               DO jj=j1,j2 
     85                  DO ji=i1,i2 
     86                     tabres(ji,jj,jk,jn) = (trn(ji,jj,jk,jn) * e3t_n(ji,jj,jk) ) & 
     87                                           * tmask(ji,jj,jk) + (tmask(ji,jj,jk)-1)*999._wp 
     88                  END DO 
     89               END DO 
     90            END DO 
     91         END DO 
     92         DO jk=k1,k2 
     93            DO jj=j1,j2 
     94               DO ji=i1,i2 
     95                  tabres(ji,jj,jk,n2) = tmask(ji,jj,jk) * e3t_n(ji,jj,jk) & 
     96                                           + (tmask(ji,jj,jk)-1)*999._wp 
     97               END DO 
     98            END DO 
     99         END DO 
    55100      ELSE 
    56 # if ! defined DECAL_FEEDBACK 
    57          CALL Agrif_Update_Variable( trn_id, locupdate=(/0,2/), procname=updateTRC ) 
    58 # else 
    59          CALL Agrif_Update_Variable( trn_id, locupdate=(/1,2/), procname=updateTRC ) 
    60 # endif 
     101         tabres_child(:,:,:,:) = 0. 
     102         AGRIF_SpecialValue = 0._wp 
     103         DO jj=j1,j2 
     104            DO ji=i1,i2 
     105               N_in = 0 
     106               DO jk=k1,k2 !k2 = jpk of child grid 
     107                  IF (tabres(ji,jj,jk,n2) == 0  ) EXIT 
     108                  N_in = N_in + 1 
     109                  tabin(jk,:) = tabres(ji,jj,jk,n1:n2-1)/tabres(ji,jj,jk,n2) 
     110                  h_in(N_in) = tabres(ji,jj,jk,n2) 
     111               ENDDO 
     112               N_out = 0 
     113               DO jk=1,jpk ! jpk of parent grid 
     114                  IF (tmask(ji,jj,jk) < -900) EXIT ! TODO: Will not work with ISF 
     115                  N_out = N_out + 1 
     116                  h_out(N_out) = e3t_n(ji,jj,jk) !Parent grid scale factors. Could multiply by e1e2t here instead of division above 
     117               ENDDO 
     118               IF (N_in > 0) THEN !Remove this? 
     119                  h_diff = sum(h_out(1:N_out))-sum(h_in(1:N_in)) 
     120                  IF (h_diff < -1.e-4) THEN 
     121                     print *,'CHECK YOUR bathy T points ...',ji,jj,h_diff,sum(h_in(1:N_in)),sum(h_out(1:N_out)) 
     122                     print *,h_in(1:N_in) 
     123                     print *,h_out(1:N_out) 
     124                     STOP 
     125                  ENDIF 
     126                  DO jn=1,jptra 
     127                     CALL reconstructandremap(tabin(1:N_in,jn),h_in(1:N_in),tabres_child(ji,jj,1:N_out,jn),h_out(1:N_out),N_in,N_out) 
     128                  ENDDO 
     129               ENDIF 
     130            ENDDO 
     131         ENDDO 
     132 
     133         IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
     134            ! Add asselin part 
     135            DO jn = 1,jptra 
     136               DO jk=1,jpk 
     137                  DO jj=j1,j2 
     138                     DO ji=i1,i2 
     139                        IF( tabres_child(ji,jj,jk,jn) .NE. 0. ) THEN 
     140                           trb(ji,jj,jk,jn) = tsb(ji,jj,jk,jn) &  
     141                                 & + atfp * ( tabres_child(ji,jj,jk,jn) & 
     142                                 &          - trn(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 
     143                        ENDIF 
     144                     ENDDO 
     145                  ENDDO 
     146               ENDDO 
     147            ENDDO 
     148         ENDIF 
     149         DO jn = 1,jptra 
     150            DO jk=1,jpk 
     151               DO jj=j1,j2 
     152                  DO ji=i1,i2 
     153                     IF( tabres_child(ji,jj,jk,jn) .NE. 0. ) THEN  
     154                        trn(ji,jj,jk,jn) = tabres_child(ji,jj,jk,jn) * tmask(ji,jj,jk) 
     155                     END IF 
     156                  END DO 
     157               END DO 
     158            END DO 
     159         END DO 
    61160      ENDIF 
    62       ! 
    63       Agrif_UseSpecialValueInUpdate = .FALSE. 
    64       nbcline_trc = nbcline_trc + 1 
    65 #endif 
    66       ! 
    67    END SUBROUTINE Agrif_Update_Trc 
    68  
    69  
    70    SUBROUTINE updateTRC( ptab, i1, i2, j1, j2, k1, k2, n1, n2, before ) 
    71       !!---------------------------------------------------------------------- 
    72       !!                      *** ROUTINE updateT *** 
     161      !  
     162   END SUBROUTINE updateTRC 
     163 
     164 
     165#else 
     166   SUBROUTINE updateTRC( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before ) 
     167      !!---------------------------------------------------------------------- 
     168      !!                      *** ROUTINE updateTRC *** 
    73169      !!---------------------------------------------------------------------- 
    74170      INTEGER                                    , INTENT(in   ) ::   i1, i2, j1, j2, k1, k2, n1, n2 
    75       REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) ::   ptab 
     171      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) ::   tabres 
    76172      LOGICAL                                    , INTENT(in   ) ::   before 
    77173      !! 
    78       INTEGER ::   ji, jj, jk, jn 
    79       !!---------------------------------------------------------------------- 
    80       ! 
    81       IF( before ) THEN 
    82          ptab(i1:i2,j1:j2,k1:k2,n1:n2) = trn(i1:i2,j1:j2,k1:k2,n1:n2) 
     174      INTEGER :: ji,jj,jk,jn 
     175      REAL(wp) :: ztb, ztnu, ztno 
     176      !!---------------------------------------------------------------------- 
     177      ! 
     178      ! 
     179      IF (before) THEN 
     180         DO jn = n1,n2 
     181            DO jk=k1,k2 
     182               DO jj=j1,j2 
     183                  DO ji=i1,i2 
     184!> jc tmp 
     185                     tabres(ji,jj,jk,jn) = trn(ji,jj,jk,jn)  * e3t_n(ji,jj,jk) / e3t_0(ji,jj,jk) 
     186!                     tabres(ji,jj,jk,jn) = trn(ji,jj,jk,jn)  * e3t_n(ji,jj,jk) 
     187!< jc tmp 
     188                  END DO 
     189               END DO 
     190            END DO 
     191         END DO 
    83192      ELSE 
    84          IF( .NOT.(lk_agrif_fstep.AND.(neuler==0)) ) THEN 
     193!> jc tmp 
     194         DO jn = n1,n2 
     195            tabres(i1:i2,j1:j2,k1:k2,jn) =  tabres(i1:i2,j1:j2,k1:k2,jn) * e3t_0(i1:i2,j1:j2,k1:k2) & 
     196                                         & * tmask(i1:i2,j1:j2,k1:k2) 
     197         ENDDO 
     198!< jc tmp 
     199         IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
    85200            ! Add asselin part 
    86201            DO jn = n1,n2 
    87                DO jk = k1, k2 
    88                   DO jj = j1, j2 
    89                      DO ji = i1, i2 
    90                         IF( ptab(ji,jj,jk,jn) /= 0._wp ) THEN 
    91                            trb(ji,jj,jk,jn) = trb(ji,jj,jk,jn)             &  
    92                               &             + atfp * ( ptab(ji,jj,jk,jn)   & 
    93                                  &                    - trn(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 
     202               DO jk=k1,k2 
     203                  DO jj=j1,j2 
     204                     DO ji=i1,i2 
     205                        IF( tabres(ji,jj,jk,jn) .NE. 0. ) THEN 
     206                           ztb  = trb(ji,jj,jk,jn) * e3t_b(ji,jj,jk) ! fse3t_b prior update should be used 
     207                           ztnu = tabres(ji,jj,jk,jn) 
     208                           ztno = trn(ji,jj,jk,jn) * e3t_a(ji,jj,jk) 
     209                           trb(ji,jj,jk,jn) = ( ztb + atfp * ( ztnu - ztno) )  &  
     210                                     &        * tmask(ji,jj,jk) / e3t_b(ji,jj,jk) 
    94211                        ENDIF 
    95                      END DO 
    96                   END DO 
    97                END DO 
    98             END DO 
     212                     ENDDO 
     213                  ENDDO 
     214               ENDDO 
     215            ENDDO 
    99216         ENDIF 
    100          DO jn = n1, n2 
    101             DO jk = k1, k2 
    102                DO jj = j1, j2 
    103                   DO ji = i1, i2 
    104                      IF( ptab(ji,jj,jk,jn) /= 0._wp ) THEN  
    105                         trn(ji,jj,jk,jn) = ptab(ji,jj,jk,jn) * tmask(ji,jj,jk) 
     217         DO jn = n1,n2 
     218            DO jk=k1,k2 
     219               DO jj=j1,j2 
     220                  DO ji=i1,i2 
     221                     IF( tabres(ji,jj,jk,jn) .NE. 0. ) THEN  
     222                        trn(ji,jj,jk,jn) = tabres(ji,jj,jk,jn) / e3t_n(ji,jj,jk) 
    106223                     END IF 
    107224                  END DO 
     
    109226            END DO 
    110227         END DO 
     228         ! 
     229         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
     230            trb(i1:i2,j1:j2,k1:k2,n1:n2)  = trn(i1:i2,j1:j2,k1:k2,n1:n2) 
     231         ENDIF 
     232         ! 
    111233      ENDIF 
    112234      !  
    113235   END SUBROUTINE updateTRC 
     236#endif 
    114237 
    115238#else 
Note: See TracChangeset for help on using the changeset viewer.