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 5184 for branches/2015/dev_r5171_CNRS_LIM3_seaicebgc/NEMOGCM/NEMO/TOP_SRC/TRP – NEMO

Ignore:
Timestamp:
2015-03-27T15:29:08+01:00 (9 years ago)
Author:
vancop
Message:

TOP ice routines

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5171_CNRS_LIM3_seaicebgc/NEMOGCM/NEMO/TOP_SRC/TRP/trcsbc.F90

    r4990 r5184  
    2121   USE trd_oce 
    2222   USE trdtra 
     23   USE sbc_oce 
     24   USE dom_oce 
    2325 
    2426   IMPLICIT NONE 
     
    6062      INTEGER, INTENT( in ) ::   kt          ! ocean time-step index 
    6163      ! 
    62       INTEGER  ::   ji, jj, jn           ! dummy loop indices 
    63       REAL(wp) ::   zsrau, zse3t   ! temporary scalars 
     64      INTEGER  ::   ji, jj, jn                                     ! dummy loop indices 
     65      REAL(wp) ::   zsrau, zse3t                                   ! temporary scalars 
     66      REAL(wp) ::   zswitch, zftra, zcd, zdtra, ztfx, ztra, zeuler ! temporary scalars 
    6467      CHARACTER (len=22) :: charout 
    6568      REAL(wp), POINTER, DIMENSION(:,:  ) :: zsfx 
    6669      REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrtrd 
     70 
    6771      !!--------------------------------------------------------------------- 
    6872      ! 
     
    7276                      CALL wrk_alloc( jpi, jpj,      zsfx   ) 
    7377      IF( l_trdtrc )  CALL wrk_alloc( jpi, jpj, jpk, ztrtrd ) 
     78 
     79      SELECT CASE( nn_ice_embd )         ! levitating or embedded sea-ice option 
     80         CASE( 0    )   ;   zswitch = 1  ! (0) standard levitating sea-ice : salt exchange only 
     81         CASE( 1, 2 )   ;   zswitch = 0  ! (1) levitating sea-ice: salt and volume exchange but no pressure effect                                 
     82                                         ! (2) embedded sea-ice : salt and volume fluxes and pressure 
     83      END SELECT 
    7484 
    7585      IF( kt == nittrc000 ) THEN 
     
    91101      ! 0. initialization 
    92102      zsrau = 1. / rau0 
     103 
     104      zeuler = 1.   ;  IF ( neuler .EQ. 0 ) zeuler = 0. 
     105 
    93106      DO jn = 1, jptra 
    94107         ! 
    95108         IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn)  ! save trends 
    96109         !                                             ! add the trend to the general tracer trend 
    97          DO jj = 2, jpj 
    98             DO ji = fs_2, fs_jpim1   ! vector opt. 
    99                zse3t = 1. / fse3t(ji,jj,1) 
    100                tra(ji,jj,1,jn) = tra(ji,jj,1,jn) + zsfx(ji,jj) *  zsrau * trn(ji,jj,1,jn) * zse3t 
     110 
     111         IF ( nn_ice_tr == -1 ) THEN  ! identical concentrations in ice and ocean (old code) 
     112 
     113            DO jj = 2, jpj 
     114               DO ji = fs_2, fs_jpim1   ! vector opt. 
     115                  zse3t = 1. / fse3t(ji,jj,1) 
     116                  tra(ji,jj,1,jn) = tra(ji,jj,1,jn) + zsfx(ji,jj) *  zsrau * trn(ji,jj,1,jn) * zse3t 
     117               END DO 
    101118            END DO 
    102          END DO 
     119 
     120         ELSE 
     121 
     122            DO jj = 2, jpj 
     123               DO ji = fs_2, fs_jpim1   ! vector opt. 
     124    
     125                  zse3t = 1. / fse3t(ji,jj,1) 
     126                   
     127                  ! tracer flux at the ice/ocean interface (tracer/m2/s) 
     128                  zftra = - trc_i(ji,jj,jn) * fmmflx(ji,jj) ! uptake of tracer in the sea ice 
     129                  zcd   =   trc_o(ji,jj,jn) * fmmflx(ji,jj) ! concentration dilution due to freezing-melting, 
     130                                                               ! only used in the levitating sea ice case 
     131                  ! tracer flux only       : add concentration dilution term in net tracer flux, no F-M in volume flux 
     132                  ! tracer and mass fluxes : no concentration dilution term in net tracer flux, F-M term in volume flux 
     133                  ztfx  = zftra + zswitch * zcd                ! net tracer flux (+C/D if no ice/ocean mass exchange) 
     134    
     135                  ! tracer change (left member: euler; right member:leapfrog) 
     136                  ztra = ( 1. - zeuler ) * trn(ji,jj,1,jn) + zeuler * trb(ji,jj,1,jn) 
     137                   
     138                  ! MAX is there to avoid integral ocean uptake in the case of freezing (for iron) 
     139                  zdtra = MAX ( - ztra / r2dtra(1) , zsrau * ( ztfx + zsfx(ji,jj) * trn(ji,jj,1,jn) ) * zse3t ) ! tracer tendency 
     140                  ! r2dtra is time step 
     141                  tra(ji,jj,1,jn) = tra(ji,jj,1,jn) + zdtra ! new line 
     142    
     143   !              IF ( ztfx .NE. 0.0 ) THEN 
     144   !                  WRITE(numout,*) ji, jj, jn 
     145   !                  WRITE(numout,*) ' trc_o  : ', trc_o(ji,jj,jn) 
     146   !                  WRITE(numout,*) ' trc_i  : ', trc_i(ji,jj,jn) 
     147   !                  WRITE(numout,*) ' fmmflx : ', fmmflx(ji,jj) 
     148   !                  WRITE(numout,*) ' zswitch: ', zswitch 
     149   !                  WRITE(numout,*) ' zcd   : ', zcd 
     150   !                  WRITE(numout,*) ' zftra : ', zftra 
     151   !                  WRITE(numout,*) ' ztfx  : ', ztfx 
     152   !                  WRITE(numout,*) ' zsrau : ', zsrau 
     153   !                  WRITE(numout,*) ' zsfx  : ', zsfx(ji,jj) 
     154   !                  WRITE(numout,*) ' zse3t : ', zse3t 
     155   !                  WRITE(numout,*) ' ztra  : ', ztra 
     156   !                  WRITE(numout,*) ' zdtra : ', zdtra 
     157   !                  WRITE(numout,*) ' Old tendency : ', zsfx(ji,jj) * zsrau * trn(ji,jj,1,jn) * zse3t 
     158   !              ENDIF 
     159    
     160               END DO 
     161            END DO 
     162    
     163         ENDIF 
    103164          
    104165         IF( l_trdtrc ) THEN 
Note: See TracChangeset for help on using the changeset viewer.