Changeset 2625 for branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN
- Timestamp:
- 2011-02-27T17:36:24+01:00 (13 years ago)
- Location:
- branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90
r2618 r2625 336 336 IF( ln_rnf ) CALL sbc_rnf_div( hdivn ) ! runoffs (update hdivn field) 337 337 IF( nn_cla == 1 ) CALL cla_div ( kt ) ! Cross Land Advection (update hdivn field) 338 339 ! 4. Lateral boundary conditions on hdivn and rotn 340 ! ---------------------------------=======---====== 338 ! 341 339 CALL lbc_lnk( hdivn, 'T', 1. ) ; CALL lbc_lnk( rotn , 'F', 1. ) ! lateral boundary cond. (no sign change) 342 340 ! -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv.F90
r2528 r2625 38 38 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 39 39 !! $Id$ 40 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)40 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 41 41 !!---------------------------------------------------------------------- 42 43 42 CONTAINS 44 43 … … 58 57 !!---------------------------------------------------------------------- 59 58 ! 60 SELECT CASE ( nadv ) 59 SELECT CASE ( nadv ) ! compute advection trend and add it to general trend 61 60 CASE ( 0 ) 62 61 CALL dyn_keg ( kt ) ! vector form : horizontal gradient of kinetic energy -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv_cen2.F90
r2590 r2625 29 29 # include "vectopt_loop_substitute.h90" 30 30 !!---------------------------------------------------------------------- 31 !! NEMO/OPA 3.2 , LODYC-IPSL (2009)31 !! NEMO/OPA 4.0 , NEMO Consortium (2011) 32 32 !! $Id$ 33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 34 34 !!---------------------------------------------------------------------- 35 36 35 CONTAINS 37 36 … … 47 46 !! ** Action : (ua,va) updated with the now vorticity term trend 48 47 !!---------------------------------------------------------------------- 49 USE oce, ONLY: zfu => ta ! use ta as 3D workspace 50 USE oce, ONLY: zfv => sa ! use sa as 3D workspace 51 USE wrk_nemo, ONLY: zfu_t => wrk_3d_1, & ! 3D workspaces 52 zfu_f => wrk_3d_2, & 53 zfu_uw =>wrk_3d_3, & 54 zfv_t => wrk_3d_4, & 55 zfv_f => wrk_3d_5, & 56 zfv_vw =>wrk_3d_6, & 57 zfw => wrk_3d_7, & 58 wrk_use, wrk_release 59 IMPLICIT none 48 USE wrk_nemo, ONLY: wrk_use, wrk_release 49 USE oce , ONLY: zfu => ta ! use ta as 3D workspace 50 USE oce , ONLY: zfv => sa ! use sa as 3D workspace 51 USE wrk_nemo, ONLY: zfu_t => wrk_3d_1 , zfv_t => wrk_3d_4 , zfu_uw =>wrk_3d_6 ! 3D workspaces 52 USE wrk_nemo, ONLY: zfu_f => wrk_3d_2 , zfv_f => wrk_3d_5 , zfv_vw =>wrk_3d_7 53 USE wrk_nemo, ONLY: zfw => wrk_3d_3 60 54 !! 61 55 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 65 59 !!---------------------------------------------------------------------- 66 60 67 IF( kt == nit000 ) THEN68 IF(lwp)WRITE(numout,*)69 IF(lwp)WRITE(numout,*) 'dyn_adv_cen2 : 2nd order flux form momentum advection'70 IF(lwp)WRITE(numout,*) '~~~~~~~~~~~~'61 IF( kt == nit000 .AND. lwp ) THEN 62 WRITE(numout,*) 63 WRITE(numout,*) 'dyn_adv_cen2 : 2nd order flux form momentum advection' 64 WRITE(numout,*) '~~~~~~~~~~~~' 71 65 ENDIF 72 66 73 67 ! Check that global workspace arrays aren't already in use 74 IF( .not. wrk_use(3, 1, 2, 3, 4, 5, 6, 7) )THEN 75 IF(lwp) WRITE(numout, *) 'dyn_adv_cen2 : run-time error - global workspace arrays already in use.' 76 CALL ctl_stop('dyn_adv_cen2 : run-time error - global workspace arrays already in use.') 68 IF( .not. wrk_use(3, 1,2,3,4,5,6,7) ) THEN 69 CALL ctl_stop('dyn_adv_cen2 : requested workspace array unavailable') ; RETURN 77 70 END IF 78 71 … … 169 162 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 170 163 ! 171 ! Flag that the global workspace arrays are no longer in use 172 IF( .not. wrk_release(3, 1, 2, 3, 4, 5, 6, 7) )THEN 173 IF(lwp) WRITE(numout, *) 'dyn_adv_cen2 : run-time error - failed to release global workspace arrays.' 174 END IF 164 IF( .not. wrk_release(3, 1,2,3,4,5,6,7) ) CALL ctl_stop('dyn_adv_cen2 : failed to release workspace array') 175 165 ! 176 166 END SUBROUTINE dyn_adv_cen2 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv_ubs.F90
r2590 r2625 34 34 # include "vectopt_loop_substitute.h90" 35 35 !!---------------------------------------------------------------------- 36 !! NEMO/OPA 3.2 , LODYC-IPSL (2009)36 !! NEMO/OPA 4.0 , NEMO Consortium (2011) 37 37 !! $Id$ 38 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 39 !!---------------------------------------------------------------------- 40 38 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 39 !!---------------------------------------------------------------------- 41 40 CONTAINS 42 41 … … 68 67 !! Reference : Shchepetkin & McWilliams, 2005, Ocean Modelling. 69 68 !!---------------------------------------------------------------------- 70 USE oce, ONLY: zfu => ta ! use ta as 3D workspace 71 USE oce, ONLY: zfv => sa ! use sa as 3D workspace 72 USE wrk_nemo, ONLY: wrk_use, wrk_release 73 USE wrk_nemo, ONLY: zfu_t =>wrk_3d_1, & 74 zfu_f =>wrk_3d_2, & 75 zfv_t =>wrk_3d_3, & 76 zfv_f =>wrk_3d_4, & 77 zfw =>wrk_3d_5, & 78 zfu_uw =>wrk_3d_6, & 79 zfv_vw =>wrk_3d_7 80 USE wrk_nemo, ONLY: zlu_uu=>wrk_4d_1, & 81 zlu_uv=>wrk_4d_2, & 82 zlv_vv=>wrk_4d_3, & 83 zlv_vu=>wrk_4d_4 84 !! 69 USE wrk_nemo, ONLY: wrk_use, wrk_release 70 USE oce , ONLY: zfu => ta ! ta used as 3D workspace 71 USE oce , ONLY: zfv => sa ! sa used as 3D workspace 72 USE wrk_nemo, ONLY: zfu_t => wrk_3d_1 , zfv_t =>wrk_3d_4 , zfu_uw =>wrk_3d_6 ! 3D workspace 73 USE wrk_nemo, ONLY: zfu_f => wrk_3d_2 , zfv_f =>wrk_3d_5 , zfv_vw =>wrk_3d_7 74 USE wrk_nemo, ONLY: zfw => wrk_3d_3 75 USE wrk_nemo, ONLY: zlu_uu => wrk_4d_1 , zlv_vv=>wrk_4d_3 ! 4D workspace 76 USE wrk_nemo, ONLY: zlu_uv => wrk_4d_2 , zlv_vu=>wrk_4d_4 77 ! 85 78 INTEGER, INTENT(in) :: kt ! ocean time-step index 86 ! !79 ! 87 80 INTEGER :: ji, jj, jk ! dummy loop indices 88 81 REAL(wp) :: zbu, zbv ! temporary scalars 89 82 REAL(wp) :: zui, zvj, zfuj, zfvi, zl_u, zl_v ! temporary scalars 90 ! ARPDBG - arrays below replaced with global work spaces91 !!$ REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfu_t, zfu_f ! temporary workspace92 !!$ REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfv_t, zfv_f ! " "93 !!$ REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfw, zfu_uw, zfv_vw94 !!$ REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: zlu_uu, zlu_uv ! temporary workspace95 !!$ REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: zlv_vv, zlv_vu ! temporary workspace96 83 !!---------------------------------------------------------------------- 97 84 … … 103 90 104 91 ! Check that required workspace arrays are not already in use 105 IF( .not. wrk_use(3, 1, 2, 3, 4, 5, 6, 7) )THEN106 CALL ctl_stop('dyn_adv_ubs : error : required 3d workspace array is already in use')92 IF( .not. wrk_use(3, 1,2,3,4,5,6,7) .AND. .not. wrk_use(4, 1,2,3,4) ) THEN 93 CALL ctl_stop('dyn_adv_ubs : requested workspace array unavailable') ; RETURN 107 94 END IF 108 IF(.not. wrk_use(4, 1, 2, 3, 4) )THEN 109 CALL ctl_stop('dyn_adv_ubs : error : required 4d workspace array is already in use') 110 END IF 111 112 zfu_t(:,:,:) = 0.e0 113 zfv_t(:,:,:) = 0.e0 114 zfu_f(:,:,:) = 0.e0 115 zfv_f(:,:,:) = 0.e0 116 ! 117 zlu_uu(:,:,:,:) = 0.e0 118 zlv_vv(:,:,:,:) = 0.e0 119 zlu_uv(:,:,:,:) = 0.e0 120 zlv_vu(:,:,:,:) = 0.e0 95 96 zfu_t(:,:,:) = 0._wp 97 zfv_t(:,:,:) = 0._wp 98 zfu_f(:,:,:) = 0._wp 99 zfv_f(:,:,:) = 0._wp 100 ! 101 zlu_uu(:,:,:,:) = 0._wp 102 zlv_vv(:,:,:,:) = 0._wp 103 zlu_uv(:,:,:,:) = 0._wp 104 zlv_vu(:,:,:,:) = 0._wp 121 105 122 106 IF( l_trddyn ) THEN ! Save ua and va trends … … 138 122 zlu_uv(ji,jj,jk,1) = ( ub (ji,jj+1,jk)-2.*ub (ji,jj,jk)+ub (ji,jj-1,jk) ) * umask(ji,jj,jk) 139 123 zlv_vu(ji,jj,jk,1) = ( vb (ji+1,jj,jk)-2.*vb (ji,jj,jk)+vb (ji-1,jj,jk) ) * vmask(ji,jj,jk) 140 124 ! 141 125 zlu_uu(ji,jj,jk,2) = ( zfu(ji+1,jj,jk)-2.*zfu(ji,jj,jk)+zfu(ji-1,jj,jk) ) * umask(ji,jj,jk) 142 126 zlv_vv(ji,jj,jk,2) = ( zfv(ji,jj+1,jk)-2.*zfv(ji,jj,jk)+zfv(ji,jj-1,jk) ) * vmask(ji,jj,jk) … … 147 131 END DO 148 132 !!gm BUG !!! just below this should be +1 in all the communications 149 CALL lbc_lnk( zlu_uu(:,:,:,1), 'U', -1.) ; CALL lbc_lnk( zlu_uv(:,:,:,1), 'U', -1.)150 CALL lbc_lnk( zlu_uu(:,:,:,2), 'U', -1.) ; CALL lbc_lnk( zlu_uv(:,:,:,2), 'U', -1.)151 CALL lbc_lnk( zlv_vv(:,:,:,1), 'V', -1.) ; CALL lbc_lnk( zlv_vu(:,:,:,1), 'V', -1.)152 CALL lbc_lnk( zlv_vv(:,:,:,2), 'V', -1.) ; CALL lbc_lnk( zlv_vu(:,:,:,2), 'V', -1.) 153 133 ! CALL lbc_lnk( zlu_uu(:,:,:,1), 'U', -1.) ; CALL lbc_lnk( zlu_uv(:,:,:,1), 'U', -1.) 134 ! CALL lbc_lnk( zlu_uu(:,:,:,2), 'U', -1.) ; CALL lbc_lnk( zlu_uv(:,:,:,2), 'U', -1.) 135 ! CALL lbc_lnk( zlv_vv(:,:,:,1), 'V', -1.) ; CALL lbc_lnk( zlv_vu(:,:,:,1), 'V', -1.) 136 ! CALL lbc_lnk( zlv_vv(:,:,:,2), 'V', -1.) ; CALL lbc_lnk( zlv_vu(:,:,:,2), 'V', -1.) 137 ! 154 138 !!gm corrected: 155 139 CALL lbc_lnk( zlu_uu(:,:,:,1), 'U', 1. ) ; CALL lbc_lnk( zlu_uv(:,:,:,1), 'U', 1. ) … … 270 254 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 271 255 ! 272 ! Signal that we're done with the 3D and 4D global workspace arrays 273 IF( (.not. wrk_release(3, 1, 2, 3, 4, 5, 6, 7)) .OR. & 274 (.not. wrk_release(4, 1, 2, 3, 4)) )THEN 275 IF(lwp) WRITE(numout,*) 'dyn_adv_ubs : failed to release workspace arrays' 276 END IF 256 IF( .not. wrk_release(3, 1,2,3,4,5,6,7) .OR. & 257 .not. wrk_release(4, 1,2,3,4) ) CALL ctl_stop('dyn_adv_ubs : failed to release workspace array') 277 258 ! 278 259 END SUBROUTINE dyn_adv_ubs -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90
r2590 r2625 77 77 !!---------------------------------------------------------------------- 78 78 USE wrk_nemo, ONLY: wrk_use, wrk_release 79 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_2 79 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_2 ! 3D workspace 80 80 !! 81 81 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 83 83 !!---------------------------------------------------------------------- 84 84 ! 85 IF(.NOT. wrk_use(3, 1,2))THEN 86 CALL ctl_stop('dyn_hpg: requested workspace arrays are unavailable.') 87 RETURN 85 IF(.NOT. wrk_use(3, 1,2) ) THEN 86 CALL ctl_stop('dyn_hpg: requested workspace arrays are unavailable') ; RETURN 88 87 END IF 89 88 ! … … 112 111 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 113 112 ! 114 IF(.NOT. wrk_release(3, 1,2))THEN 115 CALL ctl_stop('dyn_hpg: failed to release workspace arrays.') 116 END IF 113 IF(.NOT. wrk_release(3, 1,2) ) CALL ctl_stop('dyn_hpg: failed to release workspace arrays') 117 114 ! 118 115 END SUBROUTINE dyn_hpg … … 606 603 USE oce, ONLY : zhpj => sa ! use sa as 3D workspace 607 604 USE wrk_nemo, ONLY: wrk_use, wrk_release 608 USE wrk_nemo, ONLY: drhox => wrk_3d_1 , dzx => wrk_3d_2609 USE wrk_nemo, ONLY: drhou => wrk_3d_3 , dzu => wrk_3d_4, rho_i => wrk_3d_5610 USE wrk_nemo, ONLY: drhoy => wrk_3d_6 , dzy => wrk_3d_7611 USE wrk_nemo, ONLY: drhov => wrk_3d_8 , dzv => wrk_3d_9, rho_j => wrk_3d_10612 USE wrk_nemo, ONLY: drhoz => wrk_3d_11 , dzz => wrk_3d_12613 USE wrk_nemo, ONLY: drhow => wrk_3d_13 , dzw => wrk_3d_14605 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 614 611 USE wrk_nemo, ONLY: rho_k => wrk_3d_15 615 612 !! … … 622 619 !!---------------------------------------------------------------------- 623 620 624 IF(.NOT. wrk_use(3, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15))THEN 625 CALL ctl_stop('dyn:hpg_djc : requested workspace arrays unavailable.') 626 RETURN 621 IF(.NOT. wrk_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 : requested workspace arrays unavailable') ; RETURN 627 623 END IF 628 624 … … 823 819 END DO 824 820 ! 825 IF(.NOT. wrk_release(3, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) )THEN821 IF(.NOT. wrk_release(3, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) ) & 826 822 CALL ctl_stop('dyn:hpg_djc : failed to release workspace arrays.') 827 END IF828 823 ! 829 824 END SUBROUTINE hpg_djc … … 841 836 USE oce, ONLY : zhpj => sa ! use sa as 3D workspace 842 837 USE wrk_nemo, ONLY: wrk_use, wrk_release 843 USE wrk_nemo, ONLY: zdistr => wrk_2d_1, zsina => wrk_2d_2, & 844 zcosa => wrk_2d_3 845 USE wrk_nemo, ONLY: zhpiorg => wrk_3d_1, zhpirot => wrk_3d_2 846 USE wrk_nemo, ONLY: zhpitra => wrk_3d_3, zhpine => wrk_3d_4 847 USE wrk_nemo, ONLY: zhpjorg => wrk_3d_5, zhpjrot => wrk_3d_6 848 USE wrk_nemo, ONLY: zhpjtra => wrk_3d_7, zhpjne => wrk_3d_8 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 849 843 !! 850 844 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 855 849 !!---------------------------------------------------------------------- 856 850 857 IF( (.NOT. wrk_use(2, 1,2,3)) .OR. & 858 (.NOT. wrk_use(3, 1,2,3,4,5,6,7,8)))THEN 859 CALL ctl_stop('dyn:hpg_rot : requested workspace arrays unavailable.') 860 RETURN 851 IF( .NOT. wrk_use(2, 1,2,3) .OR. & 852 .NOT. wrk_use(3, 1,2,3,4,5,6,7,8) ) THEN 853 CALL ctl_stop('dyn:hpg_rot : requested workspace arrays unavailable') ; RETURN 861 854 END IF 862 855 … … 1016 1009 END DO 1017 1010 ! 1018 IF( (.NOT. wrk_release(2, 1,2,3)) .OR. & 1019 (.NOT. wrk_release(3, 1,2,3,4,5,6,7,8)))THEN 1020 CALL ctl_stop('dyn:hpg_rot : failed to release workspace arrays.') 1021 END IF 1011 IF( .NOT. wrk_release(2, 1,2,3) .OR. & 1012 .NOT. wrk_release(3, 1,2,3,4,5,6,7,8) ) CALL ctl_stop('dyn:hpg_rot : failed to release workspace arrays') 1022 1013 ! 1023 1014 END SUBROUTINE hpg_rot -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynkeg.F90
r2590 r2625 29 29 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 30 30 !! $Id$ 31 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)31 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 32 32 !!---------------------------------------------------------------------- 33 34 33 CONTAINS 35 34 … … 52 51 !! - save this trends (l_trddyn=T) for post-processing 53 52 !!---------------------------------------------------------------------- 54 USE oce, ONLY : ztrdu => ta ! use ta as 3D workspace 55 USE oce, ONLY : ztrdv => sa ! use sa as 3D workspace 56 USE wrk_nemo, ONLY: wrk_use, wrk_release 57 USE wrk_nemo, ONLY: zhke => wrk_3d_1 53 USE wrk_nemo, ONLY: wrk_use, wrk_release 54 USE oce , ONLY: ztrdu => ta , ztrdv => sa ! (ta,sa) used as 3D workspace 55 USE wrk_nemo, ONLY: zhke => wrk_3d_1 ! 3D workspace 58 56 !! 59 57 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 63 61 !!---------------------------------------------------------------------- 64 62 65 IF(.NOT. wrk_use(3,1) )THEN66 CALL ctl_stop('dyn_key: requested workspace array is unavailable.') 67 END 63 IF(.NOT. wrk_use(3,1) ) THEN 64 CALL ctl_stop('dyn_key: requested workspace array is unavailable.') ; RETURN 65 ENDIF 68 66 69 67 IF( kt == nit000 ) THEN … … 88 86 & + vn(ji ,jj ,jk) * vn(ji ,jj ,jk) ) 89 87 zhke(ji,jj,jk) = zv + zu 88 !!gm simplier coding ==>> ~ faster 89 ! don't forget to suppress local zu zv scalars 90 ! zhke(ji,jj,jk) = 0.25 * ( un(ji-1,jj ,jk) * un(ji-1,jj ,jk) & 91 ! & + un(ji ,jj ,jk) * un(ji ,jj ,jk) & 92 ! & + vn(ji ,jj-1,jk) * vn(ji ,jj-1,jk) & 93 ! & + vn(ji ,jj ,jk) * vn(ji ,jj ,jk) ) 94 !!gm end <<== 90 95 END DO 91 96 END DO … … 96 101 END DO 97 102 END DO 103 !!gm idea to be tested ==>> is it faster on scalar computers ? 104 ! DO jj = 2, jpjm1 ! add the gradient of kinetic energy to the general momentum trends 105 ! DO ji = fs_2, fs_jpim1 ! vector opt. 106 ! ua(ji,jj,jk) = ua(ji,jj,jk) - 0.25 * ( + un(ji+1,jj ,jk) * un(ji+1,jj ,jk) & 107 ! & + vn(ji+1,jj-1,jk) * vn(ji+1,jj-1,jk) & 108 ! & + vn(ji+1,jj ,jk) * vn(ji+1,jj ,jk) & 109 ! ! 110 ! & - un(ji-1,jj ,jk) * un(ji-1,jj ,jk) & 111 ! & - vn(ji ,jj-1,jk) * vn(ji ,jj-1,jk) & 112 ! & - vn(ji ,jj ,jk) * vn(ji ,jj ,jk) ) / e1u(ji,jj) 113 ! ! 114 ! va(ji,jj,jk) = va(ji,jj,jk) - 0.25 * ( un(ji-1,jj+1,jk) * un(ji-1,jj+1,jk) & 115 ! & + un(ji ,jj+1,jk) * un(ji ,jj+1,jk) & 116 ! & + vn(ji ,jj+1,jk) * vn(ji ,jj+1,jk) & 117 ! ! 118 ! & - un(ji-1,jj ,jk) * un(ji-1,jj ,jk) & 119 ! & - un(ji ,jj ,jk) * un(ji ,jj ,jk) & 120 ! & - vn(ji ,jj ,jk) * vn(ji ,jj ,jk) ) / e2v(ji,jj) 121 ! END DO 122 ! END DO 123 !!gm en idea <<== 98 124 ! ! =============== 99 125 END DO ! End of slab … … 109 135 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 110 136 ! 111 IF(.NOT. wrk_release(3,1))THEN 112 CALL ctl_stop('dyn_key: failed to release workspace array.') 113 END IF 114 137 IF(.NOT. wrk_release(3, 1) ) CALL ctl_stop('dyn_key: failed to release workspace array') 138 ! 115 139 END SUBROUTINE dyn_keg 116 140 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilap.F90
r2590 r2625 4 4 !! Ocean dynamics: lateral viscosity trend 5 5 !!====================================================================== 6 !! History : OPA ! 1990-09 (G. Madec) Original code 7 !! 4.0 ! 1993-03 (M. Guyon) symetrical conditions (M. Guyon) 8 !! 6.0 ! 1996-01 (G. Madec) statement function for e3 9 !! 8.0 ! 1997-07 (G. Madec) lbc calls 10 !! NEMO 1.0 ! 2002-08 (G. Madec) F90: Free form and module 11 !! 2.0 ! 2004-08 (C. Talandier) New trends organization 12 !!---------------------------------------------------------------------- 6 13 7 14 !!---------------------------------------------------------------------- … … 9 16 !! using an iso-level bilaplacian operator 10 17 !!---------------------------------------------------------------------- 11 !! * Modules used12 18 USE oce ! ocean dynamics and tracers 13 19 USE dom_oce ! ocean space and time domain … … 31 37 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 32 38 !! $Id$ 33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 34 !!---------------------------------------------------------------------- 35 39 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 40 !!---------------------------------------------------------------------- 36 41 CONTAINS 37 42 … … 69 74 !! ** Action : - Update (ua,va) with the before iso-level biharmonic 70 75 !! mixing trend. 71 !!72 !! History :73 !! ! 90-09 (G. Madec) Original code74 !! ! 91-11 (G. Madec)75 !! ! 93-03 (M. Guyon) symetrical conditions (M. Guyon)76 !! ! 96-01 (G. Madec) statement function for e377 !! ! 97-07 (G. Madec) lbc calls78 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module79 !! 9.0 ! 04-08 (C. Talandier) New trends organization80 76 !!---------------------------------------------------------------------- 81 77 USE wrk_nemo, ONLY: wrk_use, wrk_release 82 USE wrk_nemo, ONLY: zcu => wrk_2d_1, zcv => wrk_2d_2 83 USE wrk_nemo, ONLY: zuf => wrk_3d_1, zut => wrk_3d_2, & 84 zlu => wrk_3d_3, zlv => wrk_3d_4 85 !! * Arguments 86 INTEGER, INTENT( in ) :: kt ! ocean time-step index 87 88 !! * Local declarations 78 USE wrk_nemo, ONLY: zcu => wrk_2d_1, zcv => wrk_2d_2 ! 3D workspace 79 USE wrk_nemo, ONLY: zuf => wrk_3d_1, zut => wrk_3d_2 ! 3D workspace 80 USE wrk_nemo, ONLY: zlu => wrk_3d_3, zlv => wrk_3d_4 81 ! 82 INTEGER, INTENT(in) :: kt ! ocean time-step index 83 ! 89 84 INTEGER :: ji, jj, jk ! dummy loop indices 90 85 REAL(wp) :: zua, zva, zbt, ze2u, ze2v ! temporary scalar 91 86 !!---------------------------------------------------------------------- 92 !! OPA 8.5, LODYC-IPSL (2002) 93 !!---------------------------------------------------------------------- 94 95 IF( (.NOT. wrk_use(2, 1,2)) .OR. (.NOT. wrk_use(3, 1,2,3,4)) )THEN 96 CALL ctl_stop('dyn_ldf_bilap : requested workspace arrays unavailable.') 97 RETURN 98 END IF 99 100 IF( kt == nit000 ) THEN 101 IF(lwp) WRITE(numout,*) 102 IF(lwp) WRITE(numout,*) 'dyn_ldf_bilap : iso-level bilaplacian operator' 103 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~' 87 88 IF( .NOT. wrk_use(2, 1,2) .OR. .NOT. wrk_use(3, 1,2,3,4) ) THEN 89 CALL ctl_stop('dyn_ldf_bilap : requested workspace arrays unavailable') ; RETURN 90 ENDIF 91 92 IF( kt == nit000 .AND. lwp ) THEN 93 WRITE(numout,*) 94 WRITE(numout,*) 'dyn_ldf_bilap : iso-level bilaplacian operator' 95 WRITE(numout,*) '~~~~~~~~~~~~~' 104 96 ENDIF 105 97 … … 109 101 !!$ zlu(:,:,jpk) = 0.e0 110 102 !!$ zlv(:,:,jpk) = 0.e0 111 zuf(:,:,:) = 0. e0112 zut(:,:,:) = 0. e0113 zlu(:,:,:) = 0. e0114 zlv(:,:,:) = 0. e0103 zuf(:,:,:) = 0._wp 104 zut(:,:,:) = 0._wp 105 zlu(:,:,:) = 0._wp 106 zlv(:,:,:) = 0._wp 115 107 116 108 ! ! =============== … … 142 134 END DO 143 135 ENDIF 144 ENDDO 145 146 ! Boundary conditions on the laplacian (zlu,zlv) 147 CALL lbc_lnk( zlu, 'U', -1. ) 148 CALL lbc_lnk( zlv, 'V', -1. ) 149 136 END DO 137 CALL lbc_lnk( zlu, 'U', -1. ) ; CALL lbc_lnk( zlv, 'V', -1. ) ! Boundary conditions 138 150 139 151 140 DO jk = 1, jpkm1 … … 219 208 END DO ! End of slab 220 209 ! ! =============== 221 IF( (.NOT. wrk_release(2, 1,2)) .OR. & 222 (.NOT. wrk_release(3, 1,2,3,4)) )THEN 223 CALL ctl_stop('dyn_ldf_bilap : failed to release workspace arrays.') 224 END IF 210 IF( .NOT. wrk_release(2, 1,2) .OR. & 211 .NOT. wrk_release(3, 1,2,3,4) ) CALL ctl_stop('dyn_ldf_bilap : failed to release workspace arrays') 225 212 ! 226 213 END SUBROUTINE dyn_ldf_bilap
Note: See TracChangeset
for help on using the changeset viewer.