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 636 for trunk/NEMO/NST_SRC/agrif_top_interp.F90 – NEMO

Ignore:
Timestamp:
2007-03-07T14:28:16+01:00 (17 years ago)
Author:
opalod
Message:

nemo_v2_update_008:RB: clean agrif routines and add sponge layer coefficient in namelist

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/NST_SRC/agrif_top_interp.F90

    r628 r636  
    1 ! 
    2       Module agrif_top_interp 
     1MODULE agrif_top_interp 
    32#if defined key_agrif && defined key_passivetrc 
    4       USE par_oce 
    5       USE oce 
    6       USE dom_oce       
    7       USE sol_oce 
    8       USE trc 
    9       USE sms 
     3   USE par_oce 
     4   USE oce 
     5   USE dom_oce       
     6   USE sol_oce 
     7   USE trcstp 
     8   USE sms 
    109 
    11       CONTAINS 
    12       SUBROUTINE Agrif_trc( kt ) 
     10   IMPLICIT NONE 
     11   PRIVATE 
    1312 
    14       Implicit none 
    15        
    16    !! * Substitutions 
     13   PUBLIC Agrif_trc 
     14 
     15   CONTAINS 
     16 
     17   SUBROUTINE Agrif_trc( kt ) 
     18      !!--------------------------------------------- 
     19      !!   *** ROUTINE Agrif_trc *** 
     20      !!--------------------------------------------- 
    1721#  include "domzgr_substitute.h90"   
    1822#  include "vectopt_loop_substitute.h90" 
    19 ! 
    20       INTEGER :: kt 
    21       REAL(wp) tratemp(jpi,jpj,jpk,jptra) 
     23       
     24      INTEGER, INTENT(in) :: kt 
     25 
    2226      INTEGER :: ji,jj,jk,jn 
    23       REAL(wp) :: rhox 
     27      REAL(wp) :: zrhox 
    2428      REAL(wp) :: alpha1, alpha2, alpha3, alpha4 
    2529      REAL(wp) :: alpha5, alpha6, alpha7 
    26 ! 
    27         IF (Agrif_Root()) RETURN 
     30      REAL(wp), DIMENSION(jpi,jpj,jpk,jptra) :: ztra 
     31       
     32      IF (Agrif_Root()) RETURN 
    2833 
    29            Agrif_SpecialValue=0. 
    30            Agrif_UseSpecialValue = .TRUE. 
    31            tratemp = 0. 
     34      Agrif_SpecialValue=0. 
     35      Agrif_UseSpecialValue = .TRUE. 
     36      ztra = 0.e0 
    3237 
    33            Call Agrif_Bc_variable(tratemp,trn) 
    34            Agrif_UseSpecialValue = .FALSE. 
    35         
    36            rhox = Agrif_Rhox() 
    37     
    38            alpha1 = (rhox-1.)/2. 
    39            alpha2 = 1.-alpha1 
    40     
    41            alpha3 = (rhox-1)/(rhox+1) 
    42            alpha4 = 1.-alpha3 
    43     
    44            alpha6 = 2.*(rhox-1.)/(rhox+1.) 
    45            alpha7 = -(rhox-1)/(rhox+3) 
    46            alpha5 = 1. - alpha6 - alpha7 
    47     
    48 ! 
    49       If ((nbondi == 1).OR.(nbondi == 2)) THEN 
    50        
    51       tra(nlci,:,:,:) = alpha1 * tratemp(nlci,:,:,:) + alpha2 * tratemp(nlci-1,:,:,:) 
    52        
    53     Do jn=1,jptra  
    54       Do jk=1,jpk       
    55       Do jj=1,jpj 
    56         IF (umask(nlci-2,jj,jk).EQ.0.) THEN 
    57         tra(nlci-1,jj,jk,jn) = tra(nlci,jj,jk,jn) * tmask(nlci-1,jj,jk) 
    58         ELSE 
    59         tra(nlci-1,jj,jk,jn)=(alpha4*tra(nlci,jj,jk,jn)+alpha3*tra(nlci-2,jj,jk,jn))*tmask(nlci-1,jj,jk) 
    60          IF (un(nlci-2,jj,jk).GT.0.) THEN 
    61           tra(nlci-1,jj,jk,jn)=(alpha6*tra(nlci-2,jj,jk,jn)+alpha5*tra(nlci,jj,jk,jn) & 
    62                                +alpha7*tra(nlci-3,jj,jk,jn))*tmask(nlci-1,jj,jk) 
    63          ENDIF 
    64         ENDIF 
    65       End Do 
    66       enddo  
    67     END DO 
    68       ENDIF         
    69       
    70       If ((nbondj == 1).OR.(nbondj == 2)) THEN 
    71        
    72       tra(:,nlcj,:,:) = alpha1 * tratemp(:,nlcj,:,:) + alpha2 * tratemp(:,nlcj-1,:,:) 
    73   
    74    DO jn=1, jptra             
    75       Do jk=1,jpk       
    76       Do ji=1,jpi 
    77         IF (vmask(ji,nlcj-2,jk).EQ.0.) THEN 
    78         tra(ji,nlcj-1,jk,jn) = tra(ji,nlcj,jk,jn) * tmask(ji,nlcj-1,jk) 
    79         ELSE 
    80         tra(ji,nlcj-1,jk,jn)=(alpha4*tra(ji,nlcj,jk,jn)+alpha3*tra(ji,nlcj-2,jk,jn))*tmask(ji,nlcj-1,jk)         
    81           IF (vn(ji,nlcj-2,jk) .GT. 0.) THEN 
    82            tra(ji,nlcj-1,jk,jn)=(alpha6*tra(ji,nlcj-2,jk,jn)+alpha5*tra(ji,nlcj,jk,jn) & 
    83                                 +alpha7*tra(ji,nlcj-3,jk,jn))*tmask(ji,nlcj-1,jk) 
    84           ENDIF 
    85         ENDIF 
    86       End Do 
    87       enddo 
    88    END DO 
     38      CALL Agrif_Bc_variable(ztra,trn) 
     39      Agrif_UseSpecialValue = .FALSE. 
     40 
     41      zrhox = Agrif_Rhox() 
     42 
     43      alpha1 = (zrhox-1.)/2. 
     44      alpha2 = 1.-alpha1 
     45 
     46      alpha3 = (zrhox-1)/(zrhox+1) 
     47      alpha4 = 1.-alpha3 
     48 
     49      alpha6 = 2.*(zrhox-1.)/(zrhox+1.) 
     50      alpha7 = -(zrhox-1)/(zrhox+3) 
     51      alpha5 = 1. - alpha6 - alpha7 
     52 
     53      IF ((nbondi == 1).OR.(nbondi == 2)) THEN 
     54         tra(nlci,:,:,:) = alpha1 * ztra(nlci,:,:,:) + alpha2 * ztra(nlci-1,:,:,:) 
     55         DO jn=1,jptra  
     56            DO jk=1,jpk       
     57               DO jj=1,jpj 
     58                  IF (umask(nlci-2,jj,jk).EQ.0.) THEN 
     59                     tra(nlci-1,jj,jk,jn) = tra(nlci,jj,jk,jn) * tmask(nlci-1,jj,jk) 
     60                  ELSE 
     61                     tra(nlci-1,jj,jk,jn)=(alpha4*tra(nlci,jj,jk,jn)+alpha3*tra(nlci-2,jj,jk,jn))*tmask(nlci-1,jj,jk) 
     62                     IF (un(nlci-2,jj,jk).GT.0.) THEN 
     63                        tra(nlci-1,jj,jk,jn)=(alpha6*tra(nlci-2,jj,jk,jn)+alpha5*tra(nlci,jj,jk,jn) & 
     64                           +alpha7*tra(nlci-3,jj,jk,jn))*tmask(nlci-1,jj,jk) 
     65                     ENDIF 
     66                  ENDIF 
     67               END DO 
     68            END DO 
     69         END DO 
     70      ENDIF 
     71 
     72      IF ((nbondj == 1).OR.(nbondj == 2)) THEN 
     73         tra(:,nlcj,:,:) = alpha1 * ztra(:,nlcj,:,:) + alpha2 * ztra(:,nlcj-1,:,:) 
     74         DO jn=1, jptra             
     75            DO jk=1,jpk       
     76               DO ji=1,jpi 
     77                  IF (vmask(ji,nlcj-2,jk).EQ.0.) THEN 
     78                     tra(ji,nlcj-1,jk,jn) = tra(ji,nlcj,jk,jn) * tmask(ji,nlcj-1,jk) 
     79                  ELSE 
     80                     tra(ji,nlcj-1,jk,jn)=(alpha4*tra(ji,nlcj,jk,jn)+alpha3*tra(ji,nlcj-2,jk,jn))*tmask(ji,nlcj-1,jk)         
     81                     IF (vn(ji,nlcj-2,jk) .GT. 0.) THEN 
     82                        tra(ji,nlcj-1,jk,jn)=(alpha6*tra(ji,nlcj-2,jk,jn)+alpha5*tra(ji,nlcj,jk,jn) & 
     83                           +alpha7*tra(ji,nlcj-3,jk,jn))*tmask(ji,nlcj-1,jk) 
     84                     ENDIF 
     85                  ENDIF 
     86               END DO 
     87            END DO 
     88         END DO 
    8989      ENDIF 
    9090 
    9191      IF ((nbondi == -1).OR.(nbondi == 2)) THEN 
    92        
    93       tra(1,:,:,:) = alpha1 * tratemp(1,:,:,:) + alpha2 * tratemp(2,:,:,:) 
    94        
    95      DO jn=1, jptra 
    96       Do jk=1,jpk       
    97       Do jj=1,jpj 
    98         IF (umask(2,jj,jk).EQ.0.) THEN 
    99         tra(2,jj,jk,jn) = tra(1,jj,jk,jn) * tmask(2,jj,jk) 
    100         ELSE 
    101         tra(2,jj,jk,jn)=(alpha4*tra(1,jj,jk,jn)+alpha3*tra(3,jj,jk,jn))*tmask(2,jj,jk)         
    102          IF (un(2,jj,jk).LT.0.) THEN 
    103            tra(2,jj,jk,jn)=(alpha6*tra(3,jj,jk,jn)+alpha5*tra(1,jj,jk,jn) & 
     92         tra(1,:,:,:) = alpha1 * ztra(1,:,:,:) + alpha2 * ztra(2,:,:,:) 
     93         DO jn=1, jptra 
     94            DO jk=1,jpk       
     95               DO jj=1,jpj 
     96                  IF (umask(2,jj,jk).EQ.0.) THEN 
     97                     tra(2,jj,jk,jn) = tra(1,jj,jk,jn) * tmask(2,jj,jk) 
     98                  ELSE 
     99                     tra(2,jj,jk,jn)=(alpha4*tra(1,jj,jk,jn)+alpha3*tra(3,jj,jk,jn))*tmask(2,jj,jk)         
     100                     IF (un(2,jj,jk).LT.0.) THEN 
     101                        tra(2,jj,jk,jn)=(alpha6*tra(3,jj,jk,jn)+alpha5*tra(1,jj,jk,jn) & 
    104102                           +alpha7*tra(4,jj,jk,jn))*tmask(2,jj,jk) 
    105          ENDIF 
    106         ENDIF 
    107       End Do 
    108       enddo 
    109      END DO 
    110       ENDIF 
    111       IF ((nbondj == -1).OR.(nbondj == 2)) THEN 
    112        
    113       tra(:,1,:,:) = alpha1 * tratemp(:,1,:,:) + alpha2 * tratemp(:,2,:,:) 
    114              
    115    DO jn=1, jptra   
    116     Do jk=1,jpk       
    117       Do ji=1,jpi 
    118         IF (vmask(ji,2,jk).EQ.0.) THEN 
    119         tra(ji,2,jk,jn)=tra(ji,1,jk,jn) * tmask(ji,2,jk) 
    120         ELSE 
    121         tra(ji,2,jk,jn)=(alpha4*tra(ji,1,jk,jn)+alpha3*tra(ji,3,jk,jn))*tmask(ji,2,jk) 
    122           IF (vn(ji,2,jk) .LT. 0.) THEN 
    123             tra(ji,2,jk,jn)=(alpha6*tra(ji,3,jk,jn)+alpha5*tra(ji,1,jk,jn)& 
    124                             +alpha7*tra(ji,4,jk,jn))*tmask(ji,2,jk) 
    125           ENDIF 
    126         ENDIF 
    127       End Do 
    128       enddo 
    129      END DO  
     103                     ENDIF 
     104                  ENDIF 
     105               END DO 
     106            END DO 
     107         END DO 
    130108      ENDIF 
    131109 
    132       End Subroutine Agrif_trc 
    133 ! 
    134 ! 
     110      IF ((nbondj == -1).OR.(nbondj == 2)) THEN 
     111         tra(:,1,:,:) = alpha1 * ztra(:,1,:,:) + alpha2 * ztra(:,2,:,:) 
     112         DO jn=1, jptra   
     113            DO jk=1,jpk       
     114               DO ji=1,jpi 
     115                  IF (vmask(ji,2,jk).EQ.0.) THEN 
     116                     tra(ji,2,jk,jn)=tra(ji,1,jk,jn) * tmask(ji,2,jk) 
     117                  ELSE 
     118                     tra(ji,2,jk,jn)=(alpha4*tra(ji,1,jk,jn)+alpha3*tra(ji,3,jk,jn))*tmask(ji,2,jk) 
     119                     IF (vn(ji,2,jk) .LT. 0.) THEN 
     120                        tra(ji,2,jk,jn)=(alpha6*tra(ji,3,jk,jn)+alpha5*tra(ji,1,jk,jn)& 
     121                           +alpha7*tra(ji,4,jk,jn))*tmask(ji,2,jk) 
     122                     ENDIF 
     123                  ENDIF 
     124               END DO 
     125            END DO 
     126         END DO 
     127      ENDIF 
    135128 
     129   END SUBROUTINE Agrif_trc 
    136130 
    137131#else 
    138       CONTAINS 
    139       subroutine Agrif_TOP_Interp_empty 
     132CONTAINS 
     133   SUBROUTINE Agrif_TOP_Interp_empty 
     134      !!--------------------------------------------- 
     135      !!   *** ROUTINE agrif_Top_Interp_empty *** 
     136      !!--------------------------------------------- 
     137      WRITE(*,*)  'agrif_top_interp : You should not have seen this print! error?' 
     138   END SUBROUTINE Agrif_TOP_Interp_empty 
     139#endif 
     140END MODULE agrif_top_interp 
    140141 
    141       end subroutine Agrif_TOP_Interp_empty 
    142 #endif 
    143       End Module agrif_top_interp 
    144  
Note: See TracChangeset for help on using the changeset viewer.