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 5619 for branches/NERC/dev_r5589_is_oce_cpl/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90 – NEMO

Ignore:
Timestamp:
2015-07-20T19:43:15+02:00 (9 years ago)
Author:
mathiot
Message:

ocean/ice sheet coupling: initial commit

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5589_is_oce_cpl/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90

    r5541 r5619  
    6363 
    6464   REAL(wp), PUBLIC, SAVE ::   rcpi   = 2000.0_wp     ! phycst ? 
    65    REAL(wp), PUBLIC, SAVE ::   kappa  = 1.54e-6_wp    ! phycst ? 
     65   REAL(wp), PUBLIC, SAVE ::   kappa  =    0.0_wp    ! phycst ? 
    6666   REAL(wp), PUBLIC, SAVE ::   rhoisf = 920.0_wp      ! phycst ? 
    6767   REAL(wp), PUBLIC, SAVE ::   tsurf  = -20.0_wp      ! phycst ? 
     
    125125         IF ( lwp ) WRITE(numout,*) '        ln_divisf   = ', ln_divisf  
    126126         IF ( lwp ) WRITE(numout,*) '        nn_gammablk = ', nn_gammablk  
     127         IF ( lwp ) WRITE(numout,*) '        rn_gammat0  = ', rn_gammat0   
     128         IF ( lwp ) WRITE(numout,*) '        rn_gammas0  = ', rn_gammas0   
    127129         IF ( lwp ) WRITE(numout,*) '        rn_tfri2    = ', rn_tfri2  
    128130         IF (ln_divisf) THEN       ! keep it in the namelist ??? used true anyway as for runoff ? (PM) 
     
    150152            !: read effective lenght (BG03) 
    151153            IF (nn_isf == 2) THEN 
    152                ! Read Data and save some integral values 
     154               cvarLeff = 'soLeff'  
    153155               CALL iom_open( sn_Leff_isf%clname, inum ) 
    154                cvarLeff  = 'soLeff'               !: variable name for Efficient Length scale 
    155156               CALL iom_get( inum, jpdom_data, cvarLeff, risfLeff , 1) 
    156157               CALL iom_close(inum) 
     
    237238            CALL sbc_isf_tbl(tsn(:,:,:,jp_tem),ttbl(:,:),'T') 
    238239            CALL sbc_isf_tbl(tsn(:,:,:,jp_sal),stbl(:,:),'T') 
    239             CALL sbc_isf_tbl(un(:,:,:),utbl(:,:),'U') 
    240             CALL sbc_isf_tbl(vn(:,:,:),vtbl(:,:),'V') 
     240            CALL sbc_isf_tbl(un(:,:,:)        ,utbl(:,:),'U') 
     241            CALL sbc_isf_tbl(vn(:,:,:)        ,vtbl(:,:),'V') 
    241242            ! iom print 
    242243            CALL iom_put('ttbl',ttbl(:,:)) 
    243244            CALL iom_put('stbl',stbl(:,:)) 
    244             CALL iom_put('utbl',utbl(:,:)) 
    245             CALL iom_put('vtbl',vtbl(:,:)) 
     245            CALL iom_put('utbl',utbl(:,:) * (1._wp - tmask(:,:,1)) * ssmask(:,:)) 
     246            CALL iom_put('vtbl',vtbl(:,:) * (1._wp - tmask(:,:,1)) * ssmask(:,:)) 
    246247            ! compute fwf and heat flux 
    247248            CALL sbc_isf_cav (kt) 
     
    296297         !  
    297298         ! output 
    298          CALL iom_put('qisf'  , qisf) 
    299          IF( iom_use('fwfisf') )   CALL iom_put('fwfisf', fwfisf * stbl(:,:) / soce ) 
     299         IF( iom_use('qisf'  ) )   CALL iom_put('qisf'  , qisf) 
     300         IF( iom_use('fwfisf') )   CALL iom_put('fwfisf', fwfisf) 
    300301      END IF 
    301302   
     
    416417      REAL(wp) ::   zfwflx, zhtflx, zhtflx_b 
    417418      REAL(wp) ::   zgammat, zgammas 
    418       REAL(wp) ::   zeps   =  -1.e-20_wp        !==   Local constant initialization   ==! 
     419      REAL(wp) ::   zeps = 1.e-20_wp        !==   Local constant initialization   ==! 
    419420      INTEGER  ::   ji, jj     ! dummy loop indices 
    420421      INTEGER  ::   ii0, ii1, ij0, ij1   ! temporary integers 
     
    506507                     zeps1=rcp*rau0*zgammat 
    507508                     zeps2=lfusisf*rau0*zgammas 
    508                      zeps3=rhoisf*rcpi*kappa/risfdep(ji,jj) 
     509                     zeps3=rhoisf*rcpi*kappa/MAX(risfdep(ji,jj),zeps) 
    509510                     zeps4=zlamb2+zlamb3*risfdep(ji,jj) 
    510511                     zeps6=zeps4-zti(ji,jj) 
    511512                     zeps7=zeps4-tsurf 
    512513                     zaqe=zlamb1 * (zeps1 + zeps3) 
    513                      zaqer=0.5/zaqe 
     514                     zaqer=0.5/MIN(zaqe,-zeps) 
    514515                     zbqe=zeps1*zeps6+zeps3*zeps7-zeps2 
    515516                     zcqe=zeps2*stbl(ji,jj) 
     
    520521                     zfrz(ji,jj)=zeps4+zlamb1*zsfrz 
    521522   
    522 ! zfwflx is upward water flux 
    523                      zfwflx= rau0 * zgammas * ( (zsfrz-stbl(ji,jj)) / zsfrz ) 
     523! zfwflx is upward water flux (MAX usefull if kappa = 0 
     524                     zfwflx= rau0 * zgammas * ( (zsfrz-stbl(ji,jj)) / MAX(zsfrz,zeps) ) 
    524525! zhtflx is upward heat flux (out of ocean) 
    525526! If non conservative we have zcfac=0.0 so zhtflx is as ISOMIP but with different zfrz value 
     
    527528! zwflx is upward water flux 
    528529! If non conservative we have zcfac=0.0 so what follows is then zfwflx*sss_m/zsfrz 
    529                      zfwflx = ( zgammas*rau0 - zcfac*zfwflx ) * (zsfrz - stbl(ji,jj)) / stbl(ji,jj) 
     530!!!!!!!!                     zfwflx = ( zgammas*rau0 - zcfac*zfwflx ) * (zsfrz - stbl(ji,jj)) / stbl(ji,jj) 
    530531! test convergence and compute gammat 
    531532                     IF (( zhtflx - zhtflx_b) .LE. 0.01 ) lit = .FALSE. 
Note: See TracChangeset for help on using the changeset viewer.