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 7953 for branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/NST_SRC/agrif_lim3_interp.F90 – NEMO

Ignore:
Timestamp:
2017-04-23T09:30:41+02:00 (7 years ago)
Author:
gm
Message:

#1880 (HPC-09): add zdfphy (the ZDF manager) + remove all key_...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/NST_SRC/agrif_lim3_interp.F90

    r7761 r7953  
    2828   PRIVATE 
    2929 
    30    PUBLIC agrif_interp_lim3 
     30   PUBLIC   agrif_interp_lim3   ! called by ??? 
    3131 
    3232   !!---------------------------------------------------------------------- 
     
    4646      !!  computing factor for time interpolation 
    4747      !!----------------------------------------------------------------------- 
    48       CHARACTER(len=1), INTENT( in )           :: cd_type 
    49       INTEGER         , INTENT( in ), OPTIONAL :: kiter, kitermax 
    50       !! 
    51       REAL(wp) :: zbeta 
     48      CHARACTER(len=1), INTENT(in   )           ::  cd_type 
     49      INTEGER         , INTENT(in   ), OPTIONAL ::  kiter, kitermax 
     50      !! 
     51      REAL(wp) ::   zbeta   ! local scalar 
    5252      !!----------------------------------------------------------------------- 
    5353      ! 
    5454      IF( Agrif_Root() )  RETURN 
    5555      ! 
    56       SELECT CASE(cd_type) 
     56      SELECT CASE( cd_type ) 
    5757      CASE('U','V') 
    5858         IF( PRESENT( kiter ) ) THEN  ! interpolation at the child sub-time step (only for ice rheology) 
     
    6666      END SELECT 
    6767      ! 
    68       Agrif_SpecialValue=-9999. 
     68      Agrif_SpecialValue    = -9999. 
    6969      Agrif_UseSpecialValue = .TRUE. 
    70       SELECT CASE(cd_type) 
    71       CASE('U') 
    72          CALL Agrif_Bc_variable( u_ice_id  , procname=interp_u_ice  , calledweight=zbeta ) 
    73       CASE('V') 
    74          CALL Agrif_Bc_variable( v_ice_id  , procname=interp_v_ice  , calledweight=zbeta ) 
    75       CASE('T') 
    76          CALL Agrif_Bc_variable( tra_ice_id, procname=interp_tra_ice, calledweight=zbeta ) 
     70      SELECT CASE( cd_type ) 
     71      CASE('U')   ;   CALL Agrif_Bc_variable( u_ice_id  , procname=interp_u_ice  , calledweight=zbeta ) 
     72      CASE('V')   ;   CALL Agrif_Bc_variable( v_ice_id  , procname=interp_v_ice  , calledweight=zbeta ) 
     73      CASE('T')   ;   CALL Agrif_Bc_variable( tra_ice_id, procname=interp_tra_ice, calledweight=zbeta ) 
    7774      END SELECT 
    78       Agrif_SpecialValue=0. 
     75      Agrif_SpecialValue    = 0._wp 
    7976      Agrif_UseSpecialValue = .FALSE. 
    8077      ! 
    8178   END SUBROUTINE agrif_interp_lim3 
    8279 
    83    !!------------------ 
    84    !! Local subroutines 
    85    !!------------------ 
     80 
    8681   SUBROUTINE interp_u_ice( ptab, i1, i2, j1, j2, before ) 
    8782      !!----------------------------------------------------------------------- 
     
    9287      !! put -9999 WHERE the parent grid is masked. The child solution will be found in the 9(?) points around 
    9388      !!----------------------------------------------------------------------- 
    94       INTEGER , INTENT(in) :: i1, i2, j1, j2 
    95       REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: ptab 
    96       LOGICAL , INTENT(in) :: before 
    97       !! 
    98       REAL(wp) :: zrhoy 
     89      INTEGER                         , INTENT(in   ) ::  i1, i2, j1, j2 
     90      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   ptab 
     91      LOGICAL                         , INTENT(in   ) ::  before 
     92      !! 
     93      REAL(wp) ::   zrhoy   ! local scalar 
    9994      !!----------------------------------------------------------------------- 
    10095      ! 
     
    118113      !! put -9999 WHERE the parent grid is masked. The child solution will be found in the 9(?) points around 
    119114      !!-----------------------------------------------------------------------       
    120       INTEGER , INTENT(in) :: i1, i2, j1, j2 
    121       REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: ptab 
    122       LOGICAL , INTENT(in) :: before 
    123       !! 
    124       REAL(wp) :: zrhox 
     115      INTEGER                         , INTENT(in   ) ::  i1, i2, j1, j2 
     116      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   ptab 
     117      LOGICAL                         , INTENT(in   ) ::  before 
     118      !! 
     119      REAL(wp) ::   zrhox   ! local scalar 
    125120      !!----------------------------------------------------------------------- 
    126121      ! 
     
    144139      !! put -9999 WHERE the parent grid is masked. The child solution will be found in the 9(?) points around 
    145140      !!----------------------------------------------------------------------- 
    146       REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: ptab 
    147       INTEGER , INTENT(in) :: i1, i2, j1, j2, k1, k2 
    148       LOGICAL , INTENT(in) :: before 
    149       INTEGER , INTENT(in) :: nb, ndir 
    150       !! 
    151       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztab 
     141      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) ::   ptab 
     142      INTEGER                               , INTENT(in   ) ::   i1, i2, j1, j2, k1, k2 
     143      LOGICAL                               , INTENT(in   ) ::   before 
     144      INTEGER                               , INTENT(in   ) ::   nb, ndir 
     145      !! 
    152146      INTEGER  ::   ji, jj, jk, jl, jm 
    153147      INTEGER  ::   imin, imax, jmin, jmax 
     148      LOGICAL  ::   western_side, eastern_side, northern_side, southern_side 
    154149      REAL(wp) ::   zrhox, z1, z2, z3, z4, z5, z6, z7 
    155       LOGICAL  ::   western_side, eastern_side, northern_side, southern_side 
    156  
    157       !!----------------------------------------------------------------------- 
    158       ! tracers are not multiplied by grid cell here => before: * e12t ; after: * r1_e12t / rhox / rhoy 
     150      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztab 
     151      !!----------------------------------------------------------------------- 
     152      ! tracers are not multiplied by grid cell here => before: * e1e2t ; after: * r1_e1e2t / rhox / rhoy 
    159153      ! and it is ok since we conserve tracers (same as in the ocean). 
    160154      ALLOCATE( ztab(SIZE(a_i_b,1),SIZE(a_i_b,2),SIZE(ptab,3)) ) 
     
    163157         jm = 1 
    164158         DO jl = 1, jpl 
    165             ptab(i1:i2,j1:j2,jm) = a_i_b  (i1:i2,j1:j2,jl) ; jm = jm + 1 
    166             ptab(i1:i2,j1:j2,jm) = v_i_b  (i1:i2,j1:j2,jl) ; jm = jm + 1 
    167             ptab(i1:i2,j1:j2,jm) = v_s_b  (i1:i2,j1:j2,jl) ; jm = jm + 1 
    168             ptab(i1:i2,j1:j2,jm) = smv_i_b(i1:i2,j1:j2,jl) ; jm = jm + 1 
    169             ptab(i1:i2,j1:j2,jm) = oa_i_b (i1:i2,j1:j2,jl) ; jm = jm + 1 
     159            ptab(i1:i2,j1:j2,jm) = a_i_b  (i1:i2,j1:j2,jl)   ;  jm = jm + 1 
     160            ptab(i1:i2,j1:j2,jm) = v_i_b  (i1:i2,j1:j2,jl)   ;  jm = jm + 1 
     161            ptab(i1:i2,j1:j2,jm) = v_s_b  (i1:i2,j1:j2,jl)   ;  jm = jm + 1 
     162            ptab(i1:i2,j1:j2,jm) = smv_i_b(i1:i2,j1:j2,jl)   ;  jm = jm + 1 
     163            ptab(i1:i2,j1:j2,jm) = oa_i_b (i1:i2,j1:j2,jl)   ;  jm = jm + 1 
    170164            DO jk = 1, nlay_s 
    171                ptab(i1:i2,j1:j2,jm) = e_s_b(i1:i2,j1:j2,jk,jl) ; jm = jm + 1 
    172             ENDDO 
     165               ptab(i1:i2,j1:j2,jm) = e_s_b(i1:i2,j1:j2,jk,jl)   ;  jm = jm + 1 
     166            END DO 
    173167            DO jk = 1, nlay_i 
    174                ptab(i1:i2,j1:j2,jm) = e_i_b(i1:i2,j1:j2,jk,jl) ; jm = jm + 1 
    175             ENDDO 
    176          ENDDO 
     168               ptab(i1:i2,j1:j2,jm) = e_i_b(i1:i2,j1:j2,jk,jl)   ;  jm = jm + 1 
     169            END DO 
     170         END DO 
    177171          
    178172         DO jk = k1, k2 
    179             WHERE( tmask(i1:i2,j1:j2,1) == 0. )  ptab(i1:i2,j1:j2,jk) = -9999. 
    180          ENDDO 
     173            WHERE( tmask(i1:i2,j1:j2,1) == 0._wp )   ptab(i1:i2,j1:j2,jk) = -9999. 
     174         END DO 
    181175          
    182176      ELSE               ! child grid 
     
    184178         jm = 1 
    185179         DO jl = 1, jpl 
    186             a_i  (i1:i2,j1:j2,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1) ; jm = jm + 1 
    187             v_i  (i1:i2,j1:j2,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1) ; jm = jm + 1 
    188             v_s  (i1:i2,j1:j2,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1) ; jm = jm + 1 
    189             smv_i(i1:i2,j1:j2,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1) ; jm = jm + 1 
    190             oa_i (i1:i2,j1:j2,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1) ; jm = jm + 1 
     180            a_i  (i1:i2,j1:j2,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1)   ;  jm = jm + 1 
     181            v_i  (i1:i2,j1:j2,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1)   ;  jm = jm + 1 
     182            v_s  (i1:i2,j1:j2,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1)   ;  jm = jm + 1 
     183            smv_i(i1:i2,j1:j2,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1)   ;  jm = jm + 1 
     184            oa_i (i1:i2,j1:j2,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1)   ;  jm = jm + 1 
    191185            DO jk = 1, nlay_s 
    192                e_s(i1:i2,j1:j2,jk,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1) ; jm = jm + 1 
    193             ENDDO 
     186               e_s(i1:i2,j1:j2,jk,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1)   ;  jm = jm + 1 
     187            END DO 
    194188            DO jk = 1, nlay_i 
    195                e_i(i1:i2,j1:j2,jk,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1) ; jm = jm + 1 
    196             ENDDO 
    197          ENDDO 
     189               e_i(i1:i2,j1:j2,jk,jl) = ptab(i1:i2,j1:j2,jm) * tmask(i1:i2,j1:j2,1)   ;  jm = jm + 1 
     190            END DO 
     191         END DO 
    198192 
    199193!! ==> this is a more complex interpolation since we mix solutions over a couple of grid points 
     
    319313         et_s(i1:i2,j1:j2)  = SUM( SUM( e_s(i1:i2,j1:j2,:,:), dim=4 ), dim=3 ) 
    320314         et_i(i1:i2,j1:j2)  = SUM( SUM( e_i(i1:i2,j1:j2,:,:), dim=4 ), dim=3 ) 
    321  
     315         ! 
    322316      ENDIF 
    323317       
     
    327321 
    328322#else 
     323   !!---------------------------------------------------------------------- 
     324   !!   Empty module                                             no sea-ice 
     325   !!---------------------------------------------------------------------- 
    329326CONTAINS 
    330327   SUBROUTINE agrif_lim3_interp_empty 
    331       !!--------------------------------------------- 
    332       !!   *** ROUTINE agrif_lim3_interp_empty *** 
    333       !!--------------------------------------------- 
    334328      WRITE(*,*)  'agrif_lim3_interp : You should not have seen this print! error?' 
    335329   END SUBROUTINE agrif_lim3_interp_empty 
    336330#endif 
     331 
     332   !!====================================================================== 
    337333END MODULE agrif_lim3_interp 
Note: See TracChangeset for help on using the changeset viewer.