Changeset 15786
- Timestamp:
- 2022-04-21T16:42:13+02:00 (2 years ago)
- 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 436 436 bf(:,:)%lzint = .FALSE. ! default definition 437 437 bf(:,:)%ltotvel = .FALSE. ! default definition 438 DO jbdy = 1, nb_bdy 439 bf(:,jbdy)%ibdy = jbdy 440 END DO 438 441 439 442 ! Read namelists … … 663 666 bf_alias(1)%ltotvel = ln_full_vel ! T if u3d is full velocity 664 667 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 665 670 ENDIF 666 671 -
NEMO/branches/UKMO/NEMO_4.0.4_CO9_wadcpl/src/OCE/BDY/bdytides.F90
r15783 r15786 217 217 clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_T.nc' 218 218 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 ) 220 220 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 ) 222 222 td%ssh0(:,itide,2) = dta_read(1:isz,1,1) 223 223 CALL iom_close( inum ) … … 228 228 clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_U.nc' 229 229 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 ) 231 231 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 ) 233 233 td%u0(:,itide,2) = dta_read(1:isz,1,1) 234 234 CALL iom_close( inum ) … … 239 239 clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_V.nc' 240 240 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 ) 242 242 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 ) 244 244 td%v0(:,itide,2) = dta_read(1:isz,1,1) 245 245 CALL iom_close( inum ) -
NEMO/branches/UKMO/NEMO_4.0.4_CO9_wadcpl/src/OCE/SBC/fldread.F90
r14075 r15786 420 420 ! 421 421 ! 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 423 426 ! 424 427 clfmt = "(' fld_init : time-interpolation for ', a, ' read previous record = ', i6, ' at time = ', f7.2, ' days')" … … 758 761 759 762 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) 761 769 DEALLOCATE( zdta_read, zdta_read_z, zdta_read_dz ) 762 770 -
NEMO/branches/UKMO/NEMO_4.0.4_CO9_wadcpl/src/OCE/SBC/sbccpl.F90
r14075 r15786 8 8 !! 3.1 ! 2009_02 (G. Madec, S. Masson, E. Maisonave, A. Caubel) generic coupled interface 9 9 !! 3.4 ! 2011_11 (C. Harris) more flexibility + multi-category fields 10 !! x.y ! 2021_10 (J. M. Edwards) Thermal coupling to sea bed 10 11 !!---------------------------------------------------------------------- 11 12 … … 32 33 USE cpl_oasis3 ! OASIS3 coupling 33 34 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 35 37 USE ocealb ! 36 38 USE eosbn2 ! … … 120 122 INTEGER, PARAMETER :: jpr_tauwy = 56 ! y component of the ocean stress from waves 121 123 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 124 127 125 128 INTEGER, PARAMETER :: jps_fice = 1 ! ice fraction sent to the atmosphere … … 161 164 INTEGER, PARAMETER :: jps_sstfrz = 37 ! sea surface freezing temperature 162 165 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 165 169 166 170 #if ! defined key_oasis3 … … 182 186 ! ! Send to the atmosphere 183 187 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 185 190 ! ! Received from the atmosphere 186 191 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 188 193 TYPE(FLD_C) :: sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp, sn_rcv_icb, sn_rcv_isf 189 194 ! Send to waves … … 271 276 & sn_snd_temp , sn_snd_alb , sn_snd_thick, sn_snd_crt , sn_snd_co2 , & 272 277 & 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, & 274 280 & sn_rcv_w10m , sn_rcv_taumod, sn_rcv_tau , sn_rcv_dqnsdt, sn_rcv_qsr , & 275 281 & sn_rcv_sdrfx , sn_rcv_sdrfy , sn_rcv_wper , sn_rcv_wnum , sn_rcv_tauwoc, & … … 331 337 WRITE(numout,*)' Neutral surf drag coefficient = ', TRIM(sn_rcv_wdrag%cldes ), ' (', TRIM(sn_rcv_wdrag%clcat ), ')' 332 338 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 ), ')' 333 340 WRITE(numout,*)' sent fields (multiple ice categories)' 334 341 WRITE(numout,*)' surface temperature = ', TRIM(sn_snd_temp%cldes ), ' (', TRIM(sn_snd_temp%clcat ), ')' … … 346 353 WRITE(numout,*)' sea surface freezing temp = ', TRIM(sn_snd_sstfrz%cldes), ' (', TRIM(sn_snd_sstfrz%clcat), ')' 347 354 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 ), ')' 348 356 WRITE(numout,*)' mean sea level pressure = ', TRIM(sn_rcv_mslp%cldes ), ' (', TRIM(sn_rcv_mslp%clcat ), ')' 349 357 WRITE(numout,*)' surface current to waves = ', TRIM(sn_snd_crtw%cldes ), ' (', TRIM(sn_snd_crtw%clcat ), ')' … … 603 611 #endif 604 612 ! ! ------------------------- ! 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 ! ! ------------------------- ! 605 619 ! ! Wave breaking ! 606 620 ! ! ------------------------- ! … … 982 996 ! ! ------------------------- ! 983 997 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. 984 1004 985 1005 ! ! ------------------------------- ! … … 1120 1140 !! qsr solar ocean heat fluxes (ocean only case) 1121 1141 !! emp upward mass flux [evap. - precip. (- runoffs) (- calving)] (ocean only case) 1142 !! t_bed temperature of sea bed 1122 1143 !!---------------------------------------------------------------------- 1123 1144 USE zdf_oce, ONLY : ln_zdfswm … … 1135 1156 REAL(wp) :: zcdrag = 1.5e-3 ! drag coefficient 1136 1157 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 1138 1159 !!---------------------------------------------------------------------- 1139 1160 ! … … 1285 1306 ENDIF 1286 1307 1308 ! ! ================== ! 1309 ! ! Sea bed temperature! 1310 ! ! ================== ! 1311 IF( srcv(jpr_t_bed)%laction ) t_bed(:,:) = frcv(jpr_t_bed)%z3(:,:,1) 1312 ! 1287 1313 ! ! ================== ! 1288 1314 ! ! atmosph. CO2 (ppm) ! … … 2619 2645 END IF 2620 2646 ! ! ------------------------- ! 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 ! ! ------------------------- ! 2621 2663 ! ! Water levels to waves ! 2622 2664 ! ! ------------------------- ! -
NEMO/branches/UKMO/NEMO_4.0.4_CO9_wadcpl/src/OCE/TRA/trabbc.F90
r14075 r15786 9 9 !! 3.3 ! 2010-10 (G. Madec) dynamical allocation + suppression of key_trabbc 10 10 !! - ! 2010-11 (G. Madec) use mbkt array (deepest ocean t-level) 11 !! x.y ! 2021-10 (J. M. Edwards) Add bottom coupling 11 12 !!---------------------------------------------------------------------- 12 13 … … 89 90 DO ji = 2, jpim1 90 91 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)) 91 94 END DO 92 95 END DO -
NEMO/branches/UKMO/NEMO_4.0.4_CO9_wadcpl/src/OCE/oce.F90
r14075 r15786 69 69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fraqsr_1lev !: fraction of solar net radiation absorbed in the first ocean level [-] 70 70 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 71 74 !!---------------------------------------------------------------------- 72 75 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 102 105 & riceload(jpi,jpj) , STAT=ierr(2) ) 103 106 ! 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) ) 105 108 ! 106 109 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.