Changeset 15328 for NEMO/branches/UKMO/NEMO_4.0.4_CO9_shelf_climate/src/OCE
- Timestamp:
- 2021-10-04T21:06:49+02:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/NEMO_4.0.4_CO9_shelf_climate/src/OCE/DIA/diaar5.F90
r14075 r15328 34 34 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,: ) :: thick0 ! ocean thickness (interior domain) 35 35 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sn0 ! initial salinity 36 !JT 37 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tn0 ! initial temperature 38 !JT 36 39 37 40 LOGICAL :: l_ar5 … … 54 57 ! 55 58 ALLOCATE( thick0(jpi,jpj) , sn0(jpi,jpj,jpk) , STAT=dia_ar5_alloc ) 56 !57 59 CALL mpp_sum ( 'diaar5', dia_ar5_alloc ) 58 60 IF( dia_ar5_alloc /= 0 ) CALL ctl_stop( 'STOP', 'dia_ar5_alloc: failed to allocate arrays' ) 61 62 !JT 63 ALLOCATE( tn0(jpi,jpj,jpk) , STAT=dia_ar5_alloc ) 64 CALL mpp_sum ( 'diaar5', dia_ar5_alloc ) 65 IF( dia_ar5_alloc /= 0 ) CALL ctl_stop( 'STOP', 'dia_ar5_alloc: failed to allocate Temp arrays' ) 66 !JT 59 67 ! 60 68 END FUNCTION dia_ar5_alloc … … 125 133 ENDIF 126 134 127 IF( iom_use( 'botpres' ) .OR. iom_use( 'sshthster' ) .OR. iom_use( 'sshsteric' ) ) THEN 135 IF( iom_use( 'botpres' ) .OR. iom_use( 'sshthster' ) .OR. iom_use( 'sshhlster' ) .OR. iom_use( 'sshsteric' ) .OR. & 136 & iom_use( 'sshthster_mat' ) .OR. iom_use( 'sshhlster_mat' ) .OR. iom_use( 'sshsteric_mat' ) ) THEN 128 137 ! 129 138 ztsn(:,:,:,jp_tem) = tsn(:,:,:,jp_tem) ! thermosteric ssh … … 154 163 zssh_steric = - zarho / area_tot 155 164 CALL iom_put( 'sshthster', zssh_steric ) 165 CALL iom_put( 'sshthster_mat', -zbotpres(:,:) ) 166 167 168 169 !JT 170 171 172 ! 173 ztsn(:,:,:,jp_tem) = tn0(:,:,:) ! halosteric ssh 174 ztsn(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) 175 CALL eos( ztsn, zrhd, gdept_n(:,:,:) ) ! now in situ density using initial salinity 176 ! 177 zbotpres(:,:) = 0._wp ! no atmospheric surface pressure, levitating sea-ice 178 DO jk = 1, jpkm1 179 zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk) 180 END DO 181 IF( ln_linssh ) THEN 182 IF( ln_isfcav ) THEN 183 DO ji = 1, jpi 184 DO jj = 1, jpj 185 iks = mikt(ji,jj) 186 zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,iks) + riceload(ji,jj) 187 END DO 188 END DO 189 ELSE 190 zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 191 END IF 192 !!gm 193 !!gm riceload should be added in both ln_linssh=T or F, no? 194 !!gm 195 END IF 196 ! 197 zarho = glob_sum( 'diaar5', e1e2t(:,:) * zbotpres(:,:) ) 198 zssh_steric = - zarho / area_tot 199 CALL iom_put( 'sshhlster', zssh_steric ) 200 CALL iom_put( 'sshhlster_mat', -zbotpres(:,:) ) 201 202 !JT 203 204 205 206 207 208 209 210 211 212 213 156 214 157 215 ! ! steric sea surface height … … 176 234 zssh_steric = - zarho / area_tot 177 235 CALL iom_put( 'sshsteric', zssh_steric ) 236 CALL iom_put( 'sshsteric_mat', - zbotpres(:,:) ) 178 237 ! ! ocean bottom pressure 179 238 zztmp = rau0 * grav * 1.e-4_wp ! recover pressure from pressure anomaly and cover to dbar = 1.e4 Pa … … 381 440 REAL(wp) :: zztmp 382 441 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: zsaldta ! Jan/Dec levitus salinity 442 !JT 443 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: ztemdta ! Jan/Dec levitus salinity 444 !JT 383 445 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zvol0 446 447 448 !JT 449 ! !!* namtsd namelist : Temperature & Salinity Data * 450 LOGICAL :: ln_tsd_init !: T & S data flag 451 LOGICAL :: ln_tsd_dmp !: internal damping toward input data flag 452 INTEGER :: ios, ierr0, ierr1, ierr2, ierr3 ! local integers 453 454 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files 455 ! TYPE(FLD_N), DIMENSION( jpts) :: slf_i ! array of namelist informations on the fields to read 456 TYPE(FLD_N) :: sn_tem, sn_sal 457 !JT 384 458 ! 385 459 !!---------------------------------------------------------------------- … … 389 463 & iom_use( 'masstot' ) .OR. iom_use( 'temptot' ) .OR. iom_use( 'saltot' ) .OR. & 390 464 & iom_use( 'botpres' ) .OR. iom_use( 'sshthster' ) .OR. iom_use( 'sshsteric' ) .OR. & 391 & iom_use( 'rhop' ) ) L_ar5 = .TRUE. 465 & iom_use( 'rhop' ) .OR. iom_use( 'sshhlster' ) .OR. & 466 & iom_use( 'sshthster_mat' ) .OR. iom_use( 'sshsteric_mat' ) .OR. iom_use( 'sshhlster_mat' ) ) L_ar5 = .TRUE. 392 467 393 468 IF( l_ar5 ) THEN … … 413 488 DEALLOCATE( zvol0 ) 414 489 415 IF( iom_use( 'sshthster' ) ) THEN 416 ALLOCATE( zsaldta(jpi,jpj,jpk,jpts) ) 417 CALL iom_open ( 'sali_ref_clim_monthly', inum ) 418 CALL iom_get ( inum, jpdom_data, 'vosaline' , zsaldta(:,:,:,1), 1 ) 419 CALL iom_get ( inum, jpdom_data, 'vosaline' , zsaldta(:,:,:,2), 12 ) 420 CALL iom_close( inum ) 421 422 sn0(:,:,:) = 0.5_wp * ( zsaldta(:,:,:,1) + zsaldta(:,:,:,2) ) 423 sn0(:,:,:) = sn0(:,:,:) * tmask(:,:,:) 424 IF( ln_zps ) THEN ! z-coord. partial steps 425 DO jj = 1, jpj ! interpolation of salinity at the last ocean level (i.e. the partial step) 426 DO ji = 1, jpi 427 ik = mbkt(ji,jj) 428 IF( ik > 1 ) THEN 429 zztmp = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 430 sn0(ji,jj,ik) = ( 1._wp - zztmp ) * sn0(ji,jj,ik) + zztmp * sn0(ji,jj,ik-1) 431 ENDIF 432 END DO 433 END DO 490 !JT 491 IF( iom_use( 'sshthster' ) .OR. iom_use( 'sshthster_mat' ) .OR. & 492 & iom_use( 'sshhlster' ) .OR. iom_use( 'sshhlster_mat' ) ) THEN 493 494 NAMELIST/namtsd/ ln_tsd_init, ln_tsd_dmp, cn_dir, sn_tem, sn_sal 495 !!---------------------------------------------------------------------- 496 ! 497 ! Initialisation 498 ierr0 = 0 ; ierr1 = 0 ; ierr2 = 0 ; ierr3 = 0 499 ! 500 REWIND( numnam_ref ) ! Namelist namtsd in reference namelist : 501 READ ( numnam_ref, namtsd, IOSTAT = ios, ERR = 901) 502 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtsd in reference namelist' ) 503 REWIND( numnam_cfg ) ! Namelist namtsd in configuration namelist : Parameters of the run 504 READ ( numnam_cfg, namtsd, IOSTAT = ios, ERR = 902 ) 505 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namtsd in configuration namelist' ) 506 IF(lwm) WRITE ( numond, namtsd ) 507 508 IF(lwp) THEN ! control print 509 WRITE(numout,*) 510 WRITE(numout,*) 'dia_ar5_init : Temperature & Salinity data from namtsd ' 511 WRITE(numout,*) '~~~~~~~~~~~~ ' 512 WRITE(numout,*) ' Namelist namtsd' 513 WRITE(numout,*) ' T data ln_tsd_init = ', ln_tsd_init 514 WRITE(numout,*) ' damping of ocean T & S toward T &S input data ln_tsd_dmp = ', ln_tsd_dmp 515 WRITE(numout,*) 434 516 ENDIF 435 ! 436 DEALLOCATE( zsaldta ) 437 ENDIF 438 ! 439 ENDIF 517 518 ENDIF 519 IF( iom_use( 'sshthster' ) .OR. iom_use( 'sshthster_mat' ) ) THEN 520 521 ALLOCATE( zsaldta(jpi,jpj,jpk,jpts) ) 522 CALL iom_open ( TRIM( cn_dir )//TRIM(sn_sal%clname), inum ) 523 CALL iom_get ( inum, jpdom_data, TRIM(sn_sal%clvar), zsaldta(:,:,:,1), 1 ) 524 CALL iom_get ( inum, jpdom_data, TRIM(sn_sal%clvar), zsaldta(:,:,:,2), 12 ) 525 CALL iom_close( inum ) 526 527 sn0(:,:,:) = 0.5_wp * ( zsaldta(:,:,:,1) + zsaldta(:,:,:,2) ) 528 sn0(:,:,:) = sn0(:,:,:) * tmask(:,:,:) 529 530 IF( ln_zps ) THEN ! z-coord. partial steps 531 DO jj = 1, jpj ! interpolation of salinity at the last ocean level (i.e. the partial step) 532 DO ji = 1, jpi 533 ik = mbkt(ji,jj) 534 IF( ik > 1 ) THEN 535 zztmp = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 536 sn0(ji,jj,ik) = ( 1._wp - zztmp ) * sn0(ji,jj,ik) + zztmp * sn0(ji,jj,ik-1) 537 ENDIF 538 END DO 539 END DO 540 ENDIF 541 ! 542 DEALLOCATE( zsaldta ) 543 ENDIF 544 IF( iom_use( 'sshhlster' ) .OR. iom_use( 'sshhlster_mat' ) ) THEN 545 546 ALLOCATE( ztemdta(jpi,jpj,jpk,jpts) ) 547 CALL iom_open ( TRIM( cn_dir )//TRIM(sn_tem%clname), inum ) 548 CALL iom_get ( inum, jpdom_data, TRIM(sn_tem%clvar), ztemdta(:,:,:,1), 1 ) 549 CALL iom_get ( inum, jpdom_data, TRIM(sn_tem%clvar), ztemdta(:,:,:,2), 12 ) 550 CALL iom_close( inum ) 551 552 tn0(:,:,:) = 0.5_wp * ( ztemdta(:,:,:,1) + ztemdta(:,:,:,2) ) 553 tn0(:,:,:) = tn0(:,:,:) * tmask(:,:,:) 554 555 IF( ln_zps ) THEN ! z-coord. partial steps 556 DO jj = 1, jpj ! interpolation of salinity at the last ocean level (i.e. the partial step) 557 DO ji = 1, jpi 558 ik = mbkt(ji,jj) 559 IF( ik > 1 ) THEN 560 zztmp = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 561 tn0(ji,jj,ik) = ( 1._wp - zztmp ) * tn0(ji,jj,ik) + zztmp * tn0(ji,jj,ik-1) 562 ENDIF 563 END DO 564 END DO 565 ENDIF 566 ! 567 DEALLOCATE( ztemdta ) 568 ENDIF 569 570 ENDIF 571 !JT 572 ! 440 573 ! 441 574 END SUBROUTINE dia_ar5_init
Note: See TracChangeset
for help on using the changeset viewer.