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 3764 for branches/2012/dev_MERGE_2012/NEMOGCM/NEMO/LIM_SRC_2 – NEMO

Ignore:
Timestamp:
2013-01-23T15:33:04+01:00 (11 years ago)
Author:
smasson
Message:

dev_MERGE_2012: report bugfixes done in the trunk from r3555 to r3763 into dev_MERGE_2012

Location:
branches/2012/dev_MERGE_2012/NEMOGCM/NEMO/LIM_SRC_2
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/2012/dev_MERGE_2012/NEMOGCM/NEMO/LIM_SRC_2/dom_ice_2.F90

    r2715 r3764  
    3232   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)         ::   tms    , tmu      !: temperature and velocity points masks 
    3333   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:)     ::   wght              !: weight of the 4 neighbours to compute averages 
     34   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)         ::   tmv               !: y-velocity mask used for evp rheology  
    3435 
    35  
    36 # if defined key_lim2_vp 
    3736   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:)     ::   akappa , bkappa   !: first and third group of metric coefficients 
    3837   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:,:) ::   alambd            !: second group of metric coefficients 
    39 # else 
    40    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)         ::   tmv    , tmf      !: y-velocity and F-points masks 
     38   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)         ::   tmf               !: F-points masks 
    4139   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)         ::   tmi               !: ice mask: =1 if ice thick > 0 
    42 # endif 
    4340   !!---------------------------------------------------------------------- 
    4441   CONTAINS 
  • branches/2012/dev_MERGE_2012/NEMOGCM/NEMO/LIM_SRC_2/limtrp_2.F90

    r3680 r3764  
    3131   USE agrif_lim2_interp ! nesting 
    3232# endif 
     33   USE lib_fortran     ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
    3334 
    3435   IMPLICIT NONE 
  • branches/2012/dev_MERGE_2012/NEMOGCM/NEMO/LIM_SRC_2/limwri_2.F90

    r3625 r3764  
    105105      !! 
    106106      INTEGER  ::   ji, jj, jf                      ! dummy loop indices 
    107       CHARACTER(len = 40)  ::   clhstnam, clop 
     107      CHARACTER(len = 80)  ::   clhstnam, clop 
    108108      REAL(wp) ::   zsto, zjulian, zout,   &  ! temporary scalars 
    109109         &          zindh, zinda, zindb, ztmu 
     
    161161            zcmo(ji,jj,5)  = sist  (ji,jj) 
    162162            zcmo(ji,jj,6)  = fbif  (ji,jj) 
     163           IF (lk_lim2_vp) THEN 
    163164            zcmo(ji,jj,7)  = zindb * (  u_ice(ji,jj  ) * tmu(ji,jj  ) + u_ice(ji+1,jj  ) * tmu(ji+1,jj  )   & 
    164165                                      + u_ice(ji,jj+1) * tmu(ji,jj+1) + u_ice(ji+1,jj+1) * tmu(ji+1,jj+1) ) & 
     
    168169                                      + v_ice(ji,jj+1) * tmu(ji,jj+1) + v_ice(ji+1,jj+1) * tmu(ji+1,jj+1) ) & 
    169170                                  / ztmu 
     171           ELSE 
     172 
     173            zcmo(ji,jj,7)  = zindb * (  u_ice(ji,jj  ) * tmu(ji,jj)                       & 
     174             &                        + u_ice(ji-1,jj) * tmu(ji-1,jj) )                   & 
     175             &                    / 2.0 
     176            zcmo(ji,jj,8)  = zindb * (  v_ice(ji,jj  ) * tmv(ji,jj)                       & 
     177             &                        + v_ice(ji,jj-1) * tmv(ji,jj-1) )                   & 
     178             &                    / 2.0 
     179 
     180           ENDIF 
    170181            zcmo(ji,jj,9)  = sst_m(ji,jj) 
    171182            zcmo(ji,jj,10) = sss_m(ji,jj) 
     
    187198      niter = niter + 1 
    188199      DO jf = 1 , noumef 
    189          DO jj = 1 , jpj 
    190             DO ji = 1 , jpi 
    191                zfield(ji,jj) = zcmo(ji,jj,jf) * cmulti(jf) + cadd(jf) 
    192             END DO 
    193          END DO 
    194           
    195          IF( jf == 7  .OR. jf == 8  .OR. jf == 15 .OR. jf == 16 ) THEN 
     200         zfield(:,:) = zcmo(:,:,jf) * cmulti(jf) + cadd(jf) * tmask(:,:,1) 
     201         SELECT CASE ( jf ) 
     202         CASE ( 7, 8, 15, 16, 20, 21 )  ! velocity or stress fields (vectors) 
    196203            CALL lbc_lnk( zfield, 'T', -1. ) 
    197          ELSE  
     204         CASE DEFAULT                   ! scalar fields 
    198205            CALL lbc_lnk( zfield, 'T',  1. ) 
    199          ENDIF 
    200           
     206         END SELECT 
     207 
    201208         IF( nc(jf) == 1 )   CALL histwrite( nice, nam(jf), niter, zfield, ndim, ndex51 ) 
    202           
     209 
    203210      END DO 
    204        
     211 
    205212      IF( ( nn_fsbc * niter ) >= nitend )   CALL histclo( nice )  
    206213 
     
    209216   END SUBROUTINE lim_wri_2 
    210217      
    211 # endif 
     218#endif      
    212219 
    213220   SUBROUTINE lim_wri_init_2 
  • branches/2012/dev_MERGE_2012/NEMOGCM/NEMO/LIM_SRC_2/limwri_dimg_2.h90

    r3625 r3764  
    2020    INTEGER , SAVE ::   nmoyice   !: counter for averaging 
    2121    INTEGER , SAVE ::   nwf       !: number of fields to write on disk 
    22     INTEGER , SAVE, DIMENSION(:), ALLOCATABLE  :: nsubindex   !: subindex to be saved 
     22    INTEGER, SAVE,DIMENSION (:), ALLOCATABLE  :: nsubindex   !: subindex to be saved 
    2323    INTEGER , SAVE ::   nice, nhorid, ndim, niter, ndepid 
    2424    REAL(wp), SAVE, DIMENSION(:,:,:), ALLOCATABLE :: rcmoy 
     
    3030    REAL(wp), DIMENSION(1) ::   zdept 
    3131    REAL(wp) ::   zsto, zsec, zjulian,zout 
    32     REAL(wp) ::   zindh,zinda,zindb, ztmu 
    33     REAL(wp), DIMENSION(jpi,jpj,jpnoumax) ::   zcmo   !ARPDBGWORK 
    34     REAL(wp), DIMENSION(jpi,jpj)          ::   zfield 
     32    REAL(wp) ::   zindh, zinda, zindb, ztmu 
     33    REAL(wp), POINTER, DIMENSION(:,:)     ::   zfield 
    3534 
    3635#if ! defined key_diainstant 
     
    4544       IF( lk_mpp      )   CALL mpp_sum ( ialloc  ) 
    4645       IF( ialloc /= 0 )   CALL ctl_warn('lim_wri_2 (limwri_dimg_2.h90) : failed to allocate arrays') 
    47        rcmoy(:,:,:) = 0._wp 
    4846    ENDIF 
    4947 
    50     IF( kt == nit000 ) THEN  
     48    CALL wrk_alloc( jpi, jpj, zfield ) 
     49 
     50    IF ( kt == nit000 ) THEN  
    5151       ! 
    5252       CALL lim_wri_init_2  
     
    5555       ii  = 0 
    5656 
    57        IF(lwp ) THEN 
     57       IF (lwp ) THEN 
    5858          WRITE(numout,*) 'lim_wri_2 : Write ice outputs in dimg' 
    5959          WRITE(numout,*) '~~~~~~~~' 
     
    7979       END DO 
    8080 
     81       rcmoy(:,:,:) = 0.0_wp 
    8182       zsto     = rdt_ice 
    8283       zout     = nwrite * rdt_ice / nn_fsbc 
     
    8990 
    9091#if ! defined key_diainstant  
    91     !-- calculs des valeurs instantanees 
     92    !-- Compute mean values 
    9293 
    9394    zcmo(:,:, 1:jpnoumax ) = 0.e0  
    9495    DO jj = 2 , jpjm1 
    95        DO ji = 2 , jpim1   ! NO vector opt. 
     96       DO ji = 2 , jpim1 
    9697          zindh  = MAX( zzero , SIGN( zone , hicif(ji,jj) * (1.0 - frld(ji,jj) ) - 0.10 ) ) 
    9798          zinda  = MAX( zzero , SIGN( zone , ( 1.0 - frld(ji,jj) ) - 0.10 ) ) 
    9899          zindb  = zindh * zinda 
    99           ztmu   = MAX( 0.5 * zone , ( tmu(ji,jj) + tmu(ji+1,jj) + tmu(ji,jj+1) + tmu(ji+1,jj+1) ) )  
    100100          zcmo(ji,jj,1)  = hsnif (ji,jj) 
    101101          zcmo(ji,jj,2)  = hicif (ji,jj) 
     
    104104          zcmo(ji,jj,5)  = sist  (ji,jj) 
    105105          zcmo(ji,jj,6)  = fbif  (ji,jj) 
    106           zcmo(ji,jj,7)  = zindb * (  u_ice(ji,jj  ) * tmu(ji,jj  ) + u_ice(ji+1,jj  ) * tmu(ji+1,jj  )   & 
     106          IF (lk_lim2_vp) THEN 
     107            ztmu   = MAX( 0.5 * zone , ( tmu(ji,jj) + tmu(ji+1,jj) + tmu(ji,jj+1) + tmu(ji+1,jj+1) ) )  
     108            zcmo(ji,jj,7)  = zindb * (  u_ice(ji,jj  ) * tmu(ji,jj  ) + u_ice(ji+1,jj  ) * tmu(ji+1,jj  )   & 
    107109             &                      + u_ice(ji,jj+1) * tmu(ji,jj+1) + u_ice(ji+1,jj+1) * tmu(ji+1,jj+1) ) & 
    108110               / ztmu  
    109111 
    110           zcmo(ji,jj,8)  = zindb * (  v_ice(ji,jj  ) * tmu(ji,jj  ) + v_ice(ji+1,jj  ) * tmu(ji+1,jj  )   & 
     112            zcmo(ji,jj,8)  = zindb * (  v_ice(ji,jj  ) * tmu(ji,jj  ) + v_ice(ji+1,jj  ) * tmu(ji+1,jj  )   & 
    111113             &                      + v_ice(ji,jj+1) * tmu(ji,jj+1) + v_ice(ji+1,jj+1) * tmu(ji+1,jj+1) ) & 
    112114               / ztmu 
     115           ELSE 
     116            zcmo(ji,jj,7)  = zindb * (  u_ice(ji,jj  ) * tmu(ji,jj) + u_ice(ji-1,jj) * tmu(ji-1,jj) )/ 2.0 
     117            zcmo(ji,jj,8)  = zindb * (  v_ice(ji,jj  ) * tmv(ji,jj) + v_ice(ji,jj-1) * tmv(ji,jj-1) )/ 2.0 
     118           ENDIF 
     119 
    113120          zcmo(ji,jj,9)  = sst_m(ji,jj) 
    114121          zcmo(ji,jj,10) = sss_m(ji,jj) 
     
    136143          !  case of instantaneaous output rcmoy(:,:, 1:jpnoumax ) = 0.e0 
    137144          DO jj = 2 , jpjm1 
    138              DO ji = 2 , jpim1   ! NO vector opt. 
     145             DO ji = 2 , jpim1 
    139146                zindh  = MAX( zzero , SIGN( zone , hicif(ji,jj) * (1.0 - frld(ji,jj) ) - 0.10 ) ) 
    140147                zinda  = MAX( zzero , SIGN( zone , ( 1.0 - frld(ji,jj) ) - 0.10 ) ) 
    141148                zindb  = zindh * zinda 
    142                 ztmu   = MAX( 0.5 * zone , ( tmu(ji,jj) + tmu(ji+1,jj) + tmu(ji,jj+1) + tmu(ji+1,jj+1) ) ) 
    143149                rcmoy(ji,jj,1)  = hsnif (ji,jj) 
    144150                rcmoy(ji,jj,2)  = hicif (ji,jj) 
     
    147153                rcmoy(ji,jj,5)  = sist  (ji,jj) 
    148154                rcmoy(ji,jj,6)  = fbif  (ji,jj) 
    149                 rcmoy(ji,jj,7)  = zindb * (  u_ice(ji,jj  ) * tmu(ji,jj  ) + u_ice(ji+1,jj  ) * tmu(ji+1,jj  )   & 
    150                    &                       + u_ice(ji,jj+1) * tmu(ji,jj+1) + u_ice(ji+1,jj+1) * tmu(ji+1,jj+1) ) & 
    151                      / ztmu 
    152  
    153                 rcmoy(ji,jj,8)  = zindb * (  v_ice(ji,jj  ) * tmu(ji,jj  ) + v_ice(ji+1,jj  ) * tmu(ji+1,jj  )   & 
    154                    &                       + v_ice(ji,jj+1) * tmu(ji,jj+1) + v_ice(ji+1,jj+1) * tmu(ji+1,jj+1) ) & 
    155                      / ztmu 
     155                IF (lk_lim2_vp) THEN 
     156                   ztmu   = MAX( 0.5 * zone , ( tmu(ji,jj) + tmu(ji+1,jj) + tmu(ji,jj+1) + tmu(ji+1,jj+1) ) ) 
     157                   rcmoy(ji,jj,7)  = zindb * (  u_ice(ji,jj  ) * tmu(ji,jj  ) + u_ice(ji+1,jj  ) * tmu(ji+1,jj  )   & 
     158                      &                      + u_ice(ji,jj+1) * tmu(ji,jj+1) + u_ice(ji+1,jj+1) * tmu(ji+1,jj+1) ) & 
     159                        / ztmu 
     160 
     161                   rcmoy(ji,jj,8)  = zindb * (  v_ice(ji,jj  ) * tmu(ji,jj  ) + v_ice(ji+1,jj  ) * tmu(ji+1,jj  )   & 
     162                      &                      + v_ice(ji,jj+1) * tmu(ji,jj+1) + v_ice(ji+1,jj+1) * tmu(ji+1,jj+1) ) & 
     163                       / ztmu 
     164                ELSE 
     165                   rcmoy(ji,jj,7)  = zindb * (  u_ice(ji,jj  ) * tmu(ji,jj) + u_ice(ji-1,jj) * tmu(ji-1,jj) )/ 2.0 
     166                   rcmoy(ji,jj,8)  = zindb * (  v_ice(ji,jj  ) * tmv(ji,jj) + v_ice(ji,jj-1) * tmv(ji,jj-1) )/ 2.0 
     167                ENDIF 
    156168                rcmoy(ji,jj,9)  = sst_m(ji,jj) 
    157169                rcmoy(ji,jj,10) = sss_m(ji,jj) 
     
    176188             zfield(:,:) = (rcmoy(:,:,jf) * cmulti(jf) + cadd(jf)) * tmask(:,:,1) 
    177189 
    178              IF ( jf == 7  .OR. jf == 8  .OR. jf == 15 .OR. jf == 16 ) THEN  
     190             SELECT CASE (jf)  
     191             CASE ( 7, 8, 15, 16 ) ! velocity or stress fields (vectors) 
    179192                CALL lbc_lnk( zfield, 'T', -1. ) 
    180              ELSE  
     193             CASE DEFAULT          ! scalar fields 
    181194                CALL lbc_lnk( zfield, 'T',  1. ) 
    182              ENDIF 
     195             END SELECT 
    183196             rcmoy(:,:,jf) = zfield(:,:) 
    184197          END DO 
     
    200213          nmoyice = 0  
    201214       END IF     !  MOD(kt+nn_fsbc-1-nit000+1, nwrite == 0 ) ! 
     215       CALL wrk_dealloc( jpi,jpj, zfield ) 
    202216 
    203217     END SUBROUTINE lim_wri_2 
Note: See TracChangeset for help on using the changeset viewer.