Changeset 10957 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/BDY/bdytra.F90
- Timestamp:
- 2019-05-10T12:26:38+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/BDY/bdytra.F90
r10529 r10957 40 40 CONTAINS 41 41 42 SUBROUTINE bdy_tra( kt )42 SUBROUTINE bdy_tra( kt, Kbb, pts, Kaa ) 43 43 !!---------------------------------------------------------------------- 44 44 !! *** SUBROUTINE bdy_tra *** … … 47 47 !! 48 48 !!---------------------------------------------------------------------- 49 INTEGER, INTENT(in) :: kt ! Main time step counter 49 INTEGER , INTENT(in) :: kt ! Main time step counter 50 INTEGER , INTENT(in) :: Kbb, Kaa ! time level indices 51 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! tracer fields 50 52 ! 51 INTEGER :: ib_bdy, jn, igrd ! Loop ind eces53 INTEGER :: ib_bdy, jn, igrd ! Loop indices 52 54 TYPE(ztrabdy), DIMENSION(jpts) :: zdta ! Temporary data structure 53 55 !!---------------------------------------------------------------------- … … 63 65 SELECT CASE( TRIM(cn_tra(ib_bdy)) ) 64 66 CASE('none' ) ; CYCLE 65 CASE('frs' ) ; CALL bdy_frs ( idx_bdy(ib_bdy), tsa(:,:,:,jn), zdta(jn)%tra )66 CASE('specified' ) ; CALL bdy_spe ( idx_bdy(ib_bdy), tsa(:,:,:,jn), zdta(jn)%tra )67 CASE('neumann' ) ; CALL bdy_nmn ( idx_bdy(ib_bdy), igrd , tsa(:,:,:,jn) )68 CASE('orlanski' ) ; CALL bdy_orl ( idx_bdy(ib_bdy), tsb(:,:,:,jn), tsa(:,:,:,jn), zdta(jn)%tra, ll_npo=.false. )69 CASE('orlanski_npo') ; CALL bdy_orl ( idx_bdy(ib_bdy), tsb(:,:,:,jn), tsa(:,:,:,jn), zdta(jn)%tra, ll_npo=.true. )70 CASE('runoff' ) ; CALL bdy_rnf ( idx_bdy(ib_bdy), tsa(:,:,:,jn), jn )67 CASE('frs' ) ; CALL bdy_frs ( idx_bdy(ib_bdy), pts(:,:,:,jn,Kaa), zdta(jn)%tra ) 68 CASE('specified' ) ; CALL bdy_spe ( idx_bdy(ib_bdy), pts(:,:,:,jn,Kaa), zdta(jn)%tra ) 69 CASE('neumann' ) ; CALL bdy_nmn ( idx_bdy(ib_bdy), igrd , pts(:,:,:,jn,Kaa) ) 70 CASE('orlanski' ) ; CALL bdy_orl ( idx_bdy(ib_bdy), pts(:,:,:,jn,Kbb), pts(:,:,:,jn,Kaa), zdta(jn)%tra, ll_npo=.false. ) 71 CASE('orlanski_npo') ; CALL bdy_orl ( idx_bdy(ib_bdy), pts(:,:,:,jn,Kbb), pts(:,:,:,jn,Kaa), zdta(jn)%tra, ll_npo=.true. ) 72 CASE('runoff' ) ; CALL bdy_rnf ( idx_bdy(ib_bdy), pts(:,:,:,jn,Kaa), jn ) 71 73 CASE DEFAULT ; CALL ctl_stop( 'bdy_tra : unrecognised option for open boundaries for T and S' ) 72 74 END SELECT 73 75 ! Boundary points should be updated 74 CALL lbc_bdy_lnk( 'bdytra', tsa(:,:,:,jn), 'T', 1., ib_bdy )76 CALL lbc_bdy_lnk( 'bdytra', pts(:,:,:,jn,Kaa), 'T', 1., ib_bdy ) 75 77 ! 76 78 END DO … … 80 82 81 83 82 SUBROUTINE bdy_rnf( idx, pt a, jpa )84 SUBROUTINE bdy_rnf( idx, pt, jpa ) 83 85 !!---------------------------------------------------------------------- 84 86 !! *** SUBROUTINE bdy_rnf *** … … 90 92 !!---------------------------------------------------------------------- 91 93 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 92 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pt a! tracer trend94 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pt ! tracer trend 93 95 INTEGER, INTENT(in) :: jpa ! TRA index 94 96 ! … … 105 107 ip = bdytmask(ii+1,ij ) - bdytmask(ii-1,ij ) 106 108 jp = bdytmask(ii ,ij+1) - bdytmask(ii ,ij-1) 107 if (jpa == jp_tem) pt a(ii,ij,ik) = pta(ii+ip,ij+jp,ik) * tmask(ii,ij,ik)108 if (jpa == jp_sal) pt a(ii,ij,ik) = 0.1 * tmask(ii,ij,ik)109 if (jpa == jp_tem) pt(ii,ij,ik) = pt(ii+ip,ij+jp,ik) * tmask(ii,ij,ik) 110 if (jpa == jp_sal) pt(ii,ij,ik) = 0.1 * tmask(ii,ij,ik) 109 111 END DO 110 112 END DO … … 113 115 114 116 115 SUBROUTINE bdy_tra_dmp( kt )117 SUBROUTINE bdy_tra_dmp( kt, Kbb, pts, Krhs ) 116 118 !!---------------------------------------------------------------------- 117 119 !! *** SUBROUTINE bdy_tra_dmp *** … … 120 122 !! 121 123 !!---------------------------------------------------------------------- 122 INTEGER, INTENT(in) :: kt ! 124 INTEGER , INTENT(in) :: kt ! time step 125 INTEGER , INTENT(in) :: Kbb, Krhs ! time level indices 126 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 123 127 ! 124 128 REAL(wp) :: zwgt ! boundary weight … … 139 143 zwgt = idx_bdy(ib_bdy)%nbd(ib,igrd) 140 144 DO ik = 1, jpkm1 141 zta = zwgt * ( dta_bdy(ib_bdy)%tem(ib,ik) - tsb(ii,ij,ik,jp_tem) ) * tmask(ii,ij,ik)142 zsa = zwgt * ( dta_bdy(ib_bdy)%sal(ib,ik) - tsb(ii,ij,ik,jp_sal) ) * tmask(ii,ij,ik)143 tsa(ii,ij,ik,jp_tem) = tsa(ii,ij,ik,jp_tem) + zta144 tsa(ii,ij,ik,jp_sal) = tsa(ii,ij,ik,jp_sal) + zsa145 zta = zwgt * ( dta_bdy(ib_bdy)%tem(ib,ik) - pts(ii,ij,ik,jp_tem,Kbb) ) * tmask(ii,ij,ik) 146 zsa = zwgt * ( dta_bdy(ib_bdy)%sal(ib,ik) - pts(ii,ij,ik,jp_sal,Kbb) ) * tmask(ii,ij,ik) 147 pts(ii,ij,ik,jp_tem,Krhs) = pts(ii,ij,ik,jp_tem,Krhs) + zta 148 pts(ii,ij,ik,jp_sal,Krhs) = pts(ii,ij,ik,jp_sal,Krhs) + zsa 145 149 END DO 146 150 END DO
Note: See TracChangeset
for help on using the changeset viewer.