- Timestamp:
- 2011-02-26T13:31:38+01:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_iso.F90
r2590 r2618 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 … … 28 32 PRIVATE 29 33 30 !! * Routine accessibility 31 PUBLIC dyn_ldf_iso ! called by step.F90 32 PUBLIC dyn_ldf_iso_alloc ! called by nemogcm.F90 33 34 ! These are just workspace arrays but because they are (jpi,jpk) in extent 35 ! we can't use the arrays in wrk_nemo for them 36 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfuw, zdiu, zdju, zdj1u 37 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfvw, zdiv, zdjv, zdj1v 34 PUBLIC dyn_ldf_iso ! called by step.F90 35 PUBLIC dyn_ldf_iso_alloc ! called by nemogcm.F90 36 37 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfuw, zdiu, zdju, zdj1u ! 2D workspace (dyn_ldf_iso) 38 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfvw, zdiv, zdjv, zdj1v ! - - 38 39 39 40 !! * Substitutions … … 42 43 # include "vectopt_loop_substitute.h90" 43 44 !!---------------------------------------------------------------------- 44 !! NEMO/OPA 3.3 , NEMO Consortium (201 0)45 !! NEMO/OPA 3.3 , NEMO Consortium (2011) 45 46 !! $Id$ 46 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 47 !!---------------------------------------------------------------------- 48 47 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 48 !!---------------------------------------------------------------------- 49 49 CONTAINS 50 50 51 FUNCTION dyn_ldf_iso_alloc()51 INTEGER FUNCTION dyn_ldf_iso_alloc() 52 52 !!---------------------------------------------------------------------- 53 53 !! *** ROUTINE dyn_ldf_iso_alloc *** 54 54 !!---------------------------------------------------------------------- 55 INTEGER :: dyn_ldf_iso_alloc 56 !!---------------------------------------------------------------------- 57 58 ALLOCATE(zfuw(jpi,jpk), zdiu(jpi,jpk), zdju(jpi,jpk), zdj1u(jpi,jpk), & 59 zfvw(jpi,jpk), zdiv(jpi,jpk), zdjv(jpi,jpk), zdj1v(jpi,jpk), & 60 Stat=dyn_ldf_iso_alloc) 61 62 IF(dyn_ldf_iso_alloc /= 0)THEN 63 CALL ctl_warn('dyn_ldf_iso_alloc: array allocate failed.') 64 END IF 65 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 ! 66 61 END FUNCTION dyn_ldf_iso_alloc 67 62 … … 110 105 !! Update (avmu,avmv) to accompt for the diagonal vertical component 111 106 !! of the rotated operator in dynzdf module 112 !!113 !! History :114 !! 8.0 ! 97-07 (G. Madec) Original code115 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module116 !! 9.0 ! 04-08 (C. Talandier) New trends organization117 !! ! 05-11 (G. Madec) s-coordinate: horizontal diffusion118 107 !!---------------------------------------------------------------------- 119 USE wrk_nemo, ONLY: wrk_use, wrk_release 120 USE wrk_nemo, ONLY: ziut => wrk_2d_1, zjuf => wrk_2d_2, & ! temporary workspace 121 zjvt => wrk_2d_3, zivf => wrk_2d_4, & 122 zdku => wrk_2d_5, zdk1u => wrk_2d_6, & 123 zdkv => wrk_2d_7, zdk1v => wrk_2d_8 124 !! 125 !! * Arguments 126 INTEGER, INTENT( in ) :: kt ! ocean time-step index 127 128 !! * Local declarations 129 INTEGER :: ji, jj, jk ! dummy loop indices 130 REAL(wp) :: & 131 zabe1, zabe2, zcof1, zcof2, & ! temporary scalars 132 zmskt, zmskf, zbu, zbv, & 133 zuah, zvah 134 135 REAL(wp) :: & 136 zcoef0, zcoef3, zcoef4, zmkt, zmkf, & 137 zuav, zvav, zuwslpi, zuwslpj, zvwslpi, zvwslpj 138 108 USE wrk_nemo, ONLY: wrk_use, wrk_release 109 USE wrk_nemo, ONLY: ziut => wrk_2d_1 , zjuf => wrk_2d_2 , zjvt => wrk_2d_3 ! 2D workspace 110 USE wrk_nemo, ONLY: zivf => wrk_2d_4 , zdku => wrk_2d_5 , zdkv => wrk_2d_6 ! 2D workspace 111 USE wrk_nemo, ONLY: zdk1u => wrk_2d_7 , zdk1v => wrk_2d_8 112 ! 113 INTEGER, INTENT( in ) :: kt ! ocean time-step index 114 ! 115 INTEGER :: ji, jj, jk ! dummy loop indices 116 REAL(wp) :: zabe1, zabe2, zcof1, zcof2 ! local scalars 117 REAL(wp) :: zmskt, zmskf, zbu, zbv, zuah, zvah ! - - 118 REAL(wp) :: zcoef0, zcoef3, zcoef4, zmkt, zmkf ! - - 119 REAL(wp) :: zuav, zvav, zuwslpi, zuwslpj, zvwslpi, zvwslpj ! - - 139 120 !!---------------------------------------------------------------------- 140 121 141 IF( .NOT. wrk_use(2, 1,2,3,4,5,6,7,8))THEN 142 CALL ctl_stop('dyn_ldf_iso: requested workspace arrays unavailable.') 143 RETURN 122 IF( .NOT. wrk_use(2, 1,2,3,4,5,6,7,8) ) THEN 123 CALL ctl_stop('dyn_ldf_iso: requested workspace arrays unavailable.') ; RETURN 144 124 END IF 145 125 … … 148 128 IF(lwp) WRITE(numout,*) 'dyn_ldf_iso : iso-neutral laplacian diffusive operator or ' 149 129 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ s-coordinate horizontal diffusive operator' 130 ! ! allocate dyn_ldf_bilap arrays 131 IF( dyn_ldf_iso_alloc() /= 0 ) CALL ctl_stop('STOP', 'dyn_ldf_iso: failed to allocate arrays') 150 132 ENDIF 151 133 152 !! s-coordinate: Iso-level diffusion on momentum but not on tracer134 ! s-coordinate: Iso-level diffusion on momentum but not on tracer 153 135 IF( ln_dynldf_hor .AND. ln_traldf_iso ) THEN 154 155 ! set the slopes of iso-level 156 DO jk = 1, jpk 136 ! 137 DO jk = 1, jpk ! set the slopes of iso-level 157 138 DO jj = 2, jpjm1 158 139 DO ji = fs_2, fs_jpim1 ! vector opt. … … 164 145 END DO 165 146 END DO 166 167 147 ! Lateral boundary conditions on the slopes 168 148 CALL lbc_lnk( uslp , 'U', -1. ) ; CALL lbc_lnk( vslp , 'V', -1. ) … … 170 150 171 151 !!bug 172 if( kt == nit000 ) then173 IF(lwp) WRITE(numout,*) ' max slop: u', SQRT( MAXVAL(uslp*uslp)), ' v ', SQRT(MAXVAL(vslp)), &174 & ' wi', sqrt(MAXVAL(wslpi)) , ' wj', sqrt(MAXVAL(wslpj))152 IF( kt == nit000 ) then 153 IF(lwp) WRITE(numout,*) ' max slop: u', SQRT( MAXVAL(uslp*uslp)), ' v ', SQRT(MAXVAL(vslp)), & 154 & ' wi', sqrt(MAXVAL(wslpi)) , ' wj', sqrt(MAXVAL(wslpj)) 175 155 endif 176 156 !!end
Note: See TracChangeset
for help on using the changeset viewer.