Changeset 2618 for branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM
- Timestamp:
- 2011-02-26T13:31:38+01:00 (13 years ago)
- Location:
- branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/dom_oce.F90
r2590 r2618 7 7 !! History : 1.0 ! 2005-10 (A. Beckmann, G. Madec) reactivate s-coordinate 8 8 !! 3.3 ! 2010-11 (G. Madec) add mbk. arrays associated to the deepest ocean level 9 !!---------------------------------------------------------------------- 10 USE par_oce ! ocean parameters 9 !! 4.0 ! 2011-01 (A. R. Porter, STFC Daresbury) dynamical allocation 10 !!---------------------------------------------------------------------- 11 12 !!---------------------------------------------------------------------- 13 !! Agrif_Root : dummy function used when lk_agrif=F 14 !! Agrif_CFixed : dummy function used when lk_agrif=F 15 !! dom_oce_alloc : dynamical allocation of dom_oce arrays 16 !!---------------------------------------------------------------------- 17 USE par_oce ! ocean parameters 11 18 12 19 IMPLICIT NONE 13 PUBLIC ! allows the acces to par_oce when dom_oce is used 14 ! ! exception to coding rules... to be suppressed ??? 20 PUBLIC ! allows the acces to par_oce when dom_oce is used 21 ! ! exception to coding rules... to be suppressed ??? 22 23 PUBLIC dom_oce_alloc ! Called from nemogcm.F90 15 24 16 25 !!---------------------------------------------------------------------- … … 44 53 REAL(wp), PUBLIC :: rdth !: depth variation of tracer step 45 54 INTEGER , PUBLIC :: nclosea !: =0 suppress closed sea/lake from the ORCA domain or not (=1) 46 47 55 48 56 ! !!! associated variables … … 216 224 #endif 217 225 218 PUBLIC dom_oce_alloc ! Called from nemogcm.F90219 220 226 !!---------------------------------------------------------------------- 221 227 !! agrif domain … … 227 233 #endif 228 234 235 !!---------------------------------------------------------------------- 236 !! NEMO/OPA 4.0 , NEMO Consortium (2011) 237 !! $Id$ 238 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 239 !!---------------------------------------------------------------------- 229 240 CONTAINS 230 241 231 242 #if ! defined key_agrif 243 !!---------------------------------------------------------------------- 244 !! NOT 'key_agrif' dummy function No AGRIF zoom 245 !!---------------------------------------------------------------------- 232 246 LOGICAL FUNCTION Agrif_Root() 233 247 Agrif_Root = .TRUE. … … 235 249 236 250 CHARACTER(len=3) FUNCTION Agrif_CFixed() 237 Agrif_CFixed = '0'251 Agrif_CFixed = '0' 238 252 END FUNCTION Agrif_CFixed 239 253 #endif 240 254 241 FUNCTION dom_oce_alloc() 242 !!---------------------------------------------------------------------- 243 USE par_oce, Only: jpi, jpj, jpk, jpnij 244 IMPLICIT none 245 INTEGER :: dom_oce_alloc 246 INTEGER, DIMENSION(11) :: ierr 247 248 ierr(:) = 0 249 250 ALLOCATE(rdttra(jpk), mig(jpi), mjg(jpj), Stat=ierr(1)) 251 252 ALLOCATE(nimppt(jpnij), njmppt(jpnij), & 253 ibonit(jpnij), ibonjt(jpnij), & 254 nlcit(jpnij), nlcjt(jpnij), & 255 nldit(jpnij), nldjt(jpnij), & 256 nleit(jpnij), nlejt(jpnij), Stat=ierr(2)) 257 258 ALLOCATE(glamt(jpi,jpj), glamu(jpi,jpj), & 259 glamv(jpi,jpj), glamf(jpi,jpj), & 260 gphit(jpi,jpj), gphiu(jpi,jpj), & 261 gphiv(jpi,jpj), gphif(jpi,jpj), & 262 e1t(jpi,jpj), e2t(jpi,jpj), & 263 e1u(jpi,jpj), e2u(jpi,jpj), & 264 e1v(jpi,jpj), e2v(jpi,jpj), & 265 e1f(jpi,jpj), e2f(jpi,jpj), & 266 ff(jpi,jpj), Stat=ierr(3)) 267 268 !IF( .not. lk_zco )THEN 269 ALLOCATE(gdep3w(jpi,jpj,jpk), & 270 gdept(jpi,jpj,jpk) , gdepw(jpi,jpj,jpk), & 271 e3v(jpi,jpj,jpk) , e3f(jpi,jpj,jpk) , & 272 e3t(jpi,jpj,jpk) , e3u(jpi,jpj,jpk) , & 273 e3vw(jpi,jpj,jpk) , & 274 e3w(jpi,jpj,jpk) , e3uw(jpi,jpj,jpk) , Stat=ierr(4)) 275 !END IF 255 INTEGER FUNCTION dom_oce_alloc() 256 !!---------------------------------------------------------------------- 257 INTEGER, DIMENSION(11) :: ierr 258 !!---------------------------------------------------------------------- 259 260 ierr(:) = 0 261 262 ALLOCATE( rdttra(jpk), mig(jpi), mjg(jpj), STAT=ierr(1) ) 263 264 ALLOCATE( nimppt(jpnij) , ibonit(jpnij) , nlcit(jpnij) , nlcjt(jpnij) , & 265 & njmppt(jpnij) , ibonjt(jpnij) , nldit(jpnij) , nldjt(jpnij) , & 266 & nleit(jpnij) , nlejt(jpnij) , STAT=ierr(2) ) 267 268 ALLOCATE( glamt(jpi,jpj), gphit(jpi,jpj), e1t(jpi,jpj), e2t(jpi,jpj), & 269 & glamu(jpi,jpj), gphiu(jpi,jpj), e1u(jpi,jpj), e2u(jpi,jpj), & 270 & glamv(jpi,jpj), gphiv(jpi,jpj), e1v(jpi,jpj), e2v(jpi,jpj), & 271 & glamf(jpi,jpj), gphif(jpi,jpj), e1f(jpi,jpj), e2f(jpi,jpj), ff(jpi,jpj), STAT=ierr(3) ) 272 273 ALLOCATE( gdep3w(jpi,jpj,jpk) , e3v(jpi,jpj,jpk) , e3f (jpi,jpj,jpk) , & 274 & gdept (jpi,jpj,jpk) , e3t(jpi,jpj,jpk) , e3u (jpi,jpj,jpk) , & 275 & gdepw (jpi,jpj,jpk) , e3w(jpi,jpj,jpk) , e3vw(jpi,jpj,jpk) , e3uw(jpi,jpj,jpk) , STAT=ierr(4) ) 276 276 277 277 #if defined key_vvl 278 ALLOCATE(gdep3w_1(jpi,jpj,jpk) , & 279 gdept_1(jpi,jpj,jpk), gdepw_1(jpi,jpj,jpk), & 280 e3v_1(jpi,jpj,jpk) , e3f_1(jpi,jpj,jpk) , & 281 e3t_1(jpi,jpj,jpk) , e3u_1(jpi,jpj,jpk) , & 282 e3vw_1(jpi,jpj,jpk) , & 283 e3w_1(jpi,jpj,jpk) , e3uw_1(jpi,jpj,jpk), & 284 e3t_b(jpi,jpj,jpk) , & 285 e3u_b(jpi,jpj,jpk) , e3v_b(jpi,jpj,jpk), & 286 Stat=ierr(5)) 287 #endif 288 289 ALLOCATE(hur(jpi,jpj), hvr(jpi,jpj), & 290 hu(jpi,jpj), hv(jpi,jpj), & 291 hu_0(jpi,jpj), hv_0(jpi,jpj),& 292 Stat=ierr(6)) 278 ALLOCATE( gdep3w_1(jpi,jpj,jpk) , e3v_1(jpi,jpj,jpk) , e3f_1 (jpi,jpj,jpk) , & 279 & gdept_1 (jpi,jpj,jpk) , e3t_1(jpi,jpj,jpk) , e3u_1 (jpi,jpj,jpk) , & 280 & gdepw_1 (jpi,jpj,jpk) , e3w_1(jpi,jpj,jpk) , e3vw_1(jpi,jpj,jpk) , e3uw_1(jpi,jpj,jpk) , & 281 & e3t_b (jpi,jpj,jpk) , e3u_b(jpi,jpj,jpk) , e3v_b(jpi,jpj,jpk) , STAT=ierr(5) ) 282 #endif 283 284 ALLOCATE( hu(jpi,jpj) , hur(jpi,jpj) , hu_0(jpi,jpj) , & 285 & hv(jpi,jpj) , hvr(jpi,jpj) , hv_0(jpi,jpj) , STAT=ierr(6) ) 286 287 ALLOCATE( gdept_0(jpk) , gdepw_0(jpk) , & 288 & e3t_0 (jpk) , e3w_0 (jpk) , e3tp (jpi,jpj), e3wp(jpi,jpj) , & 289 & gsigt (jpk) , gsigw (jpk) , gsi3w(jpk) , & 290 & esigt (jpk) , esigw (jpk) , STAT=ierr(7) ) 293 291 ! 294 ALLOCATE(gdept_0(jpk), gdepw_0(jpk), e3t_0(jpk), & 295 e3w_0(jpk) , e3tp(jpi,jpj), e3wp(jpi,jpj), & 296 gsigt(jpk) , gsigw(jpk) , gsi3w(jpk), & 297 esigt(jpk) , esigw(jpk) , Stat=ierr(7)) 298 ! 299 ALLOCATE(hbatv(jpi,jpj) , hbatf(jpi,jpj) , & 300 hbatt(jpi,jpj) , hbatu(jpi,jpj) , & 301 scosrf(jpi,jpj), scobot(jpi,jpj), & 302 hifv(jpi,jpj) , hiff(jpi,jpj) , & 303 hift(jpi,jpj) , hifu(jpi,jpj) , & 304 Stat=ierr(8)) 305 ! 306 ALLOCATE(mbathy(jpi,jpj), & 307 mbkt(jpi,jpj), mbku(jpi,jpj), mbkv(jpi,jpj), & 308 bathy(jpi,jpj), & 309 tmask_i(jpi,jpj),bmask(jpi,jpj), & 310 Stat=ierr(9)) 311 312 ALLOCATE(tmask(jpi,jpj,jpk), umask(jpi,jpj,jpk), & 313 vmask(jpi,jpj,jpk), fmask(jpi,jpj,jpk), & 314 Stat=ierr(10)) 292 ALLOCATE( hbatv (jpi,jpj) , hbatf (jpi,jpj) , & 293 & hbatt (jpi,jpj) , hbatu (jpi,jpj) , & 294 & scosrf(jpi,jpj) , scobot(jpi,jpj) , & 295 & hifv (jpi,jpj) , hiff (jpi,jpj) , & 296 & hift (jpi,jpj) , hifu (jpi,jpj) , STAT=ierr(8) ) 297 298 ALLOCATE( mbathy(jpi,jpj) , bathy(jpi,jpj) , & 299 & tmask_i(jpi,jpj) , bmask(jpi,jpj) , & 300 & mbkt (jpi,jpj) , mbku (jpi,jpj) , mbkv(jpi,jpj) , STAT=ierr(9) ) 301 302 ALLOCATE( tmask(jpi,jpj,jpk), umask(jpi,jpj,jpk), & 303 & vmask(jpi,jpj,jpk), fmask(jpi,jpj,jpk), STAT=ierr(10) ) 315 304 316 305 #if defined key_noslip_accurate 317 ALLOCATE(npcoa(4,jpk), nicoa(2*(jpi+jpj),4,jpk), njcoa(2*(jpi+jpj),4,jpk), & 318 Stat=ierr(11)) 319 #endif 320 321 dom_oce_alloc = MAXVAL(ierr) 322 323 END FUNCTION dom_oce_alloc 324 325 !!---------------------------------------------------------------------- 326 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 327 !! $Id$ 328 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 306 ALLOCATE( npcoa(4,jpk), nicoa(2*(jpi+jpj),4,jpk), njcoa(2*(jpi+jpj),4,jpk), STAT=ierr(11) ) 307 #endif 308 ! 309 dom_oce_alloc = MAXVAL(ierr) 310 ! 311 END FUNCTION dom_oce_alloc 312 329 313 !!====================================================================== 330 314 END MODULE dom_oce -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
r2590 r2618 27 27 PUBLIC dom_vvl_alloc ! called by nemogcm.F90 28 28 29 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:):: ee_t, ee_u, ee_v, ee_f !: ???30 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: mut , muu, muv, muf!: ???31 32 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:):: r2dt ! vertical profile time-step, = 2 rdttra33 ! ! except at nit000 (=rdttra) if neuler=029 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ee_t, ee_u, ee_v, ee_f !: ??? 30 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: mut , muu , muv , muf !: ??? 31 32 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: r2dt ! vertical profile time-step, = 2 rdttra 33 ! ! except at nit000 (=rdttra) if neuler=0 34 34 35 35 !! * Substitutions … … 37 37 # include "vectopt_loop_substitute.h90" 38 38 !!---------------------------------------------------------------------- 39 !! NEMO/OPA 3.3 , NEMO Consortium (2010)39 !! NEMO/OPA 4.0 , NEMO Consortium (2011) 40 40 !! $Id$ 41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 42 !!---------------------------------------------------------------------- 43 41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 42 !!---------------------------------------------------------------------- 44 43 CONTAINS 45 44 46 FUNCTION dom_vvl_alloc()45 INTEGER FUNCTION dom_vvl_alloc() 47 46 !!---------------------------------------------------------------------- 48 47 !! *** ROUTINE dom_vvl_alloc *** 49 48 !!---------------------------------------------------------------------- 50 IMPLICIT none 51 INTEGER :: dom_vvl_alloc 52 !!---------------------------------------------------------------------- 53 54 ALLOCATE(mut(jpi,jpj,jpk), muu(jpi,jpj,jpk), muv(jpi,jpj,jpk), & 55 muf(jpi,jpj,jpk), & 56 ee_t(jpi,jpj), ee_u(jpi,jpj), ee_v(jpi,jpj), ee_f(jpi,jpj), & 57 r2dt(jpk), Stat=dom_vvl_alloc) 58 59 IF(dom_vvl_alloc /= 0)THEN 60 CALL ctl_warn('dom_vvl_alloc: failed to allocate arrays') 61 END IF 62 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) 53 ! 54 IF( lk_mpp ) CALL mpp_sum ( dom_vvl_alloc ) 55 IF( dom_vvl_alloc /= 0 ) CALL ctl_warn('dom_vvl_alloc: failed to allocate arrays') 56 ! 63 57 END FUNCTION dom_vvl_alloc 64 58 … … 71 65 !! ssh over the whole water column (scale factors) 72 66 !!---------------------------------------------------------------------- 73 USE wrk_nemo, ONLY: wrk_use, wrk_release74 USE wrk_nemo, ONLY: zs_t => wrk_2d_1, zs_u_1 => wrk_2d_2, &75 67 USE wrk_nemo, ONLY: wrk_use, wrk_release 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 76 70 !! 77 71 INTEGER :: ji, jj, jk 78 REAL(wp) :: zcoefu , zcoefv , zcoeff ! temporaryscalars79 REAL(wp) :: zv_t_ij, zv_t_ip1j, zv_t_ijp1, zv_t_ip1jp1 ! --72 REAL(wp) :: zcoefu , zcoefv , zcoeff ! local scalars 73 REAL(wp) :: zv_t_ij, zv_t_ip1j, zv_t_ijp1, zv_t_ip1jp1 ! - - 80 74 !!---------------------------------------------------------------------- 81 75 82 76 IF(.not. wrk_use(2, 1,2,3))THEN 83 CALL ctl_stop('dom_vvl: ERROR - requested workspace arrays unavailable.') 84 RETURN 77 CALL ctl_stop('dom_vvl: ERROR - requested workspace arrays unavailable.') ; RETURN 85 78 END IF 86 79 87 IF(lwp) 80 IF(lwp) THEN 88 81 WRITE(numout,*) 89 WRITE(numout,*) 'dom_vvl : Variable volume activated'82 WRITE(numout,*) 'dom_vvl : Variable volume initialization' 90 83 WRITE(numout,*) '~~~~~~~~ compute coef. used to spread ssh over each layers' 91 84 ENDIF 92 85 86 IF( dom_vvl_alloc /= 0 ) CALL ctl_stop( 'STOP', 'dom_vvl : unable to allocate arrays' ) 93 87 94 88 fsdept(:,:,:) = gdept (:,:,:) -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DOM/domwri.F90
r2590 r2618 2 2 !!====================================================================== 3 3 !! *** MODULE domwri *** 4 !! Ocean initialization : write the ocean domain mesh askfile(s)4 !! Ocean initialization : write the ocean domain mesh file(s) 5 5 !!====================================================================== 6 6 !! History : OPA ! 1997-02 (G. Madec) Original code 7 7 !! 8.1 ! 1999-11 (M. Imbard) NetCDF FORMAT with IOIPSL 8 8 !! NEMO 1.0 ! 2002-08 (G. Madec) F90 and several file 9 !! 3.0 ! 2008-01 (S. Masson) add dom_uniq 10 !! 4.0 ! 2011-01 (A. R. Porter, STFC Daresbury) dynamical allocation 9 11 !!---------------------------------------------------------------------- 10 12 11 13 !!---------------------------------------------------------------------- 12 14 !! dom_wri : create and write mesh and mask file(s) 13 !! nmsh = 1 : mesh_mask file 14 !! = 2 : mesh and mask file 15 !! = 3 : mesh_hgr, mesh_zgr and mask 15 !! dom_uniq : 16 16 !!---------------------------------------------------------------------- 17 17 USE dom_oce ! ocean space and time domain … … 25 25 26 26 PUBLIC dom_wri ! routine called by inidom.F90 27 PUBLIC dom_wri_alloc ! routine called by nemogcm.F9028 29 LOGICAL, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: lldbl ! Used in dom_uniq to store whether each point is unique or not30 27 31 28 !! * Substitutions … … 37 34 !!---------------------------------------------------------------------- 38 35 CONTAINS 39 40 FUNCTION dom_wri_alloc()41 !!----------------------------------------------------------------------42 !! *** ROUTINE dom_wri_alloc ***43 !!----------------------------------------------------------------------44 INTEGER :: dom_wri_alloc45 !!----------------------------------------------------------------------46 47 ALLOCATE(lldbl(jpi,jpj,1), Stat = dom_wri_alloc)48 49 END FUNCTION dom_wri_alloc50 51 36 52 37 SUBROUTINE dom_wri … … 144 129 CALL iom_rstput( 0, 0, inum2, 'fmask', fmask, ktype = jp_i1 ) 145 130 146 CALL dom_uniq( zprw, 'T')131 CALL dom_uniq( zprw, 'T' ) 147 132 zprt = tmask(:,:,1) * zprw ! ! unique point mask 148 133 CALL iom_rstput( 0, 0, inum2, 'tmaskutil', zprt, ktype = jp_i1 ) 149 CALL dom_uniq( zprw, 'U')134 CALL dom_uniq( zprw, 'U' ) 150 135 zprt = umask(:,:,1) * zprw 151 136 CALL iom_rstput( 0, 0, inum2, 'umaskutil', zprt, ktype = jp_i1 ) 152 CALL dom_uniq( zprw, 'V')137 CALL dom_uniq( zprw, 'V' ) 153 138 zprt = vmask(:,:,1) * zprw 154 139 CALL iom_rstput( 0, 0, inum2, 'vmaskutil', zprt, ktype = jp_i1 ) 155 CALL dom_uniq( zprw, 'F')140 CALL dom_uniq( zprw, 'F' ) 156 141 zprt = fmask(:,:,1) * zprw 157 142 CALL iom_rstput( 0, 0, inum2, 'fmaskutil', zprt, ktype = jp_i1 ) … … 283 268 284 269 285 SUBROUTINE dom_uniq( puniq, cdgrd )270 SUBROUTINE dom_uniq( puniq, cdgrd ) 286 271 !!---------------------------------------------------------------------- 287 272 !! *** ROUTINE dom_uniq *** … … 296 281 USE wrk_nemo, ONLY: ztstref => wrk_2d_1 ! array with different values for each element 297 282 !! 298 CHARACTER(len=1) , INTENT(in ) ::cdgrd !299 REAL(wp), DIMENSION(:,:) , INTENT(inout) ::puniq !300 ! 301 REAL(wp) :: zshift! shift value link to the process number302 INTEGER :: ji! dummy loop indices303 !!----------------------------------------------------------------------304 305 IF(.not. wrk_use(2, 1))THEN 306 CALL ctl_stop('dom_uniq: ERROR - requested workspace array unavailable.')307 RETURN283 CHARACTER(len=1) , INTENT(in ) :: cdgrd ! 284 REAL(wp), DIMENSION(:,:), INTENT(inout) :: puniq ! 285 ! 286 REAL(wp) :: zshift ! shift value link to the process number 287 INTEGER :: ji ! dummy loop indices 288 LOGICAL, DIMENSION(SIZE(puniq,1),SIZE(puniq,2),1) :: lldbl ! store whether each point is unique or not 289 !!---------------------------------------------------------------------- 290 291 IF( .not. wrk_use(2, 1) ) THEN 292 CALL ctl_stop('dom_uniq: ERROR - requested workspace array unavailable.') ; RETURN 308 293 END IF 309 294
Note: See TracChangeset
for help on using the changeset viewer.