Changeset 2690
- Timestamp:
- 2011-03-15T16:27:46+01:00 (10 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 3