- Timestamp:
- 2016-11-28T17:04:10+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_INGV_UKMO_2016/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn.F90
r5930 r7351 36 36 PUBLIC bdy_dyn ! routine called in dyn_nxt 37 37 38 # include "domzgr_substitute.h90"39 38 !!---------------------------------------------------------------------- 40 39 !! NEMO/OPA 3.3 , NEMO Consortium (2010) … … 51 50 !! 52 51 !!---------------------------------------------------------------------- 53 !! 54 INTEGER, INTENT( in ) :: kt ! Main time step counter 55 LOGICAL, INTENT( in ), OPTIONAL :: dyn3d_only ! T => only update baroclinic velocities 56 !! 57 INTEGER :: jk,ii,ij,ib_bdy,ib,igrd ! Loop counter 58 LOGICAL :: ll_dyn2d, ll_dyn3d, ll_orlanski 59 !! 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 60 57 REAL(wp), POINTER, DIMENSION(:,:) :: pua2d, pva2d ! after barotropic velocities 61 62 IF( nn_timing == 1 ) CALL timing_start('bdy_dyn') 63 58 !!---------------------------------------------------------------------- 59 ! 60 IF( nn_timing == 1 ) CALL timing_start('bdy_dyn') 61 ! 64 62 ll_dyn2d = .true. 65 63 ll_dyn3d = .true. 66 64 ! 67 65 IF( PRESENT(dyn3d_only) ) THEN 68 IF( dyn3d_only ) ll_dyn2d = .false.66 IF( dyn3d_only ) ll_dyn2d = .false. 69 67 ENDIF 70 68 ! 71 69 ll_orlanski = .false. 72 70 DO ib_bdy = 1, nb_bdy 73 IF ( cn_dyn2d(ib_bdy) == 'orlanski' . or. cn_dyn2d(ib_bdy) == 'orlanski_npo' &74 & . or. cn_dyn3d(ib_bdy) == 'orlanski' .or. cn_dyn3d(ib_bdy) == 'orlanski_npo')ll_orlanski = .true.75 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 76 74 77 75 !------------------------------------------------------- … … 79 77 !------------------------------------------------------- 80 78 81 CALL wrk_alloc( jpi,jpj,pua2d,pva2d)79 CALL wrk_alloc( jpi,jpj, pua2d, pva2d ) 82 80 83 81 !------------------------------------------------------- … … 85 83 !------------------------------------------------------- 86 84 87 ! "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(:,:) 88 94 89 pua2d(:,:) = 0.e0 90 pva2d(:,:) = 0.e0 91 DO jk = 1, jpkm1 92 pua2d(:,:) = pua2d(:,:) + fse3u_a(:,:,jk) * umask(:,:,jk) * ua(:,:,jk) 93 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) 94 98 END DO 95 99 96 pua2d(:,:) = pua2d(:,:) * hur_a(:,:)97 pva2d(:,:) = pva2d(:,:) * hvr_a(:,:)98 100 99 DO jk = 1 , jpkm1 100 ua(:,:,jk) = (ua(:,:,jk) - pua2d(:,:)) * umask(:,:,jk) 101 va(:,:,jk) = (va(:,:,jk) - pva2d(:,:)) * vmask(:,:,jk) 102 END DO 103 104 ! "Before" velocities (required for Orlanski condition): 105 106 IF ( ll_orlanski ) THEN 101 IF( ll_orlanski ) THEN ! "Before" velocities (Orlanski condition only) 107 102 DO jk = 1 , jpkm1 108 ub(:,:,jk) = ( ub(:,:,jk) - ub_b(:,:)) * umask(:,:,jk)109 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) 110 105 END DO 111 END 106 ENDIF 112 107 113 108 !------------------------------------------------------- … … 116 111 !------------------------------------------------------- 117 112 118 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 ) 119 114 120 IF( ll_dyn3d ) CALL bdy_dyn3d( kt )115 IF( ll_dyn3d ) CALL bdy_dyn3d( kt ) 121 116 122 117 !------------------------------------------------------- 123 118 ! Recombine velocities 124 119 !------------------------------------------------------- 125 120 ! 126 121 DO jk = 1 , jpkm1 127 122 ua(:,:,jk) = ( ua(:,:,jk) + pua2d(:,:) ) * umask(:,:,jk) 128 123 va(:,:,jk) = ( va(:,:,jk) + pva2d(:,:) ) * vmask(:,:,jk) 129 124 END DO 130 125 ! 131 126 IF ( ll_orlanski ) THEN 132 127 DO jk = 1 , jpkm1 … … 135 130 END DO 136 131 END IF 137 138 CALL wrk_dealloc( jpi,jpj,pua2d,pva2d)139 140 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn')141 132 ! 133 CALL wrk_dealloc( jpi,jpj, pua2d, pva2d ) 134 ! 135 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn') 136 ! 142 137 END SUBROUTINE bdy_dyn 143 138
Note: See TracChangeset
for help on using the changeset viewer.