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 8882 for branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/DOM/iscplrst.F90 – NEMO

Ignore:
Timestamp:
2017-12-01T18:44:09+01:00 (6 years ago)
Author:
flavoni
Message:

dev_CNRS_2017 branch: merged dev_r7881_ENHANCE09_RK3 with trunk r8864

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/DOM/iscplrst.F90

    r8329 r8882  
    1111   !!   iscpl_rst_interpol : restart interpolation in case of coupling with ice sheet 
    1212   !!---------------------------------------------------------------------- 
     13   USE oce             ! global tra/dyn variable 
    1314   USE dom_oce         ! ocean space and time domain 
    1415   USE domwri          ! ocean space and time domain 
    15    USE domvvl, ONLY : dom_vvl_interpol 
     16   USE domvvl   , ONLY : dom_vvl_interpol 
    1617   USE phycst          ! physical constants 
    1718   USE sbc_oce         ! surface boundary condition variables 
    18    USE oce             ! global tra/dyn variable 
     19   USE iscplini        ! ice sheet coupling: initialisation 
     20   USE iscplhsb        ! ice sheet coupling: conservation 
     21   ! 
    1922   USE in_out_manager  ! I/O manager 
    2023   USE iom             ! I/O module 
    2124   USE lib_mpp         ! MPP library 
    2225   USE lib_fortran     ! MPP library 
    23    USE wrk_nemo        ! Memory allocation 
    2426   USE lbclnk          ! communication 
    25    USE iscplini        ! ice sheet coupling: initialisation 
    26    USE iscplhsb        ! ice sheet coupling: conservation 
    2727 
    2828   IMPLICIT NONE 
     
    5050      !!---------------------------------------------------------------------- 
    5151      INTEGER  ::   inum0 
    52       REAL(wp), DIMENSION(:,:  ), POINTER ::   zsmask_b 
    53       REAL(wp), DIMENSION(:,:,:), POINTER ::   ztmask_b, zumask_b, zvmask_b 
    54       REAL(wp), DIMENSION(:,:,:), POINTER ::   ze3t_b  , ze3u_b  , ze3v_b   
    55       REAL(wp), DIMENSION(:,:,:), POINTER ::   zdepw_b 
     52      REAL(wp), DIMENSION(jpi,jpj)    ::   zsmask_b 
     53      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztmask_b, zumask_b, zvmask_b 
     54      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ze3t_b  , ze3u_b  , ze3v_b   
     55      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdepw_b 
    5656      CHARACTER(20) :: cfile 
    5757      !!---------------------------------------------------------------------- 
    58  
    59       CALL wrk_alloc(jpi,jpj,jpk,   ztmask_b, zumask_b, zvmask_b) ! mask before 
    60       CALL wrk_alloc(jpi,jpj,jpk,   ze3t_b  , ze3u_b  , ze3v_b  ) ! e3   before 
    61       CALL wrk_alloc(jpi,jpj,jpk,   zdepw_b ) 
    62       CALL wrk_alloc(jpi,jpj,       zsmask_b                    ) 
    63  
    64  
    65       !! get restart variable 
     58      ! 
     59      !                       ! get restart variable 
    6660      CALL iom_get( numror, jpdom_autoglo, 'tmask'  , ztmask_b   ) ! need to extrapolate T/S 
    6761      CALL iom_get( numror, jpdom_autoglo, 'umask'  , zumask_b   ) ! need to correct barotropic velocity 
     
    7266      CALL iom_get( numror, jpdom_autoglo, 'e3v_n'  , ze3v_b(:,:,:) )  ! need to correct barotropic velocity 
    7367      CALL iom_get( numror, jpdom_autoglo, 'gdepw_n', zdepw_b(:,:,:) ) ! need to interpol vertical profile (vvl) 
    74  
    75       !! read namelist 
    76       CALL iscpl_init() 
    77  
    78       !!  ! Extrapolation/interpolation of modify cell and new cells ... (maybe do it later after domvvl) 
     68      ! 
     69      CALL iscpl_init()       ! read namelist 
     70      !                       ! Extrapolation/interpolation of modify cell and new cells ... (maybe do it later after domvvl) 
    7971      CALL iscpl_rst_interpol( ztmask_b, zumask_b, zvmask_b, zsmask_b, ze3t_b, ze3u_b, ze3v_b, zdepw_b ) 
    80  
    81       !! compute correction if conservation needed 
    82       IF ( ln_hsb ) THEN 
     72      ! 
     73      IF ( ln_hsb ) THEN      ! compute correction if conservation needed 
    8374         IF( iscpl_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'rst_iscpl : unable to allocate rst_iscpl arrays' ) 
    8475         CALL iscpl_cons(ztmask_b, zsmask_b, ze3t_b, htsc_iscpl, hdiv_iscpl, rdt_iscpl) 
    8576      END IF 
    8677          
    87       !! print mesh/mask 
    88       IF( nn_msh /= 0 .AND. ln_iscpl )   CALL dom_wri      ! Create a domain file 
    89  
     78      !                       ! create  a domain file 
     79      IF( nn_msh /= 0 .AND. ln_iscpl )   CALL dom_wri 
     80      ! 
    9081      IF ( ln_hsb ) THEN 
    9182         cfile='correction' 
     
    9788         CALL iom_close ( inum0 ) 
    9889      END IF 
    99  
    100       CALL wrk_dealloc(jpi,jpj,jpk,   ztmask_b,zumask_b,zvmask_b )   
    101       CALL wrk_dealloc(jpi,jpj,jpk,   ze3t_b  ,ze3u_b  ,ze3v_b   )   
    102       CALL wrk_dealloc(jpi,jpj,jpk,   zdepw_b                    ) 
    103       CALL wrk_dealloc(jpi,jpj,       zsmask_b                   ) 
    104  
    105       !! next step is an euler time step 
    106       neuler = 0 
    107  
    108       !! set _b and _n variables equal 
     90      ! 
     91      neuler = 0              ! next step is an euler time step 
     92      ! 
     93      !                       ! set _b and _n variables equal 
    10994      tsb (:,:,:,:) = tsn (:,:,:,:) 
    11095      ub  (:,:,:)   = un  (:,:,:) 
    11196      vb  (:,:,:)   = vn  (:,:,:) 
    11297      sshb(:,:)     = sshn(:,:) 
    113  
    114       !! set _b and _n vertical scale factor equal 
     98      ! 
     99      !                       ! set _b and _n vertical scale factor equal 
    115100      e3t_b (:,:,:) = e3t_n (:,:,:) 
    116101      e3u_b (:,:,:) = e3u_n (:,:,:) 
    117102      e3v_b (:,:,:) = e3v_n (:,:,:) 
    118  
     103      ! 
    119104      e3uw_b (:,:,:) = e3uw_n (:,:,:) 
    120105      e3vw_b (:,:,:) = e3vw_n (:,:,:) 
     
    150135      REAL(wp):: zdz, zdzm1, zdzp1 
    151136      !! 
    152       REAL(wp), DIMENSION(:,:    ), POINTER :: zdmask , zdsmask, zvcorr, zucorr, zde3t 
    153       REAL(wp), DIMENSION(:,:    ), POINTER :: zbub   , zbvb   , zbun  , zbvn 
    154       REAL(wp), DIMENSION(:,:    ), POINTER :: zssh0  , zssh1, zhu1, zhv1 
    155       REAL(wp), DIMENSION(:,:    ), POINTER :: zsmask0, zsmask1 
    156       REAL(wp), DIMENSION(:,:,:  ), POINTER :: ztmask0, ztmask1, ztrp 
    157       REAL(wp), DIMENSION(:,:,:  ), POINTER :: zwmaskn, zwmaskb, ztmp3d 
    158       REAL(wp), DIMENSION(:,:,:,:), POINTER :: zts0 
     137      REAL(wp), DIMENSION(jpi,jpj)          :: zdmask , zsmask0, zucorr, zbub, zbun, zssh0, zhu1, zde3t 
     138      REAL(wp), DIMENSION(jpi,jpj)          :: zdsmask, zsmask1, zvcorr, zbvb, zbvn, zssh1, zhv1 
     139      REAL(wp), DIMENSION(jpi,jpj,jpk)      :: ztmask0, zwmaskn, ztrp 
     140      REAL(wp), DIMENSION(jpi,jpj,jpk)      :: ztmask1, zwmaskb, ztmp3d 
     141      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts) :: zts0 
    159142      !!---------------------------------------------------------------------- 
    160  
    161       !! allocate variables 
    162       CALL wrk_alloc(jpi,jpj,jpk,2, zts0                                   ) 
    163       CALL wrk_alloc(jpi,jpj,jpk,   ztmask0, ztmask1 , ztrp, ztmp3d        )  
    164       CALL wrk_alloc(jpi,jpj,jpk,   zwmaskn, zwmaskb                       )  
    165       CALL wrk_alloc(jpi,jpj,       zsmask0, zsmask1                       )  
    166       CALL wrk_alloc(jpi,jpj,       zdmask , zdsmask, zvcorr, zucorr, zde3t)  
    167       CALL wrk_alloc(jpi,jpj,       zbub   , zbvb    , zbun , zbvn         )  
    168       CALL wrk_alloc(jpi,jpj,       zssh0  , zssh1, zhu1, zhv1             )  
    169  
    170       !! mask value to be sure 
     143      ! 
     144      !                 ! mask value to be sure 
    171145      tsn(:,:,:,jp_tem) = tsn(:,:,:,jp_tem) * ptmask_b(:,:,:) 
    172146      tsn(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) * ptmask_b(:,:,:) 
    173        
    174       ! compute wmask 
     147      ! 
     148      !                 ! compute wmask 
    175149      zwmaskn(:,:,1) = tmask   (:,:,1) 
    176150      zwmaskb(:,:,1) = ptmask_b(:,:,1) 
     
    179153         zwmaskb(:,:,jk) = ptmask_b(:,:,jk) * ptmask_b(:,:,jk-1) 
    180154      END DO 
    181             
    182       ! compute new ssh if we open a full water column (average of the closest neigbourgs)   
     155      !     
     156      !                 ! compute new ssh if we open a full water column (average of the closest neigbourgs)   
    183157      sshb (:,:)=sshn(:,:) 
    184158      zssh0(:,:)=sshn(:,:) 
    185159      zsmask0(:,:) = psmask_b(:,:) 
    186160      zsmask1(:,:) = psmask_b(:,:) 
    187       DO iz = 1,10    ! need to be tuned (configuration dependent) (OK for ISOMIP+) 
     161      DO iz = 1, 10                 ! need to be tuned (configuration dependent) (OK for ISOMIP+) 
    188162         zdsmask(:,:) = ssmask(:,:)-zsmask0(:,:) 
    189163         DO jj = 2,jpj-1 
     
    198172                  &           + zssh0(ji,jjm1)*zsmask0(ji,jjm1))/summsk 
    199173                  zsmask1(ji,jj)=1._wp 
    200                END IF 
     174               ENDIF 
    201175            END DO 
    202176         END DO 
    203          CALL lbc_lnk(sshn,'T',1._wp) 
    204          CALL lbc_lnk(zsmask1,'T',1._wp) 
     177         CALL lbc_lnk( sshn   , 'T', 1._wp ) 
     178         CALL lbc_lnk( zsmask1, 'T', 1._wp ) 
    205179         zssh0   = sshn 
    206180         zsmask0 = zsmask1 
     
    210184!============================================================================= 
    211185!PM: Is this needed since introduction of VVL by default? 
    212       IF (.NOT.ln_linssh) THEN 
     186      IF ( .NOT.ln_linssh ) THEN 
    213187      ! Reconstruction of all vertical scale factors at now time steps 
    214188      ! ============================================================================= 
     
    225199            END DO 
    226200         END DO 
    227  
     201         ! 
    228202         CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 
    229203         CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 
    230204         CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F' ) 
    231205 
    232       ! Vertical scale factor interpolations 
    233       ! ------------------------------------ 
     206         ! Vertical scale factor interpolations 
     207         ! ------------------------------------ 
    234208         CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W'  ) 
    235209         CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 
    236210         CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 
    237  
    238       ! t- and w- points depth 
    239       ! ---------------------- 
     211          
     212         ! t- and w- points depth 
     213         ! ---------------------- 
    240214         gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 
    241215         gdepw_n(:,:,1) = 0.0_wp 
     
    431405      ! nothing to do 
    432406      !  
    433       ! deallocation tmp arrays 
    434       CALL wrk_dealloc(jpi,jpj,jpk,2, zts0                                   ) 
    435       CALL wrk_dealloc(jpi,jpj,jpk,   ztmask0, ztmask1 , ztrp                )  
    436       CALL wrk_dealloc(jpi,jpj,jpk,   zwmaskn, zwmaskb , ztmp3d              )  
    437       CALL wrk_dealloc(jpi,jpj,       zsmask0, zsmask1                       )  
    438       CALL wrk_dealloc(jpi,jpj,       zdmask , zdsmask, zvcorr, zucorr, zde3t)  
    439       CALL wrk_dealloc(jpi,jpj,       zbub   , zbvb    , zbun  , zbvn        )  
    440       CALL wrk_dealloc(jpi,jpj,       zssh0  , zssh1  , zhu1 , zhv1          )  
    441       ! 
    442407   END SUBROUTINE iscpl_rst_interpol 
    443408 
Note: See TracChangeset for help on using the changeset viewer.