- Timestamp:
- 2010-09-28T14:29:51+02:00 (14 years ago)
- Location:
- branches/devukmo2010
- Files:
-
- 63 added
- 47 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/devukmo2010/CONFIG/GYRE/EXP00/namelist
r1741 r2128 214 214 sn_rnf = 'runoff_1m_nomask' , -1 , 'sorunoff' , .true. , .true. , 'yearly' , '' , '' 215 215 sn_cnf = 'runoff_1m_nomask' , 0 , 'socoefr' , .false. , .true. , 'yearly' , '' , '' 216 sn_sal_rnf = 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , '' 217 sn_tmp_rnf = 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , '' 218 sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly', '' , '' 216 219 217 220 cn_dir = './' ! root directory for the location of the runoff files 218 221 ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) 219 222 ln_rnf_mouth = .false. ! specific treatment at rivers mouths 223 ln_rnf_att = .false. ! apply temperature, salinity and depth attributes to runoff input 220 224 rn_hrnf = 0.e0 ! depth over which enhanced vertical mixing is used 221 225 rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] -
branches/devukmo2010/CONFIG/GYRE_LOBSTER/EXP00/namelist
r1741 r2128 214 214 sn_rnf = 'runoff_1m_nomask' , -1 , 'sorunoff' , .true. , .true. , 'yearly' , '' , '' 215 215 sn_cnf = 'runoff_1m_nomask' , 0 , 'socoefr' , .false. , .true. , 'yearly' , '' , '' 216 sn_sal_rnf = 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , '' 217 sn_tmp_rnf = 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , '' 218 sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly', '' , '' 216 219 217 220 cn_dir = './' ! root directory for the location of the runoff files 218 221 ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) 219 222 ln_rnf_mouth = .false. ! specific treatment at rivers mouths 223 ln_rnf_att = .false. ! apply temperature, salinity and depth attributes to runoff input 220 224 rn_hrnf = 0.e0 ! depth over which enhanced vertical mixing is used 221 225 rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] -
branches/devukmo2010/CONFIG/ORCA2_LIM/EXP00/namelist
r1759 r2128 241 241 sn_rnf = 'runoff_1m_nomask' , -1 , 'sorunoff' , .true. , .true. , 'yearly' , '' , '' 242 242 sn_cnf = 'runoff_1m_nomask' , 0 , 'socoefr' , .false. , .true. , 'yearly' , '' , '' 243 sn_sal_rnf = 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , '' 244 sn_tmp_rnf = 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , '' 245 sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly', '' , '' 246 243 247 244 248 cn_dir = './' ! root directory for the location of the runoff files 245 249 ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) 246 250 ln_rnf_mouth = .false. ! specific treatment at rivers mouths 251 ln_rnf_att = .false. ! apply temperature, salinity and depth attributes to runoff input 247 252 rn_hrnf = 15.e0 ! depth over which enhanced vertical mixing is used 248 253 rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] … … 505 510 ln_dynldf_iso = .false. ! iso-neutral (require "key_ldfslp") 506 511 ! Coefficient 507 rn_ahm_0 = 40000. ! horizontal eddy viscosity [m2/s] 508 rn_ahmb_0 = 0. ! background eddy viscosity for ldf_iso [m2/s] 512 rn_ahm_0 = 40000. ! horizontal laplacian eddy viscosity [m2/s] 513 rn_ahmb_0 = 0. ! background eddy viscosity for ldf_iso [m2/s] 514 rn_ahm_0_blp = 0. ! horizontal bilaplacian eddy viscosity [m4/s] 509 515 / 510 516 !!====================================================================== -
branches/devukmo2010/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist
r1759 r2128 241 241 sn_rnf = 'runoff_1m_nomask' , -1 , 'sorunoff' , .true. , .true. , 'yearly' , '' , '' 242 242 sn_cnf = 'runoff_1m_nomask' , 0 , 'socoefr' , .false. , .true. , 'yearly' , '' , '' 243 sn_sal_rnf = 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , '' 244 sn_tmp_rnf = 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , '' 245 sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly', '' , '' 243 246 244 247 cn_dir = './' ! root directory for the location of the runoff files 245 248 ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) 246 249 ln_rnf_mouth = .false. ! specific treatment at rivers mouths 250 ln_rnf_att = .false. ! apply temperature, salinity and depth attributes to runoff input 247 251 rn_hrnf = 15.e0 ! depth over which enhanced vertical mixing is used 248 252 rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] -
branches/devukmo2010/CONFIG/POMME/EXP00/namelist
r1875 r2128 240 240 sn_rnf = 'runoff_1m_nomask' , -1 , 'sorunoff' , .true. , .true. , 'yearly' , '' , '' 241 241 sn_cnf = 'runoff_1m_nomask' , 0 , 'socoefr' , .false. , .true. , 'yearly' , '' , '' 242 sn_sal_rnf = 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , '' 243 sn_tmp_rnf = 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , '' 244 sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly', '' , '' 242 245 243 246 cn_dir = './' ! root directory for the location of the runoff files 244 247 ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) 245 248 ln_rnf_mouth = .false. ! specific treatment at rivers mouths 249 ln_rnf_att = .false. ! apply temperature, salinity and depth attributes to runoff input 246 250 rn_hrnf = 0.e0 ! depth over which enhanced vertical mixing is used 247 251 rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] -
branches/devukmo2010/DOC/TexFiles/Chapters/Chap_LDF.tex
r1224 r2128 147 147 148 148 (5) the eddy coefficient associated with a biharmonic operator must be set to a \emph{negative} value. 149 150 (6) it is possible to use both the laplacian and biharmonic operators concurrently. 151 152 (7) for testing purposes it is possible to run without lateral diffusion on momentum. 149 153 150 154 -
branches/devukmo2010/DOC/TexFiles/Namelist/nam_dynldf
r1225 r2128 10 10 ln_dynldf_iso = .false. ! iso-neutral (require "key_ldfslp") 11 11 ! Coefficient 12 ahm0 = 40000. ! horizontal eddy viscosity [m2/s] 13 ahmb0 = 0. ! background eddy viscosity for ldf_iso [m2/s] 12 rn_ahm_0 = 40000. ! horizontal laplacian eddy viscosity [m2/s] 13 rn_ahmb_0 = 0. ! background eddy viscosity for ldf_iso [m2/s] 14 rn_ahm_0_blp = 0. ! horizontal bilaplacian eddy viscosity [m4/s] 14 15 / -
branches/devukmo2010/NEMO/OPA_SRC/BDY/bdy_oce.F90
r1170 r2128 6 6 !! History : 1.0 ! 2001-05 (J. Chanut, A. Sellar) Original code 7 7 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 8 !! 3.3 ! 2010-09 (D. Storkey) add ice boundary conditions 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_bdy … … 54 55 !! Unstructured open boundary data variables 55 56 !!---------------------------------------------------------------------- 56 INTEGER, DIMENSION(jpbgrd) :: nblen 57 INTEGER, DIMENSION(jpbgrd) :: nblenrim 58 INTEGER, DIMENSION(jpbgrd) :: nblendta 57 INTEGER, DIMENSION(jpbgrd) :: nblen = 0 !: Size of bdy data on a proc for each grid type 58 INTEGER, DIMENSION(jpbgrd) :: nblenrim = 0 !: Size of bdy data on a proc for first rim ind 59 INTEGER, DIMENSION(jpbgrd) :: nblendta = 0 !: Size of bdy data in file 59 60 60 61 INTEGER, DIMENSION(jpbdim,jpbgrd) :: nbi, nbj !: i and j indices of bdy dta … … 73 74 REAL(wp), DIMENSION(jpbdim) :: sshtide !: Tidal boundary array : SSH 74 75 REAL(wp), DIMENSION(jpbdim) :: utide, vtide !: Tidal boundary array : U and V 76 #if defined key_lim2 77 REAL(wp), DIMENSION(jpbdim) :: & 78 frld_bdy, hicif_bdy, & !: Now clim of ice leads fraction, ice 79 hsnif_bdy !: thickness and snow thickness 80 #endif 75 81 76 82 #else -
branches/devukmo2010/NEMO/OPA_SRC/BDY/bdy_par.F90
r1146 r2128 6 6 !! History : 1.0 ! 2005-01 (J. Chanut, A. Sellar) Original code 7 7 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 8 !! 3.3 ! 2010-09 (D. Storkey and E. O'Dea) update for Shelf configurations 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_bdy … … 17 18 18 19 LOGICAL, PUBLIC, PARAMETER :: lk_bdy = .TRUE. !: Unstructured Ocean Boundary Condition flag 19 INTEGER, PUBLIC, PARAMETER :: jpbdta = 5000 !: Max length of bdy field in file20 INTEGER, PUBLIC, PARAMETER :: jpbdim = 5000 !: Max length of bdy field on a processor20 INTEGER, PUBLIC, PARAMETER :: jpbdta = 20000 !: Max length of bdy field in file 21 INTEGER, PUBLIC, PARAMETER :: jpbdim = 20000 !: Max length of bdy field on a processor 21 22 INTEGER, PUBLIC, PARAMETER :: jpbtime = 1000 !: Max number of time dumps per file 22 INTEGER, PUBLIC, PARAMETER :: jpbgrd = 3!: Number of horizontal grid types used (T, u, v, f)23 INTEGER, PUBLIC, PARAMETER :: jpbgrd = 6 !: Number of horizontal grid types used (T, u, v, f) 23 24 #else 24 25 !!---------------------------------------------------------------------- -
branches/devukmo2010/NEMO/OPA_SRC/BDY/bdydta.F90
r1715 r2128 8 8 !! - ! 2007-07 (D. Storkey) add bdy_dta_bt 9 9 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 10 !! 3.3 ! 2010-09 (E.O'Dea) modifications for Shelf configurations 11 !! 3.3 ! 2010-09 (D.Storkey) add ice boundary conditions 10 12 !!---------------------------------------------------------------------- 11 13 #if defined key_bdy … … 25 27 USE ioipsl 26 28 USE in_out_manager ! I/O logical units 29 #if defined key_lim2 30 USE ice_2 31 #endif 27 32 28 33 IMPLICIT NONE … … 47 52 REAL(wp), DIMENSION(jpbdim,2) :: ubtbdydta, vbtbdydta !: Arrays used for time interpolation of bdy data 48 53 REAL(wp), DIMENSION(jpbdim,2) :: sshbdydta !: bdy data of ssh 54 55 #if defined key_lim2 56 REAL(wp), DIMENSION(jpbdim,2) :: frld_bdydta !: } 57 REAL(wp), DIMENSION(jpbdim,2) :: hicif_bdydta !: } Arrays used for time interpolation of bdy data for ice variables 58 REAL(wp), DIMENSION(jpbdim,2) :: hsnif_bdydta !: } 59 #endif 49 60 50 61 !!---------------------------------------------------------------------- … … 196 207 IF(lwp) WRITE(numout,*) 'offset: ',zoffset 197 208 IF(lwp) WRITE(numout,*) 'totime: ',totime 198 IF(lwp) WRITE(numout,*) 'zstepr: ',zstepr 209 IF(lwp) WRITE(numout,*) 'zstepr: ',zstepr(1:ntimes_bdy) 199 210 200 211 ! Check that there are not too many times in the file. … … 227 238 END IF 228 239 ! 229 IF ( igrd == 1 ) THEN 230 ntimes_bdyt = ntimes_bdy 231 zoffsett = zoffset 232 istept(:) = INT( zstepr(:) + zoffset ) 233 ELSEIF(igrd == 2 ) THEN 234 ntimes_bdyu = ntimes_bdy 235 zoffsetu = zoffset 236 istepu(:) = INT( zstepr(:) + zoffset ) 237 ELSEIF(igrd == 3 ) THEN 238 ntimes_bdyv = ntimes_bdy 239 zoffsetv = zoffset 240 istepv(:) = INT( zstepr(:) + zoffset ) 241 ENDIF 240 SELECT CASE( igrd ) 241 CASE (1) 242 ntimes_bdyt = ntimes_bdy 243 zoffsett = zoffset 244 istept(:) = INT( zstepr(:) + zoffset ) 245 numbdyt = inum 246 CASE (2) 247 ntimes_bdyu = ntimes_bdy 248 zoffsetu = zoffset 249 istepu(:) = INT( zstepr(:) + zoffset ) 250 numbdyu = inum 251 CASE (3) 252 ntimes_bdyv = ntimes_bdy 253 zoffsetv = zoffset 254 istepv(:) = INT( zstepr(:) + zoffset ) 255 numbdyv = inum 256 END SELECT 242 257 ! 243 258 END DO ! end loop over T, U & V grid … … 291 306 nbdy_b = it 292 307 ! 293 WRITE(numout,*) 'Time offset is ',zoffset294 WRITE(numout,*) 'First record to read is ',nbdy_b308 IF(lwp) WRITE(numout,*) 'Time offset is ',zoffset 309 IF(lwp) WRITE(numout,*) 'First record to read is ',nbdy_b 295 310 296 311 ENDIF ! endif (nbdy_dta == 1) … … 334 349 ENDIF 335 350 ! 351 #if defined key_lim2 352 IF (ln_bdy_ice_frs) THEN 353 igrd = 1 ! T-points data 354 DO ib = 1, nblen(igrd) 355 frld_bdy(ib) = frld(nbi(ib,igrd), nbj(ib,igrd)) 356 hicif_bdy(ib) = hicif(nbi(ib,igrd), nbj(ib,igrd)) 357 hsnif_bdy(ib) = hsnif(nbi(ib,igrd), nbj(ib,igrd)) 358 END DO 359 ENDIF 360 #endif 336 361 ELSEIF( nbdy_dta == 1 ) THEN ! Set first record in the climatological case: 337 362 ! … … 357 382 nblendta(igrd) = iom_file(numbdyt)%dimsz(1,idvar) 358 383 ENDIF 359 WRITE(numout,*) 'Dim size for votemper is ', nblendta(igrd)384 IF(lwp) WRITE(numout,*) 'Dim size for votemper is ', nblendta(igrd) 360 385 ipi = nblendta(igrd) 361 386 CALL iom_get ( numbdyt, jpdom_unknown, 'votemper', zdta(1:ipi,1:ipj,1:ipk), nbdy_a ) … … 372 397 nblendta(igrd) = iom_file(numbdyt)%dimsz(1,idvar) 373 398 ENDIF 374 WRITE(numout,*) 'Dim size for vosaline is ', nblendta(igrd)399 IF(lwp) WRITE(numout,*) 'Dim size for vosaline is ', nblendta(igrd) 375 400 ipi = nblendta(igrd) 376 401 CALL iom_get ( numbdyt, jpdom_unknown, 'vosaline', zdta(1:ipi,1:ipj,1:ipk), nbdy_a ) … … 390 415 nblendta(igrd) = iom_file(numbdyu)%dimsz(1,idvar) 391 416 ENDIF 392 WRITE(numout,*) 'Dim size for vozocrtx is ', nblendta(igrd)417 IF(lwp) WRITE(numout,*) 'Dim size for vozocrtx is ', nblendta(igrd) 393 418 ipi = nblendta(igrd) 394 419 CALL iom_get ( numbdyu, jpdom_unknown,'vozocrtx',zdta(1:ipi,1:ipj,1:ipk),nbdy_a ) … … 404 429 nblendta(igrd) = iom_file(numbdyv)%dimsz(1,idvar) 405 430 ENDIF 406 WRITE(numout,*) 'Dim size for vomecrty is ', nblendta(igrd)431 IF(lwp) WRITE(numout,*) 'Dim size for vomecrty is ', nblendta(igrd) 407 432 ipi = nblendta(igrd) 408 433 CALL iom_get ( numbdyv, jpdom_unknown,'vomecrty',zdta(1:ipi,1:ipj,1:ipk),nbdy_a ) … … 414 439 ENDIF ! ln_bdy_dyn_frs 415 440 441 #if defined key_lim2 442 IF(ln_bdy_ice_frs) THEN 443 ! 444 igrd=1 ! leads fraction 445 IF(lwp) WRITE(numout,*) 'Dim size for ildsconc is ',nblendta(igrd) 446 ipi=nblendta(igrd) 447 CALL iom_get ( numbdyt, jpdom_unknown,'ildsconc',zdta(1:ipi,:,1),nbdy_a ) 448 DO ib=1, nblen(igrd) 449 frld_bdydta(ib,2) = zdta(nbmap(ib,igrd),1,1) 450 END DO 451 ! 452 igrd=1 ! ice thickness 453 IF(lwp) WRITE(numout,*) 'Dim size for iicethic is ',nblendta(igrd) 454 ipi=nblendta(igrd) 455 CALL iom_get ( numbdyt, jpdom_unknown,'iicethic',zdta(1:ipi,:,1),nbdy_a ) 456 DO ib=1, nblen(igrd) 457 hicif_bdydta(ib,2) = zdta(nbmap(ib,igrd),1,1) 458 END DO 459 ! 460 igrd=1 ! snow thickness 461 IF(lwp) WRITE(numout,*) 'Dim size for isnowthi is ',nblendta(igrd) 462 ipi=nblendta(igrd) 463 CALL iom_get ( numbdyt, jpdom_unknown,'isnowthi',zdta(1:ipi,:,1),nbdy_a ) 464 DO ib=1, nblen(igrd) 465 hsnif_bdydta(ib,2) = zdta(nbmap(ib,igrd),1,1) 466 END DO 467 ENDIF ! just if ln_bdy_ice_frs is set 468 #endif 416 469 417 470 IF ((.NOT.ln_bdy_clim) .AND. (istep(1) > 0)) THEN … … 427 480 vbdydta(:,:,1) = vbdydta(:,:,2) 428 481 ENDIF 482 #if defined key_lim2 483 IF( ln_bdy_ice_frs ) THEN 484 frld_bdydta (:,1) = frld_bdydta(:,2) 485 hicif_bdydta(:,1) = hicif_bdydta(:,2) 486 hsnif_bdydta(:,1) = hsnif_bdydta(:,2) 487 ENDIF 488 #endif 429 489 END IF 430 490 … … 441 501 vbdy (:,:) = vbdydta (:,:,2) 442 502 ENDIF 503 #if defined key_lim2 504 IF(ln_bdy_ice_frs) THEN 505 frld_bdy (:) = frld_bdydta (:,2) 506 hicif_bdy(:) = hicif_bdydta(:,2) 507 hsnif_bdy(:) = hsnif_bdydta(:,2) 508 ENDIF 509 #endif 443 510 444 511 IF(ln_bdy_tra_frs .or. ln_bdy_ice_frs) CALL iom_close( numbdyt ) … … 483 550 vbdydta(:,:,1) = vbdydta(:,:,2) 484 551 ENDIF 552 #if defined key_lim2 553 IF(ln_bdy_ice_frs) THEN 554 frld_bdydta (:,1) = frld_bdydta (:,2) 555 hicif_bdydta(:,1) = hicif_bdydta(:,2) 556 hsnif_bdydta(:,1) = hsnif_bdydta(:,2) 557 ENDIF 558 #endif 485 559 END IF ! nbdy_a < ntimes_bdy 486 560 … … 497 571 vbdydta(:,:,1) = vbdydta(:,:,2) 498 572 ENDIF 499 573 #if defined key_lim2 574 IF(ln_bdy_ice_frs) THEN 575 frld_bdydta (:,1) = frld_bdydta (:,2) 576 hicif_bdydta(:,1) = hicif_bdydta(:,2) 577 hsnif_bdydta(:,1) = hsnif_bdydta(:,2) 578 ENDIF 579 #endif 500 580 ! read another set 501 581 ipj = 1 … … 543 623 END DO 544 624 ENDIF ! ln_bdy_dyn_frs 545 625 ! 626 #if defined key_lim2 627 IF(ln_bdy_ice_frs) THEN 628 ! 629 igrd = 1 ! ice concentration 630 ipi=nblendta(igrd) 631 CALL iom_get ( numbdyt, jpdom_unknown,'ildsconc',zdta(1:ipi,:,1),nbdy_a ) 632 DO ib=1, nblen(igrd) 633 frld_bdydta(ib,2) = zdta( nbmap(ib,igrd), 1, 1 ) 634 END DO 635 ! 636 igrd=1 ! ice thickness 637 ipi=nblendta(igrd) 638 CALL iom_get ( numbdyt, jpdom_unknown,'iicethic',zdta(1:ipi,:,1),nbdy_a ) 639 DO ib=1, nblen(igrd) 640 hicif_bdydta(ib,2) = zdta( nbmap(ib,igrd), 1, 1 ) 641 END DO 642 ! 643 igrd=1 ! snow thickness 644 ipi=nblendta(igrd) 645 CALL iom_get ( numbdyt, jpdom_unknown,'isnowthi',zdta(1:ipi,:,1),nbdy_a ) 646 DO ib=1, nblen(igrd) 647 hsnif_bdydta(ib,2) = zdta( nbmap(ib,igrd), 1, 1 ) 648 END DO 649 ENDIF ! ln_bdy_ice_frs 650 #endif 546 651 ! 547 652 IF(lwp) WRITE(numout,*) 'bdy_dta : first record file used nbdy_b ',nbdy_b … … 559 664 ! ******************** 560 665 ! 561 IF( ln_bdy_clim ) THEN ; zxy = REAL( nday , wp ) / REAL( nmonth_len(nbdy_b), wp ) + 0.5 - i15 562 ELSE ; zxy = REAL( istep(nbdy_b) - itimer, wp ) / REAL( istep(nbdy_b) - istep(nbdy_a), wp ) 666 IF( ln_bdy_clim ) THEN ; zxy = REAL( nday ) / REAL( nmonth_len(nbdy_b) ) + 0.5 - i15 667 ELSEIF( istep(nbdy_b) == istep(nbdy_a) ) THEN 668 zxy = 0.0_wp 669 ELSE ; zxy = REAL( istep(nbdy_b) - itimer ) / REAL( istep(nbdy_b) - istep(nbdy_a) ) 563 670 END IF 564 671 … … 589 696 ENDIF 590 697 698 #if defined key_lim2 699 IF(ln_bdy_ice_frs) THEN 700 igrd=1 701 DO ib=1, nblen(igrd) 702 frld_bdy(ib) = zxy * frld_bdydta(ib,2) + (1.-zxy) * frld_bdydta(ib,1) 703 hicif_bdy(ib) = zxy * hicif_bdydta(ib,2) + (1.-zxy) * hicif_bdydta(ib,1) 704 hsnif_bdy(ib) = zxy * hsnif_bdydta(ib,2) + (1.-zxy) * hsnif_bdydta(ib,1) 705 END DO 706 ENDIF ! just if ln_bdy_ice_frs is true 707 #endif 708 591 709 END IF !end if ((nbdy_dta==1).AND.(ntimes_bdy>1)) 592 710 … … 606 724 607 725 608 SUBROUTINE bdy_dta_bt( kt, jit )726 SUBROUTINE bdy_dta_bt( kt, jit, icycl ) 609 727 !!--------------------------------------------------------------------------- 610 728 !! *** SUBROUTINE bdy_dta_bt *** … … 620 738 INTEGER, INTENT( in ) :: kt ! ocean time-step index 621 739 INTEGER, INTENT( in ) :: jit ! barotropic time step index 740 INTEGER, INTENT( in ) :: icycl ! number of cycles need for final file close 622 741 ! ! (for timesplitting option, otherwise zero) 623 742 !! … … 639 758 REAL(wp), DIMENSION(jpbtime) :: zstepr ! REAL time array from data files 640 759 REAL(wp), DIMENSION(jpbdta,1) :: zdta ! temporary array for data fields 641 CHARACTER(LEN=80), DIMENSION( 3) :: clfile760 CHARACTER(LEN=80), DIMENSION(6) :: clfile 642 761 CHARACTER(LEN=70 ) :: clunits ! units attribute of time coordinate 643 762 !!--------------------------------------------------------------------------- … … 688 807 689 808 ! !-------------------! 690 IF( kt == nit000 ) THEN! First call only !809 IF( kt == nit000 .and. jit ==2 ) THEN ! First call only ! 691 810 ! !-------------------! 692 811 istep_bt(:) = 0 … … 712 831 ! necessary time dumps in file are included 713 832 714 clfile( 1) = filbdy_data_bt_T715 clfile( 2) = filbdy_data_bt_U716 clfile( 3) = filbdy_data_bt_V717 718 DO igrd = 1,3833 clfile(4) = filbdy_data_bt_T 834 clfile(5) = filbdy_data_bt_U 835 clfile(6) = filbdy_data_bt_V 836 837 DO igrd = 4,6 719 838 720 839 CALL iom_open( clfile(igrd), inum ) 721 CALL iom_gettime( inum, zstepr, kntime=ntimes_bdy , cdunits=clunits )840 CALL iom_gettime( inum, zstepr, kntime=ntimes_bdy_bt, cdunits=clunits ) 722 841 723 842 SELECT CASE( igrd ) 724 CASE ( 1)725 numbdyt = inum726 CASE ( 2)727 numbdyu = inum728 CASE ( 3)729 numbdyv = inum843 CASE (4) 844 numbdyt_bt = inum 845 CASE (5) 846 numbdyu_bt = inum 847 CASE (6) 848 numbdyv_bt = inum 730 849 END SELECT 731 850 … … 757 876 758 877 ! Check that time array increases (or interp will fail): 759 DO it = 2, ntimes_bdy 878 DO it = 2, ntimes_bdy_bt 760 879 IF ( zstepr(it-1) >= zstepr(it) ) THEN 761 880 CALL ctl_stop('Time array in unstructured boundary data file', & … … 778 897 ! The same applies to the last time level: see setting of lect below. 779 898 780 IF ( ntimes_bdy == 1 ) CALL ctl_stop( &899 IF ( ntimes_bdy_bt == 1 ) CALL ctl_stop( & 781 900 'There is only one time dump in data files', & 782 901 'Set ln_bdy_clim=.true. in namelist for constant bdy forcing.' ) 783 902 784 903 zinterval_s = zstepr(2) - zstepr(1) 785 zinterval_e = zstepr(ntimes_bdy) - zstepr(ntimes_bdy-1) 786 787 IF ( zstepr(1) - zinterval_s / 2.0 > 0 ) THEN 788 IF(lwp) WRITE(numout,*) 'First bdy time relative to nit000:', zstepr(1) 789 IF(lwp) WRITE(numout,*) 'Interval between first two times: ', zinterval_s 790 CALL ctl_stop( 'First data time is after start of run', & 791 'by more than half a meaning period', & 792 'Check file: ' // TRIM(clfile(igrd)) ) 904 zinterval_e = zstepr(ntimes_bdy_bt) - zstepr(ntimes_bdy_bt-1) 905 906 IF( zstepr(1) + zoffset > 0 ) THEN 907 WRITE(ctmp1,*) 'Check file: ', clfile(igrd) 908 CALL ctl_stop( 'First time dump in bdy file is after model initial time', ctmp1 ) 793 909 END IF 794 795 IF ( zstepr(ntimes_bdy) + zinterval_e / 2.0 < totime ) THEN 796 IF(lwp) WRITE(numout,*) 'Last bdy time relative to nit000:', zstepr(ntimes_bdy) 797 IF(lwp) WRITE(numout,*) 'Interval between last two times: ', zinterval_e 798 CALL ctl_stop( 'Last data time is before end of run', & 799 'by more than half a meaning period', & 800 'Check file: ' // TRIM(clfile(igrd)) ) 910 IF( zstepr(ntimes_bdy_bt) + zoffset < totime ) THEN 911 WRITE(ctmp1,*) 'Check file: ', clfile(igrd) 912 CALL ctl_stop( 'Last time dump in bdy file is before model final time', ctmp1 ) 801 913 END IF 802 803 914 END IF ! .NOT. ln_bdy_clim 804 915 805 IF ( igrd .EQ. 1) THEN916 IF ( igrd .EQ. 4) THEN 806 917 ntimes_bdyt = ntimes_bdy_bt 807 918 zoffsett = zoffset 808 919 istept(:) = INT( zstepr(:) + zoffset ) 809 ELSE IF (igrd .EQ. 2) THEN920 ELSE IF (igrd .EQ. 5) THEN 810 921 ntimes_bdyu = ntimes_bdy_bt 811 922 zoffsetu = zoffset 812 923 istepu(:) = INT( zstepr(:) + zoffset ) 813 ELSE IF (igrd .EQ. 3) THEN924 ELSE IF (igrd .EQ. 6) THEN 814 925 ntimes_bdyv = ntimes_bdy_bt 815 926 zoffsetv = zoffset … … 865 976 nbdy_b_bt = it 866 977 867 WRITE(numout,*) 'Time offset is ',zoffset868 WRITE(numout,*) 'First record to read is ',nbdy_b_bt978 IF(lwp) WRITE(numout,*) 'Time offset is ',zoffset 979 IF(lwp) WRITE(numout,*) 'First record to read is ',nbdy_b_bt 869 980 870 981 ENDIF ! endif (nbdy_dta == 1) … … 875 986 IF ( nbdy_dta == 0) THEN 876 987 ! boundary data arrays are filled with initial conditions 877 igrd = 2! U-points data988 igrd = 5 ! U-points data 878 989 DO ib = 1, nblen(igrd) 879 990 ubtbdy(ib) = un(nbi(ib,igrd), nbj(ib,igrd), 1) 880 991 END DO 881 992 882 igrd = 3! V-points data993 igrd = 6 ! V-points data 883 994 DO ib = 1, nblen(igrd) 884 995 vbtbdy(ib) = vn(nbi(ib,igrd), nbj(ib,igrd), 1) 885 996 END DO 886 997 887 igrd = 1! T-points data998 igrd = 4 ! T-points data 888 999 DO ib = 1, nblen(igrd) 889 1000 sshbdy(ib) = sshn(nbi(ib,igrd), nbj(ib,igrd)) … … 910 1021 ! Read first record: 911 1022 ipj=1 912 igrd= 11023 igrd=4 913 1024 ipi=nblendta(igrd) 914 1025 915 1026 ! ssh 916 igrd= 11027 igrd=4 917 1028 IF ( nblendta(igrd) .le. 0 ) THEN 918 1029 idvar = iom_varid( numbdyt_bt,'sossheig' ) … … 929 1040 930 1041 ! u-velocity 931 igrd= 21042 igrd=5 932 1043 IF ( nblendta(igrd) .le. 0 ) THEN 933 1044 idvar = iom_varid( numbdyu_bt,'vobtcrtx' ) … … 944 1055 945 1056 ! v-velocity 946 igrd= 31057 igrd=6 947 1058 IF ( nblendta(igrd) .le. 0 ) THEN 948 1059 idvar = iom_varid( numbdyv_bt,'vobtcrty' ) … … 1010 1121 ipj=1 1011 1122 ipk=jpk 1012 igrd= 11123 igrd=4 1013 1124 ipi=nblendta(igrd) 1014 1125 1015 1126 1016 1127 ! ssh 1017 igrd= 11128 igrd=4 1018 1129 ipi=nblendta(igrd) 1019 1130 … … 1025 1136 1026 1137 ! u-velocity 1027 igrd= 21138 igrd=5 1028 1139 ipi=nblendta(igrd) 1029 1140 … … 1035 1146 1036 1147 ! v-velocity 1037 igrd= 31148 igrd=6 1038 1149 ipi=nblendta(igrd) 1039 1150 … … 1064 1175 END IF 1065 1176 1066 igrd= 11177 igrd=4 1067 1178 DO ib=1, nblen(igrd) 1068 1179 sshbdy(ib) = zxy * sshbdydta(ib,2) + & … … 1070 1181 END DO 1071 1182 1072 igrd= 21183 igrd=5 1073 1184 DO ib=1, nblen(igrd) 1074 1185 ubtbdy(ib) = zxy * ubtbdydta(ib,2) + & … … 1076 1187 END DO 1077 1188 1078 igrd= 31189 igrd=6 1079 1190 DO ib=1, nblen(igrd) 1080 1191 vbtbdy(ib) = zxy * vbtbdydta(ib,2) + & … … 1090 1201 1091 1202 ! Closing of the 3 files 1092 IF( kt == nitend ) THEN1203 IF( kt == nitend .and. jit == icycl ) THEN 1093 1204 CALL iom_close( numbdyt_bt ) 1094 1205 CALL iom_close( numbdyu_bt ) … … 1109 1220 WRITE(*,*) 'bdy_dta: You should not have seen this print! error?', kt 1110 1221 END SUBROUTINE bdy_dta 1111 SUBROUTINE bdy_dta_bt( kt, kit ) ! Empty routine1222 SUBROUTINE bdy_dta_bt( kt, kit, icycle ) ! Empty routine 1112 1223 WRITE(*,*) 'bdy_dta: You should not have seen this print! error?', kt, kit 1113 1224 END SUBROUTINE bdy_dta_bt -
branches/devukmo2010/NEMO/OPA_SRC/BDY/bdydyn.F90
r1740 r2128 8 8 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 9 9 !! 3.2 ! 2008-04 (R. Benshila) consider velocity instead of transport 10 !! 3.3 ! 2010-09 (E.O'Dea) modifications for Shelf configurations 11 !! 3.3 ! 2010-09 (D.Storkey) add ice boundary conditions 10 12 !!---------------------------------------------------------------------- 11 13 #if defined key_bdy … … 132 134 133 135 ! Fill temporary array with ssh data (here spgu): 134 igrd = 1136 igrd = 4 135 137 spgu(:,:) = 0.0 136 138 DO ib = 1, nblenrim(igrd) … … 141 143 END DO 142 144 ! 143 igrd = 2! Flather bc on u-velocity;145 igrd = 5 ! Flather bc on u-velocity; 144 146 ! ! remember that flagu=-1 if normal velocity direction is outward 145 147 ! ! I think we should rather use after ssh ? … … 155 157 END DO 156 158 ! 157 igrd = 3! Flather bc on v-velocity159 igrd = 6 ! Flather bc on v-velocity 158 160 ! ! remember that flagv=-1 if normal velocity direction is outward 159 161 DO ib = 1, nblenrim(igrd) … … 167 169 va_e(ii,ij) = zforc + zcorr * vmask(ii,ij,1) 168 170 END DO 171 CALL lbc_lnk( ua_e, 'U', -1. ) ! Boundary points should be updated 172 CALL lbc_lnk( va_e, 'V', -1. ) ! 169 173 ! 170 174 ENDIF ! ln_bdy_dyn_fla .or. ln_bdy_tides -
branches/devukmo2010/NEMO/OPA_SRC/BDY/bdyini.F90
r1528 r2128 8 8 !! - ! 2007-01 (D. Storkey) Tidal forcing 9 9 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 10 !! 3.3 ! 2010-09 (E.O'Dea) updates for Shelf configurations 11 !! 3.3 ! 2010-09 (D.Storkey) add ice boundary conditions 10 12 !!---------------------------------------------------------------------- 11 13 #if defined key_bdy … … 63 65 REAL(wp) , DIMENSION(jpidta,jpjdta) :: zmask ! global domain mask 64 66 REAL(wp) , DIMENSION(jpbdta,1) :: zdta ! temporary array 65 CHARACTER(LEN=80),DIMENSION( 3) :: clfile67 CHARACTER(LEN=80),DIMENSION(6) :: clfile 66 68 !! 67 69 NAMELIST/nambdy/filbdy_mask, filbdy_data_T, filbdy_data_U, filbdy_data_V, & 70 & filbdy_data_bt_T, filbdy_data_bt_U, filbdy_data_bt_V, & 68 71 & ln_bdy_tides, ln_bdy_clim, ln_bdy_vol, ln_bdy_mask, & 69 & ln_bdy_dyn_fla, ln_bdy_dyn_frs, ln_bdy_tra_frs, & 70 & nbdy_dta , nb_rimwidth , volbdy 72 & ln_bdy_dyn_fla, ln_bdy_dyn_frs, ln_bdy_tra_frs,ln_bdy_ice_frs, & 73 & nbdy_dta, nb_rimwidth, volbdy 74 71 75 !!---------------------------------------------------------------------- 72 76 … … 145 149 IF(lwp) WRITE(numout,*) ' ' 146 150 IF(lwp) WRITE(numout,*) 'FRS condition on T & S fields at unstructured open boundaries' 151 IF(lwp) WRITE(numout,*) ' ' 152 ENDIF 153 154 IF (ln_bdy_ice_frs) THEN 155 IF(lwp) WRITE(numout,*) ' ' 156 IF(lwp) WRITE(numout,*) 'FRS condition on ice fields at unstructured open boundaries' 147 157 IF(lwp) WRITE(numout,*) ' ' 148 158 ENDIF … … 226 236 ! Read tides input files for preference in case there are 227 237 ! no bdydata files. 228 clfile(1) = TRIM(filtide)//TRIM(tide_cpt(1))//'_grid_T.nc' 229 clfile(2) = TRIM(filtide)//TRIM(tide_cpt(1))//'_grid_U.nc' 230 clfile(3) = TRIM(filtide)//TRIM(tide_cpt(1))//'_grid_V.nc' 231 ELSE 238 clfile(4) = TRIM(filtide)//TRIM(tide_cpt(1))//'_grid_T.nc' 239 clfile(5) = TRIM(filtide)//TRIM(tide_cpt(1))//'_grid_U.nc' 240 clfile(6) = TRIM(filtide)//TRIM(tide_cpt(1))//'_grid_V.nc' 241 ENDIF 242 IF( ln_bdy_dyn_fla .and. .not. ln_bdy_tides ) THEN 243 clfile(4) = filbdy_data_bt_T 244 clfile(5) = filbdy_data_bt_U 245 clfile(6) = filbdy_data_bt_V 246 ENDIF 247 248 IF( ln_bdy_tra_frs ) THEN 232 249 clfile(1) = filbdy_data_T 250 IF( .not. ln_bdy_dyn_frs ) THEN 251 clfile(2) = filbdy_data_T ! Dummy read re read T file for sake of 6 files 252 clfile(3) = filbdy_data_T ! 253 ENDIF 254 ENDIF 255 IF( ln_bdy_dyn_frs ) THEN 256 IF( .not. ln_bdy_tra_frs ) THEN 257 clfile(1) = filbdy_data_U ! Dummy Read 258 ENDIF 233 259 clfile(2) = filbdy_data_U 234 clfile(3) = filbdy_data_V 235 ENDIF 260 clfile(3) = filbdy_data_V 261 ENDIF 236 262 237 263 ! how many files are we to read in? 238 igrd_start = 1 239 igrd_end = 3 240 IF(.NOT. ln_bdy_tides ) THEN 241 IF(.NOT. (ln_bdy_dyn_fla) .AND..NOT. (ln_bdy_tra_frs)) THEN 242 ! No T-grid file. 243 igrd_start = 2 244 ELSEIF ( .NOT. ln_bdy_dyn_frs .AND..NOT. ln_bdy_dyn_fla ) THEN 245 ! No U-grid or V-grid file. 246 igrd_end = 1 247 ENDIF 264 IF(ln_bdy_tides .or. ln_bdy_dyn_fla) then 265 igrd_start = 4 266 ENDIF 267 268 IF(ln_bdy_tra_frs) then 269 igrd_start = 1 270 ELSEIF(ln_bdy_dyn_frs) then 271 igrd_start = 2 272 ENDIF 273 274 IF( ln_bdy_tra_frs ) then 275 igrd_end = 1 276 ENDIF 277 278 IF(ln_bdy_dyn_fla .or. ln_bdy_tides) THEN 279 igrd_end = 6 280 ELSEIF( ln_bdy_dyn_frs) THEN 281 igrd_end = 3 248 282 ENDIF 249 283 … … 251 285 CALL iom_open( clfile(igrd), inum ) 252 286 id_dummy = iom_varid( inum, 'nbidta', kdimsz=kdimsz ) 253 WRITE(numout,*) 'kdimsz : ',kdimsz287 IF(lwp) WRITE(numout,*) 'kdimsz : ',kdimsz 254 288 ib_len = kdimsz(1) 255 289 IF( ib_len > jpbdta) CALL ctl_stop( & … … 272 306 CALL iom_close( inum ) 273 307 274 ! Check that rimwidth in file is big enough: 275 ibr_max = MAXVAL( nbrdta(:,igrd) ) 276 IF(lwp) WRITE(numout,*) 277 IF(lwp) WRITE(numout,*) ' Maximum rimwidth in file is ', ibr_max 278 IF(lwp) WRITE(numout,*) ' nb_rimwidth from namelist is ', nb_rimwidth 279 IF (ibr_max < nb_rimwidth) CALL ctl_stop( & 280 'nb_rimwidth is larger than maximum rimwidth in file' ) 308 ! Check that rimwidth in file is big enough for Frs case(barotropic is one): 309 IF( igrd < 4) then 310 ibr_max = MAXVAL( nbrdta(:,igrd) ) 311 IF(lwp) WRITE(numout,*) 312 IF(lwp) WRITE(numout,*) ' Maximum rimwidth in file is ', ibr_max 313 IF(lwp) WRITE(numout,*) ' nb_rimwidth from namelist is ', nb_rimwidth 314 IF (ibr_max < nb_rimwidth) CALL ctl_stop( & 315 'nb_rimwidth is larger than maximum rimwidth in file' ) 316 ENDIF !Check igrd < 4 281 317 ! 282 318 END DO … … 468 504 ubtbdy(:) = 0.e0 469 505 vbtbdy(:) = 0.e0 506 #if defined key_lim2 507 frld_bdy(:) = 0.e0 508 hicif_bdy(:) = 0.e0 509 hsnif_bdy(:) = 0.e0 510 #endif 470 511 471 512 ! Read in tidal constituents and adjust for model start time -
branches/devukmo2010/NEMO/OPA_SRC/BDY/bdytides.F90
r1715 r2128 7 7 !! 2.3 ! 2008-01 (J.Holt) Add date correction. Origins POLCOMS v6.3 2007 8 8 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 9 !! 3.3 ! 2010-09 (D.Storkey and E.O'Dea) bug fixes 9 10 !!---------------------------------------------------------------------- 10 11 #if defined key_bdy … … 31 32 USE bdy_par ! Unstructured boundary parameters 32 33 USE bdy_oce ! ocean open boundary conditions 34 USE daymod ! calendar 33 35 34 36 IMPLICIT NONE … … 41 43 LOGICAL, PUBLIC :: ln_tide_date !: =T correct tide phases and amplitude for model start date 42 44 43 INTEGER, PARAMETER :: jptides_max = 15 !: Max number of tidal contituents44 INTEGER :: ntide !: Actual number of tidal constituents45 INTEGER, PARAMETER,PUBLIC :: jptides_max = 15 !: Max number of tidal contituents 46 INTEGER, PUBLIC :: ntide !: Actual number of tidal constituents 45 47 46 48 CHARACTER(len=80), PUBLIC :: filtide !: Filename root for tidal input files 47 49 CHARACTER(len= 4), PUBLIC, DIMENSION(jptides_max) :: tide_cpt !: Names of tidal components used. 48 50 49 INTEGER , DIMENSION(jptides_max) :: nindx !: ???50 REAL(wp), DIMENSION(jptides_max) :: tide_speed !: Phase speed of tidal constituent (deg/hr)51 INTEGER , DIMENSION(jptides_max), PUBLIC :: nindx !: ??? 52 REAL(wp), DIMENSION(jptides_max), PUBLIC :: tide_speed !: Phase speed of tidal constituent (deg/hr) 51 53 52 54 REAL(wp), DIMENSION(jpbdim,jptides_max) :: ssh1, ssh2 !: Tidal constituents : SSH … … 86 88 READ ( numnam, nambdy_tide ) 87 89 ! ! Count number of components specified 88 ntide = jptides_max 89 itide = 1 90 DO WHILE( tide_cpt(itide) /= '' ) 91 ntide = itide 92 itide = itide + 1 93 END DO 90 ntide=jptides_max 91 do itide = 1, jptides_max 92 if ( tide_cpt(itide) == '' ) then 93 ntide = itide-1 94 exit 95 endif 96 enddo 97 94 98 ! ! find constituents in standard list 95 99 DO itide = 1, ntide … … 145 149 CHARACTER(len=80) :: clfile ! full file name for tidal input file 146 150 INTEGER :: ipi, ipj, inum, idvar ! temporary integers (netcdf read) 147 INTEGER, DIMENSION( 3) :: lendta=0 ! length of data in the file (note may be different from nblendta!)151 INTEGER, DIMENSION(6) :: lendta=0 ! length of data in the file (note may be different from nblendta!) 148 152 REAL(wp) :: z_arg, z_atde, z_btde, z1t, z2t 149 153 REAL(wp), DIMENSION(jpbdta,1) :: zdta ! temporary array for data fields … … 161 165 IF(lwp) WRITE(numout,*) 'Reading data from file ', clfile 162 166 CALL iom_open( clfile, inum ) 163 igrd = 1167 igrd = 4 164 168 IF( nblendta(igrd) <= 0 ) THEN 165 169 idvar = iom_varid( inum,'z1' ) … … 183 187 IF(lwp) WRITE(numout,*) 'Reading data from file ', clfile 184 188 CALL iom_open( clfile, inum ) 185 igrd = 2189 igrd = 5 186 190 IF( lendta(igrd) <= 0 ) THEN 187 191 idvar = iom_varid( inum,'u1' ) … … 204 208 if(lwp) write(numout,*) 'Reading data from file ', clfile 205 209 CALL iom_open( clfile, inum ) 206 igrd = 3210 igrd = 6 207 211 IF( lendta(igrd) <= 0 ) THEN 208 212 idvar = iom_varid( inum,'v1' ) … … 252 256 ENDIF 253 257 ! ! elevation 254 igrd = 1258 igrd = 4 255 259 DO ib = 1, nblenrim(igrd) 256 260 z1t = z_atde * ssh1(ib,itide) + z_btde * ssh2(ib,itide) … … 260 264 END DO 261 265 ! ! u 262 igrd = 2266 igrd = 5 263 267 DO ib = 1, nblenrim(igrd) 264 268 z1t = z_atde * u1(ib,itide) + z_btde * u2(ib,itide) … … 268 272 END DO 269 273 ! ! v 270 igrd = 3274 igrd = 6 271 275 DO ib = 1, nblenrim(igrd) 272 276 z1t = z_atde * v1(ib,itide) + z_btde * v2(ib,itide) … … 320 324 ! 321 325 DO itide = 1, ntide 322 igrd= 1! SSH on tracer grid.326 igrd=4 ! SSH on tracer grid. 323 327 DO ib = 1, nblenrim(igrd) 324 328 sshtide(ib) =sshtide(ib)+ ssh1(ib,itide)*z_cost(itide) + ssh2(ib,itide)*z_sist(itide) 325 329 ! if(lwp) write(numout,*) 'z',ib,itide,sshtide(ib), ssh1(ib,itide),ssh2(ib,itide) 326 330 END DO 327 igrd= 2! U grid331 igrd=5 ! U grid 328 332 DO ib=1, nblenrim(igrd) 329 333 utide(ib) = utide(ib)+ u1(ib,itide)*z_cost(itide) + u2(ib,itide)*z_sist(itide) 330 334 ! if(lwp) write(numout,*) 'u',ib,itide,utide(ib), u1(ib,itide),u2(ib,itide) 331 335 END DO 332 igrd= 3! V grid336 igrd=6 ! V grid 333 337 DO ib=1, nblenrim(igrd) 334 338 vtide(ib) = vtide(ib)+ v1(ib,itide)*z_cost(itide) + v2(ib,itide)*z_sist(itide) -
branches/devukmo2010/NEMO/OPA_SRC/BDY/bdyvol.F90
r1739 r2128 86 86 z_cflxemp = 0.e0 87 87 zraur = 1.e0 / rau0 88 z_cflxemp = SUM ( emp(:,:) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) * zraur )88 z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) * zraur ) 89 89 IF( lk_mpp ) CALL mpp_sum( z_cflxemp ) ! sum over the global domain 90 90 -
branches/devukmo2010/NEMO/OPA_SRC/DIA/diafwb.F90
r1581 r2128 30 30 LOGICAL, PUBLIC, PARAMETER :: lk_diafwb = .TRUE. !: fresh water budget flag 31 31 32 REAL(wp) :: a_ emp, &32 REAL(wp) :: a_fwf , & 33 33 & a_sshb, a_sshn, a_salb, a_saln 34 34 REAL(wp), DIMENSION(4) :: a_flxi, a_flxo, a_temi, a_temo, a_sali, a_salo … … 59 59 REAL(wp) :: ztemi(4), ztemo(4), zsali(4), zsalo(4), zflxi(4), zflxo(4) 60 60 REAL(wp) :: zt, zs, zu 61 REAL(wp) :: zsm0, z empnew61 REAL(wp) :: zsm0, zfwfnew 62 62 !!---------------------------------------------------------------------- 63 63 … … 65 65 zsm0 = 34.72654 66 66 67 ! To compute emp mean value mean emp67 ! To compute fwf mean value mean fwf 68 68 69 69 IF( kt == nit000 ) THEN 70 70 71 a_ emp= 0.e071 a_fwf = 0.e0 72 72 a_sshb = 0.e0 ! valeur de ssh au debut de la simulation 73 73 a_salb = 0.e0 ! valeur de sal au debut de la simulation … … 87 87 ENDIF 88 88 89 a_ emp = SUM( e1t(:,:) * e2t(:,:) * emp (:,:) * tmask_i(:,:) )90 IF( lk_mpp ) CALL mpp_sum( a_ emp) ! sum over the global domain89 a_fwf = SUM( e1t(:,:) * e2t(:,:) * ( emp(:,:)-rnf(:,:) ) * tmask_i(:,:) ) 90 IF( lk_mpp ) CALL mpp_sum( a_fwf ) ! sum over the global domain 91 91 92 92 IF( kt == nitend ) THEN … … 95 95 zarea = 0.e0 96 96 zvol = 0.e0 97 z empnew = 0.e097 zfwfnew = 0.e0 98 98 ! Mean sea level at nitend 99 99 a_sshn = SUM( e1t(:,:) * e2t(:,:) * sshn(:,:) * tmask_i(:,:) ) … … 115 115 116 116 ! Conversion in m3 117 a_ emp = a_emp* rdttra(1) * 1.e-3117 a_fwf = a_fwf * rdttra(1) * 1.e-3 118 118 119 ! empcorrection to bring back the mean ssh to zero120 z empnew = a_sshn / ( ( nitend - nit000 + 1 ) * rdt ) * 1.e3 / zarea119 ! fwf correction to bring back the mean ssh to zero 120 zfwfnew = a_sshn / ( ( nitend - nit000 + 1 ) * rdt ) * 1.e3 / zarea 121 121 122 122 ENDIF … … 362 362 WRITE(inum,*) 363 363 WRITE(inum,*) 'Net freshwater budget ' 364 WRITE(inum,9010) ' emp = ',a_emp, ' m3 =', a_emp/(FLOAT(nitend-nit000+1)*rdttra(1)) * 1.e-6,' Sv'364 WRITE(inum,9010) ' fwf = ',a_fwf, ' m3 =', a_fwf /(FLOAT(nitend-nit000+1)*rdttra(1)) * 1.e-6,' Sv' 365 365 WRITE(inum,*) 366 366 WRITE(inum,9010) ' zarea =',zarea -
branches/devukmo2010/NEMO/OPA_SRC/DIA/diawri.F90
r1792 r2128 346 346 !!$ & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 347 347 !!$#endif 348 CALL histdef( nid_T, "sowaflup", "Net Upward Water Flux" , "Kg/m2/s", & ! emp348 CALL histdef( nid_T, "sowaflup", "Net Upward Water Flux" , "Kg/m2/s", & ! (emp-rnf) 349 349 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 350 350 !!$ CALL histdef( nid_T, "sorunoff", "Runoffs" , "Kg/m2/s", & ! runoffs 351 351 !!$ & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 352 CALL histdef( nid_T, "sowaflcd", "concentration/dilution water flux" , "kg/m2/s", & ! emps353 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 354 CALL histdef( nid_T, "sosalflx", "Surface Salt Flux" , "Kg/m2/s", & ! emps* sn352 CALL histdef( nid_T, "sowaflcd", "concentration/dilution water flux" , "kg/m2/s", & ! (emps-rnf) 353 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 354 CALL histdef( nid_T, "sosalflx", "Surface Salt Flux" , "Kg/m2/s", & ! (emps-rnf) * sn 355 355 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 356 356 CALL histdef( nid_T, "sohefldo", "Net Downward Heat Flux" , "W/m2" , & ! qns + qsr … … 498 498 !!$ CALL histwrite( nid_T, "sowaflep", it, fmass(:,:) , ndim_hT, ndex_hT ) ! atmos=>ocean water flux 499 499 !!$#endif 500 CALL histwrite( nid_T, "sowaflup", it, emp, ndim_hT, ndex_hT ) ! upward water flux500 CALL histwrite( nid_T, "sowaflup", it, ( emp-rnf ) , ndim_hT, ndex_hT ) ! upward water flux 501 501 !!$ CALL histwrite( nid_T, "sorunoff", it, runoff , ndim_hT, ndex_hT ) ! runoff 502 CALL histwrite( nid_T, "sowaflcd", it, emps, ndim_hT, ndex_hT ) ! c/d water flux503 zw2d(:,:) = emps(:,:) * sn(:,:,1) * tmask(:,:,1)502 CALL histwrite( nid_T, "sowaflcd", it, ( emps-rnf ) , ndim_hT, ndex_hT ) ! c/d water flux 503 zw2d(:,:) = ( emps(:,:) - rnf(:,:) ) * sn(:,:,1) * tmask(:,:,1) 504 504 CALL histwrite( nid_T, "sosalflx", it, zw2d , ndim_hT, ndex_hT ) ! c/d salt flux 505 505 CALL histwrite( nid_T, "sohefldo", it, qns + qsr , ndim_hT, ndex_hT ) ! total heat flux … … 700 700 CALL histwrite( id_i, "vomecrty", kt, vn , jpi*jpj*jpk, idex ) ! now j-velocity 701 701 CALL histwrite( id_i, "vovecrtz", kt, wn , jpi*jpj*jpk, idex ) ! now k-velocity 702 CALL histwrite( id_i, "sowaflup", kt, emp, jpi*jpj , idex ) ! freshwater budget702 CALL histwrite( id_i, "sowaflup", kt, (emp-rnf), jpi*jpj , idex ) ! freshwater budget 703 703 CALL histwrite( id_i, "sohefldo", kt, qsr + qns, jpi*jpj , idex ) ! total heat flux 704 704 CALL histwrite( id_i, "soshfldo", kt, qsr , jpi*jpj , idex ) ! solar heat flux -
branches/devukmo2010/NEMO/OPA_SRC/DIA/diawri_dimg.h90
r1685 r2128 42 42 !! level 2: vtau(:,:) * vmask(:,:,1) meridional stress in N. m-2 43 43 !! level 3: qsr + qns total heat flux (W/m2) 44 !! level 4: emp (:,:)E-P flux (mm/day)44 !! level 4: ( emp (:,:)-rnf(:,:) ) E-P flux (mm/day) 45 45 !! level 5: tb (:,:,1)-sst model SST -forcing sst (degree C) ! deprecated 46 46 !! level 6: bsfb(:,:) streamfunction (m**3/s) … … 54 54 !! level 14: qct(:,:) equivalent flux due to treshold SST 55 55 !! level 15: fbt(:,:) feedback term . 56 !! level 16: emps(:,:)concentration/dilution water flux56 !! level 16: ( emps(:,:) - rnf(:,:) ) concentration/dilution water flux 57 57 !! level 17: fsalt(:,:) Ice=>ocean net freshwater 58 58 !! level 18: gps(:,:) the surface pressure (m). … … 167 167 fsel(:,:,2 ) = fsel(:,:,2 ) + vtau(:,:) * vmask(:,:,1) 168 168 fsel(:,:,3 ) = fsel(:,:,3 ) + qsr (:,:) + qns (:,:) 169 fsel(:,:,4 ) = fsel(:,:,4 ) + emp (:,:)169 fsel(:,:,4 ) = fsel(:,:,4 ) + ( emp(:,:)-rnf(:,:) ) 170 170 ! fsel(:,:,5 ) = fsel(:,:,5 ) + tb (:,:,1) !RB not used 171 171 fsel(:,:,6 ) = fsel(:,:,6 ) + sshn(:,:) … … 179 179 ! fsel(:,:,14) = fsel(:,:,14) + qct(:,:) 180 180 ! fsel(:,:,15) = fsel(:,:,15) + fbt(:,:) 181 fsel(:,:,16) = fsel(:,:,16) + emps(:,:)181 fsel(:,:,16) = fsel(:,:,16) + ( emps(:,:)-rnf(:,:) ) 182 182 #ifdef key_diaspr 183 183 fsel(:,:,18) = fsel(:,:,18) + gps(:,:)/g … … 242 242 fsel(:,:,2 ) = vtau(:,:) * vmask(:,:,1) 243 243 fsel(:,:,3 ) = (qsr (:,:) + qns (:,:)) * tmask(:,:,1) 244 fsel(:,:,4 ) = emp (:,:) * tmask(:,:,1)244 fsel(:,:,4 ) = ( emp(:,:)-rnf(:,:) ) * tmask(:,:,1) 245 245 ! fsel(:,:,5 ) = (tb (:,:,1) - sf_sst(1)%fnow(:,:) ) *tmask(:,:,1) !RB not used 246 246 … … 255 255 ! fsel(:,:,14) = qct(:,:) 256 256 ! fsel(:,:,15) = fbt(:,:) 257 fsel(:,:,16) = emps(:,:) * tmask(:,:,1)257 fsel(:,:,16) = ( emps(:,:)-rnf(:,:) ) * tmask(:,:,1) 258 258 #ifdef key_diaspr 259 259 fsel(:,:,18) = gps(:,:) /g -
branches/devukmo2010/NEMO/OPA_SRC/DOM/closea.F90
r1601 r2128 180 180 INTEGER :: ji, jj, jc, jn ! dummy loop indices 181 181 REAL(wp) :: zze2 182 REAL(wp), DIMENSION (jpncs) :: zemp 182 REAL(wp), DIMENSION (jpncs) :: zfwf 183 183 184 !!---------------------------------------------------------------------- 184 185 ! … … 216 217 ! !--------------------! 217 218 ! ! update emp, emps ! 218 z emp= 0.e0 !--------------------!219 zfwf = 0.e0 !--------------------! 219 220 DO jc = 1, jpncs 220 221 DO jj = ncsj1(jc), ncsj2(jc) 221 222 DO ji = ncsi1(jc), ncsi2(jc) 222 z emp(jc) = zemp(jc) + e1t(ji,jj) * e2t(ji,jj) * emp(ji,jj) * tmask_i(ji,jj)223 zfwf(jc) = zfwf(jc) + e1t(ji,jj) * e2t(ji,jj) * ( emp(ji,jj)-rnf(ji,jj) ) * tmask_i(ji,jj) 223 224 END DO 224 225 END DO 225 226 END DO 226 IF( lk_mpp ) CALL mpp_sum ( z emp(:) , jpncs ) ! mpp: sum over all the global domain227 IF( lk_mpp ) CALL mpp_sum ( zfwf(:) , jpncs ) ! mpp: sum over all the global domain 227 228 228 229 IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN ! Black Sea case for ORCA_R2 configuration 229 zze2 = ( z emp(3) + zemp(4) ) / 2.230 z emp(3) = zze2231 z emp(4) = zze2230 zze2 = ( zfwf(3) + zfwf(4) ) / 2. 231 zfwf(3) = zze2 232 zfwf(4) = zze2 232 233 ENDIF 233 234 … … 236 237 IF( ncstt(jc) == 0 ) THEN 237 238 ! water/evap excess is shared by all open ocean 238 emp (:,:) = emp (:,:) + z emp(jc) / surf(jpncs+1)239 emps(:,:) = emps(:,:) + z emp(jc) / surf(jpncs+1)239 emp (:,:) = emp (:,:) + zfwf(jc) / surf(jpncs+1) 240 emps(:,:) = emps(:,:) + zfwf(jc) / surf(jpncs+1) 240 241 ELSEIF( ncstt(jc) == 1 ) THEN 241 242 ! Excess water in open sea, at outflow location, excess evap shared 242 IF ( z emp(jc) <= 0.e0 ) THEN243 IF ( zfwf(jc) <= 0.e0 ) THEN 243 244 DO jn = 1, ncsnr(jc) 244 245 ji = mi0(ncsir(jc,jn)) … … 246 247 IF ( ji > 1 .AND. ji < jpi & 247 248 .AND. jj > 1 .AND. jj < jpj ) THEN 248 emp (ji,jj) = emp (ji,jj) + z emp(jc) / &249 emp (ji,jj) = emp (ji,jj) + zfwf(jc) / & 249 250 (FLOAT(ncsnr(jc)) * e1t(ji,jj) * e2t(ji,jj)) 250 emps(ji,jj) = emps(ji,jj) + z emp(jc) / &251 emps(ji,jj) = emps(ji,jj) + zfwf(jc) / & 251 252 (FLOAT(ncsnr(jc)) * e1t(ji,jj) * e2t(ji,jj)) 252 253 END IF 253 254 END DO 254 255 ELSE 255 emp (:,:) = emp (:,:) + z emp(jc) / surf(jpncs+1)256 emps(:,:) = emps(:,:) + z emp(jc) / surf(jpncs+1)256 emp (:,:) = emp (:,:) + zfwf(jc) / surf(jpncs+1) 257 emps(:,:) = emps(:,:) + zfwf(jc) / surf(jpncs+1) 257 258 ENDIF 258 259 ELSEIF( ncstt(jc) == 2 ) THEN … … 263 264 ji = mi0(ncsir(jc,jn)) 264 265 jj = mj0(ncsjr(jc,jn)) ! Location of outflow in open ocean 265 emp (ji,jj) = emp (ji,jj) + z emp(jc) &266 emp (ji,jj) = emp (ji,jj) + zfwf(jc) & 266 267 / (FLOAT(ncsnr(jc)) * e1t(ji,jj) * e2t(ji,jj) ) 267 emps(ji,jj) = emps(ji,jj) + z emp(jc) &268 emps(ji,jj) = emps(ji,jj) + zfwf(jc) & 268 269 / (FLOAT(ncsnr(jc)) * e1t(ji,jj) * e2t(ji,jj) ) 269 270 END DO … … 273 274 DO jj = ncsj1(jc), ncsj2(jc) 274 275 DO ji = ncsi1(jc), ncsi2(jc) 275 emp (ji,jj) = emp (ji,jj) - z emp(jc) / surf(jc)276 emps(ji,jj) = emps(ji,jj) - z emp(jc) / surf(jc)276 emp (ji,jj) = emp (ji,jj) - zfwf(jc) / surf(jc) 277 emps(ji,jj) = emps(ji,jj) - zfwf(jc) / surf(jc) 277 278 END DO 278 279 END DO -
branches/devukmo2010/NEMO/OPA_SRC/DYN/divcur.F90
r1792 r2128 14 14 USE in_out_manager ! I/O manager 15 15 USE obc_oce ! ocean lateral open boundary condition 16 USE bdy_oce ! Unstructured open boundaries variables17 16 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 17 USE sbcrnf, ONLY : rnf_dep, rnf_mod_dep ! River runoff 18 USE phycst, ONLY : rau0 ! physical constant 19 USE sbc_oce, ONLY : ln_rnf, rnf ! surface boundary condition: ocean 18 20 19 21 IMPLICIT NONE … … 79 81 !! 9.0 ! 03-08 (G. Madec) merged of cur and div, free form, F90 80 82 !! ! 05-01 (J. Chanut, A. Sellar) unstructured open boundaries 83 !! NEMO 3.3 ! 2010-09 (D.Storkey and E.O'Dea) bug fixes for BDY module 81 84 !!---------------------------------------------------------------------- 82 85 !! * Arguments … … 89 92 REAL(wp), DIMENSION( jpi ,1:jpj+2) :: zwu ! workspace 90 93 REAL(wp), DIMENSION(-1:jpi+2, jpj ) :: zwv ! workspace 94 REAL(wp) :: zraur, zdep ! temporary scalar 91 95 !!---------------------------------------------------------------------- 92 96 … … 131 135 IF( lp_obc_south ) hdivn(nis0 :nis1 ,njs0 :njs1 ,jk) = 0.e0 ! south 132 136 ENDIF 133 #endif134 #if defined key_bdy135 ! unstructured open boundaries (div must be zero behind the open boundary)136 DO jj = 1, jpj137 DO ji = 1, jpi138 hdivn(ji,jj,jk)=hdivn(ji,jj,jk)*bdytmask(ji,jj)139 END DO140 END DO141 137 #endif 142 138 IF( .NOT. AGRIF_Root() ) THEN … … 244 240 END DO ! End of slab 245 241 ! ! =============== 242 243 IF ( ln_rnf ) THEN 244 zraur = 1. / rau0 245 DO ji=1,jpi 246 DO jj=1,jpj 247 zdep = 1. / rnf_dep(ji,jj) 248 DO jk=1,rnf_mod_dep(ji,jj) 249 hdivn(ji,jj,jk) = hdivn(ji,jj,jk) - rnf(ji,jj)*zraur*zdep 250 ENDDO 251 ENDDO 252 ENDDO 253 ENDIF 246 254 247 255 ! 4. Lateral boundary conditions on hdivn and rotn … … 301 309 !! * Local declarations 302 310 INTEGER :: ji, jj, jk ! dummy loop indices 311 REAL(wp) :: zraur, zdep ! temporary scalar 303 312 !!---------------------------------------------------------------------- 304 313 … … 344 353 ENDIF 345 354 #endif 346 #if defined key_bdy347 ! unstructured open boundaries (div must be zero behind the open boundary)348 DO jj = 1, jpj349 DO ji = 1, jpi350 hdivn(ji,jj,jk)=hdivn(ji,jj,jk)*bdytmask(ji,jj)351 END DO352 END DO353 #endif354 355 IF( .NOT. AGRIF_Root() ) THEN 355 356 IF ((nbondi == 1).OR.(nbondi == 2)) hdivn(nlci-1 , : ,jk) = 0.e0 ! east … … 372 373 END DO ! End of slab 373 374 ! ! =============== 374 375 376 IF ( ln_rnf ) THEN 377 zraur = 1. / rau0 378 DO ji=1,jpi 379 DO jj=1,jpj 380 zdep = 1. / rnf_dep(ji,jj) 381 DO jk=1,rnf_mod_dep(ji,jj) 382 hdivn(ji,jj,jk) = hdivn(ji,jj,jk) - rnf(ji,jj)*zraur*zdep 383 ENDDO 384 ENDDO 385 ENDDO 386 ENDIF 387 375 388 ! 4. Lateral boundary conditions on hdivn and rotn 376 389 ! ---------------------------------=======---====== -
branches/devukmo2010/NEMO/OPA_SRC/DYN/dynldf.F90
r1152 r2128 69 69 CASE ( 2 ) ; CALL dyn_ldf_bilap ( kt ) ! iso-level bilaplacian 70 70 CASE ( 3 ) ; CALL dyn_ldf_bilapg ( kt ) ! s-coord. horizontal bilaplacian 71 CASE ( 4 ) ! iso-level laplacian + bilaplacian 72 CALL dyn_ldf_lap ( kt ) 73 CALL dyn_ldf_bilap ( kt ) 74 CASE ( 5 ) ! rotated laplacian + bilaplacian (s-coord) 75 CALL dyn_ldf_iso ( kt ) 76 CALL dyn_ldf_bilapg ( kt ) 71 77 ! 72 78 CASE ( -1 ) ! esopa: test all possibility with control print … … 83 89 CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf3 - Ua: ', mask1=umask, & 84 90 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 91 ! 92 CASE ( -2 ) ! neither laplacian nor bilaplacian schemes used 93 IF( kt == nit000 ) THEN 94 IF(lwp) WRITE(numout,*) 95 IF(lwp) WRITE(numout,*) 'dyn_ldf : no lateral diffusion on momentum setup' 96 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 97 ENDIF 85 98 END SELECT 86 99 … … 124 137 IF( ln_dynldf_lap ) ioptio = ioptio + 1 125 138 IF( ln_dynldf_bilap ) ioptio = ioptio + 1 126 IF( ioptio /= 1 ) CALL ctl_stop( ' use ONE of the 2 lap/bilap operator type ondynamics' )139 IF( ioptio < 1 ) CALL ctl_warn( ' neither laplacian nor bilaplacian operator set for dynamics' ) 127 140 ioptio = 0 128 141 IF( ln_dynldf_level ) ioptio = ioptio + 1 … … 144 157 IF ( ln_dynldf_iso ) nldf = 1 ! isoneutral ( rotation) 145 158 ENDIF 146 IF ( ln_sco ) THEN ! z-coordinate159 IF ( ln_sco ) THEN ! s-coordinate 147 160 IF ( ln_dynldf_level ) nldf = 0 ! iso-level (no rotation) 148 161 IF ( ln_dynldf_hor ) nldf = 1 ! horizontal ( rotation) … … 162 175 IF ( ln_dynldf_iso ) ierr = 2 ! isoneutral ( rotation) 163 176 ENDIF 164 IF ( ln_sco ) THEN ! z-coordinate177 IF ( ln_sco ) THEN ! s-coordinate 165 178 IF ( ln_dynldf_level ) nldf = 2 ! iso-level (no rotation) 166 179 IF ( ln_dynldf_hor ) nldf = 3 ! horizontal ( rotation) … … 169 182 ENDIF 170 183 184 IF( ln_dynldf_lap .AND. ln_dynldf_bilap ) THEN ! mixed laplacian and bilaplacian operators 185 IF ( ln_zco ) THEN ! z-coordinate 186 IF ( ln_dynldf_level ) nldf = 4 ! iso-level (no rotation) 187 IF ( ln_dynldf_hor ) nldf = 4 ! horizontal (no rotation) 188 IF ( ln_dynldf_iso ) ierr = 2 ! isoneutral ( rotation) 189 ENDIF 190 IF ( ln_zps ) THEN ! z-coordinate 191 IF ( ln_dynldf_level ) ierr = 1 ! iso-level not allowed 192 IF ( ln_dynldf_hor ) nldf = 4 ! horizontal (no rotation) 193 IF ( ln_dynldf_iso ) ierr = 2 ! isoneutral ( rotation) 194 ENDIF 195 IF ( ln_sco ) THEN ! s-coordinate 196 IF ( ln_dynldf_level ) nldf = 4 ! iso-level (no rotation) 197 IF ( ln_dynldf_hor ) nldf = 5 ! horizontal ( rotation) 198 IF ( ln_dynldf_iso ) ierr = 2 ! isoneutral ( rotation) 199 ENDIF 200 ENDIF 201 171 202 IF( lk_esopa ) nldf = -1 ! esopa test 172 203 … … 179 210 IF(lwp) THEN 180 211 WRITE(numout,*) 212 IF( nldf == -2 ) WRITE(numout,*) ' neither laplacian nor bilaplacian schemes used' 181 213 IF( nldf == -1 ) WRITE(numout,*) ' ESOPA test All scheme used' 182 214 IF( nldf == 0 ) WRITE(numout,*) ' laplacian operator' 183 IF( nldf == 1 ) WRITE(numout,*) ' Rotated laplacian operator'215 IF( nldf == 1 ) WRITE(numout,*) ' rotated laplacian operator' 184 216 IF( nldf == 2 ) WRITE(numout,*) ' bilaplacian operator' 185 IF( nldf == 3 ) WRITE(numout,*) ' Rotated bilaplacian' 217 IF( nldf == 3 ) WRITE(numout,*) ' rotated bilaplacian' 218 IF( nldf == 4 ) WRITE(numout,*) ' laplacian and bilaplacian operators' 219 IF( nldf == 5 ) WRITE(numout,*) ' rotated laplacian and bilaplacian operators' 186 220 ENDIF 187 221 ! -
branches/devukmo2010/NEMO/OPA_SRC/DYN/dynldf_lap.F90
r1152 r2128 78 78 IF( kt == nit000 ) THEN 79 79 IF(lwp) WRITE(numout,*) 80 IF(lwp) WRITE(numout,*) 'dyn_ldf : iso-level harmonic (laplaci en) operator'80 IF(lwp) WRITE(numout,*) 'dyn_ldf : iso-level harmonic (laplacian) operator' 81 81 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 82 82 ENDIF -
branches/devukmo2010/NEMO/OPA_SRC/DYN/dynnxt.F90
r1876 r2128 15 15 !! 2.3 ! 2007-07 (D. Storkey) Calls to BDY routines. 16 16 !! 3.2 ! 2009-06 (G. Madec, R.Benshila) re-introduce the vvl option 17 !! 3.3 ! 2010-09 (D. Storkey, E.O'Dea) Bug fix for BDY module 17 18 !!------------------------------------------------------------------------- 18 19 … … 165 166 # elif defined key_bdy 166 167 ! !* BDY open boundaries 167 !RB all this part should be in a specific routine168 168 IF( lk_dynspg_exp .OR. lk_dynspg_ts ) THEN ! except for filtered option 169 !170 169 CALL bdy_dyn_frs( kt ) 171 !172 IF( ln_bdy_dyn_fla ) THEN173 ua_e(:,:) = 0.e0174 va_e(:,:) = 0.e0175 ! Set these variables for use in bdy_dyn_fla176 hur_e(:,:) = hur(:,:)177 hvr_e(:,:) = hvr(:,:)178 DO jk = 1, jpkm1 !! Vertically integrated momentum trends179 ua_e(:,:) = ua_e(:,:) + fse3u(:,:,jk) * umask(:,:,jk) * ua(:,:,jk)180 va_e(:,:) = va_e(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) * va(:,:,jk)181 END DO182 ua_e(:,:) = ua_e(:,:) * hur(:,:)183 va_e(:,:) = va_e(:,:) * hvr(:,:)184 DO jk = 1 , jpkm1185 ua(:,:,jk) = ua(:,:,jk) - ua_e(:,:)186 va(:,:,jk) = va(:,:,jk) - va_e(:,:)187 END DO188 CALL bdy_dta_bt( kt+1, 0)189 CALL bdy_dyn_fla( sshn_b )190 CALL lbc_lnk( ua_e, 'U', -1. ) ! Boundary points should be updated191 CALL lbc_lnk( va_e, 'V', -1. ) !192 DO jk = 1 , jpkm1193 ua(:,:,jk) = ( ua(:,:,jk) + ua_e(:,:) ) * umask(:,:,jk)194 va(:,:,jk) = ( va(:,:,jk) + va_e(:,:) ) * vmask(:,:,jk)195 END DO196 ENDIF197 !198 170 ENDIF 199 171 # endif -
branches/devukmo2010/NEMO/OPA_SRC/DYN/dynspg_flt.F90
r1876 r2128 85 85 !! where (spgu,spgv) are given by: 86 86 !! spgu = vertical sum[ e3u (ub+ 2 rdt ua ) ] 87 !! - grav 2 rdt hu /e1u di[sshn + emp]87 !! - grav 2 rdt hu /e1u di[sshn + (emp-rnf)] 88 88 !! spgv = vertical sum[ e3v (vb+ 2 rdt va) ] 89 !! - grav 2 rdt hv /e2v dj[sshn + emp]89 !! - grav 2 rdt hv /e2v dj[sshn + (emp-rnf)] 90 90 !! and define the first guess from previous computation : 91 91 !! zbtd = btda -
branches/devukmo2010/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r1779 r2128 7 7 !! - ! 2008-01 (R. Benshila) change averaging method 8 8 !! 3.2 ! 2009-07 (R. Benshila, G. Madec) Complete revisit associated to vvl reactivation 9 !! 3.3 ! 2010-09 (D. Storkey, E. O'Dea) update for BDY for Shelf configurations 9 10 !!--------------------------------------------------------------------- 10 11 #if defined key_dynspg_ts || defined key_esopa … … 352 353 ! ! ------------------ 353 354 IF( lk_obc ) CALL obc_dta_bt( kt, jn ) 354 IF( lk_bdy .OR. ln_bdy_tides ) CALL bdy_dta_bt( kt, jn+1 )355 IF( lk_bdy .OR. ln_bdy_tides ) CALL bdy_dta_bt( kt, jn+1, icycle ) 355 356 356 357 ! !* after ssh_e … … 379 380 DO jj = 2, jpjm1 ! leap-frog on ssh_e 380 381 DO ji = fs_2, fs_jpim1 ! vector opt. 381 ssha_e(ji,jj) = ( zsshb_e(ji,jj) - z2dt_e * ( zraur * emp(ji,jj) + zhdiv(ji,jj) ) ) * tmask(ji,jj,1)382 ssha_e(ji,jj) = ( zsshb_e(ji,jj) - z2dt_e * ( zraur * ( emp(ji,jj)-rnf(ji,jj) ) + zhdiv(ji,jj) ) ) * tmask(ji,jj,1) 382 383 END DO 383 384 END DO -
branches/devukmo2010/NEMO/OPA_SRC/DYN/sshwzv.F90
r1792 r2128 5 5 !!============================================================================== 6 6 !! History : 3.1 ! 2009-02 (G. Madec, M. Leclair) Original code 7 !! 3.3 ! 2010-05 (K. Mogensen, A. Weaver, M. Martin, D. Lea) Assimilation interface 8 !! 3.3 ! 2010-09 (D.Storkey and E.O'Dea) bug fixes for BDY module 7 9 !!---------------------------------------------------------------------- 8 10 … … 25 27 USE obc_par ! open boundary cond. parameter 26 28 USE obc_oce 29 USE bdy_oce 27 30 USE diaar5, ONLY : lk_diaar5 28 31 USE iom 32 USE sbcrnf, ONLY : rnf_dep, rnf_mod_dep ! River runoff 33 #if defined key_asminc 34 USE asminc ! Assimilation increment 35 #endif 29 36 30 37 IMPLICIT NONE … … 134 141 hvr(:,:) = vmask(:,:,1) / ( hv(:,:) + 1.e0 - vmask(:,:,1) ) 135 142 ! 143 DO jj=1,jpj 144 DO ji=1,jpi 145 rnf_dep(ji,jj)=0 146 DO jk=1,rnf_mod_dep(ji,jj) ! recalculates rnf_dep to be the depth 147 rnf_dep(ji,jj)=rnf_dep(ji,jj)+fse3t(ji,jj,jk) ! in metres to the bottom of the relevant grid box 148 ENDDO 149 ENDDO 150 ENDDO 151 ! 136 152 ENDIF 137 153 … … 161 177 CALL lbc_lnk( ssha, 'T', 1. ) ! absolutly compulsory !! (jmm) 162 178 ENDIF 179 #endif 180 181 #if defined key_bdy 182 ssha(:,:) = ssha(:,:) * bdytmask(:,:) 183 CALL lbc_lnk( ssha, 'T', 1. ) 163 184 #endif 164 185 … … 183 204 ENDIF 184 205 206 ! Include the IAU weighted SSH increment 207 #if defined key_asminc 208 IF( ( lk_asminc ).AND.( ln_sshinc ).AND.( ln_asmiau ) ) THEN 209 CALL ssh_asm_inc( kt ) 210 ssha(:,:) = ssha(:,:) + z2dt * ssh_iau(:,:) 211 ENDIF 212 #endif 213 185 214 ! !------------------------------! 186 215 ! ! Now Vertical Velocity ! … … 191 220 & - ( fse3t_a(:,:,jk) & 192 221 & - fse3t_b(:,:,jk) ) * tmask(:,:,jk) / z2dt 222 #if defined key_bdy 223 wn(:,:,jk) = wn(:,:,jk) * bdytmask(:,:) 224 #endif 193 225 END DO 194 226 ! -
branches/devukmo2010/NEMO/OPA_SRC/LDF/ldfdyn.F90
r1601 r2128 67 67 NAMELIST/namdyn_ldf/ ln_dynldf_lap , ln_dynldf_bilap, & 68 68 & ln_dynldf_level, ln_dynldf_hor , ln_dynldf_iso, & 69 & rn_ahm_0 , rn_ahmb_0 69 & rn_ahm_0 , rn_ahmb_0 , rn_ahm_0_blp 70 70 !!---------------------------------------------------------------------- 71 71 … … 78 78 WRITE(numout,*) '~~~~~~~' 79 79 WRITE(numout,*) ' Namelist nam_dynldf : set lateral mixing parameters' 80 WRITE(numout,*) ' laplacian operator ln_dynldf_lap = ', ln_dynldf_lap 81 WRITE(numout,*) ' bilaplacian operator ln_dynldf_bilap = ', ln_dynldf_bilap 82 WRITE(numout,*) ' iso-level ln_dynldf_level = ', ln_dynldf_level 83 WRITE(numout,*) ' horizontal (geopotential) ln_dynldf_hor = ', ln_dynldf_hor 84 WRITE(numout,*) ' iso-neutral ln_dynldf_iso = ', ln_dynldf_iso 85 WRITE(numout,*) ' horizontal eddy viscosity rn_ahm_0 = ', rn_ahm_0 86 WRITE(numout,*) ' background viscosity rn_ahmb_0 = ', rn_ahmb_0 87 ENDIF 88 89 ahm0 = rn_ahm_0 ! OLD namelist variables defined from DOCTOR namelist variables 90 ahmb0 = rn_ahmb_0 80 WRITE(numout,*) ' laplacian operator ln_dynldf_lap = ', ln_dynldf_lap 81 WRITE(numout,*) ' bilaplacian operator ln_dynldf_bilap = ', ln_dynldf_bilap 82 WRITE(numout,*) ' iso-level ln_dynldf_level = ', ln_dynldf_level 83 WRITE(numout,*) ' horizontal (geopotential) ln_dynldf_hor = ', ln_dynldf_hor 84 WRITE(numout,*) ' iso-neutral ln_dynldf_iso = ', ln_dynldf_iso 85 WRITE(numout,*) ' horizontal laplacian eddy viscosity rn_ahm_0 = ', rn_ahm_0 86 WRITE(numout,*) ' background viscosity rn_ahmb_0 = ', rn_ahmb_0 87 WRITE(numout,*) ' horizontal bilaplacian eddy viscosity rn_ahm_0 = ', rn_ahm_0 88 89 ENDIF 90 91 ahm0 = rn_ahm_0 ! OLD namelist variables defined from DOCTOR namelist variables 92 ahmb0 = rn_ahmb_0 93 ahm0_blp = rn_ahm_0_blp 91 94 92 95 ! ... check of lateral diffusive operator on tracers … … 117 120 IF( ln_dynldf_bilap ) THEN 118 121 IF(lwp) WRITE(numout,*) ' biharmonic momentum diffusion' 119 IF( ahm0 > 0 .AND. .NOT. lk_esopa ) CALL ctl_stop( 'The horizontal viscosity coef. ahm0 must be negative' ) 122 IF( ahm0_blp == 0.0 ) ahm0_blp = ahm0 ! Old namelist method: bilap specified with ahm0 123 IF( .NOT. ln_dynldf_lap ) ahm0 = ahm0_blp ! Allow spatially varying coefs, which use ahm0 as input 124 IF( ahm0_blp > 0 .AND. .NOT. lk_esopa ) CALL ctl_stop( 'The horizontal viscosity coef. ahm0 must be negative' ) 120 125 ELSE 121 126 IF(lwp) WRITE(numout,*) ' harmonic momentum diff. (default)' -
branches/devukmo2010/NEMO/OPA_SRC/LDF/ldfdyn_c1d.h90
r1152 r2128 17 17 !! ** Method : 1D eddy viscosity coefficients ( depth ) 18 18 !! ahm3, ahm4 never used 19 !! biharmonic or harmonic operator : ahm1=ahm2 defined at T-level 19 !! harmonic operator : ahm1 defined at T-level 20 !! biharmonic operator : ahm2 defined at T-level 20 21 !! isopycnal or geopotential harmonic operator 21 22 !! : ahm1 defined at T-level … … 27 28 28 29 !! * Local variables 29 REAL(wp) :: zdam, zwam, zm00, zm01, zmhf, zmhs 30 REAL(wp) :: zdam, zwam, zm00, zm01, zmhf, zmhs 31 REAL(wp) :: zdam2, zwam2, zm200, zm201, zmh2f, zmh2s 30 32 REAL(wp) :: zahmf, zahms 31 33 !!---------------------------------------------------------------------- … … 36 38 IF(lwp) WRITE(numout,*) 37 39 38 ! Set ahm1 =ahm2(always at t-level)40 ! Set ahm1 for laplacian (always at t-level) 39 41 ! ============= 40 42 ! (USER: modify ahm1 following your desiderata) … … 53 55 zmhs = zahms-zmhf * zm00 54 56 55 ! set ahm1=ahm2 at T-level 57 ! Set ahm2 for bilaplacian (always at t-level) 58 ! ============= 59 ! (USER: modify ahm2 following your desiderata) 60 61 ! initialization of the profile 62 ! ahms, ahmf: surface and bottom values 63 zahm2s = ahm0_blp 64 zahm2f = ahm0_blp/4. 65 ! zdam, zwam: depth of the inflection pt and width of inflection 66 zdam2 = -300. 67 zwam2 = 300. 68 ! computation coefficients 69 zm200 = TANH( (0-zdam2)/zwam2 ) 70 zm201 = TANH( (-fsdept(1,1,jpk)-zdam2)/zwam2 ) 71 zmh2f = (zahm2s-zahm2f)/(zm200-zm201) 72 zmh2s = zahm2s-zmh2f * zm00 73 74 75 ! set ahm1 and ahm2 at T-level 56 76 DO jk = 1, jpk 57 ahm1(jk) = zmhs + zmhf * TANH( (-fsdept(1,1,jk)-zdam) / zwam)58 ahm2(jk) = ahm1(jk)77 ahm1(jk) = zmhs + zmhf * TANH( (-fsdept(1,1,jk)-zdam ) / zwam ) 78 ahm2(jk) = zmh2s + zmh2f * TANH( (-fsdept(1,1,jk)-zdam2) / zwam2 ) 59 79 END DO 60 80 … … 62 82 IF(lwp .AND. ld_print ) THEN 63 83 WRITE(numout,*) 64 WRITE(numout,*) ' ahm profile : '84 WRITE(numout,*) ' ahm profile (laplacian): ' 65 85 WRITE(numout,*) 66 86 WRITE(numout,9100) 67 87 DO jk = 1, jpk 68 88 WRITE(numout,9110) jk, ahm1(jk), fsdept(1,1,jk) 89 END DO 90 WRITE(numout,*) 91 WRITE(numout,*) ' ahm profile (bilaplacian): ' 92 WRITE(numout,*) 93 WRITE(numout,9100) 94 DO jk = 1, jpk 95 WRITE(numout,9110) jk, ahm2(jk), fsdept(1,1,jk) 69 96 END DO 70 97 ENDIF -
branches/devukmo2010/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90
r1694 r2128 27 27 !! iso-model level : ahm3, ahm4 not used 28 28 !! 29 !! biharmonic operator : ahm 1is defined at u-point30 !! ahm 2is defined at v-point31 !! : ahm 3, ahm4not used29 !! biharmonic operator : ahm3 is defined at u-point 30 !! ahm4 is defined at v-point 31 !! : ahm1, ahm2 not used 32 32 !! 33 33 !!---------------------------------------------------------------------- … … 102 102 IF(lwp) WRITE(numout,*) ' maximum grid-spacing = ', zd_max, ' maximum value for ahm = ', ahm0 103 103 104 za00 = ahm0 / ( zd_max * zd_max * zd_max )104 za00 = ahm0_blp / ( zd_max * zd_max * zd_max ) 105 105 DO jj = 1, jpj 106 106 DO ji = 1, jpi -
branches/devukmo2010/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90
r1694 r2128 122 122 IF(lwp) WRITE(numout,*) ' maximum grid-spacing = ', zd_max, ' maximum value for ahm = ', ahm0 123 123 124 za00 = ahm0 / ( zd_max * zd_max * zd_max )124 za00 = ahm0_blp / ( zd_max * zd_max * zd_max ) 125 125 DO jj = 1, jpj 126 126 DO ji = 1, jpi -
branches/devukmo2010/NEMO/OPA_SRC/LDF/ldfdyn_oce.F90
r1601 r2128 17 17 LOGICAL , PUBLIC :: ln_dynldf_hor = .TRUE. !: horizontal (geopotential) direction 18 18 LOGICAL , PUBLIC :: ln_dynldf_iso = .FALSE. !: iso-neutral direction 19 REAL(wp), PUBLIC :: rn_ahm_0 = 40000._wp !: lateral eddy viscosity (m2/s) 20 REAL(wp), PUBLIC :: rn_ahmb_0 = 0._wp !: lateral background eddy viscosity (m2/s) 19 REAL(wp), PUBLIC :: rn_ahm_0 = 40000._wp !: lateral laplacian eddy viscosity (m2/s) 20 REAL(wp), PUBLIC :: rn_ahmb_0 = 0._wp !: lateral laplacian background eddy viscosity (m2/s) 21 REAL(wp), PUBLIC :: rn_ahm_0_blp = 0._wp !: lateral bilaplacian eddy viscosity (m4/s) 21 22 22 REAL(wp), PUBLIC :: ahm0, ahmb0 23 REAL(wp), PUBLIC :: ahm0, ahmb0, ahm0_blp ! OLD namelist names 23 24 24 25 #if defined key_dynldf_c3d -
branches/devukmo2010/NEMO/OPA_SRC/LDF/ldfdyn_substitute.h90
r1152 r2128 10 10 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 11 11 !!---------------------------------------------------------------------- 12 !! 13 !! fsahmt, fsahmf - used for laplaian operator only 14 !! fsahmu, fsahmv - used for bilaplacian operator only 15 !! 12 16 #if defined key_dynldf_c3d 13 17 ! ' key_dynldf_c3d' : 3D coefficient … … 26 30 # define fsahmt(i,j,k) ahm1(k) 27 31 # define fsahmf(i,j,k) ahm1(k) 28 # define fsahmu(i,j,k) ahm 1(k)29 # define fsahmv(i,j,k) ahm 1(k)32 # define fsahmu(i,j,k) ahm2(k) 33 # define fsahmv(i,j,k) ahm2(k) 30 34 #else 31 35 ! default option : Constant coefficient 32 36 # define fsahmt(i,j,k) ahm0 33 37 # define fsahmf(i,j,k) ahm0 34 # define fsahmu(i,j,k) ahm0 35 # define fsahmv(i,j,k) ahm0 38 # define fsahmu(i,j,k) ahm0_blp 39 # define fsahmv(i,j,k) ahm0_blp 36 40 #endif -
branches/devukmo2010/NEMO/OPA_SRC/OBC/obcvol.F90
r1739 r2128 97 97 ! --------------------------------------------------------------------------- 98 98 99 zCflxemp = SUM ( emp(:,:)*obctmsk(:,:)* e1t(:,:) * e2t(:,:) / rau0 )99 zCflxemp = SUM ( ( emp(:,:)-rnf(:,:) )*obctmsk(:,:)* e1t(:,:) * e2t(:,:) / rau0 ) 100 100 101 101 IF( lk_mpp ) CALL mpp_sum( zCflxemp ) ! sum over the global domain -
branches/devukmo2010/NEMO/OPA_SRC/SBC/sbc_oce.F90
r1705 r2128 49 49 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: emp !: freshwater budget: volume flux [Kg/m2/s] 50 50 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: emps !: freshwater budget: concentration/dillution [Kg/m2/s] 51 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnf !: river runoff [Kg/m2/s] 51 52 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: emp_tot !: total evaporation - (liquid + solid) precpitation over oce and ice 52 53 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: tprecip !: total precipitation [Kg/m2/s] -
branches/devukmo2010/NEMO/OPA_SRC/SBC/sbcfwb.F90
r1822 r2128 31 31 REAL(wp) :: a_fwb_b ! annual domain averaged freshwater budget 32 32 REAL(wp) :: a_fwb ! for 2 year before (_b) and before year. 33 REAL(wp) :: empold ! empold to be suppressed33 REAL(wp) :: fwfold ! fwfold to be suppressed 34 34 REAL(wp) :: area ! global mean ocean surface (interior domain) 35 35 … … 65 65 INTEGER :: inum ! temporary logical unit 66 66 INTEGER :: ikty, iyear ! 67 REAL(wp) :: z_ emp, z_emp_nsrf, zsum_emp, zsum_erp ! temporary scalars67 REAL(wp) :: z_fwf, z_fwf_nsrf, zsum_fwf, zsum_erp ! temporary scalars 68 68 REAL(wp) :: zsurf_neg, zsurf_pos, zsurf_tospread 69 69 REAL(wp), DIMENSION(jpi,jpj) :: ztmsk_neg, ztmsk_pos, ztmsk_tospread … … 79 79 IF( kn_fwb == 1 ) WRITE(numout,*) ' instantaneously set to zero' 80 80 IF( kn_fwb == 2 ) WRITE(numout,*) ' adjusted from previous year budget' 81 IF( kn_fwb == 3 ) WRITE(numout,*) ' empset to zero and spread out over erp area'81 IF( kn_fwb == 3 ) WRITE(numout,*) ' fwf set to zero and spread out over erp area' 82 82 ! 83 83 IF( kn_fwb == 3 .AND. nn_sssr /= 2 ) & … … 101 101 102 102 ! 103 CASE ( 1 ) ! global mean empset to zero103 CASE ( 1 ) ! global mean fwf set to zero 104 104 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 105 z_ emp = SUM( e1e2_i(:,:) * emp(:,:) ) / area106 IF( lk_mpp ) CALL mpp_sum( z_ emp ) ! sum over the global domain107 emp (:,:) = emp (:,:) - z_ emp108 emps(:,:) = emps(:,:) - z_ emp109 ENDIF 110 ! 111 CASE ( 2 ) ! empbudget adjusted from the previous year105 z_fwf = SUM( e1e2_i(:,:) * ( emp(:,:)-rnf(:,:) ) ) / area 106 IF( lk_mpp ) CALL mpp_sum( z_fwf ) ! sum over the global domain 107 emp (:,:) = emp (:,:) - z_fwf 108 emps(:,:) = emps(:,:) - z_fwf 109 ENDIF 110 ! 111 CASE ( 2 ) ! fwf budget adjusted from the previous year 112 112 ! initialisation 113 113 IF( kt == nit000 ) THEN 114 ! Read the corrective factor on precipitations ( empold)114 ! Read the corrective factor on precipitations (fwfold) 115 115 CALL ctl_opn( inum, 'EMPave_old.dat', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 116 116 READ ( inum, "(24X,I8,2ES24.16)" ) iyear, a_fwb_b, a_fwb 117 117 CLOSE( inum ) 118 empold = a_fwb ! current year freshwater budget correction118 fwfold = a_fwb ! current year freshwater budget correction 119 119 ! ! estimate from the previous year budget 120 120 IF(lwp)WRITE(numout,*) 121 IF(lwp)WRITE(numout,*)'sbc_fwb : year = ',iyear , ' freshwater budget correction = ', empold121 IF(lwp)WRITE(numout,*)'sbc_fwb : year = ',iyear , ' freshwater budget correction = ', fwfold 122 122 IF(lwp)WRITE(numout,*)' year = ',iyear-1, ' freshwater budget read = ', a_fwb 123 123 IF(lwp)WRITE(numout,*)' year = ',iyear-2, ' freshwater budget read = ', a_fwb_b 124 124 ENDIF 125 125 ! 126 ! Update empold if new year start126 ! Update fwfold if new year start 127 127 ikty = 365 * 86400 / rdttra(1) !!bug use of 365 days leap year or 360d year !!!!!!! 128 128 IF( MOD( kt, ikty ) == 0 ) THEN … … 132 132 a_fwb = a_fwb * 1.e+3 / ( area * 86400. * 365. ) ! convert in Kg/m3/s = mm/s 133 133 !!gm ! !!bug 365d year 134 empold = a_fwb ! current year freshwater budget correction134 fwfold = a_fwb ! current year freshwater budget correction 135 135 ! ! estimate from the previous year budget 136 136 ENDIF … … 138 138 ! correct the freshwater fluxes 139 139 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 140 emp (:,:) = emp (:,:) + empold141 emps(:,:) = emps(:,:) + empold142 ENDIF 143 ! 144 ! save empold value in a file140 emp (:,:) = emp (:,:) + fwfold 141 emps(:,:) = emps(:,:) + fwfold 142 ENDIF 143 ! 144 ! save fwfold value in a file 145 145 IF( kt == nitend .AND. lwp ) THEN 146 146 CALL ctl_opn( inum, 'EMPave.dat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., narea ) … … 149 149 ENDIF 150 150 ! 151 CASE ( 3 ) ! global empset to zero and spread out over erp area151 CASE ( 3 ) ! global fwf set to zero and spread out over erp area 152 152 ! 153 153 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN … … 161 161 zsurf_pos = SUM( e1e2_i(:,:)*ztmsk_pos(:,:) ) 162 162 163 ! empglobal mean164 z_ emp = SUM( e1e2_i(:,:) * emp(:,:) ) / area163 ! fwf global mean 164 z_fwf = SUM( e1e2_i(:,:) * ( emp(:,:)-rnf(:,:) ) ) / area 165 165 ! 166 IF( lk_mpp ) CALL mpp_sum( z_ emp)166 IF( lk_mpp ) CALL mpp_sum( z_fwf ) 167 167 IF( lk_mpp ) CALL mpp_sum( zsurf_neg ) 168 168 IF( lk_mpp ) CALL mpp_sum( zsurf_pos ) 169 169 170 IF( z_ emp< 0.e0 ) THEN170 IF( z_fwf < 0.e0 ) THEN 171 171 ! to spread out over >0 erp area to increase evaporation damping process 172 172 zsurf_tospread = zsurf_pos … … 178 178 ENDIF 179 179 180 ! empglobal mean over <0 or >0 erp area181 zsum_ emp = SUM( e1e2_i(:,:) * z_emp)182 IF( lk_mpp ) CALL mpp_sum( zsum_ emp)183 z_ emp_nsrf = zsum_emp/ ( zsurf_tospread + rsmall )180 ! fwf global mean over <0 or >0 erp area 181 zsum_fwf = SUM( e1e2_i(:,:) * z_fwf ) 182 IF( lk_mpp ) CALL mpp_sum( zsum_fwf ) 183 z_fwf_nsrf = zsum_fwf / ( zsurf_tospread + rsmall ) 184 184 ! weight to respect erp field 2D structure 185 185 zsum_erp = SUM( ztmsk_tospread(:,:) * erp(:,:) * e1e2_i(:,:) ) … … 188 188 189 189 ! final correction term to apply 190 zerp_cor(:,:) = -1. * z_ emp_nsrf * zsurf_tospread * z_wgt(:,:)190 zerp_cor(:,:) = -1. * z_fwf_nsrf * zsurf_tospread * z_wgt(:,:) 191 191 192 192 CALL lbc_lnk( zerp_cor, 'T', 1. ) … … 197 197 198 198 IF( nprint == 1 .AND. lwp ) THEN 199 IF( z_ emp< 0.e0 ) THEN200 WRITE(numout,*)' z_ emp< 0'199 IF( z_fwf < 0.e0 ) THEN 200 WRITE(numout,*)' z_fwf < 0' 201 201 WRITE(numout,*)' SUM(erp+) = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2_i(:,:) )*1.e-3,' m3.s-1' 202 202 ELSE 203 WRITE(numout,*)' z_ emp>= 0'203 WRITE(numout,*)' z_fwf >= 0' 204 204 WRITE(numout,*)' SUM(erp-) = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2_i(:,:) )*1.e-3,' m3.s-1' 205 205 ENDIF 206 WRITE(numout,*)' SUM(empG) = ', SUM( z_ emp*e1e2_i(:,:) )*1.e-3,' m3.s-1'207 WRITE(numout,*)' z_ emp = ', z_emp,' mm.s-1'208 WRITE(numout,*)' z_ emp_nsrf = ', z_emp_nsrf ,' mm.s-1'206 WRITE(numout,*)' SUM(empG) = ', SUM( z_fwf*e1e2_i(:,:) )*1.e-3,' m3.s-1' 207 WRITE(numout,*)' z_fwf = ', z_fwf ,' mm.s-1' 208 WRITE(numout,*)' z_fwf_nsrf = ', z_fwf_nsrf ,' mm.s-1' 209 209 WRITE(numout,*)' MIN(zerp_cor) = ', MINVAL(zerp_cor) 210 210 WRITE(numout,*)' MAX(zerp_cor) = ', MAXVAL(zerp_cor) -
branches/devukmo2010/NEMO/OPA_SRC/SBC/sbcmod.F90
r1792 r2128 6 6 !! History : 3.0 ! 07-2006 (G. Madec) Original code 7 7 !! - ! 08-2008 (S. Masson, E. .... ) coupled interface 8 !! 3.3 ! 09-2010 (D. Storkey) add ice boundary conditions (BDY) 8 9 !!---------------------------------------------------------------------- 9 10 … … 32 33 USE sbcfwb ! surface boundary condition: freshwater budget 33 34 USE closea ! closed sea 35 USE bdy_par ! unstructured open boundary data variables 36 USE bdyice ! unstructured open boundary data (bdy_ice routine) 34 37 35 38 USE prtctl ! Print control (prt_ctl routine) … … 223 226 ! 224 227 CASE( 2 ) ; CALL sbc_ice_lim_2( kt, nsbc ) ! LIM 2.0 ice model 228 IF( lk_bdy ) CALL bdy_ice( kt ) 225 229 ! 226 230 CASE( 3 ) ; CALL sbc_ice_lim ( kt, nsbc, nn_ico_cpl) ! LIM 3.0 ice model … … 237 241 ! 238 242 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 239 CALL iom_put( "emp " , emp ) ! upward water flux240 CALL iom_put( "emps " , emps ) ! c/d water flux241 CALL iom_put( "qns+qsr" , qns + qsr )! total heat flux (caution if ln_dm2dc=true, to be242 CALL iom_put( "qns" , qns )! solar heat flux moved after the call to iom_setkt)243 CALL iom_put( "qsr" , qsr )! solar heat flux moved after the call to iom_setkt)243 CALL iom_put( "emp-rnf" , (emp-rnf) ) ! upward water flux 244 CALL iom_put( "emps-rnf" , (emps-rnf) ) ! c/d water flux 245 CALL iom_put( "qns+qsr" , qns + qsr ) ! total heat flux (caution if ln_dm2dc=true, to be 246 CALL iom_put( "qns" , qns ) ! solar heat flux moved after the call to iom_setkt) 247 CALL iom_put( "qsr" , qsr ) ! solar heat flux moved after the call to iom_setkt) 244 248 IF( nn_ice > 0 ) CALL iom_put( "ice_cover", fr_i ) ! ice fraction 245 249 ENDIF … … 254 258 IF(ln_ctl) THEN ! print mean trends (used for debugging) 255 259 CALL prt_ctl(tab2d_1=fr_i , clinfo1=' fr_i - : ', mask1=tmask, ovlap=1 ) 256 CALL prt_ctl(tab2d_1= emp , clinfo1=' emp - : ', mask1=tmask, ovlap=1 )257 CALL prt_ctl(tab2d_1= emps , clinfo1=' emps - : ', mask1=tmask, ovlap=1 )260 CALL prt_ctl(tab2d_1=(emp-rnf) , clinfo1=' emp-rnf - : ', mask1=tmask, ovlap=1 ) 261 CALL prt_ctl(tab2d_1=(emps-rnf), clinfo1=' emps-rnf - : ', mask1=tmask, ovlap=1 ) 258 262 CALL prt_ctl(tab2d_1=qns , clinfo1=' qns - : ', mask1=tmask, ovlap=1 ) 259 263 CALL prt_ctl(tab2d_1=qsr , clinfo1=' qsr - : ', mask1=tmask, ovlap=1 ) -
branches/devukmo2010/NEMO/OPA_SRC/SBC/sbcrnf.F90
r1730 r2128 32 32 TYPE(FLD_N) , PUBLIC :: sn_rnf !: information about the runoff file to be read 33 33 TYPE(FLD_N) , PUBLIC :: sn_cnf !: information about the runoff mouth file to be read 34 TYPE(FLD_N) :: sn_sal_rnf !: information about the salinities of runoff file to be read 35 TYPE(FLD_N) :: sn_tmp_rnf !: information about the temperatures of runoff file to be read 36 TYPE(FLD_N) :: sn_dep_rnf !: information about the depth which river inflow affects 34 37 LOGICAL , PUBLIC :: ln_rnf_mouth = .false. !: specific treatment in mouths vicinity 35 38 REAL(wp) , PUBLIC :: rn_hrnf = 0.e0 !: runoffs, depth over which enhanced vertical mixing is used 36 39 REAL(wp) , PUBLIC :: rn_avt_rnf = 0.e0 !: runoffs, value of the additional vertical mixing coef. [m2/s] 40 LOGICAL , PUBLIC :: ln_rnf_att = .false. !: river runoffs attributes (temp, sal & depth) are specified in a file 37 41 REAL(wp) , PUBLIC :: rn_rfact = 1.e0 !: multiplicative factor for runoff 38 42 … … 41 45 REAL(wp), PUBLIC, DIMENSION(jpk) :: rnfmsk_z !: river mouth mask (vert.) 42 46 43 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_rnf ! structure of input SST (file information, fields read) 47 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_rnf !: structure of input river runoff (file information, fields read) 48 49 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_sal_rnf !: structure of input river runoff salinity (file information, fields read) 50 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_tmp_rnf !: structure of input river runoff temperature (file information, fields read) 51 52 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnf_dep !: depth of runoff in m 53 INTEGER, PUBLIC, DIMENSION(jpi,jpj) :: rnf_mod_dep !: depth of runoff in model levels 54 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnf_sal !: salinity of river runoff 55 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnf_tmp !: temperature of river runoff 56 57 INTEGER :: ji, jj ,jk ! dummy loop indices 58 INTEGER :: inum ! temporary logical unit 59 60 !! * Substitutions 61 # include "domzgr_substitute.h90" 44 62 45 63 !!---------------------------------------------------------------------- … … 66 84 !! 67 85 INTEGER :: ji, jj ! dummy loop indices 68 INTEGER :: ierror ! temporary integer69 86 !!---------------------------------------------------------------------- 70 87 ! 71 88 IF( kt == nit000 ) THEN 72 IF( .NOT. ln_rnf_emp ) THEN 73 ALLOCATE( sf_rnf(1), STAT=ierror ) 74 IF( ierror > 0 ) THEN 75 CALL ctl_stop( 'sbc_rnf: unable to allocate sf_rnf structure' ) ; RETURN 76 ENDIF 77 ALLOCATE( sf_rnf(1)%fnow(jpi,jpj) ) 78 ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,2) ) 79 ENDIF 80 CALL sbc_rnf_init(sf_rnf) 89 CALL sbc_rnf_init ! Read namelist and allocate structures 81 90 ENDIF 82 91 … … 87 96 CALL fld_read( kt, nn_fsbc, sf_rnf ) ! Read Runoffs data and provides it 88 97 ! ! at the current time-step 98 IF ( ln_rnf_att ) THEN 99 CALL fld_read ( kt, nn_fsbc, sf_sal_rnf ) 100 CALL fld_read ( kt, nn_fsbc, sf_tmp_rnf ) 101 ENDIF 89 102 90 103 ! Runoff reduction only associated to the ORCA2_LIM configuration … … 101 114 102 115 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 103 emp (:,:) = emp (:,:) - rn_rfact * ABS( sf_rnf(1)%fnow(:,:) ) 104 emps(:,:) = emps(:,:) - rn_rfact * ABS( sf_rnf(1)%fnow(:,:) ) 105 CALL iom_put( "runoffs", sf_rnf(1)%fnow ) ! runoffs 116 rnf(:,:) = rn_rfact * ( sf_rnf(1)%fnow(:,:) ) 117 IF ( ln_rnf_att ) THEN 118 rnf_sal(:,:) = ( sf_sal_rnf(1)%fnow(:,:) ) 119 rnf_tmp(:,:) = ( sf_tmp_rnf(1)%fnow(:,:) ) 120 ELSE 121 rnf_sal(:,:) = 0.0 122 rnf_tmp(:,:) = -999 123 ENDIF 124 CALL iom_put( "runoffs", rnf ) ! runoffs 106 125 ENDIF 107 126 ! … … 111 130 112 131 113 SUBROUTINE sbc_rnf_init ( sf_rnf )132 SUBROUTINE sbc_rnf_init 114 133 !!---------------------------------------------------------------------- 115 134 !! *** ROUTINE sbc_rnf_init *** … … 121 140 !! ** Action : - read parameters 122 141 !!---------------------------------------------------------------------- 123 TYPE(FLD), INTENT(inout), DIMENSION(:) :: sf_rnf ! input data 124 !! 125 NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, sn_rnf, sn_cnf, ln_rnf_mouth, & 126 & rn_hrnf, rn_avt_rnf, rn_rfact 142 CHARACTER(len=32) :: rn_dep_file ! runoff file name 143 INTEGER :: ierror ! temporary integer 144 !! 145 NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, sn_rnf, sn_cnf, sn_sal_rnf, sn_tmp_rnf, sn_dep_rnf, & 146 & ln_rnf_mouth, ln_rnf_att, rn_hrnf, rn_avt_rnf, rn_rfact 127 147 !!---------------------------------------------------------------------- 128 148 … … 136 156 sn_cnf = FLD_N( 'runoffs', 0 , 'sorunoff' , .FALSE. , .true. , 'yearly' , '' , '' ) 137 157 158 sn_sal_rnf = FLD_N( 'runoffs', 24. , 'rosaline' , .TRUE. , .true. , 'yearly' , '' , '' ) 159 sn_tmp_rnf = FLD_N( 'runoffs', 24. , 'rotemper' , .TRUE. , .true. , 'yearly' , '' , '' ) 160 sn_dep_rnf = FLD_N( 'runoffs', 0. , 'rodepth' , .FALSE. , .true. , 'yearly' , '' , '' ) 138 161 ! 139 162 REWIND ( numnam ) ! Read Namelist namsbc_rnf … … 160 183 IF(lwp) WRITE(numout,*) 161 184 IF(lwp) WRITE(numout,*) ' runoffs directly provided in the precipitations' 185 IF ( ln_rnf_att ) THEN 186 CALL ctl_warn( 'runoffs already included in precipitations & so runoff attributes will not be used' ) 187 ln_rnf_att = .FALSE. 188 ENDIF 162 189 ! 163 190 ELSE ! runoffs read in a file : set sf_rnf structure 164 191 ! 165 ! sf_rnf already allocated in main routine 192 ! Allocate sf_rnf structure and (if required) sf_sal_rnf and sf_tmp_rnf structures 193 ALLOCATE( sf_rnf(1), STAT=ierror ) 194 IF( ierror > 0 ) THEN 195 CALL ctl_stop( 'sbc_rnf: unable to allocate sf_rnf structure' ) ; RETURN 196 ENDIF 197 ALLOCATE( sf_rnf(1)%fnow(jpi,jpj) ) 198 ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,2) ) 199 200 IF( ln_rnf_att ) THEN 201 ALLOCATE( sf_sal_rnf(1), STAT=ierror ) 202 IF( ierror > 0 ) THEN 203 CALL ctl_stop( 'sbc_sal_rnf: unable to allocate sf_sal_rnf structure' ) ; RETURN 204 ENDIF 205 ALLOCATE( sf_sal_rnf(1)%fnow(jpi,jpj) ) 206 ALLOCATE( sf_sal_rnf(1)%fdta(jpi,jpj,2) ) 207 208 ALLOCATE( sf_tmp_rnf(1), STAT=ierror ) 209 IF( ierror > 0 ) THEN 210 CALL ctl_stop( 'sbc_tmp_rnf: unable to allocate sf_tmp_rnf structure' ) ; RETURN 211 ENDIF 212 ALLOCATE( sf_tmp_rnf(1)%fnow(jpi,jpj) ) 213 ALLOCATE( sf_tmp_rnf(1)%fdta(jpi,jpj,2) ) 214 ENDIF 166 215 ! fill sf_rnf with sn_rnf and control print 167 216 CALL fld_fill( sf_rnf, (/ sn_rnf /), cn_dir, 'sbc_rnf_init', 'read runoffs data', 'namsbc_rnf' ) 168 ! 169 ENDIF 170 217 218 IF ( ln_rnf_att ) THEN 219 CALL fld_fill (sf_sal_rnf, (/ sn_sal_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff salinity data', 'namsbc_rnf' ) 220 CALL fld_fill (sf_tmp_rnf, (/ sn_tmp_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff temperature data', 'namsbc_rnf' ) 221 222 rn_dep_file = TRIM( cn_dir )//TRIM( sn_dep_rnf%clname ) 223 CALL iom_open ( rn_dep_file, inum ) ! open file 224 CALL iom_get ( inum, jpdom_data, sn_dep_rnf%clvar, rnf_dep ) ! read the river mouth array 225 CALL iom_close( inum ) ! close file 226 227 rnf_mod_dep(:,:)=0 228 DO jj=1,jpj 229 DO ji=1,jpi 230 IF ( rnf_dep(ji,jj) > 0.e0 ) THEN 231 jk=2 232 DO WHILE ( jk/=(mbathy(ji,jj)-1) .AND. fsdept(ji,jj,jk) < rnf_dep(ji,jj) ); jk=jk+1; ENDDO 233 rnf_mod_dep(ji,jj)=jk 234 ELSE IF ( rnf_dep(ji,jj) .eq. -1 ) THEN 235 rnf_mod_dep(ji,jj)=1 236 ELSE IF ( rnf_dep(ji,jj) .eq. -999 ) THEN 237 rnf_mod_dep(ji,jj)=mbathy(ji,jj)-1 238 ELSE IF ( rnf_dep(ji,jj) /= 0 ) THEN 239 CALL ctl_stop( 'runoff depth not positive, and not -999 or -1, rnf value in file fort.999' ) 240 WRITE(999,*) 'ji, jj, rnf(ji,jj) :', ji, jj, rnf(ji,jj) 241 ENDIF 242 ENDDO 243 ENDDO 244 ELSE 245 rnf_mod_dep(:,:)=1 246 ENDIF 247 ! 248 ENDIF 249 250 ! recalculate rnf_dep to be the depth in metres to the bottom of the relevant grid box 251 DO jj=1,jpj 252 DO ji=1,jpi 253 rnf_dep(ji,jj)=0 254 DO jk=1,rnf_mod_dep(ji,jj) 255 rnf_dep(ji,jj)=rnf_dep(ji,jj)+fse3t(ji,jj,jk) 256 ENDDO 257 ENDDO 258 ENDDO 171 259 ! ! ======================== 172 260 ! ! River mouth vicinity … … 179 267 ! 180 268 ! ! Number of level over which Kz increase 269 IF ( ln_rnf_att ) & 270 & CALL ctl_warn( 'increased mixing turned on but effects may already be spread through depth by ln_rnf_att' ) 181 271 nkrnf = 0 182 272 IF( rn_hrnf > 0.e0 ) THEN -
branches/devukmo2010/NEMO/OPA_SRC/SOL/solmat.F90
r2031 r2128 15 15 !! 3.2 ! 2009-06 (S. Masson) distributed restart using iom 16 16 !! - ! 2009-07 (R. Benshila) suppression of rigid-lid option 17 !! 3.3 ! 2010-09 (D. Storkey) update for BDY module. 17 18 !!---------------------------------------------------------------------- 18 19 … … 26 27 USE phycst ! physical constants 27 28 USE obc_oce ! ocean open boundary conditions 29 USE bdy_oce ! unstructured open boundary conditions 28 30 USE lbclnk ! lateral boudary conditions 29 31 USE lib_mpp ! distributed memory computing … … 80 82 ENDIF 81 83 82 #if defined key_dynspg_flt 83 # if ! defined key_obc 84 #if defined key_dynspg_flt && ! defined key_obc && ! defined key_bdy 84 85 85 86 DO jj = 2, jpjm1 ! matrix of free surface elliptic system … … 158 159 ENDIF 159 160 # endif 161 162 # elif defined key_dynspg_flt && defined key_bdy 163 164 ! defined gcdmat in the case of unstructured open boundaries 165 DO jj = 2, jpjm1 166 DO ji = 2, jpim1 167 zcoef = z2dt * z2dt * grav * bmask(ji,jj) 168 169 ! south coefficient 170 zcoefs = -zcoef * hv(ji,jj-1) * e1v(ji,jj-1)/e2v(ji,jj-1) 171 zcoefs = zcoefs * bdyvmask(ji,jj-1) 172 gcp(ji,jj,1) = zcoefs 173 174 ! west coefficient 175 zcoefw = -zcoef * hu(ji-1,jj) * e2u(ji-1,jj)/e1u(ji-1,jj) 176 zcoefw = zcoefw * bdyumask(ji-1,jj) 177 gcp(ji,jj,2) = zcoefw 178 179 ! east coefficient 180 zcoefe = -zcoef * hu(ji,jj) * e2u(ji,jj)/e1u(ji,jj) 181 zcoefe = zcoefe * bdyumask(ji,jj) 182 gcp(ji,jj,3) = zcoefe 183 184 ! north coefficient 185 zcoefn = -zcoef * hv(ji,jj) * e1v(ji,jj)/e2v(ji,jj) 186 zcoefn = zcoefn * bdyvmask(ji,jj) 187 gcp(ji,jj,4) = zcoefn 188 189 ! diagonal coefficient 190 gcdmat(ji,jj) = e1t(ji,jj)*e2t(ji,jj)*bmask(ji,jj) & 191 - zcoefs -zcoefw -zcoefe -zcoefn 192 END DO 193 END DO 194 160 195 #endif 161 196 -
branches/devukmo2010/NEMO/OPA_SRC/TRA/tradmp.F90
r1601 r2128 47 47 LOGICAL, PUBLIC :: lk_tradmp = .TRUE. !: internal damping flag 48 48 #endif 49 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: strdmp !: damping salinity trend (psu/s) 50 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: ttrdmp !: damping temperature trend (Centigrade/s) 49 51 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: resto !: restoring coeff. on T and S (s-1) 50 52 … … 91 93 INTEGER, INTENT(in) :: kt ! ocean time-step index 92 94 !! 95 REAL(wp) :: zta, zsa ! temporary scalars 93 96 INTEGER :: ji, jj, jk ! dummy loop indices 94 97 !!---------------------------------------------------------------------- … … 107 110 DO jj = 2, jpjm1 108 111 DO ji = fs_2, fs_jpim1 ! vector opt. 109 ta(ji,jj,jk) = ta(ji,jj,jk) + resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 110 sa(ji,jj,jk) = sa(ji,jj,jk) + resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 112 zta = resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 113 zsa = resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 114 ! add the trends to the general tracer trends 115 ta(ji,jj,jk) = ta(ji,jj,jk) + zta 116 sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 117 ! save the salinity trend (used in asmtrj) 118 strdmp(ji,jj,jk) = zsa 119 ttrdmp(ji,jj,jk) = zta 111 120 END DO 112 121 END DO … … 118 127 DO ji = fs_2, fs_jpim1 ! vector opt. 119 128 IF( avt(ji,jj,jk) <= 5.e-4 ) THEN 120 ta(ji,jj,jk) = ta(ji,jj,jk) + resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 121 sa(ji,jj,jk) = sa(ji,jj,jk) + resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 129 zta = resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 130 zsa = resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 131 ELSE 132 zta = 0.e0 133 zsa = 0.e0 122 134 ENDIF 135 ! add the trends to the general tracer trends 136 ta(ji,jj,jk) = ta(ji,jj,jk) + zta 137 sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 138 ! save the salinity trend (used in asmtrj) 139 strdmp(ji,jj,jk) = zsa 140 ttrdmp(ji,jj,jk) = zta 123 141 END DO 124 142 END DO … … 130 148 DO ji = fs_2, fs_jpim1 ! vector opt. 131 149 IF( fsdept(ji,jj,jk) >= hmlp (ji,jj) ) THEN 132 ta(ji,jj,jk) = ta(ji,jj,jk) + resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 133 sa(ji,jj,jk) = sa(ji,jj,jk) + resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 150 zta = resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 151 zsa = resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 152 ELSE 153 zta = 0.e0 154 zsa = 0.e0 134 155 ENDIF 156 ! add the trends to the general tracer trends 157 ta(ji,jj,jk) = ta(ji,jj,jk) + zta 158 sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 159 ! save the salinity trend (used in asmtrj) 160 strdmp(ji,jj,jk) = zsa 161 ttrdmp(ji,jj,jk) = zta 135 162 END DO 136 163 END DO … … 199 226 & CALL ctl_stop( 'no temperature and/or salinity data define key_dtatem and key_dtasal' ) 200 227 228 strdmp(:,:,:) = 0.e0 ! internal damping salinity trend (used in asmtrj) 229 ttrdmp(:,:,:) = 0.e0 201 230 ! ! Damping coefficients initialization 202 231 IF( lzoom ) THEN ; CALL dtacof_zoom -
branches/devukmo2010/NEMO/OPA_SRC/TRA/trasbc.F90
r1892 r2128 21 21 USE in_out_manager ! I/O manager 22 22 USE prtctl ! Print control 23 USE sbcrnf ! River runoff 24 USE sbcmod ! ln_rnf 23 25 24 26 IMPLICIT NONE … … 103 105 INTEGER, INTENT(in) :: kt ! ocean time-step index 104 106 !! 105 INTEGER :: ji, jj ! dummy loop indices 106 REAL(wp) :: zta, zsa, zsrau, zse3t ! temporary scalars 107 INTEGER :: ji, jj, jk ! dummy loop indices 108 REAL(wp) :: zta, zsa ! temporary scalars, adjustment to temperature and salinity 109 REAL(wp) :: zata, zasa ! temporary scalars, calculations of automatic change to temp & sal due to vvl (done elsewhere) 110 REAL(wp) :: zsrau, zse3t, zdep ! temporary scalars, 1/density, 1/height of box, 1/height of effected water column 111 REAL(wp) :: zdheat, zdsalt ! total change of temperature and salinity 107 112 !!---------------------------------------------------------------------- 108 113 … … 125 130 IF( .NOT.ln_traqsr ) qsr(:,:) = 0.e0 ! no solar radiation penetration 126 131 127 ! Concentration dil lution effect on (t,s)132 ! Concentration dilution effect on (t,s) due to evapouration, precipitation and qns, but not river runoff 128 133 DO jj = 2, jpj 129 134 DO ji = fs_2, fs_jpim1 ! vector opt. … … 132 137 #endif 133 138 IF( lk_vvl) THEN 134 zta = ro0cpr * qns(ji,jj) * zse3t & ! temperature : heat flux135 & - emp(ji,jj) * zsrau * tn(ji,jj,1) * zse3t ! & cooling/heating effet of EMP flux139 zta = ro0cpr * qns(ji,jj) * zse3t & ! temperature : heat flux 140 & - emp(ji,jj) * zsrau * tn(ji,jj,1) * zse3t ! & cooling/heating effet of EMP flux 136 141 zsa = ( emps(ji,jj) - emp(ji,jj) ) & 137 142 & * zsrau * sn(ji,jj,1) * zse3t ! concent./dilut. effect due to sea-ice 138 143 ! melt/formation and (possibly) SSS restoration 139 144 ELSE 140 zta = ro0cpr * qns(ji,jj) * zse3t ! temperature : heat flux141 zsa = emps(ji,jj) * zsrau * sn(ji,jj,1) * zse3t ! salinity : concent./dilut. effect145 zta = ro0cpr * qns(ji,jj) * zse3t ! temperature : heat flux 146 zsa = emps(ji,jj) * zsrau * sn(ji,jj,1) * zse3t ! salinity : concent./dilut. effect 142 147 ENDIF 143 148 ta(ji,jj,1) = ta(ji,jj,1) + zta ! add the trend to the general tracer trend … … 145 150 END DO 146 151 END DO 152 153 IF ( ln_rnf ) THEN 154 155 ! Effect on (t,s) due to river runoff (dilution effect automatically applied via vertical tracer advection) 156 DO jj=1,jpj 157 DO ji=1,jpi 158 zdep = 1. / rnf_dep(ji,jj) 159 zse3t= 1. / fse3t(ji,jj,1) 160 161 IF ( rnf(ji,jj) .gt. 0.0 ) THEN 162 ! ammend t and s due to direct tracer flux 163 IF ( rnf_tmp(ji,jj) == -999 ) rnf_tmp(ji,jj)=tn(ji,jj,1) ! if not specified set runoff temp to be sst 164 DO jk=1, rnf_mod_dep(ji,jj) 165 ta(ji,jj,jk) = ta(ji,jj,jk) + rnf_tmp(ji,jj) * rnf(ji,jj) * zsrau * zdep 166 sa(ji,jj,jk) = sa(ji,jj,jk) + rnf_sal(ji,jj) * rnf(ji,jj) * zsrau * zdep 167 ENDDO 168 ELSEIF (rnf(ji,jj) .lt. 0.) THEN !! for use in baltic when flow is out of domain, want no change in temp and sal 169 ! negate concentration/dilution effect from traadv, as the tracer leaves domain 170 DO jk=1, rnf_mod_dep(ji,jj) 171 ta(ji,jj,jk) = ta(ji,jj,jk) + tn(ji,jj,jk) * rnf(ji,jj) * zsrau * zdep 172 sa(ji,jj,jk) = sa(ji,jj,jk) + sn(ji,jj,jk) * rnf(ji,jj) * zsrau * zdep 173 ENDDO 174 ENDIF 175 176 ENDDO 177 ENDDO 178 179 ENDIF 147 180 148 181 IF( l_trdtra ) THEN ! save the sbc trends for diagnostic -
branches/devukmo2010/NEMO/OPA_SRC/ZDF/zdfkpp.F90
r1695 r2128 453 453 zBosol(ji,jj) = grav * zthermal * qsr(ji,jj) 454 454 ! Non radiative surface buoyancy force 455 zBo (ji,jj) = grav * zthermal * qns(ji,jj) - grav * zhalin * emps(ji,jj)455 zBo (ji,jj) = grav * zthermal * qns(ji,jj) - grav * zhalin * ( emps(ji,jj)-rnf(ji,jj) ) 456 456 ! Surface Temperature flux for non-local term 457 457 wt0(ji,jj) = - ( qsr(ji,jj) + qns(ji,jj) )* ro0cpr * tmask(ji,jj,1) 458 458 ! Surface salinity flux for non-local term 459 ws0(ji,jj) = - ( emps(ji,jj) * sn(ji,jj,1) * rcs ) * tmask(ji,jj,1)459 ws0(ji,jj) = - ( ( emps(ji,jj)-rnf(ji,jj) ) * sn(ji,jj,1) * rcs ) * tmask(ji,jj,1) 460 460 ENDDO 461 461 ENDDO -
branches/devukmo2010/NEMO/OPA_SRC/ZDF/zdftke.F90
r1756 r2128 87 87 88 88 REAL(wp), DIMENSION(jpi,jpj) :: htau ! depth of tke penetration (nn_htau) 89 REAL(wp), DIMENSION(jpi,jpj,jpk) :: en ! now turbulent kinetic energy [m2/s2]89 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: en ! now turbulent kinetic energy [m2/s2] 90 90 REAL(wp), DIMENSION(jpi,jpj,jpk) :: dissl ! now mixing lenght of dissipation 91 91 -
branches/devukmo2010/NEMO/OPA_SRC/cla.F90
r1146 r2128 163 163 DO ji = mi0(148), mi1(160) 164 164 zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 165 zempred = zempred + emp(ji,jj) * zwei165 zempred = zempred + ( emp(ji,jj) - rnf(ji,jj) ) * zwei 166 166 END DO 167 167 END DO … … 365 365 DO ji = mi0(141),mi1(181) 366 366 zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 367 zempmed = zempmed + emp(ji,jj) * zwei367 zempmed = zempmed + ( emp(ji,jj) - rnf(ji,jj) ) * zwei 368 368 END DO 369 369 END DO … … 374 374 DO jj = mj0(96),mj1(96) 375 375 DO ji = mi0(148),mi1(148) 376 zempmed = zempmed - emp(ji ,jj) * tmask(ji ,jj,1) * e1t(ji ,jj) * e2t(ji ,jj) &377 - emp(ji+1,jj) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)376 zempmed = zempmed - ( emp(ji ,jj)-rnf(ji ,jj) ) * tmask(ji ,jj,1) * e1t(ji ,jj) * e2t(ji ,jj) & 377 - ( emp(ji+1,jj)-rnf(ji+1,jj) ) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj) 378 378 END DO 379 379 END DO … … 389 389 zu3_ms(:) = zu3_ms_i(:) 390 390 391 ! velocity profile at 139,101 South point + empon surface391 ! velocity profile at 139,101 South point + (emp-rnf) on surface 392 392 DO jk = 1, 14 393 393 DO jj = mj0(102), mj1(102) … … 399 399 400 400 ! profile at East Gibraltar 401 ! velocity profile at 141,102 + empon surface401 ! velocity profile at 141,102 + (emp-rnf) on surface 402 402 DO jk = 1, 14 403 403 DO jj = mj0(102), mj1(102) -
branches/devukmo2010/NEMO/OPA_SRC/cla_div.F90
r1146 r2128 124 124 DO ji = mi0(148), mi1(160) 125 125 zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 126 zempred = zempred + emp(ji,jj) * zwei126 zempred = zempred + ( emp(ji,jj) - rnf(ji,jj) ) * zwei 127 127 END DO 128 128 END DO … … 234 234 DO ji = mi0(141),mi1(181) 235 235 zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 236 zempmed = zempmed + emp(ji,jj) * zwei236 zempmed = zempmed + ( emp(ji,jj) - rnf(ji,jj) ) * zwei 237 237 END DO 238 238 END DO … … 242 242 DO jj = mj0(96), mj1(96) 243 243 DO ji = mi0(148),mi1(148) 244 zempmed = zempmed - emp(ji , jj) * tmask(ji , jj,1) * e1t(ji , jj) * e2t(ji , jj) &245 - emp(ji+1, jj) * tmask(ji+1, jj,1) * e1t(ji+1, jj) * e2t(ji+1, jj)244 zempmed = zempmed - ( emp(ji , jj) - rnf(ji ,jj) ) * tmask(ji , jj,1) * e1t(ji , jj) * e2t(ji , jj) & 245 - ( emp(ji+1, jj) - rnf(ji+1,jj) ) * tmask(ji+1, jj,1) * e1t(ji+1, jj) * e2t(ji+1, jj) 246 246 END DO 247 247 END DO -
branches/devukmo2010/NEMO/OPA_SRC/cla_dynspg.F90
r1556 r2128 79 79 ! EMP on Mediterranean Sea and Red Sea 80 80 ! ------------------------------------ 81 ! compute the empin Mediterranean Sea81 ! compute the (emp-rnf) in Mediterranean Sea 82 82 zempmed = 0.e0 83 83 zwei = 0.e0 … … 87 87 DO ji = mi0(ii0),mi1(ii1) 88 88 zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 89 zempmed = zempmed + emp(ji,jj) * zwei89 zempmed = zempmed + ( emp(ji,jj)-rnf(ji,jj) ) * zwei 90 90 END DO 91 91 END DO … … 97 97 DO jj = mj0(ij0), mj1(ij1) 98 98 DO ji = mi0(ii0),mi1(ii1) 99 zempmed = zempmed - emp(ji ,jj) * tmask(ji ,jj,1) * e1t(ji ,jj) * e2t(ji ,jj) &100 & - emp(ji+1,jj) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)99 zempmed = zempmed - ( emp(ji ,jj) - rnf(ji ,jj) ) * tmask(ji ,jj,1) * e1t(ji ,jj) * e2t(ji ,jj) & 100 & - ( emp(ji+1,jj) - rnf(ji+1,jj) ) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj) 101 101 END DO 102 102 END DO … … 104 104 zempmed = zempmed * 1.e-3 105 105 106 ! compute the empin Red Sea106 ! compute the (emp-rnf) in Red Sea 107 107 zempred = 0.e0 108 108 zwei = 0.e0 … … 112 112 DO ji = mi0(ii0),mi1(ii1) 113 113 zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 114 zempred = zempred + emp(ji,jj) * zwei114 zempred = zempred + ( emp(ji,jj) - rnf(ji,jj) ) * zwei 115 115 END DO 116 116 END DO -
branches/devukmo2010/NEMO/OPA_SRC/lib_mpp.F90
r1921 r2128 71 71 PUBLIC mpprecv, mppsend, mppscatter, mppgather 72 72 PUBLIC mppobc, mpp_ini_ice, mpp_ini_znl 73 #if defined key_oasis3 || defined key_oasis4 74 PUBLIC mppsize, mpprank 75 #endif 73 PUBLIC mppsize, mpprank, mpi_comm_opa 76 74 77 75 !! * Interfaces -
branches/devukmo2010/NEMO/OPA_SRC/opa.F90
r1793 r2128 25 25 !! - ! 2007-07 (J. Chanut, A. Sellar) Unstructured open boundaries (BDY) 26 26 !! 3.2 ! 2009-08 (S. Masson) open/write in the listing file in mpp 27 !! 3.3 ! 2010-05 (K. Mogensen, A. Weaver, M. Martin, D. Lea) Assimilation interface 27 28 !!---------------------------------------------------------------------- 28 29 … … 53 54 USE phycst ! physical constant (par_cst routine) 54 55 USE trdmod ! momentum/tracers trends (trd_mod_init routine) 56 USE asminc ! assimilation increments (asm_inc_init routine) 57 USE asmtrj ! writing out state trajectory 58 USE sshwzv ! vertical velocity used in asm 55 59 USE diaptr ! poleward transports (dia_ptr_init routine) 56 60 USE step ! OPA time-stepping (stp routine) … … 133 137 END DO 134 138 ELSE !== 3D ocean with ==! 139 IF( lk_asminc ) THEN 140 IF( ln_bkgwri ) CALL asm_bkg_wri( nit000 - 1 ) ! Output background fields 141 IF( ln_trjwri ) CALL asm_trj_wri( nit000 - 1 ) ! Output trajectory fields 142 IF( ln_asmdin ) THEN ! Direct initialization 143 IF( ln_trainc ) CALL tra_asm_inc( nit000 - 1 ) ! Tracers 144 IF( ln_dyninc ) THEN 145 CALL dyn_asm_inc( nit000 - 1 ) ! Dynamics 146 IF ( ln_asmdin ) CALL ssh_wzv ( nit000 - 1 ) ! update vertical velocity 147 ENDIF 148 IF( ln_sshinc ) CALL ssh_asm_inc( nit000 - 1 ) ! SSH 149 ENDIF 150 ENDIF 151 135 152 DO WHILE ( istp <= nitend .AND. nstop == 0 ) 136 153 #if defined key_agrif … … 279 296 CALL dia_ptr_init ! Poleward TRansports initialization 280 297 CALL trd_mod_init ! Mixed-layer/Vorticity/Integral constraints trends 298 299 IF( lk_asminc ) CALL asm_inc_init ! Initialize assimilation increments 300 IF(lwp) WRITE(numout,*)'Euler time step switch is ', neuler 301 281 302 ! 282 303 END SUBROUTINE opa_init -
branches/devukmo2010/NEMO/OPA_SRC/step.F90
r1793 r2128 21 21 !! 3.2 ! 2009-02 (G. Madec, R. Benshila) reintroduicing z*-coordinate 22 22 !! - ! 2009-06 (S. Masson, G. Madec) TKE restart compatible with key_cpl 23 !! 3.3 ! 2010-05 (K. Mogensen, A. Weaver, M. Martin, D. Lea) Assimilation interface 23 24 !!---------------------------------------------------------------------- 24 25 … … 113 114 USE floats ! floats computation (flo_stp routine) 114 115 116 USE asminc ! assimilation increments (tra_asm_inc, dyn_asm_inc routines) 115 117 USE stpctl ! time stepping control (stp_ctl routine) 116 118 USE restart ! ocean restart (rst_wri routine) … … 265 267 sa(:,:,:) = 0.e0 266 268 269 IF( ln_asmiau .AND. & 270 & ln_trainc ) CALL tra_asm_inc( kstp ) ! apply tracer assimilation increment 267 271 CALL tra_sbc ( kstp ) ! surface boundary condition 268 272 IF( ln_traqsr ) CALL tra_qsr ( kstp ) ! penetrative solar radiation qsr … … 303 307 va(:,:,:) = 0.e0 304 308 309 IF( ln_asmiau .AND. & 310 & ln_dyninc ) CALL dyn_asm_inc( kstp ) ! apply dynamics assimilation increment 305 311 CALL dyn_adv( kstp ) ! advection (vector or flux form) 306 312 CALL dyn_vor( kstp ) ! vorticity term including Coriolis
Note: See TracChangeset
for help on using the changeset viewer.