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 14623 for utils/tools/DOMAINcfg/src/lbclnk.F90 – NEMO

Ignore:
Timestamp:
2021-03-21T19:40:22+01:00 (3 years ago)
Author:
ldebreu
Message:

AGFdomcfg: 1) Update DOMAINcfg to be compliant with the removal of halo cells 2) Update most of the LBC ... subroutines to a recent NEMO 4 version #2638

File:
1 edited

Legend:

Unmodified
Added
Removed
  • utils/tools/DOMAINcfg/src/lbclnk.F90

    r13204 r14623  
    77   !!   NEMO     1.0  ! 2002-09  (G. Madec)  F90: Free form and module 
    88   !!            3.2  ! 2009-03  (R. Benshila)  External north fold treatment   
    9    !!            3.5  ! 2012     (S.Mocavero, I. Epicoco)  optimization of BDY comm. 
     9   !!            3.5  ! 2012     (S.Mocavero, I. Epicoco)  optimization of BDY comm. via lbc_bdy_lnk and lbc_obc_lnk 
    1010   !!            3.4  ! 2012-12  (R. Bourdalle-Badie, G. Reffray)  add a C1D case   
    1111   !!            3.6  ! 2015-06  (O. Tintó and M. Castrillo)  add lbc_lnk_multi   
     
    1414   !!             -   ! 2017-05  (G. Madec) create generic.h90 files to generate all lbc and north fold routines 
    1515   !!---------------------------------------------------------------------- 
    16 #if defined key_mpp_mpi 
    17    !!---------------------------------------------------------------------- 
    18    !!   'key_mpp_mpi'             MPI massively parallel processing library 
    19    !!---------------------------------------------------------------------- 
    2016   !!           define the generic interfaces of lib_mpp routines 
    2117   !!---------------------------------------------------------------------- 
    2218   !!   lbc_lnk       : generic interface for mpp_lnk_3d and mpp_lnk_2d routines defined in lib_mpp 
    23    !!---------------------------------------------------------------------- 
    24    USE par_oce        ! ocean dynamics and tracers    
     19   !!   lbc_bdy_lnk   : generic interface for mpp_lnk_bdy_2d and mpp_lnk_bdy_3d routines defined in lib_mpp 
     20   !!---------------------------------------------------------------------- 
     21   USE dom_oce        ! ocean space and time domain 
    2522   USE lib_mpp        ! distributed memory computing library 
    2623   USE lbcnfd         ! north fold 
     24   USE in_out_manager ! I/O manager 
     25 
     26   IMPLICIT NONE 
     27   PRIVATE 
    2728 
    2829   INTERFACE lbc_lnk 
    29       MODULE PROCEDURE   mpp_lnk_2d      , mpp_lnk_3d      , mpp_lnk_4d 
     30      MODULE PROCEDURE   mpp_lnk_2d_sp   , mpp_lnk_3d_sp   , mpp_lnk_4d_sp 
     31      MODULE PROCEDURE   mpp_lnk_2d_dp   , mpp_lnk_3d_dp   , mpp_lnk_4d_dp 
    3032   END INTERFACE 
    3133   INTERFACE lbc_lnk_ptr 
    32       MODULE PROCEDURE   mpp_lnk_2d_ptr  , mpp_lnk_3d_ptr  , mpp_lnk_4d_ptr 
     34      MODULE PROCEDURE   mpp_lnk_2d_ptr_sp , mpp_lnk_3d_ptr_sp , mpp_lnk_4d_ptr_sp 
     35      MODULE PROCEDURE   mpp_lnk_2d_ptr_dp , mpp_lnk_3d_ptr_dp , mpp_lnk_4d_ptr_dp 
    3336   END INTERFACE 
    3437   INTERFACE lbc_lnk_multi 
    35       MODULE PROCEDURE   lbc_lnk_2d_multi, lbc_lnk_3d_multi, lbc_lnk_4d_multi 
     38      MODULE PROCEDURE   lbc_lnk_2d_multi_sp , lbc_lnk_3d_multi_sp, lbc_lnk_4d_multi_sp 
     39      MODULE PROCEDURE   lbc_lnk_2d_multi_dp , lbc_lnk_3d_multi_dp, lbc_lnk_4d_multi_dp 
    3640   END INTERFACE 
    3741   ! 
    3842   INTERFACE lbc_lnk_icb 
    39       MODULE PROCEDURE mpp_lnk_2d_icb 
     43      MODULE PROCEDURE mpp_lnk_2d_icb_dp, mpp_lnk_2d_icb_sp 
     44   END INTERFACE 
     45 
     46   INTERFACE mpp_nfd 
     47      MODULE PROCEDURE   mpp_nfd_2d_sp    , mpp_nfd_3d_sp    , mpp_nfd_4d_sp 
     48      MODULE PROCEDURE   mpp_nfd_2d_dp    , mpp_nfd_3d_dp    , mpp_nfd_4d_dp 
     49      MODULE PROCEDURE   mpp_nfd_2d_ptr_sp, mpp_nfd_3d_ptr_sp, mpp_nfd_4d_ptr_sp 
     50      MODULE PROCEDURE   mpp_nfd_2d_ptr_dp, mpp_nfd_3d_ptr_dp, mpp_nfd_4d_ptr_dp 
     51       
    4052   END INTERFACE 
    4153 
     
    4456   PUBLIC   lbc_lnk_icb   ! iceberg lateral boundary conditions 
    4557 
     58#if   defined key_mpp_mpi 
     59!$AGRIF_DO_NOT_TREAT 
     60   INCLUDE 'mpif.h' 
     61!$AGRIF_END_DO_NOT_TREAT 
     62#endif 
     63 
     64   INTEGER, PUBLIC, PARAMETER ::   jpfillnothing = 1 
     65   INTEGER, PUBLIC, PARAMETER ::   jpfillcst     = 2 
     66   INTEGER, PUBLIC, PARAMETER ::   jpfillcopy    = 3 
     67   INTEGER, PUBLIC, PARAMETER ::   jpfillperio   = 4 
     68   INTEGER, PUBLIC, PARAMETER ::   jpfillmpi     = 5 
     69 
     70   !! * Substitutions 
     71#  include "do_loop_substitute.h90" 
    4672   !!---------------------------------------------------------------------- 
    4773   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
    48    !! $Id: lbclnk.F90 10425 2018-12-19 21:54:16Z smasson $ 
     74   !! $Id: lbclnk.F90 13226 2020-07-02 14:24:31Z orioltp $ 
    4975   !! Software governed by the CeCILL license (see ./LICENSE) 
    5076   !!---------------------------------------------------------------------- 
    5177CONTAINS 
    52  
    53 #else 
    54    !!---------------------------------------------------------------------- 
    55    !!   Default option                              shared memory computing 
    56    !!---------------------------------------------------------------------- 
    57    !!                routines setting the appropriate values 
    58    !!         on first and last row and column of the global domain 
    59    !!---------------------------------------------------------------------- 
    60    !!   lbc_lnk_sum_3d: compute sum over the halos on a 3D variable on ocean mesh 
    61    !!   lbc_lnk_sum_3d: compute sum over the halos on a 2D variable on ocean mesh 
    62    !!   lbc_lnk       : generic interface for lbc_lnk_3d and lbc_lnk_2d 
    63    !!   lbc_lnk_3d    : set the lateral boundary condition on a 3D variable on ocean mesh 
    64    !!   lbc_lnk_2d    : set the lateral boundary condition on a 2D variable on ocean mesh 
    65    !!---------------------------------------------------------------------- 
    66    USE dom_oce        ! ocean space and time domain  
    67    USE in_out_manager ! I/O manager 
    68    USE lbcnfd         ! north fold 
    69  
    70    IMPLICIT NONE 
    71    PRIVATE 
    72  
    73    INTERFACE lbc_lnk 
    74       MODULE PROCEDURE   lbc_lnk_2d      , lbc_lnk_3d      , lbc_lnk_4d 
    75    END INTERFACE 
    76    INTERFACE lbc_lnk_ptr 
    77       MODULE PROCEDURE   lbc_lnk_2d_ptr  , lbc_lnk_3d_ptr  , lbc_lnk_4d_ptr 
    78    END INTERFACE 
    79    INTERFACE lbc_lnk_multi 
    80       MODULE PROCEDURE   lbc_lnk_2d_multi, lbc_lnk_3d_multi, lbc_lnk_4d_multi 
    81    END INTERFACE 
    82    ! 
    83    INTERFACE lbc_lnk_icb 
    84       MODULE PROCEDURE lbc_lnk_2d_icb 
    85    END INTERFACE 
    86     
    87    PUBLIC   lbc_lnk       ! ocean/ice  lateral boundary conditions 
    88    PUBLIC   lbc_lnk_multi ! modified ocean/ice lateral boundary conditions 
    89    PUBLIC   lbc_lnk_icb   ! iceberg lateral boundary conditions 
    90     
    91    !!---------------------------------------------------------------------- 
    92    !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
    93    !! $Id: lbclnk.F90 10425 2018-12-19 21:54:16Z smasson $ 
    94    !! Software governed by the CeCILL license (see ./LICENSE) 
    95    !!---------------------------------------------------------------------- 
    96 CONTAINS 
    97  
    98    !!====================================================================== 
    99    !!   Default option                           3D shared memory computing 
    100    !!====================================================================== 
    101    !!          routines setting land point, or east-west cyclic, 
    102    !!             or north-south cyclic, or north fold values 
    103    !!         on first and last row and column of the global domain 
    104    !!---------------------------------------------------------------------- 
    105  
    106    !!---------------------------------------------------------------------- 
    107    !!                   ***  routine lbc_lnk_(2,3,4)d  *** 
    108    !! 
    109    !!   * Argument : dummy argument use in lbc_lnk_... routines 
    110    !!                ptab   :   array or pointer of arrays on which the boundary condition is applied 
    111    !!                cd_nat :   nature of array grid-points 
    112    !!                psgn   :   sign used across the north fold boundary 
    113    !!                kfld   :   optional, number of pt3d arrays 
    114    !!                cd_mpp :   optional, fill the overlap area only 
    115    !!                pval   :   optional, background value (used at closed boundaries) 
    116    !!---------------------------------------------------------------------- 
    117    ! 
    118    !                       !==  2D array and array of 2D pointer  ==! 
    119    ! 
    120 #  define DIM_2d 
    121 #     define ROUTINE_LNK           lbc_lnk_2d 
    122 #     include "lbc_lnk_generic.h90" 
    123 #     undef ROUTINE_LNK 
    124 #     define MULTI 
    125 #     define ROUTINE_LNK           lbc_lnk_2d_ptr 
    126 #     include "lbc_lnk_generic.h90" 
    127 #     undef ROUTINE_LNK 
    128 #     undef MULTI 
    129 #  undef DIM_2d 
    130    ! 
    131    !                       !==  3D array and array of 3D pointer  ==! 
    132    ! 
    133 #  define DIM_3d 
    134 #     define ROUTINE_LNK           lbc_lnk_3d 
    135 #     include "lbc_lnk_generic.h90" 
    136 #     undef ROUTINE_LNK 
    137 #     define MULTI 
    138 #     define ROUTINE_LNK           lbc_lnk_3d_ptr 
    139 #     include "lbc_lnk_generic.h90" 
    140 #     undef ROUTINE_LNK 
    141 #     undef MULTI 
    142 #  undef DIM_3d 
    143    ! 
    144    !                       !==  4D array and array of 4D pointer  ==! 
    145    ! 
    146 #  define DIM_4d 
    147 #     define ROUTINE_LNK           lbc_lnk_4d 
    148 #     include "lbc_lnk_generic.h90" 
    149 #     undef ROUTINE_LNK 
    150 #     define MULTI 
    151 #     define ROUTINE_LNK           lbc_lnk_4d_ptr 
    152 #     include "lbc_lnk_generic.h90" 
    153 #     undef ROUTINE_LNK 
    154 #     undef MULTI 
    155 #  undef DIM_4d 
    156     
    157    !!====================================================================== 
    158    !!   identical routines in both C1D and shared memory computing 
    159    !!====================================================================== 
    160  
    161    !!---------------------------------------------------------------------- 
    162  
    163 !!gm  This routine should be removed with an optional halos size added in argument of generic routines 
    164  
    165    SUBROUTINE lbc_lnk_2d_icb( cdname, pt2d, cd_type, psgn, ki, kj ) 
    166       !!---------------------------------------------------------------------- 
    167       CHARACTER(len=*)        , INTENT(in   ) ::   cdname      ! name of the calling subroutine 
    168       REAL(wp), DIMENSION(:,:), INTENT(inout) ::   pt2d      ! 2D array on which the lbc is applied 
    169       CHARACTER(len=1)        , INTENT(in   ) ::   cd_type   ! nature of pt3d grid-points 
    170       REAL(wp)                , INTENT(in   ) ::   psgn      ! sign used across north fold  
    171       INTEGER                 , INTENT(in   ) ::   ki, kj    ! sizes of extra halo (not needed in non-mpp) 
    172       !!---------------------------------------------------------------------- 
    173       CALL lbc_lnk_2d( cdname, pt2d, cd_type, psgn ) 
    174    END SUBROUTINE lbc_lnk_2d_icb 
    175 !!gm end 
    176  
    177 #endif 
    178  
    179    !!====================================================================== 
    180    !!   identical routines in both distributed and shared memory computing 
    181    !!====================================================================== 
    18278 
    18379   !!---------------------------------------------------------------------- 
     
    20298   !!---------------------------------------------------------------------- 
    20399 
    204 #  define DIM_2d 
    205 #     define ROUTINE_MULTI          lbc_lnk_2d_multi 
    206 #     define ROUTINE_LOAD           load_ptr_2d 
    207 #     include "lbc_lnk_multi_generic.h90" 
    208 #     undef ROUTINE_MULTI 
    209 #     undef ROUTINE_LOAD 
    210 #  undef DIM_2d 
    211  
    212  
    213 #  define DIM_3d 
    214 #     define ROUTINE_MULTI          lbc_lnk_3d_multi 
    215 #     define ROUTINE_LOAD           load_ptr_3d 
    216 #     include "lbc_lnk_multi_generic.h90" 
    217 #     undef ROUTINE_MULTI 
    218 #     undef ROUTINE_LOAD 
    219 #  undef DIM_3d 
    220  
    221  
    222 #  define DIM_4d 
    223 #     define ROUTINE_MULTI          lbc_lnk_4d_multi 
    224 #     define ROUTINE_LOAD           load_ptr_4d 
    225 #     include "lbc_lnk_multi_generic.h90" 
    226 #     undef ROUTINE_MULTI 
    227 #     undef ROUTINE_LOAD 
     100   !! 
     101   !!   ----   SINGLE PRECISION VERSIONS 
     102   !! 
     103#  define SINGLE_PRECISION 
     104#  define DIM_2d 
     105#     define ROUTINE_LOAD           load_ptr_2d_sp 
     106#     define ROUTINE_MULTI          lbc_lnk_2d_multi_sp 
     107#     include "lbc_lnk_multi_generic.h90" 
     108#     undef ROUTINE_MULTI 
     109#     undef ROUTINE_LOAD 
     110#  undef DIM_2d 
     111 
     112#  define DIM_3d 
     113#     define ROUTINE_LOAD           load_ptr_3d_sp 
     114#     define ROUTINE_MULTI          lbc_lnk_3d_multi_sp 
     115#     include "lbc_lnk_multi_generic.h90" 
     116#     undef ROUTINE_MULTI 
     117#     undef ROUTINE_LOAD 
     118#  undef DIM_3d 
     119 
     120#  define DIM_4d 
     121#     define ROUTINE_LOAD           load_ptr_4d_sp 
     122#     define ROUTINE_MULTI          lbc_lnk_4d_multi_sp 
     123#     include "lbc_lnk_multi_generic.h90" 
     124#     undef ROUTINE_MULTI 
     125#     undef ROUTINE_LOAD 
     126#  undef DIM_4d 
     127#  undef SINGLE_PRECISION 
     128   !! 
     129   !!   ----   DOUBLE PRECISION VERSIONS 
     130   !! 
     131 
     132#  define DIM_2d 
     133#     define ROUTINE_LOAD           load_ptr_2d_dp 
     134#     define ROUTINE_MULTI          lbc_lnk_2d_multi_dp 
     135#     include "lbc_lnk_multi_generic.h90" 
     136#     undef ROUTINE_MULTI 
     137#     undef ROUTINE_LOAD 
     138#  undef DIM_2d 
     139 
     140#  define DIM_3d 
     141#     define ROUTINE_LOAD           load_ptr_3d_dp 
     142#     define ROUTINE_MULTI          lbc_lnk_3d_multi_dp 
     143#     include "lbc_lnk_multi_generic.h90" 
     144#     undef ROUTINE_MULTI 
     145#     undef ROUTINE_LOAD 
     146#  undef DIM_3d 
     147 
     148#  define DIM_4d 
     149#     define ROUTINE_LOAD           load_ptr_4d_dp 
     150#     define ROUTINE_MULTI          lbc_lnk_4d_multi_dp 
     151#     include "lbc_lnk_multi_generic.h90" 
     152#     undef ROUTINE_MULTI 
     153#     undef ROUTINE_LOAD 
     154#  undef DIM_4d 
     155 
     156   !!---------------------------------------------------------------------- 
     157   !!                   ***  routine mpp_lnk_(2,3,4)d  *** 
     158   !! 
     159   !!   * Argument : dummy argument use in mpp_lnk_... routines 
     160   !!                ptab      :   array or pointer of arrays on which the boundary condition is applied 
     161   !!                cd_nat    :   nature of array grid-points 
     162   !!                psgn      :   sign used across the north fold boundary 
     163   !!                kfld      :   optional, number of pt3d arrays 
     164   !!                kfillmode :   optional, method to be use to fill the halos (see jpfill* variables) 
     165   !!                pfillval  :   optional, background value (used with jpfillcopy) 
     166   !!---------------------------------------------------------------------- 
     167   ! 
     168   !                       !==  2D array and array of 2D pointer  ==! 
     169   ! 
     170   !! 
     171   !!   ----   SINGLE PRECISION VERSIONS 
     172   !! 
     173# define SINGLE_PRECISION 
     174#  define DIM_2d 
     175#     define ROUTINE_LNK           mpp_lnk_2d_sp 
     176#     include "mpp_lnk_generic.h90" 
     177#     undef ROUTINE_LNK 
     178#     define MULTI 
     179#     define ROUTINE_LNK           mpp_lnk_2d_ptr_sp 
     180#     include "mpp_lnk_generic.h90" 
     181#     undef ROUTINE_LNK 
     182#     undef MULTI 
     183#  undef DIM_2d 
     184   ! 
     185   !                       !==  3D array and array of 3D pointer  ==! 
     186   ! 
     187#  define DIM_3d 
     188#     define ROUTINE_LNK           mpp_lnk_3d_sp 
     189#     include "mpp_lnk_generic.h90" 
     190#     undef ROUTINE_LNK 
     191#     define MULTI 
     192#     define ROUTINE_LNK           mpp_lnk_3d_ptr_sp 
     193#     include "mpp_lnk_generic.h90" 
     194#     undef ROUTINE_LNK 
     195#     undef MULTI 
     196#  undef DIM_3d 
     197   ! 
     198   !                       !==  4D array and array of 4D pointer  ==! 
     199   ! 
     200#  define DIM_4d 
     201#     define ROUTINE_LNK           mpp_lnk_4d_sp 
     202#     include "mpp_lnk_generic.h90" 
     203#     undef ROUTINE_LNK 
     204#     define MULTI 
     205#     define ROUTINE_LNK           mpp_lnk_4d_ptr_sp 
     206#     include "mpp_lnk_generic.h90" 
     207#     undef ROUTINE_LNK 
     208#     undef MULTI 
     209#  undef DIM_4d 
     210# undef SINGLE_PRECISION 
     211 
     212   !! 
     213   !!   ----   DOUBLE PRECISION VERSIONS 
     214   !! 
     215#  define DIM_2d 
     216#     define ROUTINE_LNK           mpp_lnk_2d_dp 
     217#     include "mpp_lnk_generic.h90" 
     218#     undef ROUTINE_LNK 
     219#     define MULTI 
     220#     define ROUTINE_LNK           mpp_lnk_2d_ptr_dp 
     221#     include "mpp_lnk_generic.h90" 
     222#     undef ROUTINE_LNK 
     223#     undef MULTI 
     224#  undef DIM_2d 
     225   ! 
     226   !                       !==  3D array and array of 3D pointer  ==! 
     227   ! 
     228#  define DIM_3d 
     229#     define ROUTINE_LNK           mpp_lnk_3d_dp 
     230#     include "mpp_lnk_generic.h90" 
     231#     undef ROUTINE_LNK 
     232#     define MULTI 
     233#     define ROUTINE_LNK           mpp_lnk_3d_ptr_dp 
     234#     include "mpp_lnk_generic.h90" 
     235#     undef ROUTINE_LNK 
     236#     undef MULTI 
     237#  undef DIM_3d 
     238   ! 
     239   !                       !==  4D array and array of 4D pointer  ==! 
     240   ! 
     241#  define DIM_4d 
     242#     define ROUTINE_LNK           mpp_lnk_4d_dp 
     243#     include "mpp_lnk_generic.h90" 
     244#     undef ROUTINE_LNK 
     245#     define MULTI 
     246#     define ROUTINE_LNK           mpp_lnk_4d_ptr_dp 
     247#     include "mpp_lnk_generic.h90" 
     248#     undef ROUTINE_LNK 
     249#     undef MULTI 
     250#  undef DIM_4d 
     251 
     252 
     253   !!---------------------------------------------------------------------- 
     254   !!                   ***  routine mpp_nfd_(2,3,4)d  *** 
     255   !! 
     256   !!   * Argument : dummy argument use in mpp_nfd_... routines 
     257   !!                ptab      :   array or pointer of arrays on which the boundary condition is applied 
     258   !!                cd_nat    :   nature of array grid-points 
     259   !!                psgn      :   sign used across the north fold boundary 
     260   !!                kfld      :   optional, number of pt3d arrays 
     261   !!                kfillmode :   optional, method to be use to fill the halos (see jpfill* variables) 
     262   !!                pfillval  :   optional, background value (used with jpfillcopy) 
     263   !!---------------------------------------------------------------------- 
     264   ! 
     265   !                       !==  2D array and array of 2D pointer  ==! 
     266   ! 
     267   !! 
     268   !!   ----   SINGLE PRECISION VERSIONS 
     269   !! 
     270#  define SINGLE_PRECISION 
     271#  define DIM_2d 
     272#     define ROUTINE_NFD           mpp_nfd_2d_sp 
     273#     include "mpp_nfd_generic.h90" 
     274#     undef ROUTINE_NFD 
     275#     define MULTI 
     276#     define ROUTINE_NFD           mpp_nfd_2d_ptr_sp 
     277#     include "mpp_nfd_generic.h90" 
     278#     undef ROUTINE_NFD 
     279#     undef MULTI 
     280#  undef DIM_2d 
     281   ! 
     282   !                       !==  3D array and array of 3D pointer  ==! 
     283   ! 
     284#  define DIM_3d 
     285#     define ROUTINE_NFD           mpp_nfd_3d_sp 
     286#     include "mpp_nfd_generic.h90" 
     287#     undef ROUTINE_NFD 
     288#     define MULTI 
     289#     define ROUTINE_NFD           mpp_nfd_3d_ptr_sp 
     290#     include "mpp_nfd_generic.h90" 
     291#     undef ROUTINE_NFD 
     292#     undef MULTI 
     293#  undef DIM_3d 
     294   ! 
     295   !                       !==  4D array and array of 4D pointer  ==! 
     296   ! 
     297#  define DIM_4d 
     298#     define ROUTINE_NFD           mpp_nfd_4d_sp 
     299#     include "mpp_nfd_generic.h90" 
     300#     undef ROUTINE_NFD 
     301#     define MULTI 
     302#     define ROUTINE_NFD           mpp_nfd_4d_ptr_sp 
     303#     include "mpp_nfd_generic.h90" 
     304#     undef ROUTINE_NFD 
     305#     undef MULTI 
     306#  undef DIM_4d 
     307#  undef SINGLE_PRECISION 
     308 
     309   !! 
     310   !!   ----   DOUBLE PRECISION VERSIONS 
     311   !! 
     312#  define DIM_2d 
     313#     define ROUTINE_NFD           mpp_nfd_2d_dp 
     314#     include "mpp_nfd_generic.h90" 
     315#     undef ROUTINE_NFD 
     316#     define MULTI 
     317#     define ROUTINE_NFD           mpp_nfd_2d_ptr_dp 
     318#     include "mpp_nfd_generic.h90" 
     319#     undef ROUTINE_NFD 
     320#     undef MULTI 
     321#  undef DIM_2d 
     322   ! 
     323   !                       !==  3D array and array of 3D pointer  ==! 
     324   ! 
     325#  define DIM_3d 
     326#     define ROUTINE_NFD           mpp_nfd_3d_dp 
     327#     include "mpp_nfd_generic.h90" 
     328#     undef ROUTINE_NFD 
     329#     define MULTI 
     330#     define ROUTINE_NFD           mpp_nfd_3d_ptr_dp 
     331#     include "mpp_nfd_generic.h90" 
     332#     undef ROUTINE_NFD 
     333#     undef MULTI 
     334#  undef DIM_3d 
     335   ! 
     336   !                       !==  4D array and array of 4D pointer  ==! 
     337   ! 
     338#  define DIM_4d 
     339#     define ROUTINE_NFD           mpp_nfd_4d_dp 
     340#     include "mpp_nfd_generic.h90" 
     341#     undef ROUTINE_NFD 
     342#     define MULTI 
     343#     define ROUTINE_NFD           mpp_nfd_4d_ptr_dp 
     344#     include "mpp_nfd_generic.h90" 
     345#     undef ROUTINE_NFD 
     346#     undef MULTI 
    228347#  undef DIM_4d 
    229348 
    230349   !!====================================================================== 
     350 
     351 
     352   !!====================================================================== 
     353     !!--------------------------------------------------------------------- 
     354      !!                   ***  routine mpp_lbc_north_icb  *** 
     355      !! 
     356      !! ** Purpose :   Ensure proper north fold horizontal bondary condition 
     357      !!              in mpp configuration in case of jpn1 > 1 and for 2d 
     358      !!              array with outer extra halo 
     359      !! 
     360      !! ** Method  :   North fold condition and mpp with more than one proc 
     361      !!              in i-direction require a specific treatment. We gather 
     362      !!              the 4+kextj northern lines of the global domain on 1 
     363      !!              processor and apply lbc north-fold on this sub array. 
     364      !!              Then we scatter the north fold array back to the processors. 
     365      !!              This routine accounts for an extra halo with icebergs 
     366      !!              and assumes ghost rows and columns have been suppressed. 
     367      !! 
     368      !!---------------------------------------------------------------------- 
     369#     define SINGLE_PRECISION 
     370#     define ROUTINE_LNK           mpp_lbc_north_icb_sp 
     371#     include "mpp_lbc_north_icb_generic.h90" 
     372#     undef ROUTINE_LNK 
     373#     undef SINGLE_PRECISION 
     374#     define ROUTINE_LNK           mpp_lbc_north_icb_dp 
     375#     include "mpp_lbc_north_icb_generic.h90" 
     376#     undef ROUTINE_LNK 
     377  
     378 
     379      !!---------------------------------------------------------------------- 
     380      !!                  ***  routine mpp_lnk_2d_icb  *** 
     381      !! 
     382      !! ** Purpose :   Message passing management for 2d array (with extra halo for icebergs) 
     383      !!                This routine receives a (1-kexti:jpi+kexti,1-kexti:jpj+kextj) 
     384      !!                array (usually (0:jpi+1, 0:jpj+1)) from lbc_lnk_icb calls. 
     385      !! 
     386      !! ** Method  :   Use mppsend and mpprecv function for passing mask 
     387      !!      between processors following neighboring subdomains. 
     388      !!            domain parameters 
     389      !!                    jpi    : first dimension of the local subdomain 
     390      !!                    jpj    : second dimension of the local subdomain 
     391      !!                    kexti  : number of columns for extra outer halo 
     392      !!                    kextj  : number of rows for extra outer halo 
     393      !!                    nbondi : mark for "east-west local boundary" 
     394      !!                    nbondj : mark for "north-south local boundary" 
     395      !!                    noea   : number for local neighboring processors 
     396      !!                    nowe   : number for local neighboring processors 
     397      !!                    noso   : number for local neighboring processors 
     398      !!                    nono   : number for local neighboring processors 
     399      !!---------------------------------------------------------------------- 
     400 
     401#     define SINGLE_PRECISION 
     402#     define ROUTINE_LNK           mpp_lnk_2d_icb_sp 
     403#     include "mpp_lnk_icb_generic.h90" 
     404#     undef ROUTINE_LNK 
     405#     undef SINGLE_PRECISION 
     406#     define ROUTINE_LNK           mpp_lnk_2d_icb_dp 
     407#     include "mpp_lnk_icb_generic.h90" 
     408#     undef ROUTINE_LNK 
     409   
    231410END MODULE lbclnk 
    232411 
Note: See TracChangeset for help on using the changeset viewer.