Changeset 3294 for trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf.F90
- Timestamp:
- 2012-01-28T17:44:18+01:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf.F90
r2715 r3294 29 29 USE lib_mpp ! distribued memory computing library 30 30 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 31 USE wrk_nemo ! Memory allocation 32 USE timing ! Timing 31 33 32 34 IMPLICIT NONE … … 59 61 INTEGER, INTENT( in ) :: kt ! ocean time-step index 60 62 !! 61 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdt, ztrds 62 !!---------------------------------------------------------------------- 63 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdt, ztrds 64 !!---------------------------------------------------------------------- 65 ! 66 IF( nn_timing == 1 ) CALL timing_start('tra_ldf') 67 ! 68 rldf = 1 ! For active tracers the 63 69 64 70 IF( l_trdtra ) THEN !* Save ta and sa trends 65 ALLOCATE( ztrdt(jpi,jpj,jpk) ) ; ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 66 ALLOCATE( ztrds(jpi,jpj,jpk) ) ; ztrds(:,:,:) = tsa(:,:,:,jp_sal) 71 CALL wrk_alloc( jpi, jpj, jpk, ztrdt, ztrds ) 72 ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 73 ztrds(:,:,:) = tsa(:,:,:,jp_sal) 67 74 ENDIF 68 75 69 76 SELECT CASE ( nldf ) ! compute lateral mixing trend and add it to the general trend 70 CASE ( 0 ) ; CALL tra_ldf_lap ( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts ) ! iso-level laplacian77 CASE ( 0 ) ; CALL tra_ldf_lap ( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts ) ! iso-level laplacian 71 78 CASE ( 1 ) ! rotated laplacian 72 79 IF( ln_traldf_grif ) THEN 73 CALL tra_ldf_iso_grif( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 ) ! Griffies operator80 CALL tra_ldf_iso_grif( kt, nit000,'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 ) ! Griffies operator 74 81 ELSE 75 CALL tra_ldf_iso ( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 ) ! Madec operator76 ENDIF 77 CASE ( 2 ) ; CALL tra_ldf_bilap ( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts ) ! iso-level bilaplacian78 CASE ( 3 ) ; CALL tra_ldf_bilapg ( kt, 'TRA', tsb, tsa, jpts ) ! s-coord. geopot. bilap.82 CALL tra_ldf_iso ( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 ) ! Madec operator 83 ENDIF 84 CASE ( 2 ) ; CALL tra_ldf_bilap ( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts ) ! iso-level bilaplacian 85 CASE ( 3 ) ; CALL tra_ldf_bilapg ( kt, nit000, 'TRA', tsb, tsa, jpts ) ! s-coord. geopot. bilap. 79 86 ! 80 87 CASE ( -1 ) ! esopa: test all possibility with control print 81 CALL tra_ldf_lap ( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts )88 CALL tra_ldf_lap ( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts ) 82 89 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' ldf0 - Ta: ', mask1=tmask, & 83 90 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 84 91 IF( ln_traldf_grif ) THEN 85 CALL tra_ldf_iso_grif( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 )92 CALL tra_ldf_iso_grif( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 ) 86 93 ELSE 87 CALL tra_ldf_iso ( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 )94 CALL tra_ldf_iso ( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 ) 88 95 ENDIF 89 96 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' ldf1 - Ta: ', mask1=tmask, & 90 97 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 91 CALL tra_ldf_bilap ( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts )98 CALL tra_ldf_bilap ( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts ) 92 99 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' ldf2 - Ta: ', mask1=tmask, & 93 100 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 94 CALL tra_ldf_bilapg( kt, 'TRA', tsb, tsa, jpts )101 CALL tra_ldf_bilapg( kt, nit000, 'TRA', tsb, tsa, jpts ) 95 102 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' ldf3 - Ta: ', mask1=tmask, & 96 103 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) … … 107 114 CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_ldf, ztrdt ) 108 115 CALL trd_tra( kt, 'TRA', jp_sal, jptra_trd_ldf, ztrds ) 109 DEALLOCATE( ztrdt ) ; DEALLOCATE(ztrds )116 CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 110 117 ENDIF 111 118 ! ! print mean trends (used for debugging) 112 119 IF(ln_ctl) CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' ldf - Ta: ', mask1=tmask, & 113 120 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 121 ! 122 IF( nn_timing == 1 ) CALL timing_stop('tra_ldf') 114 123 ! 115 124 END SUBROUTINE tra_ldf … … 154 163 IF( ln_traldf_hor ) ioptio = ioptio + 1 155 164 IF( ln_traldf_iso ) ioptio = ioptio + 1 156 IF( ioptio /=1 ) CALL ctl_stop( ' use only ONE direction (level/hor/iso)' )165 IF( ioptio > 1 ) CALL ctl_stop( ' use only ONE direction (level/hor/iso)' ) 157 166 158 167 ! defined the type of lateral diffusion from ln_traldf_... logicals … … 237 246 !! ** Purpose : initializations of 238 247 !!---------------------------------------------------------------------- 239 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released240 USE wrk_nemo, ONLY: zt_ref => wrk_3d_1, ztb => wrk_3d_2, zavt => wrk_3d_3 ! 3D workspaces241 USE wrk_nemo, ONLY: zs_ref => wrk_3d_4, zsb => wrk_3d_5 ! 3D workspaces242 248 ! 243 249 USE zdf_oce ! vertical mixing … … 249 255 LOGICAL :: llsave ! local logical 250 256 REAL(wp) :: zt0, zs0, z12 ! local scalar 251 !!---------------------------------------------------------------------- 252 253 IF( wrk_in_use(3, 1,2,3,4,5) ) THEN 254 CALL ctl_stop('ldf_ano : requested workspace arrays unavailable') ; RETURN 255 ENDIF 257 REAL(wp), POINTER, DIMENSION(:,:,:) :: zt_ref, zs_ref, ztb, zsb, zavt 258 !!---------------------------------------------------------------------- 259 ! 260 IF( nn_timing == 1 ) CALL timing_start('ldf_ano') 261 ! 262 CALL wrk_alloc( jpi, jpj, jpk, zt_ref, zs_ref, ztb, zsb, zavt ) 263 ! 256 264 257 265 IF(lwp) THEN … … 297 305 ! Compute the ldf trends 298 306 ! ---------------------- 299 CALL tra_ldf( nit000 +1 ) ! horizontal components (+1: no more init)300 CALL tra_zdf( nit000 ) ! vertical component (if necessary nit000 to performed the init)307 CALL tra_ldf( nit000 + 1 ) ! horizontal components (+1: no more init) 308 CALL tra_zdf( nit000 ) ! vertical component (if necessary nit000 to performed the init) 301 309 302 310 ! finalise the computation and recover all arrays … … 320 328 avt(:,:,:) = zavt(:,:,:) 321 329 ! 322 IF( wrk_not_released(3, 1,2,3,4,5) ) CALL ctl_stop('ldf_ano: failed to release workspace arrays') 330 CALL wrk_dealloc( jpi, jpj, jpk, zt_ref, zs_ref, ztb, zsb, zavt ) 331 ! 332 IF( nn_timing == 1 ) CALL timing_stop('ldf_ano') 323 333 ! 324 334 END SUBROUTINE ldf_ano
Note: See TracChangeset
for help on using the changeset viewer.