- Timestamp:
- 2015-11-25T17:58:51+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/NERC/dev_r5589_is_oce_cpl/NEMOGCM/NEMO/OPA_SRC/DOM/iscplhsb.F90
r5835 r5920 33 33 !! * Substitutions 34 34 # include "domzgr_substitute.h90" 35 # include "vectopt_loop_substitute.h90" 35 36 !!---------------------------------------------------------------------- 36 37 !! NEMO/OPA 3.3 , NEMO Consortium (2010) … … 57 58 REAL(wp), INTENT(in ) :: prdt_iscpl !! coupling period 58 59 !! 59 INTEGER :: ji, jj, jk !! loop index60 INTEGER :: ji, jj, jk !! loop index 60 61 INTEGER :: jip1, jim1, jjp1, jjm1 61 62 !! 62 63 REAL(wp):: summsk, zsum, zsum1, zarea, zsumn, zsumb 63 REAL(wp):: r1_ tiscpl64 REAL(wp):: r1_rdtiscpl 64 65 REAL(wp):: zjip1_ratio , zjim1_ratio , zjjp1_ratio , zjjm1_ratio 65 66 !! 66 REAL(wp), DIMENSION(:,: ), POINTER :: zde3t, zdtem, zdsal 67 REAL(wp), DIMENSION(:,: ), POINTER :: zssh0 68 REAL(wp), DIMENSION(:,:,: ), POINTER :: ztmp3d 69 ! 70 REAL(wp), DIMENSION(: ), ALLOCATABLE :: zlon, zlat 71 REAL(wp), DIMENSION(: ), ALLOCATABLE :: zcorr_vol, zcorr_tem, zcorr_sal 72 INTEGER , DIMENSION(: ), ALLOCATABLE :: ixpts, iypts, izpts, vnpts 67 REAL(wp):: zde3t, zdtem, zdsal 68 REAL(wp), DIMENSION(:,:), POINTER :: zdssh 69 !! 70 REAL(wp), DIMENSION(:), ALLOCATABLE :: zlon, zlat 71 REAL(wp), DIMENSION(:), ALLOCATABLE :: zcorr_vol, zcorr_tem, zcorr_sal 72 INTEGER , DIMENSION(:), ALLOCATABLE :: ixpts, iypts, izpts, vnpts 73 73 INTEGER :: jpts, npts 74 74 75 CALL wrk_alloc(jpi,jpj, jpk, ztmp3d)76 CALL wrk_alloc(jpi,jpj, zde3t , zdtem, zdsal ) 77 CALL wrk_alloc(jpi,jpj, zssh0)78 79 ! get unbalance (volume heat and salt)80 ! initialisation 81 zde3t (:,:) = 0.0_wp75 CALL wrk_alloc(jpi,jpj, zdssh ) 76 77 ! get imbalance (volume heat and salt) 78 ! initialisation difference 79 zde3t = 0.0_wp; zdsal = 0.0_wp ; zdtem = 0.0_wp 80 81 ! initialisation correction term 82 82 pvol_flx(:,:,: ) = 0.0_wp 83 83 pts_flx (:,:,:,:) = 0.0_wp 84 r1_tiscpl = 1._wp / (prdt_iscpl * rn_rdt) 84 85 r1_rdtiscpl = 1._wp / prdt_iscpl 85 86 86 87 ! mask tsn and tsb … … 93 94 94 95 ! 95 z ssh0(:,:)= sshn(:,:) * ssmask(:,:) - sshb(:,:) * psmask_b(:,:)96 IF ( lk_vvl ) z ssh0 = 0.0_wp ! already includein the levels by definition96 zdssh(:,:) = sshn(:,:) * ssmask(:,:) - sshb(:,:) * psmask_b(:,:) 97 IF ( lk_vvl ) zdssh = 0.0_wp ! already included in the levels by definition 97 98 98 99 DO jk = 1,jpk-1 99 DO j i = 2,jpi-1100 DO j j = 2,jpj-1100 DO jj = 2,jpj-1 101 DO ji = fs_2,fs_jpim1 101 102 IF (tmask_h(ji,jj) == 1._wp) THEN 102 103 103 104 ! volume differences 104 zde3t (ji,jj)= fse3t_n(ji,jj,jk) * tmask(ji,jj,jk) - pe3t_b(ji,jj,jk) * ptmask_b(ji,jj,jk)105 zde3t = fse3t_n(ji,jj,jk) * tmask(ji,jj,jk) - pe3t_b(ji,jj,jk) * ptmask_b(ji,jj,jk) 105 106 106 107 ! heat diff 107 zdtem (ji,jj)= tsn(ji,jj,jk,jp_tem) * fse3t_n(ji,jj,jk) * tmask (ji,jj,jk) &108 108 zdtem = tsn(ji,jj,jk,jp_tem) * fse3t_n(ji,jj,jk) * tmask (ji,jj,jk) & 109 - tsb(ji,jj,jk,jp_tem) * pe3t_b (ji,jj,jk) * ptmask_b(ji,jj,jk) 109 110 ! salt diff 110 zdsal (ji,jj)= tsn(ji,jj,jk,jp_sal) * fse3t_n(ji,jj,jk) * tmask (ji,jj,jk) &111 111 zdsal = tsn(ji,jj,jk,jp_sal) * fse3t_n(ji,jj,jk) * tmask (ji,jj,jk) & 112 - tsb(ji,jj,jk,jp_sal) * pe3t_b (ji,jj,jk) * ptmask_b(ji,jj,jk) 112 113 113 114 ! shh changes 114 115 IF ( ptmask_b(ji,jj,jk) == 1._wp .OR. tmask(ji,jj,jk) == 1._wp ) THEN 115 zde3t (ji,jj) = zde3t(ji,jj) + zssh0(ji,jj) ! zssh0= 0 if vvl116 z ssh0(ji,jj) = 0._wp116 zde3t = zde3t + zdssh(ji,jj) ! zdssh = 0 if vvl 117 zdssh(ji,jj) = 0._wp 117 118 END IF 118 119 119 120 ! volume, heat and salt differences in each cell 120 pvol_flx(ji,jj,jk) = pvol_flx(ji,jj,jk) + zde3t (ji,jj) * r1_tiscpl121 pts_flx (ji,jj,jk,jp_sal)= pts_flx (ji,jj,jk,jp_sal) + zdsal (ji,jj) * r1_tiscpl122 pts_flx (ji,jj,jk,jp_tem)= pts_flx (ji,jj,jk,jp_tem) + zdtem (ji,jj) * r1_tiscpl121 pvol_flx(ji,jj,jk) = pvol_flx(ji,jj,jk) + zde3t * r1_rdtiscpl 122 pts_flx (ji,jj,jk,jp_sal)= pts_flx (ji,jj,jk,jp_sal) + zdsal * r1_rdtiscpl 123 pts_flx (ji,jj,jk,jp_tem)= pts_flx (ji,jj,jk,jp_tem) + zdtem * r1_rdtiscpl 123 124 124 125 ! case where we close a cell: check if the neighbour cells are wet … … 192 193 ! fill narea location with the number of problematic point 193 194 DO jk = 1,jpk-1 194 DO j i = 2,jpi-1195 DO j j = 2,jpj-1195 DO jj = 2,jpj-1 196 DO ji = fs_2,fs_jpim1 196 197 IF ( ptmask_b(ji,jj,jk) == 1._wp .AND. tmask(ji,jj,jk+1) == 0._wp .AND. tmask_h(ji,jj) == 1._wp & 197 198 .AND. SUM(tmask(ji-1:ji+1,jj,jk)) + SUM(tmask(ji,jj-1:jj+1,jk)) == 0._wp) THEN … … 218 219 jpts = SUM(vnpts(1:narea-1)) 219 220 DO jk = 1,jpk-1 220 DO j i = 2,jpi-1221 DO j j = 2,jpj-1221 DO jj = 2,jpj-1 222 DO ji = fs_2,fs_jpim1 222 223 IF ( ptmask_b(ji,jj,jk) == 1._wp .AND. tmask(ji,jj,jk+1) == 0._wp .AND. tmask_h(ji,jj) == 1._wp & 223 224 .AND. SUM(tmask(ji-1:ji+1,jj,jk)) + SUM(tmask(ji,jj-1:jj+1,jk)) == 0._wp) THEN … … 286 287 287 288 ! deallocate variables 288 CALL wrk_dealloc(jpi,jpj,jpk, ztmp3d ) 289 CALL wrk_dealloc(jpi,jpj, zde3t ) 290 CALL wrk_dealloc(jpi,jpj, zssh0 ) 289 CALL wrk_dealloc(jpi,jpj, zdssh ) 290 291 291 END SUBROUTINE iscpl_cons 292 292
Note: See TracChangeset
for help on using the changeset viewer.