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 7240 for branches/2016/dev_r7233_CMIP6_diags_trunk_version – NEMO

Ignore:
Timestamp:
2016-11-16T16:04:30+01:00 (7 years ago)
Author:
timgraham
Message:

Added vertically integrated zonal mass transport, temperature and salinity
Added 3D ice shelf budget terms

Location:
branches/2016/dev_r7233_CMIP6_diags_trunk_version/NEMOGCM/NEMO/OPA_SRC
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r7233_CMIP6_diags_trunk_version/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90

    r6387 r7240  
    302302      CALL iom_put( "hdiv", hdivn )                  ! Horizontal divergence 
    303303      ! 
    304       IF( iom_use("u_masstr") .OR. iom_use("u_heattr") .OR. iom_use("u_salttr") ) THEN 
     304      IF( iom_use("u_masstr") .OR. iom_use("u_masstr_vint") .OR. iom_use("u_heattr") .OR. iom_use("u_salttr") ) THEN 
    305305         z3d(:,:,jpk) = 0.e0 
     306         z2d(:,:) = 0.e0 
    306307         DO jk = 1, jpkm1 
    307             z3d(:,:,jk) = rau0 * un(:,:,jk) * e2u(:,:) * e3u_n(:,:,jk) * umask(:,:,jk) 
     308            z3d(:,:,jk) = rau0 * un(:,:,jk) * e2u(:,:) * fse3u(:,:,jk) * umask(:,:,jk) 
     309            z2d(:,:) = z2d(:,:) + z3d(:,:,jk) 
    308310         END DO 
    309311         CALL iom_put( "u_masstr", z3d )                  ! mass transport in i-direction 
     312         CALL iom_put( "u_masstr_vint", z2d )             ! mass transport in i-direction vertical sum 
    310313      ENDIF 
    311314       
     
    370373         CALL iom_put( "v_salttr", 0.5 * z2d )            !  heat transport in j-direction 
    371374      ENDIF 
     375 
     376      ! Vertical integral of temperature 
     377      IF( iom_use("tosmint") ) THEN 
     378         z2d(:,:)=0._wp 
     379         DO jk = 1, jpkm1 
     380            DO jj = 2, jpjm1 
     381               DO ji = fs_2, fs_jpim1   ! vector opt. 
     382                  z2d(ji,jj) = z2d(ji,jj) + rau0 * e3t_n(ji,jj,jk) *  tsn(ji,jj,jk,jp_tem) 
     383               END DO 
     384            END DO 
     385         END DO 
     386         CALL lbc_lnk( z2d, 'T', -1. ) 
     387         CALL iom_put( "tosmint", z2d )  
     388      ENDIF 
     389 
     390      ! Vertical integral of salinity 
     391      IF( iom_use("somint") ) THEN 
     392         z2d(:,:)=0._wp 
     393         DO jk = 1, jpkm1 
     394            DO jj = 2, jpjm1 
     395               DO ji = fs_2, fs_jpim1   ! vector opt. 
     396                  z2d(ji,jj) = z2d(ji,jj) + rau0 * e3t_n(ji,jj,jk) * tsn(ji,jj,jk,jp_sal) 
     397               END DO 
     398            END DO 
     399         END DO 
     400         CALL lbc_lnk( z2d, 'T', -1. ) 
     401         CALL iom_put( "somint", z2d )  
     402      ENDIF 
     403 
     404      CALL iom_put( "bn2", rn2 )  !Brunt-Vaisala buoyancy frequency (N^2) 
    372405      ! 
    373406      CALL wrk_dealloc( jpi , jpj      , z2d ) 
  • branches/2016/dev_r7233_CMIP6_diags_trunk_version/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90

    r6140 r7240  
    9292      INTEGER               :: ji, jj               ! loop index 
    9393      REAL(wp), DIMENSION (:,:), POINTER :: zt_frz, zdep ! freezing temperature (zt_frz) at depth (zdep)  
     94      REAL(wp), DIMENSION(:,:,:), POINTER :: zfwfisf3d, zqhcisf3d, zqlatisf3d 
     95      REAL(wp), DIMENSION(:,:  ), POINTER :: zqhcisf2d 
    9496      !!--------------------------------------------------------------------- 
    9597      ! 
     
    161163         CALL lbc_lnk(risf_tsc(:,:,jp_tem),'T',1.) 
    162164         CALL lbc_lnk(risf_tsc(:,:,jp_sal),'T',1.) 
    163          CALL lbc_lnk(fwfisf(:,:)         ,'T',1.) 
    164          CALL lbc_lnk(qisf(:,:)           ,'T',1.) 
     165         CALL lbc_lnk(fwfisf(:,:)   ,'T',1.) 
     166         CALL lbc_lnk(qisf(:,:)     ,'T',1.) 
     167 
     168!============================================================================================================================================= 
     169         IF ( iom_use('fwfisf3d') .OR. iom_use('qlatisf3d') .OR. iom_use('qhcisf3d') .OR. iom_use('qhcisf')) THEN 
     170            CALL wrk_alloc( jpi,jpj,jpk, zfwfisf3d, zqhcisf3d, zqlatisf3d ) 
     171            CALL wrk_alloc( jpi,jpj,     zqhcisf2d                        ) 
     172 
     173            zfwfisf3d(:,:,:) = 0.0_wp                         ! 3d ice shelf melting (kg/m2/s) 
     174            zqhcisf3d(:,:,:) = 0.0_wp                         ! 3d heat content flux (W/m2) 
     175            zqlatisf3d(:,:,:)= 0.0_wp                         ! 3d ice shelf melting latent heat flux (W/m2) 
     176            zqhcisf2d(:,:)   = fwfisf(:,:) * zt_frz * rcp     ! 2d heat content flux (W/m2) 
     177 
     178            DO jj = 1,jpj 
     179               DO ji = 1,jpi 
     180                  ikt = misfkt(ji,jj) 
     181                  ikb = misfkb(ji,jj) 
     182                  DO jk = ikt, ikb - 1 
     183                     zfwfisf3d (ji,jj,jk) = zfwfisf3d (ji,jj,jk) + fwfisf   (ji,jj) * r1_hisf_tbl(ji,jj) * e3t_n(ji,jj,jk) 
     184                     zqhcisf3d (ji,jj,jk) = zqhcisf3d (ji,jj,jk) + zqhcisf2d(ji,jj) * r1_hisf_tbl(ji,jj) * e3t_n(ji,jj,jk) 
     185                     zqlatisf3d(ji,jj,jk) = zqlatisf3d(ji,jj,jk) + qisf     (ji,jj) * r1_hisf_tbl(ji,jj) * e3t_n(ji,jj,jk) 
     186                  END DO 
     187                  zfwfisf3d (ji,jj,jk) = zfwfisf3d (ji,jj,jk) + fwfisf   (ji,jj) * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) * e3t_n(ji,jj,jk) 
     188                  zqhcisf3d (ji,jj,jk) = zqhcisf3d (ji,jj,jk) + zqhcisf2d(ji,jj) * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) * e3t_n(ji,jj,jk) 
     189                  zqlatisf3d(ji,jj,jk) = zqlatisf3d(ji,jj,jk) + qisf     (ji,jj) * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) * e3t_n(ji,jj,jk) 
     190               END DO 
     191            END DO 
     192 
     193            CALL iom_put('fwfisf3d' , zfwfisf3d (:,:,:)) 
     194            CALL iom_put('qlatisf3d', zqlatisf3d(:,:,:)) 
     195            CALL iom_put('qhcisf3d' , zqhcisf3d (:,:,:)) 
     196            CALL iom_put('qhcisf'   , zqhcisf2d (:,:  )) 
     197 
     198            CALL wrk_dealloc( jpi,jpj,jpk, zfwfisf3d, zqhcisf3d, zqlatisf3d ) 
     199            CALL wrk_dealloc( jpi,jpj,     zqhcisf2d                        ) 
     200         END IF 
     201 
     202         ! output 
     203         CALL iom_put('qlatisf'  , qisf) 
     204         CALL iom_put('fwfisf', fwfisf) 
     205!============================================================================================================================================= 
    165206 
    166207         IF( kt == nit000 ) THEN                         !   set the forcing field at nit000 - 1    ! 
     
    177218         END IF 
    178219         !  
    179          ! output 
    180          CALL iom_put('qisf'  , qisf) 
    181          CALL iom_put('fwfisf', fwfisf) 
    182  
    183220         ! deallocation 
    184221         CALL wrk_dealloc( jpi,jpj, zt_frz, zdep  ) 
Note: See TracChangeset for help on using the changeset viewer.