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 10014 for NEMO/branches/UKMO/dev_r9950_old_tidal_mixing/src – NEMO

Ignore:
Timestamp:
2018-07-30T12:27:40+02:00 (6 years ago)
Author:
davestorkey
Message:

UKMO dev_r9950_old_tidal_mixing branch: update to be relative to rev 10011 of NEMO4_beta_mirror branch.

Location:
NEMO/branches/UKMO/dev_r9950_old_tidal_mixing/src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/dev_r9950_old_tidal_mixing/src/ICE/icealb.F90

    r9950 r10014  
    110110      IF( ln_timing )   CALL timing_start('icealb') 
    111111      ! 
    112       z1_href_pnd = 0.05 
     112      z1_href_pnd = 1. / 0.05 
    113113      z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) )  
    114114      z1_c2 = 1. / 0.05 
  • NEMO/branches/UKMO/dev_r9950_old_tidal_mixing/src/OCE/DYN/dynzad.F90

    r9950 r10014  
    8989      ! 
    9090      ! Surface and bottom advective fluxes set to zero 
    91       IF( ln_isfcav ) THEN 
    92          DO jj = 2, jpjm1 
    93             DO ji = fs_2, fs_jpim1           ! vector opt. 
    94                zwuw(ji,jj, 1:miku(ji,jj) ) = 0._wp 
    95                zwvw(ji,jj, 1:mikv(ji,jj) ) = 0._wp 
    96                zwuw(ji,jj,jpk) = 0._wp 
    97                zwvw(ji,jj,jpk) = 0._wp 
    98             END DO 
    99          END DO 
    100       ELSE 
    101          DO jj = 2, jpjm1         
    102             DO ji = fs_2, fs_jpim1           ! vector opt. 
    103                zwuw(ji,jj, 1 ) = 0._wp 
    104                zwvw(ji,jj, 1 ) = 0._wp 
    105                zwuw(ji,jj,jpk) = 0._wp 
    106                zwvw(ji,jj,jpk) = 0._wp 
    107             END DO   
    108          END DO 
    109       END IF 
    110  
     91      DO jj = 2, jpjm1         
     92         DO ji = fs_2, fs_jpim1           ! vector opt. 
     93            zwuw(ji,jj, 1 ) = 0._wp 
     94            zwvw(ji,jj, 1 ) = 0._wp 
     95            zwuw(ji,jj,jpk) = 0._wp 
     96            zwvw(ji,jj,jpk) = 0._wp 
     97         END DO   
     98      END DO 
     99      ! 
    111100      DO jk = 1, jpkm1              ! Vertical momentum advection at u- and v-points 
    112101         DO jj = 2, jpjm1 
  • NEMO/branches/UKMO/dev_r9950_old_tidal_mixing/src/OCE/ICB/icbdia.F90

    r9950 r10014  
    5151 
    5252   REAL(wp), DIMENSION(:,:)  , ALLOCATABLE, PUBLIC  ::   berg_melt       ! Melting+erosion rate of icebergs     [kg/s/m2] 
     53   REAL(wp), DIMENSION(:,:)  , ALLOCATABLE, PUBLIC  ::   berg_melt_hcflx ! Heat flux to ocean due to heat content of melting icebergs [J/s/m2] 
     54   REAL(wp), DIMENSION(:,:)  , ALLOCATABLE, PUBLIC  ::   berg_melt_qlat  ! Heat flux to ocean due to latent heat of melting icebergs [J/s/m2] 
    5355   REAL(wp), DIMENSION(:,:)  , ALLOCATABLE, PUBLIC  ::   buoy_melt       ! Buoyancy component of melting rate   [kg/s/m2] 
    5456   REAL(wp), DIMENSION(:,:)  , ALLOCATABLE, PUBLIC  ::   eros_melt       ! Erosion component of melting rate    [kg/s/m2] 
     
    101103 
    102104      ALLOCATE( berg_melt    (jpi,jpj)   )           ;   berg_melt   (:,:)   = 0._wp 
     105      ALLOCATE( berg_melt_hcflx(jpi,jpj) )           ;   berg_melt_hcflx(:,:)   = 0._wp 
     106      ALLOCATE( berg_melt_qlat(jpi,jpj)  )           ;   berg_melt_qlat(:,:)   = 0._wp 
    103107      ALLOCATE( buoy_melt    (jpi,jpj)   )           ;   buoy_melt   (:,:)   = 0._wp 
    104108      ALLOCATE( eros_melt    (jpi,jpj)   )           ;   eros_melt   (:,:)   = 0._wp 
     
    364368      IF( .NOT.ln_bergdia )   RETURN 
    365369      berg_melt   (:,:)   = 0._wp 
     370      berg_melt_hcflx(:,:)   = 0._wp 
     371      berg_melt_qlat(:,:)   = 0._wp 
    366372      buoy_melt   (:,:)   = 0._wp 
    367373      eros_melt   (:,:)   = 0._wp 
     
    384390      ! 
    385391      CALL iom_put( "berg_melt"        , berg_melt   (:,:)   )   ! Melt rate of icebergs                     [kg/m2/s] 
     392      !! NB. The berg_melt_hcflx field is currently always zero - see comment in icbthm.F90 
     393      CALL iom_put( "berg_melt_hcflx"  , berg_melt_hcflx(:,:))   ! Heat flux to ocean due to heat content of melting icebergs [J/m2/s] 
     394      CALL iom_put( "berg_melt_qlat"   , berg_melt_qlat(:,:) )   ! Heat flux to ocean due to latent heat of melting icebergs [J/m2/s] 
    386395      CALL iom_put( "berg_buoy_melt"   , buoy_melt   (:,:)   )   ! Buoyancy component of iceberg melt rate   [kg/m2/s] 
    387396      CALL iom_put( "berg_eros_melt"   , eros_melt   (:,:)   )   ! Erosion component of iceberg melt rate    [kg/m2/s] 
     
    471480 
    472481 
    473    SUBROUTINE icb_dia_melt(ki, kj, pmnew, pheat, pmass_scale,     & 
     482   SUBROUTINE icb_dia_melt(ki, kj, pmnew, pheat_hcflux, pheat_latent, pmass_scale,     & 
    474483      &                    pdM, pdMbitsE, pdMbitsM, pdMb, pdMe,   & 
    475484      &                    pdMv, pz1_dt_e1e2 ) 
     
    477486      !!---------------------------------------------------------------------- 
    478487      INTEGER , INTENT(in) ::   ki, kj 
    479       REAL(wp), INTENT(in) ::   pmnew, pheat, pmass_scale 
     488      REAL(wp), INTENT(in) ::   pmnew, pheat_hcflux, pheat_latent, pmass_scale 
    480489      REAL(wp), INTENT(in) ::   pdM, pdMbitsE, pdMbitsM, pdMb, pdMe, pdMv, pz1_dt_e1e2 
    481490      !!---------------------------------------------------------------------- 
     
    484493      ! 
    485494      berg_melt (ki,kj) = berg_melt (ki,kj) + pdM      * pz1_dt_e1e2   ! kg/m2/s 
     495      berg_melt_hcflx (ki,kj) = berg_melt_hcflx (ki,kj) + pheat_hcflux * pz1_dt_e1e2   ! J/m2/s 
     496      berg_melt_qlat (ki,kj) = berg_melt_qlat (ki,kj) + pheat_latent * pz1_dt_e1e2   ! J/m2/s 
    486497      bits_src  (ki,kj) = bits_src  (ki,kj) + pdMbitsE * pz1_dt_e1e2   ! mass flux into bergy bitskg/m2/s 
    487498      bits_melt (ki,kj) = bits_melt (ki,kj) + pdMbitsM * pz1_dt_e1e2   ! melt rate of bergy bits kg/m2/s 
     
    489500      eros_melt (ki,kj) = eros_melt (ki,kj) + pdMe     * pz1_dt_e1e2   ! erosion rate kg/m2/s 
    490501      conv_melt (ki,kj) = conv_melt (ki,kj) + pdMv     * pz1_dt_e1e2   ! kg/m2/s 
    491       heat_to_ocean_net = heat_to_ocean_net + pheat * pmass_scale * berg_dt         ! J 
     502      heat_to_ocean_net = heat_to_ocean_net + (pheat_hcflux + pheat_latent) * pmass_scale * berg_dt         ! J 
    492503      IF( pmnew <= 0._wp ) nbergs_melted = nbergs_melted + 1                        ! Delete the berg if completely melted 
    493504      ! 
  • NEMO/branches/UKMO/dev_r9950_old_tidal_mixing/src/OCE/ICB/icbthm.F90

    r9950 r10014  
    5050      REAL(wp) ::   zM, zT, zW, zL, zSST, zVol, zLn, zWn, zTn, znVol, zIC, zDn 
    5151      REAL(wp) ::   zMv, zMe, zMb, zmelt, zdvo, zdva, zdM, zSs, zdMe, zdMb, zdMv 
    52       REAL(wp) ::   zMnew, zMnew1, zMnew2, zheat, z1_12 
     52      REAL(wp) ::   zMnew, zMnew1, zMnew2, zheat_hcflux, zheat_latent, z1_12 
    5353      REAL(wp) ::   zMbits, znMbits, zdMbitsE, zdMbitsM, zLbits, zAbits, zMbb 
    5454      REAL(wp) ::   zxi, zyj, zff, z1_rday, z1_e1e2, zdt, z1_dt, z1_dt_e1e2 
     
    6868      ! 
    6969      berg_grid%floating_melt(:,:) = 0._wp 
     70      ! calving_hflx re-used here as temporary workspace for the heat flux associated with melting 
    7071      berg_grid%calving_hflx(:,:)  = 0._wp 
    7172      ! 
     
    166167            zmelt    = ( zdM - ( zdMbitsE - zdMbitsM ) ) * z1_dt   ! kg/s 
    167168            berg_grid%floating_melt(ii,ij) = berg_grid%floating_melt(ii,ij) + zmelt    * z1_e1e2    ! kg/m2/s 
    168             zheat = zmelt * pt%heat_density              ! kg/s x J/kg = J/s 
    169             berg_grid%calving_hflx (ii,ij) = berg_grid%calving_hflx (ii,ij) + zheat    * z1_e1e2    ! W/m2 
    170             CALL icb_dia_melt( ii, ij, zMnew, zheat, this%mass_scaling,       & 
     169            !! NB. The src_calving_hflx field is currently hardwired to zero in icb_stp, which means that the 
     170            !!     heat density of the icebergs is zero and the heat content flux to the ocean from iceberg 
     171            !!     melting is always zero. Leaving the term in the code until such a time as this is fixed. DS. 
     172            zheat_hcflux = zmelt * pt%heat_density       ! heat content flux : kg/s x J/kg = J/s 
     173            zheat_latent = - zmelt * rLfus               ! latent heat flux:  kg/s x J/kg = J/s 
     174            berg_grid%calving_hflx (ii,ij) = berg_grid%calving_hflx (ii,ij) + ( zheat_hcflux + zheat_latent ) * z1_e1e2    ! W/m2 
     175            CALL icb_dia_melt( ii, ij, zMnew, zheat_hcflux, zheat_latent, this%mass_scaling,       & 
    171176               &                       zdM, zdMbitsE, zdMbitsM, zdMb, zdMe,   & 
    172177               &                       zdMv, z1_dt_e1e2 ) 
     
    214219      IF(.NOT. ln_passive_mode ) THEN 
    215220         emp (:,:) = emp (:,:) - berg_grid%floating_melt(:,:) 
    216 !!       qns (:,:) = qns (:,:) + berg_grid%calving_hflx (:,:)  !!gm heat flux not yet properly coded ==>> need it, SOLVE that! 
     221         qns (:,:) = qns (:,:) + berg_grid%calving_hflx (:,:)   
    217222      ENDIF 
    218223      ! 
  • NEMO/branches/UKMO/dev_r9950_old_tidal_mixing/src/OCE/IOM/iom.F90

    r9950 r10014  
    150150      ! 
    151151      IF( TRIM(cdname) == TRIM(cxios_context) ) THEN   
    152          CALL set_grid( "T", glamt, gphit, .FALSE. )  
    153          CALL set_grid( "U", glamu, gphiu, .FALSE. ) 
    154          CALL set_grid( "V", glamv, gphiv, .FALSE. ) 
    155          CALL set_grid( "W", glamt, gphit, .FALSE. ) 
     152         CALL set_grid( "T", glamt, gphit, .FALSE., .FALSE. )  
     153         CALL set_grid( "U", glamu, gphiu, .FALSE., .FALSE. ) 
     154         CALL set_grid( "V", glamv, gphiv, .FALSE., .FALSE. ) 
     155         CALL set_grid( "W", glamt, gphit, .FALSE., .FALSE. ) 
    156156         CALL set_grid_znl( gphit ) 
    157157         ! 
     
    171171         CALL dom_grid_crs   ! Save the parent grid information  & Switch to coarse grid domain 
    172172         ! 
    173          CALL set_grid( "T", glamt_crs, gphit_crs, .FALSE. )  
    174          CALL set_grid( "U", glamu_crs, gphiu_crs, .FALSE. )  
    175          CALL set_grid( "V", glamv_crs, gphiv_crs, .FALSE. )  
    176          CALL set_grid( "W", glamt_crs, gphit_crs, .FALSE. )  
     173         CALL set_grid( "T", glamt_crs, gphit_crs, .FALSE., .FALSE. )  
     174         CALL set_grid( "U", glamu_crs, gphiu_crs, .FALSE., .FALSE. )  
     175         CALL set_grid( "V", glamv_crs, gphiv_crs, .FALSE., .FALSE. )  
     176         CALL set_grid( "W", glamt_crs, gphit_crs, .FALSE., .FALSE. )  
    177177         CALL set_grid_znl( gphit_crs ) 
    178178          ! 
     
    227227      IF( TRIM(cdname) == TRIM(crxios_context) ) THEN 
    228228!set names of the fields in restart file IF using XIOS to read data 
    229           CALL iom_set_rst_context() 
     229          CALL iom_set_rst_context(.TRUE.) 
    230230          CALL iom_set_rst_vars(rst_rfields) 
    231231!set which fields are to be read from restart file 
     
    233233      ELSE IF( TRIM(cdname) == TRIM(cwxios_context) ) THEN 
    234234!set names of the fields in restart file IF using XIOS to write data 
    235           CALL iom_set_rst_context() 
     235          CALL iom_set_rst_context(.FALSE.) 
    236236          CALL iom_set_rst_vars(rst_wfields) 
    237237!set which fields are to be written to a restart file 
     
    571571   END SUBROUTINE iom_set_rstw_active 
    572572 
    573    SUBROUTINE iom_set_rst_context( )  
     573   SUBROUTINE iom_set_rst_context(ld_rstr)  
    574574     !!--------------------------------------------------------------------- 
    575575      !!                   ***  SUBROUTINE  iom_set_rst_context  *** 
     
    579579      !!                
    580580      !!--------------------------------------------------------------------- 
     581   LOGICAL, INTENT(IN)               :: ld_rstr 
     582!ld_rstr is true for restart context. There is no need to define grid for  
     583!restart read, because it's read from file 
    581584#if defined key_iomput 
    582585   TYPE(xios_domaingroup)            :: domaingroup_hdl  
     
    589592     CALL xios_get_handle("domain_definition",domaingroup_hdl)  
    590593     CALL xios_add_child(domaingroup_hdl, domain_hdl, "grid_N")  
    591      CALL set_grid("N", glamt, gphit, .TRUE.)  
     594     CALL set_grid("N", glamt, gphit, .TRUE., ld_rstr)  
    592595  
    593596     CALL xios_get_handle("axis_definition",axisgroup_hdl)  
     
    19351938 
    19361939 
    1937    SUBROUTINE set_grid( cdgrd, plon, plat, ldxios ) 
     1940   SUBROUTINE set_grid( cdgrd, plon, plat, ldxios, ldrxios ) 
    19381941      !!---------------------------------------------------------------------- 
    19391942      !!                     ***  ROUTINE set_grid  *** 
     
    19471950      INTEGER  :: ni, nj 
    19481951      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zmask 
    1949       LOGICAL, INTENT(IN) :: ldxios 
     1952      LOGICAL, INTENT(IN) :: ldxios, ldrxios 
    19501953      !!---------------------------------------------------------------------- 
    19511954      ! 
     
    19551958      CALL iom_set_domain_attr("grid_"//cdgrd, ni_glo=jpiglo, nj_glo=jpjglo, ibegin=nimpp+nldi-2, jbegin=njmpp+nldj-2, ni=ni, nj=nj) 
    19561959      CALL iom_set_domain_attr("grid_"//cdgrd, data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 
    1957       CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)),   & 
     1960!don't define lon and lat for restart reading context.  
     1961      IF ( .NOT.ldrxios ) & 
     1962         CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)),   & 
    19581963         &                                     latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /)))   
    19591964      ! 
  • NEMO/branches/UKMO/dev_r9950_old_tidal_mixing/src/OCE/LBC/mpp_nfd_generic.h90

    r9945 r10014  
    9595         ALLOCATE( ztabl(jpimax   ,4,ipk,ipl,ipf) , ztabr(jpimax*jpmaxngh,4,ipk,ipl,ipf) )  
    9696         ! 
    97          ztabr(:,:,:,:,:) = 0._wp 
    98          ztabl(:,:,:,:,:) = 0._wp 
     97         ! when some processors of the north fold are suppressed,  
     98         ! values of ztab* arrays corresponding to these suppressed domain won't be defined  
     99         ! and we need a default definition to 0. 
     100         ! a better test should be: a testing if "suppressed land-processors" belongs to the north-pole folding 
     101         IF ( jpni*jpnj /= jpnij ) THEN 
     102            ztabr(:,:,:,:,:) = 0._wp 
     103            ztabl(:,:,:,:,:) = 0._wp 
     104         END IF 
    99105         ! 
    100106         DO jf = 1, ipf 
     
    183189         ALLOCATE( znorthgloio(jpimax,4,ipk,ipl,ipf,jpni) ) 
    184190         ! 
    185          ztab(:,:,:,:,:)=0._wp 
     191         ! when some processors of the north fold are suppressed, 
     192         ! values of ztab* arrays corresponding to these suppressed domain won't be defined 
     193         ! and we need a default definition to 0. 
     194         ! a better test should be: a testing if "suppressed land-processors" belongs to the north-pole folding 
     195         IF ( jpni*jpnj /= jpnij ) ztab(:,:,:,:,:)=0._wp 
    186196         ! 
    187197         CALL MPI_ALLGATHER( znorthloc  , itaille, MPI_DOUBLE_PRECISION,                & 
  • NEMO/branches/UKMO/dev_r9950_old_tidal_mixing/src/OCE/SBC/sbcwave.F90

    r9950 r10014  
    131131         END DO 
    132132      ELSE IF( ll_st_peakfr ) THEN    ! peak wave number calculated from the peak frequency received by the wave model 
     133         DO jj = 1, jpj 
     134            DO ji = 1, jpi 
     135               zk_t(ji,jj) = ( 2.0_wp * rpi * wfreq(ji,jj) ) * ( 2.0_wp * rpi * wfreq(ji,jj) ) / grav 
     136            END DO 
     137         END DO 
    133138         DO jj = 1, jpjm1 
    134139            DO ji = 1, jpim1 
    135                zk_u(ji,jj) = 0.5_wp * ( wfreq(ji,jj)*wfreq(ji,jj) + wfreq(ji+1,jj)*wfreq(ji+1,jj) ) / grav 
    136                zk_v(ji,jj) = 0.5_wp * ( wfreq(ji,jj)*wfreq(ji,jj) + wfreq(ji,jj+1)*wfreq(ji,jj+1) ) / grav 
     140               zk_u(ji,jj) = 0.5_wp * ( zk_t(ji,jj) + zk_t(ji+1,jj) ) 
     141               zk_v(ji,jj) = 0.5_wp * ( zk_t(ji,jj) + zk_t(ji,jj+1) ) 
    137142               ! 
    138143               zu0_sd(ji,jj) = 0.5_wp * ( ut0sd(ji,jj) + ut0sd(ji+1,jj) ) 
Note: See TracChangeset for help on using the changeset viewer.