Changeset 6630 for branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90
- Timestamp:
- 2016-05-26T18:28:12+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90
r6625 r6630 40 40 #endif 41 41 USE sbc_oce ! Surface boundary condition variables. 42 USE zdfmxl, ONLY : & 43 & hmld_tref, & 44 #if defined key_karaml 45 & hmld_kara, & 46 & ln_kara, & 47 #endif 48 & hmld, & 49 & hmlp, & 50 & hmlpt 51 #if defined key_bdy 52 USE bdy_oce, ONLY: bdytmask 53 #endif 42 54 43 55 IMPLICIT NONE … … 88 100 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: seaice_bkginc ! Increment to the background sea ice conc 89 101 102 INTEGER :: mld_choice = 4 !: choice of mld criteria to use for physics assimilation 103 !: 1) hmld - Turbocline/mixing depth [W points] 104 !: 2) hmlp - Density criterion (0.01 kg/m^3 change from 10m) [W points] 105 !: 3) hmld_kara - Kara MLD [Interpolated] 106 !: 4) hmld_tref - Temperature criterion (0.2 K change from surface) [T points] 107 108 90 109 !! * Substitutions 91 110 # include "domzgr_substitute.h90" … … 127 146 REAL(wp) :: zdate_inc ! Time axis in increments file 128 147 ! 148 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: & 149 & t_bkginc_2d ! file for reading in 2D 150 ! ! temperature increments 151 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: & 152 & z_mld ! Mixed layer depth 153 129 154 REAL(wp), POINTER, DIMENSION(:,:) :: hdiv ! 2D workspace 130 155 !! … … 133 158 & ln_asmdin, ln_asmiau, & 134 159 & nitbkg, nitdin, nitiaustr, nitiaufin, niaufn, & 135 & ln_salfix, salfixmin, nn_divdmp 160 & ln_salfix, salfixmin, nn_divdmp, mld_choice 136 161 !!---------------------------------------------------------------------- 137 162 … … 139 164 ! Read Namelist nam_asminc : assimilation increment interface 140 165 !----------------------------------------------------------------------- 166 167 ! Set default values 168 ln_bkgwri = .FALSE. 169 ln_trainc = .FALSE. 170 ln_dyninc = .FALSE. 171 ln_sshinc = .FALSE. 141 172 ln_seaiceinc = .FALSE. 173 ln_asmdin = .FALSE. 174 ln_asmiau = .TRUE. 175 ln_salfix = .FALSE. 142 176 ln_temnofreeze = .FALSE. 177 salfixmin = -9999 178 nitbkg = 0 179 nitdin = 0 180 nitiaustr = 1 181 nitiaufin = 150 182 niaufn = 0 143 183 144 184 REWIND( numnam_ref ) ! Namelist nam_asminc in reference namelist : Assimilation increment … … 171 211 WRITE(numout,*) ' Logical switch for ensuring that the sa > salfixmin ln_salfix = ', ln_salfix 172 212 WRITE(numout,*) ' Minimum salinity after applying the increments salfixmin = ', salfixmin 213 WRITE(numout,*) ' Choice of MLD for physics assimilation mld_choice = ', mld_choice 173 214 ENDIF 174 215 … … 327 368 !-------------------------------------------------------------------- 328 369 329 ALLOCATE( t_bkginc(jpi,jpj,jpk) ) 330 ALLOCATE( s_bkginc(jpi,jpj,jpk) ) 331 ALLOCATE( u_bkginc(jpi,jpj,jpk) ) 332 ALLOCATE( v_bkginc(jpi,jpj,jpk) ) 333 ALLOCATE( ssh_bkginc(jpi,jpj) ) 334 ALLOCATE( seaice_bkginc(jpi,jpj)) 370 IF ( ln_trainc ) THEN 371 ALLOCATE( t_bkginc(jpi,jpj,jpk) ) 372 ALLOCATE( s_bkginc(jpi,jpj,jpk) ) 373 t_bkginc(:,:,:) = 0.0 374 s_bkginc(:,:,:) = 0.0 375 ENDIF 376 IF ( ln_dyninc ) THEN 377 ALLOCATE( u_bkginc(jpi,jpj,jpk) ) 378 ALLOCATE( v_bkginc(jpi,jpj,jpk) ) 379 u_bkginc(:,:,:) = 0.0 380 v_bkginc(:,:,:) = 0.0 381 ENDIF 382 IF ( ln_sshinc ) THEN 383 ALLOCATE( ssh_bkginc(jpi,jpj) ) 384 ssh_bkginc(:,:) = 0.0 385 ENDIF 386 IF ( ln_seaiceinc ) THEN 387 ALLOCATE( seaice_bkginc(jpi,jpj)) 388 seaice_bkginc(:,:) = 0.0 389 ENDIF 335 390 #if defined key_asminc 336 391 ALLOCATE( ssh_iau(jpi,jpj) ) 337 #endif338 t_bkginc(:,:,:) = 0.0339 s_bkginc(:,:,:) = 0.0340 u_bkginc(:,:,:) = 0.0341 v_bkginc(:,:,:) = 0.0342 ssh_bkginc(:,:) = 0.0343 seaice_bkginc(:,:) = 0.0344 #if defined key_asminc345 392 ssh_iau(:,:) = 0.0 346 393 #endif … … 378 425 379 426 IF ( ln_trainc ) THEN 380 CALL iom_get( inum, jpdom_autoglo, 'bckint', t_bkginc, 1 ) 381 CALL iom_get( inum, jpdom_autoglo, 'bckins', s_bkginc, 1 ) 382 ! Apply the masks 383 t_bkginc(:,:,:) = t_bkginc(:,:,:) * tmask(:,:,:) 384 s_bkginc(:,:,:) = s_bkginc(:,:,:) * tmask(:,:,:) 385 ! Set missing increments to 0.0 rather than 1e+20 386 ! to allow for differences in masks 387 WHERE( ABS( t_bkginc(:,:,:) ) > 1.0e+10 ) t_bkginc(:,:,:) = 0.0 388 WHERE( ABS( s_bkginc(:,:,:) ) > 1.0e+10 ) s_bkginc(:,:,:) = 0.0 427 428 IF (ln_sco) THEN 429 430 ALLOCATE(z_mld(jpi,jpj)) 431 SELECT CASE(mld_choice) 432 CASE(1) 433 z_mld = hmld 434 CASE(2) 435 z_mld = hmlp 436 CASE(3) 437 #if defined key_karaml 438 IF ( ln_kara ) THEN 439 z_mld = hmld_kara 440 ELSE 441 CALL ctl_stop("Kara mixed layer not calculated as ln_kara=.false.") 442 ENDIF 443 #else 444 CALL ctl_stop("Kara mixed layer not defined in current version of NEMO") ! JW: Safety feature, should be removed 445 ! once the Kara mixed layer is available 446 #endif 447 CASE(4) 448 z_mld = hmld_tref 449 END SELECT 450 451 ALLOCATE( t_bkginc_2d(jpi,jpj) ) 452 CALL iom_get( inum, jpdom_autoglo, 'bckinsurft', t_bkginc_2d, 1) 453 #if defined key_bdy 454 DO jk = 1,jpkm1 455 WHERE( z_mld(:,:) > fsdepw(:,:,jk) ) 456 t_bkginc(:,:,jk) = t_bkginc_2d(:,:) * 0.5 * & 457 & ( 1 + cos( (fsdept(:,:,jk)/z_mld(:,:) ) * rpi ) ) 458 459 t_bkginc(:,:,jk) = t_bkginc(:,:,jk) * bdytmask(:,:) 460 ELSEWHERE 461 t_bkginc(:,:,jk) = 0. 462 ENDWHERE 463 ENDDO 464 #else 465 t_bkginc(:,:,:) = 0. 466 #endif 467 s_bkginc(:,:,:) = 0. 468 469 DEALLOCATE(z_mld, t_bkginc_2d) 470 471 ELSE 472 473 CALL iom_get( inum, jpdom_autoglo, 'bckint', t_bkginc, 1 ) 474 CALL iom_get( inum, jpdom_autoglo, 'bckins', s_bkginc, 1 ) 475 ! Apply the masks 476 t_bkginc(:,:,:) = t_bkginc(:,:,:) * tmask(:,:,:) 477 s_bkginc(:,:,:) = s_bkginc(:,:,:) * tmask(:,:,:) 478 ! Set missing increments to 0.0 rather than 1e+20 479 ! to allow for differences in masks 480 WHERE( ABS( t_bkginc(:,:,:) ) > 1.0e+10 ) t_bkginc(:,:,:) = 0.0 481 WHERE( ABS( s_bkginc(:,:,:) ) > 1.0e+10 ) s_bkginc(:,:,:) = 0.0 482 483 ENDIF 484 389 485 ENDIF 390 486
Note: See TracChangeset
for help on using the changeset viewer.