- Timestamp:
- 2020-06-07T18:26:09+02:00 (4 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
utils/tools_dev_r12970_AGRIF_CMEMS/DOMAINcfg/src/agrif_dom_update.F90
r13055 r13056 1 MODULE agrif_dom_update 2 3 USE dom_oce 4 USE domzgr 5 USE agrif_parameters 6 USE agrif_profiles 7 8 IMPLICIT none 9 PRIVATE 10 11 PUBLIC agrif_update_all 12 13 CONTAINS 14 1 15 #if defined key_agrif 2 subroutine agrif_update_all3 USE agrif_parameters4 USE agrif_profiles5 external update_bottom_level, update_e3t, update_e3u, update_e3v6 16 7 if (agrif_root()) return 17 SUBROUTINE agrif_update_all 18 !!---------------------------------------------------------------------- 19 !! *** ROUTINE agrif_update_all *** 20 !!---------------------------------------------------------------------- 21 ! 22 IF( Agrif_Root() ) return 8 23 9 call agrif_update_variable(bottom_level_id,locupdate=(/npt_copy,0/),procname = update_bottom_level) 24 CALL agrif_update_variable(bottom_level_id,locupdate=(/npt_copy,0/),procname = update_bottom_level) 25 ! 26 Agrif_UseSpecialValueInUpdate = .TRUE. 27 Agrif_SpecialValueFineGrid = 0._wp 28 CALL agrif_update_variable(e3t_id,procname = update_e3t) 29 Agrif_UseSpecialValueInUpdate = .FALSE. 30 ! 31 END SUBROUTINE agrif_update_all 10 32 11 12 Agrif_UseSpecialValueInUpdate = .TRUE. 13 Agrif_SpecialValueFineGrid = 0._wp 14 15 call agrif_update_variable(e3t_id,procname = update_e3t) 16 Agrif_UseSpecialValueInUpdate = .FALSE. 17 18 !call agrif_update_variable(e3u_id,procname = update_e3u) 19 !call agrif_update_variable(e3v_id,procname = update_e3v) 20 21 end subroutine agrif_update_all 22 23 SUBROUTINE update_bottom_level( ptab, i1, i2, j1, j2, before, nb,ndir) 24 USE dom_oce 25 USE domzgr 33 SUBROUTINE update_bottom_level( ptab, i1, i2, j1, j2, before, nb,ndir) 26 34 !!---------------------------------------------------------------------- 27 35 !! *** ROUTINE interpsshn *** … … 31 39 LOGICAL , INTENT(in ) :: before 32 40 INTEGER , INTENT(in ) :: nb , ndir 33 LOGICAL :: western_side, eastern_side,northern_side,southern_side34 41 ! 35 42 !!---------------------------------------------------------------------- 36 INTEGER :: ji,jj37 43 ! 38 western_side = (nb == 1).AND.(ndir == 1)39 eastern_side = (nb == 1).AND.(ndir == 2)40 southern_side = (nb == 2).AND.(ndir == 1)41 northern_side = (nb == 2).AND.(ndir == 2)42 43 44 IF( before) THEN 44 45 ptab(i1:i2,j1:j2) = mbkt(i1:i2,j1:j2)*ssmask(i1:i2,j1:j2) … … 46 47 mbkt(i1:i2,j1:j2) = nint(ptab(i1:i2,j1:j2)) 47 48 48 WHERE ( mbkt(i1:i2,j1:j2)==0)49 ssmask(i1:i2,j1:j2) = 0.49 WHERE ( mbkt(i1:i2,j1:j2) .EQ. 0 ) 50 ssmask(i1:i2,j1:j2) = 0. 50 51 ELSEWHERE 51 ssmask(i1:i2,j1:j2) = 1. 52 END WHERE 53 52 ssmask(i1:i2,j1:j2) = 1. 53 END WHERE 54 54 ENDIF 55 55 ! … … 57 57 58 58 SUBROUTINE update_e3t( tabres, i1, i2, j1, j2, k1, k2, before ) 59 USE dom_oce60 implicit none61 59 !!--------------------------------------------- 62 !! *** update_e3t updateT***60 !! *** update_e3t *** 63 61 !!--------------------------------------------- 64 62 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2 … … 70 68 ! 71 69 IF (before) THEN 72 73 74 75 if (mbkt(ji,jj) <= jk) then76 tabres(ji,jj,jk) = e3t_0(ji,jj,jk)77 else78 tabres(ji,jj,jk) = 0.70 DO jk=k1,k2 71 DO jj=j1,j2 72 DO ji=i1,i2 73 IF( mbkt(ji,jj) .LE. jk ) THEN 74 tabres(ji,jj,jk) = e3t_0(ji,jj,jk) 75 ELSE 76 tabres(ji,jj,jk) = 0. 79 77 endif 80 END DO81 78 END DO 82 79 END DO 83 ELSE84 DO jk=k1,k285 DO jj=j1,j286 DO ji=i1,i287 if (mbkt(ji,jj) <= jk) then88 e3t_0(ji,jj,jk) = MAX(tabres(ji,jj,jk),MIN(e3zps_min,e3t_1d(jk)*e3zps_rat))89 else90 e3t_0(ji,jj,jk) = e3t_1d(jk)91 endif92 END DO93 END DO94 END DO95 !96 ENDIF97 !98 END SUBROUTINE update_e3t99 100 SUBROUTINE update_e3u( tabres, i1, i2, j1, j2, k1, k2, before )101 USE dom_oce102 implicit none103 !!---------------------------------------------104 !! *** ROUTINE update_e3u ***105 !!---------------------------------------------106 INTEGER , INTENT(in ) :: i1, i2, j1, j2, k1, k2107 REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres108 LOGICAL , INTENT(in ) :: before109 !110 INTEGER :: ji, jj, jk111 REAL :: zrhoy112 !!---------------------------------------------113 !114 IF( before ) THEN115 zrhoy = Agrif_Rhoy()116 DO jk = k1, k2117 do jj=j1,j2118 do ji=i1,i2119 if (min(mbkt(ji,jj),mbkt(ji+1,jj))<=jk) then120 tabres(ji,jj,jk) = zrhoy * e2u(ji,jj) * MIN(e3zps_min,e3t_1d(jk)*e3zps_rat)121 else122 tabres(ji,jj,jk) = zrhoy * e2u(ji,jj) * e3u_0(ji,jj,jk)123 endif124 enddo125 enddo126 80 END DO 127 81 ELSE … … 129 83 DO jj=j1,j2 130 84 DO ji=i1,i2 131 if (min(mbkt(ji,jj),mbkt(ji+1,jj))<=jk) then132 e3u_0(ji,jj,jk)=MAX(tabres(ji,jj,jk) / e2u(ji,jj),MIN(e3zps_min,e3t_1d(jk)*e3zps_rat))133 else134 e3u_0(ji,jj,jk) = e3t_1d(jk)135 endif85 IF( mbkt(ji,jj) .LE.jk ) THEN 86 e3t_0(ji,jj,jk) = MAX(tabres(ji,jj,jk),MIN(e3zps_min,e3t_1d(jk)*e3zps_rat)) 87 ELSE 88 e3t_0(ji,jj,jk) = e3t_1d(jk) 89 ENDIF 136 90 END DO 137 91 END DO … … 140 94 ENDIF 141 95 ! 142 END SUBROUTINE update_e3u 143 144 SUBROUTINE update_e3v( tabres, i1, i2, j1, j2, k1, k2, before ) 145 USE dom_oce 146 implicit none 147 !!--------------------------------------------- 148 !! *** ROUTINE update_e3v *** 149 !!--------------------------------------------- 150 INTEGER , INTENT(in ) :: i1, i2, j1, j2, k1, k2 151 REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres 152 LOGICAL , INTENT(in ) :: before 153 ! 154 INTEGER :: ji, jj, jk 155 REAL :: zrhox 156 !!--------------------------------------------- 157 ! 158 IF( before ) THEN 159 zrhox = Agrif_Rhox() 160 DO jk = k1, k2 161 do jj=j1,j2 162 do ji=i1,i2 163 if (min(mbkt(ji,jj),mbkt(ji,jj+1))<=jk) then 164 tabres(ji,jj,jk) = zrhox * e1v(ji,jj) * MIN(e3zps_min,e3t_1d(jk)*e3zps_rat) 165 else 166 tabres(ji,jj,jk) = zrhox * e1v(ji,jj) * e3v_0(ji,jj,jk) 167 endif 168 enddo 169 enddo 170 END DO 171 ELSE 172 DO jk=k1,k2 173 DO jj=j1,j2 174 DO ji=i1,i2 175 if (min(mbkt(ji,jj),mbkt(ji,jj+1))<=jk) then 176 e3v_0(ji,jj,jk)=MAX(tabres(ji,jj,jk) / e1v(ji,jj),MIN(e3zps_min,e3t_1d(jk)*e3zps_rat)) 177 else 178 e3v_0(ji,jj,jk) = e3t_1d(jk) 179 endif 180 END DO 181 END DO 182 END DO 183 ! 184 ENDIF 185 ! 186 END SUBROUTINE update_e3v 187 96 END SUBROUTINE update_e3t 97 188 98 #else 189 subroutine agrif_update_all_empty 190 end subroutine agrif_update_all_empty 99 SUBROUTINE agrif_update_all 100 END SUBROUTINE agrif_update_all 191 101 #endif 102 103 END MODULE agrif_dom_update
Note: See TracChangeset
for help on using the changeset viewer.