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

Ignore:
Timestamp:
2009-08-11T14:33:40+02:00 (15 years ago)
Author:
ctlod
Message:

Doctor naming of OPA namelist variables, see ticket: #526

File:
1 edited

Legend:

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

    r1300 r1605  
    11MODULE agrif_opa_interp 
     2   !!====================================================================== 
     3   !!                   ***  MODULE  agrif_opa_interp  *** 
     4   !! AGRIF: interpolation package 
     5   !!====================================================================== 
     6   !! History :  2.0  !  2002-06  (XXX)  Original cade 
     7   !!             -   !  2005-11  (XXX)  
     8   !!            3.2  !  2009-04  (R. Benshila)  
     9   !!---------------------------------------------------------------------- 
    210#if defined key_agrif && ! defined key_off_tra 
     11   !!---------------------------------------------------------------------- 
     12   !!   'key_agrif'                                              AGRIF zoom 
     13   !!   NOT 'key_off_tra'                               NO off-line tracers 
     14   !!---------------------------------------------------------------------- 
     15   !!   Agrif_tra     : 
     16   !!   Agrif_dyn     :  
     17   !!   interpu       : 
     18   !!   interpv       : 
     19   !!---------------------------------------------------------------------- 
    320   USE par_oce 
    421   USE oce 
     
    623   USE sol_oce 
    724   USE agrif_oce 
     25   USE phycst 
     26   USE in_out_manager 
    827 
    928   IMPLICIT NONE 
    1029   PRIVATE 
    1130     
    12    PUBLIC Agrif_tra, Agrif_dyn, interpu, interpv 
    13  
    14    !!---------------------------------------------------------------------- 
    15    !!   OPA 9.0 , LOCEAN-IPSL (2006) 
     31   PUBLIC   Agrif_tra, Agrif_dyn, interpu, interpv 
     32 
     33#  include "domzgr_substitute.h90"   
     34#  include "vectopt_loop_substitute.h90" 
     35   !!---------------------------------------------------------------------- 
     36   !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009) 
    1637   !! $Id$ 
    1738   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     
    2142    
    2243   SUBROUTINE Agrif_tra 
    23       !!--------------------------------------------- 
    24       !!   *** ROUTINE Agrif_Tra *** 
    25       !!--------------------------------------------- 
    26 #  include "domzgr_substitute.h90"   
    27 #  include "vectopt_loop_substitute.h90" 
    28        
    29       INTEGER :: ji,jj,jk 
    30       REAL(wp) :: zrhox 
    31       REAL(wp) :: alpha1, alpha2, alpha3, alpha4 
    32       REAL(wp) :: alpha5, alpha6, alpha7 
    33       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zta, zsa 
     44      !!---------------------------------------------------------------------- 
     45      !!                  ***  ROUTINE Agrif_Tra  *** 
     46      !!---------------------------------------------------------------------- 
     47      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     48      REAL(wp) ::   zrhox , alpha1, alpha2, alpha3 
     49      REAL(wp) ::   alpha4, alpha5, alpha6, alpha7 
     50      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zta, zsa   ! 3D workspace 
     51      !!---------------------------------------------------------------------- 
    3452      ! 
    35       IF(Agrif_Root()) RETURN 
    36  
    37       Agrif_SpecialValue=0. 
     53      IF( Agrif_Root() )  RETURN 
     54 
     55      Agrif_SpecialValue    = 0.e0 
    3856      Agrif_UseSpecialValue = .TRUE. 
    39       zta = 0.e0 
    40       zsa = 0.e0 
    41  
    42       CALL Agrif_Bc_variable(zta,tn) 
    43       CALL Agrif_Bc_variable(zsa,sn) 
     57      zta(:,:,:) = 0.e0 
     58      zsa(:,:,:) = 0.e0 
     59 
     60      CALL Agrif_Bc_variable( zta, tn ) 
     61      CALL Agrif_Bc_variable( zsa, sn ) 
    4462      Agrif_UseSpecialValue = .FALSE. 
    4563 
    4664      zrhox = Agrif_Rhox() 
    4765 
    48       alpha1 = (zrhox-1.)/2. 
    49       alpha2 = 1.-alpha1 
    50  
    51       alpha3 = (zrhox-1)/(zrhox+1) 
    52       alpha4 = 1.-alpha3 
    53  
    54       alpha6 = 2.*(zrhox-1.)/(zrhox+1.) 
    55       alpha7 = -(zrhox-1)/(zrhox+3) 
     66      alpha1 = ( zrhox - 1. ) * 0.5 
     67      alpha2 = 1. - alpha1 
     68 
     69      alpha3 = ( zrhox - 1. ) / ( zrhox + 1. ) 
     70      alpha4 = 1. - alpha3 
     71 
     72      alpha6 = 2. * ( zrhox - 1. ) / ( zrhox + 1. ) 
     73      alpha7 =    - ( zrhox - 1. ) / ( zrhox + 3. ) 
    5674      alpha5 = 1. - alpha6 - alpha7 
    5775 
    58       IF((nbondi == 1).OR.(nbondi == 2)) THEN 
     76      IF( nbondi == 1 .OR. nbondi == 2 ) THEN 
    5977 
    6078         ta(nlci,:,:) = alpha1 * zta(nlci,:,:) + alpha2 * zta(nlci-1,:,:) 
    6179         sa(nlci,:,:) = alpha1 * zsa(nlci,:,:) + alpha2 * zsa(nlci-1,:,:) 
    6280 
    63          DO jk=1,jpk       
    64             DO jj=1,jpj 
    65                IF (umask(nlci-2,jj,jk).EQ.0.) THEN 
     81         DO jk = 1, jpkm1 
     82            DO jj = 1, jpj 
     83               IF( umask(nlci-2,jj,jk) == 0.e0 ) THEN 
    6684                  ta(nlci-1,jj,jk) = ta(nlci,jj,jk) * tmask(nlci-1,jj,jk) 
    6785                  sa(nlci-1,jj,jk) = sa(nlci,jj,jk) * tmask(nlci-1,jj,jk) 
     
    6987                  ta(nlci-1,jj,jk)=(alpha4*ta(nlci,jj,jk)+alpha3*ta(nlci-2,jj,jk))*tmask(nlci-1,jj,jk) 
    7088                  sa(nlci-1,jj,jk)=(alpha4*sa(nlci,jj,jk)+alpha3*sa(nlci-2,jj,jk))*tmask(nlci-1,jj,jk) 
    71                   IF (un(nlci-2,jj,jk).GT.0.) THEN 
     89                  IF( un(nlci-2,jj,jk) > 0.e0 ) THEN 
    7290                     ta(nlci-1,jj,jk)=( alpha6*ta(nlci-2,jj,jk)+alpha5*ta(nlci,jj,jk)  & 
    73                                       + alpha7*ta(nlci-3,jj,jk) ) * tmask(nlci-1,jj,jk) 
     91                        &             + alpha7*ta(nlci-3,jj,jk) ) * tmask(nlci-1,jj,jk) 
    7492                     sa(nlci-1,jj,jk)=( alpha6*sa(nlci-2,jj,jk)+alpha5*sa(nlci,jj,jk)  & 
    75                                       + alpha7*sa(nlci-3,jj,jk) ) * tmask(nlci-1,jj,jk) 
     93                        &             + alpha7*sa(nlci-3,jj,jk) ) * tmask(nlci-1,jj,jk) 
    7694                  ENDIF 
    7795               ENDIF 
     
    8098      ENDIF 
    8199 
    82       IF((nbondj == 1).OR.(nbondj == 2)) THEN 
     100      IF( nbondj == 1 .OR. nbondj == 2 ) THEN 
    83101 
    84102         ta(:,nlcj,:) = alpha1 * zta(:,nlcj,:) + alpha2 * zta(:,nlcj-1,:) 
    85103         sa(:,nlcj,:) = alpha1 * zsa(:,nlcj,:) + alpha2 * zsa(:,nlcj-1,:) 
    86104 
    87          DO jk=1,jpk       
    88             DO ji=1,jpi 
    89                IF (vmask(ji,nlcj-2,jk).EQ.0.) THEN 
     105         DO jk = 1, jpkm1 
     106            DO ji = 1, jpi 
     107               IF( vmask(ji,nlcj-2,jk) == 0.e0 ) THEN 
    90108                  ta(ji,nlcj-1,jk) = ta(ji,nlcj,jk) * tmask(ji,nlcj-1,jk) 
    91109                  sa(ji,nlcj-1,jk) = sa(ji,nlcj,jk) * tmask(ji,nlcj-1,jk) 
     
    93111                  ta(ji,nlcj-1,jk)=(alpha4*ta(ji,nlcj,jk)+alpha3*ta(ji,nlcj-2,jk))*tmask(ji,nlcj-1,jk)         
    94112                  sa(ji,nlcj-1,jk)=(alpha4*sa(ji,nlcj,jk)+alpha3*sa(ji,nlcj-2,jk))*tmask(ji,nlcj-1,jk) 
    95                   IF (vn(ji,nlcj-2,jk) .GT. 0.) THEN 
     113                  IF (vn(ji,nlcj-2,jk) > 0.e0 ) THEN 
    96114                     ta(ji,nlcj-1,jk)=( alpha6*ta(ji,nlcj-2,jk)+alpha5*ta(ji,nlcj,jk)  & 
    97                                       + alpha7*ta(ji,nlcj-3,jk) ) * tmask(ji,nlcj-1,jk) 
     115                        &             + alpha7*ta(ji,nlcj-3,jk) ) * tmask(ji,nlcj-1,jk) 
    98116                     sa(ji,nlcj-1,jk)=( alpha6*sa(ji,nlcj-2,jk)+alpha5*sa(ji,nlcj,jk)  & 
    99                                       + alpha7*sa(ji,nlcj-3,jk))*tmask(ji,nlcj-1,jk) 
     117                        &             + alpha7*sa(ji,nlcj-3,jk))*tmask(ji,nlcj-1,jk) 
    100118                  ENDIF 
    101119               ENDIF 
     
    104122      ENDIF 
    105123 
    106       IF((nbondi == -1).OR.(nbondi == 2)) THEN 
     124      IF( nbondi == -1 .OR. nbondi == 2 ) THEN 
    107125         ta(1,:,:) = alpha1 * zta(1,:,:) + alpha2 * zta(2,:,:) 
    108126         sa(1,:,:) = alpha1 * zsa(1,:,:) + alpha2 * zsa(2,:,:)       
    109          DO jk=1,jpk       
    110             DO jj=1,jpj 
    111                IF (umask(2,jj,jk).EQ.0.) THEN 
     127         DO jk = 1, jpkm1 
     128            DO jj = 1, jpj 
     129               IF( umask(2,jj,jk) == 0.e0 ) THEN 
    112130                  ta(2,jj,jk) = ta(1,jj,jk) * tmask(2,jj,jk) 
    113131                  sa(2,jj,jk) = sa(1,jj,jk) * tmask(2,jj,jk) 
     
    115133                  ta(2,jj,jk)=(alpha4*ta(1,jj,jk)+alpha3*ta(3,jj,jk))*tmask(2,jj,jk)         
    116134                  sa(2,jj,jk)=(alpha4*sa(1,jj,jk)+alpha3*sa(3,jj,jk))*tmask(2,jj,jk) 
    117                   IF (un(2,jj,jk).LT.0.) THEN 
     135                  IF( un(2,jj,jk) < 0.e0 ) THEN 
    118136                     ta(2,jj,jk)=(alpha6*ta(3,jj,jk)+alpha5*ta(1,jj,jk)+alpha7*ta(4,jj,jk))*tmask(2,jj,jk) 
    119137                     sa(2,jj,jk)=(alpha6*sa(3,jj,jk)+alpha5*sa(1,jj,jk)+alpha7*sa(4,jj,jk))*tmask(2,jj,jk) 
     
    124142      ENDIF 
    125143 
    126       IF((nbondj == -1).OR.(nbondj == 2)) THEN 
     144      IF( nbondj == -1 .OR. nbondj == 2 ) THEN 
    127145         ta(:,1,:) = alpha1 * zta(:,1,:) + alpha2 * zta(:,2,:) 
    128146         sa(:,1,:) = alpha1 * zsa(:,1,:) + alpha2 * zsa(:,2,:) 
    129147         DO jk=1,jpk       
    130148            DO ji=1,jpi 
    131                IF (vmask(ji,2,jk).EQ.0.) THEN 
     149               IF( vmask(ji,2,jk) == 0.e0 ) THEN 
    132150                  ta(ji,2,jk)=ta(ji,1,jk) * tmask(ji,2,jk) 
    133151                  sa(ji,2,jk)=sa(ji,1,jk) * tmask(ji,2,jk) 
     
    135153                  ta(ji,2,jk)=(alpha4*ta(ji,1,jk)+alpha3*ta(ji,3,jk))*tmask(ji,2,jk) 
    136154                  sa(ji,2,jk)=(alpha4*sa(ji,1,jk)+alpha3*sa(ji,3,jk))*tmask(ji,2,jk)  
    137                   IF (vn(ji,2,jk) .LT. 0.) THEN 
     155                  IF( vn(ji,2,jk) < 0.e0 ) THEN 
    138156                     ta(ji,2,jk)=(alpha6*ta(ji,3,jk)+alpha5*ta(ji,1,jk)+alpha7*ta(ji,4,jk))*tmask(ji,2,jk) 
    139157                     sa(ji,2,jk)=(alpha6*sa(ji,3,jk)+alpha5*sa(ji,1,jk)+alpha7*sa(ji,4,jk))*tmask(ji,2,jk) 
     
    143161         END DO 
    144162      ENDIF 
    145  
     163      ! 
    146164   END SUBROUTINE Agrif_tra 
    147165 
     166 
    148167   SUBROUTINE Agrif_dyn( kt ) 
    149       !!--------------------------------------------- 
    150       !!   *** ROUTINE Agrif_DYN *** 
    151       !!--------------------------------------------- 
    152       USE phycst 
    153       USE in_out_manager 
    154  
    155 #  include "domzgr_substitute.h90" 
    156        
    157       INTEGER, INTENT(in) :: kt 
    158  
     168      !!---------------------------------------------------------------------- 
     169      !!                  ***  ROUTINE Agrif_DYN  *** 
     170      !!----------------------------------------------------------------------   
     171      INTEGER, INTENT(in) ::   kt 
     172      !! 
     173      INTEGER :: ji,jj,jk 
    159174      REAL(wp) :: timeref 
    160175      REAL(wp) :: z2dt, znugdt 
     
    163178      REAL(wp), DIMENSION(jpi,jpj) :: spgu1,spgv1 
    164179      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zua, zva 
    165       INTEGER :: ji,jj,jk 
    166  
    167       IF (Agrif_Root()) RETURN 
     180      !!----------------------------------------------------------------------   
     181 
     182      IF( Agrif_Root() )  RETURN 
    168183 
    169184      zrhox = Agrif_Rhox() 
     
    177192      IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt 
    178193      ! coefficients 
    179       znugdt =  rnu * grav * z2dt     
     194      znugdt =  grav * z2dt     
    180195 
    181196      Agrif_SpecialValue=0. 
     
    505520   END SUBROUTINE Agrif_dyn 
    506521 
     522 
    507523   SUBROUTINE interpu(tabres,i1,i2,j1,j2,k1,k2) 
    508       !!--------------------------------------------- 
    509       !!   *** ROUTINE interpu *** 
    510       !!--------------------------------------------- 
    511 #  include "domzgr_substitute.h90"    
    512      
     524      !!---------------------------------------------------------------------- 
     525      !!                  ***  ROUTINE interpu  *** 
     526      !!----------------------------------------------------------------------   
    513527      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 
    514528      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres 
    515  
     529      !! 
    516530      INTEGER :: ji,jj,jk 
     531      !!----------------------------------------------------------------------   
    517532 
    518533      DO jk=k1,k2 
     
    528543   END SUBROUTINE interpu 
    529544 
     545 
    530546   SUBROUTINE interpu2d(tabres,i1,i2,j1,j2) 
    531       !!--------------------------------------------- 
    532       !!   *** ROUTINE interpu2d *** 
    533       !!--------------------------------------------- 
    534  
     547      !!---------------------------------------------------------------------- 
     548      !!                  ***  ROUTINE interpu2d  *** 
     549      !!----------------------------------------------------------------------   
    535550      INTEGER, INTENT(in) :: i1,i2,j1,j2 
    536551      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 
    537  
     552      !! 
    538553      INTEGER :: ji,jj 
     554      !!----------------------------------------------------------------------   
    539555 
    540556      DO jj=j1,j2 
     
    547563   END SUBROUTINE interpu2d 
    548564 
     565 
    549566   SUBROUTINE interpv(tabres,i1,i2,j1,j2,k1,k2) 
    550       !!--------------------------------------------- 
    551       !!   *** ROUTINE interpv *** 
    552       !!--------------------------------------------- 
    553 #  include "domzgr_substitute.h90"  
    554        
     567      !!---------------------------------------------------------------------- 
     568      !!                  ***  ROUTINE interpv  *** 
     569      !!----------------------------------------------------------------------   
    555570      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 
    556571      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres 
    557  
     572      !! 
    558573      INTEGER :: ji, jj, jk 
     574      !!----------------------------------------------------------------------   
    559575 
    560576      DO jk=k1,k2 
     
    571587   END SUBROUTINE interpv 
    572588 
     589 
    573590   SUBROUTINE interpv2d(tabres,i1,i2,j1,j2) 
    574       !!--------------------------------------------- 
    575       !!   *** ROUTINE interpv2d *** 
    576       !!--------------------------------------------- 
    577  
     591      !!---------------------------------------------------------------------- 
     592      !!                  ***  ROUTINE interpu2d  *** 
     593      !!----------------------------------------------------------------------   
    578594      INTEGER, INTENT(in) :: i1,i2,j1,j2 
    579595      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 
    580  
     596      !! 
    581597      INTEGER :: ji,jj 
     598      !!----------------------------------------------------------------------   
    582599 
    583600      DO jj=j1,j2 
     
    591608 
    592609#else 
     610   !!---------------------------------------------------------------------- 
     611   !!   Empty module                                          no AGRIF zoom 
     612   !!---------------------------------------------------------------------- 
    593613CONTAINS 
    594  
    595614   SUBROUTINE Agrif_OPA_Interp_empty 
    596       !!--------------------------------------------- 
    597       !!   *** ROUTINE agrif_OPA_Interp_empty *** 
    598       !!--------------------------------------------- 
    599615      WRITE(*,*)  'agrif_opa_interp : You should not have seen this print! error?' 
    600616   END SUBROUTINE Agrif_OPA_Interp_empty 
    601617#endif 
     618 
     619   !!====================================================================== 
    602620END MODULE agrif_opa_interp 
Note: See TracChangeset for help on using the changeset viewer.