Changeset 2590 for branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN
- Timestamp:
- 2011-02-18T13:49:27+01:00 (13 years ago)
- Location:
- branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN
- Files:
-
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90
r2528 r2590 35 35 PRIVATE 36 36 37 PUBLIC div_cur ! routine called by step.F90 and istate.F90 37 PUBLIC div_cur ! routine called by step.F90 and istate.F90 38 PUBLIC div_cur_alloc ! routine called by nemogcm.F90 39 40 ! These workspace arrays are not replaced by wrk_nemo because they 41 ! have extents greater than (jpi,jpj) 42 REAL(wp), DIMENSION(:,:) :: zwu ! workspace 43 REAL(wp), DIMENSION(:,:) :: zwv ! workspace 38 44 39 45 !! * Substitutions … … 46 52 !!---------------------------------------------------------------------- 47 53 CONTAINS 54 55 FUNCTION div_cur_alloc() 56 !!---------------------------------------------------------------------- 57 !! *** ROUTINE div_cur_alloc *** 58 !!---------------------------------------------------------------------- 59 INTEGER :: div_cur_alloc 60 !!---------------------------------------------------------------------- 61 62 div_cur_alloc = 0 63 64 #if defined key_noslip_accurate 65 ALLOCATE(zwu( jpi, 1:jpj+2), zwv(-1:jpi+2, jpj), Stat=div_cur_alloc) 66 #endif 67 68 IF(div_cur_alloc /= 0)THEN 69 CALL ctl_warn('div_cur_alloc: failed to allocate arrays.') 70 END IF 71 72 END FUNCTION div_cur_alloc 48 73 49 74 #if defined key_noslip_accurate … … 88 113 INTEGER :: ijt, iju ! temporary integer 89 114 REAL(wp) :: zraur, zdep 90 REAL(wp), DIMENSION( jpi ,1:jpj+2) :: zwu ! workspace91 REAL(wp), DIMENSION(-1:jpi+2, jpj ) :: zwv ! workspace92 115 !!---------------------------------------------------------------------- 93 116 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv_cen2.F90
r2528 r2590 49 49 USE oce, ONLY: zfu => ta ! use ta as 3D workspace 50 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 51 60 !! 52 61 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 54 63 INTEGER :: ji, jj, jk ! dummy loop indices 55 64 REAL(wp) :: zbu, zbv ! temporary scalars 56 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfu_t, zfu_f, zfu_uw ! 3D workspace57 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfv_t, zfv_f, zfv_vw ! - -58 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfw ! - -59 65 !!---------------------------------------------------------------------- 60 66 … … 64 70 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 65 71 ENDIF 72 73 ! 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.') 77 END IF 66 78 67 79 IF( l_trddyn ) THEN ! Save ua and va trends … … 157 169 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 158 170 ! 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 175 ! 159 176 END SUBROUTINE dyn_adv_cen2 160 177 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv_ubs.F90
r2528 r2590 70 70 USE oce, ONLY: zfu => ta ! use ta as 3D workspace 71 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 72 84 !! 73 85 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 76 88 REAL(wp) :: zbu, zbv ! temporary scalars 77 89 REAL(wp) :: zui, zvj, zfuj, zfvi, zl_u, zl_v ! temporary scalars 78 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfu_t, zfu_f ! temporary workspace 79 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfv_t, zfv_f ! " " 80 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfw, zfu_uw, zfv_vw 81 REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: zlu_uu, zlu_uv ! temporary workspace 82 REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: zlv_vv, zlv_vu ! temporary workspace 90 ! ARPDBG - arrays below replaced with global work spaces 91 !!$ REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfu_t, zfu_f ! temporary workspace 92 !!$ REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfv_t, zfv_f ! " " 93 !!$ REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfw, zfu_uw, zfv_vw 94 !!$ REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: zlu_uu, zlu_uv ! temporary workspace 95 !!$ REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: zlv_vv, zlv_vu ! temporary workspace 83 96 !!---------------------------------------------------------------------- 84 97 … … 88 101 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 89 102 ENDIF 103 104 ! Check that required workspace arrays are not already in use 105 IF( .not. wrk_use(3, 1, 2, 3, 4, 5, 6, 7) )THEN 106 CALL ctl_stop('dyn_adv_ubs : error : required 3d workspace array is already in use') 107 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 90 112 zfu_t(:,:,:) = 0.e0 91 113 zfv_t(:,:,:) = 0.e0 … … 248 270 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 249 271 ! 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 277 ! 250 278 END SUBROUTINE dyn_adv_ubs 251 279 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90
r2528 r2590 76 76 !! - Save the trend (l_trddyn=T) 77 77 !!---------------------------------------------------------------------- 78 USE wrk_nemo, ONLY: wrk_use, wrk_release 79 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_2 80 !! 78 81 INTEGER, INTENT(in) :: kt ! ocean time-step index 79 82 !! 80 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrdu, ztrdv ! 3D temporary workspace 81 !!---------------------------------------------------------------------- 83 !!---------------------------------------------------------------------- 84 ! 85 IF(.NOT. wrk_use(3, 1,2))THEN 86 CALL ctl_stop('dyn_hpg: requested workspace arrays are unavailable.') 87 RETURN 88 END IF 82 89 ! 83 90 IF( l_trddyn ) THEN ! Temporary saving of ua and va trends (l_trddyn) … … 104 111 IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' hpg - Ua: ', mask1=umask, & 105 112 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 113 ! 114 IF(.NOT. wrk_release(3, 1,2))THEN 115 CALL ctl_stop('dyn_hpg: failed to release workspace arrays.') 116 END IF 106 117 ! 107 118 END SUBROUTINE dyn_hpg … … 594 605 USE oce, ONLY : zhpi => ta ! use ta as 3D workspace 595 606 USE oce, ONLY : zhpj => sa ! use sa as 3D workspace 607 USE wrk_nemo, ONLY: wrk_use, wrk_release 608 USE wrk_nemo, ONLY: drhox => wrk_3d_1, dzx => wrk_3d_2 609 USE wrk_nemo, ONLY: drhou => wrk_3d_3, dzu => wrk_3d_4, rho_i => wrk_3d_5 610 USE wrk_nemo, ONLY: drhoy => wrk_3d_6, dzy => wrk_3d_7 611 USE wrk_nemo, ONLY: drhov => wrk_3d_8, dzv => wrk_3d_9, rho_j => wrk_3d_10 612 USE wrk_nemo, ONLY: drhoz => wrk_3d_11, dzz => wrk_3d_12 613 USE wrk_nemo, ONLY: drhow => wrk_3d_13, dzw => wrk_3d_14 614 USE wrk_nemo, ONLY: rho_k => wrk_3d_15 596 615 !! 597 616 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 601 620 REAL(wp) :: z1_10, cffu, cffx ! " " 602 621 REAL(wp) :: z1_12, cffv, cffy ! " " 603 REAL(wp), DIMENSION(jpi,jpj,jpk) :: drhox, dzx, drhou, dzu, rho_i ! 3D workspace 604 REAL(wp), DIMENSION(jpi,jpj,jpk) :: drhoy, dzy, drhov, dzv, rho_j ! " " 605 REAL(wp), DIMENSION(jpi,jpj,jpk) :: drhoz, dzz, drhow, dzw, rho_k ! " " 606 !!---------------------------------------------------------------------- 622 !!---------------------------------------------------------------------- 623 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 627 END IF 607 628 608 629 IF( kt == nit000 ) THEN … … 802 823 END DO 803 824 ! 825 IF(.NOT. wrk_release(3, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15))THEN 826 CALL ctl_stop('dyn:hpg_djc : failed to release workspace arrays.') 827 END IF 828 ! 804 829 END SUBROUTINE hpg_djc 805 830 … … 815 840 USE oce, ONLY : zhpi => ta ! use ta as 3D workspace 816 841 USE oce, ONLY : zhpj => sa ! use sa as 3D workspace 842 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 817 849 !! 818 850 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 821 853 REAL(wp) :: zforg, zcoef0, zuap, zmskd1, zmskd1m ! temporary scalar 822 854 REAL(wp) :: zfrot , zvap, zmskd2, zmskd2m ! " " 823 REAL(wp), DIMENSION(jpi,jpj) :: zdistr, zsina, zcosa ! 2D workspace 824 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zhpiorg, zhpirot, zhpitra, zhpine ! 3D workspace 825 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zhpjorg, zhpjrot, zhpjtra, zhpjne ! " " 826 !!---------------------------------------------------------------------- 855 !!---------------------------------------------------------------------- 856 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 861 END IF 827 862 828 863 IF( kt == nit000 ) THEN … … 981 1016 END DO 982 1017 ! 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 1022 ! 983 1023 END SUBROUTINE hpg_rot 984 1024 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynkeg.F90
r2528 r2590 54 54 USE oce, ONLY : ztrdu => ta ! use ta as 3D workspace 55 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 56 58 !! 57 59 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 59 61 INTEGER :: ji, jj, jk ! dummy loop indices 60 62 REAL(wp) :: zu, zv ! temporary scalars 61 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zhke ! temporary 3D workspace62 63 !!---------------------------------------------------------------------- 64 65 IF(.NOT. wrk_use(3,1))THEN 66 CALL ctl_stop('dyn_key: requested workspace array is unavailable.') 67 END IF 63 68 64 69 IF( kt == nit000 ) THEN … … 104 109 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 105 110 ! 111 IF(.NOT. wrk_release(3,1))THEN 112 CALL ctl_stop('dyn_key: failed to release workspace array.') 113 END IF 114 106 115 END SUBROUTINE dyn_keg 107 116 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf.F90
r2528 r2590 52 52 !! ** Purpose : compute the lateral ocean dynamics physics. 53 53 !!---------------------------------------------------------------------- 54 USE wrk_nemo, ONLY: wrk_use, wrk_release 55 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_2 56 !! 54 57 INTEGER, INTENT(in) :: kt ! ocean time-step index 55 !! 56 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrdu, ztrdv ! 3D workspace 57 !!---------------------------------------------------------------------- 58 58 !!---------------------------------------------------------------------- 59 60 IF(.NOT. wrk_use(3, 1,2))THEN 61 CALL ctl_stop('dyn_ldf: requested workspace arrays unavailable.') 62 RETURN 63 END IF 64 ! 59 65 IF( l_trddyn ) THEN ! temporary save of ta and sa trends 60 66 ztrdu(:,:,:) = ua(:,:,:) … … 106 112 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 107 113 ! 114 IF(.NOT. wrk_release(3, 1,2))THEN 115 CALL ctl_stop('dyn_ldf: failed to release workspace arrays.') 116 END IF 117 ! 108 118 END SUBROUTINE dyn_ldf 109 119 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilap.F90
r2528 r2590 79 79 !! 9.0 ! 04-08 (C. Talandier) New trends organization 80 80 !!---------------------------------------------------------------------- 81 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 81 85 !! * Arguments 82 86 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 85 89 INTEGER :: ji, jj, jk ! dummy loop indices 86 90 REAL(wp) :: zua, zva, zbt, ze2u, ze2v ! temporary scalar 87 REAL(wp), DIMENSION(jpi,jpj) :: &88 zcu, zcv ! temporary workspace89 REAL(wp), DIMENSION(jpi,jpj,jpk) :: &90 zuf, zut, zlu, zlv ! temporary workspace91 91 !!---------------------------------------------------------------------- 92 92 !! OPA 8.5, LODYC-IPSL (2002) 93 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 94 99 95 100 IF( kt == nit000 ) THEN … … 214 219 END DO ! End of slab 215 220 ! ! =============== 216 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 225 ! 217 226 END SUBROUTINE dyn_ldf_bilap 218 227 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilapg.F90
r2528 r2590 28 28 29 29 !! * Routine accessibility 30 PUBLIC dyn_ldf_bilapg ! called by step.F90 30 PUBLIC dyn_ldf_bilapg ! called by step.F90 31 PUBLIC dyn_ldf_bilapg_alloc ! called by nemogcm.F90 32 33 ! These are just workspace arrays but since they're (jpi,jpk) it's not 34 ! worth putting them in the wrk_nemo module. 35 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfuw, zfvw, zdiu, zdiv 36 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zdju, zdj1u, zdjv, zdj1v 31 37 32 38 !! * Substitutions … … 40 46 41 47 CONTAINS 48 49 FUNCTION dyn_ldf_bilapg_alloc() 50 !!---------------------------------------------------------------------- 51 !! *** ROUTINE dyn_ldf_bilapg_alloc *** 52 !!---------------------------------------------------------------------- 53 INTEGER :: dyn_ldf_bilapg_alloc 54 55 ALLOCATE(zfuw(jpi,jpk), zfvw(jpi,jpk), zdiu(jpi,jpk), zdiv(jpi,jpk), & 56 zdju(jpi,jpk), zdj1u(jpi,jpk), zdjv(jpi,jpk), zdj1v(jpi,jpk),& 57 Stat = dyn_ldf_bilapg_alloc) 58 59 IF(dyn_ldf_bilapg_alloc /= 0)THEN 60 CALL ctl_warn('dyn_ldf_bilapg_alloc: failed to allocate arrays') 61 END IF 62 63 END FUNCTION dyn_ldf_bilapg_alloc 64 42 65 43 66 SUBROUTINE dyn_ldf_bilapg( kt ) … … 76 99 USE oce, ONLY : zwk3 => ta, & ! use ta as 3D workspace 77 100 zwk4 => sa ! use sa as 3D workspace 78 101 USE wrk_nemo, ONLY: wrk_use, wrk_release 102 ! work array used for rotated biharmonic operator on 103 ! tracers and/or momentum 104 USE wrk_nemo, ONLY: zwk1 => wrk_3d_1, & 105 zwk2 => wrk_3d_2 79 106 !! * Arguments 80 107 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 82 109 !! * Local declarations 83 110 INTEGER :: ji, jj, jk ! dummy loop indices 84 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 85 zwk1, zwk2 ! work array used for rotated biharmonic 86 ! ! operator on tracers and/or momentum 87 !!---------------------------------------------------------------------- 111 !!---------------------------------------------------------------------- 112 113 IF(.NOT. wrk_use(3, 1,2))THEN 114 CALL ctl_stop('dyn_ldf_bilapg: requested workspace arrays unavailable.') 115 RETURN 116 END IF 88 117 89 118 IF( kt == nit000 ) THEN … … 130 159 END DO ! End of slab 131 160 ! ! =============== 132 161 IF(.NOT. wrk_release(3, 1,2))THEN 162 CALL ctl_stop('dyn_ldf_bilapg: failed to release workspace arrays.') 163 END IF 164 ! 133 165 END SUBROUTINE dyn_ldf_bilapg 134 166 … … 179 211 !! 8.5 ! 02-08 (G. Madec) F90: Free form and module 180 212 !!---------------------------------------------------------------------- 213 USE wrk_nemo, ONLY: wrk_use, wrk_release 214 USE wrk_nemo, ONLY: ziut => wrk_2d_1, zjuf => wrk_2d_2, zjvt => wrk_2d_3 215 USE wrk_nemo, ONLY: zivf => wrk_2d_4, zdku => wrk_2d_5, zdk1u => wrk_2d_6 216 USE wrk_nemo, ONLY: zdkv => wrk_2d_7, zdk1v => wrk_2d_8 217 !! 181 218 !! * Arguments 182 219 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( in ) :: & … … 199 236 zbur, zbvr, zmkt, zmkf, zuav, zvav, & 200 237 zuwslpi, zuwslpj, zvwslpi, zvwslpj 201 REAL(wp), DIMENSION(jpi,jpj) :: & 202 ziut, zjuf , zjvt, zivf, & ! workspace 203 zdku, zdk1u, zdkv, zdk1v 204 REAL(wp), DIMENSION(jpi,jpk) :: & 205 zfuw, zfvw, zdiu, zdiv, & ! workspace 206 zdju, zdj1u, zdjv, zdj1v 207 !!---------------------------------------------------------------------- 208 238 !!---------------------------------------------------------------------- 239 240 IF(.NOT. wrk_use(2, 1,2,3,4,5,6,7,8))THEN 241 CALL ctl_stop('dyn:ldfguv : requested workspace arrays unavailable.') 242 RETURN 243 END IF 209 244 ! ! ********** ! ! =============== 210 245 DO jk = 1, jpkm1 ! First step ! ! Horizontal slab … … 461 496 END DO ! End of slab 462 497 ! ! =============== 498 499 IF(.NOT. wrk_release(2, 1,2,3,4,5,6,7,8))THEN 500 CALL ctl_stop('dyn:ldfguv : failed to release workspace arrays.') 501 END IF 502 ! 463 503 END SUBROUTINE ldfguv 464 504 … … 469 509 CONTAINS 470 510 SUBROUTINE dyn_ldf_bilapg( kt ) ! Dummy routine 511 INTEGER, INTENT(in) :: kt 471 512 WRITE(*,*) 'dyn_ldf_bilapg: You should not have seen this print! error?', kt 472 513 END SUBROUTINE dyn_ldf_bilapg -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_iso.F90
r2528 r2590 30 30 !! * Routine accessibility 31 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 32 38 33 39 !! * Substitutions … … 42 48 43 49 CONTAINS 50 51 FUNCTION dyn_ldf_iso_alloc() 52 !!---------------------------------------------------------------------- 53 !! *** ROUTINE dyn_ldf_iso_alloc *** 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 66 END FUNCTION dyn_ldf_iso_alloc 67 44 68 45 69 SUBROUTINE dyn_ldf_iso( kt ) … … 93 117 !! ! 05-11 (G. Madec) s-coordinate: horizontal diffusion 94 118 !!---------------------------------------------------------------------- 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 !! 95 125 !! * Arguments 96 126 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 102 132 zmskt, zmskf, zbu, zbv, & 103 133 zuah, zvah 104 REAL(wp), DIMENSION(jpi,jpj) :: &105 ziut, zjuf, zjvt, zivf, & ! temporary workspace106 zdku, zdk1u, zdkv, zdk1v107 134 108 135 REAL(wp) :: & 109 136 zcoef0, zcoef3, zcoef4, zmkt, zmkf, & 110 137 zuav, zvav, zuwslpi, zuwslpj, zvwslpi, zvwslpj 111 REAL(wp), DIMENSION(jpi,jpk) :: & 112 zfuw, zdiu, zdju, zdj1u, & ! " " 113 zfvw, zdiv, zdjv, zdj1v 114 115 !!---------------------------------------------------------------------- 138 139 !!---------------------------------------------------------------------- 140 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 144 END IF 116 145 117 146 IF( kt == nit000 ) THEN … … 420 449 ! ! =============== 421 450 451 IF( .NOT. wrk_release(2, 1,2,3,4,5,6,7,8))THEN 452 CALL ctl_stop('dyn_ldf_iso: failed to release workspace arrays.') 453 END IF 454 422 455 END SUBROUTINE dyn_ldf_iso 423 456 … … 428 461 CONTAINS 429 462 SUBROUTINE dyn_ldf_iso( kt ) ! Empty routine 463 INTEGER, INTENT(in) :: kt 430 464 WRITE(*,*) 'dyn_ldf_iso: You should not have seen this print! error?', kt 431 465 END SUBROUTINE dyn_ldf_iso -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90
r2528 r2590 93 93 USE oce, ONLY : ze3u_f => ta ! use ta as 3D workspace 94 94 USE oce, ONLY : ze3v_f => sa ! use sa as 3D workspace 95 USE wrk_nemo, ONLY: wrk_use, wrk_release 96 USE wrk_nemo, ONLY: zs_t => wrk_2d_1, zs_u_1 => wrk_2d_2, & 97 zs_v_1 => wrk_2d_3 95 98 INTEGER, INTENT( in ) :: kt ! ocean time-step index 96 99 !! … … 105 108 REAL(wp) :: zv_t_ij , zv_t_ip1j ! - - 106 109 REAL(wp) :: zv_t_ijp1 ! - - 107 REAL(wp), DIMENSION(jpi,jpj) :: zs_t, zs_u_1, zs_v_1 ! temporary 2D workspace108 110 !!---------------------------------------------------------------------- 111 112 IF(.NOT. wrk_use(2, 1,2,3))THEN 113 CALL ctl_stop('dyn_nxt: requested workspace arrays unavailable.') 114 RETURN 115 END IF 109 116 110 117 IF( kt == nit000 ) THEN … … 318 325 & tab3d_2=vn, clinfo2=' Vn: ' , mask2=vmask ) 319 326 ! 327 IF(.NOT. wrk_release(2, 1,2,3))THEN 328 CALL ctl_stop('dyn_nxt: failed to release workspace arrays.') 329 END IF 330 ! 320 331 END SUBROUTINE dyn_nxt 321 332 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90
r2528 r2590 73 73 !! of the physical meaning of the results. 74 74 !!---------------------------------------------------------------------- 75 USE wrk_nemo, ONLY: wrk_use, wrk_release 76 USE wrk_nemo, ONLY: ztrdu => wrk_3d_4, ztrdv => wrk_3d_5 77 !! 75 78 INTEGER, INTENT(in ) :: kt ! ocean time-step index 76 79 INTEGER, INTENT( out) :: kindic ! solver flag … … 78 81 INTEGER :: ji, jj, jk ! dummy loop indices 79 82 REAL(wp) :: z2dt, zg_2 ! temporary scalar 80 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrdu, ztrdv ! 3D workspace 81 !!---------------------------------------------------------------------- 82 83 !!---------------------------------------------------------------------- 84 85 IF(.NOT. wrk_use(3, 4,5))THEN 86 CALL ctl_stop('dyn_spg: requested workspace arrays unavailable.') 87 RETURN 88 END IF 83 89 84 90 !!gm NOTA BENE : the dynspg_exp and dynspg_ts should be modified so that … … 149 155 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 150 156 ! 157 IF(.NOT. wrk_release(3, 4,5))THEN 158 CALL ctl_stop('dyn_spg: failed to release workspace arrays.') 159 END IF 160 ! 151 161 END SUBROUTINE dyn_spg 152 162 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_oce.F90
r2528 r2590 35 35 #if defined key_dynspg_ts || defined key_vvl || defined key_esopa 36 36 ! !!! Time splitting scheme (sub-time step variables) 37 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: ua_e , va_e ! barotropic velocities (after)38 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: sshn_e, ssha_e, sshn_b ! sea surface heigth (now, after, average)39 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: hu_e , hv_e ! now ocean depth ( = Ho+sshn_e )40 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: hur_e , hvr_e ! inverse of the now depth ( = 1/(Ho+sshn_e) )37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ua_e , va_e ! barotropic velocities (after) 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshn_e, ssha_e, sshn_b ! sea surface heigth (now, after, average) 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hu_e , hv_e ! now ocean depth ( = Ho+sshn_e ) 40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hur_e , hvr_e ! inverse of the now depth ( = 1/(Ho+sshn_e) ) 41 41 #endif 42 42 … … 46 46 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 47 47 !!====================================================================== 48 CONTAINS 49 50 FUNCTION dynspg_oce_alloc() 51 IMPLICIT none 52 INTEGER :: dynspg_oce_alloc 53 54 dynspg_oce_alloc = 0 55 56 #if defined key_dynspg_ts || defined key_vvl || defined key_esopa 57 ALLOCATE(ua_e(jpi,jpj), va_e(jpi,jpj) , & 58 sshn_e(jpi,jpj), ssha_e(jpi,jpj), sshn_b(jpi,jpj), & 59 hu_e(jpi,jpj), hv_e(jpi,jpj) , & 60 hur_e(jpi,jpj), hvr_e(jpi,jpj) , & 61 Stat=dynspg_oce_alloc) 62 #endif 63 64 END FUNCTION dynspg_oce_alloc 65 48 66 END MODULE dynspg_oce -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r2564 r2590 45 45 PRIVATE 46 46 47 PUBLIC dyn_spg_ts ! routine called by step.F90 48 PUBLIC ts_rst ! routine called by istate.F90 49 50 51 REAL(wp), DIMENSION(jpi,jpj) :: ftnw, ftne ! triad of coriolis parameter 52 REAL(wp), DIMENSION(jpi,jpj) :: ftsw, ftse ! (only used with een vorticity scheme) 53 54 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: un_b, vn_b ! now averaged velocity 55 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: ub_b, vb_b ! before averaged velocity 47 PUBLIC dyn_spg_ts ! routine called by step.F90 48 PUBLIC ts_rst ! routine called by istate.F90 49 PUBLIC dyn_spg_ts_alloc ! routine called by nemogcm.F90 50 51 52 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ftnw, ftne ! triad of coriolis parameter 53 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ftsw, ftse ! (only used with een vorticity scheme) 54 55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: un_b, vn_b ! now averaged velocity 56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ub_b, vb_b ! before averaged velocity 56 57 57 58 … … 66 67 67 68 CONTAINS 69 70 FUNCTION dyn_spg_ts_alloc() 71 !!---------------------------------------------------------------------- 72 !! *** routine dyn_spg_ts_alloc *** 73 !!---------------------------------------------------------------------- 74 IMPLICIT none 75 INTEGER :: dyn_spg_ts_malloc 76 !!---------------------------------------------------------------------- 77 78 ALLOCATE(ftnw(jpi,jpj), ftne(jpi,jpj), ftsw(jpi,jpj), ftse(jpi,jpj), & 79 un_b(jpi,jpj), vn_b(jpi,jpj), ub_b(jpi,jpj), vb_b(jpi,jpj), & 80 Stat=dyn_spg_ts_malloc) 81 82 END FUNCTION dyn_spg_ts_malloc 83 68 84 69 85 SUBROUTINE dyn_spg_ts( kt ) … … 94 110 !! References : Griffies et al., (2003): A technical guide to MOM4. NOAA/GFDL 95 111 !!--------------------------------------------------------------------- 112 USE wrk_nemo, ONLY: wrk_use, wrk_release 113 USE wrk_nemo, ONLY: zhdiv => wrk_2d_1, zsshb_e => wrk_2d_2 114 USE wrk_nemo, ONLY: zbfru => wrk_2d_3 , zbfrv => wrk_2d_4 115 USE wrk_nemo, ONLY: zsshun_e => wrk_2d_5, zsshvn_e => wrk_2d_6 116 USE wrk_nemo, ONLY: zcu => wrk_2d_7, zwx => wrk_2d_8, zua => wrk_2d_9, zun => wrk_2d_10 117 USE wrk_nemo, ONLY: zcv => wrk_2d_11, zwy => wrk_2d_12, zva => wrk_2d_13, zvn => wrk_2d_14 118 USE wrk_nemo, ONLY: zun_e => wrk_2d_15, zub_e => wrk_2d_16, zu_sum => wrk_2d_17 119 USE wrk_nemo, ONLY: zvn_e => wrk_2d_18, zvb_e => wrk_2d_19, zv_sum => wrk_2d_20 120 USE wrk_nemo, ONLY: zssh_sum => wrk_2d_21 121 !! 96 122 INTEGER, INTENT(in) :: kt ! ocean time-step index 97 123 !! … … 104 130 REAL(wp) :: zu_spg, zu_cor, zu_sld, zu_asp ! - - 105 131 REAL(wp) :: zv_spg, zv_cor, zv_sld, zv_asp ! - - 106 !!107 REAL(wp), DIMENSION(jpi,jpj) :: zhdiv, zsshb_e108 !!109 REAL(wp), DIMENSION(jpi,jpj) :: zbfru , zbfrv ! 2D workspace110 !!111 REAL(wp), DIMENSION(jpi,jpj) :: zsshun_e, zsshvn_e ! 2D workspace112 !!113 REAL(wp), DIMENSION(jpi,jpj) :: zcu, zwx, zua, zun ! 2D workspace114 REAL(wp), DIMENSION(jpi,jpj) :: zcv, zwy, zva, zvn ! - -115 REAL(wp), DIMENSION(jpi,jpj) :: zun_e, zub_e, zu_sum ! 2D workspace116 REAL(wp), DIMENSION(jpi,jpj) :: zvn_e, zvb_e, zv_sum ! - -117 REAL(wp), DIMENSION(jpi,jpj) :: zssh_sum ! - -118 132 !!---------------------------------------------------------------------- 133 134 IF(.NOT. wrk_use(2, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, & 135 11,12,13,14,15,16,17,18,19,20,21))THEN 136 CALL ctl_stop('dyn_spg_ts: requested workspace arrays unavailable.') 137 RETURN 138 END IF 119 139 120 140 IF( kt == nit000 ) THEN !* initialisation … … 550 570 ! 551 571 ! 572 IF(.NOT. wrk_release(2, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, & 573 11,12,13,14,15,16,17,18,19,20,21))THEN 574 CALL ctl_stop('dyn_spg_ts: failed to release workspace arrays.') 575 END IF 576 ! 552 577 END SUBROUTINE dyn_spg_ts 553 578 … … 641 666 CONTAINS 642 667 SUBROUTINE dyn_spg_ts( kt ) ! Empty routine 668 INTEGER, INTENT(in) :: kt 643 669 WRITE(*,*) 'dyn_spg_ts: You should not have seen this print! error?', kt 644 670 END SUBROUTINE dyn_spg_ts -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90
r2528 r2590 39 39 PUBLIC dyn_vor ! routine called by step.F90 40 40 PUBLIC dyn_vor_init ! routine called by opa.F90 41 PUBLIC dyn_vor_alloc ! routine called by nemogcm.F90 41 42 42 43 ! !!* Namelist namdyn_vor: vorticity term … … 50 51 INTEGER :: nrvm = 2 ! =2 relative vorticity ; =3 metric term 51 52 INTEGER :: ntot = 4 ! =4 total vorticity (relative + planetary) ; =5 coriolis + metric term 53 54 !!$#if defined key_vvl 55 !!$ REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3f 56 !!$#else 57 !!$ REAL(wp), ALLOCATABLE, DIMENSION(jpi,jpj,jpk), SAVE :: ze3f 58 !!$#endif 59 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ze3f 52 60 53 61 !! * Substitutions … … 61 69 62 70 CONTAINS 71 72 FUNCTION dyn_vor_alloc() 73 !!---------------------------------------------------------------------- 74 !! *** Routine dyn_vor_alloc *** 75 !!---------------------------------------------------------------------- 76 IMPLICIT none 77 INTEGER :: dyn_vor_alloc 78 !!---------------------------------------------------------------------- 79 80 ALLOCATE(ze3f(jpi,jpj,jpk), Stat=dyn_vor_alloc) 81 82 IF(dyn_vor_alloc /= 0 )THEN 83 CALL ctl_warn('dyn_vor_alloc: failed to allocate array ze3f.') 84 END IF 85 86 END FUNCTION dyn_vor_alloc 87 63 88 64 89 SUBROUTINE dyn_vor( kt ) … … 205 230 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 206 231 !!---------------------------------------------------------------------- 232 USE wrk_nemo, ONLY: wrk_use, wrk_release 233 USE wrk_nemo, ONLY: zwx => wrk_2d_1, zwy => wrk_2d_2, zwz => wrk_2d_3 234 !! 207 235 INTEGER , INTENT(in ) :: kt ! ocean time-step index 208 236 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; … … 214 242 REAL(wp) :: zx1, zy1, zfact2 ! temporary scalars 215 243 REAL(wp) :: zx2, zy2 ! " " 216 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz ! temporary 2D workspace 217 !!---------------------------------------------------------------------- 244 !!---------------------------------------------------------------------- 245 246 IF(.NOT. wrk_use(2, 1,2,3))THEN 247 CALL ctl_stop('dyn:vor_ene: requested workspace arrays unavailable.') 248 RETURN 249 END IF 218 250 219 251 IF( kt == nit000 ) THEN … … 280 312 END DO ! End of slab 281 313 ! ! =============== 314 IF(.NOT. wrk_release(2, 1,2,3))THEN 315 CALL ctl_stop('dyn:vor_ene: failed to release workspace arrays.') 316 END IF 317 ! 282 318 END SUBROUTINE vor_ene 283 319 … … 314 350 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 315 351 !!---------------------------------------------------------------------- 352 USE wrk_nemo, ONLY: wrk_use, wrk_release 353 USE wrk_nemo, ONLY: zwx => wrk_2d_4, zwy => wrk_2d_5, & 354 zwz => wrk_2d_6, zww => wrk_2d_7 355 !! 316 356 INTEGER, INTENT(in) :: kt ! ocean timestep index 317 357 !! … … 319 359 REAL(wp) :: zfact1, zua, zcua, zx1, zy1 ! temporary scalars 320 360 REAL(wp) :: zfact2, zva, zcva, zx2, zy2 ! " " 321 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz, zww ! temporary 3D workspace 322 !!---------------------------------------------------------------------- 361 !!---------------------------------------------------------------------- 362 363 IF(.NOT. wrk_use(2, 4,5,6,7))THEN 364 CALL ctl_stop('dyn:vor_mix: requested workspace arrays unavailable.') 365 RETURN 366 END IF 323 367 324 368 IF( kt == nit000 ) THEN … … 392 436 END DO ! End of slab 393 437 ! ! =============== 438 IF(.NOT. wrk_release(2, 4,5,6,7))THEN 439 CALL ctl_stop('dyn:vor_mix: failed to release workspace arrays.') 440 END IF 441 ! 394 442 END SUBROUTINE vor_mix 395 443 … … 421 469 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 422 470 !!---------------------------------------------------------------------- 471 USE wrk_nemo, ONLY: wrk_use, wrk_release 472 USE wrk_nemo, ONLY: zwx => wrk_2d_4, zwy => wrk_2d_5, zwz => wrk_2d_6 473 !! 423 474 INTEGER , INTENT(in ) :: kt ! ocean time-step index 424 475 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; … … 429 480 INTEGER :: ji, jj, jk ! dummy loop indices 430 481 REAL(wp) :: zfact1, zuav, zvau ! temporary scalars 431 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz ! temporary 3D workspace432 482 !!---------------------------------------------------------------------- 433 483 484 IF(.NOT. wrk_use(2, 4,5,6))THEN 485 CALL ctl_stop('dyn:vor_ens : requested workspace arrays unavailable.') 486 RETURN 487 END IF 488 434 489 IF( kt == nit000 ) THEN 435 490 IF(lwp) WRITE(numout,*) … … 503 558 END DO ! End of slab 504 559 ! ! =============== 560 IF(.NOT. wrk_release(2, 4,5,6))THEN 561 CALL ctl_stop('dyn:vor_ens : failed to release workspace arrays.') 562 END IF 563 ! 505 564 END SUBROUTINE vor_ens 506 565 … … 525 584 !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 526 585 !!---------------------------------------------------------------------- 586 USE wrk_nemo, ONLY: wrk_use, wrk_release 587 USE wrk_nemo, ONLY: zwx => wrk_2d_1, zwy => wrk_2d_2, zwz => wrk_2d_3 588 USE wrk_nemo, ONLY: ztnw => wrk_2d_4, ztne => wrk_2d_5, & 589 ztsw => wrk_2d_6, ztse => wrk_2d_7 590 !! 527 591 INTEGER , INTENT(in ) :: kt ! ocean time-step index 528 592 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; … … 533 597 INTEGER :: ji, jj, jk ! dummy loop indices 534 598 REAL(wp) :: zfac12, zua, zva ! temporary scalars 535 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz ! temporary 2D workspace 536 REAL(wp), DIMENSION(jpi,jpj) :: ztnw, ztne, ztsw, ztse ! temporary 3D workspace 537 #if defined key_vvl 538 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3f 539 #else 540 REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE :: ze3f 541 #endif 542 !!---------------------------------------------------------------------- 599 !!---------------------------------------------------------------------- 600 601 IF(.NOT. wrk_use(2, 1,2,3,4,5,6,7))THEN 602 CALL ctl_stop('dyn:vor_een : requested workspace arrays unavailable.') 603 RETURN 604 END IF 543 605 544 606 IF( kt == nit000 ) THEN … … 634 696 END DO ! End of slab 635 697 ! ! =============== 698 IF(.NOT. wrk_release(2, 1,2,3,4,5,6,7))THEN 699 CALL ctl_stop('dyn:vor_een : failed to release workspace arrays.') 700 END IF 701 ! 636 702 END SUBROUTINE vor_een 637 703 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynzad.F90
r2528 r2590 56 56 USE oce, ONLY: zwuw => ta ! use ta as 3D workspace 57 57 USE oce, ONLY: zwvw => sa ! use sa as 3D workspace 58 USE wrk_nemo, ONLY: wrk_use, wrk_release 59 USE wrk_nemo, ONLY: zww => wrk_2d_1 60 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_2 58 61 !! 59 62 INTEGER, INTENT(in) :: kt ! ocean time-step inedx … … 61 64 INTEGER :: ji, jj, jk ! dummy loop indices 62 65 REAL(wp) :: zua, zva ! temporary scalars 63 REAL(wp), DIMENSION(jpi,jpj) :: zww ! 2D workspace64 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrdu, ztrdv ! 3D workspace65 66 !!---------------------------------------------------------------------- 66 67 68 IF( (.NOT. wrk_use(2, 1)) .OR. & 69 (.NOT. wrk_use(3, 1,2)) )THEN 70 CALL ctl_stop('dyn_zad: requested workspace arrays unavailable.') 71 RETURN 72 END IF 73 67 74 IF( kt == nit000 ) THEN 68 75 IF(lwp)WRITE(numout,*) … … 119 126 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 120 127 ! 128 IF( (.NOT. wrk_release(2, 1)) .OR. & 129 (.NOT. wrk_release(3, 1,2)) )THEN 130 CALL ctl_stop('dyn_zad: failed to release workspace arrays.') 131 END IF 132 121 133 END SUBROUTINE dyn_zad 122 134 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf.F90
r2528 r2590 52 52 !! ** Purpose : compute the vertical ocean dynamics physics. 53 53 !!--------------------------------------------------------------------- 54 USE wrk_nemo, ONLY: wrk_use, wrk_release 55 USE wrk_nemo, ONLY: ztrdu => wrk_3d_1, ztrdv => wrk_3d_2 56 !! 54 57 INTEGER, INTENT( in ) :: kt ! ocean time-step index 55 !!56 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrdu, ztrdv ! 3D workspace57 58 !!--------------------------------------------------------------------- 58 59 60 IF(.NOT. wrk_use(3, 1,2))THEN 61 CALL ctl_stop('dyn_zdf: requested workspace arrays unavailable.') 62 RETURN 63 END IF 59 64 ! ! set time step 60 65 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt ! = rdtra (restart with Euler time stepping) … … 89 94 IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' zdf - Ua: ', mask1=umask, & 90 95 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 96 ! 97 IF(.NOT. wrk_release(3, 1,2))THEN 98 CALL ctl_stop('dyn_zdf: failed to release workspace arrays.') 99 END IF 91 100 ! 92 101 END SUBROUTINE dyn_zdf -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_exp.F90
r2528 r2590 24 24 PRIVATE 25 25 26 PUBLIC dyn_zdf_exp ! called by step.F90 26 PUBLIC dyn_zdf_exp ! called by step.F90 27 PUBLIC dyn_zdf_exp_alloc ! called by nemogcm.F90 27 28 29 ! 2D workspaces. Not replaced with wrk_nemo arrays because these 30 ! have shape (jpi,jpk). 31 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zwx, zwy, zwz, zww 32 28 33 !! * Substitutions 29 34 # include "domzgr_substitute.h90" … … 36 41 37 42 CONTAINS 43 44 FUNCTION dyn_zdf_exp_alloc() 45 !!---------------------------------------------------------------------- 46 !! *** ROUTINE dyn_zdf_exp_alloc *** 47 !!---------------------------------------------------------------------- 48 INTEGER :: dyn_zdf_exp_alloc 49 !!---------------------------------------------------------------------- 50 51 ALLOCATE(zwx(jpi,jpk), zwy(jpi,jpk), zwz(jpi,jpk), zww(jpi,jpk), & 52 Stat=dyn_zdf_exp_alloc) 53 54 IF(dyn_zdf_exp_alloc /= 0)THEN 55 CALL ctl_warn('dyn_zdf_exp_alloc: failed to allocate arrays.') 56 END IF 57 58 END FUNCTION dyn_zdf_exp_alloc 59 38 60 39 61 SUBROUTINE dyn_zdf_exp( kt, p2dt ) … … 58 80 INTEGER :: ji, jj, jk, jl ! dummy loop indices 59 81 REAL(wp) :: zrau0r, zlavmr, zua, zva ! temporary scalars 60 REAL(wp), DIMENSION(jpi,jpk) :: zwx, zwy, zwz, zww ! 2D workspace61 82 !!---------------------------------------------------------------------- 62 83 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90
r2528 r2590 56 56 USE oce, ONLY : zwd => ta ! use ta as workspace 57 57 USE oce, ONLY : zws => sa ! use sa as workspace 58 USE wrk_nemo, ONLY: wrk_use, wrk_release 59 USE wrk_nemo, ONLY: zwi => wrk_3d_3 ! workspace 58 60 !! 59 61 INTEGER , INTENT( in ) :: kt ! ocean time-step index … … 63 65 REAL(wp) :: z1_p2dt, zcoef ! temporary scalars 64 66 REAL(wp) :: zzwi, zzws, zrhs ! temporary scalars 65 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwi ! 3D workspace66 67 !!---------------------------------------------------------------------- 68 69 IF(.NOT. wrk_use(3, 3))THEN 70 CALL ctl_stop('dyn_zdf_imp : requested workspace array unavailable.') 71 RETURN 72 END IF 67 73 68 74 IF( kt == nit000 ) THEN … … 253 259 END DO 254 260 ! 261 IF(.NOT. wrk_release(3, 3))THEN 262 CALL ctl_stop('dyn_zdf_imp : failed to release workspace array.') 263 END IF 264 ! 255 265 END SUBROUTINE dyn_zdf_imp 256 266 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90
r2528 r2590 76 76 !!---------------------------------------------------------------------- 77 77 USE oce, ONLY : z3d => ta ! use ta as 3D workspace 78 USE wrk_nemo, ONLY: wrk_use, wrk_release 79 USE wrk_nemo, ONLY: zhdiv => wrk_2d_1, z2d => wrk_2d_2 78 80 !! 79 81 INTEGER, INTENT(in) :: kt ! time step … … 82 84 REAL(wp) :: zcoefu, zcoefv, zcoeff ! temporary scalars 83 85 REAL(wp) :: z2dt, z1_2dt, z1_rau0 ! temporary scalars 84 REAL(wp), DIMENSION(jpi,jpj) :: zhdiv ! 2D workspace 85 REAL(wp), DIMENSION(jpi,jpj) :: z2d ! 2D workspace 86 !!---------------------------------------------------------------------- 86 !!---------------------------------------------------------------------- 87 88 IF(.NOT. wrk_use(2, 1,2))THEN 89 CALL ctl_stop('ssh_wzv: requested workspace arrays unavailable.') 90 RETURN 91 END IF 87 92 88 93 IF( kt == nit000 ) THEN … … 239 244 IF(ln_ctl) CALL prt_ctl( tab2d_1=ssha, clinfo1=' ssha - : ', mask1=tmask, ovlap=1 ) 240 245 ! 246 IF(.NOT. wrk_release(2, 1,2))THEN 247 CALL ctl_stop('ssh_wzv: failed to release workspace arrays.') 248 END IF 249 ! 241 250 END SUBROUTINE ssh_wzv 242 251
Note: See TracChangeset
for help on using the changeset viewer.