Changeset 2690 for branches/dev_r2586_dynamic_mem
- Timestamp:
- 2011-03-15T16:27:46+01:00 (13 years ago)
- Location:
- branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO
- Files:
-
- 148 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/LIM_SRC_2/dom_ice_2.F90
r2636 r2690 51 51 ierr(:) = 0 52 52 ! 53 ALLOCATE( fs2cor(jpi,jpj) , fcor(jpi,jpj),&54 & covrai(jpi,jpj) , area(jpi,jpj), tms(jpi,jpj), tmu(jpi,jpj),&55 & wght (jpi,jpj,2,2), Stat=ierr(1) )53 ALLOCATE( fs2cor(jpi,jpj) , fcor(jpi,jpj) , & 54 & covrai(jpi,jpj) , area(jpi,jpj) , tms(jpi,jpj) , tmu(jpi,jpj) , & 55 & wght (jpi,jpj,2,2) , STAT=ierr(1) ) 56 56 ! 57 ALLOCATE( 57 ALLOCATE( & 58 58 #if defined key_lim2_vp 59 & akappa(jpi,jpj,2,2) , bkappa(jpi,jpj,2,2),&60 & alambd(jpi,jpj,2,2,2,2) ,&59 & akappa(jpi,jpj,2,2) , bkappa(jpi,jpj,2,2), & 60 & alambd(jpi,jpj,2,2,2,2) , & 61 61 #else 62 & tmv(jpi,jpj) , tmf(jpi,jpj), tmi(jpi,jpj),&62 & tmv(jpi,jpj) , tmf(jpi,jpj) , tmi(jpi,jpj) , & 63 63 #endif 64 & S tat=ierr(2) )64 & STAT=ierr(2) ) 65 65 ! 66 66 dom_ice_alloc_2 = MAXVAL(ierr) -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/LIM_SRC_2/ice_2.F90
r2636 r2690 181 181 ice_alloc_2 = MAXVAL( ierr ) 182 182 ! 183 IF( ice_alloc_2 /= 0 ) CALL ctl_warn('ice_alloc_2: failed to allocate arrays .')183 IF( ice_alloc_2 /= 0 ) CALL ctl_warn('ice_alloc_2: failed to allocate arrays') 184 184 ! 185 185 END FUNCTION ice_alloc_2 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/NST_SRC/agrif_oce.F90
r2677 r2690 21 21 LOGICAL , PUBLIC :: ln_spc_dyn = .FALSE. !: 22 22 INTEGER , PUBLIC :: nn_cln_update = 3 !: update frequency 23 REAL(wp), PUBLIC :: rn_sponge_tra = 2800. 24 REAL(wp), PUBLIC :: rn_sponge_dyn = 2800. 23 REAL(wp), PUBLIC :: rn_sponge_tra = 2800. !: sponge coeff. for tracers 24 REAL(wp), PUBLIC :: rn_sponge_dyn = 2800. !: sponge coeff. for dynamics 25 25 26 26 ! !!! OLD namelist names … … 31 31 LOGICAL , PUBLIC :: spongedoneT = .FALSE. !: tracer sponge layer indicator 32 32 LOGICAL , PUBLIC :: spongedoneU = .FALSE. !: dynamics sponge layer indicator 33 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: spe1ur, spe2vr ,spbtr2, spe1ur2, spe2vr2, spbtr3 !: ??? 33 34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: spe1ur , spe2vr , spbtr2 !: ??? 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: spe1ur2, spe2vr2, spbtr3 !: ??? 34 36 35 INTEGER :: tn_id, sn_id,tb_id,sb_id,ta_id,sa_id37 INTEGER :: tn_id, sn_id, tb_id, sb_id, ta_id, sa_id 36 38 INTEGER :: un_id, vn_id, ua_id, va_id 37 39 INTEGER :: e1u_id, e2v_id, sshn_id, gcb_id 38 40 INTEGER :: trn_id, trb_id, tra_id 39 41 40 CONTAINS 42 !!---------------------------------------------------------------------- 43 !! NEMO/NST 3.3.1 , NEMO Consortium (2011) 44 !! $Id$ 45 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 46 !!---------------------------------------------------------------------- 47 CONTAINS 41 48 42 FUNCTION agrif_oce_alloc() 43 IMPLICIT none 44 INTEGER :: agrif_oce_alloc 45 INTEGER :: ierr 46 47 ALLOCATE(spe1ur (jpi,jpj), spe2vr (jpi,jpj), spbtr2(jpi,jpj), & 48 spe1ur2(jpi,jpj), spe2vr2(jpi,jpj), spbtr3(jpi,jpj), & 49 Stat = ierr ) 50 51 agrif_oce_alloc = ierr 52 49 INTEGER FUNCTION agrif_oce_alloc() 50 !!---------------------------------------------------------------------- 51 !! *** FUNCTION agrif_oce_alloc *** 52 !!---------------------------------------------------------------------- 53 ALLOCATE( spe1ur (jpi,jpj) , spe2vr (jpi,jpj) , spbtr2(jpi,jpj) , & 54 & spe1ur2(jpi,jpj) , spe2vr2(jpi,jpj) , spbtr3(jpi,jpj) , STAT = agrif_oce_alloc ) 53 55 END FUNCTION agrif_oce_alloc 54 56 55 57 #endif 56 !!----------------------------------------------------------------------57 !! NEMO/NST 3.3 , NEMO Consortium (2010)58 !! $Id$59 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)60 58 !!====================================================================== 61 59 END MODULE agrif_oce -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/NST_SRC/agrif_user.F90
r2677 r2690 16 16 USE Agrif_Util 17 17 USE nemogcm 18 !! 19 IMPLICIT NONE 20 !! 18 ! 19 IMPLICIT NONE 20 !!---------------------------------------------------------------------- 21 ! 21 22 IF( .NOT. Agrif_Root() ) THEN 22 23 jpni = Agrif_Parent(jpni) … … 59 60 USE obc_par 60 61 #endif 61 !! 62 IMPLICIT NONE 63 !! 62 IMPLICIT NONE 63 !!---------------------------------------------------------------------- 64 64 65 65 ! 0. Initializations … … 91 91 92 92 # if ! defined key_offline 93 93 94 SUBROUTINE Agrif_InitValues_cont 94 95 !!---------------------------------------------------------------------- 95 96 !! *** ROUTINE Agrif_InitValues_cont *** 96 97 !! 97 !! ** Purpose :: Declaration of variables to be interpolated98 !! ** Purpose :: Declaration of variables to be interpolated 98 99 !!---------------------------------------------------------------------- 99 100 USE Agrif_Util … … 106 107 USE agrif_opa_interp 107 108 USE agrif_opa_sponge 108 ! !109 IMPLICIT NONE 110 ! !109 ! 110 IMPLICIT NONE 111 ! 111 112 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: tabtemp 112 113 LOGICAL :: check_namelist 113 114 !!---------------------------------------------------------------------- 114 115 115 ALLOCATE( tabtemp(jpi, jpj, jpk))116 ALLOCATE( tabtemp(jpi,jpj,jpk) ) 116 117 117 118 … … 144 145 145 146 ! Check time steps 146 IF( nint(Agrif_Rhot()) * nint(rdt) .ne.Agrif_Parent(rdt) ) THEN147 IF( NINT(Agrif_Rhot()) * nint(rdt) /= Agrif_Parent(rdt) ) THEN 147 148 WRITE(*,*) 'incompatible time step between grids' 148 149 WRITE(*,*) 'parent grid value : ',Agrif_Parent(rdt) … … 153 154 154 155 ! Check run length 155 IF( Agrif_IRhot() * (Agrif_Parent(nitend)- & 156 Agrif_Parent(nit000)+1) .ne. (nitend-nit000+1) ) THEN 156 IF( Agrif_IRhot() * (Agrif_Parent(nitend)-Agrif_Parent(nit000)+1) /= (nitend-nit000+1) ) THEN 157 157 WRITE(*,*) 'incompatible run length between grids' 158 WRITE(*,*) 'parent grid value : ',(Agrif_Parent(nitend)- & 159 Agrif_Parent(nit000)+1),' time step' 160 WRITE(*,*) 'child grid value : ', & 161 (nitend-nit000+1),' time step' 162 WRITE(*,*) 'value on child grid should be : ', & 163 Agrif_IRhot() * (Agrif_Parent(nitend)- & 164 Agrif_Parent(nit000)+1) 158 WRITE(*,*) 'parent grid value : ', (Agrif_Parent(nitend)-Agrif_Parent(nit000)+1),' time step' 159 WRITE(*,*) 'child grid value : ', (nitend-nit000+1),' time step' 160 WRITE(*,*) 'value on child grid should be: ', Agrif_IRhot() * (Agrif_Parent(nitend)-Agrif_Parent(nit000)+1) 165 161 STOP 166 162 ENDIF … … 176 172 STOP 177 173 ENDIF 178 IF( Agrif_Parent(e3zps_rat) .ne.e3zps_rat ) THEN174 IF( Agrif_Parent(e3zps_rat) /= e3zps_rat ) THEN 179 175 WRITE(*,*) 'incompatible e3zps_rat between grids' 180 176 WRITE(*,*) 'parent grid :',Agrif_Parent(e3zps_rat) … … 195 191 END SUBROUTINE Agrif_InitValues_cont 196 192 193 197 194 SUBROUTINE agrif_declare_var 198 195 !!---------------------------------------------------------------------- … … 204 201 USE oce 205 202 IMPLICIT NONE 203 !!---------------------------------------------------------------------- 206 204 207 205 ! 1. Declaration of the type of variable which have to be interpolated … … 294 292 USE agrif_top_interp 295 293 USE agrif_top_sponge 296 ! !297 IMPLICIT NONE 298 ! !294 ! 295 IMPLICIT NONE 296 ! 299 297 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tabtrtemp 300 298 LOGICAL :: check_namelist 301 299 !!---------------------------------------------------------------------- 302 300 303 ALLOCATE( tabtrtemp(jpi, jpj, jpk, jptra))301 ALLOCATE( tabtrtemp(jpi,jpj,jpk,jptra) ) 304 302 305 303 … … 332 330 333 331 ! Check run length 334 IF( Agrif_IRhot() * (Agrif_Parent(nitend)- & 335 Agrif_Parent(nit000)+1) .ne. (nitend-nit000+1) ) THEN 332 IF( Agrif_IRhot() * (Agrif_Parent(nitend)-Agrif_Parent(nit000)+1) .ne. (nitend-nit000+1) ) THEN 336 333 WRITE(*,*) 'incompatible run length between grids' 337 WRITE(*,*) 'parent grid value : ',(Agrif_Parent(nitend)- & 338 Agrif_Parent(nit000)+1),' time step' 339 WRITE(*,*) 'child grid value : ', & 340 (nitend-nit000+1),' time step' 341 WRITE(*,*) 'value on child grid should be : ', & 342 Agrif_IRhot() * (Agrif_Parent(nitend)- & 343 Agrif_Parent(nit000)+1) 334 WRITE(*,*) 'parent grid value : ', (Agrif_Parent(nitend)-Agrif_Parent(nit000)+1),' time step' 335 WRITE(*,*) 'child grid value : ', (nitend-nit000+1),' time step' 336 WRITE(*,*) 'value on child grid should be : ', Agrif_IRhot() * (Agrif_Parent(nitend)-Agrif_Parent(nit000)+1) 344 337 STOP 345 338 ENDIF … … 436 429 # endif 437 430 438 SUBROUTINE Agrif_detect( g,sizex )431 SUBROUTINE Agrif_detect( kg, ksizex ) 439 432 !!---------------------------------------------------------------------- 440 433 !! *** ROUTINE Agrif_detect *** 441 434 !!---------------------------------------------------------------------- 442 435 USE Agrif_Types 443 ! !444 INTEGER, DIMENSION(2) :: sizex445 INTEGER, DIMENSION( sizex(1),sizex(2)) ::g436 ! 437 INTEGER, DIMENSION(2) :: ksizex 438 INTEGER, DIMENSION(ksizex(1),ksizex(2)) :: kg 446 439 !!---------------------------------------------------------------------- 447 440 ! … … 458 451 USE in_out_manager 459 452 USE lib_mpp 460 !! 461 IMPLICIT NONE 462 !! 453 IMPLICIT NONE 454 ! 463 455 NAMELIST/namagrif/ nn_cln_update, rn_sponge_tra, rn_sponge_dyn, ln_spc_dyn 464 INTEGER :: ierr465 456 !!---------------------------------------------------------------------- 466 457 ! … … 485 476 visc_dyn = rn_sponge_dyn 486 477 ! 487 ierr = agrif_oce_alloc() 488 IF( ierr > 0 ) CALL ctl_warn('agrif sol_oce_alloc: allocation of arrays failed') 478 IF( agrif_oce_alloc() > 0 ) CALL ctl_warn('agrif sol_oce_alloc: allocation of arrays failed') 489 479 ! 490 480 END SUBROUTINE agrif_nemo_init … … 497 487 !!---------------------------------------------------------------------- 498 488 USE dom_oce 499 !! 500 IMPLICIT NONE 501 !! 502 INTEGER :: indglob,indloc,nprocloc,i 489 IMPLICIT NONE 490 ! 491 INTEGER :: indglob, indloc, nprocloc, i 503 492 !!---------------------------------------------------------------------- 504 493 ! … … 517 506 SUBROUTINE Subcalledbyagrif 518 507 !!---------------------------------------------------------------------- 519 !! *** ROUTINE Subcalledbyagrif ***508 !! *** ROUTINE Subcalledbyagrif *** 520 509 !!---------------------------------------------------------------------- 521 510 WRITE(*,*) 'Impossible to be here' -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OFF_SRC/dommsk.F90
r2655 r2690 12 12 USE oce ! ocean dynamics and tracers 13 13 USE dom_oce ! ocean space and time domain 14 USE lib_mpp 15 USE in_out_manager 14 USE lib_mpp ! MPP library 15 USE in_out_manager ! I/O manager 16 16 17 17 IMPLICIT NONE … … 20 20 PUBLIC dom_msk ! routine called by inidom.F90 21 21 22 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: facvol !!volume for degraded regions22 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: facvol !: volume for degraded regions 23 23 24 24 !! * Substitutions … … 31 31 CONTAINS 32 32 33 34 33 SUBROUTINE dom_msk 35 34 !!--------------------------------------------------------------------- … … 46 45 !! tpol : ??? 47 46 !!---------------------------------------------------------------------- 48 USE wrk_nemo, ONLY: iwrk_in_use, iwrk_not_released 49 USE wrk_nemo, ONLY: imsk => iwrk_2d_1 47 USE wrk_nemo, ONLY: iwrk_in_use, iwrk_not_released 48 USE wrk_nemo, ONLY: imsk => iwrk_2d_1 49 ! 50 50 INTEGER :: ji, jk ! dummy loop indices 51 51 INTEGER :: iif, iil, ijf, ijl ! local integers … … 53 53 ! 54 54 IF( iwrk_in_use(2, 1) ) THEN 55 CALL ctl_stop('dom_msk: ERROR: requested workspace arrays unavailable.') ;RETURN55 CALL ctl_stop('dom_msk: requested workspace arrays unavailable') ; RETURN 56 56 END IF 57 57 ! 58 CALL dom_msk_alloc 58 #if defined key_degrad 59 IF( dom_msk_alloc() /= 0 ) CALL ctl_stop('STOP','dom_msk: unable to allocate arrays') 60 #endif 59 61 60 62 ! Interior domain mask (used for global sum) … … 99 101 ENDIF 100 102 ! 101 IF( iwrk_not_released(2, 1) ) CALL ctl_stop('dom_msk: failed to release workspace arrays.')103 IF( iwrk_not_released(2, 1) ) CALL ctl_stop('dom_msk: failed to release workspace arrays') 102 104 ! 103 105 END SUBROUTINE dom_msk 104 106 105 SUBROUTINE dom_msk_alloc() 107 108 INTEGER FUNCTION dom_msk_alloc() 106 109 !!--------------------------------------------------------------------- 107 !! *** ROUTINEdom_msk_alloc ***110 !! *** FUNCTION dom_msk_alloc *** 108 111 !!--------------------------------------------------------------------- 109 #if defined key_degrad 110 INTEGER :: ierr 111 112 ALLOCATE( facvol(jpi,jpj,jpk), STAT=ierr ) 113 IF( ierr /= 0 ) & 114 & CALL ctl_stop('STOP', 'dom_msk : unable to allocate facvol array') 115 #endif 116 112 ALLOCATE( facvol(jpi,jpj,jpk) , STAT=dom_msk_alloc ) 113 IF( dom_msk_alloc /= 0 ) CALL ctl_warn('dom_msk_alloc : failed to allocate facvol array') 114 ! 117 115 END SUBROUTINE dom_msk_alloc 118 116 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OFF_SRC/dtadyn.F90
r2648 r2690 296 296 END SUBROUTINE dta_dyn 297 297 298 298 299 INTEGER FUNCTION dta_dyn_alloc() 299 300 !!--------------------------------------------------------------------- … … 302 303 303 304 ALLOCATE( tdta (jpi,jpj,jpk,2), sdta (jpi,jpj,jpk,2), & 304 &udta (jpi,jpj,jpk,2), vdta (jpi,jpj,jpk,2), &305 &wdta (jpi,jpj,jpk,2), avtdta (jpi,jpj,jpk,2), &305 & udta (jpi,jpj,jpk,2), vdta (jpi,jpj,jpk,2), & 306 & wdta (jpi,jpj,jpk,2), avtdta (jpi,jpj,jpk,2), & 306 307 #if defined key_ldfslp 307 &uslpdta (jpi,jpj,jpk,2), vslpdta (jpi,jpj,jpk,2), &308 &wslpidta(jpi,jpj,jpk,2), wslpjdta(jpi,jpj,jpk,2), &308 & uslpdta (jpi,jpj,jpk,2), vslpdta (jpi,jpj,jpk,2), & 309 & wslpidta(jpi,jpj,jpk,2), wslpjdta(jpi,jpj,jpk,2), & 309 310 #endif 310 311 #if defined key_degrad 311 &ahtudta (jpi,jpj,jpk,2), ahtvdta (jpi,jpj,jpk,2), &312 &ahtwdta (jpi,jpj,jpk,2), &312 & ahtudta (jpi,jpj,jpk,2), ahtvdta (jpi,jpj,jpk,2), & 313 & ahtwdta (jpi,jpj,jpk,2), & 313 314 # if defined key_traldf_eiv 314 &aeiudta (jpi,jpj,jpk,2), aeivdta (jpi,jpj,jpk,2), &315 &aeiwdta (jpi,jpj,jpk,2), &315 & aeiudta (jpi,jpj,jpk,2), aeivdta (jpi,jpj,jpk,2), & 316 & aeiwdta (jpi,jpj,jpk,2), & 316 317 # endif 317 318 #endif 318 319 #if ! defined key_degrad && defined key_traldf_c2d && defined key_traldf_eiv 319 & aeiwdta (jpi,jpj, 2), & 320 #endif 321 322 & hmlddta (jpi,jpj, 2), wspddta (jpi,jpj, 2), & 323 & frlddta (jpi,jpj, 2), qsrdta (jpi,jpj, 2), & 324 & empdta (jpi,jpj, 2), STAT=dta_dyn_alloc ) 325 326 IF( dta_dyn_alloc /= 0 ) CALL ctl_warn('dta_dyn_alloc: failed to allocate facvol array.') 327 320 & aeiwdta (jpi,jpj, 2), & 321 #endif 322 & hmlddta (jpi,jpj, 2), wspddta (jpi,jpj, 2), & 323 & frlddta (jpi,jpj, 2), qsrdta (jpi,jpj, 2), & 324 & empdta (jpi,jpj, 2), STAT=dta_dyn_alloc ) 325 ! 326 IF( dta_dyn_alloc /= 0 ) CALL ctl_warn('dta_dyn_alloc: failed to allocate facvol array') 327 ! 328 328 END FUNCTION dta_dyn_alloc 329 329 330 330 331 SUBROUTINE dynrea( kt, kenr ) … … 353 354 INTEGER :: jkenr 354 355 !!---------------------------------------------------------------------- 355 356 ! 0. Memory allocation 356 ! 357 357 IF( wrk_in_use(3, 1,2,3,4,5,6,7,8,9,10,11,12,13) .OR. & 358 358 wrk_in_use(2, 1,2,3,4,5,6,7,8,9,10) ) THEN 359 CALL ctl_stop('domrea/dta_dyn: requested workspace arrays unavailable') ;RETURN360 END 359 CALL ctl_stop('domrea/dta_dyn: requested workspace arrays unavailable') ; RETURN 360 ENDIF 361 361 362 362 ! cas d'un fichier non periodique : on utilise deux fois le premier et … … 488 488 IF( wrk_not_released(3, 1,2,3,4,5,6,7,8,9,10,11,12,13) .OR. & 489 489 wrk_not_released(2, 1,2,3,4,5,6,7,8,9,10) ) THEN 490 CALL ctl_stop('domrea/dta_dyn: failed to release workspace arrays .')490 CALL ctl_stop('domrea/dta_dyn: failed to release workspace arrays') 491 491 END IF 492 492 ! … … 503 503 !!---------------------------------------------------------------------- 504 504 REAL(wp) :: znspyr !: number of time step per year 505 INTEGER :: ierr 506 !! 505 ! 507 506 NAMELIST/namdyn/ ndtadyn, ndtatot, nsptint, lperdyn, & 508 & cfile_grid_T, cfile_grid_U, cfile_grid_V, cfile_grid_W 509 !!---------------------------------------------------------------------- 510 511 ierr = dta_dyn_alloc() 512 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'dta_dyn_alloc : unable to allocate standard ocean arrays' ) 513 514 ! Define the dynamical input parameters 515 ! ====================================== 516 507 & cfile_grid_T, cfile_grid_U, cfile_grid_V, cfile_grid_W 508 !!---------------------------------------------------------------------- 509 ! 510 IF( dta_dyn_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'dta_dyn_alloc: unable to allocate standard ocean arrays' ) 511 ! 517 512 REWIND( numnam ) ! Read Namelist namdyn : Lateral physics on tracers 518 513 READ ( numnam, namdyn ) 519 514 ! 520 515 IF(lwp) THEN ! control print 521 516 WRITE(numout,*) … … 537 532 ! 538 533 znspyr = nyear_len(1) * rday / rdt 539 rnspdta = znspyr / FLOAT( ndtadyn)534 rnspdta = znspyr / REAL( ndtadyn, wp ) 540 535 rnspdta2 = rnspdta * 0.5 541 536 ! -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OFF_SRC/nemogcm.F90
r2669 r2690 41 41 USE lib_mpp ! distributed memory computing 42 42 #if defined key_iomput 43 USE 43 USE mod_ioclient 44 44 #endif 45 45 … … 165 165 ! This used to be done in par_oce.F90 when they were parameters rather 166 166 ! than variables 167 jpi = ( jpiglo-2*jpreci + (jpni-1) ) / jpni + 2*jpreci !:first dim.168 jpj = ( jpjglo-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj !:second dim.169 jpk = jpkdta !:third dim170 jpim1 = jpi-1 !:inner domain indices171 jpjm1 = jpj-1 !:" "172 jpkm1 = jpk-1 !:" "173 jpij = jpi*jpj !:jpi x j167 jpi = ( jpiglo-2*jpreci + (jpni-1) ) / jpni + 2*jpreci ! first dim. 168 jpj = ( jpjglo-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj ! second dim. 169 jpk = jpkdta ! third dim 170 jpim1 = jpi-1 ! inner domain indices 171 jpjm1 = jpj-1 ! " " 172 jpkm1 = jpk-1 ! " " 173 jpij = jpi*jpj ! jpi x j 174 174 175 175 … … 341 341 END SUBROUTINE nemo_closefile 342 342 343 343 344 SUBROUTINE nemo_alloc 344 !!---------------------------------------------------------------------- 345 !! *** ROUTINE nemo_alloc *** 346 !! 347 !! ** Purpose : Allocate all the dynamic arrays of the OPA modules 348 !! 349 !! ** Method : 350 !!---------------------------------------------------------------------- 351 USE diawri, ONLY: dia_wri_alloc 352 USE dom_oce, ONLY: dom_oce_alloc 353 USE zdf_oce, ONLY: zdf_oce_alloc 354 USE zdfmxl, ONLY: zdf_mxl_alloc 355 USE ldftra_oce, ONLY: ldftra_oce_alloc 356 USE trc_oce, ONLY: trc_oce_alloc 357 345 !!---------------------------------------------------------------------- 346 !! *** ROUTINE nemo_alloc *** 347 !! 348 !! ** Purpose : Allocate all the dynamic arrays of the OPA modules 349 !! 350 !! ** Method : 351 !!---------------------------------------------------------------------- 352 USE diawri, ONLY: dia_wri_alloc 353 USE dom_oce, ONLY: dom_oce_alloc 354 USE zdf_oce, ONLY: zdf_oce_alloc 355 USE zdfmxl, ONLY: zdf_mxl_alloc 356 USE ldftra_oce, ONLY: ldftra_oce_alloc 357 USE trc_oce, ONLY: trc_oce_alloc 358 358 USE wrk_nemo, ONLY: wrk_alloc 359 359 ! 360 360 INTEGER :: ierr 361 361 !!---------------------------------------------------------------------- 362 362 ! 363 363 ierr = oce_alloc () ! ocean 364 364 ierr = ierr + dia_wri_alloc () … … 371 371 ierr = ierr + trc_oce_alloc () ! shared TRC / TRA arrays 372 372 ierr = ierr + wrk_alloc(numout, lwp) 373 373 ! 374 374 IF( lk_mpp ) CALL mpp_sum( ierr ) 375 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'nemo_alloc 375 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'nemo_alloc: unable to allocate standard ocean arrays' ) 376 376 ! 377 377 END SUBROUTINE nemo_alloc 378 378 379 379 380 SUBROUTINE nemo_partition( num_pes ) … … 423 424 END SUBROUTINE nemo_partition 424 425 426 425 427 SUBROUTINE factorise( kfax, kmaxfax, knfax, kn, kerr ) 426 428 !!---------------------------------------------------------------------- … … 439 441 INTEGER, PARAMETER :: ntest = 14 440 442 INTEGER :: ilfax(ntest) 441 443 ! 442 444 ! lfax contains the set of allowed factors. 443 445 data (ilfax(jl),jl=1,ntest) / 16384, 8192, 4096, 2048, 1024, 512, 256, & -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OFF_SRC/zdfmxl.F90
r2648 r2690 41 41 !! *** FUNCTION zdf_mxl_alloc *** 42 42 !!---------------------------------------------------------------------- 43 ALLOCATE( nmln(jpi,jpj), hmld(jpi,jpj), hmlp(jpi,jpj), hmlpt(jpi,jpj), STAT=zdf_mxl_alloc )43 ALLOCATE( nmln(jpi,jpj), hmld(jpi,jpj), hmlp(jpi,jpj), hmlpt(jpi,jpj), STAT=zdf_mxl_alloc ) 44 44 ! 45 45 IF( lk_mpp ) CALL mpp_sum ( zdf_mxl_alloc ) 46 IF( zdf_mxl_alloc /= 0 ) CALL ctl_warn('zdf_mxl_alloc: failed to allocate arrays .')46 IF( zdf_mxl_alloc /= 0 ) CALL ctl_warn('zdf_mxl_alloc: failed to allocate arrays') 47 47 END FUNCTION zdf_mxl_alloc 48 48 … … 65 65 !! ** Action : nmln, hmld, hmlp, hmlpt 66 66 !!---------------------------------------------------------------------- 67 USE wrk_nemo, ONLY: iwrk_in_use, iwrk_not_released68 USE wrk_nemo, ONLY: imld => iwrk_2d_1 ! 2D integer workspace67 USE wrk_nemo, ONLY: iwrk_in_use, iwrk_not_released 68 USE wrk_nemo, ONLY: imld => iwrk_2d_1 ! 2D integer workspace 69 69 !! 70 INTEGER, INTENT( in) :: kt ! ocean time-step index70 INTEGER, INTENT(in) :: kt ! ocean time-step index 71 71 !! 72 INTEGER 73 INTEGER 74 REAL(wp) 75 REAL(wp) 72 INTEGER :: ji, jj, jk ! dummy loop indices 73 INTEGER :: iikn, iiki ! temporary integer within a do loop 74 REAL(wp) :: zrho_c = 0.01_wp ! density criterion for mixed layer depth 75 REAL(wp) :: zavt_c = 5.e-4_wp ! Kz criterion for the turbocline depth 76 76 !!---------------------------------------------------------------------- 77 77 78 IF( iwrk_in_use(2, 1) ) THEN78 IF( iwrk_in_use(2, 1) ) THEN 79 79 CALL ctl_stop('zdf_mxl : requested workspace array unavailable') ; RETURN 80 END 80 ENDIF 81 81 82 82 IF( kt == nit000 ) THEN … … 112 112 IF(ln_ctl) CALL prt_ctl( tab2d_1=REAL(nmln,wp), clinfo1=' nmln : ', tab2d_2=hmlp, clinfo2=' hmlp : ', ovlap=1 ) 113 113 ! 114 IF( iwrk_not_released(2, 1) ) CALL ctl_stop('zdf_mxl 114 IF( iwrk_not_released(2, 1) ) CALL ctl_stop('zdf_mxl: failed to release workspace array') 115 115 ! 116 116 END SUBROUTINE zdf_mxl -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DIA/diaar5.F90
r2633 r2690 65 65 !! ** Purpose : compute and output some AR5 diagnostics 66 66 !!---------------------------------------------------------------------- 67 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released68 USE wrk_nemo, ONLY: zarea_ssh => wrk_2d_1, zbotpres => wrk_2d_269 USE wrk_nemo, ONLY: zrhd => wrk_3d_1, zrhop => wrk_3d_270 USE wrk_nemo, ONLY: ztsn => wrk_4d_171 ! !67 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 68 USE wrk_nemo, ONLY: zarea_ssh => wrk_2d_1 , zbotpres => wrk_2d_2 ! 2D workspace 69 USE wrk_nemo, ONLY: zrhd => wrk_3d_1 , zrhop => wrk_3d_2 ! 3D - 70 USE wrk_nemo, ONLY: ztsn => wrk_4d_1 ! 4D - 71 ! 72 72 INTEGER, INTENT( in ) :: kt ! ocean time-step index 73 ! !73 ! 74 74 INTEGER :: ji, jj, jk ! dummy loop arguments 75 75 REAL(wp) :: zvolssh, zvol, zssh_steric, zztmp, zarho, ztemp, zsal, zmass 76 76 !!-------------------------------------------------------------------- 77 77 78 IF( wrk_in_use(2, 1,2) .OR. &79 wrk_in_use(3, 1,2) .OR. &80 wrk_in_use(4, 1) )THEN78 IF( wrk_in_use(2, 1,2) .OR. & 79 wrk_in_use(3, 1,2) .OR. & 80 wrk_in_use(4, 1) ) THEN 81 81 CALL ctl_stop('dia_ar5: requested workspace arrays unavailable') ; RETURN 82 END 82 ENDIF 83 83 84 84 CALL iom_put( 'cellthc', fse3t(:,:,:) ) … … 160 160 CALL iom_put( 'saltot' , zsal ) 161 161 ! 162 IF( wrk_not_released(2, 1,2) .OR. & 163 wrk_not_released(3, 1,2) .OR. & 164 wrk_not_released(4, 1) )THEN 165 CALL ctl_stop('dia_ar5: failed to release workspace arrays') 166 END IF 162 IF( wrk_not_released(2, 1,2) .OR. & 163 wrk_not_released(3, 1,2) .OR. & 164 wrk_not_released(4, 1) ) CALL ctl_stop('dia_ar5: failed to release workspace arrays') 167 165 ! 168 166 END SUBROUTINE dia_ar5 … … 175 173 !! ** Purpose : initialization for AR5 diagnostic computation 176 174 !!---------------------------------------------------------------------- 177 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released178 USE wrk_nemo, ONLY: wrk_4d_1179 ! !175 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 176 USE wrk_nemo, ONLY: wrk_4d_1 ! 4D workspace 177 ! 180 178 INTEGER :: inum 181 179 INTEGER :: ik … … 185 183 !!---------------------------------------------------------------------- 186 184 ! 187 IF(wrk_in_use(4, 1) )THEN185 IF(wrk_in_use(4, 1) ) THEN 188 186 CALL ctl_stop('dia_ar5_init: requested workspace array unavailable.') ; RETURN 189 END 187 ENDIF 190 188 zsaldta => wrk_4d_1(:,:,:,1:2) 191 189 … … 223 221 ENDIF 224 222 ! 225 IF(wrk_not_released(4, 1))THEN 226 CALL ctl_stop('dia_ar5_init: failed to release workspace array.') 227 END IF 223 IF( wrk_not_released(4, 1) ) CALL ctl_stop('dia_ar5_init: failed to release workspace array') 228 224 ! 229 225 END SUBROUTINE dia_ar5_init -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DIA/diaptr.F90
r2633 r2690 210 210 !!---------------------------------------------------------------------- 211 211 #if defined key_mpp_mpi 212 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released213 USE wrk_nemo, ONLY: zwork => wrk_1d_1212 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 213 USE wrk_nemo, ONLY: zwork => wrk_1d_1 214 214 #endif 215 215 !! … … 265 265 ! 266 266 #if defined key_mpp_mpi 267 IF( wrk_not_released(1, 1) ) CALL ctl_stop('ptr_vjk: ERROR - failed to release workspace array')267 IF( wrk_not_released(1, 1) ) CALL ctl_stop('ptr_vjk: ERROR - failed to release workspace array') 268 268 #endif 269 269 ! … … 282 282 !!---------------------------------------------------------------------- 283 283 #if defined key_mpp_mpi 284 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released285 USE wrk_nemo, ONLY: zwork => wrk_1d_1284 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 285 USE wrk_nemo, ONLY: zwork => wrk_1d_1 286 286 #endif 287 287 !! … … 299 299 ! 300 300 #if defined key_mpp_mpi 301 IF(wrk_in_use(1, 1))THEN 302 CALL ctl_stop('ptr_tjk: requested workspace array unavailable.') 303 RETURN 304 END IF 301 IF( wrk_in_use(1, 1) ) THEN 302 CALL ctl_stop('ptr_tjk: requested workspace array unavailable') ; RETURN 303 ENDIF 305 304 #endif 306 305 … … 324 323 ! 325 324 #if defined key_mpp_mpi 326 IF( wrk_not_released(1, 1) ) CALL ctl_stop('ptr_tjk: failed to release workspace array .')325 IF( wrk_not_released(1, 1) ) CALL ctl_stop('ptr_tjk: failed to release workspace array') 327 326 #endif 328 327 ! … … 532 531 !! ** Method : NetCDF file 533 532 !!---------------------------------------------------------------------- 534 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released535 USE wrk_nemo, ONLY: zphi => wrk_1d_1, zfoo => wrk_1d_2536 USE wrk_nemo, ONLY: z_1 => wrk_2d_1533 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 534 USE wrk_nemo, ONLY: zphi => wrk_1d_1, zfoo => wrk_1d_2 ! 1D workspace 535 USE wrk_nemo, ONLY: z_1 => wrk_2d_1 ! 2D - 537 536 !! 538 537 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 551 550 !!---------------------------------------------------------------------- 552 551 553 IF( wrk_in_use(1, 1,2) .OR. wrk_in_use(2, 1) ) THEN554 CALL ctl_stop('dia_ptr_wri: ERROR:requested workspace arrays unavailable') ; RETURN555 END 552 IF( wrk_in_use(1, 1,2) .OR. wrk_in_use(2, 1) ) THEN 553 CALL ctl_stop('dia_ptr_wri: requested workspace arrays unavailable') ; RETURN 554 ENDIF 556 555 557 556 ! define time axis … … 867 866 ENDIF 868 867 ! 869 IF( wrk_not_released(1, 1,2) .OR. wrk_not_released(2, 1) )&870 CALL ctl_stop('dia_ptr_wri: failed to release workspace arrays')868 IF( wrk_not_released(1, 1,2) .OR. & 869 wrk_not_released(2, 1) ) CALL ctl_stop('dia_ptr_wri: failed to release workspace arrays') 871 870 ! 872 871 END SUBROUTINE dia_ptr_wri -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/closea.F90
r2528 r2690 46 46 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 47 47 !! $Id$ 48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 49 !!---------------------------------------------------------------------- 50 48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 49 !!---------------------------------------------------------------------- 51 50 CONTAINS 52 51 … … 181 180 REAL(wp) :: zze2 182 181 REAL(wp), DIMENSION (jpncs) :: zfwf 183 184 182 !!---------------------------------------------------------------------- 185 183 ! … … 366 364 DO jj = ncsj1(jc), ncsj2(jc) 367 365 DO ji = ncsi1(jc), ncsi2(jc) 368 pbat(ji,jj) = 0. e0366 pbat(ji,jj) = 0._wp 369 367 kbat(ji,jj) = 0 370 368 END DO -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/daymod.F90
r2528 r2690 46 46 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 47 47 !! $Id$ 48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 49 49 !!---------------------------------------------------------------------- 50 51 50 CONTAINS 52 51 … … 68 67 !! - nmonth_len, nyear_len, nmonth_half, nmonth_end through day_mth 69 68 !!---------------------------------------------------------------------- 70 INTEGER ::inbday, idweek71 REAL(wp) :: zjul69 INTEGER :: inbday, idweek 70 REAL(wp) :: zjul 72 71 !!---------------------------------------------------------------------- 73 72 … … 129 128 CALL day( nit000 ) 130 129 131 132 130 END SUBROUTINE day_init 133 131 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/dom_oce.F90
r2623 r2690 259 259 INTEGER, DIMENSION(11) :: ierr 260 260 !!---------------------------------------------------------------------- 261 262 261 ierr(:) = 0 263 262 ! 264 263 ALLOCATE( rdttra(jpk), r2dtra(jpk), mig(jpi), mjg(jpj), STAT=ierr(1) ) 265 264 ! 266 265 ALLOCATE( nimppt(jpnij) , ibonit(jpnij) , nlcit(jpnij) , nlcjt(jpnij) , & 267 266 & njmppt(jpnij) , ibonjt(jpnij) , nldit(jpnij) , nldjt(jpnij) , & 268 267 & nleit(jpnij) , nlejt(jpnij) , STAT=ierr(2) ) 269 270 ALLOCATE( glamt(jpi,jpj) , gphit(jpi,jpj), e1t(jpi,jpj), e2t(jpi,jpj), &271 & glamu(jpi,jpj) , gphiu(jpi,jpj), e1u(jpi,jpj), e2u(jpi,jpj), &272 & glamv(jpi,jpj) , gphiv(jpi,jpj), e1v(jpi,jpj), e2v(jpi,jpj), e1e2t(jpi,jpj) , &273 & glamf(jpi,jpj) , gphif(jpi,jpj), e1f(jpi,jpj), e2f(jpi,jpj), ff (jpi,jpj) , STAT=ierr(3) )274 268 ! 269 ALLOCATE( glamt(jpi,jpj) , gphit(jpi,jpj) , e1t(jpi,jpj) , e2t(jpi,jpj) , & 270 & glamu(jpi,jpj) , gphiu(jpi,jpj) , e1u(jpi,jpj) , e2u(jpi,jpj) , & 271 & glamv(jpi,jpj) , gphiv(jpi,jpj) , e1v(jpi,jpj) , e2v(jpi,jpj) , e1e2t(jpi,jpj) , & 272 & glamf(jpi,jpj) , gphif(jpi,jpj) , e1f(jpi,jpj) , e2f(jpi,jpj) , ff (jpi,jpj) , STAT=ierr(3) ) 273 ! 275 274 ALLOCATE( gdep3w(jpi,jpj,jpk) , e3v(jpi,jpj,jpk) , e3f (jpi,jpj,jpk) , & 276 275 & gdept (jpi,jpj,jpk) , e3t(jpi,jpj,jpk) , e3u (jpi,jpj,jpk) , & 277 276 & gdepw (jpi,jpj,jpk) , e3w(jpi,jpj,jpk) , e3vw(jpi,jpj,jpk) , e3uw(jpi,jpj,jpk) , STAT=ierr(4) ) 278 277 ! 279 278 #if defined key_vvl 280 279 ALLOCATE( gdep3w_1(jpi,jpj,jpk) , e3v_1(jpi,jpj,jpk) , e3f_1 (jpi,jpj,jpk) , & 281 280 & gdept_1 (jpi,jpj,jpk) , e3t_1(jpi,jpj,jpk) , e3u_1 (jpi,jpj,jpk) , & 282 281 & gdepw_1 (jpi,jpj,jpk) , e3w_1(jpi,jpj,jpk) , e3vw_1(jpi,jpj,jpk) , e3uw_1(jpi,jpj,jpk) , & 283 & e3t_b (jpi,jpj,jpk) , e3u_b(jpi,jpj,jpk) , e3v_b (jpi,jpj,jpk), STAT=ierr(5) )284 #endif 285 282 & e3t_b (jpi,jpj,jpk) , e3u_b(jpi,jpj,jpk) , e3v_b (jpi,jpj,jpk) , STAT=ierr(5) ) 283 #endif 284 ! 286 285 ALLOCATE( hu(jpi,jpj) , hur(jpi,jpj) , hu_0(jpi,jpj) , & 287 286 & hv(jpi,jpj) , hvr(jpi,jpj) , hv_0(jpi,jpj) , STAT=ierr(6) ) 288 287 ! 289 288 ALLOCATE( gdept_0(jpk) , gdepw_0(jpk) , & 290 289 & e3t_0 (jpk) , e3w_0 (jpk) , e3tp (jpi,jpj), e3wp(jpi,jpj) , & 291 290 & gsigt (jpk) , gsigw (jpk) , gsi3w(jpk) , & 292 291 & esigt (jpk) , esigw (jpk) , STAT=ierr(7) ) 293 !292 ! 294 293 ALLOCATE( hbatv (jpi,jpj) , hbatf (jpi,jpj) , & 295 294 & hbatt (jpi,jpj) , hbatu (jpi,jpj) , & … … 302 301 & mbkt (jpi,jpj) , mbku (jpi,jpj) , mbkv(jpi,jpj) , STAT=ierr(9) ) 303 302 304 ALLOCATE( tmask(jpi,jpj,jpk) , umask(jpi,jpj,jpk), &305 & vmask(jpi,jpj,jpk) , fmask(jpi,jpj,jpk), STAT=ierr(10) )303 ALLOCATE( tmask(jpi,jpj,jpk) , umask(jpi,jpj,jpk), & 304 & vmask(jpi,jpj,jpk) , fmask(jpi,jpj,jpk), STAT=ierr(10) ) 306 305 307 306 #if defined key_noslip_accurate -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/domcfg.F90
r2528 r2690 24 24 !! NEMO/OPA 3.2 , LODYC-IPSL (2009) 25 25 !! $Id$ 26 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)26 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 27 27 !!---------------------------------------------------------------------- 28 29 28 CONTAINS 30 29 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90
r2651 r2690 126 126 !!---------------------------------------------------------------------- 127 127 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released, iwrk_in_use, iwrk_not_released 128 USE wrk_nemo, ONLY: zwf => wrk_2d_1129 USE wrk_nemo, ONLY: imsk => iwrk_2d_1 130 ! !128 USE wrk_nemo, ONLY: zwf => wrk_2d_1 ! 2D real workspace 129 USE wrk_nemo, ONLY: imsk => iwrk_2d_1 ! 2D integer workspace 130 ! 131 131 INTEGER :: ji, jj, jk ! dummy loop indices 132 INTEGER :: iif, iil, ii0, ii1, ii 133 INTEGER :: ijf, ijl, ij0, ij1 132 INTEGER :: iif, iil, ii0, ii1, ii ! local integers 133 INTEGER :: ijf, ijl, ij0, ij1 ! - - 134 134 !! 135 135 NAMELIST/namlbc/ rn_shlat 136 136 !!--------------------------------------------------------------------- 137 137 138 IF( wrk_in_use(2, 1) .OR. iwrk_in_use(2, 1) ) THEN139 CALL ctl_stop('dom_msk: ERROR:requested workspace arrays unavailable') ; RETURN138 IF( wrk_in_use(2, 1) .OR. iwrk_in_use(2, 1) ) THEN 139 CALL ctl_stop('dom_msk: requested workspace arrays unavailable') ; RETURN 140 140 ENDIF 141 141 … … 436 436 ENDIF 437 437 ! 438 IF( wrk_not_released(2, 1) .OR. &439 iwrk_not_released(2, 1) ) CALL ctl_stop('dom_msk: ERROR: failed to release workspace arrays')438 IF( wrk_not_released(2, 1) .OR. & 439 iwrk_not_released(2, 1) ) CALL ctl_stop('dom_msk: failed to release workspace arrays') 440 440 ! 441 441 END SUBROUTINE dom_msk … … 461 461 !!--------------------------------------------------------------------- 462 462 463 IF(lwp) WRITE(numout,*)464 IF(lwp) WRITE(numout,*) 'dom_msk_nsa : noslip accurate boundary condition'465 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ using Schchepetkin and O Brian scheme'463 IF(lwp) WRITE(numout,*) 464 IF(lwp) WRITE(numout,*) 'dom_msk_nsa : noslip accurate boundary condition' 465 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ using Schchepetkin and O Brian scheme' 466 466 IF( lk_mpp ) CALL ctl_stop( ' mpp version is not yet implemented' ) 467 467 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/domngb.F90
r2636 r2690 8 8 9 9 !!---------------------------------------------------------------------- 10 !! dom_ngb : find the closest grid point from a given on/lat position10 !! dom_ngb : find the closest grid point from a given lon/lat position 11 11 !!---------------------------------------------------------------------- 12 USE dom_oce 13 USE lib_mpp 12 USE dom_oce ! ocean space and time domain 13 USE lib_mpp ! for mppsum 14 14 15 15 IMPLICIT NONE 16 16 PRIVATE 17 17 18 PUBLIC dom_ngb 18 PUBLIC dom_ngb ! routine called in iom.F90 module 19 19 20 20 !!---------------------------------------------------------------------- … … 29 29 !! *** ROUTINE dom_ngb *** 30 30 !! 31 !! ** Purpose : find the closest grid point from a given on/lat position31 !! ** Purpose : find the closest grid point from a given lon/lat position 32 32 !! 33 33 !! ** Method : look for minimum distance in cylindrical projection 34 34 !! -> not good if located at too high latitude... 35 !!36 35 !!---------------------------------------------------------------------- 37 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 38 USE wrk_nemo, ONLY: zglam => wrk_2d_2, & 39 zgphi => wrk_2d_3, & 40 zmask => wrk_2d_4, & 41 zdist => wrk_2d_5 42 IMPLICIT none 36 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 37 USE wrk_nemo, ONLY: zglam => wrk_2d_2 , zgphi => wrk_2d_3 , zmask => wrk_2d_4 , zdist => wrk_2d_5 38 ! 43 39 REAL(wp) , INTENT(in ) :: plon, plat ! longitude,latitude of the point 44 40 INTEGER , INTENT( out) :: kii, kjj ! i-,j-index of the closes grid point 45 41 CHARACTER(len=1), INTENT(in ) :: cdgrid ! grid name 'T', 'U', 'V', 'W' 46 !! 47 INTEGER , DIMENSION(2) :: iloc 48 REAL(wp) :: zlon 49 REAL(wp) :: zmini 42 ! 43 INTEGER , DIMENSION(2) :: iloc 44 REAL(wp) :: zlon, zmini 50 45 !!-------------------------------------------------------------------- 51 52 IF(wrk_in_use(2, 2, 3, 4, 5))THEN 53 CALL ctl_stop('dom_ngb: Requested workspaces already in use.') 54 END IF 55 56 zmask(:,:) = 0. 46 ! 47 IF( wrk_in_use(2, 2,3,4,5) ) CALL ctl_stop('dom_ngb: Requested workspaces already in use') 48 ! 49 zmask(:,:) = 0._wp 57 50 SELECT CASE( cdgrid ) 58 51 CASE( 'U' ) ; zglam(:,:) = glamu(:,:) ; zgphi(:,:) = gphiu(:,:) ; zmask(nldi:nlei,nldj:nlej) = umask(nldi:nlei,nldj:nlej,1) … … 78 71 kjj = iloc(2) + njmpp - 1 79 72 ENDIF 80 81 IF(wrk_not_released(2, 2,3,4,5))THEN 82 CALL ctl_stop('dom_ngb: error releasing workspaces.') 83 ENDIF 84 73 ! 74 IF( wrk_not_released(2, 2,3,4,5) ) CALL ctl_stop('dom_ngb: error releasing workspaces') 75 ! 85 76 END SUBROUTINE dom_ngb 86 77 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/domstp.F90
r2636 r2690 56 56 !! - atfp1 : = 1 - 2*atfp 57 57 !! 58 !! References : 59 !! Bryan, K., 1984, J. Phys. Oceanogr., 14, 666-673. 58 !! References : Bryan, K., 1984, J. Phys. Oceanogr., 14, 666-673. 60 59 !!---------------------------------------------------------------------- 61 60 INTEGER :: jk ! dummy loop indice -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
r2679 r2690 48 48 !!---------------------------------------------------------------------- 49 49 ! 50 ALLOCATE( mut (jpi,jpj,jpk) , muu (jpi,jpj,jpk) , muv (jpi,jpj,jpk) , muf (jpi,jpj,jpk) , &51 & ee_t(jpi,jpj) , ee_u(jpi,jpj) , ee_v(jpi,jpj) , ee_f(jpi,jpj) , &52 & r2dt (jpk) , STAT=dom_vvl_alloc)50 ALLOCATE( mut (jpi,jpj,jpk) , muu (jpi,jpj,jpk) , muv (jpi,jpj,jpk) , muf (jpi,jpj,jpk) , & 51 & ee_t(jpi,jpj) , ee_u(jpi,jpj) , ee_v(jpi,jpj) , ee_f(jpi,jpj) , & 52 & r2dt (jpk) , STAT=dom_vvl_alloc ) 53 53 ! 54 54 IF( lk_mpp ) CALL mpp_sum ( dom_vvl_alloc ) … … 66 66 !!---------------------------------------------------------------------- 67 67 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 68 USE wrk_nemo, ONLY: zs_t => wrk_2d_1, zs_u_1 => wrk_2d_2 69 USE wrk_nemo, ONLY: zs_v_1 => wrk_2d_3 70 !! 71 INTEGER :: ji, jj, jk 68 USE wrk_nemo, ONLY: zs_t => wrk_2d_1 , zs_u_1 => wrk_2d_2 , zs_v_1 => wrk_2d_3 ! 2D workspace 69 ! 70 INTEGER :: ji, jj, jk ! dummy loop indices 72 71 REAL(wp) :: zcoefu , zcoefv , zcoeff ! local scalars 73 72 REAL(wp) :: zv_t_ij, zv_t_ip1j, zv_t_ijp1, zv_t_ip1jp1 ! - - 74 73 !!---------------------------------------------------------------------- 75 74 76 IF( wrk_in_use(2, 1,2,3))THEN77 CALL ctl_stop('dom_vvl: ERROR - requested workspace arrays unavailable.') ; RETURN78 END 75 IF( wrk_in_use(2, 1,2,3) ) THEN 76 CALL ctl_stop('dom_vvl: requested workspace arrays unavailable') ; RETURN 77 ENDIF 79 78 80 79 IF(lwp) THEN … … 190 189 fse3v_b(:,:,:) = fse3v_b(:,:,:) + fse3v_0(:,:,:) 191 190 ! 192 IF(wrk_not_released(2, 1,2,3))THEN 193 CALL ctl_stop('dom_vvl: ERROR - failed to release workspace arrays.') 194 END IF 191 IF( wrk_not_released(2, 1,2,3) ) CALL ctl_stop('dom_vvl: failed to release workspace arrays') 195 192 ! 196 193 END SUBROUTINE dom_vvl -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/domwri.F90
r2633 r2690 63 63 !! masks, depth and vertical scale factors 64 64 !!---------------------------------------------------------------------- 65 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released66 USE wrk_nemo, ONLY: zprt => wrk_2d_1, zprw => wrk_2d_267 USE wrk_nemo, ONLY: zdepu => wrk_3d_1, zdepv => wrk_3d_265 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 66 USE wrk_nemo, ONLY: zprt => wrk_2d_1 , zprw => wrk_2d_2 ! 2D workspace 67 USE wrk_nemo, ONLY: zdepu => wrk_3d_1 , zdepv => wrk_3d_2 ! 3D - 68 68 !! 69 69 INTEGER :: inum0 ! temprary units for 'mesh_mask.nc' file … … 81 81 82 82 IF( wrk_in_use(2, 1,2) .OR. wrk_in_use(3, 1,2) )THEN 83 CALL ctl_stop('dom_wri: ERROR - requested workspace arrays unavailable.') 84 RETURN 83 CALL ctl_stop('dom_wri: requested workspace arrays unavailable') ; RETURN 85 84 END IF 86 85 … … 261 260 END SELECT 262 261 ! 263 IF( wrk_not_released(2, 1,2) .OR. wrk_not_released(3, 1,2) )THEN 264 CALL ctl_stop('dom_wri: ERROR - failed to release workspace arrays.') 265 END IF 262 IF( wrk_not_released(2, 1,2) .OR. & 263 wrk_not_released(3, 1,2) ) CALL ctl_stop('dom_wri: failed to release workspace arrays') 266 264 ! 267 265 END SUBROUTINE dom_wri … … 277 275 !! 2) check which elements have been changed 278 276 !!---------------------------------------------------------------------- 279 !! 280 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 281 USE wrk_nemo, ONLY: ztstref => wrk_2d_1 ! array with different values for each element 282 !! 277 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 278 USE wrk_nemo, ONLY: ztstref => wrk_2d_1 ! array with different values for each element 279 ! 283 280 CHARACTER(len=1) , INTENT(in ) :: cdgrd ! 284 281 REAL(wp), DIMENSION(:,:), INTENT(inout) :: puniq ! … … 290 287 291 288 IF( wrk_in_use(2, 1) ) THEN 292 CALL ctl_stop('dom_uniq : requested workspace array unavailable.') ; RETURN 293 RETURN 294 END IF 289 CALL ctl_stop('dom_uniq: requested workspace array unavailable') ; RETURN 290 ENDIF 295 291 296 292 ! build an array with different values for each element … … 308 304 puniq(nldi:nlei,nldj:nlej) = REAL( COUNT( lldbl(nldi:nlei,nldj:nlej,:), dim = 3 ) , wp ) 309 305 ! 310 IF( wrk_not_released(2, 1) ) THEN 311 CALL ctl_stop('dom_uniq : failed to release workspace array.') ; RETURN 312 END IF 306 IF( wrk_not_released(2, 1) ) CALL ctl_stop('dom_uniq: failed to release workspace array') 313 307 ! 314 308 END SUBROUTINE dom_uniq -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90
r2683 r2690 615 615 !!---------------------------------------------------------------------- 616 616 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 617 USE wrk_nemo, ONLY: zbathy => wrk_2d_1 617 USE wrk_nemo, ONLY: zbathy => wrk_2d_1 ! 2D workspace 618 618 !! 619 619 INTEGER :: ji, jj, jl ! dummy loop indices … … 745 745 !!---------------------------------------------------------------------- 746 746 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 747 USE wrk_nemo, ONLY: zmbk => wrk_2d_1 747 USE wrk_nemo, ONLY: zmbk => wrk_2d_1 ! 2D workspace 748 748 !! 749 749 INTEGER :: ji, jj ! dummy loop indices … … 848 848 !!---------------------------------------------------------------------- 849 849 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 850 USE wrk_nemo, ONLY: zprt => wrk_3d_1 850 USE wrk_nemo, ONLY: zprt => wrk_3d_1 ! 3D workspace 851 851 !! 852 852 INTEGER :: ji, jj, jk ! dummy loop indices … … 861 861 ! 862 862 IF( wrk_in_use(3, 1) ) THEN 863 CALL ctl_stop('zgr_zps: requested workspace unavailable .') ; RETURN863 CALL ctl_stop('zgr_zps: requested workspace unavailable') ; RETURN 864 864 ENDIF 865 865 … … 1142 1142 !!---------------------------------------------------------------------- 1143 1143 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 1144 USE wrk_nemo, ONLY: zenv => wrk_2d_1 , ztmp => wrk_2d_2 , zmsk => wrk_2d_3 1145 USE wrk_nemo, ONLY: zri => wrk_2d_4 , zrj => wrk_2d_5 , zhbat => wrk_2d_6 1144 USE wrk_nemo, ONLY: zenv => wrk_2d_1 , ztmp => wrk_2d_2 , zmsk => wrk_2d_3 ! 2D workspace 1145 USE wrk_nemo, ONLY: zri => wrk_2d_4 , zrj => wrk_2d_5 , zhbat => wrk_2d_6 ! - - 1146 1146 ! 1147 1147 INTEGER :: ji, jj, jk, jl ! dummy loop argument … … 1153 1153 1154 1154 IF( wrk_in_use(2, 1,2,3,4,5,6) ) THEN 1155 CALL ctl_stop('zgr_sco: ERROR -requested workspace arrays unavailable') ; RETURN1155 CALL ctl_stop('zgr_sco: requested workspace arrays unavailable') ; RETURN 1156 1156 ENDIF 1157 1157 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/istate.F90
r2636 r2690 446 446 !! p=integral [ rau*g dz ] 447 447 !!---------------------------------------------------------------------- 448 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released449 USE wrk_nemo, ONLY: zprn => wrk_3d_1448 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 449 USE wrk_nemo, ONLY: zprn => wrk_3d_1 ! 3D workspace 450 450 451 451 USE dynspg ! surface pressure gradient (dyn_spg routine) … … 458 458 !!---------------------------------------------------------------------- 459 459 460 IF(wrk_in_use(3, 1))THEN 461 CALL ctl_stop('istage_uvg: requested workspace array unavailable.') 462 RETURN 463 END IF 460 IF(wrk_in_use(3, 1) ) THEN 461 CALL ctl_stop('istage_uvg: requested workspace array unavailable') ; RETURN 462 ENDIF 464 463 465 464 IF(lwp) WRITE(numout,*) … … 558 557 rotb (:,:,:) = rotn (:,:,:) ! set the before to the now value 559 558 ! 560 IF( wrk_not_released(3, 1))THEN561 CALL ctl_stop('istage_uvg: failed to release workspace array .')562 END 559 IF( wrk_not_released(3, 1) ) THEN 560 CALL ctl_stop('istage_uvg: failed to release workspace array') 561 ENDIF 563 562 ! 564 563 END SUBROUTINE istate_uvg -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90
r2636 r2690 97 97 IF(lwp) WRITE(numout,*) '~~~~~~~ NOT optimal for auto-tasking case' 98 98 ! 99 ALLOCATE( zwu( jpi, 1:jpj+2) , zwv(-1:jpi+2, jpj) , S tat=ierr )99 ALLOCATE( zwu( jpi, 1:jpj+2) , zwv(-1:jpi+2, jpj) , STAT=ierr ) 100 100 IF( lk_mpp ) CALL mpp_sum( ierr ) 101 101 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'div_cur : unable to allocate arrays' ) … … 273 273 !! - update rotb , rotn , the before & now rel. vorticity 274 274 !!---------------------------------------------------------------------- 275 INTEGER, INTENT( in ) :: kt! ocean time-step index276 ! 277 INTEGER :: ji, jj, jk 278 REAL(wp) :: zraur, zdep275 INTEGER, INTENT(in) :: kt ! ocean time-step index 276 ! 277 INTEGER :: ji, jj, jk ! dummy loop indices 278 REAL(wp) :: zraur, zdep ! local scalars 279 279 !!---------------------------------------------------------------------- 280 280 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv.F90
r2636 r2690 13 13 !!---------------------------------------------------------------------- 14 14 USE dom_oce ! ocean space and time domain 15 USE in_out_manager ! I/O manager16 USE lib_mpp ! MPP library17 18 15 USE dynadv_cen2 ! centred flux form advection (dyn_adv_cen2 routine) 19 16 USE dynadv_ubs ! UBS flux form advection (dyn_adv_ubs routine) 20 17 USE dynkeg ! kinetic energy gradient (dyn_keg routine) 21 18 USE dynzad ! vertical advection (dyn_zad routine) 19 USE in_out_manager ! I/O manager 20 USE lib_mpp ! MPP library 22 21 23 22 IMPLICIT NONE -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv_cen2.F90
r2636 r2690 18 18 USE trdmod ! ocean dynamics trends 19 19 USE in_out_manager ! I/O manager 20 USE lib_mpp 20 USE lib_mpp ! MPP library 21 21 USE prtctl ! Print control 22 22 … … 48 48 !!---------------------------------------------------------------------- 49 49 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 50 USE oce , ONLY: zfu => ta ! use ta as 3D workspace 51 USE oce , ONLY: zfv => sa ! use sa as 3D workspace 50 USE oce , ONLY: zfu => ta , zfv => sa ! (ta,sa) used as 3D workspace 52 51 USE wrk_nemo, ONLY: zfu_t => wrk_3d_1 , zfv_t => wrk_3d_4 , zfu_uw =>wrk_3d_6 ! 3D workspaces 53 52 USE wrk_nemo, ONLY: zfu_f => wrk_3d_2 , zfv_f => wrk_3d_5 , zfv_vw =>wrk_3d_7 54 53 USE wrk_nemo, ONLY: zfw => wrk_3d_3 55 ! !54 ! 56 55 INTEGER, INTENT( in ) :: kt ! ocean time-step index 57 ! !56 ! 58 57 INTEGER :: ji, jj, jk ! dummy loop indices 59 REAL(wp) :: zbu, zbv ! temporaryscalars58 REAL(wp) :: zbu, zbv ! local scalars 60 59 !!---------------------------------------------------------------------- 61 60 … … 69 68 IF( wrk_in_use(3, 1,2,3,4,5,6,7) ) THEN 70 69 CALL ctl_stop('dyn_adv_cen2 : requested workspace array unavailable') ; RETURN 71 END 70 ENDIF 72 71 73 72 IF( l_trddyn ) THEN ! Save ua and va trends … … 163 162 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 164 163 ! 165 IF( wrk_not_released(3, 1,2,3,4,5,6,7) ) CALL ctl_stop('dyn_adv_cen2 164 IF( wrk_not_released(3, 1,2,3,4,5,6,7) ) CALL ctl_stop('dyn_adv_cen2: failed to release workspace array') 166 165 ! 167 166 END SUBROUTINE dyn_adv_cen2 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv_ubs.F90
r2636 r2690 69 69 !!---------------------------------------------------------------------- 70 70 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 71 USE oce , ONLY: zfu => ta ! ta used as 3D workspace 72 USE oce , ONLY: zfv => sa ! sa used as 3D workspace 71 USE oce , ONLY: zfu => ta , zfv => sa ! (ta,sa) used as 3D workspace 73 72 USE wrk_nemo, ONLY: zfu_t => wrk_3d_1 , zfv_t =>wrk_3d_4 , zfu_uw =>wrk_3d_6 ! 3D workspace 74 73 USE wrk_nemo, ONLY: zfu_f => wrk_3d_2 , zfv_f =>wrk_3d_5 , zfv_vw =>wrk_3d_7 … … 92 91 ! Check that required workspace arrays are not already in use 93 92 IF( wrk_in_use(3, 1,2,3,4,5,6,7) .OR. wrk_in_use(4, 1,2,3,4) ) THEN 94 CALL ctl_stop('dyn_adv_ubs 93 CALL ctl_stop('dyn_adv_ubs: requested workspace array unavailable') ; RETURN 95 94 ENDIF 96 95 … … 255 254 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 256 255 ! 257 IF( wrk_not_released(3, 1,2,3,4,5,6,7) .OR. &258 wrk_not_released(4, 1,2,3,4) ) CALL ctl_stop('dyn_adv_ubs: failed to release workspace array')256 IF( wrk_not_released(3, 1,2,3,4,5,6,7) .OR. & 257 wrk_not_released(4, 1,2,3,4) ) CALL ctl_stop('dyn_adv_ubs: failed to release workspace array') 259 258 ! 260 259 END SUBROUTINE dyn_adv_ubs -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynbfr.F90
r2547 r2690 13 13 USE dom_oce ! ocean space and time domain variables 14 14 USE zdf_oce ! ocean vertical physics variables 15 16 15 USE trdmod ! ocean active dynamics and tracers trends 17 16 USE trdmod_oce ! ocean variables trends … … 43 42 !! ** Action : (ua,va) momentum trend increased by bottom friction trend 44 43 !!--------------------------------------------------------------------- 45 USE oce, ONLY : ztrduv => tsa ! use tsaas 4D workspace44 USE oce, ONLY: ztrduv => tsa ! tsa used as 4D workspace 46 45 !! 47 46 INTEGER, INTENT(in) :: kt ! ocean time-step index -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90
r2636 r2690 31 31 USE dom_oce ! ocean space and time domain 32 32 USE phycst ! physical constants 33 USE in_out_manager ! I/O manager34 33 USE trdmod ! ocean dynamics trends 35 34 USE trdmod_oce ! ocean variables trends 35 USE in_out_manager ! I/O manager 36 36 USE prtctl ! Print control 37 37 USE lbclnk ! lateral boundary condition … … 77 77 !! - Save the trend (l_trddyn=T) 78 78 !!---------------------------------------------------------------------- 79 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released80 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_2 ! 3D workspace79 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 80 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1 , ztrdv => wrk_3d_2 ! 3D workspace 81 81 !! 82 82 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 193 193 !! ** Action : - Update (ua,va) with the now hydrastatic pressure trend 194 194 !!---------------------------------------------------------------------- 195 USE oce, ONLY : zhpi => ta ! use ta as 3D workspace 196 USE oce, ONLY : zhpj => sa ! use sa as 3D workspace 195 USE oce, ONLY: zhpi => ta , zhpj => sa ! (ta,sa) used as 3D workspace 197 196 !! 198 197 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 208 207 ENDIF 209 208 210 ! Local constant initialization 211 zcoef0 = - grav * 0.5_wp 209 zcoef0 = - grav * 0.5_wp ! Local constant initialization 212 210 213 211 ! Surface value … … 255 253 !! ** Action : - Update (ua,va) with the now hydrastatic pressure trend 256 254 !!---------------------------------------------------------------------- 257 USE oce, ONLY : zhpi => ta ! use ta as 3D workspace 258 USE oce, ONLY : zhpj => sa ! use sa as 3D workspace 255 USE oce, ONLY: zhpi => ta , zhpj => sa ! (ta,sa) used as 3D workspace 259 256 !! 260 257 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 357 354 !! ** Action : - Update (ua,va) with the now hydrastatic pressure trend 358 355 !!---------------------------------------------------------------------- 359 USE oce, ONLY : zhpi => ta ! use ta as 3D workspace 360 USE oce, ONLY : zhpj => sa ! use sa as 3D workspace 356 USE oce, ONLY: zhpi => ta , zhpj => sa ! (ta,sa) used as 3D workspace 361 357 !! 362 358 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 443 439 !! - Save the trend (l_trddyn=T) 444 440 !!---------------------------------------------------------------------- 445 USE oce, ONLY : zhpi => ta ! use ta as 3D workspace 446 USE oce, ONLY : zhpj => sa ! use sa as 3D workspace 441 USE oce, ONLY: zhpi => ta , zhpj => sa ! (ta,sa) used as 3D workspace 447 442 !! 448 443 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 520 515 !! Reference : Song, Mon. Wea. Rev., 126, 3213-3230, 1998. 521 516 !!---------------------------------------------------------------------- 522 USE oce, ONLY : zhpi => ta ! use ta as 3D workspace 523 USE oce, ONLY : zhpj => sa ! use sa as 3D workspace 517 USE oce, ONLY: zhpi => ta , zhpj => sa ! (ta,sa) used as 3D workspace 524 518 !! 525 519 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 600 594 !! Reference: Shchepetkin and McWilliams, J. Geophys. Res., 108(C3), 3090, 2003 601 595 !!---------------------------------------------------------------------- 602 USE oce, ONLY : zhpi => ta ! use ta as 3D workspace 603 USE oce, ONLY : zhpj => sa ! use sa as 3D workspace 604 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 605 USE wrk_nemo, ONLY: drhox => wrk_3d_1 , dzx => wrk_3d_2 606 USE wrk_nemo, ONLY: drhou => wrk_3d_3 , dzu => wrk_3d_4 , rho_i => wrk_3d_5 607 USE wrk_nemo, ONLY: drhoy => wrk_3d_6 , dzy => wrk_3d_7 608 USE wrk_nemo, ONLY: drhov => wrk_3d_8 , dzv => wrk_3d_9 , rho_j => wrk_3d_10 609 USE wrk_nemo, ONLY: drhoz => wrk_3d_11 , dzz => wrk_3d_12 610 USE wrk_nemo, ONLY: drhow => wrk_3d_13 , dzw => wrk_3d_14 611 USE wrk_nemo, ONLY: rho_k => wrk_3d_15 596 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 597 USE oce , ONLY: zhpi => ta , zhpj => sa ! (ta,sa) used as 3D workspace 598 USE wrk_nemo, ONLY: drhox => wrk_3d_1 , dzx => wrk_3d_2 599 USE wrk_nemo, ONLY: drhou => wrk_3d_3 , dzu => wrk_3d_4 , rho_i => wrk_3d_5 600 USE wrk_nemo, ONLY: drhoy => wrk_3d_6 , dzy => wrk_3d_7 601 USE wrk_nemo, ONLY: drhov => wrk_3d_8 , dzv => wrk_3d_9 , rho_j => wrk_3d_10 602 USE wrk_nemo, ONLY: drhoz => wrk_3d_11 , dzz => wrk_3d_12 603 USE wrk_nemo, ONLY: drhow => wrk_3d_13 , dzw => wrk_3d_14 604 USE wrk_nemo, ONLY: rho_k => wrk_3d_15 612 605 !! 613 606 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 620 613 621 614 IF( wrk_in_use(3, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) ) THEN 622 CALL ctl_stop('dyn:hpg_djc 615 CALL ctl_stop('dyn:hpg_djc: requested workspace arrays unavailable') ; RETURN 623 616 ENDIF 624 617 … … 628 621 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ s-coordinate case, density Jacobian with cubic polynomial scheme' 629 622 ENDIF 630 631 623 632 624 ! Local constant initialization … … 820 812 ! 821 813 IF( wrk_not_released(3, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) ) & 822 CALL ctl_stop('dyn:hpg_djc 814 CALL ctl_stop('dyn:hpg_djc: failed to release workspace arrays') 823 815 ! 824 816 END SUBROUTINE hpg_djc … … 833 825 !! Reference: Thiem & Berntsen, Ocean Modelling, In press, 2005. 834 826 !!---------------------------------------------------------------------- 835 USE oce, ONLY : zhpi => ta ! use ta as 3D workspace 836 USE oce, ONLY : zhpj => sa ! use sa as 3D workspace 837 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 838 USE wrk_nemo, ONLY: zdistr => wrk_2d_1 , zsina => wrk_2d_2 , zcosa => wrk_2d_3 839 USE wrk_nemo, ONLY: zhpiorg => wrk_3d_1 , zhpirot => wrk_3d_2 840 USE wrk_nemo, ONLY: zhpitra => wrk_3d_3 , zhpine => wrk_3d_4 841 USE wrk_nemo, ONLY: zhpjorg => wrk_3d_5 , zhpjrot => wrk_3d_6 842 USE wrk_nemo, ONLY: zhpjtra => wrk_3d_7 , zhpjne => wrk_3d_8 827 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 828 USE oce , ONLY: zhpi => ta , zhpj => sa ! (ta,sa) used as 3D workspace 829 USE wrk_nemo, ONLY: zdistr => wrk_2d_1 , zsina => wrk_2d_2 , zcosa => wrk_2d_3 830 USE wrk_nemo, ONLY: zhpiorg => wrk_3d_1 , zhpirot => wrk_3d_2 831 USE wrk_nemo, ONLY: zhpitra => wrk_3d_3 , zhpine => wrk_3d_4 832 USE wrk_nemo, ONLY: zhpjorg => wrk_3d_5 , zhpjrot => wrk_3d_6 833 USE wrk_nemo, ONLY: zhpjtra => wrk_3d_7 , zhpjne => wrk_3d_8 843 834 !! 844 835 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 849 840 !!---------------------------------------------------------------------- 850 841 851 IF( wrk_in_use(2, 1,2,3) .OR.&842 IF( wrk_in_use(2, 1,2,3) .OR. & 852 843 wrk_in_use(3, 1,2,3,4,5,6,7,8) ) THEN 853 CALL ctl_stop('dyn:hpg_rot 854 END 844 CALL ctl_stop('dyn:hpg_rot: requested workspace arrays unavailable') ; RETURN 845 ENDIF 855 846 856 847 IF( kt == nit000 ) THEN … … 1009 1000 END DO 1010 1001 ! 1011 IF( wrk_not_released(2, 1,2,3) .OR.&1012 wrk_not_released(3, 1,2,3,4,5,6,7,8) ) CALL ctl_stop('dyn:hpg_rot 1002 IF( wrk_not_released(2, 1,2,3) .OR. & 1003 wrk_not_released(3, 1,2,3,4,5,6,7,8) ) CALL ctl_stop('dyn:hpg_rot: failed to release workspace arrays') 1013 1004 ! 1014 1005 END SUBROUTINE hpg_rot -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf.F90
r2636 r2690 51 51 !! ** Purpose : compute the lateral ocean dynamics physics. 52 52 !!---------------------------------------------------------------------- 53 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released54 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_255 ! !53 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 54 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1 , ztrdv => wrk_3d_2 55 ! 56 56 INTEGER, INTENT(in) :: kt ! ocean time-step index 57 57 !!---------------------------------------------------------------------- 58 58 59 59 IF( wrk_in_use(3, 1,2) ) THEN 60 CALL ctl_stop('dyn_ldf: requested workspace arrays unavailable .') ; RETURN60 CALL ctl_stop('dyn_ldf: requested workspace arrays unavailable') ; RETURN 61 61 ENDIF 62 62 ! … … 110 110 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 111 111 ! 112 IF( wrk_not_released(3, 1,2) ) CALL ctl_stop('dyn_ldf: failed to release workspace arrays .')112 IF( wrk_not_released(3, 1,2) ) CALL ctl_stop('dyn_ldf: failed to release workspace arrays') 113 113 ! 114 114 END SUBROUTINE dyn_ldf -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilap.F90
r2636 r2690 75 75 !!---------------------------------------------------------------------- 76 76 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 77 USE wrk_nemo, ONLY: zcu => wrk_2d_1 , zcv => wrk_2d_2 ! 3D workspace78 USE wrk_nemo, ONLY: zuf => wrk_3d_1 , zut => wrk_3d_2 ! 3D workspace79 USE wrk_nemo, ONLY: zlu => wrk_3d_3 , zlv => wrk_3d_477 USE wrk_nemo, ONLY: zcu => wrk_2d_1 , zcv => wrk_2d_2 ! 3D workspace 78 USE wrk_nemo, ONLY: zuf => wrk_3d_1 , zut => wrk_3d_2 ! 3D workspace 79 USE wrk_nemo, ONLY: zlu => wrk_3d_3 , zlv => wrk_3d_4 80 80 ! 81 81 INTEGER, INTENT(in) :: kt ! ocean time-step index 82 82 ! 83 INTEGER :: ji, jj, jk ! dummy loop indices84 REAL(wp) :: zua, zva, zbt, ze2u, ze2v ! temporary scalar83 INTEGER :: ji, jj, jk ! dummy loop indices 84 REAL(wp) :: zua, zva, zbt, ze2u, ze2v ! temporary scalar 85 85 !!---------------------------------------------------------------------- 86 86 … … 207 207 END DO ! End of slab 208 208 ! ! =============== 209 IF( wrk_not_released(2, 1,2) 210 wrk_not_released(3, 1,2,3,4) ) CALL ctl_stop('dyn_ldf_bilap 209 IF( wrk_not_released(2, 1,2) .OR. & 210 wrk_not_released(3, 1,2,3,4) ) CALL ctl_stop('dyn_ldf_bilap: failed to release workspace arrays') 211 211 ! 212 212 END SUBROUTINE dyn_ldf_bilap -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilapg.F90
r2636 r2690 20 20 USE ldfdyn_oce ! ocean dynamics lateral physics 21 21 USE zdf_oce ! ocean vertical physics 22 USE in_out_manager ! I/O manager23 22 USE trdmod ! ocean dynamics trends 24 23 USE trdmod_oce ! ocean variables trends 25 24 USE ldfslp ! iso-neutral slopes available 25 USE in_out_manager ! I/O manager 26 26 USE lib_mpp ! MPP library 27 27 USE lbclnk ! ocean lateral boundary conditions (or mpp link) … … 51 51 !!---------------------------------------------------------------------- 52 52 ALLOCATE( zfuw(jpi,jpk) , zfvw (jpi,jpk) , zdiu(jpi,jpk) , zdiv (jpi,jpk) , & 53 & zdju(jpi,jpk) , zdj1u(jpi,jpk) , zdjv(jpi,jpk) , zdj1v(jpi,jpk) , STAT=dyn_ldf_bilapg_alloc )53 & zdju(jpi,jpk) , zdj1u(jpi,jpk) , zdjv(jpi,jpk) , zdj1v(jpi,jpk) , STAT=dyn_ldf_bilapg_alloc ) 54 54 ! 55 55 IF( dyn_ldf_bilapg_alloc /= 0 ) CALL ctl_warn('dyn_ldf_bilapg_alloc: failed to allocate arrays') … … 175 175 !! 'key_trddyn' defined: the trend is saved for diagnostics. 176 176 !!---------------------------------------------------------------------- 177 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released178 USE wrk_nemo, ONLY: ziut => wrk_2d_1, zjuf => wrk_2d_2, zjvt=> wrk_2d_3179 USE wrk_nemo, ONLY: zivf => wrk_2d_4, zdku => wrk_2d_5, zdk1u => wrk_2d_6180 USE wrk_nemo, ONLY: zdkv => wrk_2d_7, zdk1v => wrk_2d_8177 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 178 USE wrk_nemo, ONLY: ziut => wrk_2d_1 , zjuf => wrk_2d_2 , zjvt => wrk_2d_3 179 USE wrk_nemo, ONLY: zivf => wrk_2d_4 , zdku => wrk_2d_5 , zdk1u => wrk_2d_6 180 USE wrk_nemo, ONLY: zdkv => wrk_2d_7 , zdk1v => wrk_2d_8 181 181 !! 182 182 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pu , pv ! 1st call: before horizontal velocity … … 195 195 196 196 IF( wrk_in_use(2, 1,2,3,4,5,6,7,8) ) THEN 197 CALL ctl_stop('dyn:ldfguv : requested workspace arrays unavailable.') ; RETURN197 CALL ctl_stop('dyn:ldfguv: requested workspace arrays unavailable') ; RETURN 198 198 END IF 199 199 ! ! ********** ! ! =============== … … 452 452 ! ! =============== 453 453 454 IF( wrk_not_released(2, 1,2,3,4,5,6,7,8) ) CALL ctl_stop('dyn:ldfguv 454 IF( wrk_not_released(2, 1,2,3,4,5,6,7,8) ) CALL ctl_stop('dyn:ldfguv: failed to release workspace arrays') 455 455 ! 456 456 END SUBROUTINE ldfguv -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_iso.F90
r2636 r2690 55 55 !!---------------------------------------------------------------------- 56 56 ALLOCATE( zfuw(jpi,jpk) , zdiu(jpi,jpk) , zdju(jpi,jpk) , zdj1u(jpi,jpk) , & 57 & zfvw(jpi,jpk) , zdiv(jpi,jpk) , zdjv(jpi,jpk) , zdj1v(jpi,jpk) , STAT=dyn_ldf_iso_alloc )57 & zfvw(jpi,jpk) , zdiv(jpi,jpk) , zdjv(jpi,jpk) , zdj1v(jpi,jpk) , STAT=dyn_ldf_iso_alloc ) 58 58 ! 59 59 IF( dyn_ldf_iso_alloc /= 0 ) CALL ctl_warn('dyn_ldf_iso_alloc: array allocate failed.') -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_lap.F90
r2528 r2690 4 4 !! Ocean dynamics: lateral viscosity trend 5 5 !!====================================================================== 6 !! History : OPA ! 1990-09 (G. Madec) Original code 7 !! 4.0 ! 1991-11 (G. Madec) 8 !! 6.0 ! 1996-01 (G. Madec) statement function for e3 and ahm 9 !! NEMO 1.0 ! 2002-06 (G. Madec) F90: Free form and module 10 !! - ! 2004-08 (C. Talandier) New trends organization 11 !!---------------------------------------------------------------------- 6 12 7 13 !!---------------------------------------------------------------------- … … 9 15 !! using an iso-level harmonic operator 10 16 !!---------------------------------------------------------------------- 11 !! * Modules used12 17 USE oce ! ocean dynamics and tracers 13 18 USE dom_oce ! ocean space and time domain … … 22 27 PRIVATE 23 28 24 !! * Routine accessibility25 29 PUBLIC dyn_ldf_lap ! called by step.F90 26 30 … … 32 36 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 33 37 !! $Id$ 34 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)38 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 35 39 !!---------------------------------------------------------------------- 36 37 40 CONTAINS 38 41 … … 58 61 !! ** Action : - Update (ua,va) with the before iso-level harmonic 59 62 !! mixing trend. 60 !!61 !! History :62 !! ! 90-09 (G. Madec) Original code63 !! ! 91-11 (G. Madec)64 !! ! 96-01 (G. Madec) statement function for e3 and ahm65 !! 8.5 ! 02-06 (G. Madec) F90: Free form and module66 !! 9.0 ! 04-08 (C. Talandier) New trends organization67 63 !!---------------------------------------------------------------------- 68 !! * Arguments 69 INTEGER, INTENT( in ) :: kt ! ocean time-step index 70 71 !! * Local declarations 72 INTEGER :: ji, jj, jk ! dummy loop indices 73 REAL(wp) :: & 74 zua, zva, ze2u, ze1v ! temporary scalars 64 INTEGER, INTENT( in ) :: kt ! ocean time-step index 65 ! 66 INTEGER :: ji, jj, jk ! dummy loop indices 67 REAL(wp) :: zua, zva, ze2u, ze1v ! local scalars 75 68 !!---------------------------------------------------------------------- 76 69 ! 77 70 IF( kt == nit000 ) THEN 78 71 IF(lwp) WRITE(numout,*) … … 80 73 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 81 74 ENDIF 82 83 75 ! ! =============== 84 76 DO jk = 1, jpkm1 ! Horizontal slab … … 86 78 DO jj = 2, jpjm1 87 79 DO ji = fs_2, fs_jpim1 ! vector opt. 88 ze2u = rotb (ji,jj,jk) *fsahmf(ji,jj,jk)*fse3f(ji,jj,jk)89 ze1v = hdivb(ji,jj,jk) *fsahmt(ji,jj,jk)80 ze2u = rotb (ji,jj,jk) * fsahmf(ji,jj,jk) * fse3f(ji,jj,jk) 81 ze1v = hdivb(ji,jj,jk) * fsahmt(ji,jj,jk) 90 82 ! horizontal diffusive trends 91 83 zua = - ( ze2u - rotb (ji,jj-1,jk)*fsahmf(ji,jj-1,jk)*fse3f(ji,jj-1,jk) ) / ( e2u(ji,jj) * fse3u(ji,jj,jk) ) & … … 103 95 END DO ! End of slab 104 96 ! ! =============== 105 106 97 END SUBROUTINE dyn_ldf_lap 107 98 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90
r2636 r2690 50 50 !! * Substitutions 51 51 # include "domzgr_substitute.h90" 52 !!---------------------------------------------------------------------- ---52 !!---------------------------------------------------------------------- 53 53 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 54 54 !! $Id$ 55 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 56 !!------------------------------------------------------------------------- 57 55 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 56 !!---------------------------------------------------------------------- 58 57 CONTAINS 59 58 … … 92 91 !! un,vn now horizontal velocity of next time-step 93 92 !!---------------------------------------------------------------------- 94 USE oce, ONLY : ze3u_f => ta ! use ta as 3D workspace 95 USE oce, ONLY : ze3v_f => sa ! use sa as 3D workspace 96 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 97 USE wrk_nemo, ONLY: zs_t => wrk_2d_1, zs_u_1 => wrk_2d_2, & 98 zs_v_1 => wrk_2d_3 93 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 94 USE oce , ONLY: ze3u_f => ta , ze3v_f => sa ! (ta,sa) used as 3D workspace 95 USE wrk_nemo, ONLY: zs_t => wrk_2d_1 , zs_u_1 => wrk_2d_2 , zs_v_1 => wrk_2d_3 96 ! 99 97 INTEGER, INTENT( in ) :: kt ! ocean time-step index 100 ! !98 ! 101 99 INTEGER :: ji, jj, jk ! dummy loop indices 102 100 #if ! defined key_dynspg_flt 103 101 REAL(wp) :: z2dt ! temporary scalar 104 102 #endif 105 REAL(wp) :: zue3a , zue3n , zue3b ! temporary scalar 106 REAL(wp) :: zve3a , zve3n , zve3b ! - - 107 REAL(wp) :: zuf , zvf ! - - 108 REAL(wp) :: zec ! - - 109 REAL(wp) :: zv_t_ij , zv_t_ip1j ! - - 110 REAL(wp) :: zv_t_ijp1 ! - - 103 REAL(wp) :: zue3a, zue3n, zue3b, zuf ! local scalars 104 REAL(wp) :: zve3a, zve3n, zve3b, zvf ! - - 105 REAL(wp) :: zec, zv_t_ij, zv_t_ip1j, zv_t_ijp1 111 106 !!---------------------------------------------------------------------- 112 107 … … 163 158 CALL obc_dyn( kt ) 164 159 ! 165 IF ( lk_dynspg_exp .OR. lk_dynspg_ts) THEN160 IF( .NOT. lk_dynspg_flt ) THEN 166 161 ! Flather boundary condition : - Update sea surface height on each open boundary 167 ! sshn (= after ssh ) for explicit case 168 ! sshn_b (= after ssha_b) for time-splitting case 162 ! sshn (= after ssh ) for explicit case (lk_dynspg_exp=T) 163 ! sshn_b (= after ssha_b) for time-splitting case (lk_dynspg_ts=T) 169 164 ! - Correct the barotropic velocities 170 165 CALL obc_dyn_bt( kt ) … … 180 175 # elif defined key_bdy 181 176 ! !* BDY open boundaries 182 IF( lk_dynspg_exp .OR. lk_dynspg_ts ) THEN ! except for filtered option 183 CALL bdy_dyn_frs( kt ) 184 ENDIF 177 IF( .NOT. lk_dynspg_flt ) CALL bdy_dyn_frs( kt ) 185 178 # endif 186 179 ! … … 325 318 & tab3d_2=vn, clinfo2=' Vn: ' , mask2=vmask ) 326 319 ! 327 IF( wrk_not_released(2, 1,2,3) ) CALL ctl_stop('dyn_nxt: failed to release workspace arrays .')320 IF( wrk_not_released(2, 1,2,3) ) CALL ctl_stop('dyn_nxt: failed to release workspace arrays') 328 321 ! 329 322 END SUBROUTINE dyn_nxt -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90
r2676 r2690 74 74 !! of the physical meaning of the results. 75 75 !!---------------------------------------------------------------------- 76 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released77 USE wrk_nemo, ONLY: ztrdu => wrk_3d_4, ztrdv => wrk_3d_578 ! !76 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 77 USE wrk_nemo, ONLY: ztrdu => wrk_3d_4 , ztrdv => wrk_3d_5 ! 3D workspace 78 ! 79 79 INTEGER, INTENT(in ) :: kt ! ocean time-step index 80 80 INTEGER, INTENT( out) :: kindic ! solver flag 81 ! !81 ! 82 82 INTEGER :: ji, jj, jk ! dummy loop indices 83 83 REAL(wp) :: z2dt, zg_2 ! temporary scalar … … 179 179 180 180 ! ! allocate dyn_spg arrays 181 IF( lk_dynspg_ts .AND.dyn_spg_ts_alloc() /= 0 ) CALL ctl_stop('STOP', 'dyn_spg_init: failed to allocate ts arrays') 181 IF( lk_dynspg_ts ) THEN 182 IF( dynspg_oce_alloc() /= 0 ) CALL ctl_stop('STOP', 'dyn_spg_init: failed to allocate dynspg_oce arrays') 183 IF( dyn_spg_ts_alloc() /= 0 ) CALL ctl_stop('STOP', 'dyn_spg_init: failed to allocate dynspg_ts arrays') 184 ENDIF 182 185 183 186 ! ! Control of surface pressure gradient scheme options -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_exp.F90
r2618 r2690 40 40 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 41 41 !! $Id$ 42 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)42 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 43 43 !!---------------------------------------------------------------------- 44 44 CONTAINS … … 61 61 !! the surf. pressure gradient trend 62 62 !!--------------------------------------------------------------------- 63 INTEGER, INTENT( in ) :: kt! ocean time-step index63 INTEGER, INTENT(in) :: kt ! ocean time-step index 64 64 !! 65 INTEGER :: ji, jj, jk! dummy loop indices65 INTEGER :: ji, jj, jk ! dummy loop indices 66 66 !!---------------------------------------------------------------------- 67 67 … … 71 71 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ (explicit free surface)' 72 72 ! 73 spgu(:,:) = 0. e0 ; spgv(:,:) = 0.e073 spgu(:,:) = 0._wp ; spgv(:,:) = 0._wp 74 74 ! 75 75 IF( lk_vvl .AND. lwp ) WRITE(numout,*) ' lk_vvl=T : spg is included in dynhpg' -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_flt.F90
r2674 r2690 62 62 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 63 63 !! $Id$ 64 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)64 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 65 65 !!---------------------------------------------------------------------- 66 66 CONTAINS … … 103 103 !! References : Roullet and Madec 1999, JGR. 104 104 !!--------------------------------------------------------------------- 105 USE oce, ONLY : zub => ta ! ta used as workspace 106 USE oce, ONLY : zvb => sa ! ta used as workspace 105 USE oce, ONLY: zub => ta , zvb => sa ! (ta,sa) used as workspace 107 106 !! 108 107 INTEGER, INTENT(in ) :: kt ! ocean time-step index 109 108 INTEGER, INTENT( out) :: kindic ! solver convergence flag (<0 if not converge) 110 109 !! 111 INTEGER :: ji, jj, jk ! dummy loop indices 112 REAL(wp) :: z2dt, z2dtg ! temporary scalars 113 REAL(wp) :: zgcb, zbtd ! - - 114 REAL(wp) :: ztdgu, ztdgv ! - - 110 INTEGER :: ji, jj, jk ! dummy loop indices 111 REAL(wp) :: z2dt, z2dtg, zgcb, zbtd, ztdgu, ztdgv ! local scalars 115 112 !!---------------------------------------------------------------------- 116 113 ! … … 121 118 122 119 ! set to zero free surface specific arrays 123 spgu(:,:) = 0. e0! surface pressure gradient (i-direction)124 spgv(:,:) = 0. e0! surface pressure gradient (j-direction)120 spgu(:,:) = 0._wp ! surface pressure gradient (i-direction) 121 spgv(:,:) = 0._wp ! surface pressure gradient (j-direction) 125 122 126 123 ! read filtered free surface arrays in restart file … … 202 199 DO jj = 2, jpjm1 203 200 DO ji = fs_2, fs_jpim1 ! vector opt. 204 spgu(ji,jj) = 0. e0205 spgv(ji,jj) = 0. e0201 spgu(ji,jj) = 0._wp 202 spgv(ji,jj) = 0._wp 206 203 END DO 207 204 END DO … … 279 276 ncut = 0 280 277 ! if rnorme is 0, the solution is 0, the solver is not called 281 IF( rnorme == 0. e0) THEN282 gcx(:,:) = 0. e0283 res = 0. e0278 IF( rnorme == 0._wp ) THEN 279 gcx(:,:) = 0._wp 280 res = 0._wp 284 281 niter = 0 285 282 ncut = 999 … … 353 350 354 351 SUBROUTINE flt_rst( kt, cdrw ) 355 !!---------------------------------------------------------------------356 !! *** ROUTINE ts_rst ***357 !!358 !! ** Purpose : Read or write filtered free surface arrays in restart file359 !!----------------------------------------------------------------------360 INTEGER , INTENT(in) :: kt ! ocean time-step361 CHARACTER(len=*), INTENT(in) :: cdrw ! "READ"/"WRITE" flag362 !!----------------------------------------------------------------------363 364 IF( TRIM(cdrw) == 'READ' ) THEN365 IF( iom_varid( numror, 'gcx', ldstop = .FALSE. ) > 0 ) THEN352 !!--------------------------------------------------------------------- 353 !! *** ROUTINE ts_rst *** 354 !! 355 !! ** Purpose : Read or write filtered free surface arrays in restart file 356 !!---------------------------------------------------------------------- 357 INTEGER , INTENT(in) :: kt ! ocean time-step 358 CHARACTER(len=*), INTENT(in) :: cdrw ! "READ"/"WRITE" flag 359 !!---------------------------------------------------------------------- 360 ! 361 IF( TRIM(cdrw) == 'READ' ) THEN 362 IF( iom_varid( numror, 'gcx', ldstop = .FALSE. ) > 0 ) THEN 366 363 ! Caution : extra-hallow 367 364 ! gcx and gcxb are defined as: DIMENSION(1-jpr2di:jpi+jpr2di,1-jpr2dj:jpj+jpr2dj) 368 CALL iom_get( numror, jpdom_autoglo, 'gcx' , gcx (1:jpi,1:jpj) )369 CALL iom_get( numror, jpdom_autoglo, 'gcxb', gcxb(1:jpi,1:jpj) )370 IF( neuler == 0 ) gcxb(:,:) = gcx (:,:)371 ELSE372 gcx (:,:) = 0.e0373 gcxb(:,:) = 0.e0374 ENDIF375 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN365 CALL iom_get( numror, jpdom_autoglo, 'gcx' , gcx (1:jpi,1:jpj) ) 366 CALL iom_get( numror, jpdom_autoglo, 'gcxb', gcxb(1:jpi,1:jpj) ) 367 IF( neuler == 0 ) gcxb(:,:) = gcx (:,:) 368 ELSE 369 gcx (:,:) = 0.e0 370 gcxb(:,:) = 0.e0 371 ENDIF 372 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 376 373 ! Caution : extra-hallow 377 374 ! gcx and gcxb are defined as: DIMENSION(1-jpr2di:jpi+jpr2di,1-jpr2dj:jpj+jpr2dj) 378 CALL iom_rstput( kt, nitrst, numrow, 'gcx' , gcx (1:jpi,1:jpj) )379 CALL iom_rstput( kt, nitrst, numrow, 'gcxb', gcxb(1:jpi,1:jpj) )380 ENDIF381 !375 CALL iom_rstput( kt, nitrst, numrow, 'gcx' , gcx (1:jpi,1:jpj) ) 376 CALL iom_rstput( kt, nitrst, numrow, 'gcxb', gcxb(1:jpi,1:jpj) ) 377 ENDIF 378 ! 382 379 END SUBROUTINE flt_rst 383 380 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90
r2636 r2690 5 5 !! planetary vorticity trends 6 6 !!====================================================================== 7 !! History : OPA ! 8 !! 5.0 ! 9 !! 6.0 ! 10 !! 8.5 !2002-08 (G. Madec) F90: Free form and module11 !! NEMO 1.0 !2004-02 (G. Madec) vor_een: Original code12 !! - ! 13 !! - ! 14 !! 2.0 ! 15 !! 3.2 ! 16 !! 3.3 ! 7 !! History : OPA ! 1989-12 (P. Andrich) vor_ens: Original code 8 !! 5.0 ! 1991-11 (G. Madec) vor_ene, vor_mix: Original code 9 !! 6.0 ! 1996-01 (G. Madec) s-coord, suppress work arrays 10 !! NEMO 0.5 ! 2002-08 (G. Madec) F90: Free form and module 11 !! 1.0 ! 2004-02 (G. Madec) vor_een: Original code 12 !! - ! 2003-08 (G. Madec) add vor_ctl 13 !! - ! 2005-11 (G. Madec) add dyn_vor (new step architecture) 14 !! 2.0 ! 2006-11 (G. Madec) flux form advection: add metric term 15 !! 3.2 ! 2009-04 (R. Benshila) vvl: correction of een scheme 16 !! 3.3 ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase 17 17 !!---------------------------------------------------------------------- 18 18 … … 58 58 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 59 59 !! $Id$ 60 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)60 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 61 61 !!---------------------------------------------------------------------- 62 62 CONTAINS … … 71 71 !! and planetary vorticity trends) ('key_trddyn') 72 72 !!---------------------------------------------------------------------- 73 USE oce, ONLY : ztrdu => ta ! use ta as 3D workspace 74 USE oce, ONLY : ztrdv => sa ! use sa as 3D workspace 75 !! 73 USE oce, ONLY: ztrdu => ta , ztrdv => sa ! (ta,sa) used as 3D workspace 74 ! 76 75 INTEGER, INTENT( in ) :: kt ! ocean time-step index 77 76 !!---------------------------------------------------------------------- 78 77 ! 79 78 ! ! vorticity term 80 79 SELECT CASE ( nvor ) ! compute the vorticity trend and add it to the general trend … … 171 170 ! 172 171 END SELECT 173 172 ! 174 173 ! ! print sum trends (used for debugging) 175 IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor - Ua: ', mask1=umask, &174 IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor - Ua: ', mask1=umask, & 176 175 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 177 176 ! … … 205 204 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 206 205 !!---------------------------------------------------------------------- 207 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released208 USE wrk_nemo, ONLY: zwx => wrk_2d_1, zwy => wrk_2d_2, zwz => wrk_2d_3209 ! !206 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 207 USE wrk_nemo, ONLY: zwx => wrk_2d_1 , zwy => wrk_2d_2 , zwz => wrk_2d_3 ! 2D workspace 208 ! 210 209 INTEGER , INTENT(in ) :: kt ! ocean time-step index 211 210 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; … … 213 212 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 214 213 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 215 !! 216 INTEGER :: ji, jj, jk ! dummy loop indices 217 REAL(wp) :: zx1, zy1, zfact2 ! temporary scalars 218 REAL(wp) :: zx2, zy2 ! " " 214 ! 215 INTEGER :: ji, jj, jk ! dummy loop indices 216 REAL(wp) :: zx1, zy1, zfact2, zx2, zy2 ! local scalars 219 217 !!---------------------------------------------------------------------- 220 218 … … 286 284 END DO ! End of slab 287 285 ! ! =============== 288 IF( wrk_not_released(2, 1,2,3) ) CALL ctl_stop('dyn:vor_ene: failed to release workspace arrays .')286 IF( wrk_not_released(2, 1,2,3) ) CALL ctl_stop('dyn:vor_ene: failed to release workspace arrays') 289 287 ! 290 288 END SUBROUTINE vor_ene … … 322 320 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 323 321 !!---------------------------------------------------------------------- 324 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 325 USE wrk_nemo, ONLY: zwx => wrk_2d_4, zwy => wrk_2d_5, & 326 zwz => wrk_2d_6, zww => wrk_2d_7 327 !! 322 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 323 USE wrk_nemo, ONLY: zwx => wrk_2d_4 , zwy => wrk_2d_5 , zwz => wrk_2d_6 , zww => wrk_2d_7 ! 2D workspace 324 ! 328 325 INTEGER, INTENT(in) :: kt ! ocean timestep index 329 ! !326 ! 330 327 INTEGER :: ji, jj, jk ! dummy loop indices 331 REAL(wp) :: zfact1, zua, zcua, zx1, zy1 ! temporaryscalars332 REAL(wp) :: zfact2, zva, zcva, zx2, zy2 ! " "328 REAL(wp) :: zfact1, zua, zcua, zx1, zy1 ! local scalars 329 REAL(wp) :: zfact2, zva, zcva, zx2, zy2 ! - - 333 330 !!---------------------------------------------------------------------- 334 331 … … 438 435 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 439 436 !!---------------------------------------------------------------------- 440 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released441 USE wrk_nemo, ONLY: zwx => wrk_2d_4, zwy => wrk_2d_5, zwz => wrk_2d_6442 ! !437 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 438 USE wrk_nemo, ONLY: zwx => wrk_2d_4, zwy => wrk_2d_5, zwz => wrk_2d_6 ! 2D workspace 439 ! 443 440 INTEGER , INTENT(in ) :: kt ! ocean time-step index 444 441 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; … … 446 443 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 447 444 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 448 ! !445 ! 449 446 INTEGER :: ji, jj, jk ! dummy loop indices 450 447 REAL(wp) :: zfact1, zuav, zvau ! temporary scalars … … 452 449 453 450 IF( wrk_in_use(2, 4,5,6) ) THEN 454 CALL ctl_stop('dyn:vor_ens 451 CALL ctl_stop('dyn:vor_ens: requested workspace arrays unavailable') ; RETURN 455 452 END IF 456 453 … … 526 523 END DO ! End of slab 527 524 ! ! =============== 528 IF( wrk_not_released(2, 4,5,6) ) CALL ctl_stop('dyn:vor_ens 525 IF( wrk_not_released(2, 4,5,6) ) CALL ctl_stop('dyn:vor_ens: failed to release workspace arrays') 529 526 ! 530 527 END SUBROUTINE vor_ens … … 551 548 !!---------------------------------------------------------------------- 552 549 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 553 USE wrk_nemo, ONLY: zwx => wrk_2d_1 , zwy => wrk_2d_2 , zwz => wrk_2d_3 550 USE wrk_nemo, ONLY: zwx => wrk_2d_1 , zwy => wrk_2d_2 , zwz => wrk_2d_3 ! 2D workspace 554 551 USE wrk_nemo, ONLY: ztnw => wrk_2d_4 , ztne => wrk_2d_5 555 552 USE wrk_nemo, ONLY: ztsw => wrk_2d_6 , ztse => wrk_2d_7 556 553 #if defined key_vvl 557 USE wrk_nemo, ONLY: ze3f => wrk_3d_1 554 USE wrk_nemo, ONLY: ze3f => wrk_3d_1 ! 3D workspace (lk_vvl=T) 558 555 #endif 559 556 ! … … 568 565 REAL(wp) :: zfac12, zua, zva ! local scalars 569 566 #if ! defined key_vvl 570 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE :: ze3f 567 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE :: ze3f ! lk_vvl=F, ze3f=1/e3f saved one for all 571 568 #endif 572 569 !!---------------------------------------------------------------------- 573 570 574 571 IF( wrk_in_use(2, 1,2,3,4,5,6,7) .OR. wrk_in_use(3, 1) ) THEN 575 CALL ctl_stop('dyn:vor_een : requested workspace arrays unavailable.') ; RETURN572 CALL ctl_stop('dyn:vor_een: requested workspace arrays unavailable') ; RETURN 576 573 ENDIF 577 574 … … 593 590 ze3f(ji,jj,jk) = ( fse3t(ji,jj+1,jk)*tmask(ji,jj+1,jk) + fse3t(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) & 594 591 & + fse3t(ji,jj ,jk)*tmask(ji,jj ,jk) + fse3t(ji+1,jj ,jk)*tmask(ji+1,jj ,jk) ) * 0.25 595 IF( ze3f(ji,jj,jk) /= 0. e0 ) ze3f(ji,jj,jk) = 1.e0/ ze3f(ji,jj,jk)592 IF( ze3f(ji,jj,jk) /= 0._wp ) ze3f(ji,jj,jk) = 1._wp / ze3f(ji,jj,jk) 596 593 END DO 597 594 END DO … … 600 597 ENDIF 601 598 602 zfac12 = 1. e0 / 12.e0! Local constant initialization599 zfac12 = 1._wp / 12._wp ! Local constant initialization 603 600 604 601 … … 673 670 END DO ! End of slab 674 671 ! ! =============== 675 IF( wrk_not_released(2, 1,2,3,4,5,6,7) .OR. &676 wrk_not_released(3, 1) ) CALL ctl_stop('dyn:vor_een: failed to release workspace arrays')672 IF( wrk_not_released(2, 1,2,3,4,5,6,7) .OR. & 673 wrk_not_released(3, 1) ) CALL ctl_stop('dyn:vor_een: failed to release workspace arrays') 677 674 ! 678 675 END SUBROUTINE vor_een … … 686 683 !! tracer advection schemes 687 684 !!---------------------------------------------------------------------- 688 INTEGER :: ioptio ! temporary integer 685 INTEGER :: ioptio ! local integer 686 !! 689 687 NAMELIST/namdyn_vor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_mix, ln_dynvor_een 690 688 !!---------------------------------------------------------------------- -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynzad.F90
r2636 r2690 4 4 !! Ocean dynamics : vertical advection trend 5 5 !!====================================================================== 6 !! History : 6.0 ! 91-01 (G. Madec) Original code 7 !! 7.0 ! 91-11 (G. Madec) 8 !! 7.5 ! 96-01 (G. Madec) statement function for e3 9 !! 8.5 ! 02-07 (G. Madec) j-k-i case: Original code 10 !! 8.5 ! 02-07 (G. Madec) Free form, F90 6 !! History : OPA ! 1991-01 (G. Madec) Original code 7 !! 7.0 ! 1991-11 (G. Madec) 8 !! 7.5 ! 1996-01 (G. Madec) statement function for e3 9 !! NEMO 0.5 ! 2002-07 (G. Madec) Free form, F90 11 10 !!---------------------------------------------------------------------- 12 11 … … 34 33 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 35 34 !! $Id$ 36 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)35 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 37 36 !!---------------------------------------------------------------------- 38 39 37 CONTAINS 40 38 … … 55 53 !! - Save the trends in (ztrdu,ztrdv) ('key_trddyn') 56 54 !!---------------------------------------------------------------------- 57 USE oce, ONLY: zwuw => ta ! use ta as 3D workspace58 USE oce, ONLY: zwvw => sa ! use sa as 3D workspace59 55 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 60 USE wrk_nemo, ONLY: zww => wrk_2d_1 61 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_2 62 !! 56 USE wrk_nemo, ONLY: zww => wrk_2d_1 ! 2D workspace 57 USE oce , ONLY: zwuw => ta , zwvw => sa ! (ta,sa) used as 3D workspace 58 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1 , ztrdv => wrk_3d_2 ! 3D workspace 59 ! 63 60 INTEGER, INTENT(in) :: kt ! ocean time-step inedx 64 ! !61 ! 65 62 INTEGER :: ji, jj, jk ! dummy loop indices 66 63 REAL(wp) :: zua, zva ! temporary scalars 67 64 !!---------------------------------------------------------------------- 68 65 69 IF( wrk_in_use(2, 1) .OR. & 70 wrk_in_use(3, 1,2) ) THEN 66 IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 1,2) ) THEN 71 67 CALL ctl_stop('dyn_zad: requested workspace arrays unavailable') ; RETURN 72 END 68 ENDIF 73 69 74 70 IF( kt == nit000 ) THEN … … 126 122 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 127 123 ! 128 IF( wrk_not_released(2, 1) .OR.&124 IF( wrk_not_released(2, 1) .OR. & 129 125 wrk_not_released(3, 1,2) ) CALL ctl_stop('dyn_zad: failed to release workspace arrays') 130 126 ! -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf.F90
r2636 r2690 53 53 !! ** Purpose : compute the vertical ocean dynamics physics. 54 54 !!--------------------------------------------------------------------- 55 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released56 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_255 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 56 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1 , ztrdv => wrk_3d_2 ! 3D workspace 57 57 !! 58 58 INTEGER, INTENT( in ) :: kt ! ocean time-step index 59 59 !!--------------------------------------------------------------------- 60 60 61 IF(wrk_in_use(3, 1,2))THEN 62 CALL ctl_stop('dyn_zdf: requested workspace arrays unavailable.') 63 RETURN 61 IF( wrk_in_use(3, 1,2) ) THEN 62 CALL ctl_stop('dyn_zdf: requested workspace arrays unavailable') ; RETURN 64 63 END IF 65 64 ! ! set time step … … 78 77 CASE ( 1 ) ; CALL dyn_zdf_imp( kt, r2dt ) ! implicit scheme 79 78 ! 80 CASE ( -1 ) ! esopa: test all possibility with control print79 CASE ( -1 ) ! esopa: test all possibility with control print 81 80 CALL dyn_zdf_exp( kt, r2dt ) 82 81 CALL prt_ctl( tab3d_1=ua, clinfo1=' zdf0 - Ua: ', mask1=umask, & 83 &tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )82 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 84 83 CALL dyn_zdf_imp( kt, r2dt ) 85 84 CALL prt_ctl( tab3d_1=ua, clinfo1=' zdf1 - Ua: ', mask1=umask, & 86 &tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )85 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 87 86 END SELECT 88 87 … … 96 95 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 97 96 ! 98 IF(wrk_not_released(3, 1,2))THEN 99 CALL ctl_stop('dyn_zdf: failed to release workspace arrays.') 100 END IF 97 IF( wrk_not_released(3, 1,2) ) CALL ctl_stop('dyn_zdf: failed to release workspace arrays') 101 98 ! 102 99 END SUBROUTINE dyn_zdf -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_exp.F90
r2636 r2690 6 6 !! History : OPA ! 1990-10 (B. Blanke) Original code 7 7 !! 8.0 ! 1997-05 (G. Madec) vertical component of isopycnal 8 !! NEMO 1.0 ! 1002-08 (G. Madec) F90: Free form and module8 !! NEMO 0.5 ! 2002-08 (G. Madec) F90: Free form and module 9 9 !! 3.3 ! 2010-04 (M. Leclair, G. Madec) Forcing averaged over 2 time steps 10 10 !!---------------------------------------------------------------------- … … 55 55 !!--------------------------------------------------------------------- 56 56 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 57 USE oce , ONLY :zwx => ta , zwy => sa ! (ta,sa) used as 3D workspace57 USE oce , ONLY: zwx => ta , zwy => sa ! (ta,sa) used as 3D workspace 58 58 USE wrk_nemo, ONLY: zwz => wrk_3d_1 , zww => wrk_3d_2 ! 3D workspace 59 59 ! … … 61 61 REAL(wp), INTENT(in) :: p2dt ! time-step 62 62 ! 63 INTEGER :: ji, jj, jk, jl! dummy loop indices64 REAL(wp) :: zrau0r, zlavmr, zua, zva ! temporaryscalars63 INTEGER :: ji, jj, jk, jl ! dummy loop indices 64 REAL(wp) :: zrau0r, zlavmr, zua, zva ! local scalars 65 65 !!---------------------------------------------------------------------- 66 66 … … 120 120 END DO ! End of time splitting 121 121 ! 122 IF( wrk_not_released(3, 1,2) ) CALL ctl_stop('dyn_zdf_exp 122 IF( wrk_not_released(3, 1,2) ) CALL ctl_stop('dyn_zdf_exp: failed to release workspace arrays') 123 123 ! 124 124 END SUBROUTINE dyn_zdf_exp -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90
r2636 r2690 1 1 MODULE dynzdf_imp 2 !!====================================================================== ========2 !!====================================================================== 3 3 !! *** MODULE dynzdf_imp *** 4 4 !! Ocean dynamics: vertical component(s) of the momentum mixing trend 5 !!====================================================================== ========5 !!====================================================================== 6 6 !! History : OPA ! 1990-10 (B. Blanke) Original code 7 7 !! 8.0 ! 1997-05 (G. Madec) vertical component of isopycnal 8 !! NEMO 1.0! 2002-08 (G. Madec) F90: Free form and module8 !! NEMO 0.5 ! 2002-08 (G. Madec) F90: Free form and module 9 9 !! 3.3 ! 2010-04 (M. Leclair, G. Madec) Forcing averaged over 2 time steps 10 10 !!---------------------------------------------------------------------- 11 11 12 12 !!---------------------------------------------------------------------- 13 !! dyn_zdf_imp : update the momentum trend with the vertical diffu- 14 !! sion using a implicit time-stepping. 13 !! dyn_zdf_imp : update the momentum trend with the vertical diffusion using a implicit time-stepping 15 14 !!---------------------------------------------------------------------- 16 15 USE oce ! ocean dynamics and tracers … … 55 54 !! ** Action : - Update (ua,va) arrays with the after vertical diffusive mixing trend. 56 55 !!--------------------------------------------------------------------- 57 USE oce, ONLY : zwd => ta ! use ta as workspace 58 USE oce, ONLY : zws => sa ! use sa as workspace 59 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 60 USE wrk_nemo, ONLY: zwi => wrk_3d_3 ! workspace 61 !! 62 INTEGER , INTENT( in ) :: kt ! ocean time-step index 63 REAL(wp), INTENT( in ) :: p2dt ! vertical profile of tracer time-step 64 !! 65 INTEGER :: ji, jj, jk ! dummy loop indices 66 REAL(wp) :: z1_p2dt, zcoef ! temporary scalars 67 REAL(wp) :: zzwi, zzws, zrhs ! temporary scalars 56 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 57 USE oce , ONLY: zwd => ta , zws => sa ! (ta,sa) used as 3D workspace 58 USE wrk_nemo, ONLY: zwi => wrk_3d_3 ! 3D workspace 59 !! 60 INTEGER , INTENT(in) :: kt ! ocean time-step index 61 REAL(wp), INTENT(in) :: p2dt ! vertical profile of tracer time-step 62 !! 63 INTEGER :: ji, jj, jk ! dummy loop indices 64 REAL(wp) :: z1_p2dt, zcoef, zzwi, zzws, zrhs ! local scalars 68 65 !!---------------------------------------------------------------------- 69 66 70 IF(wrk_in_use(3, 3))THEN 71 CALL ctl_stop('dyn_zdf_imp : requested workspace array unavailable.') 72 RETURN 67 IF( wrk_in_use(3, 3) ) THEN 68 CALL ctl_stop('dyn_zdf_imp: requested workspace array unavailable') ; RETURN 73 69 END IF 74 70 … … 260 256 END DO 261 257 ! 262 IF(wrk_not_released(3, 3))THEN 263 CALL ctl_stop('dyn_zdf_imp : failed to release workspace array.') 264 END IF 258 IF( wrk_not_released(3, 3) ) CALL ctl_stop('dyn_zdf_imp: failed to release workspace array') 265 259 ! 266 260 END SUBROUTINE dyn_zdf_imp -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90
r2636 r2690 29 29 USE obc_oce 30 30 USE bdy_oce 31 USE diaar5, ONLY 31 USE diaar5, ONLY: lk_diaar5 32 32 USE iom 33 USE sbcrnf, ONLY : h_rnf, nk_rnf! River runoff33 USE sbcrnf, ONLY: h_rnf, nk_rnf ! River runoff 34 34 #if defined key_agrif 35 35 USE agrif_opa_update … … 52 52 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 53 53 !! $Id$ 54 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 55 !!---------------------------------------------------------------------- 56 54 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 55 !!---------------------------------------------------------------------- 57 56 CONTAINS 58 57 … … 76 75 !! Reference : Leclair, M., and G. Madec, 2009, Ocean Modelling. 77 76 !!---------------------------------------------------------------------- 78 USE oce, ONLY : z3d => ta ! use ta as 3D workspace79 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released80 USE wrk_nemo, ONLY: zhdiv => wrk_2d_1, z2d => wrk_2d_281 ! !77 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 78 USE oce , ONLY: z3d => ta ! ta used as 3D workspace 79 USE wrk_nemo, ONLY: zhdiv => wrk_2d_1 , z2d => wrk_2d_2 ! 2D workspace 80 ! 82 81 INTEGER, INTENT(in) :: kt ! time step 83 !! 84 INTEGER :: ji, jj, jk ! dummy loop indices 85 REAL(wp) :: zcoefu, zcoefv, zcoeff ! temporary scalars 86 REAL(wp) :: z2dt, z1_2dt, z1_rau0 ! temporary scalars 82 ! 83 INTEGER :: ji, jj, jk ! dummy loop indices 84 REAL(wp) :: zcoefu, zcoefv, zcoeff, z2dt, z1_2dt, z1_rau0 ! local scalars 87 85 !!---------------------------------------------------------------------- 88 86 … … 97 95 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 98 96 ! 99 wn(:,:,jpk) = 0. e0! bottom boundary condition: w=0 (set once for all)97 wn(:,:,jpk) = 0._wp ! bottom boundary condition: w=0 (set once for all) 100 98 ! 101 99 IF( lk_vvl ) THEN ! before and now Sea SSH at u-, v-, f-points (vvl case only) … … 150 148 hv(:,:) = hv_0(:,:) + sshv_n(:,:) 151 149 ! ! now masked inverse of the ocean depth (at u- and v-points) 152 hur(:,:) = umask(:,:,1) / ( hu(:,:) + 1. e0- umask(:,:,1) )153 hvr(:,:) = vmask(:,:,1) / ( hv(:,:) + 1. e0- vmask(:,:,1) )150 hur(:,:) = umask(:,:,1) / ( hu(:,:) + 1._wp - umask(:,:,1) ) 151 hvr(:,:) = vmask(:,:,1) / ( hv(:,:) + 1._wp - vmask(:,:,1) ) 154 152 ! 155 153 ENDIF … … 157 155 CALL div_cur( kt ) ! Horizontal divergence & Relative vorticity 158 156 ! 159 z2dt = 2. * rdt! set time step size (Euler/Leapfrog)160 IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt157 z2dt = 2._wp * rdt ! set time step size (Euler/Leapfrog) 158 IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt 161 159 162 160 ! !------------------------------! 163 161 ! ! After Sea Surface Height ! 164 162 ! !------------------------------! 165 zhdiv(:,:) = 0. e0163 zhdiv(:,:) = 0._wp 166 164 DO jk = 1, jpkm1 ! Horizontal divergence of barotropic transports 167 165 zhdiv(:,:) = zhdiv(:,:) + fse3t(:,:,jk) * hdivn(:,:,jk) … … 171 169 ! because emp_b field is initialized with the vlaues of emp field. Hence, 0.5 * ( emp + emp_b ) = emp 172 170 z1_rau0 = 0.5 / rau0 173 ssha(:,:) = ( sshb(:,:) - z2dt * ( z1_rau0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) ) ) & 174 & * tmask(:,:,1) 171 ssha(:,:) = ( sshb(:,:) - z2dt * ( z1_rau0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) ) ) * tmask(:,:,1) 175 172 176 173 #if defined key_agrif 177 CALL agrif_ssh( kt)174 CALL agrif_ssh( kt ) 178 175 #endif 179 176 #if defined key_obc 180 177 IF( Agrif_Root() ) THEN 181 178 ssha(:,:) = ssha(:,:) * obctmsk(:,:) 182 CALL lbc_lnk( ssha, 'T', 1. ) ! absolutly compulsory !! (jmm)179 CALL lbc_lnk( ssha, 'T', 1. ) ! absolutly compulsory !! (jmm) 183 180 ENDIF 184 181 #endif … … 200 197 END DO 201 198 END DO 202 ! Boundaries conditions 203 CALL lbc_lnk( sshu_a, 'U', 1. ) 204 CALL lbc_lnk( sshv_a, 'V', 1. ) 205 ENDIF 206 ! Include the IAU weighted SSH increment 199 CALL lbc_lnk( sshu_a, 'U', 1. ) ; CALL lbc_lnk( sshv_a, 'V', 1. ) ! Boundaries conditions 200 ENDIF 201 207 202 #if defined key_asminc 208 IF( ( lk_asminc ).AND.( ln_sshinc ).AND.( ln_asmiau ) ) THEN 203 ! ! Include the IAU weighted SSH increment 204 IF( lk_asminc .AND. ln_sshinc .AND. ln_asmiau ) THEN 209 205 CALL ssh_asm_inc( kt ) 210 206 ssha(:,:) = ssha(:,:) + z2dt * ssh_iau(:,:) … … 218 214 DO jk = jpkm1, 1, -1 ! integrate from the bottom the hor. divergence 219 215 ! - ML - need 3 lines here because replacement of fse3t by its expression yields too long lines otherwise 220 wn(:,:,jk) = wn(:,:,jk+1) - 221 & - ( 216 wn(:,:,jk) = wn(:,:,jk+1) - fse3t_n(:,:,jk) * hdivn(:,:,jk) & 217 & - ( fse3t_a(:,:,jk) - fse3t_b(:,:,jk) ) & 222 218 & * tmask(:,:,jk) * z1_2dt 223 219 #if defined key_bdy … … 281 277 282 278 ! !--------------------------! 283 IF( lk_vvl ) THEN ! Variable volume levels ! 279 IF( lk_vvl ) THEN ! Variable volume levels ! (ssh at t-, u-, v, f-points) 284 280 ! !--------------------------! 285 281 ! 286 ! ssh at t-, u-, v, f-points 287 !=========================== 288 IF( neuler == 0 .AND. kt == nit000 ) THEN ! Euler time-stepping at first time-step : no filter 289 sshn (:,:) = ssha (:,:) ! now <-- after (before already = now) 282 IF( neuler == 0 .AND. kt == nit000 ) THEN !** Euler time-stepping at first time-step : no filter 283 sshn (:,:) = ssha (:,:) ! now <-- after (before already = now) 290 284 sshu_n(:,:) = sshu_a(:,:) 291 285 sshv_n(:,:) = sshv_a(:,:) 292 DO jj = 1, jpjm1 293 DO ji = 1, jpim1 ! NO Vector Opt. 294 sshf_n(ji,jj) = 0.5 * umask(ji,jj,1) * umask(ji,jj+1,1) & 295 & / ( e1f(ji,jj ) * e2f(ji,jj ) ) & 296 & * ( e1u(ji,jj ) * e2u(ji,jj ) * sshu_n(ji,jj ) & 297 & + e1u(ji,jj+1) * e2u(ji,jj+1) * sshu_n(ji,jj+1) ) 298 END DO 299 END DO 300 ! Boundaries conditions 301 CALL lbc_lnk( sshf_n, 'F', 1. ) 302 ELSE ! Leap-Frog time-stepping: Asselin filter + swap 303 zec = atfp * rdt / rau0 304 DO jj = 1, jpj 305 DO ji = 1, jpi ! before <-- now filtered 306 sshb (ji,jj) = sshn (ji,jj) + atfp * ( sshb(ji,jj) - 2 * sshn(ji,jj) + ssha(ji,jj) ) & 307 & - zec * ( emp_b(ji,jj) - emp(ji,jj) ) * tmask(ji,jj,1) 308 sshn (ji,jj) = ssha (ji,jj) ! now <-- after 309 sshu_n(ji,jj) = sshu_a(ji,jj) 310 sshv_n(ji,jj) = sshv_a(ji,jj) 311 END DO 312 END DO 313 DO jj = 1, jpjm1 286 DO jj = 1, jpjm1 ! ssh now at f-point 314 287 DO ji = 1, jpim1 ! NO Vector Opt. 315 288 sshf_n(ji,jj) = 0.5 * umask(ji,jj,1) * umask(ji,jj+1,1) & … … 319 292 END DO 320 293 END DO 321 ! Boundaries conditions 322 CALL lbc_lnk( sshf_n, 'F', 1. ) 323 DO jj = 1, jpjm1 294 CALL lbc_lnk( sshf_n, 'F', 1. ) ! Boundaries conditions 295 ! 296 ELSE !** Leap-Frog time-stepping: Asselin filter + swap 297 zec = atfp * rdt / rau0 298 DO jj = 1, jpj 299 DO ji = 1, jpi ! before <-- now filtered 300 sshb (ji,jj) = sshn (ji,jj) + atfp * ( sshb(ji,jj) - 2 * sshn(ji,jj) + ssha(ji,jj) ) & 301 & - zec * ( emp_b(ji,jj) - emp(ji,jj) ) * tmask(ji,jj,1) 302 sshn (ji,jj) = ssha (ji,jj) ! now <-- after 303 sshu_n(ji,jj) = sshu_a(ji,jj) 304 sshv_n(ji,jj) = sshv_a(ji,jj) 305 END DO 306 END DO 307 DO jj = 1, jpjm1 ! ssh now at f-point 308 DO ji = 1, jpim1 ! NO Vector Opt. 309 sshf_n(ji,jj) = 0.5 * umask(ji,jj,1) * umask(ji,jj+1,1) & 310 & / ( e1f(ji,jj ) * e2f(ji,jj ) ) & 311 & * ( e1u(ji,jj ) * e2u(ji,jj ) * sshu_n(ji,jj ) & 312 & + e1u(ji,jj+1) * e2u(ji,jj+1) * sshu_n(ji,jj+1) ) 313 END DO 314 END DO 315 CALL lbc_lnk( sshf_n, 'F', 1. ) ! Boundaries conditions 316 ! 317 DO jj = 1, jpjm1 ! ssh before at u- & v-points 324 318 DO ji = 1, jpim1 ! NO Vector Opt. 325 319 sshu_b(ji,jj) = 0.5 * umask(ji,jj,1) / ( e1u(ji ,jj) * e2u(ji ,jj) ) & … … 331 325 END DO 332 326 END DO 333 ! Boundaries conditions334 327 CALL lbc_lnk( sshu_b, 'U', 1. ) 335 CALL lbc_lnk( sshv_b, 'V', 1. ) 328 CALL lbc_lnk( sshv_b, 'V', 1. ) ! Boundaries conditions 329 ! 336 330 ENDIF 337 331 ! !--------------------------! 338 ELSE ! fixed levels ! 332 ELSE ! fixed levels ! (ssh at t-point only) 339 333 ! !--------------------------! 340 334 ! 341 ! ssh at t-point only 342 !==================== 343 IF( neuler == 0 .AND. kt == nit000 ) THEN ! Euler time-stepping at first time-step : no filter 344 sshn(:,:) = ssha(:,:) ! now <-- after (before already = now) 345 ! 346 ELSE ! Leap-Frog time-stepping: Asselin filter + swap 335 IF( neuler == 0 .AND. kt == nit000 ) THEN !** Euler time-stepping at first time-step : no filter 336 sshn(:,:) = ssha(:,:) ! now <-- after (before already = now) 337 ! 338 ELSE ! Leap-Frog time-stepping: Asselin filter + swap 347 339 DO jj = 1, jpj 348 DO ji = 1, jpi 340 DO ji = 1, jpi ! before <-- now filtered 349 341 sshb(ji,jj) = sshn(ji,jj) + atfp * ( sshb(ji,jj) - 2 * sshn(ji,jj) + ssha(ji,jj) ) 350 sshn(ji,jj) = ssha(ji,jj) 342 sshn(ji,jj) = ssha(ji,jj) ! now <-- after 351 343 END DO 352 344 END DO -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/FLO/flo_oce.F90
r2618 r2690 56 56 !! *** FUNCTION flo_oce_alloc *** 57 57 !!---------------------------------------------------------------------- 58 ALLOCATE( wb(jpi,jpj,jpk) , Stat=flo_oce_alloc )58 ALLOCATE( wb(jpi,jpj,jpk) , STAT=flo_oce_alloc ) 59 59 ! 60 60 IF( lk_mpp ) CALL mpp_sum ( flo_oce_alloc ) 61 IF( flo_oce_alloc /= 0 ) CALL ctl_warn('flo_oce_alloc: failed to allocate arrays .')61 IF( flo_oce_alloc /= 0 ) CALL ctl_warn('flo_oce_alloc: failed to allocate arrays') 62 62 END FUNCTION flo_oce_alloc 63 63 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/IOM/prtctl.F90
r2633 r2690 1 1 MODULE prtctl 2 !!====================================================================== ========2 !!====================================================================== 3 3 !! *** MODULE prtctl *** 4 !! Ocean system : print all SUM trends for each processor domain 5 !!============================================================================== 4 !! Ocean system : print all SUM trends for each processor domain 5 !!====================================================================== 6 !! History : 9.0 ! 05-07 (C. Talandier) original code 7 !!---------------------------------------------------------------------- 6 8 USE dom_oce ! ocean space and time domain variables 7 9 USE in_out_manager ! I/O manager … … 11 13 PRIVATE 12 14 13 !! * Module declaration 14 INTEGER, DIMENSION(:), ALLOCATABLE :: numid 15 INTEGER, DIMENSION(:), ALLOCATABLE, SAVE :: & !: 16 nlditl , nldjtl , & !: first, last indoor index for each i-domain 17 nleitl , nlejtl , & !: first, last indoor index for each j-domain 18 nimpptl, njmpptl, & !: i-, j-indexes for each processor 19 nlcitl , nlcjtl , & !: dimensions of every subdomain 20 ibonitl, ibonjtl 21 22 REAL(wp), DIMENSION(:), ALLOCATABLE :: & !: 23 t_ctll , s_ctll , & !: previous trend values 24 u_ctll , v_ctll 25 26 INTEGER :: ktime !: time step 27 28 !! * Routine accessibility 15 INTEGER , DIMENSION(:), ALLOCATABLE, SAVE :: numid 16 INTEGER , DIMENSION(:), ALLOCATABLE, SAVE :: nlditl , nldjtl ! first, last indoor index for each i-domain 17 INTEGER , DIMENSION(:), ALLOCATABLE, SAVE :: nleitl , nlejtl ! first, last indoor index for each j-domain 18 INTEGER , DIMENSION(:), ALLOCATABLE, SAVE :: nimpptl, njmpptl ! i-, j-indexes for each processor 19 INTEGER , DIMENSION(:), ALLOCATABLE, SAVE :: nlcitl , nlcjtl ! dimensions of every subdomain 20 INTEGER , DIMENSION(:), ALLOCATABLE, SAVE :: ibonitl, ibonjtl ! 21 22 REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE :: t_ctll , s_ctll ! previous tracer trend values 23 REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE :: u_ctll , v_ctll ! previous velocity trend values 24 25 INTEGER :: ktime ! time step 26 29 27 PUBLIC prt_ctl ! called by all subroutines 30 28 PUBLIC prt_ctl_info ! called by all subroutines 31 29 PUBLIC prt_ctl_init ! called by opa.F90 30 32 31 !!---------------------------------------------------------------------- 33 32 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 34 33 !! $Id$ 35 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)34 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 36 35 !!---------------------------------------------------------------------- 37 38 39 36 CONTAINS 40 37 41 SUBROUTINE prt_ctl (tab2d_1, tab3d_1, mask1, clinfo1, tab2d_2, tab3d_2, mask2, clinfo2, ovlap, kdim, clinfo3) 38 SUBROUTINE prt_ctl (tab2d_1, tab3d_1, mask1, clinfo1, tab2d_2, tab3d_2, & 39 & mask2, clinfo2, ovlap, kdim, clinfo3 ) 42 40 !!---------------------------------------------------------------------- 43 41 !! *** ROUTINE prt_ctl *** … … 74 72 !! kdim : k- direction for 3D arrays 75 73 !! clinfo3 : additional information 76 !! 77 !! History : 78 !! 9.0 ! 05-07 (C. Talandier) original code 79 !!---------------------------------------------------------------------- 80 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 81 USE wrk_nemo, ONLY: ztab2d_1 => wrk_2d_1, ztab2d_2 => wrk_2d_2 82 USE wrk_nemo, ONLY: zmask1 => wrk_3d_1, zmask2 => wrk_3d_2, & 83 ztab3d_1 => wrk_3d_3, ztab3d_2 => wrk_3d_4 84 !! * Arguments 85 REAL(wp), DIMENSION(:,:) , INTENT(in), OPTIONAL :: tab2d_1 86 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: tab3d_1 87 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: mask1 88 CHARACTER (len=*) , INTENT(in), OPTIONAL :: clinfo1 89 REAL(wp), DIMENSION(:,:) , INTENT(in), OPTIONAL :: tab2d_2 90 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: tab3d_2 91 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: mask2 92 CHARACTER (len=*) , INTENT(in), OPTIONAL :: clinfo2 93 INTEGER , INTENT(in), OPTIONAL :: ovlap 94 INTEGER , INTENT(in), OPTIONAL :: kdim 95 CHARACTER (len=*) , INTENT(in), OPTIONAL :: clinfo3 96 97 !! * Local declarations 98 INTEGER :: overlap, jn, sind, eind, kdir,j_id 74 !!---------------------------------------------------------------------- 75 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 76 USE wrk_nemo, ONLY: ztab2d_1 => wrk_2d_1 , ztab2d_2 => wrk_2d_2 77 USE wrk_nemo, ONLY: zmask1 => wrk_3d_1 , zmask2 => wrk_3d_2 78 USE wrk_nemo, ONLY: ztab3d_1 => wrk_3d_3 , ztab3d_2 => wrk_3d_4 79 ! 80 REAL(wp), DIMENSION(:,:) , INTENT(in), OPTIONAL :: tab2d_1 81 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: tab3d_1 82 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: mask1 83 CHARACTER (len=*) , INTENT(in), OPTIONAL :: clinfo1 84 REAL(wp), DIMENSION(:,:) , INTENT(in), OPTIONAL :: tab2d_2 85 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: tab3d_2 86 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: mask2 87 CHARACTER (len=*) , INTENT(in), OPTIONAL :: clinfo2 88 INTEGER , INTENT(in), OPTIONAL :: ovlap 89 INTEGER , INTENT(in), OPTIONAL :: kdim 90 CHARACTER (len=*) , INTENT(in), OPTIONAL :: clinfo3 91 ! 99 92 CHARACTER (len=15) :: cl2 93 INTEGER :: overlap, jn, sind, eind, kdir,j_id 100 94 REAL(wp) :: zsum1, zsum2, zvctl1, zvctl2 101 95 !!---------------------------------------------------------------------- 102 96 103 IF( wrk_in_use(2, 1,2) .OR. wrk_in_use(3, 1,2,3,4) )THEN 104 CALL ctl_stop('prt_ctl : requested workspace arrays unavailable.') 105 RETURN 106 END IF 97 IF( wrk_in_use(2, 1,2) .OR. wrk_in_use(3, 1,2,3,4) ) THEN 98 CALL ctl_stop('prt_ctl : requested workspace arrays unavailable') ; RETURN 99 ENDIF 107 100 108 101 ! Arrays, scalars initialization … … 122 115 123 116 ! Control of optional arguments 124 IF( PRESENT(clinfo2) ) cl2 = clinfo2 125 IF( PRESENT(ovlap) ) overlap = ovlap 126 IF( PRESENT(kdim) ) kdir = kdim 127 IF( PRESENT(tab2d_1) ) ztab2d_1(:,:) = tab2d_1(:,:) 128 IF( PRESENT(tab2d_2) ) ztab2d_2(:,:) = tab2d_2(:,:) 129 IF( PRESENT(tab3d_1) ) ztab3d_1(:,:,1:kdir)= tab3d_1(:,:,:) 130 IF( PRESENT(tab3d_2) ) ztab3d_2(:,:,1:kdir)= tab3d_2(:,:,:) 131 IF( PRESENT(mask1) ) zmask1 (:,:,:)= mask1 (:,:,:) 132 IF( PRESENT(mask2) ) zmask2 (:,:,:)= mask2 (:,:,:) 133 134 IF( lk_mpp ) THEN 135 ! processor number 117 IF( PRESENT(clinfo2) ) cl2 = clinfo2 118 IF( PRESENT(ovlap) ) overlap = ovlap 119 IF( PRESENT(kdim) ) kdir = kdim 120 IF( PRESENT(tab2d_1) ) ztab2d_1(:,:) = tab2d_1(:,:) 121 IF( PRESENT(tab2d_2) ) ztab2d_2(:,:) = tab2d_2(:,:) 122 IF( PRESENT(tab3d_1) ) ztab3d_1(:,:,1:kdir) = tab3d_1(:,:,:) 123 IF( PRESENT(tab3d_2) ) ztab3d_2(:,:,1:kdir) = tab3d_2(:,:,:) 124 IF( PRESENT(mask1) ) zmask1 (:,:,:) = mask1 (:,:,:) 125 IF( PRESENT(mask2) ) zmask2 (:,:,:) = mask2 (:,:,:) 126 127 IF( lk_mpp ) THEN ! processor number 136 128 sind = narea 137 129 eind = narea 138 ELSE 139 ! processors total number 130 ELSE ! processors total number 140 131 sind = 1 141 132 eind = ijsplt … … 213 204 ENDDO 214 205 215 IF( wrk_not_released(2, 1,2) .OR. wrk_not_released(3, 1,2,3,4) )THEN 216 CALL ctl_stop('prt_ctl : failed to release workspace arrays.') 217 END IF 218 206 IF( wrk_not_released(2, 1,2) .OR. & 207 wrk_not_released(3, 1,2,3,4) ) CALL ctl_stop('prt_ctl: failed to release workspace arrays') 208 ! 219 209 END SUBROUTINE prt_ctl 220 210 … … 231 221 !! clinfo2 : information about the ivar2 232 222 !! ivar2 : value to print 233 !! 234 !! History : 235 !! 9.0 ! 05-07 (C. Talandier) original code 236 !!---------------------------------------------------------------------- 237 !! * Arguments 238 CHARACTER (len=*), INTENT(in) :: clinfo1 223 !!---------------------------------------------------------------------- 224 CHARACTER (len=*), INTENT(in) :: clinfo1 239 225 INTEGER , INTENT(in), OPTIONAL :: ivar1 240 226 CHARACTER (len=*), INTENT(in), OPTIONAL :: clinfo2 241 227 INTEGER , INTENT(in), OPTIONAL :: ivar2 242 228 INTEGER , INTENT(in), OPTIONAL :: itime 243 244 !! * Local declarations 229 ! 245 230 INTEGER :: jn, sind, eind, iltime, j_id 246 231 !!---------------------------------------------------------------------- 247 232 248 IF( lk_mpp ) THEN 249 ! processor number 233 IF( lk_mpp ) THEN ! processor number 250 234 sind = narea 251 235 eind = narea 252 ELSE 253 ! total number of processors 236 ELSE ! total number of processors 254 237 sind = 1 255 238 eind = ijsplt … … 268 251 ! Loop over each sub-domain, i.e. number of processors ijsplt 269 252 DO jn = sind, eind 270 271 ! Set logical unit 272 j_id = numid(jn - narea + 1) 273 253 ! 254 j_id = numid(jn - narea + 1) ! Set logical unit 255 ! 274 256 IF( PRESENT(ivar1) .AND. PRESENT(clinfo2) .AND. PRESENT(ivar2) ) THEN 275 257 WRITE(j_id,*)clinfo1, ivar1, clinfo2, ivar2 … … 283 265 WRITE(j_id,*)clinfo1 284 266 ENDIF 285 286 END DO287 288 289 END SUBROUTINE prt_ctl_info 267 ! 268 END DO 269 ! 270 END SUBROUTINE prt_ctl_info 271 290 272 291 273 SUBROUTINE prt_ctl_init … … 294 276 !! 295 277 !! ** Purpose : open ASCII files & compute indices 296 !! 297 !! History : 298 !! 9.0 ! 05-07 (C. Talandier) original code 299 !!---------------------------------------------------------------------- 300 !! * Local declarations 278 !!---------------------------------------------------------------------- 301 279 INTEGER :: jn, sind, eind, j_id 302 280 CHARACTER (len=28) :: clfile_out … … 306 284 307 285 ! Allocate arrays 308 ALLOCATE(nlditl (ijsplt)) 309 ALLOCATE(nldjtl (ijsplt)) 310 ALLOCATE(nleitl (ijsplt)) 311 ALLOCATE(nlejtl (ijsplt)) 312 ALLOCATE(nimpptl(ijsplt)) 313 ALLOCATE(njmpptl(ijsplt)) 314 ALLOCATE(nlcitl (ijsplt)) 315 ALLOCATE(nlcjtl (ijsplt)) 316 ALLOCATE(t_ctll (ijsplt)) 317 ALLOCATE(s_ctll (ijsplt)) 318 ALLOCATE(u_ctll (ijsplt)) 319 ALLOCATE(v_ctll (ijsplt)) 320 ALLOCATE(ibonitl(ijsplt)) 321 ALLOCATE(ibonjtl(ijsplt)) 286 ALLOCATE( nlditl(ijsplt) , nleitl(ijsplt) , nimpptl(ijsplt) , ibonitl(ijsplt) , & 287 & nldjtl(ijsplt) , nlejtl(ijsplt) , njmpptl(ijsplt) , ibonjtl(ijsplt) , & 288 & nlcitl(ijsplt) , t_ctll(ijsplt) , u_ctll (ijsplt) , & 289 & nlcjtl(ijsplt) , s_ctll(ijsplt) , v_ctll (ijsplt) ) 322 290 323 291 ! Initialization 324 t_ctll(:) =0.e0325 s_ctll(:) =0.e0326 u_ctll(:) =0.e0327 v_ctll(:) =0.e0292 t_ctll(:) = 0.e0 293 s_ctll(:) = 0.e0 294 u_ctll(:) = 0.e0 295 v_ctll(:) = 0.e0 328 296 ktime = 1 329 297 … … 356 324 ENDIF 357 325 358 ALLOCATE( numid(eind-sind+1))326 ALLOCATE( numid(eind-sind+1) ) 359 327 360 328 DO jn = sind, eind … … 403 371 9003 FORMAT(a20,i4.4,a17,i4.4) 404 372 9004 FORMAT(a11,i4.4,a26,i4.4,a14) 405 END DO406 373 END DO 374 ! 407 375 END SUBROUTINE prt_ctl_init 408 376 … … 445 413 !! 8.5 ! 02-08 (G. Madec) F90 : free form 446 414 !!---------------------------------------------------------------------- 447 !! * Local variables448 415 INTEGER :: ji, jj, jn ! dummy loop indices 449 416 INTEGER :: & … … 454 421 nrecil, nrecjl, nldil, nleil, nldjl, nlejl 455 422 456 INTEGER, DIMENSION(:,:), ALLOCATABLE :: & 457 iimpptl, ijmpptl, ilcitl, ilcjtl ! temporary workspace 423 INTEGER, DIMENSION(:,:), ALLOCATABLE :: iimpptl, ijmpptl, ilcitl, ilcjtl ! workspace 458 424 REAL(wp) :: zidom, zjdom ! temporary scalars 459 425 !!---------------------------------------------------------------------- … … 575 541 nlejtl(jn) = nlejl 576 542 END DO 577 578 DEALLOCATE(iimpptl) 579 DEALLOCATE(ijmpptl) 580 DEALLOCATE(ilcitl) 581 DEALLOCATE(ilcjtl) 582 543 ! 544 DEALLOCATE( iimpptl, ijmpptl, ilcitl, ilcjtl ) 545 ! 583 546 END SUBROUTINE sub_dom 584 547 548 !!====================================================================== 585 549 END MODULE prtctl -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90
r2668 r2690 1759 1759 !!---------------------------------------------------------------------- 1760 1760 1761 IF( wrk_in_use(2, 1) ) THEN1761 IF( wrk_in_use(2, 1) ) THEN 1762 1762 WRITE(kumout, cform_err) 1763 1763 WRITE(kumout,*) 'mppobc : requested workspace array unavailable' 1764 1764 CALL mppstop 1765 END 1765 ENDIF 1766 1766 1767 1767 ! boundary condition initialization … … 1914 1914 END DO 1915 1915 ! 1916 IF( wrk_not_released(2, 1) ) THEN1916 IF( wrk_not_released(2, 1) ) THEN 1917 1917 WRITE(kumout, cform_err) 1918 1918 WRITE(kumout,*) 'mppobc : failed to release workspace array' -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LBC/mppini.F90
r2442 r2690 20 20 PRIVATE 21 21 22 !! * Routine accessibility23 22 PUBLIC mpp_init ! called by opa.F90 24 23 PUBLIC mpp_init2 ! called by opa.F90 … … 29 28 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 30 29 !! $Id$ 31 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 32 !!---------------------------------------------------------------------- 33 30 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 31 !!---------------------------------------------------------------------- 34 32 CONTAINS 35 33 … … 128 126 !! 8.5 ! 02-08 (G. Madec) F90 : free form 129 127 !!---------------------------------------------------------------------- 130 !! * Local variables 131 INTEGER :: ji, jj, jn ! dummy loop indices 132 INTEGER :: & 133 ii, ij, ifreq, il1, il2, & ! temporary integers 134 iresti, irestj, ijm1, imil, & ! " " 135 inum ! temporary logical unit 136 137 INTEGER, DIMENSION(jpni,jpnj) :: & 138 iimppt, ijmppt, ilcit, ilcjt ! temporary workspace 139 REAL(wp) :: zidom, zjdom ! temporary scalars 128 INTEGER :: ji, jj, jn ! dummy loop indices 129 INTEGER :: ii, ij, ifreq, il1, il2 ! local integers 130 INTEGER :: iresti, irestj, ijm1, imil, inum ! - - 131 REAL(wp) :: zidom, zjdom ! local scalars 132 INTEGER, DIMENSION(jpni,jpnj) :: iimppt, ijmppt, ilcit, ilcjt ! local workspace 140 133 !!---------------------------------------------------------------------- 141 134 … … 451 444 !! " " ! 08-12 (A. Coward) addition in case of jpni*jpnj < jpnij 452 445 !!---------------------------------------------------------------------- 453 !! Local declarations 454 455 INTEGER, DIMENSION(2) :: & 456 iglo, iloc, iabsf, iabsl, ihals, ihale, idid 446 INTEGER, DIMENSION(2) :: iglo, iloc, iabsf, iabsl, ihals, ihale, idid 457 447 !!---------------------------------------------------------------------- 458 448 … … 482 472 WRITE(numout,*) ' ihale = ', ihale(1), ihale(2) 483 473 ENDIF 484 474 ! 485 475 CALL flio_dom_set ( jpnij, nproc, idid, iglo, iloc, iabsf, iabsl, ihals, ihale, 'BOX', nidom) 486 476 ! 487 477 END SUBROUTINE mpp_init_ioipsl 488 478 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn.F90
r2590 r2690 38 38 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 39 39 !! $Id$ 40 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 41 !!---------------------------------------------------------------------- 42 40 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 41 !!---------------------------------------------------------------------- 43 42 CONTAINS 44 43 … … 63 62 !!---------------------------------------------------------------------- 64 63 INTEGER :: ioptio ! ??? 65 LOGICAL :: ll_print = .FALSE. ! Logical flag for printing viscosity coef.64 LOGICAL :: ll_print = .FALSE. ! Logical flag for printing viscosity coef. 66 65 !! 67 66 NAMELIST/namdyn_ldf/ ln_dynldf_lap , ln_dynldf_bilap, & -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_c1d.h90
r2528 r2690 24 24 !! 25 25 !!---------------------------------------------------------------------- 26 !! * Arguments 27 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout 28 29 !! * Local variables 26 LOGICAL, INTENT(in) :: ld_print ! If true, output arrays on numout 27 ! 30 28 INTEGER :: jk ! dummy loop indice 31 29 REAL(wp) :: zdam, zwam, zm00, zm01, zmhf, zmhs … … 37 35 IF(lwp) WRITE(numout,*) 'inildf: 1D eddy viscosity coefficient' 38 36 IF(lwp) WRITE(numout,*) '~~~~~~ --' 39 IF(lwp) WRITE(numout,*)40 37 41 38 ! Set ahm1 for laplacian (always at t-level) … … 124 121 ENDIF 125 122 9120 FORMAT(' jk ahm ',' depth w-level ' ) 126 123 ! 127 124 END SUBROUTINE ldf_dyn_c1d -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90
r2633 r2690 32 32 !! 33 33 !!---------------------------------------------------------------------- 34 !! * Arguments35 34 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout 36 37 !! * Local variables 38 INTEGER :: ji, jj 35 ! 36 INTEGER :: ji, jj 39 37 REAL(wp) :: za00, zd_max, zetmax, zeumax, zefmax, zevmax 40 38 !!---------------------------------------------------------------------- … … 43 41 IF(lwp) WRITE(numout,*) 'ldf_dyn_c2d : 2d lateral eddy viscosity coefficient' 44 42 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 45 IF(lwp) WRITE(numout,*)46 43 47 44 ! harmonic operator (ahm1, ahm2) : ( T- and F- points) (used for laplacian operators … … 123 120 ENDIF 124 121 ENDIF 125 126 122 ! 127 123 END SUBROUTINE ldf_dyn_c2d 128 124 … … 143 139 !! 144 140 !!---------------------------------------------------------------------- 145 !! * Modules used 146 USE ldftra_oce, ONLY : aht0 147 USE wrk_nemo, ONLY: iwrk_in_use, iwrk_not_released 148 USE wrk_nemo, ONLY: icof => iwrk_2d_1 149 !! * Arguments 141 USE ldftra_oce, ONLY: aht0 142 USE wrk_nemo , ONLY: iwrk_in_use, iwrk_not_released 143 USE wrk_nemo , ONLY: icof => iwrk_2d_1 144 ! 150 145 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout 151 152 !! * Local variables153 INTEGER :: ji, jj, jn ! dummy loop indices154 INTEGER :: inum ! temporary logical unit155 INTEGER :: iim, ijm156 INTEGER :: ifreq, il1, il2, ij, ii146 ! 147 INTEGER :: ji, jj, jn ! dummy loop indices 148 INTEGER :: inum, iim, ijm ! local integers 149 INTEGER :: ifreq, il1, il2, ij, ii 150 REAL(wp) :: zahmeq, zcoft, zcoff, zmsk 151 CHARACTER (len=15) :: clexp 157 152 INTEGER, DIMENSION(jpidta,jpidta) :: idata 158 159 REAL(wp) :: zahmeq, zcoft, zcoff, zmsk160 161 CHARACTER (len=15) :: clexp162 153 !!---------------------------------------------------------------------- 163 154 164 155 IF( iwrk_in_use(2, 1) )THEN 165 CALL ctl_stop('ldf_dyn_c2d_orca: ERROR: requested workspace array is unavailable.') 166 RETURN 167 END IF 156 CALL ctl_stop('ldf_dyn_c2d_orca: requested workspace array is unavailable') ; RETURN 157 ENDIF 168 158 169 159 IF(lwp) WRITE(numout,*) 170 160 IF(lwp) WRITE(numout,*) 'inildf: 2d eddy viscosity coefficient' 171 161 IF(lwp) WRITE(numout,*) '~~~~~~ --' 172 IF(lwp) WRITE(numout,*) 173 IF(lwp) WRITE(numout,*) ' orca ocean model' 174 IF(lwp) WRITE(numout,*) 162 IF(lwp) WRITE(numout,*) ' orca ocean configuration' 175 163 176 164 #if defined key_antarctic … … 293 281 ENDIF 294 282 295 IF( iwrk_not_released(2, 1) )THEN 296 CALL ctl_stop('ldf_dyn_c2d_orca: ERROR: failed to release workspace array.') 283 IF( iwrk_not_released(2, 1) ) CALL ctl_stop('ldf_dyn_c2d_orca: failed to release workspace array') 297 284 END IF 298 285 ! 299 286 END SUBROUTINE ldf_dyn_c2d_orca 287 300 288 301 289 SUBROUTINE ldf_dyn_c2d_orca_R1( ld_print ) … … 314 302 !! 315 303 !!---------------------------------------------------------------------- 316 !! * Modules used 317 USE ldftra_oce, ONLY : aht0 318 USE wrk_nemo, ONLY: iwrk_in_use, iwrk_not_released 319 USE wrk_nemo, ONLY: icof => iwrk_2d_1 320 321 !! * Arguments 304 USE ldftra_oce, ONLY: aht0 305 USE wrk_nemo , ONLY: iwrk_in_use, iwrk_not_released 306 USE wrk_nemo , ONLY: icof => iwrk_2d_1 307 ! 322 308 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout 323 324 !! * Local variables 309 ! 325 310 INTEGER :: ji, jj, jn ! dummy loop indices 326 311 INTEGER :: inum ! temporary logical unit 327 312 INTEGER :: iim, ijm 328 313 INTEGER :: ifreq, il1, il2, ij, ii 314 REAL(wp) :: zahmeq, zcoft, zcoff, zmsk, zam20s 315 CHARACTER (len=15) :: clexp 329 316 INTEGER, DIMENSION(jpidta,jpidta) :: idata 330 331 REAL(wp) :: zahmeq, zcoft, zcoff, zmsk, zam20s 332 333 CHARACTER (len=15) :: clexp 334 !!---------------------------------------------------------------------- 335 336 IF( iwrk_in_use(2, 1) )THEN 337 CALL ctl_stop('ldf_dyn_c2d_orca_R1: ERROR: requested workspace array is unavailable.') 338 RETURN 339 END IF 317 !!---------------------------------------------------------------------- 318 319 IF( iwrk_in_use(2, 1) ) THEN 320 CALL ctl_stop('ldf_dyn_c2d_orca_R1: requested workspace array is unavailable') ; RETURN 321 ENDIF 340 322 341 323 IF(lwp) WRITE(numout,*) 342 324 IF(lwp) WRITE(numout,*) 'inildf: 2d eddy viscosity coefficient' 343 325 IF(lwp) WRITE(numout,*) '~~~~~~ --' 344 IF(lwp) WRITE(numout,*) 345 IF(lwp) WRITE(numout,*) ' orca_r1 ocean model' 346 IF(lwp) WRITE(numout,*) 326 IF(lwp) WRITE(numout,*) ' orca_r1 configuration' 347 327 348 328 #if defined key_antarctic … … 472 452 ENDIF 473 453 474 IF( iwrk_not_released(2, 1) )THEN 475 CALL ctl_stop('ldf_dyn_c2d_orca_R1: ERROR: failed to release workspace array.') 476 END IF 477 454 IF( iwrk_not_released(2, 1) ) CALL ctl_stop('ldf_dyn_c2d_orca_R1: failed to release workspace array') 455 ! 478 456 END SUBROUTINE ldf_dyn_c2d_orca_R1 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90
r2633 r2690 26 26 !! ??? explanation of the default is missing 27 27 !!---------------------------------------------------------------------- 28 USE ldftra_oce, ONLY : aht0 29 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 30 USE wrk_nemo, ONLY: zcoef => wrk_1d_2 31 !! 32 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout 33 !! 34 INTEGER :: ji, jj, jk ! dummy loop indices 35 REAL(wp) :: & 36 zr = 0.2 , & ! maximum of the reduction factor at the bottom ocean 37 ! ! ( 0 < zr < 1 ) 38 zh = 500., & ! depth of at which start the reduction ( > dept(1) ) 39 zd_max , & ! maximum grid spacing over the global domain 40 za00, zc, zd ! temporary scalars 41 REAL(wp) :: & 42 zetmax, zefmax, & 43 zeumax, zevmax 44 !!---------------------------------------------------------------------- 45 46 IF(wrk_in_use(1,2))THEN 47 CALL ctl_stop('ldf_dyn_c3d: ERROR: requested workspace array unavailable.') 48 RETURN 49 END IF 28 USE ldftra_oce, ONLY : aht0 29 USE wrk_nemo , ONLY: wrk_in_use, wrk_not_released 30 USE wrk_nemo , ONLY: zcoef => wrk_1d_2 31 !! 32 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout 33 !! 34 INTEGER :: ji, jj, jk ! dummy loop indices 35 REAL(wp) :: zr = 0.2 ! maximum of the reduction factor at the bottom ocean ( 0 < zr < 1 ) 36 REAL(wp) :: zh = 500. ! depth of at which start the reduction ( > dept(1) ) 37 REAL(wp) :: zd_max ! maximum grid spacing over the global domain 38 REAL(wp) :: za00, zc, zd, zetmax, zefmax, zeumax, zevmax ! local scalars 39 !!---------------------------------------------------------------------- 40 41 IF( wrk_in_use(1,2) ) THEN 42 CALL ctl_stop('ldf_dyn_c3d: requested workspace array unavailable') ; RETURN 43 ENDIF 50 44 51 45 IF(lwp) WRITE(numout,*) … … 187 181 ENDIF 188 182 ENDIF 189 190 IF(wrk_not_released(1,2))THEN 191 CALL ctl_stop('ldf_dyn_c3d: ERROR: failed to release workspace array.') 192 END IF 193 183 ! 184 IF( wrk_not_released(1,2) ) CALL ctl_stop('ldf_dyn_c3d: failed to release workspace array') 185 ! 194 186 END SUBROUTINE ldf_dyn_c3d 195 187 … … 203 195 !! ** Method : blah blah blah .... 204 196 !!---------------------------------------------------------------------- 205 USE ldftra_oce, ONLY :aht0206 USE wrk_nemo , ONLY:wrk_in_use, wrk_not_released, iwrk_in_use, iwrk_not_released207 USE wrk_nemo , ONLY: icof=> iwrk_2d_1208 USE wrk_nemo , ONLY:zahm0 => wrk_2d_1209 USE wrk_nemo , ONLY:zcoef => wrk_1d_1210 !! 211 LOGICAL, INTENT (in) ::ld_print ! If true, output arrays on numout197 USE ldftra_oce, ONLY: aht0 198 USE wrk_nemo , ONLY: wrk_in_use, wrk_not_released, iwrk_in_use, iwrk_not_released 199 USE wrk_nemo , ONLY: icof => iwrk_2d_1 200 USE wrk_nemo , ONLY: zahm0 => wrk_2d_1 201 USE wrk_nemo , ONLY: zcoef => wrk_1d_1 202 !! 203 LOGICAL, INTENT(in) :: ld_print ! If true, output arrays on numout 212 204 !! 213 205 INTEGER :: ji, jj, jk, jn ! dummy loop indices 214 INTEGER :: ii0, ii1, ij0, ij1 ! temporary integers 215 INTEGER :: inum ! temporary logical unit 216 INTEGER :: iim, ijm 206 INTEGER :: ii0, ii1, ij0, ij1 ! local integers 207 INTEGER :: inum, iim, ijm ! 217 208 INTEGER :: ifreq, il1, il2, ij, ii 218 209 INTEGER, DIMENSION(jpidta, jpjdta) :: idata 219 210 220 REAL(wp) :: & 221 zahmeq, zcoff, zcoft, zmsk, & ! ??? 222 zemax, zemin, zeref, zahmm 223 211 REAL(wp) :: zahmeq, zcoff, zcoft, zmsk ! local scalars 212 REAL(wp) :: zemax , zemin, zeref, zahmm 224 213 CHARACTER (len=15) :: clexp 225 214 !!---------------------------------------------------------------------- 226 215 227 IF( iwrk_in_use(2,1) .OR. wrk_in_use(2,1) .OR. wrk_in_use(1,1) )THEN 228 CALL ctl_stop('ldf_dyn_c3d_orca: ERROR: requested workspace arrays are unavailable.') 229 RETURN 230 END IF 216 IF( iwrk_in_use(2,1) .OR. wrk_in_use(2,1) .OR. wrk_in_use(1,1) ) THEN 217 CALL ctl_stop('ldf_dyn_c3d_orca: requested workspace arrays are unavailable') ; RETURN 218 ENDIF 231 219 232 220 IF(lwp) WRITE(numout,*) 233 221 IF(lwp) WRITE(numout,*) 'ldfdyn_c3d_orca : 3D eddy viscosity coefficient' 234 222 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~' 235 IF(lwp) WRITE(numout,*) 236 IF(lwp) WRITE(numout,*) ' orca R1, R2 or R4 ocean model' 237 IF(lwp) WRITE(numout,*) ' reduced in the surface Eq. strip ' 238 IF(lwp) WRITE(numout,*) 223 IF(lwp) WRITE(numout,*) ' orca R1, R2 or R4 configuration: reduced in the surface Eq. strip ' 239 224 240 225 ! Read 2d integer array to specify western boundary increase in the … … 473 458 ENDIF 474 459 475 IF( iwrk_not_released(2,1) .OR. wrk_not_released(2,1) .OR. & 476 wrk_not_released(1,1) )THEN 477 CALL ctl_stop('ldf_dyn_c3d_orca: ERROR: failed to release workspace arrays.') 478 END IF 479 460 IF( iwrk_not_released(2,1) .OR. & 461 wrk_not_released(2,1) .OR. & 462 wrk_not_released(1,1) ) CALL ctl_stop('ldf_dyn_c3d_orca: failed to release workspace arrays') 463 ! 480 464 END SUBROUTINE ldf_dyn_c3d_orca -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfeiv.F90
r2633 r2690 53 53 !! - wslpi, wslpj : i- and j-slopes of neutral surfaces at w-points. 54 54 !!---------------------------------------------------------------------- 55 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released56 USE wrk_nemo, ONLY: zn => wrk_2d_1, zah => wrk_2d_2, &57 zhw => wrk_2d_3, zross => wrk_2d_458 ! !55 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 56 USE wrk_nemo, ONLY: zn => wrk_2d_1 , zah => wrk_2d_2 ! 2D workspace 57 USE wrk_nemo, ONLY: zhw => wrk_2d_3 , zross => wrk_2d_4 58 ! 59 59 INTEGER, INTENT(in) :: kt ! ocean time-step inedx 60 ! !60 ! 61 61 INTEGER :: ji, jj, jk ! dummy loop indices 62 62 REAL(wp) :: zfw, ze3w, zn2, zf20, zaht, zaht_min ! temporary scalars 63 63 !!---------------------------------------------------------------------- 64 64 65 IF(wrk_in_use(2, 1,2,3,4))THEN 66 CALL ctl_stop('ldf_eiv: ERROR: requested workspace arrays are unavailable.') 67 RETURN 68 END IF 65 IF( wrk_in_use(2, 1,2,3,4) ) THEN 66 CALL ctl_stop('ldf_eiv: requested workspace arrays are unavailable.') ; RETURN 67 ENDIF 69 68 70 69 IF( kt == nit000 ) THEN … … 244 243 CALL iom_put( "aht2d_eiv", aeiw ) ! EIV lateral eddy diffusivity 245 244 ! 246 IF(wrk_not_released(2, 1,2,3,4))THEN 247 CALL ctl_stop('ldf_eiv: ERROR: failed to release workspace arrays.') 248 END IF 245 IF( wrk_not_released(2, 1,2,3,4) ) CALL ctl_stop('ldf_eiv: failed to release workspace arrays') 249 246 ! 250 247 END SUBROUTINE ldf_eiv -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90
r2678 r2690 115 115 !! of now neutral surfaces at u-, w- and v- w-points, resp. 116 116 !!---------------------------------------------------------------------- 117 USE oce , zgru => ua ! use ua as workspace118 USE oce , zgrv => va ! use va as workspace119 USE oce , zww => ta ! use ta as workspace120 USE oce , zwz => sa ! use sa as workspace121 117 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 122 USE wrk_nemo, ONLY: zdzr => wrk_3d_1 118 USE oce , ONLY: zgru => ua , zww => va ! (ua,va) used as workspace 119 USE oce , ONLY: zgrv => ta , zwz => sa ! (ta,sa) used as workspace 120 USE wrk_nemo, ONLY: zdzr => wrk_3d_1 ! 3D workspace 123 121 !! 124 122 INTEGER , INTENT(in) :: kt ! ocean time-step index … … 135 133 !!---------------------------------------------------------------------- 136 134 137 IF( wrk_in_use(3, 1) ) THEN135 IF( wrk_in_use(3, 1) ) THEN 138 136 CALL ctl_stop('ldf_slp: requested workspace arrays are unavailable') ; RETURN 139 END 137 ENDIF 140 138 141 139 zeps = 1.e-20_wp !== Local constant initialization ==! … … 370 368 ENDIF 371 369 372 373 370 ! IV. Lateral boundary conditions 374 371 ! =============================== … … 382 379 ENDIF 383 380 ! 384 IF(wrk_not_released(3, 1))THEN 385 CALL ctl_stop('ldf_slp: ERROR: failed to release workspace arrays.') 386 END IF 381 IF( wrk_not_released(3, 1) ) CALL ctl_stop('ldf_slp: failed to release workspace arrays') 387 382 ! 388 383 END SUBROUTINE ldf_slp … … 403 398 !! - wslp2 squared slope of neutral surfaces at w-points. 404 399 !!---------------------------------------------------------------------- 405 USE oce, zdit => ua ! use ua as workspace 406 USE oce, zdis => va ! use va as workspace 407 USE oce, zdjt => ta ! use ta as workspace 408 USE oce, zdjs => sa ! use sa as workspace 409 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 410 USE wrk_nemo, ONLY: zdkt => wrk_3d_2, zdks => wrk_3d_3, & 411 zalpha => wrk_3d_4, zbeta => wrk_3d_5 ! alpha, beta at T points, at depth fsgdept 412 USE wrk_nemo, ONLY: z1_mlbw => wrk_2d_1 413 !! 414 INTEGER, INTENT( in ) :: kt ! ocean time-step index 415 !! 400 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 401 USE oce , ONLY: zdit => ua , zdis => va ! (ua,va) used as workspace 402 USE oce , ONLY: zdjt => ta , zdjs => sa ! (ta,sa) used as workspace 403 USE wrk_nemo, ONLY: zdkt => wrk_3d_2 , zdks => wrk_3d_3 ! 3D workspace 404 USE wrk_nemo, ONLY: zalpha => wrk_3d_4 , zbeta => wrk_3d_5 ! alpha, beta at T points, at depth fsgdept 405 USE wrk_nemo, ONLY: z1_mlbw => wrk_2d_1 406 ! 407 INTEGER, INTENT( in ) :: kt ! ocean time-step index 408 ! 416 409 INTEGER :: ji, jj, jk, jl, ip, jp, kp ! dummy loop indices 417 INTEGER :: iku, ikv ! temporaryinteger410 INTEGER :: iku, ikv ! local integer 418 411 REAL(wp) :: zfacti, zfactj, zatempw,zatempu,zatempv ! local scalars 419 REAL(wp) :: zbu, zbv, zbti, zbtj 412 REAL(wp) :: zbu, zbv, zbti, zbtj ! - - 420 413 REAL(wp) :: zdxrho_raw, zti_coord, zti_raw, zti_lim, zti_lim2, zti_g_raw, zti_g_lim 421 414 REAL(wp) :: zdyrho_raw, ztj_coord, ztj_raw, ztj_lim, ztj_lim2, ztj_g_raw, ztj_g_lim … … 423 416 !!---------------------------------------------------------------------- 424 417 425 IF( (wrk_in_use(3, 2,3,4,5)) .OR. (wrk_in_use(2, 1)) )THEN426 CALL ctl_stop('ldf_slp_grif: ERROR: requested workspace arrays are unavailable.') ; RETURN427 END 418 IF( wrk_in_use(3, 2,3,4,5) .OR. wrk_in_use(2, 1) )THEN 419 CALL ctl_stop('ldf_slp_grif: requested workspace arrays are unavailable') ; RETURN 420 ENDIF 428 421 429 422 !--------------------------------! … … 607 600 CALL lbc_lnk( wslp2, 'W', 1. ) ! lateral boundary confition on wslp2 only ==>>> gm : necessary ? to be checked 608 601 ! 609 IF( wrk_not_released(3, 2,3,4,5) .OR. &610 wrk_not_released(2, 1) ) CALL ctl_stop('ldf_slp_grif: ERROR: failed to release workspace arrays.')602 IF( wrk_not_released(3, 2,3,4,5) .OR. & 603 wrk_not_released(2, 1) ) CALL ctl_stop('ldf_slp_grif: failed to release workspace arrays') 611 604 ! 612 605 END SUBROUTINE ldf_slp_grif -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra.F90
r2528 r2690 36 36 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 37 37 !! $Id$ 38 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)38 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 39 39 !!---------------------------------------------------------------------- 40 41 40 CONTAINS 42 41 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_c1d.h90
r2528 r2690 6 6 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 7 7 !! $Id$ 8 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)8 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 9 9 !!---------------------------------------------------------------------- 10 10 … … 28 28 !! always harmonic : aeiu = aeiv defined at T-level 29 29 !! aeiw defined at w-level 30 !!31 30 !!---------------------------------------------------------------------- 32 !! * Arguments 33 LOGICAL, INTENT (in) :: ld_print ! If true, print arrays in numout 34 35 !! * Local variables 36 INTEGER :: jk ! dummy loop indices 37 REAL(wp) :: & 38 zkah, zahr, za00 , za01, & ! temporary scalars 39 zahf, zahs, zahtf, zahts 31 LOGICAL, INTENT (in) :: ld_print ! If true, print arrays in numout 32 ! 33 INTEGER :: jk ! dummy loop indices 34 REAL(wp) :: zkah, zahr, za00 , za01 ! local scalars 35 REAL(wp) :: zahf, zahs, zahtf, zahts ! - - 40 36 !!---------------------------------------------------------------------- 41 37 … … 130 126 ENDIF 131 127 #endif 132 128 ! 133 129 END SUBROUTINE ldf_tra_c1d -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_c2d.h90
r2528 r2690 25 25 !! eddy induced velocity 26 26 !! always harmonic : aeiu, aeiv, aeiw defined at u-, v-, w-pts 27 !!28 27 !!---------------------------------------------------------------------- 29 !! * Arguments 30 LOGICAL, INTENT (in) :: ld_print ! If true, print arrays in numout 31 32 !! * Local variables 33 INTEGER :: ji, jj ! dummy loop indices 28 LOGICAL, INTENT (in) :: ld_print ! If true, print arrays in numout 29 ! 30 INTEGER :: ji, jj ! dummy loop indices 34 31 # if defined key_orca_r4 35 32 INTEGER :: i1, i2, j1, j2 36 33 # endif 37 34 REAL(wp) :: za00, zd_max, zeumax, zevmax, zetmax 38 39 35 !!---------------------------------------------------------------------- 40 36 … … 43 39 IF(lwp) WRITE(numout,*) ' ldf_tra_c2d : 2D eddy diffusivity and eddy' 44 40 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~ -- induced velocity coefficients' 45 IF(lwp) WRITE(numout,*)46 41 ELSE 47 42 IF(lwp) WRITE(numout,*) 48 43 IF(lwp) WRITE(numout,*) ' ldf_tra2d : 2D eddy diffusivity coefficient' 49 44 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~ --' 50 IF(lwp) WRITE(numout,*)51 45 ENDIF 52 46 … … 57 51 ! ================== 58 52 IF( ln_traldf_lap ) THEN 59 53 ! 60 54 za00 = aht0 / zd_max 61 55 ! 62 56 DO jj = 1, jpj 63 57 DO ji = 1, jpi … … 167 161 CALL prihre(aeiw,jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 168 162 ENDIF 169 170 163 # endif 171 164 ! 172 165 END SUBROUTINE ldf_tra_c2d -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_c3d.h90
r2528 r2690 6 6 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 7 7 !! $Id$ 8 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)8 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 9 9 !!---------------------------------------------------------------------- 10 10 … … 29 29 !! eddy induced velocity 30 30 !! always harmonic : aeiu, aeiv, aeiw defined at u-, v-, w-pts 31 !!32 31 !!---------------------------------------------------------------------- 33 !! * Modules used34 32 USE ioipsl 35 36 !! * Arguments 37 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout 38 33 ! 34 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout 39 35 !!---------------------------------------------------------------------- 40 36 … … 44 40 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~ -- ' 45 41 IF(lwp) WRITE(numout,*) ' Coefficients set to constant' 46 IF(lwp) WRITE(numout,*)47 42 ELSE 48 43 IF(lwp) WRITE(numout,*) … … 50 45 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~ -- ' 51 46 IF(lwp) WRITE(numout,*) ' Coefficients set to constant' 52 IF(lwp) WRITE(numout,*)53 47 ENDIF 54 48 … … 127 121 CALL prihre(aeiw(:,:,1),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 128 122 ENDIF 129 130 END SUBROUTINE ldf_tra_c3d123 ! 124 END SUBROUTINE ldf_tra_c3d -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_oce.F90
r2636 r2690 91 91 ALLOCATE( ahtt(jpi,jpj,jpk) , ahtu(jpi,jpj,jpk) , ahtv(jpi,jpj,jpk) , ahtw(jpi,jpj,jpk) , STAT=ierr(1) ) 92 92 #elif defined key_traldf_c2d 93 ALLOCATE( ahtt(jpi,jpj ), ahtu(jpi,jpj), ahtv(jpi,jpj ) , ahtw(jpi,jpj ) , STAT=ierr(1) )93 ALLOCATE( ahtt(jpi,jpj ) , ahtu(jpi,jpj ) , ahtv(jpi,jpj ) , ahtw(jpi,jpj ) , STAT=ierr(1) ) 94 94 #elif defined key_traldf_c1d 95 ALLOCATE( ahtt( jpk) , ahtu(jpk) , ahtv( jpk) , ahtw( jpk) , STAT=ierr(1) )95 ALLOCATE( ahtt( jpk) , ahtu( jpk) , ahtv( jpk) , ahtw( jpk) , STAT=ierr(1) ) 96 96 #endif 97 97 ! -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/OBC/obcdyn_bt.F90
r2618 r2690 1 1 MODULE obcdyn_bt 2 !!====================================================================== 3 !! *** MODULE obcdyn_bt *** 4 !! Ocean dynamics: Radiation/prescription of sea surface heights on each open boundary 5 !!====================================================================== 6 !! History : 1.0 ! 2005-12 (V. Garnier) original code 7 !!---------------------------------------------------------------------- 2 8 #if ( defined key_dynspg_ts || defined key_dynspg_exp ) && defined key_obc 3 !!================================================================================= 4 !! *** MODULE obcdyn_bt *** 5 !! Ocean dynamics: Radiation/prescription of sea surface heights 6 !! on each open boundary 7 !!================================================================================= 8 9 !!--------------------------------------------------------------------------------- 9 !!---------------------------------------------------------------------- 10 !! 'key_dynspg_ts' OR time spliting free surface 11 !! 'key_dynspg_exp' AND explicit free surface 12 !! 'key_obc' Open Boundary Condition 13 !!---------------------------------------------------------------------- 10 14 !! obc_dyn_bt : call the subroutine for each open boundary 11 15 !! obc_dyn_bt_east : Flather's algorithm at the east open boundary … … 13 17 !! obc_dyn_bt_north : Flather's algorithm at the north open boundary 14 18 !! obc_dyn_bt_south : Flather's algorithm at the south open boundary 15 !!---------------------------------------------------------------------------------- 16 17 !!---------------------------------------------------------------------------------- 19 !!---------------------------------------------------------------------- 18 20 USE oce ! ocean dynamics and tracers 19 21 USE dom_oce ! ocean space and time domain … … 29 31 PRIVATE 30 32 31 !! * Accessibility 32 PUBLIC obc_dyn_bt ! routine called in dynnxt (explicit free surface case) 33 34 !!--------------------------------------------------------------------------------- 33 PUBLIC obc_dyn_bt ! routine called in dynnxt (explicit free surface case) 34 35 !!---------------------------------------------------------------------- 35 36 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 36 37 !! $Id$ 37 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 38 !!---------------------------------------------------------------------- 39 38 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 39 !!---------------------------------------------------------------------- 40 40 CONTAINS 41 41 42 42 SUBROUTINE obc_dyn_bt( kt ) 43 !!------------------------------------------------------------------------------ 44 !! SUBROUTINE obc_dyn_bt 45 !! *********************** 46 !! ** Purpose : 47 !! Apply Flather's algorithm at open boundaries for the explicit 48 !! free surface case and free surface case with time-splitting 43 !!---------------------------------------------------------------------- 44 !! *** SUBROUTINE obc_dyn_bt *** 45 !! 46 !! ** Purpose : Apply Flather's algorithm at open boundaries for the explicit 47 !! free surface case and free surface case with time-splitting 49 48 !! 50 49 !! This routine is called in dynnxt.F routine and updates ua, va and sshn. … … 54 53 !! open one (must be done in the param_obc.h90 file). 55 54 !! 56 !! ** Reference : Flather, R. A., 1976, Mem. Soc. R. Sci. Liege, Ser. 6, 10, 141-164 57 !! 58 !! History : 9.0 ! 05-12 (V. Garnier) original 59 !!---------------------------------------------------------------------- 60 !! * Arguments 61 INTEGER, INTENT( in ) :: kt 62 55 !! Reference : Flather, R. A., 1976, Mem. Soc. R. Sci. Liege, Ser. 6, 10, 141-164 56 !!---------------------------------------------------------------------- 57 INTEGER, INTENT(in) :: kt 63 58 !!---------------------------------------------------------------------- 64 59 … … 82 77 83 78 # if defined key_dynspg_exp 79 84 80 SUBROUTINE obc_dyn_bt_east 85 !!---------------------------------------------------------------------- --------81 !!---------------------------------------------------------------------- 86 82 !! *** SUBROUTINE obc_dyn_bt_east *** 87 83 !! … … 90 86 !! Fix sea surface height (sshn) on east open boundary 91 87 !! The logical lfbceast must be .TRUE. 92 !! 93 !! History : 94 !! 9.0 ! 05-12 (V. Garnier) original 95 !!------------------------------------------------------------------------------ 96 !! * Local declaration 97 INTEGER :: ji, jj, jk ! dummy loop indices 98 !!------------------------------------------------------------------------------ 88 !!---------------------------------------------------------------------- 89 INTEGER, INTENT(in) :: kt 90 !!---------------------------------------------------------------------- 91 INTEGER :: ji, jj, jk ! dummy loop indices 92 !!---------------------------------------------------------------------- 99 93 100 94 DO ji = nie0, nie1 … … 117 111 118 112 SUBROUTINE obc_dyn_bt_west 119 !!---------------------------------------------------------------------- --------113 !!---------------------------------------------------------------------- 120 114 !! *** SUBROUTINE obc_dyn_bt_west *** 121 115 !! … … 124 118 !! Fix sea surface height (sshn) on west open boundary 125 119 !! The logical lfbcwest must be .TRUE. 126 !! 127 !! History : 128 !! 9.0 ! 05-12 (V. Garnier) original 129 !!------------------------------------------------------------------------------ 130 !! * Local declaration 131 INTEGER :: ji, jj, jk ! dummy loop indices 132 !!------------------------------------------------------------------------------ 133 120 !!---------------------------------------------------------------------- 121 INTEGER :: ji, jj, jk ! dummy loop indices 122 !!---------------------------------------------------------------------- 123 ! 134 124 DO ji = niw0, niw1 135 125 DO jk = 1, jpkm1 … … 144 134 END DO 145 135 END DO 146 136 ! 147 137 END SUBROUTINE obc_dyn_bt_west 138 148 139 149 140 SUBROUTINE obc_dyn_bt_north … … 155 146 !! Fix sea surface height (sshn) on north open boundary 156 147 !! The logical lfbcnorth must be .TRUE. 157 !! 158 !! History : 159 !! 9.0 ! 05-12 (V. Garnier) original 160 !!------------------------------------------------------------------------------ 161 !! * Local declaration 162 INTEGER :: ji, jj, jk ! dummy loop indices 163 !!------------------------------------------------------------------------------ 164 148 !!---------------------------------------------------------------------- 149 INTEGER :: ji, jj, jk ! dummy loop indices 150 !!---------------------------------------------------------------------- 151 ! 165 152 DO jj = njn0, njn1 166 153 DO jk = 1, jpkm1 … … 177 164 END DO 178 165 END DO 179 166 ! 180 167 END SUBROUTINE obc_dyn_bt_north 181 168 169 182 170 SUBROUTINE obc_dyn_bt_south 183 !!---------------------------------------------------------------------- --------171 !!---------------------------------------------------------------------- 184 172 !! *** SUBROUTINE obc_dyn_bt_south *** 185 173 !! … … 188 176 !! Fix sea surface height (sshn) on south open boundary 189 177 !! The logical lfbcsouth must be .TRUE. 190 !! 191 !! History : 192 !! 9.0 ! 05-12 (V. Garnier) original 193 !!------------------------------------------------------------------------------ 194 !! * Local declaration 195 INTEGER :: ji, jj, jk ! dummy loop indices 196 197 !!------------------------------------------------------------------------------ 198 178 !!---------------------------------------------------------------------- 179 INTEGER :: ji, jj, jk ! dummy loop indices 180 !!---------------------------------------------------------------------- 181 ! 199 182 DO jj = njs0, njs1 200 183 DO jk = 1, jpkm1 … … 209 192 END DO 210 193 END DO 211 194 ! 212 195 END SUBROUTINE obc_dyn_bt_south 213 196 … … 222 205 !! Fix sea surface height (sshn) on east open boundary 223 206 !! The logical lfbceast must be .TRUE. 224 !! 225 !! History : 226 !! 9.0 ! 05-12 (V. Garnier) original 227 !!------------------------------------------------------------------------------ 228 !! * Local declaration 229 INTEGER :: ji, jj, jk ! dummy loop indices 230 !!------------------------------------------------------------------------------ 231 207 !!---------------------------------------------------------------------- 208 INTEGER :: ji, jj, jk ! dummy loop indices 209 !!---------------------------------------------------------------------- 210 ! 232 211 DO ji = nie0, nie1 233 212 DO jk = 1, jpkm1 … … 242 221 END DO 243 222 END DO 244 223 ! 245 224 END SUBROUTINE obc_dyn_bt_east 246 225 226 247 227 SUBROUTINE obc_dyn_bt_west 248 !!--------------------------------------------------------------------- ---------228 !!--------------------------------------------------------------------- 249 229 !! *** SUBROUTINE obc_dyn_bt_west *** 250 230 !! 251 !! ** Purpose : 252 !! ** Purpose : 253 !! Apply Flather algorithm on west OBC velocities ua, va 231 !! ** Purpose : Apply Flather algorithm on west OBC velocities ua, va 254 232 !! Fix sea surface height (sshn) on west open boundary 255 233 !! The logical lfbcwest must be .TRUE. 256 !! 257 !! History : 258 !! 9.0 ! 05-12 (V. Garnier) original 259 !!------------------------------------------------------------------------------ 260 !! * Local declaration 261 INTEGER :: ji, jj, jk ! dummy loop indices 262 !!------------------------------------------------------------------------------ 263 234 !!---------------------------------------------------------------------- 235 INTEGER :: ji, jj, jk ! dummy loop indices 236 !!---------------------------------------------------------------------- 237 ! 264 238 DO ji = niw0, niw1 265 239 DO jk = 1, jpkm1 … … 272 246 END DO 273 247 END DO 274 248 ! 275 249 END SUBROUTINE obc_dyn_bt_west 250 276 251 277 252 SUBROUTINE obc_dyn_bt_north 278 253 !!------------------------------------------------------------------------------ 279 !! SUBROUTINE obc_dyn_bt_north280 !! *************************254 !! *** SUBROUTINE obc_dyn_bt_north *** 255 !! 281 256 !! ** Purpose : 282 257 !! Apply Flather algorithm on north OBC velocities ua, va 283 258 !! Fix sea surface height (sshn) on north open boundary 284 259 !! The logical lfbcnorth must be .TRUE. 285 !! 286 !! History : 287 !! 9.0 ! 05-12 (V. Garnier) original 288 !!------------------------------------------------------------------------------ 289 !! * Local declaration 290 INTEGER :: ji, jj, jk ! dummy loop indices 291 !!------------------------------------------------------------------------------ 292 260 !!---------------------------------------------------------------------- 261 INTEGER :: ji, jj, jk ! dummy loop indices 262 !!---------------------------------------------------------------------- 263 ! 293 264 DO jj = njn0, njn1 294 265 DO jk = 1, jpkm1 … … 303 274 END DO 304 275 END DO 305 276 ! 306 277 END SUBROUTINE obc_dyn_bt_north 278 307 279 308 280 SUBROUTINE obc_dyn_bt_south 309 281 !!------------------------------------------------------------------------------ 310 !! SUBROUTINE obc_dyn_bt_south311 !! *************************282 !! *** SUBROUTINE obc_dyn_bt_south *** 283 !! 312 284 !! ** Purpose : 313 285 !! Apply Flather algorithm on south OBC velocities ua, va 314 286 !! Fix sea surface height (sshn) on south open boundary 315 287 !! The logical lfbcsouth must be .TRUE. 316 !! 317 !! History : 318 !! 9.0 ! 05-12 (V. Garnier) original 319 !!------------------------------------------------------------------------------ 320 INTEGER :: ji, jj, jk ! dummy loop indices 321 !!------------------------------------------------------------------------------ 322 288 !!---------------------------------------------------------------------- 289 INTEGER :: ji, jj, jk ! dummy loop indices 290 !!---------------------------------------------------------------------- 291 ! 323 292 DO jj = njs0, njs1 324 293 DO jk = 1, jpkm1 … … 331 300 END DO 332 301 END DO 333 302 ! 334 303 END SUBROUTINE obc_dyn_bt_south 335 304 336 305 # endif 306 337 307 #else 338 !!================================================================================= 339 !! *** MODULE obcdyn_bt *** 340 !! Ocean dynamics: Radiation of velocities on each open boundary 341 !!================================================================================= 308 !!---------------------------------------------------------------------- 309 !! Default option No Open Boundaries or not explicit fre surface 310 !!---------------------------------------------------------------------- 342 311 CONTAINS 343 344 SUBROUTINE obc_dyn_bt 345 ! No open boundaries ==> empty routine 312 SUBROUTINE obc_dyn_bt ! Dummy routine 346 313 END SUBROUTINE obc_dyn_bt 347 314 #endif 348 315 316 !!====================================================================== 349 317 END MODULE obcdyn_bt -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/OBC/obcfla.F90
r2618 r2690 8 8 !! 4.0 ! 2011-02 (G. Madec) velocity & ssh passed in argument 9 9 !!---------------------------------------------------------------------- 10 #if defined key_obc &&defined key_dynspg_ts10 #if defined key_obc && defined key_dynspg_ts 11 11 !!---------------------------------------------------------------------- 12 12 !! 'key_obc' and Open Boundary Condition … … 75 75 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: p_sshn, p_ssha ! before, now, after sea surface height 76 76 ! 77 INTEGER :: ji, jj ! dummy loop indices77 INTEGER :: ji, jj ! dummy loop indices 78 78 !!---------------------------------------------------------------------- 79 79 ! … … 106 106 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: p_sshn, p_ssha ! before, now, after sea surface height 107 107 ! 108 INTEGER :: ji, jj ! dummy loop indices108 INTEGER :: ji, jj ! dummy loop indices 109 109 !!---------------------------------------------------------------------- 110 110 ! … … 133 133 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: p_sshn, p_ssha ! before, now, after sea surface height 134 134 ! 135 INTEGER :: ji, jj ! dummy loop indices135 INTEGER :: ji, jj ! dummy loop indices 136 136 !!---------------------------------------------------------------------- 137 137 ! … … 164 164 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: p_sshn, p_ssha ! before, now, after sea surface height 165 165 ! 166 INTEGER :: ji, jj ! dummy loop indices166 INTEGER :: ji, jj ! dummy loop indices 167 167 !!---------------------------------------------------------------------- 168 168 ! … … 185 185 !!---------------------------------------------------------------------- 186 186 CONTAINS 187 188 187 SUBROUTINE obc_fla_ts( pua, pva, p_sshn, p_ssha ) 189 188 REAL, DIMENSION(:,:):: pua, pva, p_sshn, p_ssha -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/albedo.F90
r2640 r2690 66 66 !!---------------------------------------------------------------------- 67 67 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 68 USE wrk_nemo, ONLY: wrk_3d_6 , wrk_3d_7 ! 3D workspace68 USE wrk_nemo, ONLY: wrk_3d_6 , wrk_3d_7 ! 3D workspace 69 69 !! 70 70 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pt_ice ! ice surface temperature (Kelvin) … … 187 187 REAL(wp), DIMENSION(:,:), INTENT(out) :: pa_oce_cs ! albedo of ocean under clear sky 188 188 !! 189 REAL(wp) :: zcoef ! temporaryscalar189 REAL(wp) :: zcoef ! local scalar 190 190 !!---------------------------------------------------------------------- 191 191 ! -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/cpl_oasis3.F90
r2620 r2690 32 32 USE dom_oce ! ocean space and time domain 33 33 USE in_out_manager ! I/O manager 34 USE lbclnk ! ocean lateral boundary conditions (or mpp link)34 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 35 35 36 36 IMPLICIT NONE 37 37 PRIVATE 38 38 39 PUBLIC cpl_prism_init40 PUBLIC cpl_prism_define41 PUBLIC cpl_prism_snd42 PUBLIC cpl_prism_rcv43 PUBLIC cpl_prism_freq44 PUBLIC cpl_prism_finalize45 46 LOGICAL, PUBLIC, PARAMETER :: lk_cpl = .TRUE. !: coupled flag47 INTEGER, PUBLIC :: OASIS_Rcv = 1 !: return code if received field48 INTEGER, PUBLIC :: OASIS_idle = 0 !: return code if nothing done by oasis49 INTEGER :: ncomp_id ! id returned by prism_init_comp50 INTEGER :: nerror ! return error code51 52 INTEGER, PARAMETER :: nmaxfld=40 ! Maximum number of coupling fields39 PUBLIC cpl_prism_init 40 PUBLIC cpl_prism_define 41 PUBLIC cpl_prism_snd 42 PUBLIC cpl_prism_rcv 43 PUBLIC cpl_prism_freq 44 PUBLIC cpl_prism_finalize 45 46 LOGICAL, PUBLIC, PARAMETER :: lk_cpl = .TRUE. !: coupled flag 47 INTEGER, PUBLIC :: OASIS_Rcv = 1 !: return code if received field 48 INTEGER, PUBLIC :: OASIS_idle = 0 !: return code if nothing done by oasis 49 INTEGER :: ncomp_id ! id returned by prism_init_comp 50 INTEGER :: nerror ! return error code 51 52 INTEGER, PARAMETER :: nmaxfld=40 ! Maximum number of coupling fields 53 53 54 54 TYPE, PUBLIC :: FLD_CPL !: Type for coupling field information … … 60 60 END TYPE FLD_CPL 61 61 62 TYPE(FLD_CPL), DIMENSION(nmaxfld), PUBLIC :: srcv, ssnd !: Coupling fields63 64 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: exfld! Temporary buffer for receiving62 TYPE(FLD_CPL), DIMENSION(nmaxfld), PUBLIC :: srcv, ssnd !: Coupling fields 63 64 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: exfld ! Temporary buffer for receiving 65 65 66 66 !!---------------------------------------------------------------------- … … 243 243 INTEGER , INTENT( out) :: kinfo ! OASIS3 info argument 244 244 !! 245 LOGICAL ::llaction245 LOGICAL :: llaction 246 246 !!-------------------------------------------------------------------- 247 247 ! … … 284 284 285 285 286 FUNCTION cpl_prism_freq( kid )286 INTEGER FUNCTION cpl_prism_freq( kid ) 287 287 !!--------------------------------------------------------------------- 288 288 !! *** ROUTINE cpl_prism_freq *** … … 290 290 !! ** Purpose : - send back the coupling frequency for a particular field 291 291 !!---------------------------------------------------------------------- 292 INTEGER,INTENT( IN ) :: kid ! variable index 293 INTEGER :: cpl_prism_freq ! coupling frequency 292 INTEGER,INTENT(in) :: kid ! variable index 294 293 !!---------------------------------------------------------------------- 295 294 cpl_prism_freq = ig_def_freq( kid ) … … 307 306 !!---------------------------------------------------------------------- 308 307 ! 309 DEALLOCATE( exfld)310 CALL prism_terminate_proto 308 DEALLOCATE( exfld ) 309 CALL prism_terminate_proto( nerror ) 311 310 ! 312 311 END SUBROUTINE cpl_prism_finalize -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/fldread.F90
r2636 r2690 822 822 ! 823 823 IF( wrk_in_use(2, 1) .OR. iwrk_in_use(2,1) ) THEN 824 CALL ctl_stop('fld_weights: requested workspace arrays are unavailable .') ; RETURN824 CALL ctl_stop('fld_weights: requested workspace arrays are unavailable') ; RETURN 825 825 ENDIF 826 826 ! … … 936 936 937 937 IF( wrk_not_released(2, 1) .OR. & 938 iwrk_not_released(2, 1) 938 iwrk_not_released(2, 1) ) CALL ctl_stop('fld_weights: failed to release workspace arrays') 939 939 ! 940 940 END SUBROUTINE fld_weight -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/geo2ocean.F90
r2636 r2690 513 513 !! 8.5 ! 02-08 (G. Madec) F90: Free form 514 514 !!---------------------------------------------------------------------- 515 !! * Arguments 516 REAL(wp), INTENT( IN ), DIMENSION(jpi,jpj) :: & 517 px1, py1 ! two horizontal components to be rotated 518 REAL(wp), INTENT( OUT ), DIMENSION(jpi,jpj) :: & 519 px2, py2 ! the two horizontal components in the model repere 520 INTEGER, INTENT( IN ) :: & 521 kchoix ! type of transformation 522 ! = 1 change from geographic to model grid. 523 ! =-1 change from model to geographic grid 524 CHARACTER(len=1), INTENT( IN ), OPTIONAL :: cd_type ! define the nature of pt2d array grid-points 515 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj) :: px1, py1 ! two horizontal components to be rotated 516 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: px2, py2 ! the two horizontal components in the model repere 517 INTEGER , INTENT(in ) :: kchoix ! type of transformation 518 ! ! = 1 change from geographic to model grid. 519 ! ! =-1 change from model to geographic grid 520 CHARACTER(len=1), INTENT(in ), OPTIONAL :: cd_type ! define the nature of pt2d array grid-points 525 521 ! 526 522 CHARACTER(len=1) :: cl_type ! define the nature of pt2d array grid-points (T point by default) … … 554 550 !! 9.2 ! 09-02 (K. Mogensen) 555 551 !!---------------------------------------------------------------------- 556 REAL(wp), DIMENSION(jpi,jpj), INTENT( OUT ):: & 557 & psinu, pcosu, psinv, pcosv! copy of data 552 REAL(wp), DIMENSION(jpi,jpj), INTENT( OUT ):: psinu, pcosu, psinv, pcosv ! copy of data 558 553 !!---------------------------------------------------------------------- 559 554 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_ice.F90
r2620 r2690 77 77 & utau_ice(jpi,jpj) , vtau_ice(jpi,jpj) , & 78 78 & fr1_i0 (jpi,jpj) , fr2_i0 (jpi,jpj) , & 79 & emp_ice(jpi,jpj) , STAT= sbc_ice_alloc )79 & emp_ice(jpi,jpj) , STAT= sbc_ice_alloc ) 80 80 ! 81 81 IF( lk_mpp ) CALL mpp_sum ( sbc_ice_alloc ) -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r2620 r2690 103 103 & vtau(jpi,jpj) , vtau_b(jpi,jpj) , wndm(jpi,jpj) , STAT=ierr(1) ) 104 104 ! 105 ALLOCATE( qns_tot(jpi,jpj) , qns (jpi,jpj) , qns_b(jpi,jpj), &106 & qsr_tot(jpi,jpj) , qsr (jpi,jpj) , &107 & emp (jpi,jpj) , emp_b (jpi,jpj) , &108 & emps (jpi,jpj) , emps_b(jpi,jpj) , emp_tot(jpi,jpj) , STAT=ierr(2) )105 ALLOCATE( qns_tot(jpi,jpj) , qns (jpi,jpj) , qns_b(jpi,jpj), & 106 & qsr_tot(jpi,jpj) , qsr (jpi,jpj) , & 107 & emp (jpi,jpj) , emp_b (jpi,jpj) , & 108 & emps (jpi,jpj) , emps_b(jpi,jpj) , emp_tot(jpi,jpj) , STAT=ierr(2) ) 109 109 ! 110 110 ALLOCATE( rnf (jpi,jpj) , sbc_tsc (jpi,jpj,jpts) , qsr_hc (jpi,jpj,jpk) , & -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/sbcana.F90
r2620 r2690 27 27 PUBLIC sbc_gyre ! routine called in sbcmod module 28 28 29 ! !!* Namelist namsbc_ana *30 INTEGER :: nn_tau000 = 1 ! nb of time-step during which the surface stress31 ! ! increase from 0 to its nominal value32 REAL(wp) :: rn_utau0 = 0. e0! constant wind stress value in i-direction33 REAL(wp) :: rn_vtau0 = 0. e0! constant wind stress value in j-direction34 REAL(wp) :: rn_qns0 = 0. e0! non solar heat flux35 REAL(wp) :: rn_qsr0 = 0. e0! solar heat flux36 REAL(wp) :: rn_emp0 = 0. e0! net freshwater flux29 ! !!* Namelist namsbc_ana * 30 INTEGER :: nn_tau000 = 1 ! nb of time-step during which the surface stress 31 ! ! increase from 0 to its nominal value 32 REAL(wp) :: rn_utau0 = 0._wp ! constant wind stress value in i-direction 33 REAL(wp) :: rn_vtau0 = 0._wp ! constant wind stress value in j-direction 34 REAL(wp) :: rn_qns0 = 0._wp ! non solar heat flux 35 REAL(wp) :: rn_qsr0 = 0._wp ! solar heat flux 36 REAL(wp) :: rn_emp0 = 0._wp ! net freshwater flux 37 37 38 38 !! * Substitutions … … 63 63 !!---------------------------------------------------------------------- 64 64 INTEGER, INTENT(in) :: kt ! ocean time step 65 ! !66 REAL(wp) 67 REAL(wp) :: zrhoa = 1.22! Air density kg/m368 REAL(wp) :: zcdrag = 1.5e-3! drag coefficient69 REAL(wp) 65 ! 66 REAL(wp) :: zfacto ! local scalar 67 REAL(wp) :: zrhoa = 1.22_wp ! Air density kg/m3 68 REAL(wp) :: zcdrag = 1.5e-3_wp ! drag coefficient 69 REAL(wp) :: ztx, zty, zmod, zcoef ! temporary variables 70 70 !! 71 71 NAMELIST/namsbc_ana/ nn_tau000, rn_utau0, rn_vtau0, rn_qns0, rn_qsr0, rn_emp0 … … 74 74 IF( kt == nit000 ) THEN 75 75 ! 76 REWIND ( numnam )! Read Namelist namsbc : surface fluxes77 READ 76 REWIND( numnam ) ! Read Namelist namsbc : surface fluxes 77 READ ( numnam, namsbc_ana ) 78 78 ! 79 79 IF(lwp) WRITE(numout,*)' ' … … 87 87 IF(lwp) WRITE(numout,*)' net heat flux rn_emp0 = ', rn_emp0 , ' Kg/m2/s' 88 88 ! 89 nn_tau000 = MAX( nn_tau000, 1 ) ! must be >= 189 nn_tau000 = MAX( nn_tau000, 1 ) ! must be >= 1 90 90 ! 91 91 ENDIF … … 304 304 WRITE(numout,*)' ndastp = ', ndastp 305 305 WRITE(numout,*)' adatrj = ', adatrj 306 307 306 ENDIF 308 307 ! -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_clio.F90
r2674 r2690 52 52 INTEGER , PARAMETER :: jp_tair = 6 ! index of 10m air temperature (Kelvin) 53 53 INTEGER , PARAMETER :: jp_prec = 7 ! index of total precipitation (rain+snow) (Kg/m2/s) 54 54 55 TYPE(FLD),ALLOCATABLE,DIMENSION(:) :: sf ! structure of input fields (file informations, fields read) 55 56 … … 115 116 !! - emp, emps evaporation minus precipitation 116 117 !!---------------------------------------------------------------------- 117 INTEGER, INTENT( in) :: kt ! ocean time step118 !! 119 INTEGER :: ifpr, jfpr 118 INTEGER, INTENT(in) :: kt ! ocean time step 119 !! 120 INTEGER :: ifpr, jfpr ! dummy indices 120 121 INTEGER :: ierr0, ierr1, ierr2, ierr3 ! return error code 121 122 !! … … 236 237 ENDIF 237 238 238 zpatm = 101000. ! atmospheric pressure (assumed constant here)239 zpatm = 101000._wp ! atmospheric pressure (assumed constant here) 239 240 240 241 !------------------------------------! … … 634 635 635 636 IF( wrk_not_released(2, 1,2,3,4) .OR. & 636 wrk_not_released(3, 1,2) ) & 637 CALL ctl_stop('blk_ice_clio: failed to release workspace arrays.') 637 wrk_not_released(3, 1,2) ) CALL ctl_stop('blk_ice_clio: failed to release workspace arrays') 638 638 ! 639 639 END SUBROUTINE blk_ice_clio … … 653 653 USE wrk_nemo, ONLY: zev => wrk_2d_1 ! vapour pressure 654 654 USE wrk_nemo, ONLY: zdlha => wrk_2d_2 , zlsrise => wrk_2d_3 , zlsset => wrk_2d_4 655 USE wrk_nemo, ONLY: zps => wrk_2d_5 , zpc => wrk_2d_6 ! sin/cos of latitude per sin/cos of solar declination655 USE wrk_nemo, ONLY: zps => wrk_2d_5 , zpc => wrk_2d_6 ! sin/cos of latitude per sin/cos of solar declination 656 656 !! 657 657 REAL(wp), INTENT( out), DIMENSION(jpi,jpj) :: pqsr_oce ! shortwave radiation over the ocean … … 811 811 USE wrk_nemo, ONLY: zlsrise => wrk_2d_3 ! 2D workspace 812 812 USE wrk_nemo, ONLY: zlsset => wrk_2d_4 ! 2D workspace 813 USE wrk_nemo, ONLY: zps => wrk_2d_5 , zpc => wrk_2d_6 ! sin/cos of latitude per sin/cos of solar declination813 USE wrk_nemo, ONLY: zps => wrk_2d_5 , zpc => wrk_2d_6 ! sin/cos of latitude per sin/cos of solar declination 814 814 !! 815 815 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: pa_ice_cs ! albedo of ice under clear sky -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r2636 r2690 54 54 INTEGER , PARAMETER :: jp_snow = 8 ! index of snow (solid prcipitation) (kg/m2/s) 55 55 INTEGER , PARAMETER :: jp_tdif = 9 ! index of tau diff associated to HF tau (N/m2) at T-point 56 56 57 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf ! structure of input fields (file informations, fields read) 57 58 … … 111 112 !! - emp, emps evaporation minus precipitation 112 113 !!---------------------------------------------------------------------- 113 INTEGER, INTENT( in) :: kt ! ocean time step114 INTEGER, INTENT(in) :: kt ! ocean time step 114 115 !! 115 116 INTEGER :: ierror ! return error code … … 231 232 232 233 IF( wrk_in_use(2, 1,2,3,4,5,6,7,8,9,10,11,12,13) ) THEN 233 CALL ctl_stop('blk_oce_core: requested workspace arrays unavailable .') ; RETURN234 CALL ctl_stop('blk_oce_core: requested workspace arrays unavailable') ; RETURN 234 235 ENDIF 235 236 ! … … 605 606 ENDIF 606 607 607 IF( wrk_not_released(2, 1) .OR. &608 IF( wrk_not_released(2, 1) .OR. & 608 609 wrk_not_released(3, 4,5,6,7) ) CALL ctl_stop('blk_ice_core: failed to release workspace arrays') 609 610 ! … … 663 664 !!---------------------------------------------------------------------- 664 665 665 IF( wrk_in_use(2, 14,15,16,17,18,19,&666 20,21,22,23,24,25,26,27,28,29,&667 30,31,32) .OR.&668 iwrk_in_use(2, 1) ) THEN666 IF( wrk_in_use(2, 14,15,16,17,18,19, & 667 20,21,22,23,24,25,26,27,28,29, & 668 30,31,32) .OR. & 669 iwrk_in_use(2, 1) ) THEN 669 670 CALL ctl_stop('TURB_CORE_1Z: requested workspace arrays unavailable') ; RETURN 670 671 ENDIF … … 797 798 !! * Start 798 799 799 IF( wrk_in_use(2, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21) .OR. & 800 iwrk_in_use(2, 1) )THEN 801 CALL ctl_stop('TURB_CORE_2Z: requested workspace arrays unavailable.') 802 RETURN 800 IF( wrk_in_use(2, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21) .OR. & 801 iwrk_in_use(2, 1) ) THEN 802 CALL ctl_stop('TURB_CORE_2Z: requested workspace arrays unavailable') ; RETURN 803 803 END IF 804 804 … … 876 876 END DO 877 877 !! 878 IF( wrk_not_released(2, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21) .OR. & 879 iwrk_not_released(2, 1) )THEN 880 CALL ctl_stop('TURB_CORE_2Z: requested workspace arrays unavailable.') 881 END IF 878 IF( wrk_not_released(2, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21) .OR. & 879 iwrk_not_released(2, 1) ) CALL ctl_stop('TURB_CORE_2Z: requested workspace arrays unavailable') 882 880 ! 883 881 END SUBROUTINE TURB_CORE_2Z … … 897 895 !------------------------------------------------------------------------------- 898 896 899 IF(wrk_in_use(2, 33,34,35))THEN 900 CALL ctl_stop('psi_m: requested workspace arrays unavailable.') 901 RETURN 902 END IF 897 IF( wrk_in_use(2, 33,34,35) ) THEN 898 CALL ctl_stop('psi_m: requested workspace arrays unavailable') ; RETURN 899 ENDIF 903 900 904 901 X2 = sqrt(abs(1. - 16.*zta)) ; X2 = max(X2 , 1.0) ; X = sqrt(X2) 905 902 stabit = 0.5 + sign(0.5,zta) 906 psi_m = -5.*zta*stabit & ! Stable 907 & + (1. - stabit)*(2*log((1. + X)/2) + log((1. + X2)/2) - 2*atan(X) + pi/2) ! Unstable 908 909 IF( wrk_not_released(2, 33,34,35) ) THEN 910 CALL ctl_stop('psi_m: failed to release workspace arrays.') 911 RETURN 912 END IF 913 903 psi_m = -5.*zta*stabit & ! Stable 904 & + (1. - stabit)*(2*log((1. + X)/2) + log((1. + X2)/2) - 2*atan(X) + pi/2) ! Unstable 905 906 IF( wrk_not_released(2, 33,34,35) ) CALL ctl_stop('psi_m: failed to release workspace arrays') 907 ! 914 908 END FUNCTION psi_m 915 909 916 910 917 FUNCTION psi_h( zta) !! Psis, L & Y eq. (8c), (8d), (8e)911 FUNCTION psi_h( zta ) !! Psis, L & Y eq. (8c), (8d), (8e) 918 912 !------------------------------------------------------------------------------- 919 913 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released … … 921 915 USE wrk_nemo, ONLY: X => wrk_2d_34 922 916 USE wrk_nemo, ONLY: stabit => wrk_2d_35 923 ! !924 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: zta925 926 REAL(wp), DIMENSION(jpi,jpj) :: psi_h917 ! 918 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: zta 919 ! 920 REAL(wp), DIMENSION(jpi,jpj) :: psi_h 927 921 !------------------------------------------------------------------------------- 928 922 … … 934 928 stabit = 0.5 + sign(0.5,zta) 935 929 psi_h = -5.*zta*stabit & ! Stable 936 &+ (1. - stabit)*(2.*log( (1. + X2)/2. )) ! Unstable937 938 IF( wrk_not_released(2, 33,34,35) ) CALL ctl_stop('psi_h: failed to release workspace arrays .')930 & + (1. - stabit)*(2.*log( (1. + X2)/2. )) ! Unstable 931 932 IF( wrk_not_released(2, 33,34,35) ) CALL ctl_stop('psi_h: failed to release workspace arrays') 939 933 ! 940 934 END FUNCTION psi_h -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r2636 r2690 156 156 #if ! defined key_lim2 && ! defined key_lim3 157 157 ! quick patch to be able to run the coupled model without sea-ice... 158 INTEGER, PARAMETER 158 INTEGER, PARAMETER :: jpl = 1 159 159 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: hicif, hsnif, u_ice, v_ice,fr1_i0,fr2_i0 ! jpi, jpj 160 160 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tn_ice, alb_ice ! (jpi,jpj,jpl) 161 REAL(wp) 161 REAL(wp) :: lfus 162 162 #endif 163 163 … … 167 167 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 168 168 !! $Id$ 169 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)169 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 170 170 !!---------------------------------------------------------------------- 171 171 … … 206 206 !! * initialise the OASIS coupler 207 207 !!---------------------------------------------------------------------- 208 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released209 USE wrk_nemo, ONLY: zacs => wrk_2d_1, zaos => wrk_2d_2! clear & overcast sky albedos208 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 209 USE wrk_nemo, ONLY: zacs => wrk_2d_1 , zaos => wrk_2d_2 ! clear & overcast sky albedos 210 210 !! 211 211 INTEGER, INTENT(in) :: k_ice ! ice management in the sbc (=0/1/2/3) 212 212 !! 213 INTEGER :: jn! dummy loop index213 INTEGER :: jn ! dummy loop index 214 214 !! 215 215 NAMELIST/namsbc_cpl/ cn_snd_temperature, cn_snd_albedo , cn_snd_thickness, & … … 223 223 !!--------------------------------------------------------------------- 224 224 225 IF( wrk_in_use(2, 1,2) ) THEN225 IF( wrk_in_use(2, 1,2) ) THEN 226 226 CALL ctl_stop('sbc_cpl_init: requested workspace arrays unavailable') ; RETURN 227 227 ENDIF … … 563 563 & CALL ctl_stop( 'sbc_cpl_init: diurnal cycle reconstruction (ln_dm2dc) needs daily couping for solar radiation' ) 564 564 565 IF( wrk_not_released(2, 1,2) ) CALL ctl_stop('sbc_cpl_init: failed to release workspace arrays .')565 IF( wrk_not_released(2, 1,2) ) CALL ctl_stop('sbc_cpl_init: failed to release workspace arrays') 566 566 ! 567 567 END SUBROUTINE sbc_cpl_init … … 610 610 !! emp = emps evap. - precip. (- runoffs) (- calving) ('ocean only case) 611 611 !!---------------------------------------------------------------------- 612 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released613 USE wrk_nemo, ONLY: ztx => wrk_2d_1, zty => wrk_2d_2612 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 613 USE wrk_nemo, ONLY: ztx => wrk_2d_1 , zty => wrk_2d_2 614 614 !! 615 615 INTEGER, INTENT(in) :: kt ! ocean model time step index … … 855 855 !! ** Action : return ptau_i, ptau_j, the stress over the ice at cp_ice_msh point 856 856 !!---------------------------------------------------------------------- 857 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released858 USE wrk_nemo, ONLY: ztx => wrk_2d_1, zty => wrk_2d_2857 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 858 USE wrk_nemo, ONLY: ztx => wrk_2d_1 , zty => wrk_2d_2 859 859 !! 860 860 REAL(wp), INTENT(out), DIMENSION(:,:) :: p_taui ! i- & j-components of atmos-ice stress [N/m2] … … 1085 1085 !! sprecip solid precipitation over the ocean 1086 1086 !!---------------------------------------------------------------------- 1087 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released1088 USE wrk_nemo, ONLY: zcptn => wrk_2d_1! rcp * tn(:,:,1)1089 USE wrk_nemo, ONLY: ztmp => wrk_2d_2! temporary array1090 USE wrk_nemo, ONLY: zsnow => wrk_2d_3! snow precipitation1091 USE wrk_nemo, ONLY: zicefr => wrk_3d_1! ice fraction1087 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 1088 USE wrk_nemo, ONLY: zcptn => wrk_2d_1 ! rcp * tn(:,:,1) 1089 USE wrk_nemo, ONLY: ztmp => wrk_2d_2 ! temporary array 1090 USE wrk_nemo, ONLY: zsnow => wrk_2d_3 ! snow precipitation 1091 USE wrk_nemo, ONLY: zicefr => wrk_3d_1 ! ice fraction 1092 1092 !! 1093 1093 REAL(wp), INTENT(in ), DIMENSION(:,:,:) :: p_frld ! lead fraction [0 to 1] … … 1231 1231 END SELECT 1232 1232 1233 IF( wrk_not_released(2, 1,2,3) .OR. &1233 IF( wrk_not_released(2, 1,2,3) .OR. & 1234 1234 wrk_not_released(3, 1) ) CALL ctl_stop('sbc_cpl_ice_flx: failed to release workspace arrays') 1235 1235 ! … … 1246 1246 !! all the needed fields (as defined in sbc_cpl_init) 1247 1247 !!---------------------------------------------------------------------- 1248 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released1249 USE wrk_nemo, ONLY: zfr_l => wrk_2d_1! 1. - fr_i(:,:)1250 USE wrk_nemo, ONLY: ztmp1 => wrk_2d_2, ztmp2 => wrk_2d_31251 USE wrk_nemo, ONLY: zotx1=> wrk_2d_4, zoty1=> wrk_2d_5, zotz1=> wrk_2d_61252 USE wrk_nemo, ONLY: zitx1=> wrk_2d_7, zity1=> wrk_2d_8, zitz1=> wrk_2d_91253 ! !1248 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 1249 USE wrk_nemo, ONLY: zfr_l => wrk_2d_1 ! 1. - fr_i(:,:) 1250 USE wrk_nemo, ONLY: ztmp1 => wrk_2d_2 , ztmp2 => wrk_2d_3 1251 USE wrk_nemo, ONLY: zotx1 => wrk_2d_4 , zoty1 => wrk_2d_5 , zotz1 => wrk_2d_6 1252 USE wrk_nemo, ONLY: zitx1 => wrk_2d_7 , zity1 => wrk_2d_8 , zitz1 => wrk_2d_9 1253 ! 1254 1254 INTEGER, INTENT(in) :: kt 1255 ! !1256 INTEGER :: ji, jj 1257 INTEGER :: isec, info ! temporaryinteger1255 ! 1256 INTEGER :: ji, jj ! dummy loop indices 1257 INTEGER :: isec, info ! local integer 1258 1258 !!---------------------------------------------------------------------- 1259 1259 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/sbcfwb.F90
r2633 r2690 58 58 !! & spread out over erp area depending its sign 59 59 !!---------------------------------------------------------------------- 60 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released61 USE wrk_nemo, ONLY: ztmsk_neg => wrk_2d_1, ztmsk_pos=> wrk_2d_262 USE wrk_nemo, ONLY: ztmsk_tospread => wrk_2d_363 USE wrk_nemo, ONLY: z_wgt => wrk_2d_4, zerp_cor=> wrk_2d_564 ! !60 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 61 USE wrk_nemo, ONLY: ztmsk_neg => wrk_2d_1 , ztmsk_pos => wrk_2d_2 62 USE wrk_nemo, ONLY: ztmsk_tospread => wrk_2d_3 63 USE wrk_nemo, ONLY: z_wgt => wrk_2d_4 , zerp_cor => wrk_2d_5 64 ! 65 65 INTEGER, INTENT( in ) :: kt ! ocean time-step index 66 66 INTEGER, INTENT( in ) :: kn_fsbc ! 67 67 INTEGER, INTENT( in ) :: kn_fwb ! ocean time-step index 68 !! 69 INTEGER :: inum ! temporary logical unit 70 INTEGER :: ikty, iyear ! 71 REAL(wp) :: z_fwf, z_fwf_nsrf, zsum_fwf, zsum_erp ! temporary scalars 72 REAL(wp) :: zsurf_neg, zsurf_pos, zsurf_tospread 68 ! 69 INTEGER :: inum, ikty, iyear ! local integers 70 REAL(wp) :: z_fwf, z_fwf_nsrf, zsum_fwf, zsum_erp ! local scalars 71 REAL(wp) :: zsurf_neg, zsurf_pos, zsurf_tospread ! - - 73 72 !!---------------------------------------------------------------------- 74 73 ! 75 74 IF( wrk_in_use(2, 1,2,3,4,5) ) THEN 76 75 CALL ctl_stop('sbc_fwb: requested workspace arrays are unavailable') ; RETURN 77 END 76 ENDIF 78 77 ! 79 78 IF( kt == nit000 ) THEN -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_if.F90
r2636 r2690 53 53 !! fr_i : update the ice fraction 54 54 !!--------------------------------------------------------------------- 55 INTEGER, INTENT(in) :: kt! ocean time step55 INTEGER, INTENT(in) :: kt ! ocean time step 56 56 ! 57 57 INTEGER :: ji, jj ! dummy loop indices -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r2636 r2690 89 89 !! utau, vtau, taum, wndm, qns , qsr, emp , emps 90 90 !!--------------------------------------------------------------------- 91 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released92 USE wrk_nemo, ONLY: zalb_ice_os => wrk_3d_1 ! albedo of the ice under overcast sky93 USE wrk_nemo, ONLY: zalb_ice_cs => wrk_3d_2 ! albedo of ice under clear sky91 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 92 USE wrk_nemo, ONLY: zalb_ice_os => wrk_3d_1 ! albedo of the ice under overcast sky 93 USE wrk_nemo, ONLY: zalb_ice_cs => wrk_3d_2 ! albedo of ice under clear sky 94 94 !! 95 95 INTEGER, INTENT(in) :: kt ! ocean time step 96 96 INTEGER, INTENT(in) :: kblk ! type of bulk (=3 CLIO, =4 CORE) 97 97 !! 98 INTEGER :: jl !loop index99 REAL(wp) :: zcoef ! temporaryscalar98 INTEGER :: jl ! dummy loop index 99 REAL(wp) :: zcoef ! local scalar 100 100 !!---------------------------------------------------------------------- 101 101 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90
r2636 r2690 83 83 !! utau, vtau, taum, wndm, qns , qsr, emp , emps 84 84 !!--------------------------------------------------------------------- 85 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released86 USE wrk_nemo, ONLY: wrk_3d_1, wrk_3d_2, wrk_3d_3 ! 3D workspace85 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 86 USE wrk_nemo, ONLY: wrk_3d_1 , wrk_3d_2 , wrk_3d_3 ! 3D workspace 87 87 !! 88 88 INTEGER, INTENT(in) :: kt ! ocean time step … … 97 97 98 98 IF( wrk_in_use(3, 1,2,3) ) THEN 99 CALL ctl_stop('sbc_ice_lim_2: requested workspace arrays are unavailable .') ; RETURN99 CALL ctl_stop('sbc_ice_lim_2: requested workspace arrays are unavailable') ; RETURN 100 100 ENDIF 101 101 ! Use pointers to access only sub-arrays of workspaces -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r2676 r2690 75 75 !! - nsbc: type of sbc 76 76 !!---------------------------------------------------------------------- 77 INTEGER :: icpt ! temporaryinteger77 INTEGER :: icpt ! local integer 78 78 !! 79 79 NAMELIST/namsbc/ nn_fsbc , ln_ana , ln_flx , ln_blk_clio, ln_blk_core, ln_cpl, & -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90
r2676 r2690 77 77 ALLOCATE( rnfmsk(jpi,jpj) , rnfmsk_z(jpk) , & 78 78 & h_rnf (jpi,jpj) , nk_rnf (jpi,jpj) , & 79 & rnf_tsc_b(jpi,jpj,jpts) , rnf_tsc (jpi,jpj,jpts) , STAT=sbc_rnf_alloc )79 & rnf_tsc_b(jpi,jpj,jpts) , rnf_tsc (jpi,jpj,jpts) , STAT=sbc_rnf_alloc ) 80 80 ! 81 81 IF( lk_mpp ) CALL mpp_sum ( sbc_rnf_alloc ) 82 IF( sbc_rnf_alloc > 0 ) CALL ctl_warn('sbc_rnf_alloc: allocation of arrays failed .')82 IF( sbc_rnf_alloc > 0 ) CALL ctl_warn('sbc_rnf_alloc: allocation of arrays failed') 83 83 END FUNCTION sbc_rnf_alloc 84 84 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90
r2620 r2690 49 49 !! is add to ssh_m when ln_apr_dyn = T. Required for sea-ice dynamics. 50 50 !!--------------------------------------------------------------------- 51 INTEGER, INTENT(in) :: kt 51 INTEGER, INTENT(in) :: kt ! ocean time step 52 52 ! 53 REAL(wp) :: zcoef ! temporary scalar 54 REAL(wp) :: zf_sbc ! read sbc frequency 53 REAL(wp) :: zcoef, zf_sbc ! local scalar 55 54 !!--------------------------------------------------------------------- 56 55 ! ! ---------------------------------------- ! -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90
r2636 r2690 108 108 !! References : Jackett and McDougall, J. Atmos. Ocean. Tech., 1994 109 109 !!---------------------------------------------------------------------- 110 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released111 USE wrk_nemo, ONLY: zws => wrk_3d_1 ! temporaryworkspace110 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 111 USE wrk_nemo, ONLY: zws => wrk_3d_1 ! 3D workspace 112 112 !! 113 113 REAL(wp), DIMENSION(:,:,:,:), INTENT(in ) :: pts ! 1 : potential temperature [Celcius] 114 ! 115 REAL(wp), DIMENSION(:,:,:) , INTENT( out) :: prd ! in situ density 114 ! ! 2 : salinity [psu] 115 REAL(wp), DIMENSION(:,:,:) , INTENT( out) :: prd ! in situ density [-] 116 116 !! 117 117 INTEGER :: ji, jj, jk ! dummy loop indices 118 REAL(wp) :: zt , zs , zh , zsr ! temporary 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.') 128 RETURN 129 END IF 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 130 129 131 130 SELECT CASE( nn_eos ) … … 192 191 IF(ln_ctl) CALL prt_ctl( tab3d_1=prd, clinfo1=' eos : ', ovlap=1, kdim=jpk ) 193 192 ! 194 IF(wrk_not_released(3, 1))THEN 195 CALL ctl_stop('eos_insitu : failed to release workspace array.') 196 END IF 193 IF( wrk_not_released(3, 1) ) CALL ctl_stop('eos_insitu: failed to release workspace array') 197 194 ! 198 195 END SUBROUTINE eos_insitu … … 245 242 !! Brown and Campana, Mon. Weather Rev., 1978 246 243 !!---------------------------------------------------------------------- 247 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released248 USE wrk_nemo, ONLY: zws => wrk_3d_1 ! 3D workspace249 !! 250 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in ) :: pts ! 1 : potential temperature [Celcius]251 ! ! 2 : salinity [psu]252 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 [-] 253 250 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT( out) :: prhop ! potential density (surface referenced) 254 251 ! 255 252 INTEGER :: ji, jj, jk ! dummy loop indices 256 REAL(wp) :: zt, zs, zh, zsr, zr1, zr2, zr3, zr4, zrhop, ze, zbw ! temporary scalars 257 REAL(wp) :: zb, zd, zc, zaw, za, zb1, za1, zkw, zk0, zrau0r ! - - 258 !!---------------------------------------------------------------------- 259 260 IF(wrk_in_use(3, 1))THEN 261 CALL ctl_stop('eos_insitu_pot: requested workspace array unavailable.') 262 RETURN 263 END IF 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 264 260 265 261 SELECT CASE ( nn_eos ) … … 331 327 IF(ln_ctl) CALL prt_ctl( tab3d_1=prd, clinfo1=' eos-p: ', tab3d_2=prhop, clinfo2=' pot : ', ovlap=1, kdim=jpk ) 332 328 ! 333 IF(wrk_not_released(3, 1))THEN 334 CALL ctl_stop('eos_insitu_pot: failed to release workspace array.') 335 END IF 329 IF( wrk_not_released(3, 1) ) CALL ctl_stop('eos_insitu_pot: failed to release workspace array') 336 330 ! 337 331 END SUBROUTINE eos_insitu_pot … … 374 368 !! References : Jackett and McDougall, J. Atmos. Ocean. Tech., 1994 375 369 !!---------------------------------------------------------------------- 376 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released377 USE wrk_nemo, ONLY: zws => wrk_2d_5 ! 2D workspace370 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 371 USE wrk_nemo, ONLY: zws => wrk_2d_5 ! 2D workspace 378 372 !! 379 373 REAL(wp), DIMENSION(jpi,jpj,jpts), INTENT(in ) :: pts ! 1 : potential temperature [Celcius] … … 387 381 !!---------------------------------------------------------------------- 388 382 389 IF(wrk_in_use(2, 5))THEN 390 CALL ctl_stop('eos_insitu_2d: requested workspace array unavailable.') 391 RETURN 392 END IF 393 394 prd(:,:) = 0.e0 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 395 388 396 389 SELECT CASE( nn_eos ) … … 464 457 IF(ln_ctl) CALL prt_ctl( tab2d_1=prd, clinfo1=' eos2d: ' ) 465 458 ! 466 IF(wrk_not_released(2, 5))THEN 467 CALL ctl_stop('eos_insitu_2d: failed to release workspace array.') 468 END IF 459 IF( wrk_not_released(3, 5) ) CALL ctl_stop('eos_insitu_2d: failed to release workspace array') 469 460 ! 470 461 END SUBROUTINE eos_insitu_2d … … 503 494 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in ) :: pts ! 1 : potential temperature [Celcius] 504 495 ! ! 2 : salinity [psu] 505 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] 506 497 !! 507 498 INTEGER :: ji, jj, jk ! dummy loop indices 508 REAL(wp) :: zgde3w, zt, zs, zh, zalbet, zbeta ! temporaryscalars499 REAL(wp) :: zgde3w, zt, zs, zh, zalbet, zbeta ! local scalars 509 500 #if defined key_zdfddm 510 REAL(wp) :: zds ! temporaryscalars501 REAL(wp) :: zds ! local scalars 511 502 #endif 512 503 !!---------------------------------------------------------------------- … … 522 513 DO ji = 1, jpi 523 514 zgde3w = grav / fse3w(ji,jj,jk) 524 zt = 0.5 * ( pts(ji,jj,jk,jp_tem) + pts(ji,jj,jk-1,jp_tem) ) ! potential temperature at w-point525 zs = 0.5 * ( pts(ji,jj,jk,jp_sal) + pts(ji,jj,jk-1,jp_sal) ) - 35.0 ! salinity anomaly (s-35) at w-point526 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 527 518 ! 528 519 zalbet = ( ( ( - 0.255019e-07_wp * zt + 0.298357e-05_wp ) * zt & ! ratio alpha/beta … … 620 611 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in ) :: pts ! pot. temperature & salinity 621 612 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT( out) :: palph, pbeta ! thermal & haline expansion coeff. 622 ! !613 ! 623 614 INTEGER :: ji, jj, jk ! dummy loop indices 624 615 REAL(wp) :: zt, zs, zh ! local scalars -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
r2636 r2690 63 63 !!---------------------------------------------------------------------- 64 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 workspace65 USE wrk_nemo, ONLY: zun => wrk_3d_1 , zvn => wrk_3d_2 , zwn => wrk_3d_3 ! 3D workspace 66 66 ! 67 67 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 70 70 !!---------------------------------------------------------------------- 71 71 ! 72 IF( wrk_in_use(3, 1,2,3) ) THEN72 IF( wrk_in_use(3, 1,2,3) ) THEN 73 73 CALL ctl_stop('tra_adv: requested workspace arrays unavailable') ; RETURN 74 END 74 ENDIF 75 75 ! ! set time step 76 76 IF( neuler == 0 .AND. kt == nit000 ) THEN ! at nit000 … … 132 132 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 133 133 ! 134 IF( wrk_not_released(3,1,2,3) ) CALL ctl_stop('tra_adv: failed to release workspace arrays')134 IF( wrk_not_released(3,1,2,3) ) CALL ctl_stop('tra_adv: failed to release workspace arrays') 135 135 ! 136 136 END SUBROUTINE tra_adv -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen2.F90
r2636 r2690 31 31 USE restart ! ocean restart 32 32 USE trc_oce ! share passive tracers/Ocean variables 33 USE lib_mpp 33 USE lib_mpp ! MPP library 34 34 35 35 IMPLICIT NONE … … 110 110 !! - save trends if needed 111 111 !!---------------------------------------------------------------------- 112 USE oce , zwx => ua ! use ua as workspace113 USE oce , zwy => va ! use va as workspace114 112 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 115 USE wrk_nemo, ONLY: ztfreez => wrk_2d_1 116 USE wrk_nemo, ONLY: zwz => wrk_3d_1, zind => wrk_3d_2 117 !! 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 ! 118 117 INTEGER , INTENT(in ) :: kt ! ocean time-step index 119 118 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 122 121 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields 123 122 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 124 !! 125 INTEGER :: ji, jj, jk, jn ! dummy loop indices 126 INTEGER :: ierr ! local integer 127 REAL(wp) :: zbtr, ztra ! local scalars 128 REAL(wp) :: zfp_ui, zfp_vj, zfp_w ! - - 129 REAL(wp) :: zfm_ui, zfm_vj, zfm_w ! - - 130 REAL(wp) :: zcofi , zcofj , zcofk ! - - 131 REAL(wp) :: zupsut, zcenut ! - - 132 REAL(wp) :: zupsvt, zcenvt ! - - 133 REAL(wp) :: zupst , zcent ! - - 134 REAL(wp) :: zice ! - - 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 ! - - 135 131 !!---------------------------------------------------------------------- 136 132 137 133 IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 1,2) ) THEN 138 CALL ctl_stop('tra_adv_cen2: ERROR:requested workspace arrays unavailable') ; RETURN139 END 134 CALL ctl_stop('tra_adv_cen2: requested workspace arrays unavailable') ; RETURN 135 ENDIF 140 136 141 137 IF( kt == nit000 ) THEN … … 279 275 ENDIF 280 276 ! 281 IF( wrk_not_released(2, 1) .OR. wrk_not_released(3, 1,2) )THEN 282 CALL ctl_stop('tra_adv_cen2: ERROR: failed to release workspace arrays') 283 END IF 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') 284 279 ! 285 280 END SUBROUTINE tra_adv_cen2 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_eiv.F90
r2633 r2690 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 !!---------------------------------------------------------------------- 66 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 67 USE wrk_nemo, ONLY: zu_eiv => wrk_2d_1, zv_eiv => wrk_2d_2, & 68 zw_eiv => wrk_2d_3 69 # if defined key_diaeiv 70 USE wrk_nemo, ONLY: z2d => wrk_2d_4 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 71 69 #endif 72 70 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 85 83 86 84 # if defined key_diaeiv 87 IF(wrk_in_use(2, 1,2,3,4))THEN 88 #else 89 IF(wrk_in_use(2, 1,2,3))THEN 90 #endif 91 CALL ctl_stop('tra_adv_eiv: ERROR: requested workspace arrays are unavailable.') 92 RETURN 93 END IF 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 94 91 95 92 IF( kt == nit000 ) THEN … … 194 191 ! 195 192 # if defined key_diaeiv 196 IF(wrk_not_released(2, 1,2,3,4))THEN 197 #else 198 IF(wrk_not_released(2, 1,2,3))THEN 199 #endif 200 CALL ctl_stop('tra_adv_eiv: ERROR: failed to release workspace arrays.') 201 END IF 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 202 197 ! 203 198 END SUBROUTINE tra_adv_eiv … … 212 207 CHARACTER(len=3) :: cdtype 213 208 REAL, DIMENSION(:,:,:) :: pun, pvn, pwn 214 WRITE(*,*) 'tra_adv_eiv: You should not have seen this print! error?', kt, cdtype 215 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) 216 210 END SUBROUTINE tra_adv_eiv 217 211 #endif -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90
r2633 r2690 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 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 66 USE wrk_nemo, ONLY: zslpx => wrk_3d_1, zslpy => wrk_3d_2 67 !! 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 ! 68 67 INTEGER , INTENT(in ) :: kt ! ocean time-step index 69 68 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 73 72 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before tracer field 74 73 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 75 ! !74 ! 76 75 INTEGER :: ji, jj, jk, jn ! dummy loop indices 77 REAL(wp) :: zu, z0u, zzwx ! local scalar 78 REAL(wp) :: zv, z0v, zzwy ! - - 79 REAL(wp) :: zw, z0w ! - - 80 REAL(wp) :: ztra, zbtr, zdt, zalpha 76 REAL(wp) :: zu, z0u, zzwx, zw ! local scalars 77 REAL(wp) :: zv, z0v, zzwy, z0w ! - - 78 REAL(wp) :: ztra, zbtr, zdt, zalpha ! - - 81 79 !!---------------------------------------------------------------------- 82 80 83 IF( wrk_in_use(3, 1,2) )THEN 84 CALL ctl_stop('tra_adv_muscl: ERROR: requested workspace arrays unavailable') 85 RETURN 86 END IF 81 IF( wrk_in_use(3, 1,2) ) THEN 82 CALL ctl_stop('tra_adv_muscl: requested workspace arrays unavailable') ; RETURN 83 ENDIF 87 84 88 85 IF( kt == nit000 ) THEN … … 255 252 ENDDO 256 253 ! 257 IF( wrk_not_released(3, 1,2) )THEN 258 CALL ctl_stop('tra_adv_muscl: ERROR: requested workspace arrays unavailable') 259 END IF 254 IF( wrk_not_released(3, 1,2) ) CALL ctl_stop('tra_adv_muscl: requested workspace arrays unavailable') 260 255 ! 261 256 END SUBROUTINE tra_adv_muscl -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl2.F90
r2633 r2690 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 63 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 64 USE wrk_nemo, ONLY: zslpx => wrk_3d_1, zslpy => wrk_3d_2 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 65 64 !! 66 65 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 73 72 !! 74 73 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 74 REAL(wp) :: zu, z0u, zzwx, zw ! local scalars 75 REAL(wp) :: zv, z0v, zzwy, z0w ! - - 76 REAL(wp) :: ztra, zbtr, zdt, zalpha ! - - 79 77 !!---------------------------------------------------------------------- 80 78 81 IF(wrk_in_use(3, 1,2))THEN 82 CALL ctl_stop('tra_adv_muscl2: ERROR: requested workspace arrays are unavailable') 83 RETURN 84 END IF 79 IF( wrk_in_use(3, 1,2) ) THEN 80 CALL ctl_stop('tra_adv_muscl2: requested workspace arrays are unavailable') ; RETURN 81 ENDIF 85 82 86 83 IF( kt == nit000 ) THEN … … 90 87 ! 91 88 l_trd = .FALSE. 92 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. 93 90 ENDIF 94 91 … … 288 285 END DO 289 286 ! 290 IF(wrk_not_released(3, 1,2))THEN 291 CALL ctl_stop('tra_adv_muscl2: ERROR: failed to release workspace arrays') 292 END IF 287 IF( wrk_not_released(3, 1,2) ) CALL ctl_stop('tra_adv_muscl2: failed to release workspace arrays') 293 288 ! 294 289 END SUBROUTINE tra_adv_muscl2 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90
r2633 r2690 115 115 !! 116 116 !!---------------------------------------------------------------------- 117 USE oce , zwx => ua ! use ua as workspace 118 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 119 USE wrk_nemo, ONLY: zfu => wrk_3d_1, zfc => wrk_3d_2, zfd => wrk_3d_3 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 ! local scalars 131 REAL(wp) :: zdir, zdx, zdt, zmsk ! local scalars 117 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 132 131 !---------------------------------------------------------------------- 133 132 ! 134 IF(wrk_in_use(3, 1,2,3))THEN 135 CALL ctl_stop('tra_adv_qck_i: ERROR: requested workspace arrays unavailable') 136 RETURN 137 END IF 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 138 136 ! ! =========== 139 137 DO jn = 1, kjpt ! tracer loop … … 193 191 DO ji = fs_2, fs_jpim1 ! vector opt. 194 192 zfu(ji,jj,jk) = tmask(ji-1,jj,jk) + tmask(ji,jj,jk) + tmask(ji+1,jj,jk) - 2. 195 END DO193 END DO 196 194 END DO 197 195 END DO … … 230 228 END DO 231 229 ! 232 IF(wrk_not_released(3, 1,2,3))THEN 233 CALL ctl_stop('tra_adv_qck_i: ERROR: failed to release workspace arrays') 234 END IF 230 IF( wrk_not_released(3, 1,2,3) ) CALL ctl_stop('tra_adv_qck_i: failed to release workspace arrays') 235 231 ! 236 232 END SUBROUTINE tra_adv_qck_i … … 242 238 !! 243 239 !!---------------------------------------------------------------------- 244 USE oce , zwy => ua ! use ua as workspace 245 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 246 USE wrk_nemo, ONLY: zfu => wrk_3d_1, zfc => wrk_3d_2, zfd => wrk_3d_3 247 !! 248 INTEGER , INTENT(in ) :: kt ! ocean time-step index 249 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 250 INTEGER , INTENT(in ) :: kjpt ! number of tracers 251 REAL(wp), DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile of tracer time-step 252 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pvn ! j-velocity components 253 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields 254 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 255 !! 256 INTEGER :: ji, jj, jk, jn ! dummy loop indices 257 REAL(wp) :: ztra, zbtr ! local scalars 258 REAL(wp) :: zdir, zdx, zdt, zmsk ! local scalars 240 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 259 254 !---------------------------------------------------------------------- 260 255 ! … … 364 359 END DO 365 360 ! 366 IF(wrk_not_released(3, 1,2,3))THEN 367 CALL ctl_stop('tra_adv_qck_j: ERROR: failed to release workspace arrays') 368 END IF 361 IF( wrk_not_released(3, 1,2,3) ) CALL ctl_stop('tra_adv_qck_j: failed to release workspace arrays') 369 362 ! 370 363 END SUBROUTINE tra_adv_qck_j … … 376 369 !! 377 370 !!---------------------------------------------------------------------- 378 USE oce , zwz => ua ! use uaas workspace379 ! !380 INTEGER , INTENT(in ) :: kt 381 CHARACTER(len=3) , INTENT(in ) :: cdtype 382 INTEGER , INTENT(in ) :: kjpt 383 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pwn 384 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptn 385 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta 386 ! !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 ! 387 380 INTEGER :: ji, jj, jk, jn ! dummy loop indices 388 REAL(wp) :: zbtr , ztra ! temporaryscalars381 REAL(wp) :: zbtr , ztra ! local scalars 389 382 !!---------------------------------------------------------------------- 390 383 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90
r2663 r2690 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 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 71 USE wrk_nemo, ONLY: zwi => wrk_3d_12, zwz => wrk_3d_13 72 !! 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 ! 73 72 INTEGER , INTENT(in ) :: kt ! ocean time-step index 74 73 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 78 77 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields 79 78 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 80 ! !79 ! 81 80 INTEGER :: ji, jj, jk, jn ! dummy loop indices 82 81 REAL(wp) :: z2dtt, zbtr, ztra ! local scalar 83 82 REAL(wp) :: zfp_ui, zfp_vj, zfp_wk ! - - 84 83 REAL(wp) :: zfm_ui, zfm_vj, zfm_wk ! - - 85 86 84 REAL(wp), DIMENSION (:,:,:), ALLOCATABLE :: ztrdx, ztrdy, ztrdz 87 85 !!---------------------------------------------------------------------- 88 86 89 IF(wrk_in_use(3, 12,13))THEN 90 CALL ctl_stop('tra_adv_tvd: ERROR: requested workspace arrays unavailable') 91 RETURN 92 END IF 87 IF( wrk_in_use(3, 12,13) ) THEN 88 CALL ctl_stop('tra_adv_tvd: requested workspace arrays unavailable') ; RETURN 89 ENDIF 93 90 94 91 IF( kt == nit000 ) THEN … … 242 239 ENDIF 243 240 ! 244 END DO241 END DO 245 242 ! 246 243 IF( l_trd ) THEN … … 248 245 END IF 249 246 ! 250 IF(wrk_not_released(3, 12,13))THEN 251 CALL ctl_stop('tra_adv_tvd: ERROR: failed to release workspace arrays') 252 END IF 247 IF( wrk_not_released(3, 12,13) ) CALL ctl_stop('tra_adv_tvd: failed to release workspace arrays') 253 248 ! 254 249 END SUBROUTINE tra_adv_tvd … … 268 263 !! in-space based differencing for fluid 269 264 !!---------------------------------------------------------------------- 270 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 271 USE wrk_nemo, ONLY: zbetup => wrk_3d_8, zbetdo => wrk_3d_9, & 272 zbup => wrk_3d_10, zbdo => wrk_3d_11 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 ! 273 269 REAL(wp), DIMENSION(jpk) , INTENT(in ) :: p2dt ! vertical profile of tracer time-step 274 270 REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(in ) :: pbef, paft ! before & after field 275 271 REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(inout) :: paa, pbb, pcc ! monotonic fluxes in the 3 directions 276 !! 277 INTEGER :: ji, jj, jk ! dummy loop indices 278 INTEGER :: ikm1 279 REAL(wp) :: zpos, zneg, zbt, za, zb, zc, zbig, zrtrn, z2dtt 280 REAL(wp) :: zau, zbu, zcu, zav, zbv, zcv 281 REAL(wp) :: zup, zdo 282 !!---------------------------------------------------------------------- 283 284 IF(wrk_in_use(3, 8,9,10,11))THEN 285 CALL ctl_stop('nonosc: ERROR: requested workspace array unavailable') 286 RETURN 287 END IF 288 289 zbig = 1.e+40 290 zrtrn = 1.e-15 291 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 292 286 293 287 … … 365 359 CALL lbc_lnk( paa, 'U', -1. ) ; CALL lbc_lnk( pbb, 'V', -1. ) ! lateral boundary condition (changed sign) 366 360 ! 367 IF(wrk_not_released(3, 8,9,10,11))THEN 368 CALL ctl_stop('nonosc: ERROR: failed to release workspace arrays') 369 END IF 361 IF( wrk_not_released(3, 8,9,10,11) ) CALL ctl_stop('nonosc: failed to release workspace arrays') 370 362 ! 371 363 END SUBROUTINE nonosc -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90
r2633 r2690 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 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 78 USE wrk_nemo, ONLY: ztu => wrk_3d_1, ztv => wrk_3d_2, & 79 zltu => wrk_3d_3, zltv => wrk_3d_4, & 80 zti => wrk_3d_5, ztw => wrk_3d_6 81 !! 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 ! 82 81 INTEGER , INTENT(in ) :: kt ! ocean time-step index 83 82 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 87 86 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields 88 87 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 89 !! 90 INTEGER :: ji, jj, jk, jn ! dummy loop indices 91 REAL(wp) :: ztra, zbtr, zcoef ! local scalars 92 REAL(wp) :: zfp_ui, zfm_ui, zcenut ! - - 93 REAL(wp) :: zfp_vj, zfm_vj, zcenvt ! - - 94 REAL(wp) :: z2dtt ! - - 95 REAL(wp) :: ztak, zfp_wk, zfm_wk ! - - 96 REAL(wp) :: zeeu, zeev, z_hdivn ! - - 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 ! - - 97 93 !!---------------------------------------------------------------------- 98 94 99 95 IF( wrk_in_use(3, 1,2,3,4,5,6) )THEN 100 CALL ctl_stop('tra_adv_ubs: ERROR: requested workspace arrays unavailable') 101 RETURN 102 END IF 96 CALL ctl_stop('tra_adv_ubs: requested workspace arrays unavailable') ; RETURN 97 ENDIF 103 98 104 99 IF( kt == nit000 ) THEN … … 273 268 ENDDO 274 269 ! 275 IF( wrk_not_released(3, 1,2,3,4,5,6) )THEN 276 CALL ctl_stop('tra_adv_ubs: ERROR: failed to release workspace arrays') 277 END IF 270 IF( wrk_not_released(3, 1,2,3,4,5,6) ) CALL ctl_stop('tra_adv_ubs: failed to release workspace arrays') 278 271 ! 279 272 END SUBROUTINE tra_adv_ubs … … 293 286 !! in-space based differencing for fluid 294 287 !!---------------------------------------------------------------------- 295 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released296 USE wrk_nemo, ONLY: zbetup => wrk_3d_1, zbetdo => wrk_3d_2297 ! !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 ! 298 291 REAL(wp), INTENT(in ), DIMENSION(jpk) :: p2dt ! vertical profile of tracer time-step 299 292 REAL(wp), DIMENSION (jpi,jpj,jpk) :: pbef ! before field 300 293 REAL(wp), INTENT(inout), DIMENSION (jpi,jpj,jpk) :: paft ! after field 301 294 REAL(wp), INTENT(inout), DIMENSION (jpi,jpj,jpk) :: pcc ! monotonic flux in the k direction 302 !! 303 INTEGER :: ji, jj, jk ! dummy loop indices 304 INTEGER :: ikm1 305 REAL(wp) :: zpos, zneg, zbt, za, zb, zc, zbig, zrtrn, z2dtt 306 !!---------------------------------------------------------------------- 307 308 IF( wrk_in_use(3, 1,2) )THEN 309 CALL ctl_stop('nonosc_z: ERROR: requested workspace arrays unavailable') 310 RETURN 311 END IF 312 313 zbig = 1.e+40 314 zrtrn = 1.e-15 315 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 316 308 317 309 ! Search local extrema … … 381 373 END DO 382 374 ! 383 IF( wrk_not_released(3, 1,2) )THEN 384 CALL ctl_stop('nonosc_z: ERROR: failed to release workspace arrays') 385 END IF 375 IF( wrk_not_released(3, 1,2) ) CALL ctl_stop('nonosc_z: failed to release workspace arrays') 386 376 ! 387 377 END SUBROUTINE nonosc_z -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/trabbc.F90
r2528 r2690 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 ! -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90
r2633 r2690 82 82 & vtr_bbl (jpi,jpj) , ahv_bbl (jpi,jpj) , mbkv_d (jpi,jpj) , mgrhv(jpi,jpj) , & 83 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)84 & e3u_bbl_0(jpi,jpj) , e3v_bbl_0(jpi,jpj) , r1_e1e2t(jpi,jpj) , STAT= tra_bbl_alloc ) 85 85 ! 86 86 IF( lk_mpp ) CALL mpp_sum ( tra_bbl_alloc ) … … 172 172 USE wrk_nemo, ONLY: zptb => wrk_2d_1 173 173 ! 174 INTEGER , INTENT(in ) :: kjpt 175 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields176 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend174 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 177 ! 178 178 INTEGER :: ji, jj, jn ! dummy loop indices … … 181 181 !!---------------------------------------------------------------------- 182 182 ! 183 IF( wrk_in_use(2,1) ) THEN183 IF( wrk_in_use(2,1) ) THEN 184 184 CALL ctl_stop('tra_bbl_dif: ERROR: requested workspace array unavailable') ; RETURN 185 185 ENDIF … … 218 218 END DO ! end tracer 219 219 ! ! =========== 220 IF( wrk_not_released(2,1) ) CALL ctl_stop('tra_bbl_dif: failed to release workspace array')220 IF( wrk_not_released(2,1) ) CALL ctl_stop('tra_bbl_dif: failed to release workspace array') 221 221 ! 222 222 END SUBROUTINE tra_bbl_dif … … 238 238 !! Campin, J.-M., and H. Goosse, 1999, Tellus, 412-430. 239 239 !!---------------------------------------------------------------------- 240 INTEGER , INTENT(in ) :: kjpt 241 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields242 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend243 ! !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 ! 244 244 INTEGER :: ji, jj, jk, jn ! dummy loop indices 245 245 INTEGER :: iis , iid , ijs , ijd ! local integers … … 385 385 !!---------------------------------------------------------------------- 386 386 387 IF( wrk_in_use(2, 1,2,3,4,5) ) THEN387 IF( wrk_in_use(2, 1,2,3,4,5) ) THEN 388 388 CALL ctl_stop('bbl: requested workspace arrays unavailable') ; RETURN 389 389 ENDIF … … 525 525 ENDIF 526 526 ! 527 IF( wrk_not_released(2, 1,2,3,4,5) ) CALL ctl_stop('bbl: failed to release workspace arrays')527 IF( wrk_not_released(2, 1,2,3,4,5) ) CALL ctl_stop('bbl: failed to release workspace arrays') 528 528 ! 529 529 END SUBROUTINE bbl … … 547 547 !!---------------------------------------------------------------------- 548 548 549 IF( wrk_in_use(2,1) ) THEN549 IF( wrk_in_use(2,1) ) THEN 550 550 CALL ctl_stop('tra_bbl_init: requested workspace array unavailable') ; RETURN 551 551 ENDIF … … 635 635 ENDIF 636 636 ! 637 IF(wrk_not_released(2,1))THEN 638 CALL ctl_stop('tra_bbl_init: ERROR: failed to release workspace array') 639 END IF 637 IF( wrk_not_released(2,1) ) CALL ctl_stop('tra_bbl_init: failed to release workspace array') 640 638 ! 641 639 END SUBROUTINE tra_bbl_init -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/tradmp.F90
r2662 r2690 78 78 !! *** FUNCTION tra_bbl_alloc *** 79 79 !!---------------------------------------------------------------------- 80 ALLOCATE( strdmp(jpi,jpj,jpk) , ttrdmp(jpi,jpj,jpk) , resto(jpi,jpj,jpk), STAT= tra_dmp_alloc )80 ALLOCATE( strdmp(jpi,jpj,jpk) , ttrdmp(jpi,jpj,jpk) , resto(jpi,jpj,jpk), STAT= tra_dmp_alloc ) 81 81 ! 82 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 .')83 IF( tra_dmp_alloc > 0 ) CALL ctl_warn('tra_dmp_alloc: allocation of arrays failed') 84 84 END FUNCTION tra_dmp_alloc 85 85 … … 206 206 207 207 ! ! allocate tradmp arrays 208 IF( tra_dmp_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'tra_dmp_init 208 IF( tra_dmp_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'tra_dmp_init: unable to allocate arrays' ) 209 209 210 210 SELECT CASE ( nn_hdmp ) … … 347 347 !!---------------------------------------------------------------------- 348 348 349 IF( wrk_in_use(1, 1) .OR. wrk_in_use(2, 1) .OR. & 350 wrk_in_use(3, 1) )THEN 351 CALL ctl_stop('dtacof: requested workspace arrays unavailable') ; RETURN 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 352 353 ENDIF 353 354 ! ! ==================== … … 543 544 ENDIF 544 545 ! 545 IF( wrk_not_released(1, 1) .OR. wrk_not_released(2, 1) .OR. & 546 IF( wrk_not_released(1, 1) .OR. & 547 wrk_not_released(2, 1) .OR. & 546 548 wrk_not_released(3, 1) ) CALL ctl_stop('dtacof: failed to release workspace arrays') 547 549 ! … … 583 585 !!---------------------------------------------------------------------- 584 586 585 IF( wrk_in_use(2, 1,2,3,4) .OR. 586 wrk_in_use(1, 1,2,3,4) ) THEN587 CALL ctl_stop('cofdis: requested workspace arrays unavailable') ; RETURN588 END 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 589 591 590 592 ALLOCATE( llcotu(jpi,jpj) , llcotv(jpi,jpj) , llcotf(jpi,jpj) , & -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traldf.F90
r2660 r2690 237 237 !! ** Purpose : initializations of 238 238 !!---------------------------------------------------------------------- 239 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released240 USE wrk_nemo, ONLY: zt_ref => wrk_3d_1, ztb => wrk_3d_2, zavt => wrk_3d_3 ! 3D workspaces241 USE wrk_nemo, ONLY: zs_ref => wrk_3d_4, zsb => wrk_3d_5 ! 3D workspaces242 ! !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 ! 243 243 USE zdf_oce ! vertical mixing 244 244 USE trazdf ! vertical mixing: double diffusion 245 245 USE zdfddm ! vertical mixing: double diffusion 246 ! !246 ! 247 247 INTEGER :: jk ! Dummy loop indice 248 248 INTEGER :: ierr ! local integer 249 LOGICAL :: llsave ! 249 LOGICAL :: llsave ! local logical 250 250 REAL(wp) :: zt0, zs0, z12 ! local scalar 251 251 !!---------------------------------------------------------------------- 252 252 253 IF( wrk_in_use(3, 1,2,3,4,5) ) THEN253 IF( wrk_in_use(3, 1,2,3,4,5) ) THEN 254 254 CALL ctl_stop('ldf_ano : requested workspace arrays unavailable') ; RETURN 255 255 ENDIF … … 320 320 avt(:,:,:) = zavt(:,:,:) 321 321 ! 322 IF( wrk_not_released(3, 1,2,3,4,5) ) CALL ctl_stop('ldf_ano: failed to release workspace arrays')322 IF( wrk_not_released(3, 1,2,3,4,5) ) CALL ctl_stop('ldf_ano: failed to release workspace arrays') 323 323 ! 324 324 END SUBROUTINE ldf_ano -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilap.F90
r2636 r2690 74 74 !! biharmonic mixing trend. 75 75 !!---------------------------------------------------------------------- 76 USE oce , ztu => ua ! use ua as workspace 77 USE oce , ztv => va ! use va as workspace 78 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 79 USE wrk_nemo, ONLY: zeeu => wrk_2d_1, zeev => wrk_2d_2, zlt => wrk_2d_3 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 80 79 !! 81 80 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 90 89 !!---------------------------------------------------------------------- 91 90 92 IF(wrk_in_use(2, 1,2,3))THEN 93 CALL ctl_stop('tra_ldf_bilap: requested workspace arrays unavailable.') 94 RETURN 95 END IF 91 IF( wrk_in_use(2, 1,2,3) ) THEN 92 CALL ctl_stop('tra_ldf_bilap: requested workspace arrays unavailable') ; RETURN 93 ENDIF 96 94 97 95 IF( kt == nit000 ) THEN -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90
r2636 r2690 66 66 !! biharmonic mixing trend. 67 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 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 ! 70 71 INTEGER , INTENT(in ) :: kt ! ocean time-step index 71 72 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 73 74 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 74 75 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 75 !! 76 INTEGER :: ji, jj, jk, jn ! dummy loop indices 77 !!---------------------------------------------------------------------- 78 79 IF(wrk_in_use(4, 1,2))THEN 80 CALL ctl_stop('tra_ldf_bilapg : requested workspace arrays unavailable.') 81 RETURN 82 END IF 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 83 83 84 84 IF( kt == nit000 ) THEN … … 115 115 END DO 116 116 ! 117 IF(wrk_not_released(4, 1,2))THEN 118 CALL ctl_stop('tra_ldf_bilapg : failed to release workspace arrays.') 119 END IF 117 IF( wrk_not_released(4, 1,2) ) CALL ctl_stop('tra_ldf_bilapg : failed to release workspace arrays.') 120 118 ! 121 119 END SUBROUTINE tra_ldf_bilapg … … 160 158 !! 161 159 !!---------------------------------------------------------------------- 162 USE oce , zftv => ua ! use ua as workspace163 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released, wrk_in_use_xz, wrk_not_released_xz164 USE wrk_nemo, ONLY: zftu => wrk_2d_1, zdkt => wrk_2d_2, zdk1t => wrk_2d_3165 USE wrk_nemo, ONLY: zftw => wrk_xz_1, zdit => wrk_xz_2, &166 zdjt => wrk_xz_3, zdj1t => wrk_xz_4167 ! !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 ! 168 166 INTEGER , INTENT(in ) :: kt ! ocean time-step index 169 167 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 184 182 185 183 IF( wrk_in_use(2, 1,2,3) .OR. wrk_in_use_xz(1,2,3,4) )THEN 186 CALL ctl_stop('ldfght : requested workspace arrays unavailable.') 187 RETURN 188 END IF 184 CALL ctl_stop('ldfght : requested workspace arrays unavailable') ; RETURN 185 ENDIF 189 186 ! 190 187 DO jn = 1, kjpt … … 338 335 END DO 339 336 ! 340 IF( wrk_not_released(2, 1,2,3) .OR. wrk_not_released_xz(1,2,3,4) )THEN 341 CALL ctl_stop('ldfght : failed to release workspace arrays.') 342 END IF 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.') 343 339 ! 344 340 END SUBROUTINE ldfght -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90
r2633 r2690 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 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 95 USE wrk_nemo, ONLY: zdkt => wrk_2d_1, zdk1t => wrk_2d_2 ! 2D workspace 96 USE wrk_nemo, ONLY: zdit => wrk_3d_1, zdjt => wrk_3d_2, ztfw => wrk_3d_3 ! 3D workspace 97 USE wrk_nemo, ONLY: z2d => wrk_2d_3 ! 2D workspace - used if key_diaar5 98 !! 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_1 , zdjt => wrk_3d_2 , ztfw => wrk_3d_3 ! 3D workspace 96 ! 99 97 INTEGER , INTENT(in ) :: kt ! ocean time-step index 100 98 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 104 102 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 105 103 REAL(wp) , INTENT(in ) :: pahtb0 ! background diffusion coef 106 ! !104 ! 107 105 INTEGER :: ji, jj, jk, jn ! dummy loop indices 108 106 REAL(wp) :: zmsku, zabe1, zcof1, zcoef3 ! local scalars … … 114 112 !!---------------------------------------------------------------------- 115 113 116 IF( wrk_in_use(3, 1,2,3) .OR. wrk_in_use(2, 1,2,3) )THEN 117 CALL ctl_stop('tra_ldf_iso : requested workspace array unavailable.') 118 RETURN 119 END IF 114 IF( wrk_in_use(3, 1,2,3) .OR. wrk_in_use(2, 1,2,3) ) THEN 115 CALL ctl_stop('tra_ldf_iso : requested workspace array unavailable') ; RETURN 116 ENDIF 120 117 121 118 IF( kt == nit000 ) THEN … … 294 291 END DO 295 292 ! 296 IF( wrk_not_released(3, 1,2,3) .OR. & 297 wrk_not_released(2, 1,2,3) )THEN 298 CALL ctl_stop('tra_ldf_iso : failed to release workspace arrays.') 299 END IF 293 IF( wrk_not_released(3, 1,2,3) .OR. & 294 wrk_not_released(2, 1,2,3) ) CALL ctl_stop('tra_ldf_iso: failed to release workspace arrays') 300 295 ! 301 296 END SUBROUTINE tra_ldf_iso -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_grif.F90
r2636 r2690 92 92 USE oce , ONLY: zftu => ua , zftv => va ! (ua,va) used as 3D workspace 93 93 USE wrk_nemo, ONLY: zdit => wrk_3d_1 , zdjt => wrk_3d_2 , ztfw => wrk_3d_3 ! 3D workspace 94 USE wrk_nemo, ONLY: z2d => wrk_2d_1 95 ! !94 USE wrk_nemo, ONLY: z2d => wrk_2d_1 ! 2D workspace 95 ! 96 96 INTEGER , INTENT(in ) :: kt ! ocean time-step index 97 97 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 101 101 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 102 102 REAL(wp) , INTENT(in ) :: pahtb0 ! background diffusion coef 103 ! !103 ! 104 104 INTEGER :: ji, jj, jk,jn ! dummy loop indices 105 105 INTEGER :: ip,jp,kp ! dummy loop indices … … 114 114 REAL(wp) :: zah, zah_slp, zaei_slp 115 115 #if defined key_diaar5 116 REAL(wp) 116 REAL(wp) :: zztmp ! local scalar 117 117 #endif 118 118 !!---------------------------------------------------------------------- 119 119 120 120 IF( wrk_in_use(3, 1,2,3) .OR. wrk_in_use(2, 1) ) THEN 121 CALL ctl_stop('tra_ldf_iso_grif 121 CALL ctl_stop('tra_ldf_iso_grif: requested workspace arrays unavailable.') ; RETURN 122 122 ENDIF 123 123 ! ARP - line below uses 'bounds re-mapping' which is only defined in … … 348 348 END DO 349 349 ! 350 IF( wrk_not_released(3, 1,2,3,4) .OR. wrk_not_released(2, 1) )THEN 351 CALL ctl_stop('tra_ldf_iso_grif : failed to release workspace arrays.') 352 END IF 350 IF( wrk_not_released(3, 1,2,3,4) .OR. & 351 wrk_not_released(2, 1) ) CALL ctl_stop('tra_ldf_iso_grif: failed to release workspace arrays') 353 352 ! 354 353 END SUBROUTINE tra_ldf_iso_grif -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_lap.F90
r2625 r2690 63 63 !! harmonic mixing trend. 64 64 !!---------------------------------------------------------------------- 65 USE oce , ztu => ua ! use ua as workspace 66 USE oce , ztv => va ! use va as workspace 67 !! 65 USE oce, ONLY: ztu => ua , ztv => va ! (ua,va) used as workspace 66 ! 68 67 INTEGER , INTENT(in ) :: kt ! ocean time-step index 69 68 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 72 71 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 73 72 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 74 ! !73 ! 75 74 INTEGER :: ji, jj, jk, jn ! dummy loop indices 76 75 INTEGER :: iku, ikv, ierr ! local integers -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/tranpc.F90
r2636 r2690 56 56 !! References : Madec, et al., 1991, JPO, 21, 9, 1349-1371. 57 57 !!---------------------------------------------------------------------- 58 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released, wrk_in_use_xz, wrk_not_released_xz59 USE wrk_nemo, ONLY: ztrdt => wrk_3d_1, ztrds => wrk_3d_2, zrhop => wrk_3d_360 USE wrk_nemo, ONLY: zwx => wrk_xz_1, zwy => wrk_xz_2, zwz=> wrk_xz_361 ! !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 ! 62 62 INTEGER, INTENT(in) :: kt ! ocean time-step index 63 ! !63 ! 64 64 INTEGER :: ji, jj, jk ! dummy loop indices 65 65 INTEGER :: inpcc ! number of statically instable water column … … 72 72 ! Strictly 1 and 2 3D workspaces only needed if(l_trdtra) but it doesn't 73 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.') 76 RETURN 77 END IF 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 78 77 79 78 IF( MOD( kt, nn_npc ) == 0 ) THEN … … 205 204 ! Lateral boundary conditions on ( ta, sa ) ( Unchanged sign) 206 205 ! ------------------------------============ 207 CALL lbc_lnk( tsa(:,:,:,jp_tem), 'T', 1. ) 208 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. ) 209 207 210 208 … … 218 216 ENDIF 219 217 ! 220 IF( wrk_not_released(3, 1,2,3) .OR. wrk_not_released_xz(1,2,3) )THEN 221 CALL ctl_stop('tra_npc: failed to release workspace arrays.') 222 END IF 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') 223 220 ! 224 221 END SUBROUTINE tra_npc -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r2623 r2690 152 152 ENDIF 153 153 ENDIF 154 154 ! 155 155 #if defined key_agrif 156 156 ! Update tracer at AGRIF zoom boundaries … … 159 159 CALL tra_swap 160 160 #endif 161 161 ! 162 162 ! trends computation 163 163 IF( l_trdtra ) THEN ! trend of the Asselin filter (tb filtered - tb)/dt … … 171 171 DEALLOCATE( ztrdt ) ; DEALLOCATE( ztrds ) 172 172 END IF 173 173 ! 174 174 ! ! control print 175 175 IF(ln_ctl) CALL prt_ctl( tab3d_1=tsn(:,:,:,jp_tem), clinfo1=' nxt - Tn: ', mask1=tmask, & … … 202 202 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T) 203 203 !!---------------------------------------------------------------------- 204 INTEGER , INTENT(in ) :: kt ! ocean time-step index205 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator)206 INTEGER , INTENT(in ) :: kjpt ! number of tracers207 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before tracer fields208 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! now tracer fields209 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend210 ! !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 ! 211 211 INTEGER :: ji, jj, jk, jn ! dummy loop indices 212 212 LOGICAL :: ll_tra_hpg ! local logical … … 269 269 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T) 270 270 !!---------------------------------------------------------------------- 271 INTEGER , INTENT(in ) :: kt ! ocean time-step index272 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator)273 INTEGER , INTENT(in ) :: kjpt ! number of tracers274 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before tracer fields275 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! now tracer fields276 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 277 277 !! 278 278 LOGICAL :: ll_tra, ll_tra_hpg, ll_traqsr ! local logical 279 279 INTEGER :: ji, jj, jk, jn ! dummy loop indices 280 REAL(wp) :: ztc_a , ztc_n , ztc_b ! local scalar 281 REAL(wp) :: ztc_f , ztc_d ! - - 282 REAL(wp) :: ze3t_b, ze3t_n, ze3t_a ! - - 283 REAL(wp) :: ze3t_f, ze3t_d ! - - 284 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 ! - - 285 282 !!---------------------------------------------------------------------- 286 283 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r2636 r2690 59 59 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 60 60 !! $Id$ 61 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)61 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 62 62 !!---------------------------------------------------------------------- 63 64 63 CONTAINS 65 64 … … 91 90 !! Lengaigne et al. 2007, Clim. Dyn., V28, 5, 503-516. 92 91 !!---------------------------------------------------------------------- 93 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released94 USE wrk_nemo, ONLY: zekb => wrk_2d_1, zekg => wrk_2d_2, zekr => wrk_2d_395 USE wrk_nemo, ONLY: ze0 => wrk_3d_1, ze1 => wrk_3d_2, ze2=> wrk_3d_396 USE wrk_nemo, ONLY: ze3 => wrk_3d_4, zea=> wrk_3d_597 ! !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 ! 98 97 INTEGER, INTENT(in) :: kt ! ocean time-step 99 ! !98 ! 100 99 INTEGER :: ji, jj, jk ! dummy loop indices 101 INTEGER :: irgb ! temporaryintegers102 REAL(wp) :: zchl, zcoef ! temporaryscalars100 INTEGER :: irgb ! local integers 101 REAL(wp) :: zchl, zcoef, zfact ! local scalars 103 102 REAL(wp) :: zc0, zc1, zc2, zc3 ! - - 104 REAL(wp) :: zz0, zz1 ! - - 105 REAL(wp) :: z1_e3t, zfact ! - - 103 REAL(wp) :: zz0, zz1, z1_e3t ! - - 106 104 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdt 107 105 !!---------------------------------------------------------------------- 108 106 109 107 IF( wrk_in_use(3, 1,2,3,4,5) .OR. wrk_in_use(2, 1,2,3) )THEN 110 CALL ctl_stop('tra_qsr : requested workspace arrays unavailable.') 111 RETURN 112 END IF 108 CALL ctl_stop('tra_qsr: requested workspace arrays unavailable') ; RETURN 109 ENDIF 113 110 114 111 IF( kt == nit000 ) THEN … … 291 288 IF(ln_ctl) CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' qsr - Ta: ', mask1=tmask, clinfo3='tra-ta' ) 292 289 ! 293 IF( wrk_not_released(3, 1,2,3,4,5) .OR. & 294 wrk_not_released(2, 1,2,3) )THEN 295 CALL ctl_stop('tra_qsr : failed to release workspace arrays.') 296 END IF 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') 297 292 ! 298 293 END SUBROUTINE tra_qsr … … 316 311 !! Reference : Jerlov, N. G., 1968 Optical Oceanography, Elsevier, 194pp. 317 312 !!---------------------------------------------------------------------- 318 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 319 USE wrk_nemo, ONLY: zekb => wrk_2d_1, zekg => wrk_2d_2, zekr => wrk_2d_3 320 USE wrk_nemo, ONLY: ze0 => wrk_3d_1, ze1 => wrk_3d_2, ze2 => wrk_3d_3 321 USE wrk_nemo, ONLY: ze3 => wrk_3d_4, zea => wrk_3d_5 322 !! 323 INTEGER :: ji, jj, jk ! dummy loop indices 324 INTEGER :: irgb, ierror ! temporary integer 325 INTEGER :: ioptio, nqsr ! temporary integer 326 REAL(wp) :: zc0 , zc1, zcoef ! temporary scalars 327 REAL(wp) :: zc2 , zc3 , zchl ! - - 328 REAL(wp) :: zz0 , zz1 ! - - 329 !! 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 ! 330 323 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files 331 324 TYPE(FLD_N) :: sn_chl ! informations about the chlorofyl field to be read 325 !! 332 326 NAMELIST/namtra_qsr/ sn_chl, cn_dir, ln_traqsr, ln_qsr_rgb, ln_qsr_2bd, ln_qsr_bio, & 333 327 & nn_chldta, rn_abs, rn_si0, rn_si1 … … 335 329 336 330 IF( wrk_in_use(2, 1,2,3) .OR. wrk_in_use(3, 1,2,3,4,5) )THEN 337 CALL ctl_stop('tra_qsr_init: requested workspace arrays unavailable.') 338 RETURN 339 END IF 331 CALL ctl_stop('tra_qsr_init: requested workspace arrays unavailable') ; RETURN 332 ENDIF 340 333 341 334 cn_dir = './' ! directory in which the model is executed … … 511 504 ENDIF 512 505 ! 513 IF( wrk_not_released(2, 1,2,3) .OR. & 514 wrk_not_released(3, 1,2,3,4,5) )THEN 515 CALL ctl_stop('tra_qsr_init: failed to release workspace arrays.') 516 END IF 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') 517 508 ! 518 509 END SUBROUTINE tra_qsr_init -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90
r2528 r2690 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 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traswp.F90
r2528 r2690 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 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_exp.F90
r2636 r2690 73 73 !! ** Action : - after tracer fields pta 74 74 !!--------------------------------------------------------------------- 75 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released76 USE wrk_nemo, ONLY: zwx => wrk_3d_1, zwy => wrk_3d_2 ! 3D workspace77 ! !75 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 76 USE wrk_nemo, ONLY: zwx => wrk_3d_1, zwy => wrk_3d_2 ! 3D workspace 77 ! 78 78 INTEGER , INTENT(in ) :: kt ! ocean time-step index 79 79 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 83 83 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 84 84 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 85 ! !85 ! 86 86 INTEGER :: ji, jj, jk, jn, jl ! dummy loop indices 87 87 REAL(wp) :: zlavmr, zave3r, ze3tr ! local scalars … … 89 89 !!--------------------------------------------------------------------- 90 90 91 IF(wrk_in_use(3, 1,2))THEN 92 CALL ctl_stop('tra_zdf_exp : requested workspace arrays unavailable.') 93 RETURN 94 END IF 91 IF( wrk_in_use(3, 1,2) ) THEN 92 CALL ctl_stop('tra_zdf_exp: requested workspace arrays unavailable') ; RETURN 93 ENDIF 95 94 96 95 IF( kt == nit000 ) THEN … … 165 164 END DO 166 165 ! 167 IF(wrk_not_released(3, 1,2))THEN 168 CALL ctl_stop('tra_zdf_exp : failed to release workspace arrays.') 169 END IF 166 IF( wrk_not_released(3, 1,2) ) CALL ctl_stop('tra_zdf_exp: failed to release workspace arrays') 170 167 ! 171 168 END SUBROUTINE tra_zdf_exp -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90
r2678 r2690 74 74 !! ** Action : - pta becomes the after tracer 75 75 !!--------------------------------------------------------------------- 76 USE oce , ONLY : zwd => ua ! ua used as workspace 77 USE oce , ONLY : zws => va ! va - - 78 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 79 USE wrk_nemo, ONLY: zwi => wrk_3d_1, zwt => wrk_3d_2 ! workspace arrays 80 !! 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_1 , zwt => wrk_3d_2 ! 3D workspace 79 ! 81 80 INTEGER , INTENT(in ) :: kt ! ocean time-step index 82 81 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 85 84 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 86 85 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 87 !! 88 INTEGER :: ji, jj, jk, jn ! dummy loop indices 89 REAL(wp) :: zrhs ! local scalars 90 REAL(wp) :: ze3tb, ze3tn, ze3ta ! variable vertical scale factors 86 ! 87 INTEGER :: ji, jj, jk, jn ! dummy loop indices 88 REAL(wp) :: zrhs, ze3tb, ze3tn, ze3ta ! local scalars 91 89 !!--------------------------------------------------------------------- 92 90 93 IF(wrk_in_use(3, 1,2))THEN 94 CALL ctl_stop('tra_zdf_imp : requested workspace arrays unavailable.') 95 RETURN 96 END IF 91 IF( wrk_in_use(3, 1,2) ) THEN 92 CALL ctl_stop('tra_zdf_imp : requested workspace arrays unavailable.') ; RETURN 93 ENDIF 97 94 98 95 IF( kt == nit000 ) THEN … … 114 111 ! Build matrix if temperature or salinity (only in double diffusion case) or first passive tracer 115 112 ! 116 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. & 117 114 & ( cdtype == 'TRC' .AND. jn == 1 ) ) THEN 118 115 ! … … 231 228 ! ! ================= ! 232 229 ! 233 IF(wrk_not_released(3, 1,2))THEN 234 CALL ctl_stop('tra_zdf_imp : failed to release workspace arrays.') 235 END IF 230 IF( wrk_not_released(3, 1,2) ) CALL ctl_stop('tra_zdf_imp: failed to release workspace arrays') 236 231 ! 237 232 END SUBROUTINE tra_zdf_imp -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/zpshde.F90
r2642 r2690 81 81 !! - pgru, pgrv: horizontal gradient of rho (if present) at u- & v-points 82 82 !!---------------------------------------------------------------------- 83 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released84 USE wrk_nemo, ONLY: zri => wrk_2d_1, zrj => wrk_2d_2 ! interpolated value of rd85 USE wrk_nemo, ONLY: zhi => wrk_2d_3, zhj => wrk_2d_4 ! depth of interpolation for eos2d86 ! !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 ! 87 87 INTEGER , INTENT(in ) :: kt ! ocean time-step index 88 88 INTEGER , INTENT(in ) :: kjpt ! number of tracers … … 91 91 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ), OPTIONAL :: prd ! 3D density anomaly fields 92 92 REAL(wp), DIMENSION(jpi,jpj ), INTENT( out), OPTIONAL :: pgru, pgrv ! hor. grad. of prd at u- & v-pts 93 ! !93 ! 94 94 INTEGER :: ji, jj, jn ! Dummy loop indices 95 95 INTEGER :: iku, ikv, ikum1, ikvm1 ! partial step level (ocean bottom level) at u- and v-points 96 REAL(wp) :: ze3wu, ze3wv, zmaxu, zmaxv ! temporary scalars 96 97 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zti, ztj ! interpolated value of tracer 97 REAL(wp) :: ze3wu, ze3wv, zmaxu, zmaxv ! temporary scalars98 98 !!---------------------------------------------------------------------- 99 99 100 100 IF( wrk_in_use(2, 1,2,3,4) ) THEN 101 CALL ctl_stop('zps_hde: requested workspace arrays unavailable .') ; RETURN101 CALL ctl_stop('zps_hde: requested workspace arrays unavailable') ; RETURN 102 102 END IF 103 103 … … 211 211 END IF 212 212 ! 213 IF( wrk_not_released(2, 1,2,3,4) ) CALL ctl_stop('zps_hde: failed to release workspace arrays.')214 213 IF( wrk_not_released(2, 1,2,3,4) ) CALL ctl_stop('zps_hde: failed to release workspace arrays') 214 ! 215 215 DEALLOCATE( zti ) 216 216 DEALLOCATE( ztj ) -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRD/trdicp.F90
r2633 r2690 45 45 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 46 46 !! $Id$ 47 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 48 !!---------------------------------------------------------------------- 49 47 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 48 !!---------------------------------------------------------------------- 50 49 CONTAINS 51 50 … … 57 56 !! momentum equations at every time step frequency nn_trd. 58 57 !!---------------------------------------------------------------------- 59 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: ptrd2dx 60 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: ptrd2dy 61 INTEGER , INTENT(in ) :: ktrd 62 CHARACTER(len=3) , INTENT(in ) :: ctype 58 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: ptrd2dx ! Temperature or U trend 59 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: ptrd2dy ! Salinity or V trend 60 INTEGER , INTENT(in ) :: ktrd ! tracer trend index 61 CHARACTER(len=3) , INTENT(in ) :: ctype ! momentum ('DYN') or tracers ('TRA') trends 63 62 !! 64 INTEGER :: ji, jj ! loop indices 65 REAL(wp) :: zmsku, zbtu, zbt ! temporary scalars 66 REAL(wp) :: zmskv, zbtv ! " " 67 !!---------------------------------------------------------------------- 68 69 70 ! 1. Mask trends 71 ! -------------- 72 73 SELECT CASE( ctype ) 74 ! 75 CASE( 'DYN' ) ! Momentum 63 INTEGER :: ji, jj ! loop indices 64 !!---------------------------------------------------------------------- 65 66 SELECT CASE( ctype ) !== Mask trends ==! 67 ! 68 CASE( 'DYN' ) ! Momentum 76 69 DO jj = 1, jpjm1 77 70 DO ji = 1, jpim1 78 zmsku = tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,1) 79 zmskv = tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,1) 80 ptrd2dx(ji,jj) = ptrd2dx(ji,jj) * zmsku 81 ptrd2dy(ji,jj) = ptrd2dy(ji,jj) * zmskv 71 ptrd2dx(ji,jj) = ptrd2dx(ji,jj) * tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,1) 72 ptrd2dy(ji,jj) = ptrd2dy(ji,jj) * tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,1) 82 73 END DO 83 74 END DO 84 ptrd2dx(jpi, : ) = 0. e0 ; ptrd2dy(jpi, : ) = 0.e085 ptrd2dx( : ,jpj) = 0. e0 ; ptrd2dy( : ,jpj) = 0.e086 ! 87 CASE( 'TRA' ) ! Tracers75 ptrd2dx(jpi, : ) = 0._wp ; ptrd2dy(jpi, : ) = 0._wp 76 ptrd2dx( : ,jpj) = 0._wp ; ptrd2dy( : ,jpj) = 0._wp 77 ! 78 CASE( 'TRA' ) ! Tracers 88 79 ptrd2dx(:,:) = ptrd2dx(:,:) * tmask_i(:,:) 89 80 ptrd2dy(:,:) = ptrd2dy(:,:) * tmask_i(:,:) … … 91 82 END SELECT 92 83 93 ! 2. Basin averaged tracer/momentum trends 94 ! ---------------------------------------- 95 96 SELECT CASE( ctype ) 97 ! 98 CASE( 'DYN' ) ! Momentum 99 umo(ktrd) = 0.e0 100 vmo(ktrd) = 0.e0 84 SELECT CASE( ctype ) !== Basin averaged tracer/momentum trends ==! 85 ! 86 CASE( 'DYN' ) ! Momentum 87 umo(ktrd) = 0._wp 88 vmo(ktrd) = 0._wp 101 89 ! 102 90 SELECT CASE( ktrd ) 103 !104 91 CASE( jpdyn_trd_swf ) ! surface forcing 105 DO jj = 1, jpj 106 DO ji = 1, jpi 107 umo(ktrd) = umo(ktrd) + ptrd2dx(ji,jj) * e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,1) 108 vmo(ktrd) = vmo(ktrd) + ptrd2dy(ji,jj) * e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,1) 109 END DO 110 END DO 111 ! 92 umo(ktrd) = SUM( ptrd2dx(:,:) * e1u(:,:) * e2u(:,:) * fse3u(:,:,1) ) 93 vmo(ktrd) = SUM( ptrd2dy(:,:) * e1v(:,:) * e2v(:,:) * fse3v(:,:,1) ) 112 94 END SELECT 113 95 ! 114 96 CASE( 'TRA' ) ! Tracers 115 tmo(ktrd) = 0.e0 116 smo(ktrd) = 0.e0 117 DO jj = 1, jpj 118 DO ji = 1, jpi 119 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,1) 120 tmo(ktrd) = tmo(ktrd) + ptrd2dx(ji,jj) * zbt 121 smo(ktrd) = smo(ktrd) + ptrd2dy(ji,jj) * zbt 122 END DO 123 END DO 124 ! 97 tmo(ktrd) = SUM( ptrd2dx(:,:) * e1e2t(:,:) * fse3t(:,:,1) ) 98 smo(ktrd) = SUM( ptrd2dy(:,:) * e1e2t(:,:) * fse3t(:,:,1) ) 125 99 END SELECT 126 100 127 ! 3. Basin averaged tracer/momentum square trends 128 ! ---------------------------------------------- 129 ! c a u t i o n: field now 130 131 SELECT CASE( ctype ) 101 SELECT CASE( ctype ) !== Basin averaged tracer/momentum square trends ==! (now field) 132 102 ! 133 103 CASE( 'DYN' ) ! Momentum 134 hke(ktrd) = 0.e0 135 DO jj = 1, jpj 136 DO ji = 1, jpi 137 zbtu = e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,1) 138 zbtv = e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,1) 139 hke(ktrd) = hke(ktrd) & 140 & + un(ji,jj,1) * ptrd2dx(ji,jj) * zbtu & 141 & + vn(ji,jj,1) * ptrd2dy(ji,jj) * zbtv 142 END DO 143 END DO 104 hke(ktrd) = SUM( un(:,:,1) * ptrd2dx(:,:) * e1u(:,:) * e2u(:,:) * fse3u(:,:,1) & 105 & + vn(:,:,1) * ptrd2dy(:,:) * e1v(:,:) * e2v(:,:) * fse3v(:,:,1) ) 144 106 ! 145 107 CASE( 'TRA' ) ! Tracers 146 t2(ktrd) = 0.e0 147 s2(ktrd) = 0.e0 148 DO jj = 1, jpj 149 DO ji = 1, jpi 150 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,1) 151 t2(ktrd) = t2(ktrd) + ptrd2dx(ji,jj) * zbt * tn(ji,jj,1) 152 s2(ktrd) = s2(ktrd) + ptrd2dy(ji,jj) * zbt * sn(ji,jj,1) 153 END DO 154 END DO 108 t2(ktrd) = SUM( ptrd2dx(:,:) * e1e2t(:,:) * fse3t(:,:,1) * tn(:,:,1) ) 109 s2(ktrd) = SUM( ptrd2dy(:,:) * e1e2t(:,:) * fse3t(:,:,1) * sn(:,:,1) ) 155 110 ! 156 111 END SELECT … … 166 121 !! momentum equations at every time step frequency nn_trd. 167 122 !!---------------------------------------------------------------------- 168 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: ptrd3dx 169 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: ptrd3dy 170 INTEGER, INTENT(in ) :: ktrd 171 CHARACTER(len=3), INTENT(in ) :: ctype 123 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: ptrd3dx ! Temperature or U trend 124 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: ptrd3dy ! Salinity or V trend 125 INTEGER, INTENT(in ) :: ktrd ! momentum or tracer trend index 126 CHARACTER(len=3), INTENT(in ) :: ctype ! momentum ('DYN') or tracers ('TRA') trends 172 127 !! 173 INTEGER :: ji, jj, jk 174 REAL(wp) :: zbt, zbtu, zbtv, zmsku, zmskv ! temporary scalars 175 !!---------------------------------------------------------------------- 176 177 ! 1. Mask the trends 178 ! ------------------ 179 180 SELECT CASE( ctype ) 128 INTEGER :: ji, jj, jk ! dummy loop indices 129 !!---------------------------------------------------------------------- 130 131 SELECT CASE( ctype ) !== Mask the trends ==! 181 132 ! 182 133 CASE( 'DYN' ) ! Momentum 183 DO jk = 1, jpk 134 DO jk = 1, jpkm1 184 135 DO jj = 1, jpjm1 185 136 DO ji = 1, jpim1 186 zmsku = tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,jk) 187 zmskv = tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) 188 ptrd3dx(ji,jj,jk) = ptrd3dx(ji,jj,jk) * zmsku 189 ptrd3dy(ji,jj,jk) = ptrd3dy(ji,jj,jk) * zmskv 137 ptrd3dx(ji,jj,jk) = ptrd3dx(ji,jj,jk) * tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,jk) 138 ptrd3dy(ji,jj,jk) = ptrd3dy(ji,jj,jk) * tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) 190 139 END DO 191 140 END DO 192 141 END DO 193 ptrd3dx(jpi, : ,:) = 0. e0 ; ptrd3dy(jpi, : ,:) = 0.e0194 ptrd3dx( : ,jpj,:) = 0. e0 ; ptrd3dy( : ,jpj,:) = 0.e0142 ptrd3dx(jpi, : ,:) = 0._wp ; ptrd3dy(jpi, : ,:) = 0._wp 143 ptrd3dx( : ,jpj,:) = 0._wp ; ptrd3dy( : ,jpj,:) = 0._wp 195 144 ! 196 145 CASE( 'TRA' ) ! Tracers 197 DO jk = 1, jpk 146 DO jk = 1, jpkm1 198 147 ptrd3dx(:,:,jk) = ptrd3dx(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) 199 148 ptrd3dy(:,:,jk) = ptrd3dy(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) … … 202 151 END SELECT 203 152 204 ! 2. Basin averaged tracer/momentum trends 205 ! ---------------------------------------- 206 207 SELECT CASE( ctype ) 153 SELECT CASE( ctype ) !== Basin averaged tracer/momentum trends ==! 208 154 ! 209 155 CASE( 'DYN' ) ! Momentum 210 umo(ktrd) = 0.e0 211 vmo(ktrd) = 0.e0 212 DO jk = 1, jpk 213 DO jj = 1, jpj 214 DO ji = 1, jpi 215 zbtu = e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) 216 zbtv = e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) 217 umo(ktrd) = umo(ktrd) + ptrd3dx(ji,jj,jk) * zbtu 218 vmo(ktrd) = vmo(ktrd) + ptrd3dy(ji,jj,jk) * zbtv 219 END DO 220 END DO 156 umo(ktrd) = 0._wp 157 vmo(ktrd) = 0._wp 158 DO jk = 1, jpkm1 159 umo(ktrd) = umo(ktrd) + SUM( ptrd3dx(:,:,jk) * e1u(:,:) * e2u(:,:) * fse3u(:,:,jk) ) 160 vmo(ktrd) = vmo(ktrd) + SUM( ptrd3dy(:,:,jk) * e1v(:,:) * e2v(:,:) * fse3v(:,:,jk) ) 221 161 END DO 222 162 ! 223 163 CASE( 'TRA' ) ! Tracers 224 tmo(ktrd) = 0.e0 225 smo(ktrd) = 0.e0 226 DO jk = 1, jpkm1 227 DO jj = 1, jpj 228 DO ji = 1, jpi 229 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 230 tmo(ktrd) = tmo(ktrd) + ptrd3dx(ji,jj,jk) * zbt 231 smo(ktrd) = smo(ktrd) + ptrd3dy(ji,jj,jk) * zbt 232 END DO 233 END DO 164 tmo(ktrd) = 0._wp 165 smo(ktrd) = 0._wp 166 DO jk = 1, jpkm1 167 tmo(ktrd) = tmo(ktrd) + SUM( ptrd3dx(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 168 smo(ktrd) = smo(ktrd) + SUM( ptrd3dy(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 234 169 END DO 235 170 ! 236 171 END SELECT 237 172 238 ! 3. Basin averaged tracer/momentum square trends 239 ! ----------------------------------------------- 240 ! c a u t i o n: field now 241 242 SELECT CASE( ctype ) 173 SELECT CASE( ctype ) !== Basin averaged tracer/momentum square trends ==! (now field) 243 174 ! 244 175 CASE( 'DYN' ) ! Momentum 245 hke(ktrd) = 0.e0 246 DO jk = 1, jpk 247 DO jj = 1, jpj 248 DO ji = 1, jpi 249 zbtu = e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) 250 zbtv = e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) 251 hke(ktrd) = hke(ktrd) & 252 & + un(ji,jj,jk) * ptrd3dx(ji,jj,jk) * zbtu & 253 & + vn(ji,jj,jk) * ptrd3dy(ji,jj,jk) * zbtv 254 END DO 255 END DO 176 hke(ktrd) = 0._wp 177 DO jk = 1, jpkm1 178 hke(ktrd) = hke(ktrd) + SUM( un(:,:,jk) * ptrd3dx(:,:,jk) * e1u(:,:) * e2u(:,:) * fse3u(:,:,jk) & 179 & + vn(:,:,jk) * ptrd3dy(:,:,jk) * e1v(:,:) * e2v(:,:) * fse3v(:,:,jk) ) 256 180 END DO 257 181 ! 258 182 CASE( 'TRA' ) ! Tracers 259 t2(ktrd) = 0.e0 260 s2(ktrd) = 0.e0 261 DO jk = 1, jpk 262 DO jj = 1, jpj 263 DO ji = 1, jpi 264 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 265 t2(ktrd) = t2(ktrd) + ptrd3dx(ji,jj,jk) * zbt * tn(ji,jj,jk) 266 s2(ktrd) = s2(ktrd) + ptrd3dy(ji,jj,jk) * zbt * sn(ji,jj,jk) 267 END DO 268 END DO 183 t2(ktrd) = 0._wp 184 s2(ktrd) = 0._wp 185 DO jk = 1, jpkm1 186 t2(ktrd) = t2(ktrd) + SUM( ptrd3dx(ji,jj,jk) * tn(ji,jj,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 187 s2(ktrd) = s2(ktrd) + SUM( ptrd3dy(ji,jj,jk) * sn(ji,jj,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 269 188 END DO 270 189 ! … … 272 191 ! 273 192 END SUBROUTINE trd_3d 274 275 193 276 194 … … 281 199 !! ** Purpose : Read the namtrd namelist 282 200 !!---------------------------------------------------------------------- 283 INTEGER :: ji, jj, jk 284 REAL(wp) :: zmskt 285 #if defined key_trddyn 286 REAL(wp) :: zmsku, zmskv 287 #endif 201 INTEGER :: ji, jj, jk ! dummy loop indices 288 202 !!---------------------------------------------------------------------- 289 203 … … 295 209 296 210 ! Total volume at t-points: 297 tvolt = 0. e0211 tvolt = 0._wp 298 212 DO jk = 1, jpkm1 299 DO jj = 2, jpjm1 300 DO ji = fs_2, fs_jpim1 ! vector opt. 301 zmskt = tmask(ji,jj,jk) * tmask_i(ji,jj) 302 tvolt = tvolt + zmskt * e1t(ji,jj) *e2t(ji,jj) * fse3t(ji,jj,jk) 303 END DO 304 END DO 213 tvolt = SUM( e1e2t(:,:) * fse3t(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) ) 305 214 END DO 306 215 IF( lk_mpp ) CALL mpp_sum( tvolt ) ! sum over the global domain … … 310 219 #if defined key_trddyn 311 220 ! Initialization of potential to kinetic energy conversion 312 rpktrd = 0. e0221 rpktrd = 0._wp 313 222 314 223 ! Total volume at u-, v- points: 315 tvolu = 0. e0316 tvolv = 0. e0224 tvolu = 0._wp 225 tvolv = 0._wp 317 226 318 227 DO jk = 1, jpk 319 228 DO jj = 2, jpjm1 320 229 DO ji = fs_2, fs_jpim1 ! vector opt. 321 zmsku = tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,jk) 322 zmskv = tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) 323 tvolu = tvolu + zmsku * e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) 324 tvolv = tvolv + zmskv * e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) 230 tvolu = tvolu + e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) * tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,jk) 231 tvolv = tvolv + e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) * tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) 325 232 END DO 326 233 END DO … … 344 251 !! ** Purpose : write dynamic trends in ocean.output 345 252 !!---------------------------------------------------------------------- 346 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released347 USE wrk_nemo, ONLY: zkepe => wrk_3d_1, zkx => wrk_3d_2, &348 zky => wrk_3d_3, zkz => wrk_3d_4349 INTEGER, INTENT(in) :: kt ! ocean time-step index350 !!351 INTEGER :: ji, jj, jk352 REAL(wp) :: ze1e2w, zcof, zbe1ru, zbe2rv, zbtr, ztz, zth ! " scalars353 !!----------------------------------------------------------------------354 355 IF(wrk_in_use(3, 1,2,3,4))THEN 356 CALL ctl_stop('trd_dwr : requested workspace arrays unavailable.')357 RETURN358 END 253 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 254 USE wrk_nemo, ONLY: zkepe => wrk_3d_1 , zkx => wrk_3d_2 ! 3D workspace 255 USE wrk_nemo, ONLY: zky => wrk_3d_3 , zkz => wrk_3d_4 ! - - 256 ! 257 INTEGER, INTENT(in) :: kt ! ocean time-step index 258 ! 259 INTEGER :: ji, jj, jk ! dummy loop indices 260 REAL(wp) :: zcof ! local scalar 261 !!---------------------------------------------------------------------- 262 263 IF( wrk_in_use(3, 1,2,3,4) ) THEN 264 CALL ctl_stop('trd_dwr: requested workspace arrays unavailable') ; RETURN 265 ENDIF 359 266 360 267 ! I. Momentum trends … … 366 273 ! -------------------------------------------------- 367 274 ! c a u t i o n here, trends are computed at kt+1 (now , but after the swap) 368 369 zkx(:,:,:) = 0.e0 370 zky(:,:,:) = 0.e0 371 zkz(:,:,:) = 0.e0 372 zkepe(:,:,:) = 0.e0 275 zkx (:,:,:) = 0._wp 276 zky (:,:,:) = 0._wp 277 zkz (:,:,:) = 0._wp 278 zkepe(:,:,:) = 0._wp 373 279 374 280 CALL eos( tsn, rhd, rhop ) ! now potential and in situ densities 375 281 376 ! Density flux at w-point 282 zcof = 0.5_wp / rau0 ! Density flux at w-point 283 zkz(:,:,1) = 0._wp 377 284 DO jk = 2, jpk 378 DO jj = 1, jpj 379 DO ji = 1, jpi 380 ze1e2w = 0.5 * e1t(ji,jj) * e2t(ji,jj) * wn(ji,jj,jk) * tmask_i(ji,jj) 381 zkz(ji,jj,jk) = ze1e2w / rau0 * ( rhop(ji,jj,jk) + rhop(ji,jj,jk-1) ) 285 zkz(:,:,jk) = e1e2t(:,:) * wn(:,:,jk) * ( rhop(:,:,jk) + rhop(:,:,jk-1) ) * tmask_i(:,:) 286 END DO 287 288 zcof = 0.5_wp / rau0 ! Density flux at u and v-points 289 DO jk = 1, jpkm1 290 DO jj = 1, jpjm1 291 DO ji = 1, jpim1 292 zkx(ji,jj,jk) = zcof * e2u(ji,jj) * fse3u(ji,jj,jk) * un(ji,jj,jk) * ( rhop(ji,jj,jk) + rhop(ji+1,jj,jk) ) 293 zky(ji,jj,jk) = zcof * e1v(ji,jj) * fse3v(ji,jj,jk) * vn(ji,jj,jk) * ( rhop(ji,jj,jk) + rhop(ji,jj+1,jk) ) 382 294 END DO 383 295 END DO 384 296 END DO 385 zkz(:,:,1) = 0.e0386 297 387 ! Density flux at u and v-points 388 DO jk = 1, jpk 389 DO jj = 1, jpjm1 390 DO ji = 1, jpim1 391 zcof = 0.5 / rau0 392 zbe1ru = zcof * e2u(ji,jj) * fse3u(ji,jj,jk) * un(ji,jj,jk) 393 zbe2rv = zcof * e1v(ji,jj) * fse3v(ji,jj,jk) * vn(ji,jj,jk) 394 zkx(ji,jj,jk) = zbe1ru * ( rhop(ji,jj,jk) + rhop(ji+1,jj,jk) ) 395 zky(ji,jj,jk) = zbe2rv * ( rhop(ji,jj,jk) + rhop(ji,jj+1,jk) ) 298 DO jk = 1, jpkm1 ! Density flux divergence at t-point 299 DO jj = 2, jpjm1 300 DO ji = 2, jpim1 301 zkepe(ji,jj,jk) = - ( zkz(ji,jj,jk) - zkz(ji ,jj ,jk+1) & 302 & + zkx(ji,jj,jk) - zkx(ji-1,jj ,jk ) & 303 & + zky(ji,jj,jk) - zky(ji ,jj-1,jk ) ) & 304 & / ( e1e2t(ji,jj) * fse3t(ji,jj,jk) ) * tmask(ji,jj,jk) * tmask_i(ji,jj) 396 305 END DO 397 306 END DO 398 307 END DO 399 400 ! Density flux divergence at t-point401 DO jk = 1, jpkm1402 DO jj = 2, jpjm1403 DO ji = 2, jpim1404 zbtr = 1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) )405 ztz = - zbtr * ( zkz(ji,jj,jk) - zkz(ji,jj,jk+1) )406 zth = - zbtr * ( ( zkx(ji,jj,jk) - zkx(ji-1,jj,jk) ) &407 & + ( zky(ji,jj,jk) - zky(ji,jj-1,jk) ) )408 zkepe(ji,jj,jk) = (zth + ztz) * tmask(ji,jj,jk) * tmask_i(ji,jj)409 END DO410 END DO411 END DO412 zkepe( : , : ,jpk) = 0.e0413 zkepe( : ,jpj, : ) = 0.e0414 zkepe(jpi, : , : ) = 0.e0415 308 416 309 ! I.2 Basin averaged kinetic energy trend 417 310 ! ---------------------------------------- 418 peke = 0.e0 419 DO jk = 1,jpk 420 DO jj = 1, jpj 421 DO ji = 1, jpi 422 peke = peke + zkepe(ji,jj,jk) * grav * fsdept(ji,jj,jk) & 423 & * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 424 END DO 425 END DO 426 END DO 311 peke = 0._wp 312 DO jk = 1, jpkm1 313 peke = peke + SUM( zkepe(:,:,jk) * fsdept(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) ) 314 END DO 315 peke = grav * peke 427 316 428 317 ! I.3 Sums over the global domain … … 550 439 ENDIF 551 440 ! 552 IF(wrk_not_released(3, 1,2,3,4))THEN 553 CALL ctl_stop('trd_dwr : failed to release workspace arrays.') 554 END IF 441 IF( wrk_not_released(3, 1,2,3,4) ) CALL ctl_stop('trd_dwr: failed to release workspace arrays') 555 442 ! 556 443 END SUBROUTINE trd_dwr -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRD/trdmld.F90
r2633 r2690 71 71 ! 72 72 IF( lk_mpp ) CALL mpp_sum ( trd_mld_alloc ) 73 IF( trd_mld_alloc /= 0 ) CALL ctl_warn('trd_mld_alloc: failed to allocate array ndextrd1 .')73 IF( trd_mld_alloc /= 0 ) CALL ctl_warn('trd_mld_alloc: failed to allocate array ndextrd1') 74 74 END FUNCTION trd_mld_alloc 75 75 … … 93 93 !! surface and the control surface is called "mixed-layer" 94 94 !!---------------------------------------------------------------------- 95 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released96 USE wrk_nemo, ONLY: zvlmsk => wrk_2d_195 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 96 USE wrk_nemo, ONLY: zvlmsk => wrk_2d_1 ! 2D workspace 97 97 ! 98 98 INTEGER , INTENT( in ) :: ktrd ! ocean trend index … … 104 104 !!---------------------------------------------------------------------- 105 105 106 IF( wrk_in_use(2, 1) ) THEN106 IF( wrk_in_use(2, 1) ) THEN 107 107 CALL ctl_stop('trd_mld_zint : requested workspace arrays unavailable') ; RETURN 108 108 ENDIF … … 195 195 END SELECT 196 196 ! 197 IF( wrk_not_released(2, 1) ) CALL ctl_stop('trd_mld_zint: failed to release workspace arrays')197 IF( wrk_not_released(2, 1) ) CALL ctl_stop('trd_mld_zint: failed to release workspace arrays') 198 198 ! 199 199 END SUBROUTINE trd_mld_zint -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRD/trdmld_oce.F90
r2636 r2690 129 129 trdmld_oce_alloc = MAXVAL( ierr ) 130 130 IF( lk_mpp ) CALL mpp_sum ( trdmld_oce_alloc ) 131 IF( trdmld_oce_alloc /= 0 ) CALL ctl_warn('trdmld_oce_alloc: failed to allocate arrays .')131 IF( trdmld_oce_alloc /= 0 ) CALL ctl_warn('trdmld_oce_alloc: failed to allocate arrays') 132 132 ! 133 133 END FUNCTION trdmld_oce_alloc -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90
r2636 r2690 40 40 !! *** FUNCTION trd_tra_alloc *** 41 41 !!---------------------------------------------------------------------------- 42 ALLOCATE( trdtx(jpi,jpj,jpk) , trdty(jpi,jpj,jpk) , trdt(jpi,jpj,jpk) , STAT= trd_tra_alloc)42 ALLOCATE( trdtx(jpi,jpj,jpk) , trdty(jpi,jpj,jpk) , trdt(jpi,jpj,jpk) , STAT= trd_tra_alloc ) 43 43 ! 44 44 IF( lk_mpp ) CALL mpp_sum ( trd_tra_alloc ) … … 61 61 !! nn_ctls > 1 : use fixed level surface jk = nn_ctls 62 62 !!---------------------------------------------------------------------- 63 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 64 USE wrk_nemo, ONLY: ztrds => wrk_3d_1 63 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 64 USE wrk_nemo, ONLY: ztrds => wrk_3d_1 ! 3D workspace 65 ! 65 66 INTEGER , INTENT(in) :: kt ! time step 66 67 CHARACTER(len=3) , INTENT(in) :: ctype ! tracers trends type 'TRA'/'TRC' … … 72 73 !!---------------------------------------------------------------------- 73 74 74 IF( wrk_in_use(3, 1) ) THEN75 CALL ctl_stop('trd_tra: requested workspace array unavailable .') ; RETURN75 IF( wrk_in_use(3, 1) ) THEN 76 CALL ctl_stop('trd_tra: requested workspace array unavailable') ; RETURN 76 77 ENDIF 77 78 … … 137 138 ENDIF 138 139 ! 139 IF( wrk_not_released(3, 1) ) CALL ctl_stop('trd_tra: failed to release workspace array.')140 IF( wrk_not_released(3, 1) ) CALL ctl_stop('trd_tra: failed to release workspace array') 140 141 ! 141 142 END SUBROUTINE trd_tra … … 152 153 !! k-advective trends = -un. di+1[T] = -( dk+1[fi] - tn dk+1[un] ) 153 154 !!---------------------------------------------------------------------- 154 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk) 155 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk) 156 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk) 157 CHARACTER(len=1), INTENT(in ) 158 REAL(wp) , INTENT(out), DIMENSION(jpi,jpj,jpk) 159 ! !160 INTEGER 161 INTEGER 162 REAL(wp) :: zbtr ! temporaryscalar155 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pf ! advective flux in one direction 156 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pun ! now velocity in one direction 157 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk) :: ptn ! now or before tracer 158 CHARACTER(len=1), INTENT(in ) :: cdir ! X/Y/Z direction 159 REAL(wp) , INTENT(out), DIMENSION(jpi,jpj,jpk) :: ptrd ! advective trend in one direction 160 ! 161 INTEGER :: ji, jj, jk ! dummy loop indices 162 INTEGER :: ii, ij, ik ! index shift function of the direction 163 REAL(wp) :: zbtr ! local scalar 163 164 !!---------------------------------------------------------------------- 164 165 … … 202 203 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL :: pu ! velocity 203 204 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL :: ptra ! Tracer variable 204 WRITE(*,*) 'trd_3d: You should not have seen this print! error ?', ptrd(1,1,1) 205 WRITE(*,*) ' " ": You should not have seen this print! error ?', ptra(1,1,1) 206 WRITE(*,*) ' " ": You should not have seen this print! error ?', pu(1,1,1) 207 WRITE(*,*) ' " ": You should not have seen this print! error ?', ktrd 208 WRITE(*,*) ' " ": You should not have seen this print! error ?', ktra 209 WRITE(*,*) ' " ": You should not have seen this print! error ?', ctype 210 WRITE(*,*) ' " ": You should not have seen this print! error ?', kt 205 WRITE(*,*) 'trd_3d: You should not have seen this print! error ?', ptrd(1,1,1), ptra(1,1,1), pu(1,1,1), & 206 & ktrd, ktra, ctype, kt 211 207 END SUBROUTINE trd_tra 212 208 # endif -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRD/trdvor.F90
r2633 r2690 4 4 !! Ocean diagnostics: momentum trends 5 5 !!===================================================================== 6 !! History : 9.0 ! 04-06 (L. Brunier, A-M. Treguier) Original code7 !! ! 04-08 (C. Talandier) New trends organization6 !! History : 1.0 ! 04-2006 (L. Brunier, A-M. Treguier) Original code 7 !! 2.0 ! 04-2008 (C. Talandier) New trends organization 8 8 !!---------------------------------------------------------------------- 9 9 #if defined key_trdvor || defined key_esopa … … 41 41 42 42 INTEGER :: nh_t, nmoydpvor, nidvor, nhoridvor, ndimvor1, icount ! needs for IOIPSL output 43 INTEGER, SAVE, ALLOCATABLE, DIMENSION(:) :: ndexvor1! needed for IOIPSL output43 INTEGER, SAVE, ALLOCATABLE, DIMENSION(:) :: ndexvor1 ! needed for IOIPSL output 44 44 INTEGER :: ndebug ! (0/1) set it to 1 in case of problem to have more print 45 45 46 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:, :) :: vor_avr ! average 47 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:, :) :: vor_avrb ! before vorticity (kt-1) 48 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:, :) :: vor_avrbb ! vorticity at begining of the nwrite-1 timestep averaging period 49 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:, :) :: vor_avrbn ! after vorticity at time step after the 50 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:, :) :: rotot ! begining of the NWRITE-1 timesteps 51 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:, :) :: vor_avrtot ! 52 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:, :) :: vor_avrres ! 53 54 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: vortrd ! curl of trends 46 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: vor_avr ! average 47 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: vor_avrb ! before vorticity (kt-1) 48 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: vor_avrbb ! vorticity at begining of the nwrite-1 timestep averaging period 49 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: vor_avrbn ! after vorticity at time step after the 50 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: rotot ! begining of the NWRITE-1 timesteps 51 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: vor_avrtot ! 52 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: vor_avrres ! 53 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: vortrd ! curl of trends 55 54 56 55 CHARACTER(len=12) :: cvort … … 71 70 !! *** ROUTINE trd_vor_alloc *** 72 71 !!---------------------------------------------------------------------------- 73 ALLOCATE( vor_avr (jpi,jpj), vor_avrb(jpi,jpj), vor_avrbb(jpi,jpj),&74 & vor_avrbn (jpi,jpj), rotot(jpi,jpj), vor_avrtot(jpi,jpj),&75 & vor_avrres(jpi,jpj) , vortrd(jpi,jpj,jpltot_vor),&76 & ndexvor1 (jpi*jpj), STAT=trd_vor_alloc)72 ALLOCATE( vor_avr (jpi,jpj) , vor_avrb(jpi,jpj) , vor_avrbb (jpi,jpj) , & 73 & vor_avrbn (jpi,jpj) , rotot (jpi,jpj) , vor_avrtot(jpi,jpj) , & 74 & vor_avrres(jpi,jpj) , vortrd (jpi,jpj,jpltot_vor) , & 75 & ndexvor1 (jpi*jpj) , STAT= trd_vor_alloc ) 77 76 ! 78 77 IF( lk_mpp ) CALL mpp_sum ( trd_vor_alloc ) … … 108 107 !! trends output in netCDF format using ioipsl 109 108 !!---------------------------------------------------------------------- 110 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 111 USE wrk_nemo, ONLY: zudpvor => wrk_2d_1, & ! total cmulative trends 112 zvdpvor => wrk_2d_2 113 !! 109 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 110 USE wrk_nemo, ONLY: zudpvor => wrk_2d_1 , zvdpvor => wrk_2d_2 ! total cmulative trends 111 ! 114 112 INTEGER , INTENT(in ) :: ktrd ! ocean trend index 115 113 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: putrdvor ! u vorticity trend 116 114 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pvtrdvor ! v vorticity trend 117 ! !115 ! 118 116 INTEGER :: ji, jj ! dummy loop indices 119 117 INTEGER :: ikbu, ikbv ! local integers 120 118 !!---------------------------------------------------------------------- 121 119 122 IF(wrk_in_use(2, 1,2))THEN 123 CALL ctl_stop('trd_vor_zint_2d : requested workspace arrays unavailable.') 124 RETURN 125 END IF 120 IF( wrk_in_use(2, 1,2) ) THEN 121 CALL ctl_stop('trd_vor_zint_2d: requested workspace arrays unavailable') ; RETURN 122 ENDIF 126 123 127 124 ! Initialization 128 zudpvor(:,:) = 0._wp 129 zvdpvor(:,:) = 0._wp 130 ! 131 CALL lbc_lnk( putrdvor, 'U' , -1. ) ! lateral boundary condition on input momentum trends 132 CALL lbc_lnk( pvtrdvor, 'V' , -1. ) 125 zudpvor(:,:) = 0._wp ; zvdpvor(:,:) = 0._wp 126 CALL lbc_lnk( putrdvor, 'U', -1. ) ; CALL lbc_lnk( pvtrdvor, 'V', -1. ) ! lateral boundary condition 127 133 128 134 129 ! ===================================== … … 172 167 ENDIF 173 168 ! 174 IF(wrk_not_released(2, 1,2))THEN 175 CALL ctl_stop('trd_vor_zint_2d : failed to release workspace arrays.') 176 END IF 169 IF( wrk_not_released(2, 1,2) ) CALL ctl_stop('trd_vor_zint_2d : failed to release workspace arrays.') 177 170 ! 178 171 END SUBROUTINE trd_vor_zint_2d … … 206 199 !! trends output in netCDF format using ioipsl 207 200 !!---------------------------------------------------------------------- 208 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released209 USE wrk_nemo, ONLY: zubet => wrk_2d_1, zvbet => wrk_2d_2 ! Beta.V210 USE wrk_nemo, ONLY: zudpvor => wrk_2d_3, zvdpvor => wrk_2d_4 ! total cmulative trends211 ! !201 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 202 USE wrk_nemo, ONLY: zubet => wrk_2d_1, zvbet => wrk_2d_2 ! Beta.V 203 USE wrk_nemo, ONLY: zudpvor => wrk_2d_3, zvdpvor => wrk_2d_4 ! total cmulative trends 204 ! 212 205 INTEGER , INTENT(in ) :: ktrd ! ocean trend index 213 206 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: putrdvor ! u vorticity trend 214 207 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pvtrdvor ! v vorticity trend 215 ! !216 INTEGER :: ji, jj, jk 208 ! 209 INTEGER :: ji, jj, jk ! dummy loop indices 217 210 !!---------------------------------------------------------------------- 218 211 219 IF(wrk_in_use(2, 1,2,3,4))THEN 220 CALL ctl_stop('trd_vor_zint_3d : requested workspace arrays unavailable.') 221 RETURN 222 END IF 212 IF( wrk_in_use(2, 1,2,3,4) ) THEN 213 CALL ctl_stop('trd_vor_zint_3d: requested workspace arrays unavailable.') ; RETURN 214 ENDIF 223 215 224 216 ! Initialization … … 228 220 zvdpvor(:,:) = 0._wp 229 221 ! 230 CALL lbc_lnk( putrdvor, 'U' 231 CALL lbc_lnk( pvtrdvor, 'V' 222 CALL lbc_lnk( putrdvor, 'U', -1. ) ! lateral boundary condition on input momentum trends 223 CALL lbc_lnk( pvtrdvor, 'V', -1. ) 232 224 233 225 ! ===================================== … … 284 276 ENDIF 285 277 ! 286 IF(wrk_not_released(2, 1,2,3,4))THEN 287 CALL ctl_stop('trd_vor_zint_3d : failed to release workspace arrays.') 288 END IF 278 IF( wrk_not_released(2, 1,2,3,4) ) CALL ctl_stop('trd_vor_zint_3d: failed to release workspace arrays') 289 279 ! 290 280 END SUBROUTINE trd_vor_zint_3d … … 298 288 !! and make outputs (NetCDF or DIMG format) 299 289 !!---------------------------------------------------------------------- 300 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released301 USE wrk_nemo, ONLY: zun => wrk_2d_1, zvn => wrk_2d_2 ! 2D workspace302 ! !290 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 291 USE wrk_nemo, ONLY: zun => wrk_2d_1 , zvn => wrk_2d_2 ! 2D workspace 292 ! 303 293 INTEGER, INTENT(in) :: kt ! ocean time-step index 304 ! !294 ! 305 295 INTEGER :: ji, jj, jk, jl ! dummy loop indices 306 296 INTEGER :: it, itmod ! local integers … … 308 298 !!---------------------------------------------------------------------- 309 299 310 IF(wrk_in_use(2, 1,2))THEN 311 CALL ctl_stop('trd_vor : requested workspace arrays unavailable.') 312 RETURN 313 END IF 300 IF( wrk_in_use(2, 1,2) ) THEN 301 CALL ctl_stop('trd_vor: requested workspace arrays unavailable.') ; RETURN 302 ENDIF 314 303 315 304 ! ================= … … 478 467 IF( kt == nitend ) CALL histclo( nidvor ) 479 468 ! 480 IF( wrk_not_released(2, 1,2) ) CALL ctl_stop('trd_vor: failed to release workspace arrays')469 IF( wrk_not_released(2, 1,2) ) CALL ctl_stop('trd_vor: failed to release workspace arrays') 481 470 ! 482 471 END SUBROUTINE trd_vor -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRD/trdvor_oce.F90
r2528 r2690 4 4 !! Ocean trends : set vorticity trend variables 5 5 !!====================================================================== 6 !! History : 9.0 ! ???6 !! History : 9.0 ! 04-2006 (L. Brunier, A-M. Treguier) Original code 7 7 !!---------------------------------------------------------------------- 8 8 … … 14 14 15 15 #if defined key_trdvor 16 LOGICAL, PUBLIC, PARAMETER :: lk_trdvor = .TRUE. 16 LOGICAL, PUBLIC, PARAMETER :: lk_trdvor = .TRUE. !: momentum trend flag 17 17 #else 18 LOGICAL, PUBLIC, PARAMETER :: lk_trdvor = .FALSE. 18 LOGICAL, PUBLIC, PARAMETER :: lk_trdvor = .FALSE. !: momentum trend flag 19 19 #endif 20 ! !* vorticity trends index20 ! !!* vorticity trends index 21 21 INTEGER, PUBLIC, PARAMETER :: jpltot_vor = 11 !: Number of vorticity trend terms 22 22 ! … … 36 36 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 37 37 !! $Id$ 38 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)38 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 39 39 !!====================================================================== 40 40 END MODULE trdvor_oce -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdf_oce.F90
r2636 r2690 37 37 38 38 39 REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION( :):: avmb , avtb !: background profile of avm and avt40 REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION( :,:) :: avtb_2d !: set in tke_init, for other modif than ice41 REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION( :,:):: bfrua, bfrva !: Bottom friction coefficients set in zdfbfr39 REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:) :: avmb , avtb !: background profile of avm and avt 40 REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:) :: avtb_2d !: horizontal shape of background Kz profile 41 REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:) :: bfrua, bfrva !: Bottom friction coefficients set in zdfbfr 42 42 REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: avmu , avmv !: vertical viscosity coef at uw- & vw-pts [m2/s] 43 43 REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: avm , avt !: vertical viscosity & diffusivity coef at w-pt [m2/s] -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfbfr.F90
r2617 r2690 179 179 CALL iom_get (inum, jpdom_data, 'bfr_coef',bfrcoef2d,1) ! bfrcoef2d is used as tmp array 180 180 CALL iom_close(inum) 181 bfrcoef2d(:,:) = rn_bfri1 * ( 1 + rn_bfrien * bfrcoef2d(:,:) )181 bfrcoef2d(:,:) = rn_bfri1 * ( 1 + rn_bfrien * bfrcoef2d(:,:) ) 182 182 ENDIF 183 183 bfrua(:,:) = - bfrcoef2d(:,:) -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfddm.F90
r2636 r2690 52 52 !! *** ROUTINE zdf_ddm_alloc *** 53 53 !!---------------------------------------------------------------------- 54 ALLOCATE( avs(jpi,jpj,jpk), rrau(jpi,jpj,jpk), STAT 54 ALLOCATE( avs(jpi,jpj,jpk), rrau(jpi,jpj,jpk), STAT= zdf_ddm_alloc ) 55 55 ! 56 56 IF( lk_mpp ) CALL mpp_sum ( zdf_ddm_alloc ) … … 105 105 IF( wrk_in_use(2, 1,2,3,4,5) ) THEN 106 106 CALL ctl_stop('zdf_ddm: Requested workspace arrays already in use') ; RETURN 107 END 107 ENDIF 108 108 109 109 ! ! =============== … … 117 117 DO ji = 1, jpi 118 118 ! stability indicator: msks=1 if rn2>0; 0 elsewhere 119 IF( rn2(ji,jj,jk) + 1.e-12 <= 0. ) THEN ; zmsks(ji,jj) = 0. e0120 ELSE ; zmsks(ji,jj) = 1. e0119 IF( rn2(ji,jj,jk) + 1.e-12 <= 0. ) THEN ; zmsks(ji,jj) = 0._wp 120 ELSE ; zmsks(ji,jj) = 1._wp 121 121 ENDIF 122 122 ! salt fingering indicator: msksf=1 if rrau>1; 0 elsewhere 123 IF( rrau(ji,jj,jk) <= 1. ) THEN ; zmskf(ji,jj) = 0. e0124 ELSE ; zmskf(ji,jj) = 1. e0123 IF( rrau(ji,jj,jk) <= 1. ) THEN ; zmskf(ji,jj) = 0._wp 124 ELSE ; zmskf(ji,jj) = 1._wp 125 125 ENDIF 126 126 ! diffusive layering indicators: 127 127 ! ! mskdl1=1 if 0<rrau<1; 0 elsewhere 128 IF( rrau(ji,jj,jk) >= 1. ) THEN ; zmskd1(ji,jj) = 0. e0129 ELSE ; zmskd1(ji,jj) = 1. e0128 IF( rrau(ji,jj,jk) >= 1. ) THEN ; zmskd1(ji,jj) = 0._wp 129 ELSE ; zmskd1(ji,jj) = 1._wp 130 130 ENDIF 131 131 ! ! mskdl2=1 if 0<rrau<0.5; 0 elsewhere 132 IF( rrau(ji,jj,jk) >= 0.5 ) THEN ; zmskd2(ji,jj) = 0. e0133 ELSE ; zmskd2(ji,jj) = 1. e0132 IF( rrau(ji,jj,jk) >= 0.5 ) THEN ; zmskd2(ji,jj) = 0._wp 133 ELSE ; zmskd2(ji,jj) = 1._wp 134 134 ENDIF 135 135 ! mskdl3=1 if 0.5<rrau<1; 0 elsewhere 136 IF( rrau(ji,jj,jk) <= 0.5 .OR. rrau(ji,jj,jk) >= 1. ) THEN ; zmskd3(ji,jj) = 0. e0137 ELSE ; zmskd3(ji,jj) = 1. e0136 IF( rrau(ji,jj,jk) <= 0.5 .OR. rrau(ji,jj,jk) >= 1. ) THEN ; zmskd3(ji,jj) = 0._wp 137 ELSE ; zmskd3(ji,jj) = 1._wp 138 138 ENDIF 139 139 END DO … … 185 185 ! ! =============== 186 186 ! 187 CALL lbc_lnk( avt , 'W', 1. 0_wp ) ! Lateral boundary conditions (unchanged sign)188 CALL lbc_lnk( avs , 'W', 1. 0_wp )189 CALL lbc_lnk( avm , 'W', 1. 0_wp )190 CALL lbc_lnk( avmu, 'U', 1. 0_wp )191 CALL lbc_lnk( avmv, 'V', 1. 0_wp )187 CALL lbc_lnk( avt , 'W', 1._wp ) ! Lateral boundary conditions (unchanged sign) 188 CALL lbc_lnk( avs , 'W', 1._wp ) 189 CALL lbc_lnk( avm , 'W', 1._wp ) 190 CALL lbc_lnk( avmu, 'U', 1._wp ) 191 CALL lbc_lnk( avmv, 'V', 1._wp ) 192 192 193 193 IF(ln_ctl) THEN … … 214 214 !!---------------------------------------------------------------------- 215 215 ! 216 REWIND ( numnam )! Read Namelist namzdf_ddm : double diffusion mixing scheme217 READ 216 REWIND( numnam ) ! Read Namelist namzdf_ddm : double diffusion mixing scheme 217 READ ( numnam, namzdf_ddm ) 218 218 ! 219 219 IF(lwp) THEN ! Parameter print … … 224 224 WRITE(numout,*) ' maximum avs for dd mixing rn_avts = ', rn_avts 225 225 WRITE(numout,*) ' heat/salt buoyancy flux ratio rn_hsbfr = ', rn_hsbfr 226 WRITE(numout,*)227 226 ENDIF 228 227 ! -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90
r2616 r2690 52 52 !! References : Lazar, A., these de l'universite Paris VI, France, 1997 53 53 !!---------------------------------------------------------------------- 54 USE oce, zavt_evd => ua ! use ua as workspace 55 USE oce, zavm_evd => va ! use va as workspace 56 !! 54 USE oce, zavt_evd => ua , zavm_evd => va ! (ua,va) used ua workspace 55 ! 57 56 INTEGER, INTENT( in ) :: kt ! ocean time-step indexocean time step 58 ! !57 ! 59 58 INTEGER :: ji, jj, jk ! dummy loop indices 60 59 !!---------------------------------------------------------------------- … … 70 69 71 70 SELECT CASE ( nn_evdm ) 72 71 ! 73 72 CASE ( 1 ) ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12) 74 73 ! 75 74 zavm_evd(:,:,:) = avm(:,:,:) ! set avm prior to evd application 76 75 ! … … 85 84 #if defined key_zdfkpp 86 85 ! no evd mixing in the boundary layer with KPP 87 IF( ( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) .AND. ( fsdepw(ji,jj,jk) > hkpp(ji,jj) )) THEN86 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 .AND. fsdepw(ji,jj,jk) > hkpp(ji,jj) ) THEN 88 87 #else 89 IF( MIN( rn2(ji,jj,jk),rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN88 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN 90 89 #endif 91 90 avt (ji ,jj ,jk) = rn_avevd * tmask(ji ,jj ,jk) … … 99 98 END DO 100 99 END DO 101 CALL lbc_lnk( avt , 'W', 1. ) ; CALL lbc_lnk( avm , 'W', 1. ) ! Lateral boundary conditions (unchanged sign)100 CALL lbc_lnk( avt , 'W', 1. ) ; CALL lbc_lnk( avm , 'W', 1. ) ! Lateral boundary conditions 102 101 CALL lbc_lnk( avmu, 'U', 1. ) ; CALL lbc_lnk( avmv, 'V', 1. ) 103 102 ! … … 117 116 #if defined key_zdfkpp 118 117 ! no evd mixing in the boundary layer with KPP 119 IF( ( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) .AND. ( fsdepw(ji,jj,jk) > hkpp(ji,jj) ) )&118 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 .AND. fsdepw(ji,jj,jk) > hkpp(ji,jj) ) & 120 119 #else 121 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 )&120 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) & 122 121 #endif 123 122 avt(ji,jj,jk) = rn_avevd * tmask(ji,jj,jk) -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90
r2636 r2690 117 117 !!---------------------------------------------------------------------- 118 118 ALLOCATE( en(jpi,jpj,jpk), mxln(jpi,jpj,jpk), zwall(jpi,jpj,jpk) , & 119 & ustars2(jpi,jpj), ustarb2(jpi,jpj) , STAT= zdf_gls_alloc )119 & ustars2(jpi,jpj), ustarb2(jpi,jpj) , STAT= zdf_gls_alloc ) 120 120 ! 121 121 IF( lk_mpp ) CALL mpp_sum ( zdf_gls_alloc ) -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfini.F90
r2616 r2690 109 109 ioptio = ioptio+1 110 110 ENDIF 111 IF( ioptio == 0 .OR. ioptio > 1 .AND. .NOT. lk_esopa ) &111 IF( ioptio == 0 .OR. ioptio > 1 .AND. .NOT. lk_esopa ) & 112 112 & CALL ctl_stop( ' one and only one vertical diffusion option has to be defined ' ) 113 113 ! … … 138 138 ENDIF 139 139 IF ( ioptio > 1 .AND. .NOT. lk_esopa ) CALL ctl_stop( ' chose between ln_zdfnpc and ln_zdfevd' ) 140 IF( ioptio == 0 .AND. .NOT.( lk_zdftke .OR. lk_zdfgls .OR. lk_zdfkpp ) ) &141 CALL ctl_stop( ' except for TKE, GLS or KPP physics, a convection scheme is', &140 IF( ioptio == 0 .AND. .NOT.( lk_zdftke .OR. lk_zdfgls .OR. lk_zdfkpp ) ) & 141 CALL ctl_stop( ' except for TKE, GLS or KPP physics, a convection scheme is', & 142 142 & ' required: ln_zdfevd or ln_zdfnpc logicals' ) 143 144 143 145 144 ! !* Background eddy viscosity and diffusivity profil … … 149 148 ELSE ! Background profile of avt (fit a theoretical/observational profile (Krauss 1990) 150 149 avmb(:) = rn_avm0 151 avtb(:) = rn_avt0 + ( 3. 0e-4 - 2 * rn_avt0 ) * 1.0e-4* gdepw_0(:) ! m2/s152 IF(ln_sco .AND. lwp) CALL ctl_warn( ' 150 avtb(:) = rn_avt0 + ( 3.e-4_wp - 2._wp * rn_avt0 ) * 1.e-4_wp * gdepw_0(:) ! m2/s 151 IF(ln_sco .AND. lwp) CALL ctl_warn( 'avtb profile not valid in sco' ) 153 152 ENDIF 154 153 ! -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfkpp.F90
r2636 r2690 129 129 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etmean, eumean, evmean ! coeff. used for hor. smoothing at t-, u- & v-points 130 130 131 132 131 #if defined key_c1d 133 132 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rig !: gradient Richardson number … … 165 164 & mols(jpi,jpj,jpk), ekdp(jpi,jpj), & 166 165 #endif 167 & STAT= zdf_kpp_alloc )166 & STAT= zdf_kpp_alloc ) 168 167 ! 169 168 IF( lk_mpp ) CALL mpp_sum ( zdf_kpp_alloc ) … … 275 274 !!-------------------------------------------------------------------- 276 275 277 IF( wrk_in_use(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14) .OR. &278 wrk_in_use(2, 1,2,3,4,5,6,7,8,9,10,11) .OR. &276 IF( wrk_in_use(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14) .OR. & 277 wrk_in_use(2, 1,2,3,4,5,6,7,8,9,10,11) .OR. & 279 278 wrk_in_use_xz(1,2,3) ) THEN 280 279 CALL ctl_stop('zdf_kpp : requested workspace arrays unavailable.') ; RETURN 281 END 280 ENDIF 282 281 ! Set-up pointers to 2D spaces 283 282 !gm zmoek(1:jpi,0:2) => wrk_2d_5(1:jpi,1:3) … … 1235 1234 ENDIF 1236 1235 1237 IF( wrk_not_released(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14) .OR. & 1238 wrk_not_released(2, 1,2,3,4,5,6,7,8,9,10,11) .OR. & 1239 wrk_not_released_xz(1,2,3) ) CALL ctl_stop('zdf_kpp : failed to release workspace arrays') 1236 IF( wrk_not_released(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14) .OR. & 1237 wrk_not_released(2, 1,2,3,4,5,6,7,8,9,10,11) .OR. & 1238 wrk_not_released_xz(1,2,3) ) & 1239 CALL ctl_stop('zdf_kpp : failed to release workspace arrays') 1240 1240 ! 1241 1241 END SUBROUTINE zdf_kpp … … 1442 1442 ENDIF 1443 1443 1444 1445 1444 1446 1445 !set constants not in namelist … … 1596 1595 END DO 1597 1596 #endif 1597 ! 1598 1598 END SUBROUTINE zdf_kpp_init 1599 1599 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfmxl.F90
r2636 r2690 40 40 !! *** FUNCTION zdf_mxl_alloc *** 41 41 !!---------------------------------------------------------------------- 42 ALLOCATE( nmln(jpi,jpj), hmld(jpi,jpj), hmlp(jpi,jpj), hmlpt(jpi,jpj), STAT= zdf_mxl_alloc)42 ALLOCATE( nmln(jpi,jpj), hmld(jpi,jpj), hmlp(jpi,jpj), hmlpt(jpi,jpj), STAT= zdf_mxl_alloc ) 43 43 ! 44 44 IF( lk_mpp ) CALL mpp_sum ( zdf_mxl_alloc ) … … 64 64 !! ** Action : nmln, hmld, hmlp, hmlpt 65 65 !!---------------------------------------------------------------------- 66 USE wrk_nemo, ONLY: iwrk_in_use, iwrk_not_released67 USE wrk_nemo, ONLY: imld => iwrk_2d_1 ! 2D integer workspace66 USE wrk_nemo, ONLY: iwrk_in_use, iwrk_not_released 67 USE wrk_nemo, ONLY: imld => iwrk_2d_1 ! 2D integer workspace 68 68 !! 69 INTEGER, INTENT( in) :: kt ! ocean time-step index69 INTEGER, INTENT(in) :: kt ! ocean time-step index 70 70 !! 71 INTEGER 72 INTEGER 73 REAL(wp) 74 REAL(wp) 71 INTEGER :: ji, jj, jk ! dummy loop indices 72 INTEGER :: iikn, iiki ! temporary integer within a do loop 73 REAL(wp) :: zrho_c = 0.01_wp ! density criterion for mixed layer depth 74 REAL(wp) :: zavt_c = 5.e-4_wp ! Kz criterion for the turbocline depth 75 75 !!---------------------------------------------------------------------- 76 76 77 IF( iwrk_in_use(2, 1) ) THEN77 IF( iwrk_in_use(2, 1) ) THEN 78 78 CALL ctl_stop('zdf_mxl : requested workspace array unavailable') ; RETURN 79 END 79 ENDIF 80 80 81 81 IF( kt == nit000 ) THEN … … 83 83 IF(lwp) WRITE(numout,*) 'zdf_mxl : mixed layer depth' 84 84 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 85 ! 85 ! ! allocate zdfmxl arrays 86 86 IF( zdf_mxl_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'zdf_mxl : unable to allocate arrays' ) 87 87 ENDIF … … 113 113 IF(ln_ctl) CALL prt_ctl( tab2d_1=REAL(nmln,wp), clinfo1=' nmln : ', tab2d_2=hmlp, clinfo2=' hmlp : ', ovlap=1 ) 114 114 ! 115 IF( iwrk_not_released(2, 1) ) CALL ctl_stop('zdf_mxl 115 IF( iwrk_not_released(2, 1) ) CALL ctl_stop('zdf_mxl: failed to release workspace array') 116 116 ! 117 117 END SUBROUTINE zdf_mxl -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfric.F90
r2636 r2690 40 40 REAL(wp) :: rn_alp = 5._wp ! coefficient of the parameterization 41 41 42 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tmric !coef. for the horizontal mean at t-point42 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tmric !: coef. for the horizontal mean at t-point 43 43 44 44 !! * Substitutions … … 55 55 !! *** FUNCTION zdf_ric_alloc *** 56 56 !!---------------------------------------------------------------------- 57 ALLOCATE( tmric(jpi,jpj,jpk) , STAT=zdf_ric_alloc )57 ALLOCATE( tmric(jpi,jpj,jpk) , STAT= zdf_ric_alloc ) 58 58 ! 59 59 IF( lk_mpp ) CALL mpp_sum ( zdf_ric_alloc ) … … 89 89 !! References : Pacanowski & Philander 1981, JPO, 1441-1451. 90 90 !!---------------------------------------------------------------------- 91 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released92 USE wrk_nemo, ONLY: zwx => wrk_2d_191 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 92 USE wrk_nemo, ONLY: zwx => wrk_2d_1 ! 2D workspace 93 93 !! 94 94 INTEGER, INTENT( in ) :: kt ! ocean time-step indexocean time step … … 100 100 IF( wrk_in_use(2, 1) ) THEN 101 101 CALL ctl_stop('zdf_ric : requested workspace array unavailable') ; RETURN 102 END 102 ENDIF 103 103 ! ! =============== 104 104 DO jk = 2, jpkm1 ! Horizontal slab … … 121 121 CALL lbc_lnk( zwx, 'W', 1. ) ! Boundary condition (sign unchanged) 122 122 123 124 123 ! Vertical eddy viscosity and diffusivity coefficients 125 124 ! ------------------------------------------------------- 126 z05alp = 0.5 * rn_alp125 z05alp = 0.5_wp * rn_alp 127 126 DO jj = 1, jpjm1 ! Eddy viscosity coefficients (avm) 128 127 DO ji = 1, jpim1 129 avmu(ji,jj,jk) = umask(ji,jj,jk) & 130 & * rn_avmri / ( 1. + z05alp*( zwx(ji+1,jj)+zwx(ji,jj) ) )**nn_ric 131 avmv(ji,jj,jk) = vmask(ji,jj,jk) & 132 & * rn_avmri / ( 1. + z05alp*( zwx(ji,jj+1)+zwx(ji,jj) ) )**nn_ric 128 avmu(ji,jj,jk) = umask(ji,jj,jk) * rn_avmri / ( 1. + z05alp*( zwx(ji+1,jj)+zwx(ji,jj) ) )**nn_ric 129 avmv(ji,jj,jk) = vmask(ji,jj,jk) * rn_avmri / ( 1. + z05alp*( zwx(ji,jj+1)+zwx(ji,jj) ) )**nn_ric 133 130 END DO 134 131 END DO 135 132 DO jj = 2, jpjm1 ! Eddy diffusivity coefficients (avt) 136 133 DO ji = 2, jpim1 137 avt(ji,jj,jk) = tmric(ji,jj,jk) / ( 1. + rn_alp * zwx(ji,jj) )&138 & * ( avmu(ji,jj,jk) + avmu(ji-1, jj ,jk)&139 & + avmv(ji,jj,jk) + avmv( ji ,jj-1,jk) )&134 avt(ji,jj,jk) = tmric(ji,jj,jk) / ( 1._wp + rn_alp * zwx(ji,jj) ) & 135 & * ( avmu(ji,jj,jk) + avmu(ji-1,jj,jk) & 136 & + avmv(ji,jj,jk) + avmv(ji,jj-1,jk) ) & 140 137 & + avtb(jk) * tmask(ji,jj,jk) 141 138 ! ! Add the background coefficient on eddy viscosity … … 151 148 CALL lbc_lnk( avmu, 'U', 1. ) ; CALL lbc_lnk( avmv, 'V', 1. ) 152 149 ! 153 IF( wrk_not_released(2, 1) ) CALL ctl_stop('zdf_ric 150 IF( wrk_not_released(2, 1) ) CALL ctl_stop('zdf_ric: failed to release workspace array') 154 151 ! 155 152 END SUBROUTINE zdf_ric … … 169 166 !! ** Action : increase by 1 the nstop flag is setting problem encounter 170 167 !!---------------------------------------------------------------------- 171 INTEGER :: ji, jj, jk 168 INTEGER :: ji, jj, jk ! dummy loop indices 172 169 !! 173 170 NAMELIST/namzdf_ric/ rn_avmri, rn_alp, nn_ric -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90
r2636 r2690 58 58 PUBLIC tke_rst ! routine called in step module 59 59 60 LOGICAL , PUBLIC, PARAMETER 60 LOGICAL , PUBLIC, PARAMETER :: lk_zdftke = .TRUE. !: TKE vertical mixing flag 61 61 62 62 ! !!** Namelist namzdf_tke ** … … 83 83 84 84 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: en !: now turbulent kinetic energy [m2/s2] 85 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:) :: htau ! depth of tke penetration (nn_htau) 86 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dissl ! now mixing lenght of dissipation 85 87 #if defined key_c1d 86 88 ! !!** 1D cfg only ** ('key_c1d') … … 88 90 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e_pdl, e_ric !: prandl and local Richardson numbers 89 91 #endif 90 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:) :: htau ! depth of tke penetration (nn_htau)91 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dissl ! now mixing lenght of dissipation92 92 93 93 !! * Substitutions … … 110 110 & e_pdl(jpi,jpj,jpk) , e_ric(jpi,jpj,jpk) , & 111 111 #endif 112 & en (jpi,jpj,jpk) , htau (jpi,jpj) , dissl(jpi,jpj,jpk) , STAT= zdf_tke_alloc )112 & en (jpi,jpj,jpk) , htau (jpi,jpj) , dissl(jpi,jpj,jpk) , STAT= zdf_tke_alloc ) 113 113 ! 114 114 IF( lk_mpp ) CALL mpp_sum ( zdf_tke_alloc ) … … 191 191 !! --------------------------------------------------------------------- 192 192 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released, iwrk_in_use, iwrk_not_released 193 USE oce , ONLY: zdiag => ua , zd_up => va , zd_lw => ta ! (ua,va,ta) used 193 USE oce , ONLY: zdiag => ua , zd_up => va , zd_lw => ta ! (ua,va,ta) used as workspace 194 194 USE wrk_nemo, ONLY: imlc => iwrk_2d_1 ! 2D INTEGER workspace 195 195 USE wrk_nemo, ONLY: zhlc => wrk_2d_1 ! 2D REAL workspace 196 196 USE wrk_nemo, ONLY: zpelc => wrk_3d_1 ! 3D REAL workspace 197 ! !197 ! 198 198 INTEGER :: ji, jj, jk ! dummy loop arguments 199 199 !!bfr INTEGER :: ikbu, ikbv, ikbum1, ikbvm1 ! temporary scalar … … 210 210 !!-------------------------------------------------------------------- 211 211 ! 212 IF( iwrk_in_use(2, 1) .OR. &213 wrk_in_use(2, 1) .OR. &214 wrk_in_use(3, 1) ) THEN215 CALL ctl_stop('tke_tke : requested workspace arrays unavailable.') ; RETURN212 IF( iwrk_in_use(2, 1) .OR. & 213 wrk_in_use(2, 1) .OR. & 214 wrk_in_use(3, 1) ) THEN 215 CALL ctl_stop('tke_tke: requested workspace arrays unavailable') ; RETURN 216 216 END IF 217 217 … … 431 431 IF( iwrk_not_released(2 ,1) .OR. & 432 432 wrk_not_released(2, 1) .OR. & 433 wrk_not_released(3, 1) ) CALL ctl_stop( 'tke_tke 433 wrk_not_released(3, 1) ) CALL ctl_stop( 'tke_tke: failed to release workspace arrays' ) 434 434 ! 435 435 END SUBROUTINE tke_tke … … 471 471 !! - avmu, avmv : now vertical eddy viscosity at uw- and vw-points 472 472 !!---------------------------------------------------------------------- 473 USE oce, zmpdl => ua ! use ua as workspace 474 USE oce, zmxlm => va ! use va as workspace 475 USE oce, zmxld => ta ! use ta as workspace 476 !! 477 INTEGER :: ji, jj, jk ! dummy loop arguments 478 REAL(wp) :: zrn2, zraug ! temporary scalars 479 REAL(wp) :: zdku ! - - 480 REAL(wp) :: zdkv ! - - 481 REAL(wp) :: zcoef, zav ! - - 482 REAL(wp) :: zpdlr, zri, zsqen ! - - 483 REAL(wp) :: zemxl, zemlm, zemlp ! - - 473 USE oce, ONLY: zmpdl => ua , zmxlm => va , zmxld => ta ! (ua,va,ta) used as workspace 474 !! 475 INTEGER :: ji, jj, jk ! dummy loop indices 476 REAL(wp) :: zrn2, zraug, zcoef, zav ! local scalars 477 REAL(wp) :: zdku, zpdlr, zri, zsqen ! - - 478 REAL(wp) :: zdkv, zemxl, zemlm, zemlp ! - - 484 479 !!-------------------------------------------------------------------- 485 480 … … 509 504 END DO 510 505 END DO 511 !512 506 ! 513 507 ! !* Physical limits for the mixing length … … 680 674 & nn_etau , nn_htau , rn_efr 681 675 !!---------------------------------------------------------------------- 682 676 ! 683 677 REWIND ( numnam ) !* Read Namelist namzdf_tke : Turbulente Kinetic Energy 684 678 READ ( numnam, namzdf_tke ) 685 679 ! 686 680 ri_cri = 2._wp / ( 2._wp + rn_ediss / rn_ediff ) ! resulting critical Richardson number 687 681 rmxl_min = 1.e-6_wp / ( rn_ediff * SQRT( rn_emin ) ) ! resulting minimum length to recover molecular viscosity 688 682 ! 689 683 IF(lwp) THEN !* Control print 690 684 WRITE(numout,*) … … 710 704 WRITE(numout,*) ' critical Richardson nb with your parameters ri_cri = ', ri_cri 711 705 ENDIF 712 706 ! 713 707 ! ! allocate tke arrays 714 708 IF( zdf_tke_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'zdf_tke_init : unable to allocate arrays' ) 715 709 ! 716 710 ! !* Check of some namelist values 717 711 IF( nn_mxl < 0 .OR. nn_mxl > 3 ) CALL ctl_stop( 'bad flag: nn_mxl is 0, 1 or 2 ' ) … … 738 732 END SELECT 739 733 ENDIF 740 741 734 ! !* set vertical eddy coef. to the background value 742 735 DO jk = 1, jpk … … 747 740 END DO 748 741 dissl(:,:,:) = 1.e-12_wp 749 ! !* read or initialize all required files750 CALL tke_rst( nit000, 'READ' ) 742 ! 743 CALL tke_rst( nit000, 'READ' ) !* read or initialize all required files 751 744 ! 752 745 END SUBROUTINE zdf_tke_init … … 763 756 !! set to rn_emin or recomputed 764 757 !!---------------------------------------------------------------------- 765 INTEGER , INTENT(in) :: kt 766 CHARACTER(len=*), INTENT(in) :: cdrw 758 INTEGER , INTENT(in) :: kt ! ocean time-step 759 CHARACTER(len=*), INTENT(in) :: cdrw ! "READ"/"WRITE" flag 767 760 ! 768 761 INTEGER :: jit, jk ! dummy loop indices 769 INTEGER :: id1, id2, id3, id4, id5, id6 762 INTEGER :: id1, id2, id3, id4, id5, id6 ! local integers 770 763 !!---------------------------------------------------------------------- 771 764 ! -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90
r2676 r2690 234 234 IF( Agrif_Root() ) CALL nemo_partition(mppsize) 235 235 #else 236 jpni = 1237 jpnj = 1236 jpni = 1 237 jpnj = 1 238 238 jpnij = jpni*jpnj 239 239 #endif … … 244 244 ! than variables 245 245 IF( Agrif_Root() ) THEN 246 jpi = ( jpiglo-2*jpreci + (jpni-1) ) / jpni + 2*jpreci !:first dim.247 jpj = ( jpjglo-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj !:second dim.248 jpk = jpkdta !:third dim249 jpim1 = jpi-1 !:inner domain indices250 jpjm1 = jpj-1 !:" "251 jpkm1 = jpk-1 !:" "252 jpij = jpi*jpj !:jpi x j246 jpi = ( jpiglo-2*jpreci + (jpni-1) ) / jpni + 2*jpreci ! first dim. 247 jpj = ( jpjglo-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj ! second dim. 248 jpk = jpkdta ! third dim 249 jpim1 = jpi-1 ! inner domain indices 250 jpjm1 = jpj-1 ! " " 251 jpkm1 = jpk-1 ! " " 252 jpij = jpi*jpj ! jpi x j 253 253 ENDIF 254 254 … … 469 469 470 470 SUBROUTINE nemo_alloc 471 !!---------------------------------------------------------------------- 472 !! *** ROUTINE nemo_alloc *** 473 !! 474 !! ** Purpose : Allocate all the dynamic arrays of the OPA modules 475 !! 476 !! ** Method : 477 !!---------------------------------------------------------------------- 478 USE diawri, ONLY: dia_wri_alloc 479 USE dom_oce, ONLY: dom_oce_alloc 480 USE ldfdyn_oce, ONLY: ldfdyn_oce_alloc 481 USE ldftra_oce, ONLY: ldftra_oce_alloc 482 USE trc_oce, ONLY: trc_oce_alloc 483 484 USE wrk_nemo, ONLY: wrk_alloc 485 471 !!---------------------------------------------------------------------- 472 !! *** ROUTINE nemo_alloc *** 473 !! 474 !! ** Purpose : Allocate all the dynamic arrays of the OPA modules 475 !! 476 !! ** Method : 477 !!---------------------------------------------------------------------- 478 USE diawri , ONLY: dia_wri_alloc 479 USE dom_oce , ONLY: dom_oce_alloc 480 USE ldfdyn_oce, ONLY: ldfdyn_oce_alloc 481 USE ldftra_oce, ONLY: ldftra_oce_alloc 482 USE trc_oce , ONLY: trc_oce_alloc 483 USE wrk_nemo , ONLY: wrk_alloc 484 ! 486 485 INTEGER :: ierr 487 INTEGER :: i 488 !!---------------------------------------------------------------------- 489 486 !!---------------------------------------------------------------------- 487 ! 490 488 ierr = oce_alloc () ! ocean 491 489 ierr = ierr + dia_wri_alloc () … … 497 495 ierr = ierr + lib_mpp_alloc (numout) ! mpp exchanges 498 496 ierr = ierr + trc_oce_alloc () ! shared TRC / TRA arrays 499 497 ! 500 498 ierr = ierr + wrk_alloc(numout, lwp) ! workspace 501 499 ! 502 500 IF( lk_mpp ) CALL mpp_sum( ierr ) 503 501 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'nemo_alloc : unable to allocate standard ocean arrays' ) -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/trc_oce.F90
r2636 r2690 63 63 !! *** trc_oce_alloc *** 64 64 !!---------------------------------------------------------------------- 65 ALLOCATE( etot3(jpi,jpj,jpk) , Stat= trc_oce_alloc )66 ! 67 IF( trc_oce_alloc /= 0 ) CALL ctl_warn('trc_oce_alloc: failed to allocate array etot3')65 ALLOCATE( etot3(jpi,jpj,jpk) , STAT= trc_oce_alloc ) 66 ! 67 IF( trc_oce_alloc /= 0 ) CALL ctl_warn('trc_oce_alloc: failed to allocate etot3 array') 68 68 END FUNCTION trc_oce_alloc 69 69 … … 250 250 ! 251 251 ! It is not necessary to compute anything bellow the following depth 252 zhext = prldex * ( LOG(10. e0) * zprec + LOG(pqsr_frc) )253 252 zhext = prldex * ( LOG(10._wp) * zprec + LOG(pqsr_frc) ) 253 ! 254 254 ! Level of light extinction 255 255 pjl = jpkm1 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/C14b/par_c14b.F90
r2528 r2690 5 5 !!====================================================================== 6 6 !! History : 2.0 ! 2008-12 (C. Ethe, G. Madec) revised architecture 7 !!----------------------------------------------------------------------8 !! NEMO/TOP 3.3 , NEMO Consortium (2010)9 !! $Id$10 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)11 7 !!---------------------------------------------------------------------- 12 8 USE par_lobster, ONLY : jp_lobster !: number of tracers in LOBSTER … … 55 51 56 52 ! Starting/ending C14 do-loop indices (N.B. no C14 : jp_c14b0 > jp_c14b1 the do-loop are never done) 57 INTEGER, PUBLIC, PARAMETER :: jp_c14b0 = jp_lb + 1!: First index of C14 tracer58 INTEGER, PUBLIC, PARAMETER :: jp_c14b1 = jp_lb + jp_c14b!: Last index of C14 tracer53 INTEGER, PUBLIC, PARAMETER :: jp_c14b0 = jp_lb + 1 !: First index of C14 tracer 54 INTEGER, PUBLIC, PARAMETER :: jp_c14b1 = jp_lb + jp_c14b !: Last index of C14 tracer 59 55 INTEGER, PUBLIC, PARAMETER :: jp_c14b0_2d = jp_lb_2d + 1 !: First index of C14 tracer 60 56 INTEGER, PUBLIC, PARAMETER :: jp_c14b1_2d = jp_lb_2d + jp_c14b_2d !: Last index of C14 tracer … … 64 60 INTEGER, PUBLIC, PARAMETER :: jp_c14b1_trd = jp_lb_trd + jp_c14b_trd !: Last index of C14 tracer 65 61 62 !!---------------------------------------------------------------------- 63 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 64 !! $Id$ 65 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 66 66 !!====================================================================== 67 67 END MODULE par_c14b -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/C14b/trcini_c14b.F90
r2643 r2690 4 4 !! TOP : initialisation of the C14 bomb tracer 5 5 !!====================================================================== 6 !! History : Original ! 2005-10 (Z. Lachkar)7 !! 2.0 ! 2007-12 (C. Ethe)6 !! History : 1.0 ! 2005-10 (Z. Lachkar) Original code 7 !! 2.0 ! 2007-12 (C. Ethe) 8 8 !!---------------------------------------------------------------------- 9 9 #if defined key_c14b … … 23 23 PUBLIC trc_ini_c14b ! called by trcini.F90 module 24 24 25 INTEGER :: & ! With respect to data file !! 26 jpybeg = 1765 , & !: starting year for C14 27 jpyend = 2002 !: ending year for C14 28 29 INTEGER :: & 30 nrec , & ! number of year in CO2 Concentrations file 31 nmaxrec 32 33 INTEGER :: inum1, inum2 ! unit number 34 35 REAL(wp) :: & 36 ys40 = -40. , & ! 40 degrees south 37 ys20 = -20. , & ! 20 degrees south 38 yn20 = 20. , & ! 20 degrees north 39 yn40 = 40. ! 40 degrees north 40 41 !!--------------------------------------------------------------------- 25 ! ! With respect to data file !! 26 INTEGER :: jpybeg = 1765 ! starting year for C14 27 INTEGER :: jpyend = 2002 ! ending year for C14 28 INTEGER :: nrec ! number of year in CO2 Concentrations file 29 INTEGER :: nmaxrec 30 INTEGER :: inum1, inum2 ! unit number 31 32 REAL(wp) :: ys40 = -40. ! 40 degrees south 33 REAL(wp) :: ys20 = -20. ! 20 degrees south 34 REAL(wp) :: yn20 = 20. ! 20 degrees north 35 REAL(wp) :: yn40 = 40. ! 40 degrees north 36 37 !!---------------------------------------------------------------------- 42 38 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 43 39 !! $Id$ 44 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 45 !!---------------------------------------------------------------------- 46 40 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 41 !!---------------------------------------------------------------------- 47 42 CONTAINS 48 43 … … 58 53 !!---------------------------------------------------------------------- 59 54 60 CALL c14b_alloc() ! Allocate CFC arrays 55 ! ! Allocate C14b arrays 56 IF( trc_sms_c14b_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'trc_ini_c14b : unable to allocate C14b arrays' ) 61 57 62 58 CALL trc_ctl_c14b ! Control consitency … … 69 65 ! Initialization of boundaries conditions 70 66 ! --------------------------------------- 71 qtr_c14(:,:) = 0. e067 qtr_c14(:,:) = 0._wp 72 68 73 69 ! Initialization of qint in case of no restart … … 78 74 WRITE(numout,*) 'Initialization de qint ; No restart : qint equal zero ' 79 75 ENDIF 80 trn (:,:,:,jpc14) = 0. e081 qint_c14(:,: ) = 0. e076 trn (:,:,:,jpc14) = 0._wp 77 qint_c14(:,: ) = 0._wp 82 78 ENDIF 83 79 … … 156 152 fareaz(ji,jj,3) = 0. 157 153 ENDIF 158 END DO 159 END DO 160 154 END DO 155 END DO 161 156 ! 162 157 IF(lwp) WRITE(numout,*) 'Initialization of C14 bomb tracer done' 163 158 IF(lwp) WRITE(numout,*) ' ' 164 159 ! 165 160 END SUBROUTINE trc_ini_c14b 166 161 167 SUBROUTINE c14b_alloc 168 !!---------------------------------------------------------------------- 169 !! *** ROUTINE c14b_alloc *** 170 !! 171 !! ** Purpose : Allocate all the dynamic arrays of C14b 172 !!---------------------------------------------------------------------- 173 174 ! ! Allocate C14b arrays 175 IF( trc_sms_c14b_alloc() /= 0 ) & 176 & CALL ctl_stop( 'STOP', 'trc_ini_c14b : unable to allocate C14b arrays' ) 177 ! 178 END SUBROUTINE c14b_alloc 179 162 180 163 SUBROUTINE trc_ctl_c14b 181 164 !!---------------------------------------------------------------------- … … 192 175 ! Check number of tracers 193 176 ! ----------------------- 194 IF( jp_c14b > 1) CALL ctl_stop( ' Change jp_c14b to be equal 1 in par_c14b.F90' )177 IF( jp_c14b > 1) CALL ctl_stop( ' Change jp_c14b to be equal 1 in par_c14b.F90' ) 195 178 196 179 ! Check tracer names 197 180 ! ------------------ 198 IF 199 200 181 IF( ctrcnm(jpc14) /= 'C14B' ) THEN 182 ctrcnm(jpc14) = 'C14B' 183 ctrcnl(jpc14) = 'Bomb C14 concentration' 201 184 ENDIF 202 185 … … 210 193 ! ------------------ 211 194 IF( ctrcun(jpc14) /= 'ration' ) THEN 212 ctrcun(jpc14) = 'ration'195 ctrcun(jpc14) = 'ration' 213 196 IF(lwp) THEN 214 197 CALL ctl_warn( ' we force tracer unit' ) … … 219 202 ! 220 203 END SUBROUTINE trc_ctl_c14b 204 221 205 #else 222 206 !!---------------------------------------------------------------------- -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/C14b/trcsms_c14b.F90
r2643 r2690 13 13 !! 'key_c14b' Bomb C14 tracer 14 14 !!---------------------------------------------------------------------- 15 !! trc_sms_c14b 16 !!---------------------------------------------------------------------- 17 USE oce_trc ! Ocean variables18 USE par_trc ! TOP parameters19 USE trc ! TOP variables15 !! trc_sms_c14b : compute and add C14 suface forcing to C14 trends 16 !!---------------------------------------------------------------------- 17 USE oce_trc ! Ocean variables 18 USE par_trc ! TOP parameters 19 USE trc ! TOP variables 20 20 USE trdmod_oce 21 21 USE trdmod_trc 22 USE iom 22 USE iom ! I/O library 23 23 24 24 IMPLICIT NONE 25 25 PRIVATE 26 26 27 !! * Routine accessibility28 27 PUBLIC trc_sms_c14b ! called in trcsms.F90 29 PUBLIC trc_sms_c14b_alloc ! called in nemogcm.F90 30 31 !! * Module variables 28 PUBLIC trc_sms_c14b_alloc ! called in trcini_c14b.F90 29 32 30 INTEGER , PUBLIC, PARAMETER :: jpmaxrec = 240 ! temporal parameter 33 31 INTEGER , PUBLIC, PARAMETER :: jpmaxrec2 = 2 * jpmaxrec ! … … 39 37 INTEGER , PUBLIC :: nyear_beg ! initial year (aa) 40 38 41 REAL(wp), PUBLIC, DIMENSION(jpmaxrec,jpzon) :: bomb!: C14 atm data (3 zones)42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fareaz!: Spatial Interpolation Factors43 REAL(wp), PUBLIC, DIMENSION(jpmaxrec2) :: spco2!: Atmospheric CO239 REAL(wp), PUBLIC, DIMENSION(jpmaxrec,jpzon) :: bomb !: C14 atm data (3 zones) 40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fareaz !: Spatial Interpolation Factors 41 REAL(wp), PUBLIC, DIMENSION(jpmaxrec2) :: spco2 !: Atmospheric CO2 44 42 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qtr_c14 !: flux at surface 46 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qint_c14 !: cumulative flux 47 48 REAL(wp) :: xlambda, xdecay, xaccum ! C14 decay coef. 49 50 REAL(wp) :: xconv1 = 1.0 ! conversion from to 51 REAL(wp) :: xconv2 = 0.01/3600. ! conversion from cm/h to m/s: 52 REAL(wp) :: xconv3 = 1.0e+3 ! conversion from mol/l/atm to mol/m3/atm 53 54 !! * Substitutions 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qtr_c14 !: flux at surface 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qint_c14 !: cumulative flux 45 46 REAL(wp) :: xlambda, xdecay, xaccum ! C14 decay coef. 47 REAL(wp) :: xconv1 = 1._wp ! conversion from to 48 REAL(wp) :: xconv2 = 0.01_wp / 3600._wp ! conversion from cm/h to m/s: 49 REAL(wp) :: xconv3 = 1.e+3_wp ! conversion from mol/l/atm to mol/m3/atm 50 51 !! * Substitutions 55 52 # include "top_substitute.h90" 56 53 57 !!---------------------------------------------------------------------- 58 !! TOP 1.0 , LOCEAN-IPSL (2005) 59 !! $Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/SMS/trcc14bomb.F90,v 1.2 2005/11/14 16:42:43 opalod Exp $ 60 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 61 !!---------------------------------------------------------------------- 62 54 !!---------------------------------------------------------------------- 55 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 56 !! $Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/SMS/trcc14bomb.F90,v 1.2 2005/11/14 16:42:43 opalod Exp $ 57 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 58 !!---------------------------------------------------------------------- 63 59 CONTAINS 64 60 65 66 SUBROUTINE trc_sms_c14b( kt ) 67 !!---------------------------------------------------------------------- 68 !! *** ROUTINE trc_sms_c14b *** 69 !! 70 !! ** Purpose : Compute the surface boundary contition on C14bomb 71 !! passive tracer associated with air-mer fluxes and add it to 72 !! the general trend of tracers equations. 73 !! 74 !! ** Original comments from J. Orr : 75 !! 76 !! Calculates the input of Bomb C-14 to the surface layer of OPA 77 !! 78 !! James Orr, LMCE, 28 October 1992 79 !! 80 !! Initial approach mimics that of Toggweiler, Dixon, & Bryan (1989) 81 !! (hereafter referred to as TDB) with constant gas exchange, 82 !! although in this case, a perturbation approach is used for 83 !! bomb-C14 so that both the ocean and atmosphere begin at zero. 84 !! This saves tremendous amounts of computer time since no 85 !! equilibrum run is first required (i.e., for natural C-14). 86 !! Note: Many sensitivity tests can be run with this approach and 87 !! one never has to make a run for natural C-14; otherwise, 88 !! a run for natural C-14 must be run each time that one 89 !! changes a model parameter! 90 !! 91 !! 92 !! 19 August 1993: Modified to consider Atmospheric C-14 fom IPCC. 93 !! That is, the IPCC has provided a C-14 atmospheric record (courtesy 94 !! of Martin Heimann) for model calibration. This model spans from 95 !! preindustrial times to present, in a format different than that 96 !! given by TDB. It must be converted to the ORR C-14 units used 97 !! here, although in this case, the perturbation includes not only 98 !! bomb C-14 but changes due to the Suess effect. 99 !! 100 !!---------------------------------------------------------------------- 101 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 102 USE wrk_nemo, ONLY: zatmbc14 => wrk_2d_1 103 USE wrk_nemo, ONLY: zw3d => wrk_3d_1 104 !! * Arguments 105 INTEGER, INTENT( in ) :: kt ! ocean time-step index 106 107 !! * Local declarations 108 INTEGER :: ji, jj, jk, jz ! dummy loop indices 109 110 INTEGER :: iyear_beg, iyear_beg1, iyear_end1 111 INTEGER :: iyear_beg2, iyear_end2 112 INTEGER :: imonth1, im1, in1 113 INTEGER :: imonth2, im2, in2 114 115 REAL(wp), DIMENSION(jpzon) :: zonbc14 !: time interp atm C14 116 REAL(wp) :: zpco2at !: time interp atm C02 117 118 REAL(wp) :: zt, ztp, zsk !: dummy variables 119 REAL(wp) :: zsol !: solubility 120 REAL(wp) :: zsch !: schmidt number 121 REAL(wp) :: zv2 !: wind speed ( square) 122 REAL(wp) :: zpv !: piston velocity 123 REAL(wp) :: zdemi, ztra 124 !!---------------------------------------------------------------------- 125 126 IF( ( wrk_in_use(2, 1) ) .OR. ( wrk_in_use(3, 1) ) ) THEN 127 CALL ctl_stop('trc_sms_c14b : requested workspace arrays unavailable.') 128 RETURN 129 END IF 130 131 IF( kt == nit000 ) THEN 132 ! Computation of decay coeffcient 133 zdemi = 5730. 61 SUBROUTINE trc_sms_c14b( kt ) 62 !!---------------------------------------------------------------------- 63 !! *** ROUTINE trc_sms_c14b *** 64 !! 65 !! ** Purpose : Compute the surface boundary contition on C14bomb 66 !! passive tracer associated with air-mer fluxes and add it to 67 !! the general trend of tracers equations. 68 !! 69 !! ** Original comments from J. Orr : 70 !! 71 !! Calculates the input of Bomb C-14 to the surface layer of OPA 72 !! 73 !! James Orr, LMCE, 28 October 1992 74 !! 75 !! Initial approach mimics that of Toggweiler, Dixon, & Bryan (1989) 76 !! (hereafter referred to as TDB) with constant gas exchange, 77 !! although in this case, a perturbation approach is used for 78 !! bomb-C14 so that both the ocean and atmosphere begin at zero. 79 !! This saves tremendous amounts of computer time since no 80 !! equilibrum run is first required (i.e., for natural C-14). 81 !! Note: Many sensitivity tests can be run with this approach and 82 !! one never has to make a run for natural C-14; otherwise, 83 !! a run for natural C-14 must be run each time that one 84 !! changes a model parameter! 85 !! 86 !! 87 !! 19 August 1993: Modified to consider Atmospheric C-14 fom IPCC. 88 !! That is, the IPCC has provided a C-14 atmospheric record (courtesy 89 !! of Martin Heimann) for model calibration. This model spans from 90 !! preindustrial times to present, in a format different than that 91 !! given by TDB. It must be converted to the ORR C-14 units used 92 !! here, although in this case, the perturbation includes not only 93 !! bomb C-14 but changes due to the Suess effect. 94 !! 95 !!---------------------------------------------------------------------- 96 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 97 USE wrk_nemo, ONLY: zatmbc14 => wrk_2d_1 98 USE wrk_nemo, ONLY: zw3d => wrk_3d_1 99 ! 100 INTEGER, INTENT(in) :: kt ! ocean time-step index 101 ! 102 INTEGER :: ji, jj, jk, jz ! dummy loop indices 103 INTEGER :: iyear_beg , iyear_beg1, iyear_end1 104 INTEGER :: iyear_beg2, iyear_end2 105 INTEGER :: imonth1, im1, in1 106 INTEGER :: imonth2, im2, in2 107 REAL(wp), DIMENSION(jpzon) :: zonbc14 !: time interp atm C14 108 REAL(wp) :: zpco2at !: time interp atm C02 109 REAL(wp) :: zt, ztp, zsk ! dummy variables 110 REAL(wp) :: zsol ! solubility 111 REAL(wp) :: zsch ! schmidt number 112 REAL(wp) :: zv2 ! wind speed ( square) 113 REAL(wp) :: zpv ! piston velocity 114 REAL(wp) :: zdemi, ztra 115 !!---------------------------------------------------------------------- 116 117 IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 1) ) THEN 118 CALL ctl_stop('trc_sms_c14b : requested workspace arrays unavailable') ; RETURN 119 ENDIF 120 121 IF( kt == nit000 ) THEN ! Computation of decay coeffcient 122 zdemi = 5730._wp 134 123 xlambda = LOG(2.) / zdemi / ( nyear_len(1) * rday ) 135 124 xdecay = EXP( - xlambda * rdt ) 136 xaccum = 1. 0- xdecay125 xaccum = 1._wp - xdecay 137 126 ENDIF 138 127 … … 204 193 ! (zonmean), computes area-weighted mean to give the atmospheric C-14 205 194 ! ---------------------------------------------------------------- 206 DO jj = 1, jpj 207 DO ji = 1, jpi 208 zatmbc14(ji,jj) = zonbc14(1) * fareaz(ji,jj,1) & 209 & + zonbc14(2) * fareaz(ji,jj,2) & 210 & + zonbc14(3) * fareaz(ji,jj,3) 211 END DO 212 END DO 195 zatmbc14(:,:) = zonbc14(1) * fareaz(:,:,1) & 196 & + zonbc14(2) * fareaz(:,:,2) & 197 & + zonbc14(3) * fareaz(:,:,3) 213 198 214 199 ! time interpolation of CO2 concentrations to it time step … … 216 201 & + spco2(iyear_end2) * FLOAT( in2 ) ) / 6. 217 202 218 IF 203 IF(lwp) THEN 219 204 WRITE(numout, *) 'time : ', kt, ' CO2 year begin/end :',iyear_beg2,'/',iyear_end2, & 220 205 & ' CO2 concen : ',zpco2at … … 236 221 zsol = EXP( -60.2409 + 93.4517 / ztp + 23.3585 * LOG( ztp ) + zsk * tsn(ji,jj,1,jp_sal) ) 237 222 ! convert solubilities [mol/(l * atm)] -> [mol/(m^3 * ppm)] 238 zsol = zsol * 1. 0e-03223 zsol = zsol * 1.e-03 239 224 ELSE 240 zsol = 0. 225 zsol = 0._wp 241 226 ENDIF 242 227 … … 305 290 CALL iom_put( "fdecay" , zw3d ) 306 291 #endif 307 IF( l_trdtrc ) THEN 308 CALL trd_mod_trc( tra(:,:,:,jpc14), jpc14, jptra_trd_sms, kt ) ! save trends 309 END IF 310 311 IF( ( wrk_not_released(2, 1)) .OR. ( wrk_not_released(3, 1) ) ) & 312 & CALL ctl_stop('trc_sms_c14b : failed to release workspace arrays.') 313 314 END SUBROUTINE trc_sms_c14b 315 316 INTEGER FUNCTION trc_sms_c14b_alloc() 317 !!---------------------------------------------------------------------- 318 !! *** ROUTINE trc_sms_c14b_alloc *** 319 !!---------------------------------------------------------------------- 320 321 ALLOCATE( fareaz(jpi,jpj ,jpzon), & 322 & qtr_c14(jpi,jpj) , & 323 & qint_c14(jpi,jpj) , STAT=trc_sms_c14b_alloc ) 324 325 IF( trc_sms_c14b_alloc /= 0 ) CALL ctl_warn('trc_sms_c14b_alloc : failed to allocate arrays.') 326 327 END FUNCTION trc_sms_c14b_alloc 292 IF( l_trdtrc ) CALL trd_mod_trc( tra(:,:,:,jpc14), jpc14, jptra_trd_sms, kt ) ! save trends 293 294 IF( wrk_not_released(2, 1) .OR. & 295 wrk_not_released(3, 1) ) CALL ctl_stop('trc_sms_c14b : failed to release workspace arrays') 296 ! 297 END SUBROUTINE trc_sms_c14b 298 299 300 INTEGER FUNCTION trc_sms_c14b_alloc() 301 !!---------------------------------------------------------------------- 302 !! *** ROUTINE trc_sms_c14b_alloc *** 303 !!---------------------------------------------------------------------- 304 ALLOCATE( fareaz (jpi,jpj ,jpzon) , & 305 & qtr_c14 (jpi,jpj) , & 306 & qint_c14(jpi,jpj) , STAT=trc_sms_c14b_alloc ) 307 ! 308 IF( trc_sms_c14b_alloc /= 0 ) CALL ctl_warn('trc_sms_c14b_alloc: failed to allocate arrays') 309 ! 310 END FUNCTION trc_sms_c14b_alloc 311 328 312 #else 329 330 331 313 !!---------------------------------------------------------------------- 314 !! Default option Dummy module 315 !!---------------------------------------------------------------------- 332 316 CONTAINS 333 SUBROUTINE trc_sms_c14b( kt ) ! Empty routine334 WRITE(*,*) 'trc_freons: You should not have seen this print! error?', kt335 END SUBROUTINE trc_sms_c14b317 SUBROUTINE trc_sms_c14b( kt ) ! Empty routine 318 WRITE(*,*) 'trc_freons: You should not have seen this print! error?', kt 319 END SUBROUTINE trc_sms_c14b 336 320 #endif 337 321 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/CFC/trcini_cfc.F90
r2643 r2690 33 33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 34 34 !!---------------------------------------------------------------------- 35 36 35 CONTAINS 37 36 … … 45 44 !!---------------------------------------------------------------------- 46 45 INTEGER :: ji, jj, jn, jl, jm, js 47 REAL(wp) :: zyy ,zyd46 REAL(wp) :: zyy, zyd 48 47 !!---------------------------------------------------------------------- 49 48 … … 52 51 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~' 53 52 54 CALL cfc_alloc() ! Allocate CFC arrays 53 ! ! Allocate CFC arrays 54 IF( trc_sms_cfc_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'trc_ini_cfc: unable to allocate CFC arrays' ) 55 55 56 56 57 57 ! Initialization of boundaries conditions 58 58 ! --------------------------------------- 59 xphem (:,:) = 0. e060 p_cfc(:,:,:) = 0. e059 xphem (:,:) = 0._wp 60 p_cfc(:,:,:) = 0._wp 61 61 62 62 ! Initialization of qint in case of no restart 63 63 !---------------------------------------------- 64 qtr_cfc(:,:,:) = 0. e064 qtr_cfc(:,:,:) = 0._wp 65 65 IF( .NOT. ln_rsttr ) THEN 66 66 IF(lwp) THEN … … 68 68 WRITE(numout,*) 'Initialization de qint ; No restart : qint equal zero ' 69 69 ENDIF 70 qint_cfc(:,:,:) = 0. e070 qint_cfc(:,:,:) = 0._wp 71 71 DO jl = 1, jp_cfc 72 72 jn = jp_cfc0 + jl - 1 73 trn (:,:,:,jn) = 0.e073 trn(:,:,:,jn) = 0._wp 74 74 END DO 75 75 ENDIF … … 117 117 WRITE(numout,*) ' Year p11HN p11HS p12HN p12HS ' 118 118 DO jn = 30, 100 119 WRITE(numout, '( 1I4, 4F9.2)') & 120 & jn, p_cfc(jn,1,1), p_cfc(jn,2,1), p_cfc(jn,1,2), p_cfc(jn,2,2) 119 WRITE(numout, '( 1I4, 4F9.2)') jn, p_cfc(jn,1,1), p_cfc(jn,2,1), p_cfc(jn,1,2), p_cfc(jn,2,2) 121 120 END DO 122 121 ENDIF … … 136 135 END DO 137 136 ! 138 139 137 IF(lwp) WRITE(numout,*) 'Initialization of CFC tracers done' 140 138 IF(lwp) WRITE(numout,*) ' ' 141 139 ! 142 140 END SUBROUTINE trc_ini_cfc 143 144 SUBROUTINE cfc_alloc145 !!----------------------------------------------------------------------146 !! *** ROUTINE cfc_alloc ***147 !!148 !! ** Purpose : Allocate all the dynamic arrays of CFC149 !!----------------------------------------------------------------------150 151 ! ! Allocate CFC arrays152 IF( trc_sms_cfc_alloc() /= 0 ) &153 & CALL ctl_stop( 'STOP', 'trc_ini_cfc : unable to allocate CFC arrays' )154 !155 END SUBROUTINE cfc_alloc156 141 157 142 #else -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/CFC/trcsms_cfc.F90
r2643 r2690 4 4 !! TOP : CFC main model 5 5 !!====================================================================== 6 !! History : -! 1999-10 (JC. Dutay) original code7 !! 1.0 ! 2004-03(C. Ethe) free form + modularity8 !! 6 !! History : OPA ! 1999-10 (JC. Dutay) original code 7 !! NEMO 1.0 ! 2004-03 (C. Ethe) free form + modularity 8 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) reorganisation 9 9 !!---------------------------------------------------------------------- 10 10 #if defined key_cfc … … 12 12 !! 'key_cfc' CFC tracers 13 13 !!---------------------------------------------------------------------- 14 !! trc_sms_cfc 15 !! trc_cfc_cst : sets constants for CFC surface forcing computation16 !!---------------------------------------------------------------------- 17 USE oce_trc ! Ocean variables18 USE par_trc ! TOP parameters19 USE trc ! TOP variables14 !! trc_sms_cfc : compute and add CFC suface forcing to CFC trends 15 !! trc_cfc_cst : sets constants for CFC surface forcing computation 16 !!---------------------------------------------------------------------- 17 USE oce_trc ! Ocean variables 18 USE par_trc ! TOP parameters 19 USE trc ! TOP variables 20 20 USE trdmod_oce 21 21 USE trdmod_trc 22 USE iom 22 USE iom ! I/O library 23 23 24 24 IMPLICIT NONE … … 26 26 27 27 PUBLIC trc_sms_cfc ! called in ??? 28 PUBLIC trc_sms_cfc_alloc ! called in nemogcm.F9028 PUBLIC trc_sms_cfc_alloc ! called in trcini_cfc.F90 29 29 30 30 INTEGER , PUBLIC, PARAMETER :: jpyear = 150 ! temporal parameter … … 55 55 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 56 56 !! $Id$ 57 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 58 !!---------------------------------------------------------------------- 59 57 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 58 !!---------------------------------------------------------------------- 60 59 CONTAINS 61 62 60 63 61 SUBROUTINE trc_sms_cfc( kt ) … … 77 75 !! CFC concentration in pico-mol/m3 78 76 !!---------------------------------------------------------------------- 79 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 80 USE wrk_nemo, ONLY: ztrcfc => wrk_3d_1 ! use for CFC sms trend 81 !! 82 INTEGER, INTENT( in ) :: kt ! ocean time-step index 83 !! 84 INTEGER :: ji, jj, jn, jl, jm, js 85 INTEGER :: iyear_beg, iyear_end 86 INTEGER :: im1, im2 87 77 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 78 USE wrk_nemo, ONLY: ztrcfc => wrk_3d_1 ! use for CFC sms trend 79 ! 80 INTEGER, INTENT(in) :: kt ! ocean time-step index 81 ! 82 INTEGER :: ji, jj, jn, jl, jm, js 83 INTEGER :: iyear_beg, iyear_end 84 INTEGER :: im1, im2 88 85 REAL(wp) :: ztap, zdtap 89 86 REAL(wp) :: zt1, zt2, zt3, zv2 … … 93 90 REAL(wp) :: zca_cfc ! concentration at equilibrium 94 91 REAL(wp) :: zak_cfc ! transfert coefficients 95 96 REAL(wp), DIMENSION(jphem,jp_cfc) :: zpatm ! atmospheric function 97 !!---------------------------------------------------------------------- 98 92 REAL(wp), DIMENSION(jphem,jp_cfc) :: zpatm ! atmospheric function 93 !!---------------------------------------------------------------------- 94 ! 99 95 IF( wrk_in_use(3, 1) ) THEN 100 CALL ctl_stop('trc_sms_cfc : requested workspace array unavailable.') 101 RETURN 102 END IF 96 CALL ctl_stop('trc_sms_cfc: requested workspace array unavailable') ; RETURN 97 ENDIF 103 98 104 99 IF( kt == nit000 ) CALL trc_cfc_cst … … 199 194 END DO 200 195 END IF 201 202 IF( wrk_not_released(3, 1) ) CALL ctl_stop('trc_sms_cfc : failed to release workspace array.')203 196 ! 197 IF( wrk_not_released(3, 1) ) CALL ctl_stop('trc_sms_cfc: failed to release workspace array') 198 ! 204 199 END SUBROUTINE trc_sms_cfc 200 205 201 206 202 SUBROUTINE trc_cfc_cst … … 211 207 !!--------------------------------------------------------------------- 212 208 213 214 ! coefficient for CFC11 215 !---------------------- 216 217 ! Solubility 218 soa(1,1) = -229.9261 219 soa(2,1) = 319.6552 220 soa(3,1) = 119.4471 221 soa(4,1) = -1.39165 222 223 sob(1,1) = -0.142382 224 sob(2,1) = 0.091459 225 sob(3,1) = -0.0157274 226 227 ! Schmidt number 228 sca(1,1) = 3501.8 229 sca(2,1) = -210.31 230 sca(3,1) = 6.1851 231 sca(4,1) = -0.07513 232 233 ! coefficient for CFC12 234 !---------------------- 235 236 ! Solubility 237 soa(1,2) = -218.0971 238 soa(2,2) = 298.9702 239 soa(3,2) = 113.8049 240 soa(4,2) = -1.39165 241 242 sob(1,2) = -0.143566 243 sob(2,2) = 0.091015 244 sob(3,2) = -0.0153924 245 246 ! schmidt number 247 sca(1,2) = 3845.4 248 sca(2,2) = -228.95 249 sca(3,2) = 6.1908 250 sca(4,2) = -0.067430 209 ! coefficient for CFC11 210 !---------------------- 211 212 ! Solubility 213 soa(1,1) = -229.9261 214 soa(2,1) = 319.6552 215 soa(3,1) = 119.4471 216 soa(4,1) = -1.39165 217 218 sob(1,1) = -0.142382 219 sob(2,1) = 0.091459 220 sob(3,1) = -0.0157274 221 222 ! Schmidt number 223 sca(1,1) = 3501.8 224 sca(2,1) = -210.31 225 sca(3,1) = 6.1851 226 sca(4,1) = -0.07513 227 228 ! coefficient for CFC12 229 !---------------------- 230 231 ! Solubility 232 soa(1,2) = -218.0971 233 soa(2,2) = 298.9702 234 soa(3,2) = 113.8049 235 soa(4,2) = -1.39165 236 237 sob(1,2) = -0.143566 238 sob(2,2) = 0.091015 239 sob(3,2) = -0.0153924 240 241 ! schmidt number 242 sca(1,2) = 3845.4 243 sca(2,2) = -228.95 244 sca(3,2) = 6.1908 245 sca(4,2) = -0.067430 251 246 252 247 END SUBROUTINE trc_cfc_cst 253 248 249 254 250 INTEGER FUNCTION trc_sms_cfc_alloc() 255 251 !!---------------------------------------------------------------------- 256 252 !! *** ROUTINE trc_sms_cfc_alloc *** 257 253 !!---------------------------------------------------------------------- 258 259 ALLOCATE( xphem(jpi,jpj) , & 260 & qtr_cfc(jpi,jpj,jp_cfc) , & 261 & qint_cfc(jpi,jpj,jp_cfc), & 262 & STAT=trc_sms_cfc_alloc ) 263 254 ALLOCATE( xphem (jpi,jpj) , & 255 & qtr_cfc (jpi,jpj,jp_cfc) , & 256 & qint_cfc(jpi,jpj,jp_cfc) , STAT=trc_sms_cfc_alloc ) 257 ! 264 258 IF( trc_sms_cfc_alloc /= 0 ) CALL ctl_warn('trc_sms_cfc_alloc : failed to allocate arrays.') 265 259 ! 266 260 END FUNCTION trc_sms_cfc_alloc 267 261 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/LOBSTER/sms_lobster.F90
r2643 r2690 4 4 !! TOP : LOBSTER 1 Source Minus Sink variables 5 5 !!---------------------------------------------------------------------- 6 !! History : - ! 1999-09(M. Levy) original code7 !! - ! 2000-12(O. Aumont, E. Kestenare) add sediment8 !! 1.0 ! 2005-10(C. Ethe) F909 !! 1.0! 2005-03 (A-S Kremeur) add fphylab, fzoolab, fdetlab, fdbod10 !! 11 !! 6 !! History : OPA ! 1999-09 (M. Levy) original code 7 !! - ! 2000-12 (O. Aumont, E. Kestenare) add sediment 8 !! NEMO 1.0 ! 2005-10 (C. Ethe) F90 9 !! - ! 2005-03 (A-S Kremeur) add fphylab, fzoolab, fdetlab, fdbod 10 !! - ! 2005-06 (A-S Kremeur) add sedpocb, sedpocn, sedpoca 11 !! 2.0 ! 2007-04 (C. Deltel, G. Madec) Free form and modules 12 12 !!---------------------------------------------------------------------- 13 13 #if defined key_lobster … … 15 15 !! 'key_lobster' LOBSTER model 16 16 !!---------------------------------------------------------------------- 17 USE par_oce 18 USE par_trc 17 USE par_oce ! ocean parameters 18 USE par_trc ! passive tracer parameters 19 USE lib_mpp ! MPP library 19 20 20 21 IMPLICIT NONE 21 22 PUBLIC 23 24 PUBLIC sms_lobster_alloc ! called in trcini_lobster.F90 22 25 23 26 !! biological parameters … … 73 76 !! Optical parameters 74 77 !! ------------------ 75 REAL(wp) :: xkr0 76 REAL(wp) :: xkg0 77 REAL(wp) :: xkrp 78 REAL(wp) :: xkgp 79 REAL(wp) :: xlr 80 REAL(wp) :: xlg 81 REAL(wp) :: rpig 78 REAL(wp) :: xkr0 !: water coefficient absorption in red (NAMELIST) 79 REAL(wp) :: xkg0 !: water coefficient absorption in green (NAMELIST) 80 REAL(wp) :: xkrp !: pigment coefficient absorption in red (NAMELIST) 81 REAL(wp) :: xkgp !: pigment coefficient absorption in green (NAMELIST) 82 REAL(wp) :: xlr !: exposant for pigment absorption in red (NAMELIST) 83 REAL(wp) :: xlg !: exposant for pigment absorption in green (NAMELIST) 84 REAL(wp) :: rpig !: chla/chla+phea ratio (NAMELIST) 82 85 83 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: neln!: number of levels in the euphotic layer84 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xze!: euphotic layer depth85 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpar!: par (photosynthetic available radiation)86 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: neln !: number of levels in the euphotic layer 87 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xze !: euphotic layer depth 88 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpar !: par (photosynthetic available radiation) 86 89 87 90 !! Sediment parameters … … 91 94 REAL(wp) :: areacot !: ??? 92 95 93 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: dminl!: fraction of sinking POC released in sediments94 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dmin3!: fraction of sinking POC released at each level96 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: dminl !: fraction of sinking POC released in sediments 97 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dmin3 !: fraction of sinking POC released at each level 95 98 96 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sedpocb!: mass of POC in sediments97 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sedpocn!: mass of POC in sediments98 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sedpoca!: mass of POC in sediments99 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sedpocb !: mass of POC in sediments 100 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sedpocn !: mass of POC in sediments 101 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sedpoca !: mass of POC in sediments 99 102 100 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: fbod!: rapid sinking particles101 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: cmask!: ???103 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: fbod !: rapid sinking particles 104 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: cmask !: ??? 102 105 103 106 !!---------------------------------------------------------------------- 104 107 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 105 108 !! $Id$ 106 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)109 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 107 110 !!---------------------------------------------------------------------- 108 111 CONTAINS … … 112 115 !! *** ROUTINE sms_lobster_alloc *** 113 116 !!---------------------------------------------------------------------- 114 USE lib_mpp, ONLY: ctl_warn ! MPP library 115 INTEGER :: ierr(3) ! Local variables 116 !!---------------------------------------------------------------------- 117 118 ierr(:) = 0 119 !* Biological parameters 120 ALLOCATE( remdmp(jpk,jp_lobster), STAT=ierr(1) ) 121 122 !* Optical parameters 123 ALLOCATE( neln(jpi,jpj) , xze(jpi,jpj), & 124 & xpar(jpi,jpj,jpk) , STAT=ierr(2) ) 125 126 !* Sediment parameters 127 ALLOCATE( dminl(jpi,jpj) , dmin3(jpi,jpj,jpk), & 128 & sedpocb(jpi,jpj), sedpocn(jpi,jpj) , sedpoca(jpi,jpj), & 129 & fbod(jpi,jpj) , cmask(jpi,jpj) , STAT=ierr(3) ) 130 131 sms_lobster_alloc = MAXVAL( ierr ) 132 133 IF( sms_lobster_alloc /= 0 ) CALL ctl_warn('sms_lobster_alloc : failed to allocate arrays.') 134 117 ! 118 ALLOCATE( & 119 !* Biological parameters 120 & remdmp(jpk,jp_lobster) , & 121 !* Optical parameters 122 & neln (jpi,jpj) , xze (jpi,jpj) , xpar(jpi,jpj,jpk) & 123 !* Sediment parameters 124 & dminl (jpi,jpj) , dmin3 (jpi,jpj,jpk) , & 125 & sedpocb(jpi,jpj) , sedpocn(jpi,jpj) , sedpoca(jpi,jpj) , & 126 & fbod (jpi,jpj) , cmask (jpi,jpj) , STAT=sms_lobster_alloc ) 127 ! 128 IF( lk_mpp ) CALL mpp_sum ( sms_lobster_alloc ) 129 IF( sms_lobster_alloc /= 0 ) CALL ctl_warn('sms_lobster_alloc: failed to allocate arrays') 130 ! 135 131 END FUNCTION sms_lobster_alloc 136 132 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/LOBSTER/trcini_lobster.F90
r2643 r2690 4 4 !! TOP : initialisation of the LOBSTER biological model 5 5 !!====================================================================== 6 !! History : -! 1999-09 (M. Levy) Original code6 !! History : OPA ! 1999-09 (M. Levy) Original code 7 7 !! - ! 2000-12 (0. Aumont, E. Kestenare) add sediment 8 !! 8 !! NEMO 1.0 ! 2004-03 (C. Ethe) Modularity 9 9 !! - ! 2005-03 (O. Aumont, A. El Moussaoui) F90 10 10 !! History : 2.0 ! 2007-12 (C. Ethe, G. Madec) from trcini.lobster1.h90 … … 31 31 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 32 32 !! $Id$ 33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 34 !!---------------------------------------------------------------------- 35 33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 34 !!---------------------------------------------------------------------- 36 35 CONTAINS 37 36 … … 41 40 !! ** purpose : specific initialisation for LOBSTER bio-model 42 41 !!---------------------------------------------------------------------- 43 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released44 USE wrk_nemo, ONLY: zrro => wrk_2d_1, zdm0 => wrk_3d_142 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 43 USE wrk_nemo, ONLY: zrro => wrk_2d_1 , zdm0 => wrk_3d_1 45 44 !! 46 45 INTEGER :: ji, jj, jk, jn 47 46 REAL(wp) :: ztest, zfluo, zfluu 48 47 !!---------------------------------------------------------------------- 48 ! 49 IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 1) ) THEN 50 CALL ctl_stop('trc_ini_lobster: requested workspace arrays unavailable') ; RETURN 51 ENDIF 49 52 50 53 IF(lwp) WRITE(numout,*) … … 52 55 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~' 53 56 54 55 CALL lobster_alloc() ! Allocate LOBSTER arrays 56 57 IF( ( wrk_in_use(2, 1) ) .OR. ( wrk_in_use(3, 1) ) ) THEN 58 CALL ctl_stop('trc_ini_lobster : requested workspace arrays unavailable.') ; RETURN 59 ENDIF 57 ! ! Allocate LOBSTER arrays 58 IF( sms_lobster_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'trc_ini_lobster: unable to allocate LOBSTER arrays' ) 59 60 60 61 61 62 62 ! initialization of fields for optical model 63 63 ! -------------------------------------------- 64 xze (:,:) = 5. e065 xpar(:,:,:) = 0. e064 xze (:,:) = 5._wp 65 xpar(:,:,:) = 0._wp 66 66 67 67 ! initialization for passive tracer remineralisation-damping array … … 73 73 74 74 IF(lwp) THEN 75 WRITE(numout,*) ' ' 76 WRITE(numout,*) ' trcini: compute remineralisation-damping ' 77 WRITE(numout,*) ' arrays for tracers' 75 WRITE(numout,*) 76 WRITE(numout,*) ' trcini: compute remineralisation-damping arrays for tracers' 78 77 ENDIF 79 78 … … 85 84 ! ------------------------------------------------------------ 86 85 87 zdm0 = 0.e088 zrro = 1. e089 DO jk = jpkb, jpkm190 DO jj = 1, jpj91 DO ji = 1, jpi86 zdm0 = 0._wp 87 zrro = 1._wp 88 DO jk = jpkb, jpkm1 89 DO jj = 1, jpj 90 DO ji = 1, jpi 92 91 zfluo = ( fsdepw(ji,jj,jk ) / fsdepw(ji,jj,jpkb) )**xhr 93 92 zfluu = ( fsdepw(ji,jj,jk+1) / fsdepw(ji,jj,jpkb) )**xhr 94 IF( zfluo.GT.1. ) zfluo = 1. e093 IF( zfluo.GT.1. ) zfluo = 1._wp 95 94 zdm0(ji,jj,jk) = zfluo - zfluu 96 IF( jk <= jpkb-1 ) zdm0(ji,jj,jk) = 0. e095 IF( jk <= jpkb-1 ) zdm0(ji,jj,jk) = 0._wp 97 96 zrro(ji,jj) = zrro(ji,jj) - zdm0(ji,jj,jk) 98 97 END DO 99 98 END DO 100 99 END DO 101 100 ! 102 101 zdm0(:,:,jpk) = zrro(:,:) 103 102 … … 106 105 ! contains total fraction, which has passed to the upper layers) 107 106 ! ---------------------------------------------------------------------- 108 dminl = 0.109 dmin3 = zdm0107 dminl(:,:) = 0._wp 108 dmin3(:,:,:) = zdm0 110 109 DO jk = 1, jpk 111 110 DO jj = 1, jpj 112 111 DO ji = 1, jpi 113 IF( tmask(ji,jj,jk) == 0. ) THEN112 IF( tmask(ji,jj,jk) == 0._wp ) THEN 114 113 dminl(ji,jj) = dminl(ji,jj) + dmin3(ji,jj,jk) 115 dmin3(ji,jj,jk) = 0. e0114 dmin3(ji,jj,jk) = 0._wp 116 115 ENDIF 117 116 END DO … … 121 120 DO jj = 1, jpj 122 121 DO ji = 1, jpi 123 IF( tmask(ji,jj,1) == 0 ) dmin3(ji,jj,1) = 0. e0122 IF( tmask(ji,jj,1) == 0 ) dmin3(ji,jj,1) = 0._wp 124 123 END DO 125 124 END DO … … 127 126 ! Coastal mask 128 127 ! ------------ 129 cmask(:,:) = 0. e0128 cmask(:,:) = 0._wp 130 129 DO ji = 2, jpi-1 131 130 DO jj = 2, jpj-1 132 if (tmask(ji,jj,1) == 1) then131 IF( tmask(ji,jj,1) == 1._wp ) THEN 133 132 ztest=tmask(ji+1,jj,1)*tmask(ji-1,jj,1)*tmask(ji,jj+1,1)*tmask(ji,jj-1,1) 134 IF (ztest == 0) cmask(ji,jj) = 1.135 endif133 IF( ztest == 0 ) cmask(ji,jj) = 1._wp 134 ENDIF 136 135 END DO 137 136 END DO … … 249 248 250 249 ! initialize the POC in sediments 251 sedpocb(:,:) = 0.e0 252 sedpocn(:,:) = 0.e0 253 sedpoca(:,:) = 0.e0 254 255 250 sedpocb(:,:) = 0._wp 251 sedpocn(:,:) = 0._wp 252 sedpoca(:,:) = 0._wp 253 ! 256 254 IF(lwp) WRITE(numout,*) 'Initialization of LOBSTER tracers done' 257 IF(lwp) WRITE(numout,*) ' ' 258 259 IF( ( wrk_not_released(2, 1) ) .OR. ( wrk_not_released(3, 1) ) ) & 260 & CALL ctl_stop('trc_ini_lobster : failed to release workspace arrays.') 261 255 ! 256 IF( wrk_not_released(2, 1) .OR. & 257 wrk_not_released(3, 1) ) CALL ctl_stop('trc_ini_lobster: failed to release workspace arrays') 258 ! 262 259 END SUBROUTINE trc_ini_lobster 263 264 SUBROUTINE lobster_alloc265 !!----------------------------------------------------------------------266 !! *** ROUTINE lobster_alloc ***267 !!268 !! ** Purpose : Allocate all the dynamic arrays of LOBSTER269 !!----------------------------------------------------------------------270 271 ! ! Allocate LOBSTER arrays272 IF( sms_lobster_alloc() /= 0 ) &273 & CALL ctl_stop( 'STOP', 'trc_ini_lobster : unable to allocate LOBSTER arrays' )274 !275 END SUBROUTINE lobster_alloc276 260 277 261 #else -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcini_my_trc.F90
r2643 r2690 24 24 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 25 25 !! $Id$ 26 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)26 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 27 27 !!---------------------------------------------------------------------- 28 29 28 CONTAINS 30 29 … … 38 37 !!---------------------------------------------------------------------- 39 38 40 CALL my_trc_alloc() ! Allocate MY_TRC arrays 39 ! ! Allocate MY_TRC arrays 40 IF( sms_lobster_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'trc_ini_my_trc: unable to allocate MY_TRC arrays' ) 41 41 42 42 CALL trc_ctl_my_trc ! Control consitency … … 47 47 48 48 IF( .NOT. ln_rsttr ) trn(:,:,:,jp_myt0:jp_myt1) = 0. 49 50 49 ! 51 50 END SUBROUTINE trc_ini_my_trc 52 51 52 53 53 SUBROUTINE trc_ctl_my_trc 54 54 !!---------------------------------------------------------------------- … … 57 57 !! ** Purpose : control the cpp options, namelist and files 58 58 !!---------------------------------------------------------------------- 59 60 59 INTEGER :: jl, jn 61 60 !!---------------------------------------------------------------------- 61 ! 62 62 IF(lwp) WRITE(numout,*) 63 63 IF(lwp) WRITE(numout,*) ' use COLOR tracer ' 64 64 ! 65 65 DO jl = 1, jp_my_trc 66 66 jn = jp_myt0 + jl - 1 … … 69 69 ctrcun(jn)='N/A' 70 70 END DO 71 72 71 ! 73 72 END SUBROUTINE trc_ctl_my_trc 74 75 SUBROUTINE my_trc_alloc76 !!----------------------------------------------------------------------77 !! *** ROUTINE my_trc_alloc ***78 !!79 !! ** Purpose : Allocate all the dynamic arrays of MY_TRC80 !!----------------------------------------------------------------------81 82 ! ! Allocate MY_TRC arrays83 !84 END SUBROUTINE my_trc_alloc85 73 86 74 #else -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcsms_my_trc.F90
r2528 r2690 10 10 !! 'key_my_trc' CFC tracers 11 11 !!---------------------------------------------------------------------- 12 !! trc_sms_my_trc : MY_TRC model main routine 12 !! trc_sms_my_trc : MY_TRC model main routine 13 !! trc_sms_my_trc_alloc : allocate arrays specific to MY_TRC sms 13 14 !!---------------------------------------------------------------------- 14 15 USE par_trc ! TOP parameters … … 21 22 PRIVATE 22 23 23 PUBLIC trc_sms_my_trc ! called by trcsms.F90 module 24 PUBLIC trc_sms_my_trc ! called by trcsms.F90 module 25 PUBLIC trc_sms_my_trc_alloc ! called by trcini_my_trc.F90 module 24 26 27 ! Defined HERE the arrays specific to MY_TRC sms and ALLOCATE them in trc_sms_my_trc_alloc 28 25 29 !!---------------------------------------------------------------------- 26 30 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 27 31 !! $Id$ 28 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)32 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 29 33 !!---------------------------------------------------------------------- 30 31 34 CONTAINS 32 35 … … 39 42 !! ** Method : - 40 43 !!---------------------------------------------------------------------- 41 INTEGER, INTENT(in) :: kt ! ocean time-step index 42 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrmyt 43 INTEGER :: jn 44 44 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 45 USE wrk_nemo, ONLY: ztrmyt => wrk_3d_1 ! used for lobster sms trends 46 ! 47 INTEGER, INTENT(in) :: kt ! ocean time-step index 48 INTEGER :: jn ! dummy loop index 49 !!---------------------------------------------------------------------- 45 50 46 51 IF(lwp) WRITE(numout,*) … … 49 54 50 55 WHERE( (glamt <= 170) .AND. (glamt >= 160) .AND. (gphit <= -74) .AND. (gphit >=-75.6) ) 51 trn(:,:,1,jpmyt1) = 1. 52 trb(:,:,1,jpmyt1) = 1. 53 tra(:,:,1,jpmyt1) = 0. 56 trn(:,:,1,jpmyt1) = 1._wp 57 trb(:,:,1,jpmyt1) = 1._wp 58 tra(:,:,1,jpmyt1) = 0._wp 54 59 END WHERE 55 60 56 61 WHERE( ((glamt <= -165) .OR. (glamt >= 160)) .AND. (gphit <= -76) .AND. (gphit >=-80)) 57 trn(:,:,1,jpmyt2) = 1. 58 trb(:,:,1,jpmyt2) = 1. 59 tra(:,:,1,jpmyt2) = 0. 62 trn(:,:,1,jpmyt2) = 1._wp 63 trb(:,:,1,jpmyt2) = 1._wp 64 tra(:,:,1,jpmyt2) = 0._wp 60 65 END WHERE 61 66 62 ! Save the trends in the ixed layer 63 IF( l_trdtrc ) THEN 67 IF( l_trdtrc ) THEN ! Save the trends in the ixed layer 64 68 DO jn = jp_myt0, jp_myt1 65 69 ztrmyt(:,:,:) = tra(:,:,:,jn) … … 69 73 ! 70 74 END SUBROUTINE trc_sms_my_trc 71 75 76 77 INTEGER FUNCTION trc_sms_my_trc_alloc() 78 !!---------------------------------------------------------------------- 79 !! *** ROUTINE trc_sms_my_trc_alloc *** 80 !!---------------------------------------------------------------------- 81 ! 82 ! ALLOCATE here the arrays specific to MY_TRC 83 ! ALLOCATE( tab(...) , STAT=trc_sms_my_trc_alloc ) 84 trc_sms_my_trc_alloc = 0 ! set to zero if no array to be allocated 85 ! 86 IF( trc_sms_my_trc_alloc /= 0 ) CALL ctl_warn('trc_sms_my_trc_alloc : failed to allocate arrays') 87 ! 88 END FUNCTION trc_sms_my_trc_alloc 89 90 72 91 #else 73 92 !!---------------------------------------------------------------------- -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zche.F90
r2643 r2690 4 4 !! TOP : PISCES Sea water chemistry computed following OCMIP protocol 5 5 !!====================================================================== 6 !! History : -! 1988 (E. Maier-Reimer) Original code6 !! History : OPA ! 1988 (E. Maier-Reimer) Original code 7 7 !! - ! 1998 (O. Aumont) addition 8 8 !! - ! 1999 (C. Le Quere) modification 9 !! 9 !! NEMO 1.0 ! 2004 (O. Aumont) modification 10 10 !! - ! 2006 (R. Gangsto) modification 11 11 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 … … 15 15 !! 'key_pisces' PISCES bio-model 16 16 !!---------------------------------------------------------------------- 17 !! p4z_che : Sea water chemistry computed following OCMIP protocol 18 !!---------------------------------------------------------------------- 19 USE oce_trc ! 20 USE trc ! 21 USE sms_pisces ! 17 !! p4z_che : Sea water chemistry computed following OCMIP protocol 18 !!---------------------------------------------------------------------- 19 USE oce_trc ! 20 USE trc ! 21 USE sms_pisces ! 22 USE lib_mpp ! MPP library 22 23 23 24 IMPLICIT NONE 24 25 PRIVATE 25 26 26 PUBLIC p4z_che 27 PUBLIC p4z_che_alloc 28 29 !! * Shared module variables 30 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sio3eq ! chemistry of Si 31 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fekeq ! chemistry of Fe 32 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: chemc ! Solubilities of O2 and CO2 33 34 !! * Module variables 35 36 REAL(wp) :: & 37 salchl = 1./1.80655 ! conversion factor for salinity --> chlorinity (Wooster et al. 1969) 38 39 REAL(wp) :: & ! coeff. for apparent solubility equilibrium 40 akcc1 = -171.9065 , & ! Millero et al. 1995 from Mucci 1983 41 akcc2 = -0.077993 , & 42 akcc3 = 2839.319 , & 43 akcc4 = 71.595 , & 44 akcc5 = -0.77712 , & 45 akcc6 = 0.0028426 , & 46 akcc7 = 178.34 , & 47 akcc8 = -0.07711 , & 48 akcc9 = 0.0041249 49 50 REAL(wp) :: & ! universal gas constants 51 rgas = 83.143, & 52 oxyco = 1./22.4144 53 54 REAL(wp) :: & ! borat constants 55 bor1 = 0.00023, & 56 bor2 = 1./10.82 57 58 REAL(wp) :: & ! 59 ca0 = -162.8301 , & 60 ca1 = 218.2968 , & 61 ca2 = 90.9241 , & 62 ca3 = -1.47696 , & 63 ca4 = 0.025695 , & 64 ca5 = -0.025225 , & 65 ca6 = 0.0049867 66 67 REAL(wp) :: & ! coeff. for 1. dissoc. of carbonic acid (Edmond and Gieskes, 1970) 68 c10 = -3670.7 , & 69 c11 = 62.008 , & 70 c12 = -9.7944 , & 71 c13 = 0.0118 , & 72 c14 = -0.000116 27 PUBLIC p4z_che ! 28 PUBLIC p4z_che_alloc ! 29 30 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sio3eq ! chemistry of Si 31 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fekeq ! chemistry of Fe 32 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: chemc ! Solubilities of O2 and CO2 33 34 REAL(wp) :: salchl = 1._wp / 1.80655_wp ! conversion factor for salinity --> chlorinity (Wooster et al. 1969) 35 36 REAL(wp) :: akcc1 = -171.9065_wp ! coeff. for apparent solubility equilibrium 37 REAL(wp) :: akcc2 = -0.077993_wp ! Millero et al. 1995 from Mucci 1983 38 REAL(wp) :: akcc3 = 2839.319_wp ! 39 REAL(wp) :: akcc4 = 71.595_wp ! 40 REAL(wp) :: akcc5 = -0.77712_wp ! 41 REAL(wp) :: akcc6 = 0.0028426_wp ! 42 REAL(wp) :: akcc7 = 178.34_wp ! 43 REAL(wp) :: akcc8 = -0.07711_wp ! 44 REAL(wp) :: akcc9 = 0.0041249_wp ! 45 46 REAL(wp) :: rgas = 83.143_wp ! universal gas constants 47 REAL(wp) :: oxyco = 1._wp / 22.4144_wp 48 49 REAL(wp) :: bor1 = 0.00023_wp ! borat constants 50 REAL(wp) :: bor2 = 1._wp / 10.82_wp 51 52 REAL(wp) :: ca0 = -162.8301_wp 53 REAL(wp) :: ca1 = 218.2968_wp 54 REAL(wp) :: ca2 = 90.9241_wp 55 REAL(wp) :: ca3 = -1.47696_wp 56 REAL(wp) :: ca4 = 0.025695_wp 57 REAL(wp) :: ca5 = -0.025225_wp 58 REAL(wp) :: ca6 = 0.0049867_wp 59 60 REAL(wp) :: c10 = -3670.7_wp ! coeff. for 1. dissoc. of carbonic acid (Edmond and Gieskes, 1970) 61 REAL(wp) :: c11 = 62.008_wp 62 REAL(wp) :: c12 = -9.7944_wp 63 REAL(wp) :: c13 = 0.0118_wp 64 REAL(wp) :: c14 = -0.000116_wp 73 65 74 66 REAL(wp) :: & ! coeff. for 2. dissoc. of carbonic acid (Millero, 1995) … … 132 124 ox2 = 23.8439 , & 133 125 ox3 = -0.034892 , & 134 ox4 = 0.015568, &126 ox4 = 0.015568 , & 135 127 ox5 = -0.0019387 136 128 … … 150 142 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 151 143 !! $Id$ 152 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 153 !!---------------------------------------------------------------------- 154 144 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 145 !!---------------------------------------------------------------------- 155 146 CONTAINS 156 157 147 158 148 SUBROUTINE p4z_che … … 179 169 !CDIR NOVERRCHK 180 170 DO ji = 1, jpi 181 182 171 ! ! SET ABSOLUTE TEMPERATURE 183 172 ztkel = tsn(ji,jj,1,jp_tem) + 273.16 … … 324 313 END SUBROUTINE p4z_che 325 314 315 326 316 INTEGER FUNCTION p4z_che_alloc() 327 317 !!---------------------------------------------------------------------- 328 318 !! *** ROUTINE p4z_che_alloc *** 329 319 !!---------------------------------------------------------------------- 330 331 ALLOCATE( sio3eq(jpi,jpj,jpk), fekeq(jpi,jpj,jpk), & 332 & chemc(jpi,jpj,2), STAT=p4z_che_alloc ) 333 334 IF( p4z_che_alloc /= 0 ) CALL ctl_warn('p4z_che_alloc : failed to allocate arrays.') 335 320 ALLOCATE( sio3eq(jpi,jpj,jpk) , fekeq(jpi,jpj,jpk) , chemc (jpi,jpj,2), STAT=p4z_che_alloc ) 321 ! 322 IF( p4z_che_alloc /= 0 ) CALL ctl_warn('p4z_che_alloc : failed to allocate arrays.') 323 ! 336 324 END FUNCTION p4z_che_alloc 325 337 326 #else 338 327 !!====================================================================== … … 341 330 CONTAINS 342 331 SUBROUTINE p4z_che( kt ) ! Empty routine 343 INTEGER, INTENT( in) :: kt332 INTEGER, INTENT(in) :: kt 344 333 WRITE(*,*) 'p4z_che: You should not have seen this print! error?', kt 345 334 END SUBROUTINE p4z_che -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zflx.F90
r2644 r2690 38 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: satmco2 !: atmospheric pco2 39 39 40 REAL(wp) :: t_oce_co2_flx!: Total ocean carbon flux41 REAL(wp) :: t_atm_co2_flx!: global mean of atmospheric pco242 REAL(wp) :: area!: ocean surface43 REAL(wp) :: atcco2 = 278.!: pre-industrial atmospheric [co2] (ppm)44 REAL(wp) :: atcox = 0.20946!:45 REAL(wp) :: xconv = 0.01/3600!: coefficients for conversion40 REAL(wp) :: t_oce_co2_flx !: Total ocean carbon flux 41 REAL(wp) :: t_atm_co2_flx !: global mean of atmospheric pco2 42 REAL(wp) :: area !: ocean surface 43 REAL(wp) :: atcco2 = 278._wp !: pre-industrial atmospheric [co2] (ppm) 44 REAL(wp) :: atcox = 0.20946_wp !: 45 REAL(wp) :: xconv = 0.01_wp / 3600._wp !: coefficients for conversion 46 46 47 47 !!* Substitution … … 50 50 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 51 51 !! $Id$ 52 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 53 !!---------------------------------------------------------------------- 54 52 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 53 !!---------------------------------------------------------------------- 55 54 CONTAINS 56 55 … … 63 62 !! ** Method : - ??? 64 63 !!--------------------------------------------------------------------- 65 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 66 USE wrk_nemo, ONLY: zkgco2 => wrk_2d_1, zkgo2 => wrk_2d_2, zh2co3 => wrk_2d_3 67 USE wrk_nemo, ONLY: zoflx => wrk_2d_4, zkg => wrk_2d_5 68 USE wrk_nemo, ONLY: zdpco2 => wrk_2d_6, zdpo2 => wrk_2d_7 69 ! 70 INTEGER, INTENT(in) :: kt 64 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 65 USE wrk_nemo, ONLY: zkgco2 => wrk_2d_1 , zkgo2 => wrk_2d_2 , zh2co3 => wrk_2d_3 66 USE wrk_nemo, ONLY: zoflx => wrk_2d_4 , zkg => wrk_2d_5 67 USE wrk_nemo, ONLY: zdpco2 => wrk_2d_6 , zdpo2 => wrk_2d_7 68 ! 69 INTEGER, INTENT(in) :: kt ! 70 ! 71 71 INTEGER :: ji, jj, jrorr 72 72 REAL(wp) :: ztc, ztc2, ztc3, zws, zkgwan … … 74 74 REAL(wp) :: zph, zah2, zbot, zdic, zalk, zsch_o2, zalka, zsch_co2 75 75 CHARACTER (len=25) :: charout 76 77 76 !!--------------------------------------------------------------------- 78 77 79 78 IF( wrk_in_use(2, 1,2,3,4,5,6,7) ) THEN 80 CALL ctl_stop('p4z_flx: requested workspace arrays unavailable') ;RETURN81 END 79 CALL ctl_stop('p4z_flx: requested workspace arrays unavailable') ; RETURN 80 ENDIF 82 81 83 82 ! SURFACE CHEMISTRY (PCO2 AND [H+] IN … … 213 212 CALL iom_put( "Dpo2" , zdpo2 ) 214 213 #endif 215 216 IF( wrk_not_released(2, 1,2,3,4,5,6,7) ) CALL ctl_stop('p4z_flx: failed to release workspace arrays')214 ! 215 IF( wrk_not_released(2, 1,2,3,4,5,6,7) ) CALL ctl_stop('p4z_flx: failed to release workspace arrays') 217 216 ! 218 217 END SUBROUTINE p4z_flx 219 218 219 220 220 SUBROUTINE p4z_flx_init 221 222 221 !!---------------------------------------------------------------------- 223 222 !! *** ROUTINE p4z_flx_init *** … … 228 227 !! called at the first timestep (nit000) 229 228 !! ** input : Namelist nampisext 230 !! 231 !!---------------------------------------------------------------------- 232 229 !!---------------------------------------------------------------------- 233 230 NAMELIST/nampisext/ atcco2 234 231 !!---------------------------------------------------------------------- 232 ! 235 233 REWIND( numnat ) ! read numnat 236 234 READ ( numnat, nampisext ) 237 235 ! 238 236 IF(lwp) THEN ! control print 239 237 WRITE(numout,*) ' ' … … 242 240 WRITE(numout,*) ' Atmospheric pCO2 atcco2 =', atcco2 243 241 ENDIF 244 245 ! interior global domain surface 246 area = glob_sum( e1e2t(:,:) ) 247 248 ! Initialization of Flux of Carbon 249 oce_co2(:,:) = 0._wp 242 ! 243 area = glob_sum( e1e2t(:,:) ) ! interior global domain surface 244 ! 245 oce_co2(:,:) = 0._wp ! Initialization of Flux of Carbon 250 246 t_atm_co2_flx = 0._wp 251 ! Initialisation of atmospheric pco2252 satmco2(:,:) = atcco2 247 ! 248 satmco2(:,:) = atcco2 ! Initialisation of atmospheric pco2 253 249 t_oce_co2_flx = 0._wp 254 250 ! 255 251 END SUBROUTINE p4z_flx_init 256 252 253 257 254 INTEGER FUNCTION p4z_flx_alloc() 258 255 !!---------------------------------------------------------------------- 259 256 !! *** ROUTINE p4z_flx_alloc *** 260 257 !!---------------------------------------------------------------------- 261 262 258 ALLOCATE( oce_co2(jpi,jpj), satmco2(jpi,jpj), STAT=p4z_flx_alloc ) 263 264 IF( p4z_flx_alloc /= 0 ) CALL ctl_warn('p4z_flx_alloc : failed to allocate arrays.')265 259 ! 260 IF( p4z_flx_alloc /= 0 ) CALL ctl_warn('p4z_flx_alloc : failed to allocate arrays') 261 ! 266 262 END FUNCTION p4z_flx_alloc 267 263 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zint.F90
r2643 r2690 23 23 PUBLIC p4z_int_alloc 24 24 25 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc!: Temp. dependancy of various biological rates26 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc2!: Temp. dependancy of mesozooplankton rates25 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc !: Temp. dependancy of various biological rates 26 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc2 !: Temp. dependancy of mesozooplankton rates 27 27 28 !! * Module variables 29 REAL(wp) :: xksilim = 16.5E-6 ! Half-saturation constant for the computation of the Si half-saturation constant 30 28 REAL(wp) :: xksilim = 16.5e-6_wp ! Half-saturation constant for the Si half-saturation constant computation 31 29 32 30 !!---------------------------------------------------------------------- 33 31 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 34 32 !! $Id$ 35 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 36 34 !!---------------------------------------------------------------------- 37 38 35 CONTAINS 39 36 … … 46 43 !! ** Method : - ??? 47 44 !!--------------------------------------------------------------------- 48 !!49 45 INTEGER :: ji, jj 50 46 REAL(wp) :: zdum … … 53 49 ! Computation of phyto and zoo metabolic rate 54 50 ! ------------------------------------------- 55 56 51 tgfunc (:,:,:) = EXP( 0.063913 * tsn(:,:,:,jp_tem) ) 57 52 tgfunc2(:,:,:) = EXP( 0.07608 * tsn(:,:,:,jp_tem) ) … … 60 55 ! constant for silica uptake 61 56 ! --------------------------------------------------- 62 63 57 DO ji = 1, jpi 64 58 DO jj = 1, jpj … … 67 61 END DO 68 62 END DO 69 63 ! 70 64 IF( nday_year == nyear_len(1) ) THEN 71 65 xksi = xksimax 72 xksimax = 0. e066 xksimax = 0._wp 73 67 ENDIF 74 68 ! 75 69 END SUBROUTINE p4z_int 70 76 71 77 72 INTEGER FUNCTION p4z_int_alloc() … … 79 74 !! *** ROUTINE p4z_int_alloc *** 80 75 !!---------------------------------------------------------------------- 81 82 76 ALLOCATE( tgfunc(jpi,jpj,jpk), tgfunc2(jpi,jpj,jpk), STAT=p4z_int_alloc ) 83 84 IF( p4z_int_alloc /= 0 ) CALL ctl_warn('p4z_int_alloc : failed to allocate arrays.')85 77 ! 78 IF( p4z_int_alloc /= 0 ) CALL ctl_warn('p4z_int_alloc : failed to allocate arrays.') 79 ! 86 80 END FUNCTION p4z_int_alloc 87 81 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zopt.F90
r2643 r2690 29 29 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy !: averaged PAR in the mixed layer 30 30 31 INTEGER :: nksrp ! levels below which the light cannot penetrate ( depth larger than 391 m)32 REAL(wp) :: parlux = 0.43 / 3.e033 34 REAL(wp), DIMENSION(3,61), PUBLIC :: xkrgb !: tabulated attenuation coefficients for RGB absorption31 INTEGER :: nksrp ! levels below which the light cannot penetrate ( depth larger than 391 m) 32 REAL(wp) :: parlux = 0.43_wp / 3._wp 33 34 REAL(wp), DIMENSION(3,61), PUBLIC :: xkrgb !: tabulated attenuation coefficients for RGB absorption 35 35 36 36 !!* Substitution … … 39 39 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 40 40 !! $Id$ 41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 42 !!---------------------------------------------------------------------- 43 41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 42 !!---------------------------------------------------------------------- 44 43 CONTAINS 45 46 44 47 45 SUBROUTINE p4z_opt( kt, jnt ) … … 54 52 !! ** Method : - ??? 55 53 !!--------------------------------------------------------------------- 56 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 57 USE wrk_nemo, ONLY: zdepmoy => wrk_2d_1, zetmp => wrk_2d_2 58 USE wrk_nemo, ONLY: zekg => wrk_3d_2, zekr => wrk_3d_3, zekb => wrk_3d_4 59 USE wrk_nemo, ONLY: ze0 => wrk_3d_5, ze1 => wrk_3d_6 60 USE wrk_nemo, ONLY: ze2 => wrk_3d_7, ze3 => wrk_3d_8 61 ! 62 INTEGER, INTENT(in) :: kt, jnt ! ocean time step 54 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 55 USE wrk_nemo, ONLY: zdepmoy => wrk_2d_1 , zetmp => wrk_2d_2 56 USE wrk_nemo, ONLY: zekg => wrk_3d_2 , zekr => wrk_3d_3 , zekb => wrk_3d_4 57 USE wrk_nemo, ONLY: ze0 => wrk_3d_5 , ze1 => wrk_3d_6 58 USE wrk_nemo, ONLY: ze2 => wrk_3d_7 , ze3 => wrk_3d_8 59 ! 60 INTEGER, INTENT(in) :: kt, jnt ! ocean time step 61 ! 63 62 INTEGER :: ji, jj, jk 64 63 INTEGER :: irgb … … 67 66 !!--------------------------------------------------------------------- 68 67 69 IF( ( wrk_in_use(2, 1,2) ) .OR. ( wrk_in_use(3, 2,3,4,5,6,7,8) )) THEN70 CALL ctl_stop('p4z_opt: requested workspace arrays unavailable') ;RETURN71 END 68 IF( wrk_in_use(2, 1,2) .OR. wrk_in_use(3, 2,3,4,5,6,7,8) ) THEN 69 CALL ctl_stop('p4z_opt: requested workspace arrays unavailable') ; RETURN 70 ENDIF 72 71 73 72 ! Initialisation of variables used to compute PAR 74 73 ! ----------------------------------------------- 75 ze1 (:,:,jpk) = 0. e076 ze2 (:,:,jpk) = 0. e077 ze3 (:,:,jpk) = 0. e074 ze1 (:,:,jpk) = 0._wp 75 ze2 (:,:,jpk) = 0._wp 76 ze3 (:,:,jpk) = 0._wp 78 77 79 78 ! !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) … … 211 210 !CDIR NOVERRCHK 212 211 DO ji = 1, jpi 213 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) & 214 & emoy(ji,jj,jk) = zetmp(ji,jj) / ( zdepmoy(ji,jj) + rtrn ) 212 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) emoy(ji,jj,jk) = zetmp(ji,jj) / ( zdepmoy(ji,jj) + rtrn ) 215 213 END DO 216 214 END DO … … 231 229 #endif 232 230 ! 233 IF( ( wrk_not_released(2, 1,2) ) .OR. ( wrk_not_released(3, 2,3,4,5,6,7,8) ) )&234 &CALL ctl_stop('p4z_opt: failed to release workspace arrays')231 IF( wrk_not_released(2, 1,2) .OR. & 232 wrk_not_released(3, 2,3,4,5,6,7,8) ) CALL ctl_stop('p4z_opt: failed to release workspace arrays') 235 233 ! 236 234 END SUBROUTINE p4z_opt 235 237 236 238 237 SUBROUTINE p4z_opt_init … … 241 240 !! 242 241 !! ** Purpose : Initialization of tabulated attenuation coef 243 !! 244 !! 245 !!---------------------------------------------------------------------- 246 242 !!---------------------------------------------------------------------- 243 ! 247 244 CALL trc_oce_rgb( xkrgb ) ! tabulated attenuation coefficients 248 !! CALL trc_oce_rgb_read( xkrgb ) ! tabulated attenuation coefficients249 245 nksrp = trc_oce_ext_lev( r_si2, 0.33e2 ) ! max level of light extinction (Blue Chl=0.01) 246 ! 250 247 IF(lwp) WRITE(numout,*) ' level of light extinction = ', nksrp, ' ref depth = ', gdepw_0(nksrp+1), ' m' 251 248 ! 252 etot (:,:,:) = 0. e0253 enano(:,:,:) = 0. e0254 ediat(:,:,:) = 0. e0255 IF( ln_qsr_bio ) etot3(:,:,:) = 0. e0249 etot (:,:,:) = 0._wp 250 enano(:,:,:) = 0._wp 251 ediat(:,:,:) = 0._wp 252 IF( ln_qsr_bio ) etot3(:,:,:) = 0._wp 256 253 ! 257 254 END SUBROUTINE p4z_opt_init 258 255 256 259 257 INTEGER FUNCTION p4z_opt_alloc() 260 258 !!---------------------------------------------------------------------- 261 259 !! *** ROUTINE p4z_opt_alloc *** 262 260 !!---------------------------------------------------------------------- 263 264 ALLOCATE( etot (jpi,jpj,jpk), enano(jpi,jpj,jpk), & 265 & ediat(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc ) 266 261 ALLOCATE( etot (jpi,jpj,jpk) , enano(jpi,jpj,jpk) , & 262 & ediat(jpi,jpj,jpk) , emoy (jpi,jpj,jpk) , STAT=p4z_opt_alloc ) 263 ! 267 264 IF( p4z_opt_alloc /= 0 ) CALL ctl_warn('p4z_opt_alloc : failed to allocate arrays.') 268 265 ! 269 266 END FUNCTION p4z_opt_alloc 270 267 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zprod.F90
r2643 r2690 29 29 PUBLIC p4z_prod_alloc 30 30 31 !! * Shared module variables32 31 REAL(wp), PUBLIC :: & 33 32 pislope = 3.0_wp , & !: … … 41 40 grosip = 0.151_wp 42 41 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmax42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmax !: 44 43 45 44 REAL(wp) :: & … … 54 53 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 55 54 !! $Id$ 56 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 57 !!---------------------------------------------------------------------- 58 55 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 56 !!---------------------------------------------------------------------- 59 57 CONTAINS 60 61 58 62 59 SUBROUTINE p4z_prod( kt , jnt ) … … 69 66 !! ** Method : - ??? 70 67 !!--------------------------------------------------------------------- 71 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released72 USE wrk_nemo, ONLY: zmixnano => wrk_2d_1 , zmixdiat => wrk_2d_2, zstrn => wrk_2d_373 USE wrk_nemo, ONLY: zpislopead => wrk_3d_2 , zpislopead2=> wrk_3d_274 USE wrk_nemo, ONLY: zprdia => wrk_3d_4 , zprbio => wrk_3d_5, zysopt => wrk_3d_675 USE wrk_nemo, ONLY: zprorca => wrk_3d_7 , zprorcad=> wrk_3d_876 USE wrk_nemo, ONLY: zprofed => wrk_3d_9 , zprofen=> wrk_3d_1077 USE wrk_nemo, ONLY: zprochln => wrk_3d_11, zprochld=> wrk_3d_1278 USE wrk_nemo, ONLY: zpronew => wrk_3d_13, zpronewd=> wrk_3d_1468 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 69 USE wrk_nemo, ONLY: zmixnano => wrk_2d_1 , zmixdiat => wrk_2d_2 , zstrn => wrk_2d_3 70 USE wrk_nemo, ONLY: zpislopead => wrk_3d_2 , zpislopead2 => wrk_3d_2 71 USE wrk_nemo, ONLY: zprdia => wrk_3d_4 , zprbio => wrk_3d_5 , zysopt => wrk_3d_6 72 USE wrk_nemo, ONLY: zprorca => wrk_3d_7 , zprorcad => wrk_3d_8 73 USE wrk_nemo, ONLY: zprofed => wrk_3d_9 , zprofen => wrk_3d_10 74 USE wrk_nemo, ONLY: zprochln => wrk_3d_11 , zprochld => wrk_3d_12 75 USE wrk_nemo, ONLY: zpronew => wrk_3d_13 , zpronewd => wrk_3d_14 79 76 ! 80 77 INTEGER, INTENT(in) :: kt, jnt 78 ! 81 79 INTEGER :: ji, jj, jk 82 80 REAL(wp) :: zsilfac, zfact … … 92 90 !!--------------------------------------------------------------------- 93 91 94 IF( ( wrk_in_use(2, 1,2,3) ) .OR. ( wrk_in_use(3, 2,3,4,5,6,7,8,9,10,11,12,13,14) ) ) THEN 95 CALL ctl_stop('p4z_prod: requested workspace arrays unavailable') ; RETURN 96 END IF 97 98 zprorca (:,:,:) = 0.0 99 zprorcad(:,:,:) = 0.0 100 zprofed(:,:,:) = 0.0 101 zprofen(:,:,:) = 0.0 102 zprochln(:,:,:) = 0.0 103 zprochld(:,:,:) = 0.0 104 zpronew (:,:,:) = 0.0 105 zpronewd(:,:,:) = 0.0 106 zprdia (:,:,:) = 0.0 107 zprbio (:,:,:) = 0.0 108 zysopt (:,:,:) = 0.0 92 IF( wrk_in_use(2, 1,2,3) .OR. & 93 wrk_in_use(3, 2,3,4,5,6,7,8,9,10,11,12,13,14) ) THEN 94 CALL ctl_stop('p4z_prod: requested workspace arrays unavailable') ; RETURN 95 ENDIF 96 97 zprorca (:,:,:) = 0._wp 98 zprorcad(:,:,:) = 0._wp 99 zprofed (:,:,:) = 0._wp 100 zprofen (:,:,:) = 0._wp 101 zprochln(:,:,:) = 0._wp 102 zprochld(:,:,:) = 0._wp 103 zpronew (:,:,:) = 0._wp 104 zpronewd(:,:,:) = 0._wp 105 zprdia (:,:,:) = 0._wp 106 zprbio (:,:,:) = 0._wp 107 zysopt (:,:,:) = 0._wp 109 108 110 109 ! Computation of the optimal production 111 112 110 # if defined key_degrad 113 111 prmax(:,:,:) = rday1 * tgfunc(:,:,:) * facvol(:,:,:) … … 117 115 118 116 ! compute the day length depending on latitude and the day 119 zrum = FLOAT( nday_year - 80 ) / REAL(nyear_len(1), wp)120 zcodel = ASIN( SIN( zrum * rpi * 2. ) * SIN( rad * 23.5) )117 zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 118 zcodel = ASIN( SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp ) ) 121 119 122 120 ! day length in hours 123 zstrn(:,:) = 0. 121 zstrn(:,:) = 0._wp 124 122 DO jj = 1, jpj 125 123 DO ji = 1, jpi … … 362 360 #endif 363 361 364 362 IF(ln_ctl) THEN ! print mean trends (used for debugging) 365 363 WRITE(charout, FMT="('prod')") 366 364 CALL prt_ctl_trc_info(charout) 367 365 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 368 ENDIF 369 370 IF( ( wrk_not_released(2, 1,2,3) ) .OR. ( wrk_not_released(3, 2,3,4,5,6,7,8,9,10,11,12,13,14) ) ) & 371 & CALL ctl_stop('p4z_prod: failed to release workspace arrays') 366 ENDIF 367 368 IF( wrk_not_released(2, 1,2,3) .OR. & 369 wrk_not_released(3, 2,3,4,5,6,7,8,9,10,11,12,13,14) ) & 370 CALL ctl_stop('p4z_prod: failed to release workspace arrays') 372 371 ! 373 372 END SUBROUTINE p4z_prod 374 373 374 375 375 SUBROUTINE p4z_prod_init 376 377 376 !!---------------------------------------------------------------------- 378 377 !! *** ROUTINE p4z_prod_init *** … … 384 383 !! 385 384 !! ** input : Namelist nampisprod 386 !!387 385 !!---------------------------------------------------------------------- 388 389 386 NAMELIST/nampisprod/ pislope, pislope2, excret, excret2, chlcnm, chlcdm, & 390 387 & fecnm, fecdm, grosip 388 !!---------------------------------------------------------------------- 391 389 392 390 REWIND( numnat ) ! read numnat … … 407 405 WRITE(numout,*) ' Minimum Fe/C in diatoms fecdm =', fecdm 408 406 ENDIF 409 407 ! 410 408 rday1 = 0.6 / rday 411 409 texcret = 1.0 - excret 412 410 texcret2 = 1.0 - excret2 413 411 tpp = 0. 414 412 ! 415 413 END SUBROUTINE p4z_prod_init 416 414 … … 420 418 !! *** ROUTINE p4z_prod_alloc *** 421 419 !!---------------------------------------------------------------------- 422 423 420 ALLOCATE( prmax(jpi,jpj,jpk), STAT=p4z_prod_alloc ) 424 421 ! 425 422 IF( p4z_prod_alloc /= 0 ) CALL ctl_warn('p4z_prod_alloc : failed to allocate arrays.') 426 423 ! 427 424 END FUNCTION p4z_prod_alloc 428 425 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zrem.F90
r2643 r2690 31 31 PUBLIC p4z_rem_alloc 32 32 33 !! * Shared module variables34 33 REAL(wp), PUBLIC :: & 35 34 xremik = 0.3_wp , & !: … … 40 39 oxymin = 1.e-6_wp !: 41 40 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitr!: denitrification array41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitr !: denitrification array 43 42 44 43 … … 48 47 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 49 48 !! $Id$ 50 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 51 !!---------------------------------------------------------------------- 52 49 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 50 !!---------------------------------------------------------------------- 53 51 CONTAINS 54 55 52 56 53 SUBROUTINE p4z_rem( kt ) … … 62 59 !! ** Method : - ??? 63 60 !!--------------------------------------------------------------------- 64 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released65 USE wrk_nemo, ONLY: ztempbac => wrk_2d_166 USE wrk_nemo, ONLY: zdepbac => wrk_3d_2, zfesatur => wrk_3d_2, zolimi => wrk_3d_461 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 62 USE wrk_nemo, ONLY: ztempbac => wrk_2d_1 63 USE wrk_nemo, ONLY: zdepbac => wrk_3d_2 , zfesatur => wrk_3d_2 , zolimi => wrk_3d_4 67 64 ! 68 65 INTEGER, INTENT(in) :: kt ! ocean time step 66 ! 69 67 INTEGER :: ji, jj, jk 70 68 REAL(wp) :: zremip, zremik , zlam1b … … 78 76 REAL(wp) :: zlamfac, zonitr, zstep 79 77 CHARACTER (len=25) :: charout 80 81 78 !!--------------------------------------------------------------------- 82 79 83 IF( ( wrk_in_use(2, 1) ) .OR. ( wrk_in_use(3, 2,3,4) )) THEN84 CALL ctl_stop('p4z_rem: requested workspace arrays unavailable') ;RETURN85 END 80 IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 2,3,4) ) THEN 81 CALL ctl_stop('p4z_rem: requested workspace arrays unavailable') ; RETURN 82 ENDIF 86 83 87 84 ! Initialisation of temprary arrys 88 zdepbac (:,:,:) = 0. 089 zfesatur(:,:,:) = 0. 090 zolimi (:,:,:) = 0. 091 ztempbac(:,:) = 0. 085 zdepbac (:,:,:) = 0._wp 86 zfesatur(:,:,:) = 0._wp 87 zolimi (:,:,:) = 0._wp 88 ztempbac(:,:) = 0._wp 92 89 93 90 ! Computation of the mean phytoplankton concentration as 94 91 ! a crude estimate of the bacterial biomass 95 92 ! -------------------------------------------------- 96 97 93 DO jk = 1, jpkm1 98 94 DO jj = 1, jpj … … 368 364 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 369 365 #endif 370 371 END DO 372 END DO 373 END DO 374 ! 375 376 IF(ln_ctl) THEN ! print mean trends (used for debugging) 366 END DO 367 END DO 368 END DO 369 ! 370 371 IF(ln_ctl) THEN ! print mean trends (used for debugging) 377 372 WRITE(charout, FMT="('rem5')") 378 373 CALL prt_ctl_trc_info(charout) 379 374 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 380 381 382 383 375 ENDIF 376 377 ! Update the arrays TRA which contain the biological sources and sinks 378 ! -------------------------------------------------------------------- 384 379 385 380 DO jk = 1, jpkm1 … … 391 386 tra(:,:,jk,jpdic) = tra(:,:,jk,jpdic) + zolimi(:,:,jk) + denitr(:,:,jk) 392 387 tra(:,:,jk,jptal) = tra(:,:,jk,jptal) + denitr(:,:,jk) * rno3 * rdenit 393 END DO394 395 388 END DO 389 390 IF(ln_ctl) THEN ! print mean trends (used for debugging) 396 391 WRITE(charout, FMT="('rem6')") 397 392 CALL prt_ctl_trc_info(charout) 398 393 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 399 400 401 IF( ( wrk_not_released(2, 1) ) .OR. ( wrk_not_released(3, 2,3,4) ) )&402 &CALL ctl_stop('p4z_rem: failed to release workspace arrays')403 394 ENDIF 395 ! 396 IF( wrk_not_released(2, 1) .OR. & 397 wrk_not_released(3, 2,3,4) ) CALL ctl_stop('p4z_rem: failed to release workspace arrays') 398 ! 404 399 END SUBROUTINE p4z_rem 405 400 401 406 402 SUBROUTINE p4z_rem_init 407 408 403 !!---------------------------------------------------------------------- 409 404 !! *** ROUTINE p4z_rem_init *** … … 417 412 !! 418 413 !!---------------------------------------------------------------------- 419 420 414 NAMELIST/nampisrem/ xremik, xremip, nitrif, xsirem, xlam1, oxymin 415 !!---------------------------------------------------------------------- 421 416 422 417 REWIND( numnat ) ! read numnat … … 434 429 WRITE(numout,*) ' halk saturation constant for anoxia oxymin =', oxymin 435 430 ENDIF 436 437 nitrfac(:,:,:) = 0. 0438 denitr (:,:,:) = 0. 0439 431 ! 432 nitrfac(:,:,:) = 0._wp 433 denitr (:,:,:) = 0._wp 434 ! 440 435 END SUBROUTINE p4z_rem_init 436 441 437 442 438 INTEGER FUNCTION p4z_rem_alloc() … … 444 440 !! *** ROUTINE p4z_rem_alloc *** 445 441 !!---------------------------------------------------------------------- 446 447 442 ALLOCATE( denitr(jpi,jpj,jpk), STAT=p4z_rem_alloc ) 448 449 IF( p4z_rem_alloc /= 0 ) CALL ctl_warn('p4z_rem_alloc : failed to allocate arrays.')450 443 ! 444 IF( p4z_rem_alloc /= 0 ) CALL ctl_warn('p4z_rem_alloc: failed to allocate arrays') 445 ! 451 446 END FUNCTION p4z_rem_alloc 447 452 448 #else 453 449 !!====================================================================== -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zsink.F90
r2643 r2690 23 23 PUBLIC p4z_sink_alloc 24 24 25 !! * Shared module variables 26 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsbio3 !: POC sinking speed 27 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsbio4 !: GOC sinking speed 28 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wscal !: Calcite and BSi sinking speeds 29 30 !! * Module variables 31 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinking, sinking2 !: POC sinking fluxes 32 ! ! (different meanings depending on the parameterization) 33 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkcal, sinksil !: CaCO3 and BSi sinking fluxes 34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer !: Small BFe sinking fluxes 25 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsbio3 !: POC sinking speed 26 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsbio4 !: GOC sinking speed 27 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wscal !: Calcite and BSi sinking speeds 28 29 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinking, sinking2 !: POC sinking fluxes 30 ! ! (different meanings depending on the parameterization) 31 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkcal, sinksil !: CaCO3 and BSi sinking fluxes 32 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer !: Small BFe sinking fluxes 35 33 #if ! defined key_kriest 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer2 !: Big iron sinking fluxes34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer2 !: Big iron sinking fluxes 37 35 #endif 38 36 … … 56 54 REAL(wp), PUBLIC :: xkr_wsbio_max !: max vertical particle speed 57 55 58 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: xnumm!: maximum number of particles in aggregates56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: xnumm !: maximum number of particles in aggregates 59 57 #endif 60 58 … … 64 62 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 65 63 !! $Id$ 66 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)64 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 67 65 !!---------------------------------------------------------------------- 68 69 66 CONTAINS 70 67 71 72 68 #if defined key_kriest 69 !!---------------------------------------------------------------------- 70 !! 'key_kriest' ??? 71 !!---------------------------------------------------------------------- 73 72 74 73 SUBROUTINE p4z_sink ( kt, jnt ) … … 81 80 !! ** Method : - ??? 82 81 !!--------------------------------------------------------------------- 83 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 84 USE wrk_nemo, ONLY: znum3d => wrk_3d_2 82 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 83 USE wrk_nemo, ONLY: znum3d => wrk_3d_2 84 ! 85 85 INTEGER, INTENT(in) :: kt, jnt 86 ! 86 87 INTEGER :: ji, jj, jk 87 88 REAL(wp) :: zagg1, zagg2, zagg3, zagg4, zagg5, zaggsi, zaggsh … … 95 96 #endif 96 97 CHARACTER (len=25) :: charout 97 98 !!--------------------------------------------------------------------- 99 98 !!--------------------------------------------------------------------- 99 ! 100 100 IF( wrk_in_use(3, 2 ) ) THEN 101 CALL ctl_stop('p4z_sink: requested workspace arrays unavailable') ; RETURN 102 END IF 101 CALL ctl_stop('p4z_sink: requested workspace arrays unavailable') ; RETURN 102 ENDIF 103 103 104 ! Initialisation of variables used to compute Sinking Speed 104 105 ! --------------------------------------------------------- 105 106 106 107 108 109 110 111 ! Computation of the vertical sinking speed : Kriest et Evans, 2000112 ! -----------------------------------------------------------------107 znum3d(:,:,:) = 0.e0 108 zval1 = 1. + xkr_zeta 109 zval2 = 1. + xkr_zeta + xkr_eta 110 zval3 = 1. + xkr_eta 111 112 ! Computation of the vertical sinking speed : Kriest et Evans, 2000 113 ! ----------------------------------------------------------------- 113 114 114 115 DO jk = 1, jpkm1 … … 128 129 zdiv1 = zeps - zval3 129 130 wsbio3(ji,jj,jk) = xkr_wsbio_min * ( zeps - zval1 ) / zdiv & 130 &- xkr_wsbio_max * zgm * xkr_eta / zdiv131 & - xkr_wsbio_max * zgm * xkr_eta / zdiv 131 132 wsbio4(ji,jj,jk) = xkr_wsbio_min * ( zeps-1. ) / zdiv1 & 132 &- xkr_wsbio_max * zfm * xkr_eta / zdiv1133 & - xkr_wsbio_max * zfm * xkr_eta / zdiv1 133 134 IF( znum == 1.1) wsbio3(ji,jj,jk) = wsbio4(ji,jj,jk) 134 135 ENDIF … … 137 138 END DO 138 139 139 wscal(:,:,:) = MAX( wsbio3(:,:,:), 50. )140 wscal(:,:,:) = MAX( wsbio3(:,:,:), 50._wp ) 140 141 141 142 ! INITIALIZE TO ZERO ALL THE SINKING ARRAYS … … 302 303 #endif 303 304 ! 304 305 IF(ln_ctl) THEN ! print mean trends (used for debugging) 305 306 WRITE(charout, FMT="('sink')") 306 307 CALL prt_ctl_trc_info(charout) 307 308 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 308 309 310 IF( wrk_not_released(3, 2 ) ) CALL ctl_stop('p4z_sink: failed to release workspace arrays')309 ENDIF 310 ! 311 IF( wrk_not_released(3, 2 ) ) CALL ctl_stop('p4z_sink: failed to release workspace arrays') 311 312 ! 312 313 END SUBROUTINE p4z_sink 314 313 315 314 316 SUBROUTINE p4z_sink_init … … 323 325 !! 324 326 !! ** input : Namelist nampiskrs 325 !!326 327 !!---------------------------------------------------------------------- 327 328 INTEGER :: jk, jn, kiter … … 329 330 REAL(wp) :: zws, zwr, zwl,wmax, znummax 330 331 REAL(wp) :: zmin, zmax, zl, zr, xacc 331 332 ! 332 333 NAMELIST/nampiskrs/ xkr_sfact, xkr_stick , & 333 334 & xkr_nnano, xkr_ndiat, xkr_nmeso, xkr_naggr 334 335 335 !!---------------------------------------------------------------------- 336 ! 336 337 REWIND( numnat ) ! read nampiskrs 337 338 READ ( numnat, nampiskrs ) … … 346 347 WRITE(numout,*) ' Nbr of cell in mesozoo size class xkr_nmeso = ', xkr_nmeso 347 348 WRITE(numout,*) ' Nbr of cell in aggregates size class xkr_naggr = ', xkr_naggr 348 ENDIF349 350 351 ! max and min vertical particle speed352 xkr_wsbio_min = xkr_sfact * xkr_mass_min**xkr_eta353 xkr_wsbio_max = xkr_sfact * xkr_mass_max**xkr_eta354 WRITE(numout,*) ' max and min vertical particle speed ', xkr_wsbio_min, xkr_wsbio_max355 356 !357 ! effect of the sizes of the different living pools on particle numbers358 ! nano = 2um-20um -> mean size=6.32 um -> ws=2.596 -> xnum=xnnano=2.337359 ! diat and microzoo = 10um-200um -> 44.7 -> 8.732 -> xnum=xndiat=3.718360 ! mesozoo = 200um-2mm -> 632.45 -> 45.14 -> xnum=xnmeso=7.147361 ! aggregates = 200um-10mm -> 1414 -> 74.34 -> xnum=xnaggr=9.877362 ! doc aggregates = 1um363 ! ----------------------------------------------------------364 365 xkr_dnano = 1. / ( xkr_massp * xkr_nnano )366 xkr_ddiat = 1. / ( xkr_massp * xkr_ndiat )367 xkr_dmeso = 1. / ( xkr_massp * xkr_nmeso )368 xkr_daggr = 1. / ( xkr_massp * xkr_naggr )349 ENDIF 350 351 352 ! max and min vertical particle speed 353 xkr_wsbio_min = xkr_sfact * xkr_mass_min**xkr_eta 354 xkr_wsbio_max = xkr_sfact * xkr_mass_max**xkr_eta 355 WRITE(numout,*) ' max and min vertical particle speed ', xkr_wsbio_min, xkr_wsbio_max 356 357 ! 358 ! effect of the sizes of the different living pools on particle numbers 359 ! nano = 2um-20um -> mean size=6.32 um -> ws=2.596 -> xnum=xnnano=2.337 360 ! diat and microzoo = 10um-200um -> 44.7 -> 8.732 -> xnum=xndiat=3.718 361 ! mesozoo = 200um-2mm -> 632.45 -> 45.14 -> xnum=xnmeso=7.147 362 ! aggregates = 200um-10mm -> 1414 -> 74.34 -> xnum=xnaggr=9.877 363 ! doc aggregates = 1um 364 ! ---------------------------------------------------------- 365 366 xkr_dnano = 1. / ( xkr_massp * xkr_nnano ) 367 xkr_ddiat = 1. / ( xkr_massp * xkr_ndiat ) 368 xkr_dmeso = 1. / ( xkr_massp * xkr_nmeso ) 369 xkr_daggr = 1. / ( xkr_massp * xkr_naggr ) 369 370 370 371 !!--------------------------------------------------------------------- … … 378 379 WRITE(numout,*)' kriest : Compute maximum number of particles in aggregates' 379 380 380 xacc = 0.001 381 xacc = 0.001_wp 381 382 kiter = 50 382 zmin = 1.10 383 zmin = 1.10_wp 383 384 zmax = xkr_mass_max / xkr_mass_min 384 385 xkr_frac = zmax … … 401 402 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 402 403 & - wmax 403 iflag: DO jn = 1, kiter 404 IF( zwl == 0.e0 ) THEN 405 znummax = zl 406 ELSE IF ( zwr == 0.e0 ) THEN 407 znummax = zr 408 ELSE 409 znummax = ( zr + zl ) / 2. 410 zdiv = xkr_zeta + xkr_eta - xkr_eta * znummax 411 znum = znummax - 1. 412 zws = xkr_wsbio_min * xkr_zeta / zdiv & 413 & - ( xkr_wsbio_max * xkr_eta * znum * & 414 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 415 & - wmax 416 IF( zws * zwl < 0. ) THEN 417 zr = znummax 418 ELSE 419 zl = znummax 420 ENDIF 421 zdiv = xkr_zeta + xkr_eta - xkr_eta * zl 422 znum = zl - 1. 423 zwl = xkr_wsbio_min * xkr_zeta / zdiv & 424 & - ( xkr_wsbio_max * xkr_eta * znum * & 425 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 426 & - wmax 427 428 zdiv = xkr_zeta + xkr_eta - xkr_eta * zr 429 znum = zr - 1. 430 zwr = xkr_wsbio_min * xkr_zeta / zdiv & 431 & - ( xkr_wsbio_max * xkr_eta * znum * & 432 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 433 & - wmax 434 435 IF ( ABS ( zws ) <= xacc ) EXIT iflag 436 437 ENDIF 438 439 END DO iflag 440 441 xnumm(jk) = znummax 442 WRITE(numout,*) ' jk = ', jk, ' wmax = ', wmax,' xnum max = ', xnumm(jk) 443 444 END DO 445 404 iflag: DO jn = 1, kiter 405 IF ( zwl == 0._wp ) THEN ; znummax = zl 406 ELSEIF( zwr == 0._wp ) THEN ; znummax = zr 407 ELSE 408 znummax = ( zr + zl ) / 2. 409 zdiv = xkr_zeta + xkr_eta - xkr_eta * znummax 410 znum = znummax - 1. 411 zws = xkr_wsbio_min * xkr_zeta / zdiv & 412 & - ( xkr_wsbio_max * xkr_eta * znum * & 413 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 414 & - wmax 415 IF( zws * zwl < 0. ) THEN ; zr = znummax 416 ELSE ; zl = znummax 417 ENDIF 418 zdiv = xkr_zeta + xkr_eta - xkr_eta * zl 419 znum = zl - 1. 420 zwl = xkr_wsbio_min * xkr_zeta / zdiv & 421 & - ( xkr_wsbio_max * xkr_eta * znum * & 422 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 423 & - wmax 424 425 zdiv = xkr_zeta + xkr_eta - xkr_eta * zr 426 znum = zr - 1. 427 zwr = xkr_wsbio_min * xkr_zeta / zdiv & 428 & - ( xkr_wsbio_max * xkr_eta * znum * & 429 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 430 & - wmax 431 ! 432 IF ( ABS ( zws ) <= xacc ) EXIT iflag 433 ! 434 ENDIF 435 ! 436 END DO iflag 437 438 xnumm(jk) = znummax 439 WRITE(numout,*) ' jk = ', jk, ' wmax = ', wmax,' xnum max = ', xnumm(jk) 440 ! 441 END DO 442 ! 446 443 END SUBROUTINE p4z_sink_init 447 444 … … 475 472 DO jj = 1, jpj 476 473 DO ji=1,jpi 477 zfact = MAX( 0., fsdepw(ji,jj,jk+1) - hmld(ji,jj) ) / 4000. 474 zfact = MAX( 0., fsdepw(ji,jj,jk+1) - hmld(ji,jj) ) / 4000._wp 478 475 wsbio4(ji,jj,jk) = wsbio2 + ( 200.- wsbio2 ) * zfact 479 476 END DO … … 583 580 #endif 584 581 ! 585 582 IF(ln_ctl) THEN ! print mean trends (used for debugging) 586 583 WRITE(charout, FMT="('sink')") 587 584 CALL prt_ctl_trc_info(charout) 588 585 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 589 590 586 ENDIF 587 ! 591 588 END SUBROUTINE p4z_sink 589 592 590 593 591 SUBROUTINE p4z_sink_init … … 705 703 END DO 706 704 707 trn (:,:,:,jp_tra) = trb(:,:,:,jp_tra)708 psinkflx(:,:,:) = 2. * psinkflx(:,:,:)709 710 IF( wrk_not_released(3, 2,3,4 ) )CALL ctl_stop('p4z_sink2: failed to release workspace arrays')705 trn (:,:,:,jp_tra) = trb(:,:,:,jp_tra) 706 psinkflx(:,:,:) = 2. * psinkflx(:,:,:) 707 ! 708 IF( wrk_not_released(3, 2,3,4) ) CALL ctl_stop('p4z_sink2: failed to release workspace arrays') 711 709 ! 712 710 END SUBROUTINE p4z_sink2 711 713 712 714 713 INTEGER FUNCTION p4z_sink_alloc() … … 716 715 !! *** ROUTINE p4z_sink_alloc *** 717 716 !!---------------------------------------------------------------------- 718 719 ALLOCATE( wsbio3(jpi,jpj,jpk), wsbio4(jpi,jpj,jpk), wscal(jpi,jpj,jpk), & 720 & sinking(jpi,jpj,jpk), sinking2(jpi,jpj,jpk) , & 721 & sinkcal(jpi,jpj,jpk), sinksil(jpi,jpj,jpk) , & 717 ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk) , wscal(jpi,jpj,jpk) , & 718 & sinking(jpi,jpj,jpk) , sinking2(jpi,jpj,jpk) , & 719 & sinkcal(jpi,jpj,jpk) , sinksil (jpi,jpj,jpk) , & 722 720 #if defined key_kriest 723 & xnumm(jpk) ,&721 & xnumm(jpk) , & 724 722 #else 725 & sinkfer2(jpi,jpj,jpk) , & 726 #endif 727 728 & sinkfer(jpi,jpj,jpk), STAT=p4z_sink_alloc ) 729 723 & sinkfer2(jpi,jpj,jpk) , & 724 #endif 725 & sinkfer(jpi,jpj,jpk) , STAT=p4z_sink_alloc ) 726 ! 730 727 IF( p4z_sink_alloc /= 0 ) CALL ctl_warn('p4z_sink_alloc : failed to allocate arrays.') 731 728 ! 732 729 END FUNCTION p4z_sink_alloc 730 733 731 #else 734 732 !!====================================================================== -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r2643 r2690 7 7 !! 3.2 ! 2009-04 (C. Ethe & NEMO team) style 8 8 !!---------------------------------------------------------------------- 9 10 9 #if defined key_pisces 11 10 !!---------------------------------------------------------------------- … … 87 86 #endif 88 87 88 !!---------------------------------------------------------------------- 89 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 90 !! $Id$ 91 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 92 !!---------------------------------------------------------------------- 89 93 CONTAINS 90 94 … … 94 98 !!---------------------------------------------------------------------- 95 99 USE lib_mpp , ONLY: ctl_warn 96 INTEGER :: ierr(5) ! Local variables100 INTEGER :: ierr(5) ! Local variables 97 101 !!---------------------------------------------------------------------- 98 99 102 ierr(:) = 0 100 103 ! 101 104 !* Biological fluxes for light 102 105 ALLOCATE( neln(jpi,jpj), heup(jpi,jpj), STAT=ierr(1) ) 103 106 ! 104 107 !* Biological fluxes for primary production 105 108 ALLOCATE( xksimax(jpi,jpj) , xksi(jpi,jpj) , & … … 108 111 & xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk), & 109 112 & concdfe (jpi,jpj,jpk), concnfe (jpi,jpj,jpk), STAT=ierr(2) ) 110 113 ! 111 114 !* SMS for the organic matter 112 115 ALLOCATE( xfracal (jpi,jpj,jpk), nitrfac (jpi,jpj,jpk), & … … 115 118 #endif 116 119 & xlimbac (jpi,jpj,jpk), xdiss(jpi,jpj,jpk) , STAT=ierr(3) ) 117 120 ! 118 121 !* Variable for chemistry of the CO2 cycle 119 122 ALLOCATE( akb3(jpi,jpj,jpk), ak13(jpi,jpj,jpk) , & 120 123 & ak23(jpi,jpj,jpk), aksp(jpi,jpj,jpk) , & 121 124 & akw3(jpi,jpj,jpk), borat(jpi,jpj,jpk), hi(jpi,jpj,jpk), STAT=ierr(4) ) 122 125 ! 123 126 !* Array used to indicate negative tracer values 124 127 ALLOCATE( xnegtr(jpi,jpj,jpk), STAT=ierr(5) ) 125 128 ! 126 129 sms_pisces_alloc = MAXVAL( ierr ) 127 128 IF( sms_pisces_alloc /= 0 ) CALL ctl_warn('sms_pisces_alloc : failed to allocate arrays.')129 130 ! 131 IF( sms_pisces_alloc /= 0 ) CALL ctl_warn('sms_pisces_alloc: failed to allocate arrays') 132 ! 130 133 END FUNCTION sms_pisces_alloc 131 134 … … 136 139 #endif 137 140 138 !!----------------------------------------------------------------------139 !! NEMO/TOP 3.3 , NEMO Consortium (2010)140 !! $Id$141 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)142 141 !!====================================================================== 143 142 END MODULE sms_pisces -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r2643 r2690 34 34 PUBLIC trc_ini_pisces ! called by trcini.F90 module 35 35 36 !! * Module variables 37 REAL(wp) :: sco2 = 2.312e-3 38 REAL(wp) :: alka0 = 2.423e-3 39 REAL(wp) :: oxyg0 = 177.6e-6 40 REAL(wp) :: po4 = 2.174e-6 41 REAL(wp) :: bioma0 = 1.000e-8 42 REAL(wp) :: silic1 = 91.65e-6 43 REAL(wp) :: no3 = 31.04e-6 * 7.6 36 REAL(wp) :: sco2 = 2.312e-3_wp 37 REAL(wp) :: alka0 = 2.423e-3_wp 38 REAL(wp) :: oxyg0 = 177.6e-6_wp 39 REAL(wp) :: po4 = 2.174e-6_wp 40 REAL(wp) :: bioma0 = 1.000e-8_wp 41 REAL(wp) :: silic1 = 91.65e-6_wp 42 REAL(wp) :: no3 = 31.04e-6_wp * 7.6_wp 44 43 45 44 # include "top_substitute.h90" … … 47 46 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 48 47 !! $Id$ 49 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 50 49 !!---------------------------------------------------------------------- 51 52 50 CONTAINS 53 51 … … 58 56 !! ** Purpose : Initialisation of the PISCES biochemical model 59 57 !!---------------------------------------------------------------------- 60 61 58 ! 62 59 IF(lwp) WRITE(numout,*) 63 60 IF(lwp) WRITE(numout,*) ' trc_ini_pisces : PISCES biochemical model initialisation' 64 61 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 65 66 62 67 63 CALL pisces_alloc() ! Allocate PISCES arrays … … 130 126 IF(lwp) WRITE(numout,*) 'Initialization of PISCES tracers done' 131 127 IF(lwp) WRITE(numout,*) ' ' 132 133 128 ! 134 129 END SUBROUTINE trc_ini_pisces 130 135 131 136 132 SUBROUTINE pisces_alloc … … 162 158 ! 163 159 IF( lk_mpp ) CALL mpp_sum( ierr ) 164 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'pisces_alloc : unable to allocate PISCES arrays' ) 165 160 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'pisces_alloc: unable to allocate PISCES arrays' ) 166 161 ! 167 162 END SUBROUTINE pisces_alloc -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/TRP/trcadv.F90
r2643 r2690 35 35 INTEGER :: nadv ! choice of the type of advection scheme 36 36 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: r2dt ! vertical profile time-step, = 2 rdttra 37 !! except at nit000 (=rdttra) if neuler=037 ! ! except at nit000 (=rdttra) if neuler=0 38 38 39 39 !! * Substitutions … … 45 45 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 46 46 !!---------------------------------------------------------------------- 47 48 47 CONTAINS 49 48 … … 69 68 !!---------------------------------------------------------------------- 70 69 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 71 USE wrk_nemo, ONLY: zun => wrk_3d_4, zvn => wrk_3d_5, & 72 zwn => wrk_3d_6 ! effective velocity 70 USE wrk_nemo, ONLY: zun => wrk_3d_4, zvn => wrk_3d_5, zwn => wrk_3d_6 ! effective velocity 73 71 !! 74 INTEGER, INTENT( in) :: kt ! ocean time-step index75 ! 76 INTEGER :: jk77 CHARACTER (len=22) :: charout78 !!---------------------------------------------------------------------- 79 72 INTEGER, INTENT(in) :: kt ! ocean time-step index 73 ! 74 INTEGER :: jk 75 CHARACTER (len=22) :: charout 76 !!---------------------------------------------------------------------- 77 ! 80 78 IF( wrk_in_use(3, 4,5,6) ) THEN 81 CALL ctl_stop('trc_adv : requested workspace arrays unavailable.') 82 RETURN 83 END IF 79 CALL ctl_stop('trc_adv : requested workspace arrays unavailable') ; RETURN 80 ENDIF 84 81 85 82 IF( kt == nit000 ) CALL trc_adv_ctl ! initialisation & control of options … … 191 188 ! 192 189 END SUBROUTINE trc_adv_ctl 190 193 191 #else 194 192 !!---------------------------------------------------------------------- … … 201 199 END SUBROUTINE trc_adv 202 200 #endif 201 203 202 !!====================================================================== 204 203 END MODULE trcadv -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/TRP/trcdmp.F90
r2606 r2690 33 33 34 34 LOGICAL , PUBLIC, PARAMETER :: lk_trcdmp = .TRUE. !: internal damping flag 35 ! !!* Namelist namtrc_dmp : passive tracer newtonian damping * 35 36 ! !!* Namelist namtrc_dmp : passive tracer newtonian damping * 36 37 INTEGER :: nn_hdmp_tr = -1 ! = 0/-1/'latitude' for damping over passive tracer 37 38 INTEGER :: nn_zdmp_tr = 0 ! = 0/1/2 flag for damping in the mixed layer … … 48 49 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 49 50 !! $Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/TRP/trcdmp.F90,v 1.11 2006/09/01 14:03:49 opalod Exp $ 50 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 51 !!---------------------------------------------------------------------- 52 51 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 52 !!---------------------------------------------------------------------- 53 53 CONTAINS 54 54 55 FUNCTION trc_dmp_alloc()55 INTEGER FUNCTION trc_dmp_alloc() 56 56 !!---------------------------------------------------------------------- 57 57 !! *** ROUTINE trc_dmp_alloc *** 58 58 !!---------------------------------------------------------------------- 59 INTEGER :: trc_dmp_alloc 60 !!---------------------------------------------------------------------- 61 62 ALLOCATE(restotr(jpi,jpj,jpk), Stat=trc_dmp_alloc) 63 64 IF(trc_dmp_alloc /= 0)THEN 65 CALL ctl_warn('trc_dmp_alloc : failed to allocate array.') 66 END IF 67 59 ALLOCATE( restotr(jpi,jpj,jpk) , STAT=trc_dmp_alloc ) 60 ! 61 IF( trc_dmp_alloc /= 0 ) CALL ctl_warn('trc_dmp_alloc: failed to allocate array') 62 ! 68 63 END FUNCTION trc_dmp_alloc 69 64 … … 178 173 !! 179 174 !! ** Method : read the nammbf namelist and check the parameters 180 !! called by trc_dmp at the first timestep (nit000)175 !! called by trc_dmp at the first timestep (nit000) 181 176 !!---------------------------------------------------------------------- 182 177 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90
r2643 r2690 57 57 !! *** ROUTINE trc_nxt_alloc *** 58 58 !!---------------------------------------------------------------------- 59 ! 60 ALLOCATE( r2dt(jpk), STAT=trc_nxt_alloc) 59 ALLOCATE( r2dt(jpk), STAT=trc_nxt_alloc ) 61 60 ! 62 61 IF( trc_nxt_alloc /= 0 ) CALL ctl_warn('trc_nxt_alloc : failed to allocate array') … … 89 88 !! ** Action : - update trb, trn 90 89 !!---------------------------------------------------------------------- 91 !! * Arguments92 90 INTEGER, INTENT( in ) :: kt ! ocean time-step index 93 ! ! * Local declarations91 ! 94 92 INTEGER :: jk, jn ! dummy loop indices 95 93 REAL(wp) :: zfact ! temporary scalar -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf.F90
r2643 r2690 10 10 !!---------------------------------------------------------------------- 11 11 !! 'key_top' TOP models 12 !!----------------------------------------------------------------------13 12 !!---------------------------------------------------------------------- 14 13 !! trc_ldf : update the tracer trend with the lateral diffusion … … 33 32 ! ! defined from ln_zdf... namlist logicals) 34 33 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: r2dt ! vertical profile time-step, = 2 rdttra 35 ! ! except at nit000 (=rdttra) if neuler=034 ! ! except at nit000 (=rdttra) if neuler=0 36 35 37 36 !! * Substitutions … … 42 41 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 43 42 !! $Id$ 44 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)43 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 45 44 !!---------------------------------------------------------------------- 46 47 45 CONTAINS 48 46 49 FUNCTION trc_zdf_alloc()47 INTEGER FUNCTION trc_zdf_alloc() 50 48 !!---------------------------------------------------------------------- 51 49 !! *** ROUTINE trc_zdf_alloc *** 52 50 !!---------------------------------------------------------------------- 53 INTEGER :: trc_zdf_alloc 54 !!---------------------------------------------------------------------- 55 56 ALLOCATE(r2dt(jpk), Stat=trc_zdf_alloc) 57 58 IF(trc_zdf_alloc /= 0)THEN 59 CALL ctl_warn('trc_zdf_alloc : failed to allocate array.') 60 END IF 61 51 ALLOCATE( r2dt(jpk) , STAT=trc_zdf_alloc ) 52 ! 53 IF( trc_zdf_alloc /= 0 ) CALL ctl_warn('trc_zdf_alloc : failed to allocate array.') 54 ! 62 55 END FUNCTION trc_zdf_alloc 63 56 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/TRP/trdmld_trc.F90
r2643 r2690 72 72 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 73 73 !! $Header: $ 74 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)74 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 75 75 !!---------------------------------------------------------------------- 76 77 76 CONTAINS 78 77 79 FUNCTION trd_mld_trc_alloc()78 INTEGER FUNCTION trd_mld_trc_alloc() 80 79 !!---------------------------------------------------------------------- 81 80 !! *** ROUTINE trd_mld_trc_alloc *** 82 81 !!---------------------------------------------------------------------- 83 INTEGER :: trd_mld_trc_alloc 84 !!---------------------------------------------------------------------- 85 86 ALLOCATE(ztmltrd2(jpi,jpj,jpltrd_trc,jptra), & 82 ALLOCATE( ztmltrd2(jpi,jpj,jpltrd_trc,jptra) , & 87 83 #if defined key_lobster 88 ztmltrdbio2(jpi,jpj,jpdiabio) ,&89 #endif 90 & ndextrd1(jpi*jpj), STAT=trd_mld_trc_alloc)84 & ztmltrdbio2(jpi,jpj,jpdiabio) , & 85 #endif 86 & ndextrd1(jpi*jpj) , STAT=trd_mld_trc_alloc) 91 87 ! 92 88 IF( lk_mpp ) CALL mpp_sum ( trd_mld_trc_alloc ) 93 IF( trd_mld_trc_alloc /=0 ) CALL ctl_warn('trd_mld_trc_alloc : failed to allocate arrays.') 89 IF( trd_mld_trc_alloc /=0 ) CALL ctl_warn('trd_mld_trc_alloc: failed to allocate arrays') 90 ! 94 91 END FUNCTION trd_mld_trc_alloc 95 92 … … 115 112 !! surface and the control surface is called "mixed-layer" 116 113 !!---------------------------------------------------------------------- 117 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released118 USE wrk_nemo, ONLY: zvlmsk => wrk_2d_1114 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 115 USE wrk_nemo, ONLY: zvlmsk => wrk_2d_1 119 116 !! 120 117 INTEGER, INTENT( in ) :: ktrd, kjn ! ocean trend index and passive tracer rank … … 125 122 126 123 IF( wrk_in_use(2, 1) ) THEN 127 CALL ctl_stop('trd_mld_trc_zint 128 END 124 CALL ctl_stop('trd_mld_trc_zint: requested workspace array unavailable') ; RETURN 125 ENDIF 129 126 130 127 ! I. Definition of control surface and integration weights … … 210 207 tmltrd_trc(:,:,ktrd,kjn) = tmltrd_trc(:,:,ktrd,kjn) + ptrc_trdmld(:,:,1) * wkx_trc(:,:,1) ! non penetrative 211 208 END SELECT 212 213 IF( wrk_not_released(2, 1) ) CALL ctl_stop('trd_mld_trc_zint : failed to release workspace array.')214 ! 215 216 217 218 209 ! 210 IF( wrk_not_released(2, 1) ) CALL ctl_stop('trd_mld_trc_zint: failed to release workspace array') 211 ! 212 END SUBROUTINE trd_mld_trc_zint 213 214 215 SUBROUTINE trd_mld_bio_zint( ptrc_trdmld, ktrd ) 219 216 !!---------------------------------------------------------------------- 220 217 !! *** ROUTINE trd_mld_bio_zint *** … … 234 231 !! surface and the control surface is called "mixed-layer" 235 232 !!---------------------------------------------------------------------- 236 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released237 USE wrk_nemo, ONLY: zvlmsk => wrk_2d_1238 !! 239 INTEGER , INTENT( in) :: ktrd ! bio trend index240 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( in ) :: ptrc_trdmld! passive trc trend233 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 234 USE wrk_nemo, ONLY: zvlmsk => wrk_2d_1 235 !! 236 INTEGER , INTENT(in) :: ktrd ! bio trend index 237 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: ptrc_trdmld ! passive trc trend 241 238 #if defined key_lobster 242 ! ! local variables239 ! 243 240 INTEGER :: ji, jj, jk, isum 244 241 !!---------------------------------------------------------------------- 245 242 246 243 IF( wrk_in_use(2, 1) ) THEN 247 CALL ctl_stop('trd_mld_bio_zint : requested workspace array unavailable.') ;RETURN248 END 244 CALL ctl_stop('trd_mld_bio_zint: requested workspace array unavailable') ; RETURN 245 ENDIF 249 246 250 247 ! I. Definition of control surface and integration weights … … 328 325 END DO 329 326 330 IF( wrk_not_released(2, 1) ) CALL ctl_stop('trd_mld_bio_zint : failed to release workspace array.')331 #endif 332 333 334 335 336 327 IF( wrk_not_released(2, 1) ) CALL ctl_stop('trd_mld_bio_zint: failed to release workspace array') 328 #endif 329 ! 330 END SUBROUTINE trd_mld_bio_zint 331 332 333 SUBROUTINE trd_mld_trc( kt ) 337 334 !!---------------------------------------------------------------------- 338 335 !! *** ROUTINE trd_mld_trc *** … … 385 382 USE wrk_nemo, ONLY: wrk_3d_5, wrk_3d_6, wrk_3d_7, wrk_3d_8, wrk_3d_9 386 383 ! 387 INTEGER, INTENT( in ) :: kt ! ocean time-step index 384 INTEGER, INTENT(in) :: kt ! ocean time-step index 385 ! 388 386 INTEGER :: ji, jj, jk, jl, ik, it, itmod, jn 389 387 REAL(wp) :: zavt, zfn, zfn2 390 ! !388 ! 391 389 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmltot ! d(trc)/dt over the anlysis window (incl. Asselin) 392 390 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmlres ! residual = dh/dt entrainment term 393 391 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmlatf ! for storage only 394 392 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmlrad ! for storage only (for trb<0 corr in trcrad) 395 ! !393 ! 396 394 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmltot2 ! -+ 397 395 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmlres2 ! | working arrays to diagnose the trends … … 400 398 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmlrad2 ! | (-> for trb<0 corr in trcrad) 401 399 !REAL(wp), DIMENSION(jpi,jpj,jpltrd_trc,jptra) :: ztmltrd2 ! -+ 402 ! !400 ! 403 401 CHARACTER (LEN= 5) :: clvar 404 402 #if defined key_dimgout … … 423 421 424 422 425 IF( nn_dttrc /= 1 ) CALL ctl_stop( " Be careful, trends diags never validated " )423 IF( nn_dttrc /= 1 ) CALL ctl_stop( " Be careful, trends diags never validated " ) 426 424 427 425 ! ====================================================================== … … 448 446 449 447 DO jn = 1, jptra 450 ! ... Remove this K_z trend from the iso-neutral diffusion term (if any)448 ! ... Remove this K_z trend from the iso-neutral diffusion term (if any) 451 449 IF( ln_trdtrc(jn) ) & 452 450 tmltrd_trc(:,:,jpmld_trc_ldf,jn) = tmltrd_trc(:,:,jpmld_trc_ldf,jn) - tmltrd_trc(:,:,jpmld_trc_zdf,jn) … … 909 907 IF( lrst_trc ) CALL trd_mld_trc_rst_write( kt ) ! this must be after the array swap above (III.3) 910 908 911 IF( wrk_not_released(3, 1,2,3,4,5,6,7,8,9) ) & 912 & CALL ctl_stop('trd_mld_trc : failed to release workspace arrays.') 909 IF( wrk_not_released(3, 1,2,3,4,5,6,7,8,9) ) CALL ctl_stop('trd_mld_trc: failed to release workspace arrays') 913 910 ! 914 911 END SUBROUTINE trd_mld_trc 915 912 916 SUBROUTINE trd_mld_bio( kt ) 913 914 SUBROUTINE trd_mld_bio( kt ) 917 915 !!---------------------------------------------------------------------- 918 916 !! *** ROUTINE trd_mld *** … … 1149 1147 END SUBROUTINE trd_mld_bio 1150 1148 1149 1151 1150 REAL FUNCTION sum2d( ztab ) 1152 1151 !!---------------------------------------------------------------------- … … 1155 1154 REAL(wp), DIMENSION(jpi,jpj), INTENT( in ) :: ztab 1156 1155 !!---------------------------------------------------------------------- 1157 sum2d = SUM( ztab(2:jpi-1,2:jpj-1))1156 sum2d = SUM( ztab(2:jpi-1,2:jpj-1) ) 1158 1157 END FUNCTION sum2d 1158 1159 1159 1160 1160 SUBROUTINE trd_mld_trc_init … … 1442 1442 !! Default option : Empty module 1443 1443 !!---------------------------------------------------------------------- 1444 1445 1444 CONTAINS 1446 1447 1445 SUBROUTINE trd_mld_trc( kt ) ! Empty routine 1448 1446 INTEGER, INTENT( in) :: kt 1449 1447 WRITE(*,*) 'trd_mld_trc: You should not have seen this print! error?', kt 1450 1448 END SUBROUTINE trd_mld_trc 1451 1452 1449 SUBROUTINE trd_mld_bio( kt ) 1453 1450 INTEGER, INTENT( in) :: kt 1454 1451 WRITE(*,*) 'trd_mld_bio: You should not have seen this print! error?', kt 1455 1452 END SUBROUTINE trd_mld_bio 1456 1457 1453 SUBROUTINE trd_mld_trc_zint( ptrc_trdmld, ktrd, ctype, kjn ) 1458 1454 INTEGER , INTENT( in ) :: ktrd, kjn ! ocean trend index and passive tracer rank … … 1464 1460 WRITE(*,*) ' " " : You should not have seen this print! error?', kjn 1465 1461 END SUBROUTINE trd_mld_trc_zint 1466 1467 1462 SUBROUTINE trd_mld_trc_init ! Empty routine 1468 1463 WRITE(*,*) 'trd_mld_trc_init: You should not have seen this print! error?' -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/TRP/trdmod_trc_oce.F90
r2643 r2690 8 8 !! 'key_top' TOP models 9 9 !!---------------------------------------------------------------------- 10 11 10 USE par_oce ! ocean parameters 12 11 USE par_trc ! passive tracers parameters … … 23 22 CHARACTER(len=50) :: cn_trdrst_trc_in !: suffix of pass. tracer restart name (input) 24 23 CHARACTER(len=50) :: cn_trdrst_trc_out !: suffix of pass. tracer restart name (output) 25 LOGICAL, DIMENSION (jptra) :: ln_trdtrc!: large trends diagnostic to write or not (namelist)24 LOGICAL, DIMENSION(jptra) :: ln_trdtrc !: large trends diagnostic to write or not (namelist) 26 25 27 26 # if defined key_trdtrc && defined key_iomput … … 117 116 !: upper triangle 118 117 #endif 119 120 118 !!---------------------------------------------------------------------- 121 119 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 122 120 !! $Header: /home/opalod/NEMOCVSROOT/NEMO/OPA_SRC/TRD/trdmld_oce.F90,v 1.2 2005/03/27 18:35:23 opalod Exp $ 123 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)121 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 124 122 !!---------------------------------------------------------------------- 125 123 CONTAINS … … 132 130 INTEGER :: ierr(2) 133 131 !!---------------------------------------------------------------------- 134 135 132 ierr(:) = 0 136 133 ! 137 134 # if defined key_trdmld_trc 138 135 ALLOCATE(nmld_trc(jpi,jpj), nbol_trc(jpi,jpj), & … … 149 146 tmlradn_trc(jpi,jpj,jptra), tmlradm_trc(jpi,jpj,jptra), & 150 147 ! 151 tmltrd_trc(jpi,jpj,jpltrd_trc,jptra) , &152 tmltrd_sum_trc(jpi,jpj,jpltrd_trc,jptra) , &153 tmltrd_csum_ln_trc(jpi,jpj,jpltrd_trc,jptra) , &154 tmltrd_csum_ub_trc(jpi,jpj,jpltrd_trc,jptra) , &148 tmltrd_trc(jpi,jpj,jpltrd_trc,jptra) , & 149 tmltrd_sum_trc(jpi,jpj,jpltrd_trc,jptra) , & 150 tmltrd_csum_ln_trc(jpi,jpj,jpltrd_trc,jptra) , & 151 tmltrd_csum_ub_trc(jpi,jpj,jpltrd_trc,jptra) , & 155 152 ! 156 tmltrdm_trc(jpi,jpj,jptra), & 157 Stat=ierr(1)) 153 tmltrdm_trc(jpi,jpj,jptra) , STAT=ierr(1) ) 158 154 #endif 159 155 ! 160 156 # if defined key_lobster 161 ALLOCATE(tmltrd_bio(jpi,jpj,jpdiabio), & 162 tmltrd_sum_bio(jpi,jpj,jpdiabio), & 163 tmltrd_csum_ln_bio(jpi,jpj,jpdiabio), & 164 tmltrd_csum_ub_bio(jpi,jpj,jpdiabio), & 165 Stat=ierr(2)) 157 ALLOCATE( tmltrd_bio (jpi,jpj,jpdiabio) , & 158 & tmltrd_sum_bio (jpi,jpj,jpdiabio) , & 159 & tmltrd_csum_ln_bio(jpi,jpj,jpdiabio) , & 160 & tmltrd_csum_ub_bio(jpi,jpj,jpdiabio) , STAT=ierr(2) ) 166 161 # endif 167 162 ! 168 163 trd_mod_trc_oce_alloc = MAXVAL(ierr) 169 170 IF( trd_mod_trc_oce_alloc /= 0 ) CALL ctl_warn('trd_mod_trc_oce_alloc 171 164 ! 165 IF( trd_mod_trc_oce_alloc /= 0 ) CALL ctl_warn('trd_mod_trc_oce_alloc: failed to allocate arrays') 166 ! 172 167 # if defined key_trdmld_trc 173 168 jpktrd_trc = jpk ! Initialise what used to be a parameter - max level for mixed-layer trends diag. -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/trc.F90
r2643 r2690 19 19 PUBLIC 20 20 21 PUBLIC trc_alloc! called by nemogcm.F9021 PUBLIC trc_alloc ! called by nemogcm.F90 22 22 23 23 !! passive tracers names and units (read in namelist) … … 36 36 !! passive tracers fields (before,now,after) 37 37 !! -------------------------------------------------- 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: cvol !: volume correction -degrad option-39 38 REAL(wp), PUBLIC :: trai !: initial total tracer 40 39 REAL(wp), PUBLIC :: areatot !: total volume 41 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) :: trn !: traceur concentration for actualtime step43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) :: tra !: traceur concentration for next time step44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) :: trb !: traceur concentration for before time step40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: cvol !: volume correction -degrad option- 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) :: trn !: traceur concentration for now time step 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) :: tra !: traceur concentration for next time step 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) :: trb !: traceur concentration for before time step 45 44 46 45 !! interpolated gradient 47 46 !!-------------------------------------------------- 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: gtru !: hor izontalgradient at u-points at bottom ocean level49 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: gtrv !: hor izontalgradient at v-points at bottom ocean level47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: gtru !: hor. gradient at u-points at bottom ocean level 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: gtrv !: hor. gradient at v-points at bottom ocean level 50 49 51 50 !! passive tracers restart (input and output) 52 51 !! ------------------------------------------ 53 LOGICAL , PUBLIC :: ln_rsttr!: boolean term for restart i/o for passive tracers (namelist)54 LOGICAL , PUBLIC :: lrst_trc!: logical to control the trc restart write55 INTEGER , PUBLIC :: nn_dttrc!: frequency of step on passive tracers56 INTEGER , PUBLIC :: nutwrs!: output FILE for passive tracers restart57 INTEGER , PUBLIC :: nutrst!: logical unit for restart FILE for passive tracers58 INTEGER , PUBLIC :: nn_rsttr!: control of the time step ( 0 or 1 ) for pass. tr.59 CHARACTER(len=50), PUBLIC :: cn_trcrst_in !: suffix of pass. tracer restart name (input)60 CHARACTER(len=50), PUBLIC :: cn_trcrst_out !: suffix of pass. tracer restart name (output)52 LOGICAL , PUBLIC :: ln_rsttr !: boolean term for restart i/o for passive tracers (namelist) 53 LOGICAL , PUBLIC :: lrst_trc !: logical to control the trc restart write 54 INTEGER , PUBLIC :: nn_dttrc !: frequency of step on passive tracers 55 INTEGER , PUBLIC :: nutwrs !: output FILE for passive tracers restart 56 INTEGER , PUBLIC :: nutrst !: logical unit for restart FILE for passive tracers 57 INTEGER , PUBLIC :: nn_rsttr !: control of the time step ( 0 or 1 ) for pass. tr. 58 CHARACTER(len=50), PUBLIC :: cn_trcrst_in !: suffix of pass. tracer restart name (input) 59 CHARACTER(len=50), PUBLIC :: cn_trcrst_out !: suffix of pass. tracer restart name (output) 61 60 62 61 !! information for outputs … … 68 67 !! additional 2D/3D outputs namelist 69 68 !! -------------------------------------------------- 70 INTEGER , PUBLIC:: nn_writedia !: frequency of additional arrays outputs(namelist)71 CHARACTER(len= 8), PUBLIC, DIMENSION 72 CHARACTER(len= 8), PUBLIC, DIMENSION 73 CHARACTER(len= 8), PUBLIC, DIMENSION 74 CHARACTER(len= 8), PUBLIC, DIMENSION 75 CHARACTER(len=80), PUBLIC, DIMENSION 76 CHARACTER(len=80), PUBLIC, DIMENSION 69 INTEGER , PUBLIC :: nn_writedia !: frequency of additional arrays outputs(namelist) 70 CHARACTER(len= 8), PUBLIC, DIMENSION(jpdia2d) :: ctrc2d !: 2d output field name 71 CHARACTER(len= 8), PUBLIC, DIMENSION(jpdia2d) :: ctrc2u !: 2d output field unit 72 CHARACTER(len= 8), PUBLIC, DIMENSION(jpdia3d) :: ctrc3d !: 3d output field name 73 CHARACTER(len= 8), PUBLIC, DIMENSION(jpdia3d) :: ctrc3u !: 3d output field unit 74 CHARACTER(len=80), PUBLIC, DIMENSION(jpdia2d) :: ctrc2l !: 2d output field long name 75 CHARACTER(len=80), PUBLIC, DIMENSION(jpdia3d) :: ctrc3l !: 3d output field long name 77 76 78 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION 79 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION 77 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:, :) :: trc2d !: additional 2d outputs 78 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trc3d !: additional 3d outputs 80 79 # endif 81 80 … … 90 89 !! Biological trends 91 90 !! ----------------- 92 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trbio !: biological trends91 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trbio !: biological trends 93 92 # endif 94 93 … … 101 100 102 101 !!---------------------------------------------------------------------- 103 !! NEMO/TOP 3.3 , NEMO Consortium (2010)102 !! NEMO/TOP 3.3.1 , NEMO Consortium (2010) 104 103 !! $Id$ 105 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)104 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 106 105 !!---------------------------------------------------------------------- 107 106 CONTAINS … … 114 113 !!------------------------------------------------------------------- 115 114 ! 116 ALLOCATE( cvol(jpi,jpj,jpk),&117 trn(jpi,jpj,jpk,jptra),&118 tra(jpi,jpj,jpk,jptra),&119 trb(jpi,jpj,jpk,jptra),&120 gtru(jpi,jpj,jptra), gtrv(jpi,jpj,jptra),&115 ALLOCATE( cvol(jpi,jpj,jpk ) , & 116 & trn (jpi,jpj,jpk,jptra) , & 117 & tra (jpi,jpj,jpk,jptra) , & 118 & trb (jpi,jpj,jpk,jptra) , & 119 & gtru(jpi,jpj ,jptra) , gtrv(jpi,jpj,jptra) , & 121 120 # if defined key_diatrc && ! defined key_iomput 122 trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d), &121 & trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d), & 123 122 # endif 124 123 # if defined key_diabio 125 trbio(jpi,jpj,jpk,jpdiabio), &124 & trbio(jpi,jpj,jpk,jpdiabio), & 126 125 #endif 127 rdttrc(jpk) , STAT=trc_alloc )126 rdttrc(jpk) , STAT=trc_alloc ) 128 127 129 128 IF( trc_alloc /= 0 ) CALL ctl_warn('trc_alloc: failed to allocate arrays') -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/trcdia.F90
r2643 r2690 57 57 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 58 58 !! $Id$ 59 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)59 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 60 60 !!---------------------------------------------------------------------- 61 61 CONTAINS 62 63 62 64 63 SUBROUTINE trc_dia( kt ) … … 68 67 !! ** Purpose : output passive tracers fields 69 68 !!--------------------------------------------------------------------- 70 INTEGER, INTENT( in ) :: kt 71 INTEGER :: kindic 69 INTEGER, INTENT(in) :: kt ! ocean time-step 70 ! 71 INTEGER :: kindic ! local integer 72 72 !!--------------------------------------------------------------------- 73 73 ! … … 95 95 !! IF kindic >0, output of fields before the time step loop 96 96 !!---------------------------------------------------------------------- 97 INTEGER, INTENT( in ) :: kt! ocean time-step98 INTEGER, INTENT( in ) :: kindic! indicator of abnormal termination99 ! !97 INTEGER, INTENT(in) :: kt ! ocean time-step 98 INTEGER, INTENT(in) :: kindic ! indicator of abnormal termination 99 ! 100 100 INTEGER :: jn 101 101 LOGICAL :: ll_print = .FALSE. … … 216 216 IF( kt == nitend .OR. kindic < 0 ) CALL histclo( nit5 ) 217 217 ! 218 219 218 END SUBROUTINE trcdit_wr 220 219 … … 237 236 !! IF kindic >0, output of fields before the time step loop 238 237 !!---------------------------------------------------------------------- 239 INTEGER, INTENT( in ) :: kt! ocean time-step240 INTEGER, INTENT( in ) :: kindic! indicator of abnormal termination238 INTEGER, INTENT(in) :: kt ! ocean time-step 239 INTEGER, INTENT(in) :: kindic ! indicator of abnormal termination 241 240 !! 242 241 LOGICAL :: ll_print = .FALSE. … … 364 363 # else 365 364 SUBROUTINE trcdii_wr( kt, kindic ) ! Dummy routine 366 INTEGER, INTENT ( in) :: kt, kindic365 INTEGER, INTENT (in) :: kt, kindic 367 366 END SUBROUTINE trcdii_wr 368 367 # endif … … 400 399 ! Initialisation 401 400 ! -------------- 402 403 401 404 402 ! local variable for debugging … … 485 483 IF( kt == nitend .OR. kindic < 0 ) CALL histclo( nitb ) 486 484 ! 487 488 485 END SUBROUTINE trcdib_wr 489 486 … … 500 497 !! *** ROUTINE trc_dia_alloc *** 501 498 !!--------------------------------------------------------------------- 502 503 499 ALLOCATE( ndext50(jpij*jpk), ndext51(jpij), STAT=trc_dia_alloc ) 504 505 IF( trc_dia_alloc /= 0 ) CALL ctl_warn('trc_dia_alloc : failed to allocate arrays.')506 500 ! 501 IF( trc_dia_alloc /= 0 ) CALL ctl_warn('trc_dia_alloc : failed to allocate arrays') 502 ! 507 503 END FUNCTION trc_dia_alloc 508 504 #else -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/trcdta.F90
r2649 r2690 23 23 PRIVATE 24 24 25 PUBLIC trc_dta ! called in trcini.F90 and trcdmp.F9026 PUBLIC trc_dta_alloc ! called in nemogcm.F9025 PUBLIC trc_dta ! called in trcini.F90 and trcdmp.F90 26 PUBLIC trc_dta_alloc ! called in nemogcm.F90 27 27 28 28 LOGICAL , PUBLIC, PARAMETER :: lk_dtatrc = .TRUE. !: temperature data flag … … 31 31 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) :: tracdta ! tracer data at two consecutive times 32 32 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) :: nlectr !: switch for reading once 33 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) :: ntrc1 !: number of first month when reading 12 monthly value34 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) :: ntrc2 !: number of second month when reading 12 monthly value33 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) :: ntrc1 !: number of 1st month when reading 12 monthly value 34 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) :: ntrc2 !: number of 2nd month when reading 12 monthly value 35 35 36 36 !! * Substitutions … … 39 39 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 40 40 !! $Id$ 41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 42 42 !!---------------------------------------------------------------------- 43 43 CONTAINS … … 56 56 !! two monthly values. 57 57 !!---------------------------------------------------------------------- 58 INTEGER, INTENT( in) :: kt ! ocean time-step58 INTEGER, INTENT(in) :: kt ! ocean time-step 59 59 !! 60 60 CHARACTER (len=39) :: clname(jptra) … … 199 199 END SUBROUTINE trc_dta 200 200 201 201 202 INTEGER FUNCTION trc_dta_alloc() 202 203 !!---------------------------------------------------------------------- 203 204 !! *** ROUTINE trc_dta_alloc *** 204 205 !!---------------------------------------------------------------------- 205 206 ALLOCATE(trdta(jpi,jpj,jpk,jptra), & 207 tracdta(jpi,jpj,jpk,jptra,2), & 208 nlectr(jptra), ntrc1(jptra), ntrc2(jptra), & 209 ! 210 STAT=trc_dta_alloc) 211 212 IF( trc_dta_alloc /= 0 ) CALL ctl_warn('trc_dta_alloc : failed to allocate arrays.') 213 206 ALLOCATE( trdta (jpi,jpj,jpk,jptra ) , & 207 & tracdta(jpi,jpj,jpk,jptra,2) , & 208 & nlectr(jptra) , ntrc1(jptra) , ntrc2(jptra) , STAT=trc_dta_alloc) 209 ! 210 IF( trc_dta_alloc /= 0 ) CALL ctl_warn('trc_dta_alloc : failed to allocate arrays') 211 ! 214 212 END FUNCTION trc_dta_alloc 215 213 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/trcini.F90
r2649 r2690 64 64 IF(lwp) WRITE(numout,*) '~~~~~~~' 65 65 66 67 66 CALL top_alloc() ! allocate TOP arrays 68 69 67 70 68 ! ! masked grid volume … … 183 181 !! ** Purpose : Allocate all the dynamic arrays of the OPA modules 184 182 !!---------------------------------------------------------------------- 185 !186 183 USE trcadv , ONLY: trc_adv_alloc ! TOP-related alloc routines... 187 184 USE trc , ONLY: trc_alloc … … 206 203 ! 207 204 ierr = trc_adv_alloc() ! Start of TOP-related alloc routines... 208 ierr = ierr + trc_alloc ()205 ierr = ierr + trc_alloc () 209 206 ierr = ierr + trc_nxt_alloc() 210 207 ierr = ierr + trc_zdf_alloc()
Note: See TracChangeset
for help on using the changeset viewer.