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 15786 – NEMO

Changeset 15786


Ignore:
Timestamp:
2022-04-21T16:42:13+02:00 (2 years ago)
Author:
jmedwards01
Message:

Replicate passive changes from 4.0.1 at r15644

Location:
NEMO/branches/UKMO/NEMO_4.0.4_CO9_wadcpl/src/OCE
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_CO9_wadcpl/src/OCE/BDY/bdydta.F90

    r15784 r15786  
    436436      bf(:,:)%lzint      = .FALSE.      ! default definition 
    437437      bf(:,:)%ltotvel    = .FALSE.      ! default definition 
     438      DO jbdy = 1, nb_bdy  
     439         bf(:,jbdy)%ibdy = jbdy  
     440      END DO  
    438441  
    439442      ! Read namelists 
     
    663666                  bf_alias(1)%ltotvel = ln_full_vel                           ! T if u3d is full velocity 
    664667                  bf_alias(1)%lzint   = ln_zinterp                            ! T if it requires a vertical interpolation 
     668!                 This is needed to avoid crashes with SSH. It has been added in 4.0.6  
     669                  bf_alias(1)%ibdy    = jbdy  
    665670               ENDIF 
    666671 
  • NEMO/branches/UKMO/NEMO_4.0.4_CO9_wadcpl/src/OCE/BDY/bdytides.F90

    r15783 r15786  
    217217                     clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_T.nc' 
    218218                     CALL iom_open( clfile, inum ) 
    219                      CALL fld_map( inum, 'z1', dta_read(1:isz,1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,1) ) 
     219                     CALL fld_map( inum, 'z1', dta_read(1:isz,1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,1), kbdy=ib_bdy ) 
    220220                     td%ssh0(:,itide,1) = dta_read(1:isz,1,1) 
    221                      CALL fld_map( inum, 'z2', dta_read(1:isz,1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,1) ) 
     221                     CALL fld_map( inum, 'z2', dta_read(1:isz,1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,1), kbdy=ib_bdy ) 
    222222                     td%ssh0(:,itide,2) = dta_read(1:isz,1,1) 
    223223                     CALL iom_close( inum ) 
     
    228228                     clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_U.nc' 
    229229                     CALL iom_open( clfile, inum ) 
    230                      CALL fld_map( inum, 'u1', dta_read(1:isz,1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,2) ) 
     230                     CALL fld_map( inum, 'u1', dta_read(1:isz,1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,2), kbdy=ib_bdy ) 
    231231                     td%u0(:,itide,1) = dta_read(1:isz,1,1) 
    232                      CALL fld_map( inum, 'u2', dta_read(1:isz,1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,2) ) 
     232                     CALL fld_map( inum, 'u2', dta_read(1:isz,1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,2), kbdy=ib_bdy ) 
    233233                     td%u0(:,itide,2) = dta_read(1:isz,1,1) 
    234234                     CALL iom_close( inum ) 
     
    239239                     clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_V.nc' 
    240240                     CALL iom_open( clfile, inum ) 
    241                      CALL fld_map( inum, 'v1', dta_read(1:isz,1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,3) ) 
     241                     CALL fld_map( inum, 'v1', dta_read(1:isz,1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,3), kbdy=ib_bdy ) 
    242242                     td%v0(:,itide,1) = dta_read(1:isz,1,1) 
    243                      CALL fld_map( inum, 'v2', dta_read(1:isz,1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,3) ) 
     243                     CALL fld_map( inum, 'v2', dta_read(1:isz,1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,3), kbdy=ib_bdy ) 
    244244                     td%v0(:,itide,2) = dta_read(1:isz,1,1) 
    245245                     CALL iom_close( inum ) 
  • NEMO/branches/UKMO/NEMO_4.0.4_CO9_wadcpl/src/OCE/SBC/fldread.F90

    r14075 r15786  
    420420         ! 
    421421         ! read before data in after arrays(as we will swap it later) 
    422          CALL fld_get( sdjf ) 
     422         if (allocated(sdjf%fnow)) then  
     423         ! Running the code suggests this array is always allocated, but may have zero size.  
     424            IF (SIZE(sdjf%fnow,1) > 0) CALL fld_get( sdjf )  
     425         endif  
    423426         ! 
    424427         clfmt = "('   fld_init : time-interpolation for ', a, ' read previous record = ', i6, ' at time = ', f7.2, ' days')" 
     
    758761                
    759762               CALL iom_getatt(knum, '_FillValue', zfv, cdvar=cdvar ) 
    760                CALL fld_bdy_interp(zdta_read, zdta_read_z, zdta_read_dz, pdta, kgrd, kbdy, zfv, ldtotvel) 
     763!              kbdy can be zero and will give Oob messages with bounds  
     764!              checking. If it becomes negative the code will crash.  
     765!              Once the missing initialization of ibdy in bdydta is  
     766!              fixed, we no longer seem to get -1. Will leave the MAX  
     767!              check for now.  
     768               CALL fld_bdy_interp(zdta_read, zdta_read_z, zdta_read_dz, pdta, kgrd, MAX(kbdy,0), zfv, ldtotvel)  
    761769               DEALLOCATE( zdta_read, zdta_read_z, zdta_read_dz ) 
    762770                
  • NEMO/branches/UKMO/NEMO_4.0.4_CO9_wadcpl/src/OCE/SBC/sbccpl.F90

    r14075 r15786  
    88   !!            3.1  ! 2009_02  (G. Madec, S. Masson, E. Maisonave, A. Caubel) generic coupled interface 
    99   !!            3.4  ! 2011_11  (C. Harris) more flexibility + multi-category fields 
     10   !!            x.y  ! 2021_10  (J. M. Edwards) Thermal coupling to sea bed  
    1011   !!---------------------------------------------------------------------- 
    1112 
     
    3233   USE cpl_oasis3     ! OASIS3 coupling 
    3334   USE geo2ocean      !  
    34    USE oce     , ONLY : tsn, un, vn, sshn, ub, vb, sshb, fraqsr_1lev 
     35   USE oce     , ONLY : tsn, un, vn, sshn, ub, vb, sshb, fraqsr_1lev,   &  
     36                        gfx_bed 
    3537   USE ocealb         !  
    3638   USE eosbn2         !  
     
    120122   INTEGER, PARAMETER ::   jpr_tauwy  = 56   ! y component of the ocean stress from waves 
    121123   INTEGER, PARAMETER ::   jpr_ts_ice = 57   ! Sea ice surface temp 
    122  
    123    INTEGER, PARAMETER ::   jprcv      = 57   ! total number of fields received   
     124   INTEGER, PARAMETER ::   jpr_t_bed  = 58   ! Sea bed temperature 
     125 
     126   INTEGER, PARAMETER ::   jprcv      = 58   ! total number of fields received   
    124127 
    125128   INTEGER, PARAMETER ::   jps_fice   =  1   ! ice fraction sent to the atmosphere 
     
    161164   INTEGER, PARAMETER ::   jps_sstfrz = 37   ! sea surface freezing temperature 
    162165   INTEGER, PARAMETER ::   jps_ttilyr = 38   ! sea ice top layer temp 
    163  
    164    INTEGER, PARAMETER ::   jpsnd      = 38   ! total number of fields sent  
     166   INTEGER, PARAMETER ::   jps_gfx_bed = 39  ! sea ice top layer temp 
     167 
     168   INTEGER, PARAMETER ::   jpsnd      = 39   ! total number of fields sent  
    165169 
    166170#if ! defined key_oasis3  
     
    182186   !                                   ! Send to the atmosphere   
    183187   TYPE(FLD_C) ::   sn_snd_temp  , sn_snd_alb , sn_snd_thick, sn_snd_crt   , sn_snd_co2,  & 
    184       &             sn_snd_thick1, sn_snd_cond, sn_snd_mpnd , sn_snd_sstfrz, sn_snd_ttilyr 
     188      &             sn_snd_thick1, sn_snd_cond, sn_snd_mpnd , sn_snd_sstfrz, sn_snd_ttilyr, &  
     189      &             sn_snd_gfx_bed  
    185190   !                                   ! Received from the atmosphere 
    186191   TYPE(FLD_C) ::   sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_tauw, sn_rcv_dqnsdt, sn_rcv_qsr,  & 
    187       &             sn_rcv_qns , sn_rcv_emp   , sn_rcv_rnf, sn_rcv_ts_ice 
     192      &             sn_rcv_qns , sn_rcv_emp   , sn_rcv_rnf, sn_rcv_ts_ice, sn_rcv_t_bed 
    188193   TYPE(FLD_C) ::   sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp, sn_rcv_icb, sn_rcv_isf 
    189194   ! Send to waves  
     
    271276         &                  sn_snd_temp  , sn_snd_alb   , sn_snd_thick, sn_snd_crt   , sn_snd_co2   ,  &  
    272277         &                  sn_snd_ttilyr, sn_snd_cond  , sn_snd_mpnd , sn_snd_sstfrz, sn_snd_thick1,  &  
    273          &                  sn_snd_ifrac , sn_snd_crtw  , sn_snd_wlev , sn_rcv_hsig  , sn_rcv_phioc ,  &  
     278         &                  sn_snd_ifrac , sn_snd_crtw  , sn_snd_wlev , sn_snd_gfx_bed,                &  
     279         &                  sn_rcv_t_bed, sn_rcv_hsig  , sn_rcv_phioc,                                 & 
    274280         &                  sn_rcv_w10m  , sn_rcv_taumod, sn_rcv_tau  , sn_rcv_dqnsdt, sn_rcv_qsr   ,  &  
    275281         &                  sn_rcv_sdrfx , sn_rcv_sdrfy , sn_rcv_wper , sn_rcv_wnum  , sn_rcv_tauwoc,  & 
     
    331337         WRITE(numout,*)'      Neutral surf drag coefficient   = ', TRIM(sn_rcv_wdrag%cldes ), ' (', TRIM(sn_rcv_wdrag%clcat ), ')'  
    332338         WRITE(numout,*)'      Sea ice surface skin temperature= ', TRIM(sn_rcv_ts_ice%cldes), ' (', TRIM(sn_rcv_ts_ice%clcat), ')'  
     339         WRITE(numout,*)'      Sea bed temperature             = ', TRIM(sn_rcv_t_bed%cldes   ), ' (', TRIM(sn_rcv_t_bed%clcat   ), ')' 
    333340         WRITE(numout,*)'  sent fields (multiple ice categories)' 
    334341         WRITE(numout,*)'      surface temperature             = ', TRIM(sn_snd_temp%cldes  ), ' (', TRIM(sn_snd_temp%clcat  ), ')' 
     
    346353         WRITE(numout,*)'      sea surface freezing temp       = ', TRIM(sn_snd_sstfrz%cldes), ' (', TRIM(sn_snd_sstfrz%clcat), ')' 
    347354         WRITE(numout,*)'      water level                     = ', TRIM(sn_snd_wlev%cldes  ), ' (', TRIM(sn_snd_wlev%clcat  ), ')'  
     355         WRITE(numout,*)'      Heat flux to sea bed            = ', TRIM(sn_snd_gfx_bed%cldes  ), ' (', TRIM(sn_snd_gfx_bed%clcat  ), ')' 
    348356         WRITE(numout,*)'      mean sea level pressure         = ', TRIM(sn_rcv_mslp%cldes  ), ' (', TRIM(sn_rcv_mslp%clcat  ), ')'  
    349357         WRITE(numout,*)'      surface current to waves        = ', TRIM(sn_snd_crtw%cldes  ), ' (', TRIM(sn_snd_crtw%clcat  ), ')'  
     
    603611#endif 
    604612      !                                                      ! ------------------------- ! 
     613      !                                                      !    sea bed temperature    !     
     614      !                                                      ! ------------------------- !  
     615      srcv(jpr_t_bed)%clname = 'OT_bed'    ! needed by Met Office  
     616      IF ( TRIM( sn_rcv_t_bed%cldes ) == 'coupled' )   srcv(jpr_t_bed)%laction = .TRUE.  
     617  
     618      !                                                      ! ------------------------- ! 
    605619      !                                                      !      Wave breaking        !     
    606620      !                                                      ! ------------------------- !  
     
    982996      !                                                      ! ------------------------- !  
    983997      ssnd(jps_wlev)%clname = 'O_Wlevel' ;  IF( TRIM(sn_snd_wlev%cldes) == 'coupled' )   ssnd(jps_wlev)%laction = .TRUE.  
     998  
     999      !   
     1000      !                                                      ! ------------------------- !   
     1001      !                                                      !     Sea bed heat flux     !       
     1002      !                                                      ! ------------------------- !   
     1003      ssnd(jps_gfx_bed)%clname = 'O_Gfx' ;  IF( TRIM(sn_snd_gfx_bed%cldes) == 'coupled' )   ssnd(jps_gfx_bed)%laction = .TRUE.   
    9841004 
    9851005      !                                                      ! ------------------------------- ! 
     
    11201140      !!                        qsr          solar ocean heat fluxes   (ocean only case) 
    11211141      !!                        emp          upward mass flux [evap. - precip. (- runoffs) (- calving)] (ocean only case) 
     1142      !!                        t_bed        temperature of sea bed 
    11221143      !!---------------------------------------------------------------------- 
    11231144      USE zdf_oce,  ONLY :   ln_zdfswm 
     
    11351156      REAL(wp) ::   zcdrag = 1.5e-3        ! drag coefficient 
    11361157      REAL(wp) ::   zzx, zzy               ! temporary variables 
    1137       REAL(wp), DIMENSION(jpi,jpj) ::   ztx, zty, zmsk, zemp, zqns, zqsr, zcloud_fra 
     1158      REAL(wp), DIMENSION(jpi,jpj) ::   ztx, zty, zmsk, zemp, zqns, zqsr, zcloud_fra, zt_bed 
    11381159      !!---------------------------------------------------------------------- 
    11391160      ! 
     
    12851306      ENDIF 
    12861307 
     1308      !                                                      ! ================== ! 
     1309      !                                                      ! Sea bed temperature! 
     1310      !                                                      ! ================== ! 
     1311      IF( srcv(jpr_t_bed)%laction )   t_bed(:,:) = frcv(jpr_t_bed)%z3(:,:,1) 
     1312      ! 
    12871313      !                                                      ! ================== ! 
    12881314      !                                                      ! atmosph. CO2 (ppm) ! 
     
    26192645      END IF  
    26202646      !                                                      ! ------------------------- !  
     2647      !                                                      !   Sea bed heat flux       !   
     2648      !                                                      ! ------------------------- !   
     2649      IF( ssnd(jps_gfx_bed)%laction ) THEN   
     2650!@!         Modified from following block -- what do we need?  
     2651!@!         IF( ln_apr_dyn ) THEN    
     2652!@!            IF( kt /= nit000 ) THEN    
     2653!@!               ztmp1(:,:) = sshb(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )    
     2654!@!            ELSE    
     2655!@!               ztmp1(:,:) = sshb(:,:)    
     2656!@!            ENDIF    
     2657!@!         ELSE    
     2658            ztmp1(:,:) = gfx_bed(:,:)    
     2659!@!         ENDIF    
     2660         CALL cpl_snd( jps_gfx_bed  , isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info )   
     2661      END IF   
     2662      !                                                      ! ------------------------- !   
    26212663      !                                                      !   Water levels to waves   !  
    26222664      !                                                      ! ------------------------- !  
  • NEMO/branches/UKMO/NEMO_4.0.4_CO9_wadcpl/src/OCE/TRA/trabbc.F90

    r14075 r15786  
    99   !!            3.3  ! 2010-10 (G. Madec)  dynamical allocation + suppression of key_trabbc 
    1010   !!             -   ! 2010-11 (G. Madec)  use mbkt array (deepest ocean t-level) 
     11   !!            x.y  ! 2021-10 (J. M. Edwards) Add bottom coupling 
    1112   !!---------------------------------------------------------------------- 
    1213 
     
    8990         DO ji = 2, jpim1 
    9091            tsa(ji,jj,mbkt(ji,jj),jp_tem) = tsa(ji,jj,mbkt(ji,jj),jp_tem) + qgh_trd0(ji,jj) / e3t_n(ji,jj,mbkt(ji,jj)) 
     92!@!         Provisional dummy calculation  
     93            gfx_bed(ji, jj) = 1.0e2 * ( tsa(ji,jj,mbkt(ji,jj),jp_tem) - t_bed(ji,jj)) 
    9194         END DO 
    9295      END DO 
  • NEMO/branches/UKMO/NEMO_4.0.4_CO9_wadcpl/src/OCE/oce.F90

    r14075 r15786  
    6969   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   fraqsr_1lev        !: fraction of solar net radiation absorbed in the first ocean level [-] 
    7070 
     71   !! Thermal coupling to sea bed  
     72   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   :: t_bed          !: Temperature of soil level in land surface model  
     73   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   :: gfx_bed        !: Temperature of soil level in land surface model 
    7174   !!---------------------------------------------------------------------- 
    7275   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    102105         &      riceload(jpi,jpj)                                     , STAT=ierr(2) ) 
    103106         ! 
    104       ALLOCATE( fraqsr_1lev(jpi,jpj) , STAT=ierr(3) ) 
     107      ALLOCATE( fraqsr_1lev(jpi,jpj), t_bed(jpi,jpj), gfx_bed(jpi,jpj) , STAT=ierr(3) ) 
    105108         ! 
    106109      ALLOCATE( ssha_e(jpi,jpj),  sshn_e(jpi,jpj), sshb_e(jpi,jpj), sshbb_e(jpi,jpj), & 
Note: See TracChangeset for help on using the changeset viewer.