- Timestamp:
- 2018-01-12T10:38:50+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90
r9168 r9213 74 74 REAL(wp), PUBLIC, DIMENSION(:) , ALLOCATABLE :: wgtiau !: IAU weights for each time step 75 75 #if defined key_asminc 76 REAL(wp), PUBLIC, DIMENSION(:,:) , ALLOCATABLE :: ssh_iau!: IAU-weighted sea surface height increment76 REAL(wp), PUBLIC, DIMENSION(:,:) , ALLOCATABLE :: ssh_iau !: IAU-weighted sea surface height increment 77 77 #endif 78 78 ! !!! time steps relative to the cycle interval [0,nitend-nit000-1] … … 254 254 !-------------------------------------------------------------------- 255 255 256 IF 257 256 IF( ln_asmiau ) THEN 257 ! 258 258 ALLOCATE( wgtiau( icycper ) ) 259 259 ! 260 260 wgtiau(:) = 0._wp 261 262 IF ( niaufn == 0 ) THEN 263 264 !--------------------------------------------------------- 265 ! Constant IAU forcing 266 !--------------------------------------------------------- 267 261 ! 262 ! !--------------------------------------------------------- 263 IF( niaufn == 0 ) THEN ! Constant IAU forcing 264 ! !--------------------------------------------------------- 268 265 DO jt = 1, iiauper 269 266 wgtiau(jt+nitiaustr-1) = 1.0 / REAL( iiauper ) 270 267 END DO 271 272 ELSEIF ( niaufn == 1 ) THEN 273 274 !--------------------------------------------------------- 275 ! Linear hat-like, centred in middle of IAU interval 276 !--------------------------------------------------------- 277 268 ! !--------------------------------------------------------- 269 ELSEIF ( niaufn == 1 ) THEN ! Linear hat-like, centred in middle of IAU interval 270 ! !--------------------------------------------------------- 278 271 ! Compute the normalization factor 279 znorm = 0. 0280 IF ( MOD( iiauper, 2 ) == 0 ) THEN! Even number of time steps in IAU interval272 znorm = 0._wp 273 IF( MOD( iiauper, 2 ) == 0 ) THEN ! Even number of time steps in IAU interval 281 274 imid = iiauper / 2 282 275 DO jt = 1, imid … … 284 277 END DO 285 278 znorm = 2.0 * znorm 286 ELSE ! Odd number of time steps in IAU interval279 ELSE ! Odd number of time steps in IAU interval 287 280 imid = ( iiauper + 1 ) / 2 288 281 DO jt = 1, imid - 1 … … 292 285 ENDIF 293 286 znorm = 1.0 / znorm 294 287 ! 295 288 DO jt = 1, imid - 1 296 289 wgtiau(jt+nitiaustr-1) = REAL( jt ) * znorm … … 299 292 wgtiau(jt+nitiaustr-1) = REAL( iiauper - jt + 1 ) * znorm 300 293 END DO 301 294 ! 302 295 ENDIF 303 296 … … 325 318 !-------------------------------------------------------------------- 326 319 327 ALLOCATE( t_bkginc(jpi,jpj,jpk) ) 328 ALLOCATE( s_bkginc(jpi,jpj,jpk) ) 329 ALLOCATE( u_bkginc(jpi,jpj,jpk) ) 330 ALLOCATE( v_bkginc(jpi,jpj,jpk) ) 331 ALLOCATE( ssh_bkginc(jpi,jpj) ) 332 ALLOCATE( seaice_bkginc(jpi,jpj)) 333 t_bkginc (:,:,:) = 0._wp 334 s_bkginc (:,:,:) = 0._wp 335 u_bkginc (:,:,:) = 0._wp 336 v_bkginc (:,:,:) = 0._wp 337 ssh_bkginc (:,:) = 0._wp 338 seaice_bkginc(:,:) = 0._wp 320 ALLOCATE( t_bkginc (jpi,jpj,jpk) ) ; t_bkginc (:,:,:) = 0._wp 321 ALLOCATE( s_bkginc (jpi,jpj,jpk) ) ; s_bkginc (:,:,:) = 0._wp 322 ALLOCATE( u_bkginc (jpi,jpj,jpk) ) ; u_bkginc (:,:,:) = 0._wp 323 ALLOCATE( v_bkginc (jpi,jpj,jpk) ) ; v_bkginc (:,:,:) = 0._wp 324 ALLOCATE( ssh_bkginc (jpi,jpj) ) ; ssh_bkginc (:,:) = 0._wp 325 ALLOCATE( seaice_bkginc(jpi,jpj) ) ; seaice_bkginc(:,:) = 0._wp 339 326 #if defined key_asminc 340 ALLOCATE( ssh_iau(jpi,jpj) ) 341 ssh_iau (:,:) = 0._wp 327 ALLOCATE( ssh_iau (jpi,jpj) ) ; ssh_iau (:,:) = 0._wp 342 328 #endif 343 329 #if defined key_cice && defined key_asminc 344 ALLOCATE( ndaice_da(jpi,jpj) ) 345 ndaice_da (:,:) = 0._wp 346 #endif 347 IF ( ( ln_trainc ).OR.( ln_dyninc ).OR.( ln_sshinc ).OR.( ln_seaiceinc ) ) THEN 348 349 !-------------------------------------------------------------------- 350 ! Read the increments from file 351 !-------------------------------------------------------------------- 352 330 ALLOCATE( ndaice_da (jpi,jpj) ) ; ndaice_da (:,:) = 0._wp 331 #endif 332 ! 333 IF ( ln_trainc .OR. ln_dyninc .OR. & !-------------------------------------- 334 & ln_sshinc .OR. ln_seaiceinc ) THEN ! Read the increments from file 335 ! !-------------------------------------- 353 336 CALL iom_open( c_asminc, inum ) 354 355 CALL iom_get( inum, 'time', zdate_inc ) 356 337 ! 338 CALL iom_get( inum, 'time' , zdate_inc ) 357 339 CALL iom_get( inum, 'z_inc_dateb', z_inc_dateb ) 358 340 CALL iom_get( inum, 'z_inc_datef', z_inc_datef ) 359 341 z_inc_dateb = zdate_inc 360 342 z_inc_datef = zdate_inc 361 343 ! 362 344 IF(lwp) THEN 363 345 WRITE(numout,*) 364 WRITE(numout,*) 'asm_inc_init : Assimilation increments valid ', & 365 & ' between dates ', z_inc_dateb,' and ', & 366 & z_inc_datef 346 WRITE(numout,*) 'asm_inc_init : Assimilation increments valid between dates ', z_inc_dateb,' and ', z_inc_datef 367 347 WRITE(numout,*) '~~~~~~~~~~~~' 368 348 ENDIF 369 370 IF ( ( z_inc_dateb < ndastp + nn_time0*0.0001_wp )&371 & .OR.( z_inc_datef > ditend_date ) ) &372 & CALL ctl_warn( ' Validity time of assimilation increments is ', &373 & ' outside the assimilation interval' )349 ! 350 IF ( ( z_inc_dateb < ndastp + nn_time0*0.0001_wp ) .OR. & 351 & ( z_inc_datef > ditend_date ) ) & 352 & CALL ctl_warn( ' Validity time of assimilation increments is ', & 353 & ' outside the assimilation interval' ) 374 354 375 355 IF ( ( ln_asmdin ).AND.( zdate_inc /= ditdin_date ) ) & … … 418 398 WHERE( ABS( seaice_bkginc(:,:) ) > 1.0e+10 ) seaice_bkginc(:,:) = 0.0 419 399 ENDIF 420 400 ! 421 401 CALL iom_close( inum ) 422 423 ENDIF 424 425 !----------------------------------------------------------------------- 426 ! Apply divergence damping filter 427 !----------------------------------------------------------------------- 428 429 IF ( ln_dyninc .AND. nn_divdmp > 0 ) THEN 430 ! 402 ! 403 ENDIF 404 ! 405 ! !-------------------------------------- 406 IF ( ln_dyninc .AND. nn_divdmp > 0 ) THEN ! Apply divergence damping filter 407 ! !-------------------------------------- 431 408 ALLOCATE( zhdiv(jpi,jpj) ) 432 409 ! … … 460 437 ! 461 438 ENDIF 462 463 !----------------------------------------------------------------------- 464 ! Allocate and initialize the background state arrays 465 !----------------------------------------------------------------------- 466 467 IF ( ln_asmdin ) THEN 468 ! 469 ALLOCATE( t_bkg(jpi,jpj,jpk) ) 470 ALLOCATE( s_bkg(jpi,jpj,jpk) ) 471 ALLOCATE( u_bkg(jpi,jpj,jpk) ) 472 ALLOCATE( v_bkg(jpi,jpj,jpk) ) 473 ALLOCATE( ssh_bkg(jpi,jpj) ) 474 ! 475 t_bkg(:,:,:) = 0._wp 476 s_bkg(:,:,:) = 0._wp 477 u_bkg(:,:,:) = 0._wp 478 v_bkg(:,:,:) = 0._wp 479 ssh_bkg(:,:) = 0._wp 439 ! 440 ! !----------------------------------------------------- 441 IF ( ln_asmdin ) THEN ! Allocate and initialize the background state arrays 442 ! !----------------------------------------------------- 443 ! 444 ALLOCATE( t_bkg (jpi,jpj,jpk) ) ; t_bkg (:,:,:) = 0._wp 445 ALLOCATE( s_bkg (jpi,jpj,jpk) ) ; s_bkg (:,:,:) = 0._wp 446 ALLOCATE( u_bkg (jpi,jpj,jpk) ) ; u_bkg (:,:,:) = 0._wp 447 ALLOCATE( v_bkg (jpi,jpj,jpk) ) ; v_bkg (:,:,:) = 0._wp 448 ALLOCATE( ssh_bkg(jpi,jpj) ) ; ssh_bkg(:,:) = 0._wp 449 ! 480 450 ! 481 451 !-------------------------------------------------------------------- … … 489 459 IF(lwp) THEN 490 460 WRITE(numout,*) 491 WRITE(numout,*) 'asm_inc_init : Assimilation background state valid at : ', & 492 & zdate_bkg 493 WRITE(numout,*) '~~~~~~~~~~~~' 494 ENDIF 495 ! 496 IF ( zdate_bkg /= ditdin_date ) & 461 WRITE(numout,*) ' ==>>> Assimilation background state valid at : ', zdate_bkg 462 WRITE(numout,*) 463 ENDIF 464 ! 465 IF ( zdate_bkg /= ditdin_date ) & 497 466 & CALL ctl_warn( ' Validity time of assimilation background state does', & 498 467 & ' not agree with Direct Initialization time' ) … … 521 490 ENDIF 522 491 ! 492 IF(lwp) WRITE(numout,*) ' ==>>> Euler time step switch is ', neuler 493 ! 494 IF( lk_asminc ) THEN !== data assimilation ==! 495 IF( ln_bkgwri ) CALL asm_bkg_wri( nit000 - 1 ) ! Output background fields 496 IF( ln_asmdin ) THEN ! Direct initialization 497 IF( ln_trainc ) CALL tra_asm_inc( nit000 - 1 ) ! Tracers 498 IF( ln_dyninc ) CALL dyn_asm_inc( nit000 - 1 ) ! Dynamics 499 IF( ln_sshinc ) CALL ssh_asm_inc( nit000 - 1 ) ! SSH 500 ENDIF 501 ENDIF 502 ! 523 503 END SUBROUTINE asm_inc_init 504 505 524 506 SUBROUTINE tra_asm_inc( kt ) 525 507 !!---------------------------------------------------------------------- … … 786 768 END SUBROUTINE ssh_asm_inc 787 769 770 788 771 SUBROUTINE ssh_asm_div( kt, phdivn ) 789 772 !!---------------------------------------------------------------------- … … 824 807 END SUBROUTINE ssh_asm_div 825 808 809 826 810 SUBROUTINE seaice_asm_inc( kt, kindic ) 827 811 !!---------------------------------------------------------------------- … … 886 870 ! seaice salinity balancing (to add) 887 871 #endif 888 872 ! 889 873 #if defined key_cice && defined key_asminc 890 874 ! Sea-ice : CICE case. Pass ice increment tendency into CICE 891 875 ndaice_da(:,:) = seaice_bkginc(:,:) * zincwgt / rdt 892 876 #endif 893 877 ! 894 878 IF ( kt == nitiaufin_r ) THEN 895 879 DEALLOCATE( seaice_bkginc ) 896 880 ENDIF 897 881 ! 898 882 ELSE 899 883 ! 900 884 #if defined key_cice && defined key_asminc 901 885 ndaice_da(:,:) = 0._wp ! Sea-ice : CICE case. Zero ice increment tendency into CICE 902 886 #endif 903 887 ! 904 888 ENDIF 905 889 ! !----------------------------------------- … … 949 933 #if defined key_cice && defined key_asminc 950 934 ndaice_da(:,:) = 0._wp ! Sea-ice : CICE case. Zero ice increment tendency into CICE 951 952 935 #endif 953 936 !
Note: See TracChangeset
for help on using the changeset viewer.