Changeset 2715 for trunk/NEMOGCM/NEMO/OPA_SRC/TRA
- Timestamp:
- 2011-03-30T17:58:35+02:00 (13 years ago)
- Location:
- trunk/NEMOGCM/NEMO/OPA_SRC/TRA
- Files:
-
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90
r2528 r2715 33 33 USE dom_oce ! ocean space and time domain 34 34 USE phycst ! physical constants 35 USE zdfddm ! vertical physics: double diffusion 35 36 USE in_out_manager ! I/O manager 36 USE zdfddm ! vertical physics: double diffusion37 USE lib_mpp ! MPP library 37 38 USE prtctl ! Print control 38 39 … … 107 108 !! References : Jackett and McDougall, J. Atmos. Ocean. Tech., 1994 108 109 !!---------------------------------------------------------------------- 109 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in ) :: pts ! 1 : potential temperature [Celcius] 110 ! ! 2 : salinity [psu] 111 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT( out) :: prd ! in situ density 110 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 111 USE wrk_nemo, ONLY: zws => wrk_3d_1 ! 3D workspace 112 !! 113 REAL(wp), DIMENSION(:,:,:,:), INTENT(in ) :: pts ! 1 : potential temperature [Celcius] 114 ! ! 2 : salinity [psu] 115 REAL(wp), DIMENSION(:,:,:) , INTENT( out) :: prd ! in situ density [-] 112 116 !! 113 117 INTEGER :: ji, jj, jk ! dummy loop indices 114 REAL(wp) :: zt , zs , zh , zsr ! temporary scalars 115 REAL(wp) :: zr1, zr2, zr3, zr4 ! - - 116 REAL(wp) :: zrhop, ze, zbw, zb ! - - 117 REAL(wp) :: zd , zc , zaw, za ! - - 118 REAL(wp) :: zb1, za1, zkw, zk0 ! - - 119 REAL(wp) :: zrau0r ! - - 120 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zws ! temporary workspace 121 !!---------------------------------------------------------------------- 118 REAL(wp) :: zt , zs , zh , zsr ! local scalars 119 REAL(wp) :: zr1, zr2, zr3, zr4 ! - - 120 REAL(wp) :: zrhop, ze, zbw, zb ! - - 121 REAL(wp) :: zd , zc , zaw, za ! - - 122 REAL(wp) :: zb1, za1, zkw, zk0 ! - - 123 REAL(wp) :: zrau0r ! - - 124 !!---------------------------------------------------------------------- 125 126 IF( wrk_in_use(3, 1) ) THEN 127 CALL ctl_stop('eos_insitu: requested workspace array unavailable') ; RETURN 128 ENDIF 122 129 123 130 SELECT CASE( nn_eos ) … … 183 190 ! 184 191 IF(ln_ctl) CALL prt_ctl( tab3d_1=prd, clinfo1=' eos : ', ovlap=1, kdim=jpk ) 192 ! 193 IF( wrk_not_released(3, 1) ) CALL ctl_stop('eos_insitu: failed to release workspace array') 185 194 ! 186 195 END SUBROUTINE eos_insitu … … 233 242 !! Brown and Campana, Mon. Weather Rev., 1978 234 243 !!---------------------------------------------------------------------- 235 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in ) :: pts ! 1 : potential temperature [Celcius] 236 ! ! 2 : salinity [psu] 237 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT( out) :: prd ! in situ density 244 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 245 USE wrk_nemo, ONLY: zws => wrk_3d_1 ! 3D workspace 246 !! 247 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in ) :: pts ! 1 : potential temperature [Celcius] 248 ! ! 2 : salinity [psu] 249 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT( out) :: prd ! in situ density [-] 238 250 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT( out) :: prhop ! potential density (surface referenced) 239 251 ! 240 252 INTEGER :: ji, jj, jk ! dummy loop indices 241 REAL(wp) :: zt, zs, zh, zsr, zr1, zr2, zr3, zr4, zrhop, ze, zbw ! temporary scalars 242 REAL(wp) :: zb, zd, zc, zaw, za, zb1, za1, zkw, zk0, zrau0r ! - - 243 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zws ! 3D workspace 244 !!---------------------------------------------------------------------- 253 REAL(wp) :: zt, zs, zh, zsr, zr1, zr2, zr3, zr4, zrhop, ze, zbw ! local scalars 254 REAL(wp) :: zb, zd, zc, zaw, za, zb1, za1, zkw, zk0, zrau0r ! - - 255 !!---------------------------------------------------------------------- 256 257 IF( wrk_in_use(3, 1) ) THEN 258 CALL ctl_stop('eos_insitu_pot: requested workspace array unavailable') ; RETURN 259 ENDIF 245 260 246 261 SELECT CASE ( nn_eos ) … … 311 326 ! 312 327 IF(ln_ctl) CALL prt_ctl( tab3d_1=prd, clinfo1=' eos-p: ', tab3d_2=prhop, clinfo2=' pot : ', ovlap=1, kdim=jpk ) 328 ! 329 IF( wrk_not_released(3, 1) ) CALL ctl_stop('eos_insitu_pot: failed to release workspace array') 313 330 ! 314 331 END SUBROUTINE eos_insitu_pot … … 351 368 !! References : Jackett and McDougall, J. Atmos. Ocean. Tech., 1994 352 369 !!---------------------------------------------------------------------- 370 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 371 USE wrk_nemo, ONLY: zws => wrk_2d_5 ! 2D workspace 372 !! 353 373 REAL(wp), DIMENSION(jpi,jpj,jpts), INTENT(in ) :: pts ! 1 : potential temperature [Celcius] 354 374 ! ! 2 : salinity [psu] … … 359 379 REAL(wp) :: zt, zs, zh, zsr, zr1, zr2, zr3, zr4, zrhop, ze, zbw ! temporary scalars 360 380 REAL(wp) :: zb, zd, zc, zaw, za, zb1, za1, zkw, zk0, zmask ! - - 361 REAL(wp), DIMENSION(jpi,jpj) :: zws ! 2D workspace 362 !!---------------------------------------------------------------------- 363 364 prd(:,:) = 0.e0 381 !!---------------------------------------------------------------------- 382 383 IF( wrk_in_use(2, 5) ) THEN 384 CALL ctl_stop('eos_insitu_2d: requested workspace array unavailable') ; RETURN 385 ENDIF 386 387 prd(:,:) = 0._wp 365 388 366 389 SELECT CASE( nn_eos ) … … 434 457 IF(ln_ctl) CALL prt_ctl( tab2d_1=prd, clinfo1=' eos2d: ' ) 435 458 ! 459 IF( wrk_not_released(2, 5) ) CALL ctl_stop('eos_insitu_2d: failed to release workspace array') 460 ! 436 461 END SUBROUTINE eos_insitu_2d 437 462 … … 469 494 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in ) :: pts ! 1 : potential temperature [Celcius] 470 495 ! ! 2 : salinity [psu] 471 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT( out) :: pn2 ! Brunt-Vaisala frequency[s-1]496 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT( out) :: pn2 ! Brunt-Vaisala frequency [s-1] 472 497 !! 473 498 INTEGER :: ji, jj, jk ! dummy loop indices 474 REAL(wp) :: zgde3w, zt, zs, zh, zalbet, zbeta ! temporaryscalars499 REAL(wp) :: zgde3w, zt, zs, zh, zalbet, zbeta ! local scalars 475 500 #if defined key_zdfddm 476 REAL(wp) :: zds ! temporaryscalars501 REAL(wp) :: zds ! local scalars 477 502 #endif 478 503 !!---------------------------------------------------------------------- … … 488 513 DO ji = 1, jpi 489 514 zgde3w = grav / fse3w(ji,jj,jk) 490 zt = 0.5 * ( pts(ji,jj,jk,jp_tem) + pts(ji,jj,jk-1,jp_tem) ) ! potential temperature at w-point491 zs = 0.5 * ( pts(ji,jj,jk,jp_sal) + pts(ji,jj,jk-1,jp_sal) ) - 35.0 ! salinity anomaly (s-35) at w-point492 zh = fsdepw(ji,jj,jk) ! depth in meters at w-point515 zt = 0.5 * ( pts(ji,jj,jk,jp_tem) + pts(ji,jj,jk-1,jp_tem) ) ! potential temperature at w-pt 516 zs = 0.5 * ( pts(ji,jj,jk,jp_sal) + pts(ji,jj,jk-1,jp_sal) ) - 35.0 ! salinity anomaly (s-35) at w-pt 517 zh = fsdepw(ji,jj,jk) ! depth in meters at w-point 493 518 ! 494 519 zalbet = ( ( ( - 0.255019e-07_wp * zt + 0.298357e-05_wp ) * zt & ! ratio alpha/beta … … 586 611 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in ) :: pts ! pot. temperature & salinity 587 612 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT( out) :: palph, pbeta ! thermal & haline expansion coeff. 588 ! !613 ! 589 614 INTEGER :: ji, jj, jk ! dummy loop indices 590 615 REAL(wp) :: zt, zs, zh ! local scalars … … 661 686 !!---------------------------------------------------------------------- 662 687 REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: psal ! salinity [psu] 688 ! Leave result array automatic rather than making explicitly allocated 663 689 REAL(wp), DIMENSION(jpi,jpj) :: ptf ! freezing temperature [Celcius] 664 690 !!---------------------------------------------------------------------- -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
r2561 r2715 24 24 USE ldftra_oce ! lateral diffusion coefficient on tracers 25 25 USE in_out_manager ! I/O manager 26 USE iom ! I/O module 26 27 USE prtctl ! Print control 27 USE iom28 USE lib_mpp ! MPP library 28 29 29 30 IMPLICIT NONE … … 32 33 PUBLIC tra_adv ! routine called by step module 33 34 PUBLIC tra_adv_init ! routine called by opa module 34 35 35 36 ! !!* Namelist namtra_adv * 36 37 LOGICAL :: ln_traadv_cen2 = .TRUE. ! 2nd order centered scheme flag … … 43 44 INTEGER :: nadv ! choice of the type of advection scheme 44 45 45 REAL(wp), DIMENSION(jpk) :: r2dt ! vertical profile time-step, = 2 rdttra except at nit000 (=rdttra) if neuler=046 47 46 !! * Substitutions 48 47 # include "domzgr_substitute.h90" … … 63 62 !! ** Method : - Update (ua,va) with the advection term following nadv 64 63 !!---------------------------------------------------------------------- 64 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 65 USE wrk_nemo, ONLY: zun => wrk_3d_1 , zvn => wrk_3d_2 , zwn => wrk_3d_3 ! 3D workspace 66 ! 65 67 INTEGER, INTENT( in ) :: kt ! ocean time-step index 66 68 ! 67 69 INTEGER :: jk ! dummy loop index 68 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zun, zvn, zwn ! 3D workspace: effective transport 69 !!---------------------------------------------------------------------- 70 !!---------------------------------------------------------------------- 71 ! 72 IF( wrk_in_use(3, 1,2,3) ) THEN 73 CALL ctl_stop('tra_adv: requested workspace arrays unavailable') ; RETURN 74 ENDIF 70 75 ! ! set time step 71 76 IF( neuler == 0 .AND. kt == nit000 ) THEN ! at nit000 72 r2dt (:) = rdttra(:) ! = rdtra (restarting with Euler time stepping)77 r2dtra(:) = rdttra(:) ! = rdtra (restarting with Euler time stepping) 73 78 ELSEIF( kt <= nit000 + 1) THEN ! at nit000 or nit000+1 74 r2dt (:) = 2. * rdttra(:)! = 2 rdttra (leapfrog)79 r2dtra(:) = 2._wp * rdttra(:) ! = 2 rdttra (leapfrog) 75 80 ENDIF 76 81 ! … … 95 100 96 101 SELECT CASE ( nadv ) !== compute advection trend and add it to general trend ==! 97 CASE ( 1 ) ; CALL tra_adv_cen2 ( kt, 'TRA', zun, zvn, zwn, tsb, tsn, tsa, jpts ) ! 2nd order centered98 CASE ( 2 ) ; CALL tra_adv_tvd ( kt, 'TRA', r2dt , zun, zvn, zwn, tsb, tsn, tsa, jpts ) ! TVD99 CASE ( 3 ) ; CALL tra_adv_muscl ( kt, 'TRA', r2dt , zun, zvn, zwn, tsb, tsa, jpts ) ! MUSCL100 CASE ( 4 ) ; CALL tra_adv_muscl2( kt, 'TRA', r2dt , zun, zvn, zwn, tsb, tsn, tsa, jpts ) ! MUSCL2101 CASE ( 5 ) ; CALL tra_adv_ubs ( kt, 'TRA', r2dt , zun, zvn, zwn, tsb, tsn, tsa, jpts ) ! UBS102 CASE ( 6 ) ; CALL tra_adv_qck ( kt, 'TRA', r2dt , zun, zvn, zwn, tsb, tsn, tsa, jpts ) ! QUICKEST102 CASE ( 1 ) ; CALL tra_adv_cen2 ( kt, 'TRA', zun, zvn, zwn, tsb, tsn, tsa, jpts ) ! 2nd order centered 103 CASE ( 2 ) ; CALL tra_adv_tvd ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts ) ! TVD 104 CASE ( 3 ) ; CALL tra_adv_muscl ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsa, jpts ) ! MUSCL 105 CASE ( 4 ) ; CALL tra_adv_muscl2( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts ) ! MUSCL2 106 CASE ( 5 ) ; CALL tra_adv_ubs ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts ) ! UBS 107 CASE ( 6 ) ; CALL tra_adv_qck ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts ) ! QUICKEST 103 108 ! 104 109 CASE (-1 ) !== esopa: test all possibility with control print ==! 105 CALL tra_adv_cen2 ( kt, 'TRA', zun, zvn, zwn, tsb, tsn, tsa, jpts )110 CALL tra_adv_cen2 ( kt, 'TRA', zun, zvn, zwn, tsb, tsn, tsa, jpts ) 106 111 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv0 - Ta: ', mask1=tmask, & 107 112 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 108 CALL tra_adv_tvd ( kt, 'TRA', r2dt , zun, zvn, zwn, tsb, tsn, tsa, jpts )113 CALL tra_adv_tvd ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts ) 109 114 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv1 - Ta: ', mask1=tmask, & 110 115 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 111 CALL tra_adv_muscl ( kt, 'TRA', r2dt , zun, zvn, zwn, tsb, tsa, jpts )116 CALL tra_adv_muscl ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsa, jpts ) 112 117 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv3 - Ta: ', mask1=tmask, & 113 118 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 114 CALL tra_adv_muscl2( kt, 'TRA', r2dt , zun, zvn, zwn, tsb, tsn, tsa, jpts )119 CALL tra_adv_muscl2( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts ) 115 120 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv4 - Ta: ', mask1=tmask, & 116 121 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 117 CALL tra_adv_ubs ( kt, 'TRA', r2dt , zun, zvn, zwn, tsb, tsn, tsa, jpts )122 CALL tra_adv_ubs ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts ) 118 123 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv5 - Ta: ', mask1=tmask, & 119 124 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 120 CALL tra_adv_qck ( kt, 'TRA', r2dt , zun, zvn, zwn, tsb, tsn, tsa, jpts )125 CALL tra_adv_qck ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts ) 121 126 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv6 - Ta: ', mask1=tmask, & 122 127 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) … … 126 131 IF(ln_ctl) CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv - Ta: ', mask1=tmask, & 127 132 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 133 ! 134 IF( wrk_not_released(3,1,2,3) ) CALL ctl_stop('tra_adv: failed to release workspace arrays') 128 135 ! 129 136 END SUBROUTINE tra_adv … … 144 151 !!---------------------------------------------------------------------- 145 152 146 REWIND ( numnam )! Read Namelist namtra_adv : tracer advection scheme147 READ 153 REWIND( numnam ) ! Read Namelist namtra_adv : tracer advection scheme 154 READ ( numnam, namtra_adv ) 148 155 149 156 IF(lwp) THEN ! Namelist print -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen2.F90
r2528 r2715 31 31 USE restart ! ocean restart 32 32 USE trc_oce ! share passive tracers/Ocean variables 33 USE lib_mpp ! MPP library 33 34 34 35 IMPLICIT NONE 35 36 PRIVATE 36 37 37 PUBLIC tra_adv_cen2 ! routine called by step.F9038 PUBLIC ups_orca_set ! routine used by traadv_cen2_jki.F9038 PUBLIC tra_adv_cen2 ! routine called by step.F90 39 PUBLIC ups_orca_set ! routine used by traadv_cen2_jki.F90 39 40 40 41 LOGICAL :: l_trd ! flag to compute trends 41 42 42 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: upsmsk!: mixed upstream/centered scheme near some straits43 ! ! and in closed seas (orca 2 and 4 configurations)43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: upsmsk !: mixed upstream/centered scheme near some straits 44 ! ! and in closed seas (orca 2 and 4 configurations) 44 45 !! * Substitutions 45 46 # include "domzgr_substitute.h90" … … 109 110 !! - save trends if needed 110 111 !!---------------------------------------------------------------------- 111 USE oce , zwx => ua ! use ua as workspace 112 USE oce , zwy => va ! use va as workspace 113 !! 112 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 113 USE oce , ONLY: zwx => ua , zwy => va ! (ua,va) used as 3D workspace 114 USE wrk_nemo, ONLY: zwz => wrk_3d_1 , zind => wrk_3d_2 ! 3D workspace 115 USE wrk_nemo, ONLY: ztfreez => wrk_2d_1 ! 2D - 116 ! 114 117 INTEGER , INTENT(in ) :: kt ! ocean time-step index 115 118 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 118 121 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields 119 122 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 120 !! 121 INTEGER :: ji, jj, jk, jn ! dummy loop indices 122 REAL(wp) :: zbtr, ztra ! temporary scalars 123 REAL(wp) :: zfp_ui, zfp_vj, zfp_w ! - - 124 REAL(wp) :: zfm_ui, zfm_vj, zfm_w ! - - 125 REAL(wp) :: zcofi , zcofj , zcofk ! - - 126 REAL(wp) :: zupsut, zcenut ! - - 127 REAL(wp) :: zupsvt, zcenvt ! - - 128 REAL(wp) :: zupst , zcent ! - - 129 REAL(wp) :: zice ! - - 130 REAL(wp), DIMENSION(jpi,jpj) :: ztfreez ! 2D workspace 131 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwz, zind ! 3D workspace 132 !!---------------------------------------------------------------------- 133 123 ! 124 INTEGER :: ji, jj, jk, jn ! dummy loop indices 125 INTEGER :: ierr ! local integer 126 REAL(wp) :: zbtr, ztra ! local scalars 127 REAL(wp) :: zfp_ui, zfp_vj, zfp_w, zcofi ! - - 128 REAL(wp) :: zfm_ui, zfm_vj, zfm_w, zcofj, zcofk ! - - 129 REAL(wp) :: zupsut, zcenut, zupst ! - - 130 REAL(wp) :: zupsvt, zcenvt, zcent, zice ! - - 131 !!---------------------------------------------------------------------- 132 133 IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 1,2) ) THEN 134 CALL ctl_stop('tra_adv_cen2: requested workspace arrays unavailable') ; RETURN 135 ENDIF 134 136 135 137 IF( kt == nit000 ) THEN … … 139 141 IF(lwp) WRITE(numout,*) 140 142 ! 141 upsmsk(:,:) = 0.e0 ! not upstream by default 143 ALLOCATE( upsmsk(jpi,jpj), STAT=ierr ) 144 IF( ierr /= 0 ) CALL ctl_stop('STOP', 'tra_adv_cen2: unable to allocate array') 145 ! 146 upsmsk(:,:) = 0._wp ! not upstream by default 142 147 ! 143 148 IF( cp_cfg == "orca" ) CALL ups_orca_set ! set mixed Upstream/centered scheme near some straits … … 151 156 ! 152 157 l_trd = .FALSE. 153 IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) ) l_trd = .TRUE.158 IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) ) l_trd = .TRUE. 154 159 ENDIF 155 160 ! … … 269 274 CALL iom_rstput( kt, nitrst, numrow, 'avtb', avtb ) 270 275 ENDIF 276 ! 277 IF( wrk_not_released(2, 1) .OR. & 278 wrk_not_released(3, 1,2) ) CALL ctl_stop('tra_adv_cen2: failed to release workspace arrays') 271 279 ! 272 280 END SUBROUTINE tra_adv_cen2 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_eiv.F90
r2528 r2715 25 25 USE phycst ! physical constants 26 26 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 27 USE diaar5, ONLY 27 USE diaar5, ONLY: lk_diaar5 28 28 # endif 29 29 … … 41 41 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 42 42 !! $Id$ 43 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 44 !!---------------------------------------------------------------------- 45 43 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 44 !!---------------------------------------------------------------------- 46 45 CONTAINS 47 46 … … 64 63 !! ** Action : - add to p.n the eiv component 65 64 !!---------------------------------------------------------------------- 65 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 66 USE wrk_nemo, ONLY: zu_eiv => wrk_2d_1 , zv_eiv => wrk_2d_2 , zw_eiv => wrk_2d_3 ! 2D workspace 67 # if defined key_diaeiv 68 USE wrk_nemo, ONLY: z2d => wrk_2d_4 ! 2D workspace 69 #endif 66 70 INTEGER , INTENT(in ) :: kt ! ocean time-step index 67 71 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 73 77 REAL(wp) :: zuwk, zuwk1, zuwi, zuwi1 ! local scalars 74 78 REAL(wp) :: zvwk, zvwk1, zvwj, zvwj1 ! - - 75 REAL(wp), DIMENSION(jpi,jpj) :: zu_eiv, zv_eiv, zw_eiv ! 2D workspace76 79 # if defined key_diaeiv 77 80 REAL(wp) :: zztmp ! local scalar 78 REAL(wp), DIMENSION(jpi,jpj) :: z2d ! 2D workspace79 81 # endif 80 82 !!---------------------------------------------------------------------- 83 84 # if defined key_diaeiv 85 IF( wrk_in_use(2, 1,2,3,4) ) THEN 86 # else 87 IF( wrk_in_use(2, 1,2,3) ) THEN 88 # endif 89 CALL ctl_stop('tra_adv_eiv: requested workspace arrays are unavailable') ; RETURN 90 ENDIF 81 91 82 92 IF( kt == nit000 ) THEN … … 180 190 # endif 181 191 ! 192 # if defined key_diaeiv 193 IF( wrk_not_released(2, 1,2,3,4) ) CALL ctl_stop('tra_adv_eiv: failed to release workspace arrays') 194 # else 195 IF( wrk_not_released(2, 1,2,3) ) CALL ctl_stop('tra_adv_eiv: failed to release workspace arrays') 196 # endif 197 ! 182 198 END SUBROUTINE tra_adv_eiv 183 199 … … 191 207 CHARACTER(len=3) :: cdtype 192 208 REAL, DIMENSION(:,:,:) :: pun, pvn, pwn 193 WRITE(*,*) 'tra_adv_eiv: You should not have seen this print! error?', kt, cdtype 194 WRITE(*,*) 'tra_adv_eiv: You should not have seen this print! error?', pun(1,1,1), pvn(1,1,1), pwn(1,1,1) 209 WRITE(*,*) 'tra_adv_eiv: You should not have seen this print! error?', kt, cdtype, pun(1,1,1), pvn(1,1,1), pwn(1,1,1) 195 210 END SUBROUTINE tra_adv_eiv 196 211 #endif -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90
r2528 r2715 61 61 !! IPSL, Sept. 2000 (http://www.lodyc.jussieu.fr/opa) 62 62 !!---------------------------------------------------------------------- 63 USE oce , zwx => ua ! use ua as workspace 64 USE oce , zwy => va ! use va as workspace 65 !! 63 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 64 USE oce , ONLY: zwx => ua , zwy => va ! (ua,va) used as workspace 65 USE wrk_nemo, ONLY: zslpx => wrk_3d_1 , zslpy => wrk_3d_2 ! 3D workspace 66 ! 66 67 INTEGER , INTENT(in ) :: kt ! ocean time-step index 67 68 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 71 72 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before tracer field 72 73 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 73 ! !74 ! 74 75 INTEGER :: ji, jj, jk, jn ! dummy loop indices 75 REAL(wp) :: zu, z0u, zzwx ! local scalar 76 REAL(wp) :: zv, z0v, zzwy ! - - 77 REAL(wp) :: zw, z0w ! - - 78 REAL(wp) :: ztra, zbtr, zdt, zalpha 79 REAL(wp), DIMENSION (jpi,jpj,jpk) :: zslpx, zslpy ! 3D workspace 76 REAL(wp) :: zu, z0u, zzwx, zw ! local scalars 77 REAL(wp) :: zv, z0v, zzwy, z0w ! - - 78 REAL(wp) :: ztra, zbtr, zdt, zalpha ! - - 80 79 !!---------------------------------------------------------------------- 80 81 IF( wrk_in_use(3, 1,2) ) THEN 82 CALL ctl_stop('tra_adv_muscl: requested workspace arrays unavailable') ; RETURN 83 ENDIF 81 84 82 85 IF( kt == nit000 ) THEN … … 249 252 ENDDO 250 253 ! 254 IF( wrk_not_released(3, 1,2) ) CALL ctl_stop('tra_adv_muscl: requested workspace arrays unavailable') 255 ! 251 256 END SUBROUTINE tra_adv_muscl 252 257 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl2.F90
r2528 r2715 1 1 MODULE traadv_muscl2 2 !!====================================================================== ========2 !!====================================================================== 3 3 !! *** MODULE traadv_muscl2 *** 4 4 !! Ocean tracers: horizontal & vertical advective trend 5 !!====================================================================== ========5 !!====================================================================== 6 6 !! History : 1.0 ! 2002-06 (G. Madec) from traadv_muscl 7 7 !! 3.2 ! 2010-05 (C. Ethe, G. Madec) merge TRC-TRA + switch from velocity to transport … … 59 59 !! IPSL, Sept. 2000 (http://www.lodyc.jussieu.fr/opa) 60 60 !!---------------------------------------------------------------------- 61 USE oce , zwx => ua ! use ua as workspace 62 USE oce , zwy => va ! use va as workspace 61 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 62 USE oce , ONLY: zwx => ua , zwy => va ! (ua,va) used as 3D workspace 63 USE wrk_nemo, ONLY: zslpx => wrk_3d_1 , zslpy => wrk_3d_2 ! 3D workspace 63 64 !! 64 65 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 71 72 !! 72 73 INTEGER :: ji, jj, jk, jn ! dummy loop indices 73 REAL(wp) :: zu, z0u, zzwx ! local scalar 74 REAL(wp) :: zv, z0v, zzwy ! - - 75 REAL(wp) :: zw, z0w ! - - 76 REAL(wp) :: ztra, zbtr, zdt, zalpha 77 REAL(wp), DIMENSION (jpi,jpj,jpk) :: zslpx, zslpy ! 3D workspace 74 REAL(wp) :: zu, z0u, zzwx, zw ! local scalars 75 REAL(wp) :: zv, z0v, zzwy, z0w ! - - 76 REAL(wp) :: ztra, zbtr, zdt, zalpha ! - - 78 77 !!---------------------------------------------------------------------- 78 79 IF( wrk_in_use(3, 1,2) ) THEN 80 CALL ctl_stop('tra_adv_muscl2: requested workspace arrays are unavailable') ; RETURN 81 ENDIF 79 82 80 83 IF( kt == nit000 ) THEN … … 84 87 ! 85 88 l_trd = .FALSE. 86 IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) ) l_trd = .TRUE.89 IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) ) l_trd = .TRUE. 87 90 ENDIF 88 91 … … 282 285 END DO 283 286 ! 287 IF( wrk_not_released(3, 1,2) ) CALL ctl_stop('tra_adv_muscl2: failed to release workspace arrays') 288 ! 284 289 END SUBROUTINE tra_adv_muscl2 285 290 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90
r2528 r2715 115 115 !! 116 116 !!---------------------------------------------------------------------- 117 USE oce , zwx => ua ! use ua as workspace118 !!119 INTEGER , INTENT(in ) :: kt ! ocean time-step index120 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator)121 INTEGER , INTENT(in ) :: k jpt ! number of tracers122 REAL(wp), DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile of tracer time-step123 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pun ! i-velocity components124 REAL(wp), DIMENSION( jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields125 REAL(wp), DIMENSION(jpi,jpj,jpk ,kjpt), INTENT(inout) :: pta ! tracer trend126 !!127 INTEGER :: ji, jj, jk, jn ! dummy loop indices128 REAL(wp) :: ztra, zbtr ! local scalars129 REAL(wp) :: zdir, zdx, zdt, zmsk ! local scalars130 REAL(wp) , DIMENSION(jpi,jpj,jpk) :: zfu, zfc, zfd ! 3D wokspace117 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 118 USE oce , ONLY: zwx => ua ! ua used as workspace 119 USE wrk_nemo, ONLY: zfu => wrk_3d_1 , zfc => wrk_3d_2, zfd => wrk_3d_3 ! 3D workspace 120 ! 121 INTEGER , INTENT(in ) :: kt ! ocean time-step index 122 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 123 INTEGER , INTENT(in ) :: kjpt ! number of tracers 124 REAL(wp), DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile of tracer time-step 125 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pun ! i-velocity components 126 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields 127 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 128 !! 129 INTEGER :: ji, jj, jk, jn ! dummy loop indices 130 REAL(wp) :: ztra, zbtr, zdir, zdx, zdt, zmsk ! local scalars 131 131 !---------------------------------------------------------------------- 132 132 ! 133 IF( wrk_in_use(3, 1,2,3) ) THEN 134 CALL ctl_stop('tra_adv_qck_i: requested workspace arrays unavailable') ; RETURN 135 ENDIF 133 136 ! ! =========== 134 137 DO jn = 1, kjpt ! tracer loop … … 188 191 DO ji = fs_2, fs_jpim1 ! vector opt. 189 192 zfu(ji,jj,jk) = tmask(ji-1,jj,jk) + tmask(ji,jj,jk) + tmask(ji+1,jj,jk) - 2. 190 END DO193 END DO 191 194 END DO 192 195 END DO … … 225 228 END DO 226 229 ! 230 IF( wrk_not_released(3, 1,2,3) ) CALL ctl_stop('tra_adv_qck_i: failed to release workspace arrays') 231 ! 227 232 END SUBROUTINE tra_adv_qck_i 228 233 … … 233 238 !! 234 239 !!---------------------------------------------------------------------- 235 USE oce , zwy => ua ! use ua as workspace236 !!237 INTEGER , INTENT(in ) :: kt ! ocean time-step index238 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator)239 INTEGER , INTENT(in ) :: k jpt ! number of tracers240 REAL(wp), DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile of tracer time-step241 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pvn ! j-velocity components242 REAL(wp), DIMENSION( jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields243 REAL(wp), DIMENSION(jpi,jpj,jpk ,kjpt), INTENT(inout) :: pta ! tracer trend244 !!245 INTEGER :: ji, jj, jk, jn ! dummy loop indices246 REAL(wp) :: ztra, zbtr ! local scalars247 REAL(wp) :: zdir, zdx, zdt, zmsk ! local scalars248 REAL(wp) , DIMENSION(jpi,jpj,jpk) :: zfu, zfc, zfd ! 3D wokspace240 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 241 USE oce , ONLY: zwy => ua ! ua used as workspace 242 USE wrk_nemo, ONLY: zfu => wrk_3d_1 , zfc => wrk_3d_2, zfd => wrk_3d_3 ! 3D workspace 243 ! 244 INTEGER , INTENT(in ) :: kt ! ocean time-step index 245 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 246 INTEGER , INTENT(in ) :: kjpt ! number of tracers 247 REAL(wp), DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile of tracer time-step 248 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pvn ! j-velocity components 249 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields 250 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 251 !! 252 INTEGER :: ji, jj, jk, jn ! dummy loop indices 253 REAL(wp) :: ztra, zbtr, zdir, zdx, zdt, zmsk ! local scalars 249 254 !---------------------------------------------------------------------- 250 255 ! 256 IF(wrk_in_use(3, 1,2,3))THEN 257 CALL ctl_stop('tra_adv_qck_j: ERROR: requested workspace arrays unavailable') 258 RETURN 259 END IF 251 260 ! ! =========== 252 261 DO jn = 1, kjpt ! tracer loop … … 350 359 END DO 351 360 ! 361 IF( wrk_not_released(3, 1,2,3) ) CALL ctl_stop('tra_adv_qck_j: failed to release workspace arrays') 362 ! 352 363 END SUBROUTINE tra_adv_qck_j 353 364 … … 358 369 !! 359 370 !!---------------------------------------------------------------------- 360 USE oce , zwz => ua ! use uaas workspace361 ! !362 INTEGER , INTENT(in ) :: kt 363 CHARACTER(len=3) , INTENT(in ) :: cdtype 364 INTEGER , INTENT(in ) :: kjpt 365 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pwn 366 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptn 367 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta 368 ! !371 USE oce, ONLY: zwz => ua ! ua used as workspace 372 ! 373 INTEGER , INTENT(in ) :: kt ! ocean time-step index 374 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 375 INTEGER , INTENT(in ) :: kjpt ! number of tracers 376 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pwn ! vertical velocity 377 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptn ! before and now tracer fields 378 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 379 ! 369 380 INTEGER :: ji, jj, jk, jn ! dummy loop indices 370 REAL(wp) :: zbtr , ztra ! temporaryscalars381 REAL(wp) :: zbtr , ztra ! local scalars 371 382 !!---------------------------------------------------------------------- 372 383 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90
r2528 r2715 25 25 USE dom_oce ! ocean space and time domain 26 26 USE trdmod_oce ! tracers trends 27 USE trdtra ! tracers trends27 USE trdtra ! tracers trends 28 28 USE in_out_manager ! I/O manager 29 29 USE dynspg_oce ! choice/control of key cpp for surface pressure gradient 30 USE lib_mpp 30 USE lib_mpp ! MPP library 31 31 USE lbclnk ! ocean lateral boundary condition (or mpp link) 32 32 USE diaptr ! poleward transport diagnostics … … 39 39 PUBLIC tra_adv_tvd ! routine called by step.F90 40 40 41 LOGICAL :: l_trd! flag to compute trends41 LOGICAL :: l_trd ! flag to compute trends 42 42 43 43 !! * Substitutions … … 66 66 !! - save the trends 67 67 !!---------------------------------------------------------------------- 68 USE oce , zwx => ua ! use ua as workspace 69 USE oce , zwy => va ! use va as workspace 70 !! 68 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 69 USE oce , ONLY: zwx => ua , zwy => va ! (ua,va) used as workspace 70 USE wrk_nemo, ONLY: zwi => wrk_3d_12 , zwz => wrk_3d_13 ! 3D workspace 71 ! 71 72 INTEGER , INTENT(in ) :: kt ! ocean time-step index 72 73 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 76 77 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields 77 78 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 78 ! !79 ! 79 80 INTEGER :: ji, jj, jk, jn ! dummy loop indices 80 81 REAL(wp) :: z2dtt, zbtr, ztra ! local scalar 81 82 REAL(wp) :: zfp_ui, zfp_vj, zfp_wk ! - - 82 83 REAL(wp) :: zfm_ui, zfm_vj, zfm_wk ! - - 83 REAL(wp), DIMENSION (jpi,jpj,jpk) :: zwi, zwz ! 3D workspace84 84 REAL(wp), DIMENSION (:,:,:), ALLOCATABLE :: ztrdx, ztrdy, ztrdz 85 85 !!---------------------------------------------------------------------- 86 87 IF( wrk_in_use(3, 12,13) ) THEN 88 CALL ctl_stop('tra_adv_tvd: requested workspace arrays unavailable') ; RETURN 89 ENDIF 86 90 87 91 IF( kt == nit000 ) THEN … … 235 239 ENDIF 236 240 ! 237 END DO241 END DO 238 242 ! 239 243 IF( l_trd ) THEN 240 244 DEALLOCATE( ztrdx ) ; DEALLOCATE( ztrdy ) ; DEALLOCATE( ztrdz ) 241 245 END IF 246 ! 247 IF( wrk_not_released(3, 12,13) ) CALL ctl_stop('tra_adv_tvd: failed to release workspace arrays') 242 248 ! 243 249 END SUBROUTINE tra_adv_tvd … … 257 263 !! in-space based differencing for fluid 258 264 !!---------------------------------------------------------------------- 265 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 266 USE wrk_nemo, ONLY: zbetup => wrk_3d_8 , zbetdo => wrk_3d_9 ! 3D workspace 267 USE wrk_nemo, ONLY: zbup => wrk_3d_10 , zbdo => wrk_3d_11 ! - - 268 ! 259 269 REAL(wp), DIMENSION(jpk) , INTENT(in ) :: p2dt ! vertical profile of tracer time-step 260 270 REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(in ) :: pbef, paft ! before & after field 261 271 REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(inout) :: paa, pbb, pcc ! monotonic fluxes in the 3 directions 262 !! 263 INTEGER :: ji, jj, jk ! dummy loop indices 264 INTEGER :: ikm1 265 REAL(wp), DIMENSION (jpi,jpj,jpk) :: zbetup, zbetdo 266 REAL(wp), DIMENSION (jpi,jpj,jpk) :: zbup, zbdo 267 REAL(wp) :: zpos, zneg, zbt, za, zb, zc, zbig, zrtrn, z2dtt 268 REAL(wp) :: zau, zbu, zcu, zav, zbv, zcv 269 REAL(wp) :: zup, zdo 270 !!---------------------------------------------------------------------- 271 272 zbig = 1.e+40 273 zrtrn = 1.e-15 274 zbetup(:,:,jpk) = 0.e0 ; zbetdo(:,:,jpk) = 0.e0 272 ! 273 INTEGER :: ji, jj, jk ! dummy loop indices 274 INTEGER :: ikm1 ! local integer 275 REAL(wp) :: zpos, zneg, zbt, za, zb, zc, zbig, zrtrn, z2dtt ! local scalars 276 REAL(wp) :: zau, zbu, zcu, zav, zbv, zcv, zup, zdo ! - - 277 !!---------------------------------------------------------------------- 278 279 IF( wrk_in_use(3, 8,9,10,11) ) THEN 280 CALL ctl_stop('nonosc: requested workspace array unavailable') ; RETURN 281 ENDIF 282 283 zbig = 1.e+40_wp 284 zrtrn = 1.e-15_wp 285 zbetup(:,:,jpk) = 0._wp ; zbetdo(:,:,jpk) = 0._wp 275 286 276 287 … … 348 359 CALL lbc_lnk( paa, 'U', -1. ) ; CALL lbc_lnk( pbb, 'V', -1. ) ! lateral boundary condition (changed sign) 349 360 ! 361 IF( wrk_not_released(3, 8,9,10,11) ) CALL ctl_stop('nonosc: failed to release workspace arrays') 362 ! 350 363 END SUBROUTINE nonosc 351 364 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90
r2528 r2715 73 73 !! Farrow, D.E., Stevens, D.P., 1995, J. Phys. Ocean. 25, 1731Ð1741. 74 74 !!---------------------------------------------------------------------- 75 USE oce , zwx => ua ! use ua as workspace 76 USE oce , zwy => va ! use va as workspace 77 !! 75 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 76 USE oce , ONLY: zwx => ua , zwy => va ! (ua,va) used as workspace 77 USE wrk_nemo, ONLY: ztu => wrk_3d_1 , ztv => wrk_3d_2 ! 3D workspace 78 USE wrk_nemo, ONLY: zltu => wrk_3d_3 , zltv => wrk_3d_4 ! - - 79 USE wrk_nemo, ONLY: zti => wrk_3d_5 , ztw => wrk_3d_6 ! - - 80 ! 78 81 INTEGER , INTENT(in ) :: kt ! ocean time-step index 79 82 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 83 86 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields 84 87 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 85 !! 86 INTEGER :: ji, jj, jk, jn ! dummy loop indices 87 REAL(wp) :: ztra, zbtr, zcoef ! local scalars 88 REAL(wp) :: zfp_ui, zfm_ui, zcenut ! - - 89 REAL(wp) :: zfp_vj, zfm_vj, zcenvt ! - - 90 REAL(wp) :: z2dtt ! - - 91 REAL(wp) :: ztak, zfp_wk, zfm_wk ! - - 92 REAL(wp) :: zeeu, zeev, z_hdivn ! - - 93 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztu, ztv, zltu , zltv ! 3D workspace 94 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zti, ztw ! - - 95 !!---------------------------------------------------------------------- 88 ! 89 INTEGER :: ji, jj, jk, jn ! dummy loop indices 90 REAL(wp) :: ztra, zbtr, zcoef, z2dtt ! local scalars 91 REAL(wp) :: zfp_ui, zfm_ui, zcenut, ztak, zfp_wk, zfm_wk ! - - 92 REAL(wp) :: zfp_vj, zfm_vj, zcenvt, zeeu, zeev, z_hdivn ! - - 93 !!---------------------------------------------------------------------- 94 95 IF( wrk_in_use(3, 1,2,3,4,5,6) )THEN 96 CALL ctl_stop('tra_adv_ubs: requested workspace arrays unavailable') ; RETURN 97 ENDIF 96 98 97 99 IF( kt == nit000 ) THEN … … 266 268 ENDDO 267 269 ! 270 IF( wrk_not_released(3, 1,2,3,4,5,6) ) CALL ctl_stop('tra_adv_ubs: failed to release workspace arrays') 271 ! 268 272 END SUBROUTINE tra_adv_ubs 269 273 … … 282 286 !! in-space based differencing for fluid 283 287 !!---------------------------------------------------------------------- 288 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 289 USE wrk_nemo, ONLY: zbetup => wrk_3d_1, zbetdo => wrk_3d_2 ! 3D workspace 290 ! 284 291 REAL(wp), INTENT(in ), DIMENSION(jpk) :: p2dt ! vertical profile of tracer time-step 285 292 REAL(wp), DIMENSION (jpi,jpj,jpk) :: pbef ! before field 286 293 REAL(wp), INTENT(inout), DIMENSION (jpi,jpj,jpk) :: paft ! after field 287 294 REAL(wp), INTENT(inout), DIMENSION (jpi,jpj,jpk) :: pcc ! monotonic flux in the k direction 288 !! 289 INTEGER :: ji, jj, jk ! dummy loop indices 290 INTEGER :: ikm1 291 REAL(wp) :: zpos, zneg, zbt, za, zb, zc, zbig, zrtrn, z2dtt 292 REAL(wp), DIMENSION (jpi,jpj,jpk) :: zbetup, zbetdo 293 !!---------------------------------------------------------------------- 294 295 zbig = 1.e+40 296 zrtrn = 1.e-15 297 zbetup(:,:,:) = 0.e0 ; zbetdo(:,:,:) = 0.e0 295 ! 296 INTEGER :: ji, jj, jk ! dummy loop indices 297 INTEGER :: ikm1 ! local integer 298 REAL(wp) :: zpos, zneg, zbt, za, zb, zc, zbig, zrtrn, z2dtt ! local scalars 299 !!---------------------------------------------------------------------- 300 301 IF( wrk_in_use(3, 1,2) ) THEN 302 CALL ctl_stop('nonosc_z: requested workspace arrays unavailable') ; RETURN 303 ENDIF 304 305 zbig = 1.e+40_wp 306 zrtrn = 1.e-15_wp 307 zbetup(:,:,:) = 0._wp ; zbetdo(:,:,:) = 0._wp 298 308 299 309 ! Search local extrema … … 363 373 END DO 364 374 ! 375 IF( wrk_not_released(3, 1,2) ) CALL ctl_stop('nonosc_z: failed to release workspace arrays') 376 ! 365 377 END SUBROUTINE nonosc_z 366 378 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trabbc.F90
r2528 r2715 67 67 !! Emile-Geay and Madec, 2009, Ocean Science. 68 68 !!---------------------------------------------------------------------- 69 INTEGER, INTENT( in) :: kt ! ocean time-step index69 INTEGER, INTENT(in) :: kt ! ocean time-step index 70 70 !! 71 71 INTEGER :: ji, jj, ik ! dummy loop indices 72 72 REAL(wp) :: zqgh_trd ! geothermal heat flux trend 73 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdt73 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdt 74 74 !!---------------------------------------------------------------------- 75 75 ! -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90
r2528 r2715 17 17 !! 'key_trabbl' or bottom boundary layer 18 18 !!---------------------------------------------------------------------- 19 !! tra_bbl_alloc : allocate trabbl arrays 19 20 !! tra_bbl : update the tracer trends due to the bottom boundary layer (advective and/or diffusive) 20 21 !! tra_bbl_dif : generic routine to compute bbl diffusive trend … … 53 54 REAL(wp), PUBLIC :: rn_gambbl = 10.0_wp !: lateral coeff. for bottom boundary layer scheme [s] 54 55 55 REAL(wp), DIMENSION(jpi,jpj), PUBLIC :: utr_bbl , vtr_bbl ! u- (v-) transport in the bottom boundary layer 56 REAL(wp), DIMENSION(jpi,jpj), PUBLIC :: ahu_bbl , ahv_bbl ! masked diffusive bbl coefficients at u and v-points 57 58 INTEGER , DIMENSION(jpi,jpj) :: mbku_d , mbkv_d ! vertical index of the "lower" bottom ocean U/V-level 59 INTEGER , DIMENSION(jpi,jpj) :: mgrhu , mgrhv ! = +/-1, sign of grad(H) in u-(v-)direction 60 REAL(wp), DIMENSION(jpi,jpj) :: ahu_bbl_0, ahv_bbl_0 ! diffusive bbl flux coefficients at u and v-points 61 REAL(wp), DIMENSION(jpi,jpj) :: e3u_bbl_0, e3v_bbl_0 ! thichness of the bbl (e3) at u and v-points 62 REAL(wp), DIMENSION(jpi,jpj) :: e1e2t_r ! thichness of the bbl (e3) at u and v-points 63 LOGICAL, PUBLIC :: l_bbl !: flag to compute bbl diffu. flux coef and transport 56 LOGICAL , PUBLIC :: l_bbl !: flag to compute bbl diffu. flux coef and transport 57 58 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC :: utr_bbl , vtr_bbl ! u- (v-) transport in the bottom boundary layer 59 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC :: ahu_bbl , ahv_bbl ! masked diffusive bbl coeff. at u & v-pts 60 61 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: mbku_d , mbkv_d ! vertical index of the "lower" bottom ocean U/V-level 62 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: mgrhu , mgrhv ! = +/-1, sign of grad(H) in u-(v-)direction 63 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ahu_bbl_0, ahv_bbl_0 ! diffusive bbl flux coefficients at u and v-points 64 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: e3u_bbl_0, e3v_bbl_0 ! thichness of the bbl (e3) at u and v-points 65 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: r1_e1e2t ! inverse of the cell surface at t-point [1/m2] 64 66 65 67 !! * Substitutions … … 72 74 !!---------------------------------------------------------------------- 73 75 CONTAINS 76 77 INTEGER FUNCTION tra_bbl_alloc() 78 !!---------------------------------------------------------------------- 79 !! *** FUNCTION tra_bbl_alloc *** 80 !!---------------------------------------------------------------------- 81 ALLOCATE( utr_bbl (jpi,jpj) , ahu_bbl (jpi,jpj) , mbku_d (jpi,jpj) , mgrhu(jpi,jpj) , & 82 & vtr_bbl (jpi,jpj) , ahv_bbl (jpi,jpj) , mbkv_d (jpi,jpj) , mgrhv(jpi,jpj) , & 83 & ahu_bbl_0(jpi,jpj) , ahv_bbl_0(jpi,jpj) , & 84 & e3u_bbl_0(jpi,jpj) , e3v_bbl_0(jpi,jpj) , r1_e1e2t(jpi,jpj) , STAT= tra_bbl_alloc ) 85 ! 86 IF( lk_mpp ) CALL mpp_sum ( tra_bbl_alloc ) 87 IF( tra_bbl_alloc > 0 ) CALL ctl_warn('tra_bbl_alloc: allocation of arrays failed.') 88 END FUNCTION tra_bbl_alloc 89 74 90 75 91 SUBROUTINE tra_bbl( kt ) … … 153 169 !! Campin, J.-M., and H. Goosse, 1999, Tellus, 412-430. 154 170 !!---------------------------------------------------------------------- 155 INTEGER , INTENT(in ) :: kjpt ! number of tracers 156 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 157 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 158 !! 171 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 172 USE wrk_nemo, ONLY: zptb => wrk_2d_1 173 ! 174 INTEGER , INTENT(in ) :: kjpt ! number of tracers 175 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 176 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 177 ! 159 178 INTEGER :: ji, jj, jn ! dummy loop indices 160 179 INTEGER :: ik ! local integers 161 180 REAL(wp) :: zbtr ! local scalars 162 REAL(wp), DIMENSION(jpi,jpj) :: zptb ! tracer trend 163 !!---------------------------------------------------------------------- 181 !!---------------------------------------------------------------------- 182 ! 183 IF( wrk_in_use(2,1) ) THEN 184 CALL ctl_stop('tra_bbl_dif: ERROR: requested workspace array unavailable') ; RETURN 185 ENDIF 164 186 ! 165 187 DO jn = 1, kjpt ! tracer loop … … 185 207 # endif 186 208 ik = mbkt(ji,jj) ! bottom T-level index 187 zbtr = e1e2t_r(ji,jj) / fse3t(ji,jj,ik)209 zbtr = r1_e1e2t(ji,jj) / fse3t(ji,jj,ik) 188 210 pta(ji,jj,ik,jn) = pta(ji,jj,ik,jn) & 189 211 & + ( ahu_bbl(ji ,jj ) * ( zptb(ji+1,jj ) - zptb(ji ,jj ) ) & … … 196 218 END DO ! end tracer 197 219 ! ! =========== 220 IF( wrk_not_released(2,1) ) CALL ctl_stop('tra_bbl_dif: failed to release workspace array') 221 ! 198 222 END SUBROUTINE tra_bbl_dif 199 223 … … 214 238 !! Campin, J.-M., and H. Goosse, 1999, Tellus, 412-430. 215 239 !!---------------------------------------------------------------------- 216 INTEGER , INTENT(in ) :: kjpt 217 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields218 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend219 ! !240 INTEGER , INTENT(in ) :: kjpt ! number of tracers 241 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 242 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 243 ! 220 244 INTEGER :: ji, jj, jk, jn ! dummy loop indices 221 245 INTEGER :: iis , iid , ijs , ijd ! local integers … … 242 266 ! 243 267 ! ! up -slope T-point (shelf bottom point) 244 zbtr = e1e2t_r(iis,jj) / fse3t(iis,jj,ikus)268 zbtr = r1_e1e2t(iis,jj) / fse3t(iis,jj,ikus) 245 269 ztra = zu_bbl * ( ptb(iid,jj,ikus,jn) - ptb(iis,jj,ikus,jn) ) * zbtr 246 270 pta(iis,jj,ikus,jn) = pta(iis,jj,ikus,jn) + ztra 247 271 ! 248 272 DO jk = ikus, ikud-1 ! down-slope upper to down T-point (deep column) 249 zbtr = e1e2t_r(iid,jj) / fse3t(iid,jj,jk)273 zbtr = r1_e1e2t(iid,jj) / fse3t(iid,jj,jk) 250 274 ztra = zu_bbl * ( ptb(iid,jj,jk+1,jn) - ptb(iid,jj,jk,jn) ) * zbtr 251 275 pta(iid,jj,jk,jn) = pta(iid,jj,jk,jn) + ztra 252 276 END DO 253 277 ! 254 zbtr = e1e2t_r(iid,jj) / fse3t(iid,jj,ikud)278 zbtr = r1_e1e2t(iid,jj) / fse3t(iid,jj,ikud) 255 279 ztra = zu_bbl * ( ptb(iis,jj,ikus,jn) - ptb(iid,jj,ikud,jn) ) * zbtr 256 280 pta(iid,jj,ikud,jn) = pta(iid,jj,ikud,jn) + ztra … … 264 288 ! 265 289 ! up -slope T-point (shelf bottom point) 266 zbtr = e1e2t_r(ji,ijs) / fse3t(ji,ijs,ikvs)290 zbtr = r1_e1e2t(ji,ijs) / fse3t(ji,ijs,ikvs) 267 291 ztra = zv_bbl * ( ptb(ji,ijd,ikvs,jn) - ptb(ji,ijs,ikvs,jn) ) * zbtr 268 292 pta(ji,ijs,ikvs,jn) = pta(ji,ijs,ikvs,jn) + ztra 269 293 ! 270 294 DO jk = ikvs, ikvd-1 ! down-slope upper to down T-point (deep column) 271 zbtr = e1e2t_r(ji,ijd) / fse3t(ji,ijd,jk)295 zbtr = r1_e1e2t(ji,ijd) / fse3t(ji,ijd,jk) 272 296 ztra = zv_bbl * ( ptb(ji,ijd,jk+1,jn) - ptb(ji,ijd,jk,jn) ) * zbtr 273 297 pta(ji,ijd,jk,jn) = pta(ji,ijd,jk,jn) + ztra 274 298 END DO 275 299 ! ! down-slope T-point (deep bottom point) 276 zbtr = e1e2t_r(ji,ijd) / fse3t(ji,ijd,ikvd)300 zbtr = r1_e1e2t(ji,ijd) / fse3t(ji,ijd,ikvd) 277 301 ztra = zv_bbl * ( ptb(ji,ijs,ikvs,jn) - ptb(ji,ijd,ikvd,jn) ) * zbtr 278 302 pta(ji,ijd,ikvd,jn) = pta(ji,ijd,ikvd,jn) + ztra … … 314 338 !! Campin, J.-M., and H. Goosse, 1999, Tellus, 412-430. 315 339 !!---------------------------------------------------------------------- 340 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 341 USE wrk_nemo, ONLY: zub => wrk_2d_1 , ztb => wrk_2d_2 ! 2D workspace 342 USE wrk_nemo, ONLY: zvb => wrk_2d_3 , zsb => wrk_2d_4 , zdep => wrk_2d_5 343 ! 316 344 INTEGER , INTENT(in ) :: kt ! ocean time-step index 317 345 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 323 351 REAL(wp) :: zsign, zsigna, zgbbl ! local scalars 324 352 REAL(wp) :: zgdrho, zt, zs, zh ! - - 325 REAL(wp), DIMENSION(jpi,jpj) :: zub, zvb, ztb, zsb, zdep ! 2D workspace326 353 !! 327 354 REAL(wp) :: fsalbt, fsbeta, pft, pfs, pfh ! statement function … … 357 384 - 0.121555e-07 ) * pfh 358 385 !!---------------------------------------------------------------------- 359 386 387 IF( wrk_in_use(2, 1,2,3,4,5) ) THEN 388 CALL ctl_stop('bbl: requested workspace arrays unavailable') ; RETURN 389 ENDIF 390 360 391 IF( kt == nit000 ) THEN 361 392 IF(lwp) WRITE(numout,*) … … 494 525 ENDIF 495 526 ! 527 IF( wrk_not_released(2, 1,2,3,4,5) ) CALL ctl_stop('bbl: failed to release workspace arrays') 528 ! 496 529 END SUBROUTINE bbl 497 530 … … 504 537 !! 505 538 !! ** Method : Read the nambbl namelist and check the parameters 506 !! called by tra_bbl at the first timestep (nit000) 507 !!---------------------------------------------------------------------- 539 !! called by nemo_init at the first timestep (nit000) 540 !!---------------------------------------------------------------------- 541 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 542 USE wrk_nemo, ONLY: zmbk => wrk_2d_1 ! 2D workspace 508 543 INTEGER :: ji, jj ! dummy loop indices 509 544 INTEGER :: ii0, ii1, ij0, ij1 ! temporary integer 510 REAL(wp), DIMENSION(jpi,jpj) :: zmbk ! 2D workspace511 545 !! 512 546 NAMELIST/nambbl/ nn_bbl_ldf, nn_bbl_adv, rn_ahtbbl, rn_gambbl 513 547 !!---------------------------------------------------------------------- 548 549 IF( wrk_in_use(2,1) ) THEN 550 CALL ctl_stop('tra_bbl_init: requested workspace array unavailable') ; RETURN 551 ENDIF 514 552 515 553 REWIND ( numnam ) !* Read Namelist nambbl : bottom boundary layer scheme … … 528 566 WRITE(numout,*) ' advective bbl coefficient rn_gambbl = ', rn_gambbl, ' s' 529 567 ENDIF 530 568 569 ! ! allocate trabbl arrays 570 IF( tra_bbl_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'tra_bbl_init : unable to allocate arrays' ) 571 531 572 IF( nn_bbl_adv == 1 ) WRITE(numout,*) ' * Advective BBL using upper velocity' 532 573 IF( nn_bbl_adv == 2 ) WRITE(numout,*) ' * Advective BBL using velocity = F( delta rho)' … … 536 577 537 578 ! !* inverse of surface of T-cells 538 e1e2t_r(:,:) = 1.0/ ( e1t(:,:) * e2t(:,:) )579 r1_e1e2t(:,:) = 1._wp / ( e1t(:,:) * e2t(:,:) ) 539 580 540 581 ! !* vertical index of "deep" bottom u- and v-points … … 594 635 ENDIF 595 636 ! 637 IF( wrk_not_released(2,1) ) CALL ctl_stop('tra_bbl_init: failed to release workspace array') 638 ! 596 639 END SUBROUTINE tra_bbl_init 597 640 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/tradmp.F90
r2528 r2715 19 19 !! 'key_tradmp' internal damping 20 20 !!---------------------------------------------------------------------- 21 !! tra_dmp_alloc : allocate tradmp arrays 21 22 !! tra_dmp : update the tracer trend with the internal damping 22 23 !! tra_dmp_init : initialization, namlist read, parameters control … … 51 52 LOGICAL, PUBLIC :: lk_tradmp = .TRUE. !: internal damping flag 52 53 #endif 53 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: strdmp !: damping salinity trend (psu/s)54 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: ttrdmp !: damping temperature trend (Celcius/s)55 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: resto !: restoring coeff. on T and S (s-1)54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: strdmp !: damping salinity trend (psu/s) 55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ttrdmp !: damping temperature trend (Celcius/s) 56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: resto !: restoring coeff. on T and S (s-1) 56 57 57 58 ! !!* Namelist namtra_dmp : T & S newtonian damping * … … 72 73 !!---------------------------------------------------------------------- 73 74 CONTAINS 75 76 INTEGER FUNCTION tra_dmp_alloc() 77 !!---------------------------------------------------------------------- 78 !! *** FUNCTION tra_bbl_alloc *** 79 !!---------------------------------------------------------------------- 80 ALLOCATE( strdmp(jpi,jpj,jpk) , ttrdmp(jpi,jpj,jpk) , resto(jpi,jpj,jpk), STAT= tra_dmp_alloc ) 81 ! 82 IF( lk_mpp ) CALL mpp_sum ( tra_dmp_alloc ) 83 IF( tra_dmp_alloc > 0 ) CALL ctl_warn('tra_dmp_alloc: allocation of arrays failed') 84 END FUNCTION tra_dmp_alloc 85 74 86 75 87 SUBROUTINE tra_dmp( kt ) … … 193 205 ENDIF 194 206 207 ! ! allocate tradmp arrays 208 IF( tra_dmp_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'tra_dmp_init: unable to allocate arrays' ) 209 195 210 SELECT CASE ( nn_hdmp ) 196 211 CASE ( -1 ) ; IF(lwp) WRITE(numout,*) ' tracer damping in the Med & Red seas only' … … 312 327 USE iom 313 328 USE ioipsl 329 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 330 USE wrk_nemo, ONLY: zhfac => wrk_1d_1, zmrs => wrk_2d_1 , zdct => wrk_3d_1 ! 1D, 2D, 3D workspace 314 331 !! 315 332 INTEGER , INTENT(in ) :: kn_hdmp ! damping option … … 327 344 REAL(wp) :: zlat, zlat0, zlat1, zlat2 ! - - 328 345 REAL(wp) :: zsdmp, zbdmp ! - - 329 REAL(wp), DIMENSION(jpk) :: zhfac330 REAL(wp), DIMENSION(jpi,jpj) :: zmrs331 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdct332 346 CHARACTER(len=20) :: cfile 333 347 !!---------------------------------------------------------------------- 334 348 349 IF( wrk_in_use(1, 1) .OR. & 350 wrk_in_use(2, 1) .OR. & 351 wrk_in_use(3, 1) ) THEN 352 CALL ctl_stop('dtacof: requested workspace arrays unavailable') ; RETURN 353 ENDIF 335 354 ! ! ==================== 336 355 ! ! ORCA configuration : global domain … … 525 544 ENDIF 526 545 ! 546 IF( wrk_not_released(1, 1) .OR. & 547 wrk_not_released(2, 1) .OR. & 548 wrk_not_released(3, 1) ) CALL ctl_stop('dtacof: failed to release workspace arrays') 549 ! 527 550 END SUBROUTINE dtacof 528 551 … … 549 572 !!---------------------------------------------------------------------- 550 573 USE ioipsl ! IOipsl librairy 574 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 575 USE wrk_nemo, ONLY: zxt => wrk_2d_1 , zyt => wrk_2d_2 , zzt => wrk_2d_3, zmask => wrk_2d_4 551 576 !! 552 577 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( out ) :: pdct ! distance to the coastline 553 578 !! 554 INTEGER :: ji, jj, jk, jl ! dummy loop indices 555 INTEGER :: iju, ijt ! temporary integers 556 INTEGER :: icoast, itime 557 INTEGER :: icot ! logical unit for file distance to the coast 558 LOGICAL, DIMENSION(jpi,jpj) :: llcotu, llcotv, llcotf ! ??? 559 CHARACTER (len=32) :: clname 560 REAL(wp) :: zdate0 561 REAL(wp), DIMENSION(jpi,jpj) :: zxt, zyt, zzt, zmask ! cartesian coordinates for T-points 562 REAL(wp), DIMENSION(3*jpi*jpj) :: zxc, zyc, zzc, zdis ! temporary workspace 563 !!---------------------------------------------------------------------- 579 INTEGER :: ji, jj, jk, jl ! dummy loop indices 580 INTEGER :: iju, ijt, icoast, itime, ierr, icot ! local integers 581 CHARACTER (len=32) :: clname ! local name 582 REAL(wp) :: zdate0 ! local scalar 583 LOGICAL , ALLOCATABLE, DIMENSION(:,:) :: llcotu, llcotv, llcotf ! 2D logical workspace 584 REAL(wp), ALLOCATABLE, DIMENSION(:) :: zxc, zyc, zzc, zdis ! temporary workspace 585 !!---------------------------------------------------------------------- 586 587 IF( wrk_in_use(2, 1,2,3,4) .OR. & 588 wrk_in_use(1, 1,2,3,4) ) THEN 589 CALL ctl_stop('cofdis: requested workspace arrays unavailable') ; RETURN 590 ENDIF 591 592 ALLOCATE( llcotu(jpi,jpj) , llcotv(jpi,jpj) , llcotf(jpi,jpj) , & 593 & zxc (3*jpi*jpj) , zyc (3*jpi*jpj) , zzc (3*jpi*jpj) , zdis (3*jpi*jpj) , STAT=ierr ) 594 IF( lk_mpp ) CALL mpp_sum( ierr ) 595 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'cofdis: requested local arrays unavailable') 564 596 565 597 ! 0. Initialization … … 713 745 CALL restclo( icot ) 714 746 ! 747 IF( wrk_not_released(2, 1,2,3,4) .OR. & 748 wrk_not_released(1, 1,2,3,4) ) CALL ctl_stop('cofdis: failed to release workspace arrays') 749 DEALLOCATE( llcotu , llcotv , llcotf , & 750 & zxc , zyc , zzc , zdis ) 751 ! 715 752 END SUBROUTINE cofdis 716 753 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf.F90
r2528 r2715 37 37 ! 38 38 INTEGER :: nldf = 0 ! type of lateral diffusion used defined from ln_traldf_... namlist logicals) 39 #if defined key_traldf_ano 40 REAL, DIMENSION(jpi,jpj,jpk) :: t0_ldf, s0_ldf ! lateral diffusion trends of T & S for a constant profile41 #endif 39 40 REAL, SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: t0_ldf, s0_ldf !: lateral diffusion trends of T & S for a cst profile 41 ! ! (key_traldf_ano only) 42 42 43 43 !! * Substitutions … … 130 130 !!---------------------------------------------------------------------- 131 131 INTEGER :: ioptio, ierr ! temporary integers 132 !133 132 !!---------------------------------------------------------------------- 134 133 … … 238 237 !! ** Purpose : initializations of 239 238 !!---------------------------------------------------------------------- 239 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 240 USE wrk_nemo, ONLY: zt_ref => wrk_3d_1, ztb => wrk_3d_2, zavt => wrk_3d_3 ! 3D workspaces 241 USE wrk_nemo, ONLY: zs_ref => wrk_3d_4, zsb => wrk_3d_5 ! 3D workspaces 242 ! 240 243 USE zdf_oce ! vertical mixing 241 244 USE trazdf ! vertical mixing: double diffusion 242 245 USE zdfddm ! vertical mixing: double diffusion 243 ! !246 ! 244 247 INTEGER :: jk ! Dummy loop indice 245 LOGICAL :: llsave ! 246 REAL(wp) :: zt0, zs0, z12 ! temporary scalar 247 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zt_ref, ztb, zavt ! 3D workspace 248 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zs_ref, zsb ! 3D workspace 249 !!---------------------------------------------------------------------- 248 INTEGER :: ierr ! local integer 249 LOGICAL :: llsave ! local logical 250 REAL(wp) :: zt0, zs0, z12 ! local scalar 251 !!---------------------------------------------------------------------- 252 253 IF( wrk_in_use(3, 1,2,3,4,5) ) THEN 254 CALL ctl_stop('ldf_ano : requested workspace arrays unavailable') ; RETURN 255 ENDIF 250 256 251 257 IF(lwp) THEN … … 254 260 WRITE(numout,*) '~~~~~~~~~~~' 255 261 ENDIF 262 263 ! ! allocate trabbl arrays 264 ALLOCATE( t0_ldf(jpi,jpj,jpk) , s0_ldf(jpi,jpj,jpk) , STAT=ierr ) 265 IF( lk_mpp ) CALL mpp_sum( ierr ) 266 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'ldf_ano: unable to allocate arrays' ) 256 267 257 268 ! defined the T & S reference profiles … … 309 320 avt(:,:,:) = zavt(:,:,:) 310 321 ! 322 IF( wrk_not_released(3, 1,2,3,4,5) ) CALL ctl_stop('ldf_ano: failed to release workspace arrays') 323 ! 311 324 END SUBROUTINE ldf_ano 312 325 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilap.F90
r2528 r2715 28 28 USE diaptr ! poleward transport diagnostics 29 29 USE trc_oce ! share passive tracers/Ocean variables 30 USE lib_mpp ! MPP library 30 31 31 32 IMPLICIT NONE … … 73 74 !! biharmonic mixing trend. 74 75 !!---------------------------------------------------------------------- 75 USE oce , ztu => ua ! use ua as workspace 76 USE oce , ztv => va ! use va as workspace 76 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 77 USE oce , ONLY: ztu => ua , ztv => va ! (ua,va) used as workspace 78 USE wrk_nemo, ONLY: zeeu => wrk_2d_1 , zeev => wrk_2d_2 , zlt => wrk_2d_3 ! 2D workspace 77 79 !! 78 80 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 85 87 INTEGER :: ji, jj, jk, jn ! dummy loop indices 86 88 REAL(wp) :: zbtr, ztra ! local scalars 87 REAL(wp), DIMENSION(jpi,jpj) :: zeeu, zeev, zlt ! 2D workspace88 89 !!---------------------------------------------------------------------- 90 91 IF( wrk_in_use(2, 1,2,3) ) THEN 92 CALL ctl_stop('tra_ldf_bilap: requested workspace arrays unavailable') ; RETURN 93 ENDIF 89 94 90 95 IF( kt == nit000 ) THEN … … 160 165 END DO ! tracer loop 161 166 ! ! =========== 167 IF( wrk_not_released(2, 1,2,3) ) CALL ctl_stop('tra_ldf_bilap: failed to release workspace arrays') 168 ! 162 169 END SUBROUTINE tra_ldf_bilap 163 170 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90
r2528 r2715 24 24 USE diaptr ! poleward transport diagnostics 25 25 USE trc_oce ! share passive tracers/Ocean variables 26 USE lib_mpp ! MPP library 26 27 27 28 IMPLICIT NONE … … 65 66 !! biharmonic mixing trend. 66 67 !!---------------------------------------------------------------------- 68 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 69 USE wrk_nemo, ONLY: wk1 => wrk_4d_1 , wk2 => wrk_4d_2 ! 4D workspace 70 ! 67 71 INTEGER , INTENT(in ) :: kt ! ocean time-step index 68 72 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 70 74 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 71 75 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 72 !! 73 INTEGER :: ji, jj, jk, jn ! dummy loop indices 74 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt) :: wk1, wk2 ! 4D workspace 75 !!---------------------------------------------------------------------- 76 ! 77 INTEGER :: ji, jj, jk, jn ! dummy loop indices 78 !!---------------------------------------------------------------------- 79 80 IF( wrk_in_use(4, 1,2) ) THEN 81 CALL ctl_stop('tra_ldf_bilapg: requested workspace arrays unavailable') ; RETURN 82 ENDIF 76 83 77 84 IF( kt == nit000 ) THEN … … 107 114 END DO 108 115 END DO 116 ! 117 IF( wrk_not_released(4, 1,2) ) CALL ctl_stop('tra_ldf_bilapg : failed to release workspace arrays.') 109 118 ! 110 119 END SUBROUTINE tra_ldf_bilapg … … 149 158 !! 150 159 !!---------------------------------------------------------------------- 151 USE oce , zftv => ua ! use ua as workspace 152 !! 160 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released, wrk_in_use_xz, wrk_not_released_xz 161 USE oce , ONLY: zftv => ua ! ua used as workspace 162 USE wrk_nemo, ONLY: zftu => wrk_2d_1 , zdkt => wrk_2d_2 , zdk1t => wrk_2d_3 163 USE wrk_nemo, ONLY: zftw => wrk_xz_1 , zdit => wrk_xz_2 164 USE wrk_nemo, ONLY: zdjt => wrk_xz_3 , zdj1t => wrk_xz_4 165 ! 153 166 INTEGER , INTENT(in ) :: kt ! ocean time-step index 154 167 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 166 179 REAL(wp) :: zbtr, ztah, ztav 167 180 REAL(wp) :: zcof0, zcof1, zcof2, zcof3, zcof4 168 REAL(wp), DIMENSION(jpi,jpj) :: zftu, zdkt, zdk1t ! workspace 169 REAL(wp), DIMENSION(jpi,jpk) :: zftw, zdit, zdjt, zdj1t ! 170 !!---------------------------------------------------------------------- 171 181 !!---------------------------------------------------------------------- 182 183 IF( wrk_in_use(2, 1,2,3) .OR. wrk_in_use_xz(1,2,3,4) )THEN 184 CALL ctl_stop('ldfght : requested workspace arrays unavailable') ; RETURN 185 ENDIF 172 186 ! 173 187 DO jn = 1, kjpt … … 321 335 END DO 322 336 ! 337 IF( wrk_not_released(2, 1,2,3) .OR. & 338 wrk_not_released_xz(1,2,3,4) ) CALL ctl_stop('ldfght : failed to release workspace arrays.') 339 ! 323 340 END SUBROUTINE ldfght 324 341 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90
r2528 r2715 90 90 !! ** Action : Update pta arrays with the before rotated diffusion 91 91 !!---------------------------------------------------------------------- 92 USE oce , zftu => ua ! use ua as workspace 93 USE oce , zftv => va ! use va as workspace 94 !! 92 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 93 USE oce , ONLY: zftu => ua , zftv => va ! (ua,va) used as workspace 94 USE wrk_nemo, ONLY: zdkt => wrk_2d_1 , zdk1t => wrk_2d_2 , z2d => wrk_2d_3 ! 2D workspace 95 USE wrk_nemo, ONLY: zdit => wrk_3d_6 , zdjt => wrk_3d_7 , ztfw => wrk_3d_8 ! 3D workspace 96 ! 95 97 INTEGER , INTENT(in ) :: kt ! ocean time-step index 96 98 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 100 102 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 101 103 REAL(wp) , INTENT(in ) :: pahtb0 ! background diffusion coef 102 ! !104 ! 103 105 INTEGER :: ji, jj, jk, jn ! dummy loop indices 104 106 REAL(wp) :: zmsku, zabe1, zcof1, zcoef3 ! local scalars 105 107 REAL(wp) :: zmskv, zabe2, zcof2, zcoef4 ! - - 106 108 REAL(wp) :: zcoef0, zbtr, ztra ! - - 107 REAL(wp), DIMENSION(jpi,jpj) :: zdkt, zdk1t ! 2D workspace108 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdit, zdjt, ztfw ! 3D workspace109 109 #if defined key_diaar5 110 REAL(wp), DIMENSION(jpi,jpj) :: z2d ! 2D workspace111 110 REAL(wp) :: zztmp ! local scalar 112 111 #endif 113 112 !!---------------------------------------------------------------------- 113 114 IF( wrk_in_use(3, 6,7,8) .OR. wrk_in_use(2, 1,2,3) ) THEN 115 CALL ctl_stop('tra_ldf_iso : requested workspace array unavailable') ; RETURN 116 ENDIF 114 117 115 118 IF( kt == nit000 ) THEN … … 288 291 END DO 289 292 ! 293 IF( wrk_not_released(3, 6,7,8) .OR. & 294 wrk_not_released(2, 1,2,3) ) CALL ctl_stop('tra_ldf_iso: failed to release workspace arrays') 295 ! 290 296 END SUBROUTINE tra_ldf_iso 291 297 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_grif.F90
r2528 r2715 16 16 USE oce ! ocean dynamics and active tracers 17 17 USE dom_oce ! ocean space and time domain 18 USE phycst ! physical constants 18 19 USE trc_oce ! share passive tracers/Ocean variables 19 20 USE zdf_oce ! ocean vertical physics … … 23 24 USE in_out_manager ! I/O manager 24 25 USE iom ! I/O library 25 #if defined key_diaar526 USE phycst ! physical constants27 26 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 28 #endif 27 USE lib_mpp ! MPP library 29 28 30 29 IMPLICIT NONE 31 30 PRIVATE 32 31 33 PUBLIC tra_ldf_iso_grif ! routine called by traldf.F9034 35 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: psix_eiv36 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: psiy_eiv37 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: ah_wslp232 PUBLIC tra_ldf_iso_grif ! routine called by traldf.F90 33 34 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE, SAVE :: psix_eiv, psiy_eiv !: eiv stream function (diag only) 35 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE, SAVE :: ah_wslp2 !: aeiv*w-slope^2 36 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, SAVE :: zdkt ! atypic workspace 38 37 39 38 !! * Substitutions … … 90 89 !! ** Action : Update pta arrays with the before rotated diffusion 91 90 !!---------------------------------------------------------------------- 92 USE oce, zftu => ua ! use ua as workspace 93 USE oce, zftv => va ! use va as workspace 94 !! 91 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 92 USE oce , ONLY: zftu => ua , zftv => va ! (ua,va) used as 3D workspace 93 USE wrk_nemo, ONLY: zdit => wrk_3d_6 , zdjt => wrk_3d_7 , ztfw => wrk_3d_8 ! 3D workspace 94 USE wrk_nemo, ONLY: z2d => wrk_2d_1 ! 2D workspace 95 ! 95 96 INTEGER , INTENT(in ) :: kt ! ocean time-step index 96 97 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 100 101 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 101 102 REAL(wp) , INTENT(in ) :: pahtb0 ! background diffusion coef 102 ! !103 ! 103 104 INTEGER :: ji, jj, jk,jn ! dummy loop indices 104 105 INTEGER :: ip,jp,kp ! dummy loop indices … … 107 108 REAL(wp) :: zmskv, zabe2, zcof2, zcoef4 ! - - 108 109 REAL(wp) :: zcoef0, zbtr ! - - 109 REAL(wp), DIMENSION(jpi,jpj,0:1) :: zdkt ! 2D+1 workspace 110 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdit, zdjt, ztfw ! 3D workspace 110 !REAL(wp), POINTER, DIMENSION(:,:,:) :: zdkt ! 2D+1 workspace 111 111 ! 112 112 REAL(wp) :: zslope_skew, zslope_iso, zslope2, zbu, zbv … … 114 114 REAL(wp) :: zah, zah_slp, zaei_slp 115 115 #if defined key_diaar5 116 REAL(wp), DIMENSION(jpi,jpj) :: z2d ! 2D workspace 117 REAL(wp) :: zztmp ! local scalar 116 REAL(wp) :: zztmp ! local scalar 118 117 #endif 119 118 !!---------------------------------------------------------------------- 119 120 IF( wrk_in_use(3, 6,7,8) .OR. wrk_in_use(2, 1) ) THEN 121 CALL ctl_stop('tra_ldf_iso_grif: requested workspace arrays unavailable.') ; RETURN 122 ENDIF 123 ! ARP - line below uses 'bounds re-mapping' which is only defined in 124 ! Fortran 2003 and up. We would be OK if code was written to use 125 ! zdkt(:,:,1:2) instead as then wouldn't need to re-map bounds. 126 ! As it is, we make zdkt a module array and allocate it in _alloc(). 127 !zdkt(1:jpi,1:jpj,0:1) => wrk_3d_9(:,:,1:2) 120 128 121 129 IF( kt == nit000 ) THEN … … 124 132 IF(lwp) WRITE(numout,*) ' WARNING: STILL UNDER TEST, NOT RECOMMENDED. USE AT YOUR OWN PERIL' 125 133 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 126 ALLOCATE( ah_wslp2(jpi,jpj,jpk) , STAT=ierr ) 127 IF( ierr > 0 ) THEN 128 CALL ctl_stop( 'tra_ldf_iso_grif : unable to allocate Griffies operator ah_wslp2 ' ) ; RETURN 129 ENDIF 134 ALLOCATE( ah_wslp2(jpi,jpj,jpk) , zdkt(jpi,jpj,0:1), STAT=ierr ) 135 IF( lk_mpp ) CALL mpp_sum ( ierr ) 136 IF( ierr > 0 ) CALL ctl_stop('STOP', 'tra_ldf_iso_grif: unable to allocate arrays') 130 137 IF( ln_traldf_gdia ) THEN 131 138 ALLOCATE( psix_eiv(jpi,jpj,jpk) , psiy_eiv(jpi,jpj,jpk) , STAT=ierr ) 132 IF( ierr > 0 ) THEN 133 CALL ctl_stop( 'tra_ldf_iso_grif : unable to allocate Griffies operator diagnostics ' ) ; RETURN 134 ENDIF 139 IF( lk_mpp ) CALL mpp_sum ( ierr ) 140 IF( ierr > 0 ) CALL ctl_stop('STOP', 'tra_ldf_iso_grif: unable to allocate diagnostics') 135 141 ENDIF 136 142 ENDIF … … 342 348 END DO 343 349 ! 350 IF( wrk_not_released(3, 6,7,8) .OR. & 351 wrk_not_released(2, 1) ) CALL ctl_stop('tra_ldf_iso_grif: failed to release workspace arrays') 352 ! 344 353 END SUBROUTINE tra_ldf_iso_grif 345 354 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_lap.F90
r2528 r2715 24 24 USE diaptr ! poleward transport diagnostics 25 25 USE trc_oce ! share passive tracers/Ocean variables 26 USE lib_mpp ! MPP library 26 27 27 28 IMPLICIT NONE … … 30 31 PUBLIC tra_ldf_lap ! routine called by step.F90 31 32 32 REAL(wp), DIMENSION(jpi,jpj) :: e1ur, e2vr ! scale factor coefficients33 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: e1ur, e2vr ! scale factor coefficients 33 34 34 35 !! * Substitutions … … 62 63 !! harmonic mixing trend. 63 64 !!---------------------------------------------------------------------- 64 USE oce , ztu => ua ! use ua as workspace 65 USE oce , ztv => va ! use va as workspace 66 !! 65 USE oce, ONLY: ztu => ua , ztv => va ! (ua,va) used as workspace 66 ! 67 67 INTEGER , INTENT(in ) :: kt ! ocean time-step index 68 68 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 71 71 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 72 72 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 73 ! !73 ! 74 74 INTEGER :: ji, jj, jk, jn ! dummy loop indices 75 INTEGER :: iku, ikv 75 INTEGER :: iku, ikv, ierr ! local integers 76 76 REAL(wp) :: zabe1, zabe2, zbtr ! local scalars 77 77 !!---------------------------------------------------------------------- … … 81 81 IF(lwp) WRITE(numout,*) 'tra_ldf_lap : iso-level laplacian diffusion on ', cdtype 82 82 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ ' 83 ! 84 ALLOCATE( e1ur(jpi,jpj), e2vr(jpi,jpj), STAT=ierr ) 85 IF( lk_mpp ) CALL mpp_sum( ierr ) 86 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'tra_ldf_lap : unable to allocate arrays' ) 87 ! 83 88 e1ur(:,:) = e2u(:,:) / e1u(:,:) 84 89 e2vr(:,:) = e1v(:,:) / e2v(:,:) … … 123 128 DO jj = 2, jpjm1 124 129 DO ji = fs_2, fs_jpim1 ! vector opt. 125 zbtr = 1. 0 / ( e1t(ji,jj) *e2t(ji,jj) * fse3t(ji,jj,jk) )130 zbtr = 1._wp / ( e1t(ji,jj) *e2t(ji,jj) * fse3t(ji,jj,jk) ) 126 131 ! horizontal diffusive trends added to the general tracer trends 127 132 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zbtr * ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) & -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/tranpc.F90
r2528 r2715 18 18 USE zdf_oce ! ocean vertical physics 19 19 USE trdmod_oce ! ocean active tracer trends 20 USE trdtra ! ocean active tracer trends20 USE trdtra ! ocean active tracer trends 21 21 USE eosbn2 ! equation of state (eos routine) 22 22 USE lbclnk ! lateral boundary conditions (or mpp link) 23 23 USE in_out_manager ! I/O manager 24 USE lib_mpp ! MPP library 24 25 25 26 IMPLICIT NONE 26 27 PRIVATE 27 28 28 PUBLIC tra_npc ! routine called by step.F9029 PUBLIC tra_npc ! routine called by step.F90 29 30 30 31 !! * Substitutions … … 55 56 !! References : Madec, et al., 1991, JPO, 21, 9, 1349-1371. 56 57 !!---------------------------------------------------------------------- 58 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released, wrk_in_use_xz, wrk_not_released_xz 59 USE wrk_nemo, ONLY: ztrdt => wrk_3d_1 , ztrds => wrk_3d_2 , zrhop => wrk_3d_3 60 USE wrk_nemo, ONLY: zwx => wrk_xz_1 , zwy => wrk_xz_2 , zwz => wrk_xz_3 61 ! 57 62 INTEGER, INTENT(in) :: kt ! ocean time-step index 58 ! !63 ! 59 64 INTEGER :: ji, jj, jk ! dummy loop indices 60 65 INTEGER :: inpcc ! number of statically instable water column … … 63 68 INTEGER :: ikbot, ik, ikup, ikdown ! ??? 64 69 REAL(wp) :: ze3tot, zta, zsa, zraua, ze3dwn 65 REAL(wp), DIMENSION(jpi,jpk) :: zwx, zwy, zwz ! 2D arrays66 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zrhop ! 3D arrays67 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdt, ztrds68 70 !!---------------------------------------------------------------------- 71 72 ! Strictly 1 and 2 3D workspaces only needed if(l_trdtra) but it doesn't 73 ! cost us anything and makes code simpler. 74 IF( wrk_in_use(3, 1,2,3) .OR. wrk_in_use_xz(1,2,3) ) THEN 75 CALL ctl_stop('tra_npc: requested workspace arrays unavailable') ; RETURN 76 ENDIF 69 77 70 78 IF( MOD( kt, nn_npc ) == 0 ) THEN … … 76 84 77 85 IF( l_trdtra ) THEN !* Save ta and sa trends 78 ALLOCATE( ztrdt(jpi,jpj,jpk) ) ;ztrdt(:,:,:) = tsa(:,:,:,jp_tem)79 ALLOCATE( ztrds(jpi,jpj,jpk) ) ;ztrds(:,:,:) = tsa(:,:,:,jp_sal)86 ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 87 ztrds(:,:,:) = tsa(:,:,:,jp_sal) 80 88 ENDIF 81 89 … … 192 200 CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_npc, ztrdt ) 193 201 CALL trd_tra( kt, 'TRA', jp_sal, jptra_trd_npc, ztrds ) 194 DEALLOCATE( ztrdt ) ; DEALLOCATE( ztrds )195 202 ENDIF 196 203 197 204 ! Lateral boundary conditions on ( ta, sa ) ( Unchanged sign) 198 205 ! ------------------------------============ 199 CALL lbc_lnk( tsa(:,:,:,jp_tem), 'T', 1. ) 200 CALL lbc_lnk( tsa(:,:,:,jp_sal), 'T', 1. ) 206 CALL lbc_lnk( tsa(:,:,:,jp_tem), 'T', 1. ) ; CALL lbc_lnk( tsa(:,:,:,jp_sal), 'T', 1. ) 201 207 202 208 … … 210 216 ENDIF 211 217 ! 218 IF( wrk_not_released(3, 1,2,3) .OR. & 219 wrk_not_released_xz(1,2,3) ) CALL ctl_stop('tra_npc: failed to release workspace arrays') 220 ! 212 221 END SUBROUTINE tra_npc 213 222 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r2528 r2715 56 56 PUBLIC tra_nxt_vvl ! to be used in trcnxt 57 57 58 REAL(wp) :: rbcp ! Brown & Campana parameters for semi-implicit hpg 59 REAL(wp), DIMENSION(jpk) :: r2dt ! vertical profile time step, =2*rdttra (leapfrog) or =rdttra (Euler) 58 REAL(wp) :: rbcp ! Brown & Campana parameters for semi-implicit hpg 60 59 61 60 !! * Substitutions … … 63 62 !!---------------------------------------------------------------------- 64 63 !! NEMO/OPA 3.3 , NEMO-Consortium (2010) 65 !! $Id 66 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)64 !! $Id$ 65 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 67 66 !!---------------------------------------------------------------------- 68 67 CONTAINS … … 104 103 IF(lwp) WRITE(numout,*) '~~~~~~~' 105 104 ! 106 rbcp = 0.25 * (1. + atfp) * (1. + atfp) * ( 1. - atfp)! Brown & Campana parameter for semi-implicit hpg105 rbcp = 0.25 * (1. + atfp) * (1. + atfp) * ( 1. - atfp) ! Brown & Campana parameter for semi-implicit hpg 107 106 ENDIF 108 107 … … 131 130 132 131 ! set time step size (Euler/Leapfrog) 133 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt (:) = rdttra(:) ! at nit000 (Euler)134 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dt (:) = 2.* rdttra(:) ! at nit000 or nit000+1 (Leapfrog)132 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dtra(:) = rdttra(:) ! at nit000 (Euler) 133 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dtra(:) = 2.* rdttra(:) ! at nit000 or nit000+1 (Leapfrog) 135 134 ENDIF 136 135 … … 153 152 ENDIF 154 153 ENDIF 155 154 ! 156 155 #if defined key_agrif 157 156 ! Update tracer at AGRIF zoom boundaries … … 160 159 CALL tra_swap 161 160 #endif 162 161 ! 163 162 ! trends computation 164 163 IF( l_trdtra ) THEN ! trend of the Asselin filter (tb filtered - tb)/dt 165 164 DO jk = 1, jpkm1 166 zfact = 1.e0 / r2dt (jk)165 zfact = 1.e0 / r2dtra(jk) 167 166 ztrdt(:,:,jk) = ( tsb(:,:,jk,jp_tem) - ztrdt(:,:,jk) ) * zfact 168 167 ztrds(:,:,jk) = ( tsb(:,:,jk,jp_sal) - ztrds(:,:,jk) ) * zfact … … 172 171 DEALLOCATE( ztrdt ) ; DEALLOCATE( ztrds ) 173 172 END IF 174 173 ! 175 174 ! ! control print 176 175 IF(ln_ctl) CALL prt_ctl( tab3d_1=tsn(:,:,:,jp_tem), clinfo1=' nxt - Tn: ', mask1=tmask, & … … 203 202 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T) 204 203 !!---------------------------------------------------------------------- 205 INTEGER , INTENT(in ) :: kt ! ocean time-step index206 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator)207 INTEGER , INTENT(in ) :: kjpt ! number of tracers208 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before tracer fields209 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! now tracer fields210 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend211 ! !204 INTEGER , INTENT(in ) :: kt ! ocean time-step index 205 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 206 INTEGER , INTENT(in ) :: kjpt ! number of tracers 207 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before tracer fields 208 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! now tracer fields 209 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 210 ! 212 211 INTEGER :: ji, jj, jk, jn ! dummy loop indices 213 212 LOGICAL :: ll_tra_hpg ! local logical … … 270 269 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T) 271 270 !!---------------------------------------------------------------------- 272 INTEGER , INTENT(in ) :: kt ! ocean time-step index273 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator)274 INTEGER , INTENT(in ) :: kjpt ! number of tracers275 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before tracer fields276 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! now tracer fields277 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend271 INTEGER , INTENT(in ) :: kt ! ocean time-step index 272 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 273 INTEGER , INTENT(in ) :: kjpt ! number of tracers 274 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before tracer fields 275 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! now tracer fields 276 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 278 277 !! 279 278 LOGICAL :: ll_tra, ll_tra_hpg, ll_traqsr ! local logical 280 279 INTEGER :: ji, jj, jk, jn ! dummy loop indices 281 REAL(wp) :: ztc_a , ztc_n , ztc_b ! local scalar 282 REAL(wp) :: ztc_f , ztc_d ! - - 283 REAL(wp) :: ze3t_b, ze3t_n, ze3t_a ! - - 284 REAL(wp) :: ze3t_f, ze3t_d ! - - 285 REAL(wp) :: zfact1, zfact2 ! - - 280 REAL(wp) :: zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar 281 REAL(wp) :: zfact2, ze3t_b, ze3t_n, ze3t_a, ze3t_f, ze3t_d ! - - 286 282 !!---------------------------------------------------------------------- 287 283 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r2528 r2715 28 28 USE fldread ! read input fields 29 29 USE restart ! ocean restart 30 USE lib_mpp ! MPP library 30 31 31 32 IMPLICIT NONE … … 58 59 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 59 60 !! $Id$ 60 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)61 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 61 62 !!---------------------------------------------------------------------- 62 63 63 CONTAINS 64 64 … … 90 90 !! Lengaigne et al. 2007, Clim. Dyn., V28, 5, 503-516. 91 91 !!---------------------------------------------------------------------- 92 !! 92 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 93 USE wrk_nemo, ONLY: zekb => wrk_2d_1 , zekg => wrk_2d_2 , zekr => wrk_2d_3 94 USE wrk_nemo, ONLY: ze0 => wrk_3d_1 , ze1 => wrk_3d_2 , ze2 => wrk_3d_3 95 USE wrk_nemo, ONLY: ze3 => wrk_3d_4 , zea => wrk_3d_5 96 ! 93 97 INTEGER, INTENT(in) :: kt ! ocean time-step 94 ! !98 ! 95 99 INTEGER :: ji, jj, jk ! dummy loop indices 96 INTEGER :: irgb ! temporaryintegers97 REAL(wp) :: zchl, zcoef ! temporaryscalars100 INTEGER :: irgb ! local integers 101 REAL(wp) :: zchl, zcoef, zfact ! local scalars 98 102 REAL(wp) :: zc0, zc1, zc2, zc3 ! - - 99 REAL(wp) :: zz0, zz1 ! - - 100 REAL(wp) :: z1_e3t, zfact ! - - 101 REAL(wp), DIMENSION(jpi,jpj) :: zekb, zekg, zekr ! 2D workspace 102 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze0, ze1 , ze2, ze3, zea ! 3D workspace 103 REAL(wp) :: zz0, zz1, z1_e3t ! - - 103 104 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdt 104 105 !!---------------------------------------------------------------------- 106 107 IF( wrk_in_use(3, 1,2,3,4,5) .OR. wrk_in_use(2, 1,2,3) )THEN 108 CALL ctl_stop('tra_qsr: requested workspace arrays unavailable') ; RETURN 109 ENDIF 105 110 106 111 IF( kt == nit000 ) THEN … … 283 288 IF(ln_ctl) CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' qsr - Ta: ', mask1=tmask, clinfo3='tra-ta' ) 284 289 ! 290 IF( wrk_not_released(3, 1,2,3,4,5) .OR. & 291 wrk_not_released(2, 1,2,3) ) CALL ctl_stop('tra_qsr: failed to release workspace arrays') 292 ! 285 293 END SUBROUTINE tra_qsr 286 294 … … 303 311 !! Reference : Jerlov, N. G., 1968 Optical Oceanography, Elsevier, 194pp. 304 312 !!---------------------------------------------------------------------- 305 INTEGER :: ji, jj, jk ! dummy loop indices 306 INTEGER :: irgb, ierror ! temporary integer 307 INTEGER :: ioptio, nqsr ! temporary integer 308 REAL(wp) :: zc0 , zc1, zcoef ! temporary scalars 309 REAL(wp) :: zc2 , zc3 , zchl ! - - 310 REAL(wp) :: zz0 , zz1 ! - - 311 REAL(wp), DIMENSION(jpi,jpj) :: zekb, zekg, zekr ! 2D workspace 312 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze0 , ze1 , ze2 , ze3 , zea ! 3D workspace 313 !! 313 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 314 USE wrk_nemo, ONLY: zekb => wrk_2d_1 , zekg => wrk_2d_2 , zekr => wrk_2d_3 315 USE wrk_nemo, ONLY: ze0 => wrk_3d_1 , ze1 => wrk_3d_2 , ze2 => wrk_3d_3 316 USE wrk_nemo, ONLY: ze3 => wrk_3d_4 , zea => wrk_3d_5 317 ! 318 INTEGER :: ji, jj, jk ! dummy loop indices 319 INTEGER :: irgb, ierror, ioptio, nqsr ! local integer 320 REAL(wp) :: zz0, zc0 , zc1, zcoef ! local scalars 321 REAL(wp) :: zz1, zc2 , zc3, zchl ! - - 322 ! 314 323 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files 315 324 TYPE(FLD_N) :: sn_chl ! informations about the chlorofyl field to be read 325 !! 316 326 NAMELIST/namtra_qsr/ sn_chl, cn_dir, ln_traqsr, ln_qsr_rgb, ln_qsr_2bd, ln_qsr_bio, & 317 327 & nn_chldta, rn_abs, rn_si0, rn_si1 318 328 !!---------------------------------------------------------------------- 329 330 IF( wrk_in_use(2, 1,2,3) .OR. wrk_in_use(3, 1,2,3,4,5) )THEN 331 CALL ctl_stop('tra_qsr_init: requested workspace arrays unavailable') ; RETURN 332 ENDIF 319 333 320 334 cn_dir = './' ! directory in which the model is executed … … 490 504 ENDIF 491 505 ! 506 IF( wrk_not_released(2, 1,2,3) .OR. & 507 wrk_not_released(3, 1,2,3,4,5) ) CALL ctl_stop('tra_qsr_init: failed to release workspace arrays') 508 ! 492 509 END SUBROUTINE tra_qsr_init 493 510 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90
r2528 r2715 40 40 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 41 41 !! $Id$ 42 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 43 !!---------------------------------------------------------------------- 44 42 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 43 !!---------------------------------------------------------------------- 45 44 CONTAINS 46 45 … … 210 209 zdep = 1. / h_rnf(ji,jj) 211 210 zdep = zfact * zdep 212 IF ( rnf(ji,jj) .ne. 0.0) THEN211 IF ( rnf(ji,jj) /= 0._wp ) THEN 213 212 DO jk = 1, nk_rnf(ji,jj) 214 213 tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem) & … … 216 215 IF( ln_rnf_sal ) tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal) & 217 216 & + ( rnf_tsc_b(ji,jj,jp_sal) + rnf_tsc(ji,jj,jp_sal) ) * zdep 218 END DO217 END DO 219 218 ENDIF 220 END DO221 END DO219 END DO 220 END DO 222 221 ENDIF 223 222 !!gm It should be useless -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traswp.F90
r2528 r2715 16 16 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 17 17 !! $Id$ 18 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)18 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 19 19 !!---------------------------------------------------------------------- 20 21 20 CONTAINS 22 21 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf.F90
r2528 r2715 14 14 USE oce ! ocean dynamics and tracers variables 15 15 USE dom_oce ! ocean space and time domain variables 16 USE domvvl ! variable volume 17 USE phycst ! physical constant 16 18 USE zdf_oce ! ocean vertical physics variables 17 19 USE sbc_oce ! surface boundary condition: ocean … … 26 28 USE in_out_manager ! I/O manager 27 29 USE prtctl ! Print control 30 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 31 USE lib_mpp ! MPP library 28 32 29 USE phycst30 USE lbclnk ! ocean lateral boundary conditions (or mpp link)31 USE domvvl ! variable volume32 33 33 34 IMPLICIT NONE 34 35 PRIVATE 35 36 36 PUBLIC tra_zdf !routine called by step.F9037 PUBLIC tra_zdf_init ! routine called by opa.F9037 PUBLIC tra_zdf ! routine called by step.F90 38 PUBLIC tra_zdf_init ! routine called by nemogcm.F90 38 39 39 INTEGER :: nzdf = 0 ! type vertical diffusion algorithm used 40 ! ! defined from ln_zdf... namlist logicals) 41 REAL(wp), DIMENSION(jpk) :: r2dt ! vertical profile time-step, = 2 rdttra 42 ! ! except at nit000 (=rdttra) if neuler=0 40 INTEGER :: nzdf = 0 ! type vertical diffusion algorithm used (defined from ln_zdf... namlist logicals) 43 41 44 42 !! * Substitutions … … 49 47 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 50 48 !! $Id$ 51 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)49 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 52 50 !!---------------------------------------------------------------------- 51 CONTAINS 53 52 54 CONTAINS55 56 53 SUBROUTINE tra_zdf( kt ) 57 54 !!---------------------------------------------------------------------- … … 68 65 ! ! set time step 69 66 IF( neuler == 0 .AND. kt == nit000 ) THEN ! at nit000 70 r2dt (:) = rdttra(:) ! = rdtra (restarting with Euler time stepping)67 r2dtra(:) = rdttra(:) ! = rdtra (restarting with Euler time stepping) 71 68 ELSEIF( kt <= nit000 + 1) THEN ! at nit000 or nit000+1 72 r2dt (:) = 2. * rdttra(:) ! = 2 rdttra (leapfrog)69 r2dtra(:) = 2. * rdttra(:) ! = 2 rdttra (leapfrog) 73 70 ENDIF 74 71 … … 79 76 80 77 SELECT CASE ( nzdf ) ! compute lateral mixing trend and add it to the general trend 81 CASE ( 0 ) ; CALL tra_zdf_exp( kt, 'TRA', r2dt , nn_zdfexp, tsb, tsa, jpts ) ! explicit scheme82 CASE ( 1 ) ; CALL tra_zdf_imp( kt, 'TRA', r2dt , tsb, tsa, jpts ) ! implicit scheme78 CASE ( 0 ) ; CALL tra_zdf_exp( kt, 'TRA', r2dtra, nn_zdfexp, tsb, tsa, jpts ) ! explicit scheme 79 CASE ( 1 ) ; CALL tra_zdf_imp( kt, 'TRA', r2dtra, tsb, tsa, jpts ) ! implicit scheme 83 80 CASE ( -1 ) ! esopa: test all possibility with control print 84 CALL tra_zdf_exp( kt, 'TRA', r2dt , nn_zdfexp, tsb, tsa, jpts )81 CALL tra_zdf_exp( kt, 'TRA', r2dtra, nn_zdfexp, tsb, tsa, jpts ) 85 82 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' zdf0 - Ta: ', mask1=tmask, & 86 83 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 87 CALL tra_zdf_imp( kt, 'TRA', r2dt , tsb, tsa, jpts )84 CALL tra_zdf_imp( kt, 'TRA', r2dtra, tsb, tsa, jpts ) 88 85 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' zdf1 - Ta: ', mask1=tmask, & 89 86 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) … … 92 89 IF( l_trdtra ) THEN ! save the vertical diffusive trends for further diagnostics 93 90 DO jk = 1, jpkm1 94 ztrdt(:,:,jk) = ( ( tsa(:,:,jk,jp_tem) - tsb(:,:,jk,jp_tem) ) / r2dt (jk) ) - ztrdt(:,:,jk)95 ztrds(:,:,jk) = ( ( tsa(:,:,jk,jp_sal) - tsb(:,:,jk,jp_sal) ) / r2dt (jk) ) - ztrds(:,:,jk)91 ztrdt(:,:,jk) = ( ( tsa(:,:,jk,jp_tem) - tsb(:,:,jk,jp_tem) ) / r2dtra(jk) ) - ztrdt(:,:,jk) 92 ztrds(:,:,jk) = ( ( tsa(:,:,jk,jp_sal) - tsb(:,:,jk,jp_sal) ) / r2dtra(jk) ) - ztrds(:,:,jk) 96 93 END DO 97 94 CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_zdf, ztrdt ) … … 103 100 IF(ln_ctl) CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' zdf - Ta: ', mask1=tmask, & 104 101 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 105 102 ! 106 103 END SUBROUTINE tra_zdf 107 104 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_exp.F90
r2528 r2715 28 28 USE zdf_oce ! ocean vertical physics 29 29 USE zdfddm ! ocean vertical physics: double diffusion 30 USE trc_oce ! share passive tracers/Ocean variables 30 31 USE in_out_manager ! I/O manager 31 USE trc_oce ! share passive tracers/Ocean variables32 USE lib_mpp ! MPP library 32 33 33 34 IMPLICIT NONE … … 43 44 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 44 45 !! $Id$ 45 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)46 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 46 47 !!---------------------------------------------------------------------- 47 48 48 CONTAINS 49 49 … … 73 73 !! ** Action : - after tracer fields pta 74 74 !!--------------------------------------------------------------------- 75 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 76 USE wrk_nemo, ONLY: zwx => wrk_3d_6, zwy => wrk_3d_7 ! 3D workspace 77 ! 75 78 INTEGER , INTENT(in ) :: kt ! ocean time-step index 76 79 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 80 83 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 81 84 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 82 ! !85 ! 83 86 INTEGER :: ji, jj, jk, jn, jl ! dummy loop indices 84 87 REAL(wp) :: zlavmr, zave3r, ze3tr ! local scalars 85 88 REAL(wp) :: ztra, ze3tb ! - - 86 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwx, zwy ! 3D workspace87 89 !!--------------------------------------------------------------------- 90 91 IF( wrk_in_use(3, 6,7) ) THEN 92 CALL ctl_stop('tra_zdf_exp: requested workspace arrays unavailable') ; RETURN 93 ENDIF 88 94 89 95 IF( kt == nit000 ) THEN … … 158 164 END DO 159 165 ! 166 IF( wrk_not_released(3, 6,7) ) CALL ctl_stop('tra_zdf_exp: failed to release workspace arrays') 167 ! 160 168 END SUBROUTINE tra_zdf_exp 161 169 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90
r2602 r2715 34 34 USE in_out_manager ! I/O manager 35 35 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 36 USE lib_mpp ! MPP library 36 37 37 38 IMPLICIT NONE … … 73 74 !! ** Action : - pta becomes the after tracer 74 75 !!--------------------------------------------------------------------- 75 USE oce , ONLY : zwd => ua ! ua used as workspace 76 USE oce , ONLY : zws => va ! va - - 77 !! 76 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 77 USE oce , ONLY: zwd => ua , zws => va ! (ua,va) used as 3D workspace 78 USE wrk_nemo, ONLY: zwi => wrk_3d_6 , zwt => wrk_3d_7 ! 3D workspace 79 ! 78 80 INTEGER , INTENT(in ) :: kt ! ocean time-step index 79 81 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 82 84 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 83 85 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 84 !! 85 INTEGER :: ji, jj, jk, jn ! dummy loop indices 86 REAL(wp) :: zrhs ! local scalars 87 REAL(wp) :: ze3tb, ze3tn, ze3ta ! variable vertical scale factors 88 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwi, zwt ! workspace arrays 86 ! 87 INTEGER :: ji, jj, jk, jn ! dummy loop indices 88 REAL(wp) :: zrhs, ze3tb, ze3tn, ze3ta ! local scalars 89 89 !!--------------------------------------------------------------------- 90 91 IF( wrk_in_use(3, 6,7) ) THEN 92 CALL ctl_stop('tra_zdf_imp : requested workspace arrays unavailable.') ; RETURN 93 ENDIF 90 94 91 95 IF( kt == nit000 ) THEN … … 107 111 ! Build matrix if temperature or salinity (only in double diffusion case) or first passive tracer 108 112 ! 109 IF( ( cdtype == 'TRA' .AND. ( ( jn == jp_tem ) .OR. ( jn == jp_sal .AND. lk_zdfddm ) ) ) .OR.&113 IF( ( cdtype == 'TRA' .AND. ( jn == jp_tem .OR. ( jn == jp_sal .AND. lk_zdfddm ) ) ) .OR. & 110 114 & ( cdtype == 'TRC' .AND. jn == 1 ) ) THEN 111 115 ! … … 224 228 ! ! ================= ! 225 229 ! 230 IF( wrk_not_released(3, 6,7) ) CALL ctl_stop('tra_zdf_imp: failed to release workspace arrays') 231 ! 226 232 END SUBROUTINE tra_zdf_imp 227 233 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/zpshde.F90
r2569 r2715 20 20 USE in_out_manager ! I/O manager 21 21 USE lbclnk ! lateral boundary conditions (or mpp link) 22 USE lib_mpp ! MPP library 22 23 23 24 IMPLICIT NONE … … 80 81 !! - pgru, pgrv: horizontal gradient of rho (if present) at u- & v-points 81 82 !!---------------------------------------------------------------------- 83 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 84 USE wrk_nemo, ONLY: zri => wrk_2d_1 , zrj => wrk_2d_2 ! interpolated value of rd 85 USE wrk_nemo, ONLY: zhi => wrk_2d_3 , zhj => wrk_2d_4 ! depth of interpolation for eos2d 86 ! 82 87 INTEGER , INTENT(in ) :: kt ! ocean time-step index 83 88 INTEGER , INTENT(in ) :: kjpt ! number of tracers … … 86 91 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ), OPTIONAL :: prd ! 3D density anomaly fields 87 92 REAL(wp), DIMENSION(jpi,jpj ), INTENT( out), OPTIONAL :: pgru, pgrv ! hor. grad. of prd at u- & v-pts 88 ! !93 ! 89 94 INTEGER :: ji, jj, jn ! Dummy loop indices 90 95 INTEGER :: iku, ikv, ikum1, ikvm1 ! partial step level (ocean bottom level) at u- and v-points 91 REAL(wp), DIMENSION(jpi,jpj,kjpt) :: zti, ztj ! interpolated value of tracer92 REAL(wp), DIMENSION(jpi,jpj) :: zri, zrj ! interpolated value of rd93 REAL(wp), DIMENSION(jpi,jpj) :: zhi, zhj ! depth of interpolation for eos2d94 96 REAL(wp) :: ze3wu, ze3wv, zmaxu, zmaxv ! temporary scalars 97 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zti, ztj ! interpolated value of tracer 95 98 !!---------------------------------------------------------------------- 99 100 IF( wrk_in_use(2, 1,2,3,4) ) THEN 101 CALL ctl_stop('zps_hde: requested workspace arrays unavailable') ; RETURN 102 END IF 103 104 ! Allocate workspaces whose dimension is > jpk 105 ALLOCATE( zti(jpi,jpj,kjpt) ) 106 ALLOCATE( ztj(jpi,jpj,kjpt) ) 96 107 97 108 DO jn = 1, kjpt !== Interpolation of tracers at the last ocean level ==! … … 200 211 END IF 201 212 ! 213 IF( wrk_not_released(2, 1,2,3,4) ) CALL ctl_stop('zps_hde: failed to release workspace arrays') 214 ! 215 DEALLOCATE( zti ) 216 DEALLOCATE( ztj ) 217 ! 202 218 END SUBROUTINE zps_hde 203 219
Note: See TracChangeset
for help on using the changeset viewer.