- Timestamp:
- 2017-09-27T16:29:24+02:00 (7 years ago)
- Location:
- branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/daymod.F90
r7646 r8568 222 222 !!---------------------------------------------------------------------- 223 223 ! 224 IF( nn_timing == 1 )CALL timing_start('day')224 IF( ln_timing ) CALL timing_start('day') 225 225 ! 226 226 zprec = 0.1 / rday … … 276 276 IF( lrst_oce ) CALL day_rst( kt, 'WRITE' ) ! write day restart information 277 277 ! 278 IF( nn_timing == 1 )CALL timing_stop('day')278 IF( ln_timing ) CALL timing_stop('day') 279 279 ! 280 280 END SUBROUTINE day … … 402 402 CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj ) ! number of elapsed days since 403 403 ! ! the begining of the run [s] 404 CALL iom_rstput( kt, nitrst, numrow, 'ntime' , REAL( nn_time0, wp) ) ! time404 CALL iom_rstput( kt, nitrst, numrow, 'ntime' , REAL( nn_time0, wp) ) ! time 405 405 ENDIF 406 406 ! -
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/depth_e3.F90
r7753 r8568 20 20 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 21 21 USE lib_mpp ! distributed memory computing library 22 USE wrk_nemo ! Memory allocation23 22 USE timing ! Timing 24 23 -
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/domain.F90
r7822 r8568 45 45 USE lbclnk ! ocean lateral boundary condition (or mpp link) 46 46 USE lib_mpp ! distributed memory computing library 47 USE wrk_nemo ! Memory Allocation48 47 USE timing ! Timing 49 48 … … 83 82 !!---------------------------------------------------------------------- 84 83 ! 85 IF( nn_timing == 1) CALL timing_start('dom_init')84 IF( ln_timing ) CALL timing_start('dom_init') 86 85 ! 87 86 IF(lwp) THEN ! Ocean domain Parameters (control print) … … 199 198 IF( ln_write_cfg ) CALL cfg_write ! create the configuration file 200 199 ! 201 IF( nn_timing == 1) CALL timing_stop('dom_init')200 IF( ln_timing ) CALL timing_stop('dom_init') 202 201 ! 203 202 END SUBROUTINE dom_init -
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/domhgr.F90
r7753 r8568 79 79 !!---------------------------------------------------------------------- 80 80 ! 81 IF( nn_timing == 1 )CALL timing_start('dom_hgr')81 IF( ln_timing ) CALL timing_start('dom_hgr') 82 82 ! 83 83 IF(lwp) THEN … … 152 152 ! 153 153 ! 154 IF( nn_timing == 1 )CALL timing_stop('dom_hgr')154 IF( ln_timing ) CALL timing_stop('dom_hgr') 155 155 ! 156 156 END SUBROUTINE dom_hgr -
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90
r7753 r8568 30 30 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 31 31 USE lib_mpp ! Massively Parallel Processing library 32 USE wrk_nemo ! Memory allocation33 32 USE timing ! Timing 34 33 … … 92 91 INTEGER :: iktop, ikbot ! - - 93 92 INTEGER :: ios, inum 94 REAL(wp), POINTER, DIMENSION(:,:) :: zwf ! 2D workspace93 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zwf ! 2D workspace 95 94 !! 96 95 NAMELIST/namlbc/ rn_shlat, ln_vorlat … … 104 103 !!--------------------------------------------------------------------- 105 104 ! 106 IF( nn_timing == 1 )CALL timing_start('dom_msk')105 IF( ln_timing ) CALL timing_start('dom_msk') 107 106 ! 108 107 REWIND( numnam_ref ) ! Namelist namlbc in reference namelist : Lateral momentum boundary condition … … 248 247 IF( rn_shlat /= 0 ) THEN ! Not free-slip lateral boundary condition 249 248 ! 250 CALL wrk_alloc( jpi,jpj, zwf)249 ALLOCATE( zwf(jpi,jpj) ) 251 250 ! 252 251 DO jk = 1, jpk … … 278 277 END DO 279 278 ! 280 CALL wrk_dealloc( jpi,jpj,zwf )279 DEALLOCATE( zwf ) 281 280 ! 282 281 CALL lbc_lnk( fmask, 'F', 1._wp ) ! Lateral boundary conditions on fmask … … 292 291 ! 293 292 ! 294 IF( nn_timing == 1 )CALL timing_stop('dom_msk')293 IF( ln_timing ) CALL timing_stop('dom_msk') 295 294 ! 296 295 END SUBROUTINE dom_msk -
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/domngb.F90
r7646 r8568 11 11 !!---------------------------------------------------------------------- 12 12 USE dom_oce ! ocean space and time domain 13 ! 13 14 USE in_out_manager ! I/O manager 14 15 USE lib_mpp ! for mppsum 15 USE wrk_nemo ! Memory allocation16 16 USE timing ! Timing 17 17 … … 45 45 INTEGER , DIMENSION(2) :: iloc 46 46 REAL(wp) :: zlon, zmini 47 REAL(wp), POINTER, DIMENSION(:,:) ::zglam, zgphi, zmask, zdist47 REAL(wp), DIMENSION(jpi,jpj) :: zglam, zgphi, zmask, zdist 48 48 !!-------------------------------------------------------------------- 49 49 ! 50 IF( nn_timing == 1 ) CALL timing_start('dom_ngb') 51 ! 52 CALL wrk_alloc( jpi,jpj, zglam, zgphi, zmask, zdist ) 50 IF( ln_timing ) CALL timing_start('dom_ngb') 53 51 ! 54 52 zmask(:,:) = 0._wp … … 79 77 ENDIF 80 78 ! 81 CALL wrk_dealloc( jpi,jpj, zglam, zgphi, zmask, zdist ) 82 ! 83 IF( nn_timing == 1 ) CALL timing_stop('dom_ngb') 79 IF( ln_timing ) CALL timing_stop('dom_ngb') 84 80 ! 85 81 END SUBROUTINE dom_ngb -
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
r7753 r8568 6 6 !! History : 2.0 ! 2006-06 (B. Levier, L. Marie) original code 7 7 !! 3.1 ! 2009-02 (G. Madec, M. Leclair, R. Benshila) pure z* coordinate 8 !! 3.3 ! 2011-10 (M. Leclair) totally rewrote domvvl: 9 !! vvl option includes z_star and z_tilde coordinates 8 !! 3.3 ! 2011-10 (M. Leclair) totally rewrote domvvl: vvl option includes z_star and z_tilde coordinates 10 9 !! 3.6 ! 2014-11 (P. Mathiot) add ice shelf capability 11 10 !!---------------------------------------------------------------------- … … 31 30 USE lib_mpp ! distributed memory computing library 32 31 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 33 USE wrk_nemo ! Memory allocation34 32 USE timing ! Timing 35 33 … … 122 120 !!---------------------------------------------------------------------- 123 121 ! 124 IF( nn_timing == 1) CALL timing_start('dom_vvl_init')122 IF( ln_timing ) CALL timing_start('dom_vvl_init') 125 123 ! 126 124 IF(lwp) WRITE(numout,*) … … 242 240 ENDIF 243 241 ! 244 IF( nn_timing == 1 )CALL timing_stop('dom_vvl_init')242 IF( ln_timing ) CALL timing_stop('dom_vvl_init') 245 243 ! 246 244 END SUBROUTINE dom_vvl_init … … 276 274 REAL(wp) :: z2dt, z_tmin, z_tmax ! local scalars 277 275 LOGICAL :: ll_do_bclinic ! local logical 278 REAL(wp), POINTER, DIMENSION(:,:,:) :: ze3t279 REAL(wp), POINTER, DIMENSION(:,: ) :: zht, z_scale, zwu, zwv, zhdiv276 REAL(wp), DIMENSION(jpi,jpj) :: zht, z_scale, zwu, zwv, zhdiv 277 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3t 280 278 !!---------------------------------------------------------------------- 281 279 ! 282 280 IF( ln_linssh ) RETURN ! No calculation in linear free surface 283 281 ! 284 IF( nn_timing == 1 ) CALL timing_start('dom_vvl_sf_nxt') 285 ! 286 CALL wrk_alloc( jpi,jpj,zht, z_scale, zwu, zwv, zhdiv ) 287 CALL wrk_alloc( jpi,jpj,jpk, ze3t ) 288 282 IF( ln_timing ) CALL timing_start('dom_vvl_sf_nxt') 283 ! 289 284 IF( kt == nit000 ) THEN 290 285 IF(lwp) WRITE(numout,*) … … 543 538 r1_hv_a(:,:) = ssvmask(:,:) / ( hv_a(:,:) + 1._wp - ssvmask(:,:) ) 544 539 ! 545 CALL wrk_dealloc( jpi,jpj, zht, z_scale, zwu, zwv, zhdiv ) 546 CALL wrk_dealloc( jpi,jpj,jpk, ze3t ) 547 ! 548 IF( nn_timing == 1 ) CALL timing_stop('dom_vvl_sf_nxt') 540 IF( ln_timing ) CALL timing_stop('dom_vvl_sf_nxt') 549 541 ! 550 542 END SUBROUTINE dom_vvl_sf_nxt … … 583 575 IF( ln_linssh ) RETURN ! No calculation in linear free surface 584 576 ! 585 IF( nn_timing == 1 )CALL timing_start('dom_vvl_sf_swp')577 IF( ln_timing ) CALL timing_start('dom_vvl_sf_swp') 586 578 ! 587 579 IF( kt == nit000 ) THEN … … 657 649 ! write restart file 658 650 ! ================== 659 IF( lrst_oce ) CALL dom_vvl_rst( kt, 'WRITE' )660 ! 661 IF( nn_timing == 1) CALL timing_stop('dom_vvl_sf_swp')651 IF( lrst_oce ) CALL dom_vvl_rst( kt, 'WRITE' ) 652 ! 653 IF( ln_timing ) CALL timing_stop('dom_vvl_sf_swp') 662 654 ! 663 655 END SUBROUTINE dom_vvl_sf_swp … … 683 675 !!---------------------------------------------------------------------- 684 676 ! 685 IF( nn_timing == 1) CALL timing_start('dom_vvl_interpol')677 IF( ln_timing ) CALL timing_start('dom_vvl_interpol') 686 678 ! 687 679 IF(ln_wd) THEN … … 770 762 END SELECT 771 763 ! 772 IF( nn_timing == 1) CALL timing_stop('dom_vvl_interpol')764 IF( ln_timing ) CALL timing_stop('dom_vvl_interpol') 773 765 ! 774 766 END SUBROUTINE dom_vvl_interpol … … 794 786 !!---------------------------------------------------------------------- 795 787 ! 796 IF( nn_timing == 1 ) CALL timing_start('dom_vvl_rst') 788 IF( ln_timing ) CALL timing_start('dom_vvl_rst') 789 ! 797 790 IF( TRIM(cdrw) == 'READ' ) THEN ! Read/initialise 798 791 ! ! =============== … … 947 940 ENDIF 948 941 ! 949 IF( nn_timing == 1 )CALL timing_stop('dom_vvl_rst')942 IF( ln_timing ) CALL timing_stop('dom_vvl_rst') 950 943 ! 951 944 END SUBROUTINE dom_vvl_rst -
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/domwri.F90
r7646 r8568 24 24 USE lbclnk ! lateral boundary conditions - mpp exchanges 25 25 USE lib_mpp ! MPP library 26 USE wrk_nemo ! Memory allocation27 26 USE timing ! Timing 28 27 … … 75 74 INTEGER :: izco, izps, isco, icav 76 75 ! 77 REAL(wp), POINTER, DIMENSION(:,:) :: zprt, zprw ! 2D workspace 78 REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepu, zdepv ! 3D workspace 79 !!---------------------------------------------------------------------- 80 ! 81 IF( nn_timing == 1 ) CALL timing_start('dom_wri') 82 ! 83 CALL wrk_alloc( jpi,jpj, zprt , zprw ) 84 CALL wrk_alloc( jpi,jpj,jpk, zdepu, zdepv ) 76 REAL(wp), DIMENSION(jpi,jpj) :: zprt, zprw ! 2D workspace 77 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepu, zdepv ! 3D workspace 78 !!---------------------------------------------------------------------- 79 ! 80 IF( ln_timing ) CALL timing_start('dom_wri') 85 81 ! 86 82 IF(lwp) WRITE(numout,*) … … 206 202 ! ! ============================ 207 203 ! 208 CALL wrk_dealloc( jpi, jpj, zprt, zprw ) 209 CALL wrk_dealloc( jpi, jpj, jpk, zdepu, zdepv ) 210 ! 211 IF( nn_timing == 1 ) CALL timing_stop('dom_wri') 204 IF( ln_timing ) CALL timing_stop('dom_wri') 212 205 ! 213 206 END SUBROUTINE dom_wri … … 229 222 INTEGER :: ji ! dummy loop indices 230 223 LOGICAL, DIMENSION(SIZE(puniq,1),SIZE(puniq,2),1) :: lldbl ! store whether each point is unique or not 231 REAL(wp), POINTER, DIMENSION(:,:) :: ztstref 232 !!---------------------------------------------------------------------- 233 ! 234 IF( nn_timing == 1 ) CALL timing_start('dom_uniq') 235 ! 236 CALL wrk_alloc( jpi, jpj, ztstref ) 224 REAL(wp), DIMENSION(jpi,jpj) :: ztstref 225 !!---------------------------------------------------------------------- 226 ! 227 IF( ln_timing ) CALL timing_start('dom_uniq') 237 228 ! 238 229 ! build an array with different values for each element … … 250 241 puniq(nldi:nlei,nldj:nlej) = REAL( COUNT( lldbl(nldi:nlei,nldj:nlej,:), dim = 3 ) , wp ) 251 242 ! 252 CALL wrk_dealloc( jpi, jpj, ztstref ) 253 ! 254 IF( nn_timing == 1 ) CALL timing_stop('dom_uniq') 243 IF( ln_timing ) CALL timing_stop('dom_uniq') 255 244 ! 256 245 END SUBROUTINE dom_uniq -
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90
r7753 r8568 36 36 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 37 37 USE lib_mpp ! distributed memory computing library 38 USE wrk_nemo ! Memory allocation39 38 USE timing ! Timing 40 39 … … 77 76 !!---------------------------------------------------------------------- 78 77 ! 79 IF( nn_timing == 1) CALL timing_start('dom_zgr')78 IF( ln_timing ) CALL timing_start('dom_zgr') 80 79 ! 81 80 IF(lwp) THEN ! Control print … … 164 163 ENDIF 165 164 ! 166 IF( nn_timing == 1 )CALL timing_stop('dom_zgr')165 IF( ln_timing ) CALL timing_stop('dom_zgr') 167 166 ! 168 167 END SUBROUTINE dom_zgr … … 284 283 ! 285 284 INTEGER :: ji, jj ! dummy loop indices 286 REAL(wp), POINTER, DIMENSION(:,:) :: zk 287 !!---------------------------------------------------------------------- 288 ! 289 IF( nn_timing == 1 ) CALL timing_start('zgr_top_bot') 290 ! 291 CALL wrk_alloc( jpi,jpj, zk ) 285 REAL(wp), DIMENSION(jpi,jpj) :: zk ! workspace 286 !!---------------------------------------------------------------------- 287 ! 288 IF( ln_timing ) CALL timing_start('zgr_top_bot') 292 289 ! 293 290 IF(lwp) WRITE(numout,*) … … 319 316 zk(:,:) = REAL( mbkv(:,:), wp ) ; CALL lbc_lnk( zk, 'V', 1. ) ; mbkv(:,:) = MAX( INT( zk(:,:) ), 1 ) 320 317 ! 321 CALL wrk_dealloc( jpi,jpj, zk ) 322 ! 323 IF( nn_timing == 1 ) CALL timing_stop('zgr_top_bot') 318 IF( ln_timing ) CALL timing_stop('zgr_top_bot') 324 319 ! 325 320 END SUBROUTINE zgr_top_bot -
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/dtatsd.F90
r7753 r8568 16 16 !!---------------------------------------------------------------------- 17 17 USE oce ! ocean dynamics and tracers 18 USE phycst ! physical constants 18 19 USE dom_oce ! ocean space and time domain 19 20 USE fldread ! read input fields 21 ! 20 22 USE in_out_manager ! I/O manager 21 USE phycst ! physical constants22 23 USE lib_mpp ! MPP library 23 USE wrk_nemo ! Memory allocation24 24 USE timing ! Timing 25 25 … … 62 62 !!---------------------------------------------------------------------- 63 63 ! 64 IF( nn_timing == 1 )CALL timing_start('dta_tsd_init')64 IF( ln_timing ) CALL timing_start('dta_tsd_init') 65 65 ! 66 66 ! Initialisation … … 120 120 ENDIF 121 121 ! 122 IF( nn_timing == 1 )CALL timing_stop('dta_tsd_init')122 IF( ln_timing ) CALL timing_stop('dta_tsd_init') 123 123 ! 124 124 END SUBROUTINE dta_tsd_init … … 145 145 INTEGER :: ji, jj, jk, jl, jkk ! dummy loop indicies 146 146 INTEGER :: ik, il0, il1, ii0, ii1, ij0, ij1 ! local integers 147 REAL(wp):: zl, zi 148 REAL(wp), POINTER, DIMENSION(:) :: ztp, zsp ! 1D workspace149 !!---------------------------------------------------------------------- 150 ! 151 IF( nn_timing == 1 )CALL timing_start('dta_tsd')147 REAL(wp):: zl, zi ! local scalars 148 REAL(wp), DIMENSION(jpk) :: ztp, zsp ! 1D workspace 149 !!---------------------------------------------------------------------- 150 ! 151 IF( ln_timing ) CALL timing_start('dta_tsd') 152 152 ! 153 153 CALL fld_read( kt, 1, sf_tsd ) !== read T & S data at kt time step ==! … … 185 185 ! 186 186 IF( ln_sco ) THEN !== s- or mixed s-zps-coordinate ==! 187 !188 CALL wrk_alloc( jpk, ztp, zsp )189 187 ! 190 188 IF( kt == nit000 .AND. lwp )THEN … … 222 220 END DO 223 221 ! 224 CALL wrk_dealloc( jpk, ztp, zsp )225 !226 222 ELSE !== z- or zps- coordinate ==! 227 223 ! … … 260 256 ENDIF 261 257 ! 262 IF( nn_timing == 1 )CALL timing_stop('dta_tsd')258 IF( ln_timing ) CALL timing_stop('dta_tsd') 263 259 ! 264 260 END SUBROUTINE dta_tsd -
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/iscplhsb.F90
r7646 r8568 13 13 !! iscpl_div : correction of divergence to keep volume conservation 14 14 !!---------------------------------------------------------------------- 15 USE oce ! global tra/dyn variable 15 16 USE dom_oce ! ocean space and time domain 16 17 USE domwri ! ocean space and time domain 18 USE domngb ! 17 19 USE phycst ! physical constants 18 20 USE sbc_oce ! surface boundary condition variables 19 USE oce ! global tra/dyn variable 21 USE iscplini ! 22 ! 20 23 USE in_out_manager ! I/O manager 21 24 USE lib_mpp ! MPP library 22 25 USE lib_fortran ! MPP library 23 USE wrk_nemo ! Memory allocation24 26 USE lbclnk ! 25 USE domngb !26 USE iscplini27 27 28 28 IMPLICIT NONE … … 56 56 REAL(wp), DIMENSION(:,:,: ), INTENT(out) :: pvol_flx !! corrective flux to have volume conservation 57 57 REAL(wp), INTENT(in ) :: prdt_iscpl !! coupling period 58 !! 59 INTEGER :: ji, jj, jk !! loop index 60 INTEGER :: jip1, jim1, jjp1, jjm1 61 !! 62 REAL(wp):: summsk, zsum, zsum1, zarea, zsumn, zsumb 63 REAL(wp):: r1_rdtiscpl 64 REAL(wp):: zjip1_ratio , zjim1_ratio , zjjp1_ratio , zjjm1_ratio 65 !! 66 REAL(wp):: zde3t, zdtem, zdsal 67 REAL(wp), DIMENSION(:,:), POINTER :: zdssh 68 !! 69 REAL(wp), DIMENSION(:), ALLOCATABLE :: zlon, zlat 70 REAL(wp), DIMENSION(:), ALLOCATABLE :: zcorr_vol, zcorr_tem, zcorr_sal 71 INTEGER , DIMENSION(:), ALLOCATABLE :: ixpts, iypts, izpts, inpts 58 ! 59 INTEGER :: ji , jj , jk ! loop index 60 INTEGER :: jip1, jim1, jjp1, jjm1 61 REAL(wp) :: summsk, zsum , zsumn, zjip1_ratio , zjim1_ratio, zdtem, zde3t, z1_rdtiscpl 62 REAL(wp) :: zarea , zsum1, zsumb, zjjp1_ratio , zjjm1_ratio, zdsal 63 REAL(wp), DIMENSION(jpi,jpj) :: zdssh ! workspace 64 REAL(wp), DIMENSION(:), ALLOCATABLE :: zlon, zlat 65 REAL(wp), DIMENSION(:), ALLOCATABLE :: zcorr_vol, zcorr_tem, zcorr_sal 66 INTEGER , DIMENSION(:), ALLOCATABLE :: ixpts, iypts, izpts, inpts 72 67 INTEGER :: jpts, npts 73 74 CALL wrk_alloc(jpi,jpj, zdssh ) 68 !!---------------------------------------------------------------------- 75 69 76 70 ! get imbalance (volume heat and salt) 77 71 ! initialisation difference 78 zde3t = 0. 0_wp; zdsal = 0.0_wp ; zdtem = 0.0_wp72 zde3t = 0._wp ; zdsal = 0._wp ; zdtem = 0._wp 79 73 80 74 ! initialisation correction term 81 pvol_flx(:,:,: ) = 0. 0_wp82 pts_flx (:,:,:,:) = 0. 0_wp75 pvol_flx(:,:,: ) = 0._wp 76 pts_flx (:,:,:,:) = 0._wp 83 77 84 r1_rdtiscpl = 1._wp / prdt_iscpl78 z1_rdtiscpl = 1._wp / prdt_iscpl 85 79 86 80 ! mask tsn and tsb 87 tsb(:,:,:,jp_tem)=tsb(:,:,:,jp_tem)*ptmask_b(:,:,:); tsn(:,:,:,jp_tem)=tsn(:,:,:,jp_tem)*tmask(:,:,:); 88 tsb(:,:,:,jp_sal)=tsb(:,:,:,jp_sal)*ptmask_b(:,:,:); tsn(:,:,:,jp_sal)=tsn(:,:,:,jp_sal)*tmask(:,:,:); 81 tsb(:,:,:,jp_tem) = tsb(:,:,:,jp_tem) * ptmask_b(:,:,:) 82 tsn(:,:,:,jp_tem) = tsn(:,:,:,jp_tem) * tmask (:,:,:) 83 tsb(:,:,:,jp_sal) = tsb(:,:,:,jp_sal) * ptmask_b(:,:,:) 84 tsn(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) * tmask (:,:,:) 89 85 90 86 !============================================================================== … … 118 114 119 115 ! volume, heat and salt differences in each cell 120 pvol_flx(ji,jj,jk) = pvol_flx(ji,jj,jk) + zde3t * r1_rdtiscpl121 pts_flx (ji,jj,jk,jp_sal)= pts_flx (ji,jj,jk,jp_sal) + zdsal * r1_rdtiscpl122 pts_flx (ji,jj,jk,jp_tem)= pts_flx (ji,jj,jk,jp_tem) + zdtem * r1_rdtiscpl116 pvol_flx(ji,jj,jk) = pvol_flx(ji,jj,jk) + zde3t * z1_rdtiscpl 117 pts_flx (ji,jj,jk,jp_sal)= pts_flx (ji,jj,jk,jp_sal) + zdsal * z1_rdtiscpl 118 pts_flx (ji,jj,jk,jp_tem)= pts_flx (ji,jj,jk,jp_tem) + zdtem * z1_rdtiscpl 123 119 124 120 ! case where we close a cell: check if the neighbour cells are wet … … 190 186 ! if no neighbour wet cell in case of 2close a cell", need to find the nearest wet point 191 187 ! allocation and initialisation of the list of problematic point 192 ALLOCATE( inpts(jpnij))193 inpts(:) =0188 ALLOCATE( inpts(jpnij) ) 189 inpts(:) = 0 194 190 195 191 ! fill narea location with the number of problematic point … … 287 283 CALL lbc_sum(pts_flx (:,:,:,jp_sal),'T',1._wp) 288 284 CALL lbc_sum(pts_flx (:,:,:,jp_tem),'T',1._wp) 289 290 ! deallocate variables 291 CALL wrk_dealloc(jpi,jpj, zdssh ) 292 285 ! 293 286 END SUBROUTINE iscpl_cons 287 294 288 295 289 SUBROUTINE iscpl_div( phdivn ) -
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/iscplini.F90
r7646 r8568 11 11 !! iscpl_alloc : allocation of correction variables 12 12 !!---------------------------------------------------------------------- 13 USE oce ! global tra/dyn variable 13 14 USE dom_oce ! ocean space and time domain 14 USE oce ! global tra/dyn variable15 ! 15 16 USE lib_mpp ! MPP library 16 17 USE lib_fortran ! MPP library … … 47 48 END FUNCTION iscpl_alloc 48 49 50 49 51 SUBROUTINE iscpl_init() 52 !!---------------------------------------------------------------------- 50 53 INTEGER :: ios ! Local integer output status for namelist read 51 NAMELIST/namsbc_iscpl/ nn_fiscpl,ln_hsb,nn_drown54 NAMELIST/namsbc_iscpl/ nn_fiscpl, ln_hsb, nn_drown 52 55 !!---------------------------------------------------------------------- 53 ! ! ============54 ! ! Namelist55 ! ! ============56 56 ! 57 57 nn_fiscpl = 0 … … 79 79 WRITE(numout,*) ' coupling time step = ', rdt_iscpl 80 80 WRITE(numout,*) ' number of call of the extrapolation loop = ', nn_drown 81 END 82 81 ENDIF 82 ! 83 83 END SUBROUTINE iscpl_init 84 84 85 !!====================================================================== 85 86 END MODULE iscplini -
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/iscplrst.F90
r7646 r8568 11 11 !! iscpl_rst_interpol : restart interpolation in case of coupling with ice sheet 12 12 !!---------------------------------------------------------------------- 13 USE oce ! global tra/dyn variable 13 14 USE dom_oce ! ocean space and time domain 14 15 USE domwri ! ocean space and time domain 15 USE domvvl , ONLY : dom_vvl_interpol16 USE domvvl , ONLY : dom_vvl_interpol 16 17 USE phycst ! physical constants 17 18 USE sbc_oce ! surface boundary condition variables 18 USE oce ! global tra/dyn variable 19 USE iscplini ! ice sheet coupling: initialisation 20 USE iscplhsb ! ice sheet coupling: conservation 21 ! 19 22 USE in_out_manager ! I/O manager 20 23 USE iom ! I/O module 21 24 USE lib_mpp ! MPP library 22 25 USE lib_fortran ! MPP library 23 USE wrk_nemo ! Memory allocation24 26 USE lbclnk ! communication 25 USE iscplini ! ice sheet coupling: initialisation26 USE iscplhsb ! ice sheet coupling: conservation27 27 28 28 IMPLICIT NONE … … 50 50 !!---------------------------------------------------------------------- 51 51 INTEGER :: inum0 52 REAL(wp), DIMENSION( :,: ), POINTER:: zsmask_b53 REAL(wp), DIMENSION( :,:,:), POINTER:: ztmask_b, zumask_b, zvmask_b54 REAL(wp), DIMENSION( :,:,:), POINTER:: ze3t_b , ze3u_b , ze3v_b55 REAL(wp), DIMENSION( :,:,:), POINTER:: zdepw_b52 REAL(wp), DIMENSION(jpi,jpj) :: zsmask_b 53 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztmask_b, zumask_b, zvmask_b 54 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3t_b , ze3u_b , ze3v_b 55 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepw_b 56 56 CHARACTER(20) :: cfile 57 57 !!---------------------------------------------------------------------- 58 59 CALL wrk_alloc(jpi,jpj,jpk, ztmask_b, zumask_b, zvmask_b) ! mask before 60 CALL wrk_alloc(jpi,jpj,jpk, ze3t_b , ze3u_b , ze3v_b ) ! e3 before 61 CALL wrk_alloc(jpi,jpj,jpk, zdepw_b ) 62 CALL wrk_alloc(jpi,jpj, zsmask_b ) 63 64 65 !! get restart variable 58 ! 59 ! ! get restart variable 66 60 CALL iom_get( numror, jpdom_autoglo, 'tmask' , ztmask_b ) ! need to extrapolate T/S 67 61 CALL iom_get( numror, jpdom_autoglo, 'umask' , zumask_b ) ! need to correct barotropic velocity … … 72 66 CALL iom_get( numror, jpdom_autoglo, 'e3v_n' , ze3v_b(:,:,:) ) ! need to correct barotropic velocity 73 67 CALL iom_get( numror, jpdom_autoglo, 'gdepw_n', zdepw_b(:,:,:) ) ! need to interpol vertical profile (vvl) 74 75 !! read namelist 76 CALL iscpl_init() 77 78 !! ! Extrapolation/interpolation of modify cell and new cells ... (maybe do it later after domvvl) 68 ! 69 CALL iscpl_init() ! read namelist 70 ! ! Extrapolation/interpolation of modify cell and new cells ... (maybe do it later after domvvl) 79 71 CALL iscpl_rst_interpol( ztmask_b, zumask_b, zvmask_b, zsmask_b, ze3t_b, ze3u_b, ze3v_b, zdepw_b ) 80 81 !! compute correction if conservation needed 82 IF ( ln_hsb ) THEN 72 ! 73 IF ( ln_hsb ) THEN ! compute correction if conservation needed 83 74 IF( iscpl_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'rst_iscpl : unable to allocate rst_iscpl arrays' ) 84 75 CALL iscpl_cons(ztmask_b, zsmask_b, ze3t_b, htsc_iscpl, hdiv_iscpl, rdt_iscpl) 85 76 END IF 86 77 87 ! ! print mesh/mask88 IF( nn_msh /= 0 .AND. ln_iscpl ) CALL dom_wri ! Create a domain file89 78 ! ! create a domain file 79 IF( nn_msh /= 0 .AND. ln_iscpl ) CALL dom_wri 80 ! 90 81 IF ( ln_hsb ) THEN 91 82 cfile='correction' … … 97 88 CALL iom_close ( inum0 ) 98 89 END IF 99 100 CALL wrk_dealloc(jpi,jpj,jpk, ztmask_b,zumask_b,zvmask_b ) 101 CALL wrk_dealloc(jpi,jpj,jpk, ze3t_b ,ze3u_b ,ze3v_b ) 102 CALL wrk_dealloc(jpi,jpj,jpk, zdepw_b ) 103 CALL wrk_dealloc(jpi,jpj, zsmask_b ) 104 105 !! next step is an euler time step 106 neuler = 0 107 108 !! set _b and _n variables equal 90 ! 91 neuler = 0 ! next step is an euler time step 92 ! 93 ! ! set _b and _n variables equal 109 94 tsb (:,:,:,:) = tsn (:,:,:,:) 110 95 ub (:,:,:) = un (:,:,:) 111 96 vb (:,:,:) = vn (:,:,:) 112 97 sshb(:,:) = sshn(:,:) 113 114 ! ! set _b and _n vertical scale factor equal98 ! 99 ! ! set _b and _n vertical scale factor equal 115 100 e3t_b (:,:,:) = e3t_n (:,:,:) 116 101 e3u_b (:,:,:) = e3u_n (:,:,:) 117 102 e3v_b (:,:,:) = e3v_n (:,:,:) 118 103 ! 119 104 e3uw_b (:,:,:) = e3uw_n (:,:,:) 120 105 e3vw_b (:,:,:) = e3vw_n (:,:,:) … … 150 135 REAL(wp):: zdz, zdzm1, zdzp1 151 136 !! 152 REAL(wp), DIMENSION(:,: ), POINTER :: zdmask , zdsmask, zvcorr, zucorr, zde3t 153 REAL(wp), DIMENSION(:,: ), POINTER :: zbub , zbvb , zbun , zbvn 154 REAL(wp), DIMENSION(:,: ), POINTER :: zssh0 , zssh1, zhu1, zhv1 155 REAL(wp), DIMENSION(:,: ), POINTER :: zsmask0, zsmask1 156 REAL(wp), DIMENSION(:,:,: ), POINTER :: ztmask0, ztmask1, ztrp 157 REAL(wp), DIMENSION(:,:,: ), POINTER :: zwmaskn, zwmaskb, ztmp3d 158 REAL(wp), DIMENSION(:,:,:,:), POINTER :: zts0 137 REAL(wp), DIMENSION(jpi,jpj) :: zdmask , zsmask0, zucorr, zbub, zbun, zssh0, zhu1, zde3t 138 REAL(wp), DIMENSION(jpi,jpj) :: zdsmask, zsmask1, zvcorr, zbvb, zbvn, zssh1, zhv1 139 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztmask0, zwmaskn, ztrp 140 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztmask1, zwmaskb, ztmp3d 141 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts) :: zts0 159 142 !!---------------------------------------------------------------------- 160 161 !! allocate variables 162 CALL wrk_alloc(jpi,jpj,jpk,2, zts0 ) 163 CALL wrk_alloc(jpi,jpj,jpk, ztmask0, ztmask1 , ztrp, ztmp3d ) 164 CALL wrk_alloc(jpi,jpj,jpk, zwmaskn, zwmaskb ) 165 CALL wrk_alloc(jpi,jpj, zsmask0, zsmask1 ) 166 CALL wrk_alloc(jpi,jpj, zdmask , zdsmask, zvcorr, zucorr, zde3t) 167 CALL wrk_alloc(jpi,jpj, zbub , zbvb , zbun , zbvn ) 168 CALL wrk_alloc(jpi,jpj, zssh0 , zssh1, zhu1, zhv1 ) 169 170 !! mask value to be sure 143 ! 144 ! ! mask value to be sure 171 145 tsn(:,:,:,jp_tem) = tsn(:,:,:,jp_tem) * ptmask_b(:,:,:) 172 146 tsn(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) * ptmask_b(:,:,:) 173 174 ! compute wmask147 ! 148 ! ! compute wmask 175 149 zwmaskn(:,:,1) = tmask (:,:,1) 176 150 zwmaskb(:,:,1) = ptmask_b(:,:,1) … … 179 153 zwmaskb(:,:,jk) = ptmask_b(:,:,jk) * ptmask_b(:,:,jk-1) 180 154 END DO 181 182 ! compute new ssh if we open a full water column (average of the closest neigbourgs)155 ! 156 ! ! compute new ssh if we open a full water column (average of the closest neigbourgs) 183 157 sshb (:,:)=sshn(:,:) 184 158 zssh0(:,:)=sshn(:,:) 185 159 zsmask0(:,:) = psmask_b(:,:) 186 160 zsmask1(:,:) = psmask_b(:,:) 187 DO iz = 1, 10! need to be tuned (configuration dependent) (OK for ISOMIP+)161 DO iz = 1, 10 ! need to be tuned (configuration dependent) (OK for ISOMIP+) 188 162 zdsmask(:,:) = ssmask(:,:)-zsmask0(:,:) 189 163 DO jj = 2,jpj-1 … … 198 172 & + zssh0(ji,jjm1)*zsmask0(ji,jjm1))/summsk 199 173 zsmask1(ji,jj)=1._wp 200 END 174 ENDIF 201 175 END DO 202 176 END DO 203 CALL lbc_lnk( sshn,'T',1._wp)204 CALL lbc_lnk( zsmask1,'T',1._wp)177 CALL lbc_lnk( sshn , 'T', 1._wp ) 178 CALL lbc_lnk( zsmask1, 'T', 1._wp ) 205 179 zssh0 = sshn 206 180 zsmask0 = zsmask1 … … 210 184 !============================================================================= 211 185 !PM: Is this needed since introduction of VVL by default? 212 IF ( .NOT.ln_linssh) THEN186 IF ( .NOT.ln_linssh ) THEN 213 187 ! Reconstruction of all vertical scale factors at now time steps 214 188 ! ============================================================================= … … 224 198 END DO 225 199 END DO 226 200 ! 227 201 CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 228 202 CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 229 203 CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F' ) 230 204 231 ! Vertical scale factor interpolations232 ! ------------------------------------205 ! Vertical scale factor interpolations 206 ! ------------------------------------ 233 207 CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W' ) 234 208 CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 235 209 CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 236 237 ! t- and w- points depth238 ! ----------------------210 211 ! t- and w- points depth 212 ! ---------------------- 239 213 gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 240 214 gdepw_n(:,:,1) = 0.0_wp … … 429 403 ! nothing to do 430 404 ! 431 ! deallocation tmp arrays432 CALL wrk_dealloc(jpi,jpj,jpk,2, zts0 )433 CALL wrk_dealloc(jpi,jpj,jpk, ztmask0, ztmask1 , ztrp )434 CALL wrk_dealloc(jpi,jpj,jpk, zwmaskn, zwmaskb , ztmp3d )435 CALL wrk_dealloc(jpi,jpj, zsmask0, zsmask1 )436 CALL wrk_dealloc(jpi,jpj, zdmask , zdsmask, zvcorr, zucorr, zde3t)437 CALL wrk_dealloc(jpi,jpj, zbub , zbvb , zbun , zbvn )438 CALL wrk_dealloc(jpi,jpj, zssh0 , zssh1 , zhu1 , zhv1 )439 !440 405 END SUBROUTINE iscpl_rst_interpol 441 406 -
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/DOM/istate.F90
r7753 r8568 36 36 USE lib_mpp ! MPP library 37 37 USE restart ! restart 38 USE wrk_nemo ! Memory allocation39 38 USE timing ! Timing 40 39 … … 60 59 !!---------------------------------------------------------------------- 61 60 INTEGER :: ji, jj, jk ! dummy loop indices 62 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: zuvd ! U & V data workspace 61 !!gm see comment further down 62 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: zuvd ! U & V data workspace 63 !!gm end 63 64 !!---------------------------------------------------------------------- 64 65 ! 65 IF( nn_timing == 1) CALL timing_start('istate_init')66 IF( ln_timing ) CALL timing_start('istate_init') 66 67 ! 67 68 IF(lwp) WRITE(numout,*) … … 121 122 !!gm to be moved in usrdef of C1D case 122 123 ! IF ( ln_uvd_init .AND. lk_c1d ) THEN ! read 3D U and V data at nit000 123 ! CALL wrk_alloc( jpi,jpj,jpk,2, zuvd)124 ! ALLOCATE( zuvd(jpi,jpj,jpk,2) ) 124 125 ! CALL dta_uvd( nit000, zuvd ) 125 126 ! ub(:,:,:) = zuvd(:,:,:,1) ; un(:,:,:) = ub(:,:,:) 126 127 ! vb(:,:,:) = zuvd(:,:,:,2) ; vn(:,:,:) = vb(:,:,:) 127 ! CALL wrk_dealloc( jpi,jpj,jpk,2,zuvd )128 ! DEALLOCATE( zuvd ) 128 129 ! ENDIF 129 130 ! … … 164 165 vb_b(:,:) = vb_b(:,:) * r1_hv_b(:,:) 165 166 ! 166 IF( nn_timing == 1) CALL timing_stop('istate_init')167 IF( ln_timing ) CALL timing_stop('istate_init') 167 168 ! 168 169 END SUBROUTINE istate_init
Note: See TracChangeset
for help on using the changeset viewer.