- Timestamp:
- 2016-01-08T10:35:19+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn.F90
r4689 r6225 24 24 USE oce ! ocean dynamics and tracers 25 25 USE dom_oce ! ocean space and time domain 26 USE dynspg_oce27 26 USE bdy_oce ! ocean open boundary conditions 28 27 USE bdydyn2d ! open boundary conditions for barotropic solution … … 35 34 PRIVATE 36 35 37 PUBLIC bdy_dyn ! routine called in dynspg_flt (if lk_dynspg_flt) or 38 ! dyn_nxt (if lk_dynspg_ts or lk_dynspg_exp) 36 PUBLIC bdy_dyn ! routine called in dyn_nxt 39 37 40 # include "domzgr_substitute.h90"41 38 !!---------------------------------------------------------------------- 42 39 !! NEMO/OPA 3.3 , NEMO Consortium (2010) … … 53 50 !! 54 51 !!---------------------------------------------------------------------- 55 !! 56 INTEGER, INTENT( in ) :: kt ! Main time step counter 57 LOGICAL, INTENT( in ), OPTIONAL :: dyn3d_only ! T => only update baroclinic velocities 58 !! 59 INTEGER :: jk,ii,ij,ib_bdy,ib,igrd ! Loop counter 60 LOGICAL :: ll_dyn2d, ll_dyn3d, ll_orlanski 61 !! 52 INTEGER, INTENT(in) :: kt ! Main time step counter 53 LOGICAL, INTENT(in), OPTIONAL :: dyn3d_only ! T => only update baroclinic velocities 54 ! 55 INTEGER :: jk, ii, ij, ib_bdy, ib, igrd ! Loop counter 56 LOGICAL :: ll_dyn2d, ll_dyn3d, ll_orlanski 62 57 REAL(wp), POINTER, DIMENSION(:,:) :: pua2d, pva2d ! after barotropic velocities 63 64 IF( nn_timing == 1 ) CALL timing_start('bdy_dyn') 65 58 !!---------------------------------------------------------------------- 59 ! 60 IF( nn_timing == 1 ) CALL timing_start('bdy_dyn') 61 ! 66 62 ll_dyn2d = .true. 67 63 ll_dyn3d = .true. 68 64 ! 69 65 IF( PRESENT(dyn3d_only) ) THEN 70 IF( dyn3d_only ) ll_dyn2d = .false.66 IF( dyn3d_only ) ll_dyn2d = .false. 71 67 ENDIF 72 68 ! 73 69 ll_orlanski = .false. 74 70 DO ib_bdy = 1, nb_bdy 75 IF ( cn_dyn2d(ib_bdy) == 'orlanski' . or. cn_dyn2d(ib_bdy) == 'orlanski_npo' &76 & . or. cn_dyn3d(ib_bdy) == 'orlanski' .or. cn_dyn3d(ib_bdy) == 'orlanski_npo')ll_orlanski = .true.77 END DO71 IF ( cn_dyn2d(ib_bdy) == 'orlanski' .OR. cn_dyn2d(ib_bdy) == 'orlanski_npo' & 72 & .OR. cn_dyn3d(ib_bdy) == 'orlanski' .OR. cn_dyn3d(ib_bdy) == 'orlanski_npo') ll_orlanski = .true. 73 END DO 78 74 79 75 !------------------------------------------------------- … … 81 77 !------------------------------------------------------- 82 78 83 CALL wrk_alloc( jpi,jpj,pua2d,pva2d)79 CALL wrk_alloc( jpi,jpj, pua2d, pva2d ) 84 80 85 81 !------------------------------------------------------- … … 87 83 !------------------------------------------------------- 88 84 89 ! "After" velocities: 85 ! ! "After" velocities: 86 pua2d(:,:) = 0._wp 87 pva2d(:,:) = 0._wp 88 DO jk = 1, jpkm1 89 pua2d(:,:) = pua2d(:,:) + e3u_a(:,:,jk) * ua(:,:,jk) * umask(:,:,jk) 90 pva2d(:,:) = pva2d(:,:) + e3v_a(:,:,jk) * va(:,:,jk) * vmask(:,:,jk) 91 END DO 92 pua2d(:,:) = pua2d(:,:) * r1_hu_a(:,:) 93 pva2d(:,:) = pva2d(:,:) * r1_hv_a(:,:) 90 94 91 pua2d(:,:) = 0.e0 92 pva2d(:,:) = 0.e0 93 DO jk = 1, jpkm1 94 pua2d(:,:) = pua2d(:,:) + fse3u_a(:,:,jk) * umask(:,:,jk) * ua(:,:,jk) 95 pva2d(:,:) = pva2d(:,:) + fse3v_a(:,:,jk) * vmask(:,:,jk) * va(:,:,jk) 95 DO jk = 1 , jpkm1 96 ua(:,:,jk) = ( ua(:,:,jk) - pua2d(:,:) ) * umask(:,:,jk) 97 va(:,:,jk) = ( va(:,:,jk) - pva2d(:,:) ) * vmask(:,:,jk) 96 98 END DO 97 99 98 pua2d(:,:) = pua2d(:,:) * hur_a(:,:)99 pva2d(:,:) = pva2d(:,:) * hvr_a(:,:)100 100 101 DO jk = 1 , jpkm1 102 ua(:,:,jk) = (ua(:,:,jk) - pua2d(:,:)) * umask(:,:,jk) 103 va(:,:,jk) = (va(:,:,jk) - pva2d(:,:)) * vmask(:,:,jk) 104 END DO 105 106 ! "Before" velocities (required for Orlanski condition): 107 108 IF ( ll_orlanski ) THEN 101 IF( ll_orlanski ) THEN ! "Before" velocities (Orlanski condition only) 109 102 DO jk = 1 , jpkm1 110 ub(:,:,jk) = ( ub(:,:,jk) - ub_b(:,:)) * umask(:,:,jk)111 vb(:,:,jk) = ( vb(:,:,jk) - vb_b(:,:)) * vmask(:,:,jk)103 ub(:,:,jk) = ( ub(:,:,jk) - ub_b(:,:) ) * umask(:,:,jk) 104 vb(:,:,jk) = ( vb(:,:,jk) - vb_b(:,:) ) * vmask(:,:,jk) 112 105 END DO 113 END 106 ENDIF 114 107 115 108 !------------------------------------------------------- … … 118 111 !------------------------------------------------------- 119 112 120 IF( ll_dyn2d ) CALL bdy_dyn2d( kt, pua2d, pva2d, ub_b, vb_b, hur_a(:,:), hvr_a(:,:), ssha )113 IF( ll_dyn2d ) CALL bdy_dyn2d( kt, pua2d, pva2d, ub_b, vb_b, r1_hu_a(:,:), r1_hv_a(:,:), ssha ) 121 114 122 IF( ll_dyn3d ) CALL bdy_dyn3d( kt )115 IF( ll_dyn3d ) CALL bdy_dyn3d( kt ) 123 116 124 117 !------------------------------------------------------- 125 118 ! Recombine velocities 126 119 !------------------------------------------------------- 127 120 ! 128 121 DO jk = 1 , jpkm1 129 122 ua(:,:,jk) = ( ua(:,:,jk) + pua2d(:,:) ) * umask(:,:,jk) 130 123 va(:,:,jk) = ( va(:,:,jk) + pva2d(:,:) ) * vmask(:,:,jk) 131 124 END DO 132 125 ! 133 126 IF ( ll_orlanski ) THEN 134 127 DO jk = 1 , jpkm1 … … 137 130 END DO 138 131 END IF 139 140 CALL wrk_dealloc( jpi,jpj,pua2d,pva2d)141 142 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn')143 132 ! 133 CALL wrk_dealloc( jpi,jpj, pua2d, pva2d ) 134 ! 135 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn') 136 ! 144 137 END SUBROUTINE bdy_dyn 145 138
Note: See TracChangeset
for help on using the changeset viewer.