Changeset 2715 for trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_iso.F90
- Timestamp:
- 2011-03-30T17:58:35+02:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_iso.F90
r2528 r2715 4 4 !! Ocean dynamics: lateral viscosity trend 5 5 !!====================================================================== 6 !! History : OPA ! 97-07 (G. Madec) Original code 7 !! NEMO 1.0 ! 2002-08 (G. Madec) F90: Free form and module 8 !! - ! 2004-08 (C. Talandier) New trends organization 9 !! 2.0 ! 2005-11 (G. Madec) s-coordinate: horizontal diffusion 10 !!---------------------------------------------------------------------- 6 11 #if defined key_ldfslp || defined key_esopa 7 12 !!---------------------------------------------------------------------- … … 12 17 !! tal s-coordinate laplacian operator. 13 18 !!---------------------------------------------------------------------- 14 !! * Modules used15 19 USE oce ! ocean dynamics and tracers 16 20 USE dom_oce ! ocean space and time domain … … 23 27 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 24 28 USE in_out_manager ! I/O manager 29 USE lib_mpp ! MPP library 25 30 USE prtctl ! Print control 26 31 … … 28 33 PRIVATE 29 34 30 !! * Routine accessibility 31 PUBLIC dyn_ldf_iso ! called by step.F90 35 PUBLIC dyn_ldf_iso ! called by step.F90 36 PUBLIC dyn_ldf_iso_alloc ! called by nemogcm.F90 37 38 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfuw, zdiu, zdju, zdj1u ! 2D workspace (dyn_ldf_iso) 39 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfvw, zdiv, zdjv, zdj1v ! - - 32 40 33 41 !! * Substitutions … … 36 44 # include "vectopt_loop_substitute.h90" 37 45 !!---------------------------------------------------------------------- 38 !! NEMO/OPA 3.3 , NEMO Consortium (201 0)46 !! NEMO/OPA 3.3 , NEMO Consortium (2011) 39 47 !! $Id$ 40 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 41 !!---------------------------------------------------------------------- 42 48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 49 !!---------------------------------------------------------------------- 43 50 CONTAINS 51 52 INTEGER FUNCTION dyn_ldf_iso_alloc() 53 !!---------------------------------------------------------------------- 54 !! *** ROUTINE dyn_ldf_iso_alloc *** 55 !!---------------------------------------------------------------------- 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 ) 58 ! 59 IF( dyn_ldf_iso_alloc /= 0 ) CALL ctl_warn('dyn_ldf_iso_alloc: array allocate failed.') 60 END FUNCTION dyn_ldf_iso_alloc 61 44 62 45 63 SUBROUTINE dyn_ldf_iso( kt ) … … 86 104 !! Update (avmu,avmv) to accompt for the diagonal vertical component 87 105 !! of the rotated operator in dynzdf module 88 !!89 !! History :90 !! 8.0 ! 97-07 (G. Madec) Original code91 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module92 !! 9.0 ! 04-08 (C. Talandier) New trends organization93 !! ! 05-11 (G. Madec) s-coordinate: horizontal diffusion94 106 !!---------------------------------------------------------------------- 95 !! * Arguments 96 INTEGER, INTENT( in ) :: kt ! ocean time-step index 97 98 !! * Local declarations 99 INTEGER :: ji, jj, jk ! dummy loop indices 100 REAL(wp) :: & 101 zabe1, zabe2, zcof1, zcof2, & ! temporary scalars 102 zmskt, zmskf, zbu, zbv, & 103 zuah, zvah 104 REAL(wp), DIMENSION(jpi,jpj) :: & 105 ziut, zjuf, zjvt, zivf, & ! temporary workspace 106 zdku, zdk1u, zdkv, zdk1v 107 108 REAL(wp) :: & 109 zcoef0, zcoef3, zcoef4, zmkt, zmkf, & 110 zuav, zvav, zuwslpi, zuwslpj, zvwslpi, zvwslpj 111 REAL(wp), DIMENSION(jpi,jpk) :: & 112 zfuw, zdiu, zdju, zdj1u, & ! " " 113 zfvw, zdiv, zdjv, zdj1v 114 107 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 108 USE wrk_nemo, ONLY: ziut => wrk_2d_1 , zjuf => wrk_2d_2 , zjvt => wrk_2d_3 ! 2D workspace 109 USE wrk_nemo, ONLY: zivf => wrk_2d_4 , zdku => wrk_2d_5 , zdkv => wrk_2d_6 ! 2D workspace 110 USE wrk_nemo, ONLY: zdk1u => wrk_2d_7 , zdk1v => wrk_2d_8 111 ! 112 INTEGER, INTENT( in ) :: kt ! ocean time-step index 113 ! 114 INTEGER :: ji, jj, jk ! dummy loop indices 115 REAL(wp) :: zabe1, zabe2, zcof1, zcof2 ! local scalars 116 REAL(wp) :: zmskt, zmskf, zbu, zbv, zuah, zvah ! - - 117 REAL(wp) :: zcoef0, zcoef3, zcoef4, zmkt, zmkf ! - - 118 REAL(wp) :: zuav, zvav, zuwslpi, zuwslpj, zvwslpi, zvwslpj ! - - 115 119 !!---------------------------------------------------------------------- 120 121 IF( wrk_in_use(2, 1,2,3,4,5,6,7,8) ) THEN 122 CALL ctl_stop('dyn_ldf_iso: requested workspace arrays unavailable') ; RETURN 123 END IF 116 124 117 125 IF( kt == nit000 ) THEN … … 119 127 IF(lwp) WRITE(numout,*) 'dyn_ldf_iso : iso-neutral laplacian diffusive operator or ' 120 128 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ s-coordinate horizontal diffusive operator' 129 ! ! allocate dyn_ldf_bilap arrays 130 IF( dyn_ldf_iso_alloc() /= 0 ) CALL ctl_stop('STOP', 'dyn_ldf_iso: failed to allocate arrays') 121 131 ENDIF 122 132 123 !! s-coordinate: Iso-level diffusion on momentum but not on tracer133 ! s-coordinate: Iso-level diffusion on momentum but not on tracer 124 134 IF( ln_dynldf_hor .AND. ln_traldf_iso ) THEN 125 126 ! set the slopes of iso-level 127 DO jk = 1, jpk 135 ! 136 DO jk = 1, jpk ! set the slopes of iso-level 128 137 DO jj = 2, jpjm1 129 138 DO ji = fs_2, fs_jpim1 ! vector opt. … … 135 144 END DO 136 145 END DO 137 138 146 ! Lateral boundary conditions on the slopes 139 147 CALL lbc_lnk( uslp , 'U', -1. ) ; CALL lbc_lnk( vslp , 'V', -1. ) … … 141 149 142 150 !!bug 143 if( kt == nit000 ) then144 IF(lwp) WRITE(numout,*) ' max slop: u', SQRT( MAXVAL(uslp*uslp)), ' v ', SQRT(MAXVAL(vslp)), &145 & ' wi', sqrt(MAXVAL(wslpi)) , ' wj', sqrt(MAXVAL(wslpj))151 IF( kt == nit000 ) then 152 IF(lwp) WRITE(numout,*) ' max slop: u', SQRT( MAXVAL(uslp*uslp)), ' v ', SQRT(MAXVAL(vslp)), & 153 & ' wi', sqrt(MAXVAL(wslpi)) , ' wj', sqrt(MAXVAL(wslpj)) 146 154 endif 147 155 !!end … … 420 428 ! ! =============== 421 429 430 IF( wrk_not_released(2, 1,2,3,4,5,6,7,8) ) CALL ctl_stop('dyn_ldf_iso: failed to release workspace arrays') 431 ! 422 432 END SUBROUTINE dyn_ldf_iso 423 433 … … 428 438 CONTAINS 429 439 SUBROUTINE dyn_ldf_iso( kt ) ! Empty routine 440 INTEGER, INTENT(in) :: kt 430 441 WRITE(*,*) 'dyn_ldf_iso: You should not have seen this print! error?', kt 431 442 END SUBROUTINE dyn_ldf_iso
Note: See TracChangeset
for help on using the changeset viewer.