 Timestamp:
 20211021T14:35:55+02:00 (12 months ago)
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

NEMO/branches/UKMO/NEMO_4.0.4_CO9_package/src/OCE/USR/usrdef_sbc.F90
r14075 r15425 3 3 !! *** MODULE usrdef_sbc *** 4 4 !! 5 !! === GYRE configuration ===5 !! 6 6 !! 7 !! User defined : s urface forcing of a user configuration7 !! User defined : set all surface forcing to 0 8 8 !!====================================================================== 9 9 !! History : 4.0 ! 201603 (S. Flavoni, G. Madec) user defined interface … … 11 11 12 12 !! 13 !! usrdef_sbc : user defined surface bounday conditions in GYRE case13 !! usrdef_sbc : user defined surface bounday conditions 14 14 !! 15 15 USE oce ! ocean dynamics and tracers … … 43 43 !! *** ROUTINE usrdef_sbc *** 44 44 !! 45 !! ** Purpose : provide at each timestep the GYREsurface boundary45 !! ** Purpose : provide at each timestep the surface boundary 46 46 !! condition, i.e. the momentum, heat and freshwater fluxes. 47 47 !! 48 !! ** Method : analytical seasonal cycle for GYRE configuration. 49 !! CAUTION : never mask the surface stress field ! 50 !! 48 !! ** Method : Set all surface forcing to 0 51 49 !! ** Action :  set the ocean surface boundary condition, i.e. 52 50 !! utau, vtau, taum, wndm, qns, qsr, emp, sfx 53 51 !! 54 !! Reference : Hazeleger, W., and S. Drijfhout, JPO, 30, 677695, 2000.55 52 !! 56 53 INTEGER, INTENT(in) :: kt ! ocean time step 57 !!58 INTEGER :: ji, jj ! dummy loop indices59 INTEGER :: zyear0 ! initial year60 INTEGER :: zmonth0 ! initial month61 INTEGER :: zday0 ! initial day62 INTEGER :: zday_year0 ! initial day since january 1st63 REAL(wp) :: ztau , ztau_sais ! wind intensity and of the seasonal cycle64 REAL(wp) :: ztime ! time in hour65 REAL(wp) :: ztimemax , ztimemin ! 21th June, and 21th decem. if date0 = 1st january66 REAL(wp) :: ztimemax1, ztimemin1 ! 21th June, and 21th decem. if date0 = 1st january67 REAL(wp) :: ztimemax2, ztimemin2 ! 21th June, and 21th decem. if date0 = 1st january68 REAL(wp) :: ztaun ! intensity69 REAL(wp) :: zemp_s, zemp_n, zemp_sais, ztstar70 REAL(wp) :: zcos_sais1, zcos_sais2, ztrp, zconv, t_star71 REAL(wp) :: zsumemp, zsurf72 REAL(wp) :: zrhoa = 1.22 ! Air density kg/m373 REAL(wp) :: zcdrag = 1.5e3 ! drag coefficient74 REAL(wp) :: ztx, zty, zmod, zcoef ! temporary variables75 REAL(wp) :: zyydd ! number of days in one year76 !!77 zyydd = REAL(nyear_len(1),wp)78 54 79 55 !  ! 80 56 ! heat and freshwater fluxes ! 81 57 !  ! 82 !same temperature, EP as in HAZELEGER 200083 84 zyear0 = ndate0 / 10000 ! initial year85 zmonth0 = ( ndate0  zyear0 * 10000 ) / 100 ! initial month86 zday0 = ndate0  zyear0 * 10000  zmonth0 * 100 ! initial day betwen 1 and 3087 zday_year0 = ( zmonth0  1 ) * 30.+zday0 ! initial day betwen 1 and 36088 89 ! current day (in hours) since january the 1st of the current year90 ztime = REAL( kt ) * rdt / (rmmss * rhhmm) & ! total incrementation (in hours)91 &  (nyear  1) * rjjhh * zyydd ! minus years since beginning of experiment (in hours)92 93 ztimemax1 = ((5.*30.)+21.)* 24. ! 21th june at 24h in hours94 ztimemin1 = ztimemax1 + rjjhh * zyydd / 2 ! 21th december in hours95 ztimemax2 = ((6.*30.)+21.)* 24. ! 21th july at 24h in hours96 ztimemin2 = ztimemax2  rjjhh * zyydd / 2 ! 21th january in hours97 ! ! NB: rjjhh * zyydd / 4 = one seasonal cycle in hours98 99 ! amplitudes100 zemp_S = 0.7 ! intensity of COS in the South101 zemp_N = 0.8 ! intensity of COS in the North102 zemp_sais = 0.1103 zTstar = 28.3 ! intemsity from 28.3 a 5 deg104 105 ! 1/2 period between 21th June and 21th December and between 21th July and 21th January106 zcos_sais1 = COS( (ztime  ztimemax1) / (ztimemin1  ztimemax1) * rpi )107 zcos_sais2 = COS( (ztime  ztimemax2) / (ztimemax2  ztimemin2) * rpi )108 109 ztrp=  40.e0 ! retroaction term on heat fluxes (W/m2/K)110 zconv = 3.16e5 ! convertion factor: 1 m/yr => 3.16e5 mm/s111 DO jj = 1, jpj112 DO ji = 1, jpi113 ! domain from 15 deg to 50 deg between 27 and 28 degC at 15N, 3114 ! and 13 degC at 50N 53.5 + or  11 = 1/4 period :115 ! 64.5 in summer, 42.5 in winter116 t_star = zTstar * ( 1. + 1. / 50. * zcos_sais2 ) &117 & * COS( rpi * (gphit(ji,jj)  5.) &118 & / ( 53.5 * ( 1 + 11 / 53.5 * zcos_sais2 ) * 2.) )119 ! 23.5 deg : tropics120 qsr (ji,jj) = 230 * COS( 3.1415 * ( gphit(ji,jj)  23.5 * zcos_sais1 ) / ( 0.9 * 180 ) )121 qns (ji,jj) = ztrp * ( tsb(ji,jj,1,jp_tem)  t_star )  qsr(ji,jj)122 IF( gphit(ji,jj) >= 14.845 .AND. 37.2 >= gphit(ji,jj) ) THEN ! zero at 37.8 deg, max at 24.6 deg123 emp (ji,jj) = zemp_S * zconv &124 & * SIN( rpi / 2 * (gphit(ji,jj)  37.2) / (24.6  37.2) ) &125 & * ( 1  zemp_sais / zemp_S * zcos_sais1)126 ELSE127 emp (ji,jj) =  zemp_N * zconv &128 & * SIN( rpi / 2 * (gphit(ji,jj)  37.2) / (46.8  37.2) ) &129 & * ( 1  zemp_sais / zemp_N * zcos_sais1 )130 ENDIF131 END DO132 END DO133 134 zsumemp = GLOB_SUM( 'usrdef_sbc', emp (:,:) )135 zsurf = GLOB_SUM( 'usrdef_sbc', tmask(:,:,1) )136 zsumemp = zsumemp / zsurf ! Default GYRE configuration137 58 138 59 ! freshwater (mass flux) and update of qns with heat content of emp 139 emp (:,:) = emp(:,:)  zsumemp * tmask(:,:,1) ! freshwater flux (=0 in domain average) 140 sfx (:,:) = 0.0_wp ! no salt flux 141 qns (:,:) = qns(:,:)  emp(:,:) * sst_m(:,:) * rcp ! evap and precip are at SST 142 60 emp (:,:) = 0.0_wp ! freshwater flux 61 sfx (:,:) = 0.0_wp ! no salt flux 62 qns (:,:) = 0.0_wp ! non solar heat flux 63 qsr (:,:) = 0.0_wp ! solar heat flux 64 143 65 144 66 !  ! 145 67 ! momentum fluxes ! 146 68 !  ! 147 ! same wind as in Wico 148 !test date0 : ndate0 = 010203 149 zyear0 = ndate0 / 10000 150 zmonth0 = ( ndate0  zyear0 * 10000 ) / 100 151 zday0 = ndate0  zyear0 * 10000  zmonth0 * 100 152 !Calculates nday_year, day since january 1st 153 zday_year0 = (zmonth01)*30.+zday0 154 155 !accumulates days of previous months of this year 156 ! day (in hours) since january the 1st 157 ztime = FLOAT( kt ) * rdt / (rmmss * rhhmm) & ! incrementation in hour 158 &  (nyear  1) * rjjhh * zyydd !  nber of hours the precedent years 159 ztimemax = ((5.*30.)+21.)* 24. ! 21th june in hours 160 ztimemin = ztimemax + rjjhh * zyydd / 2 ! 21th december in hours 161 ! ! NB: rjjhh * zyydd / 4 = 1 seasonal cycle in hours 162 163 ! mean intensity at 0.105 ; srqt(2) because projected with 45deg angle 164 ztau = 0.105 / SQRT( 2. ) 165 ! seasonal oscillation intensity 166 ztau_sais = 0.015 167 ztaun = ztau  ztau_sais * COS( (ztime  ztimemax) / (ztimemin  ztimemax) * rpi ) 168 DO jj = 1, jpj 169 DO ji = 1, jpi 170 ! domain from 15deg to 50deg and 1/2 period along 14deg 171 ! so 5/4 of half period with seasonal cycle 172 utau(ji,jj) =  ztaun * SIN( rpi * (gphiu(ji,jj)  15.) / (29.15.) ) 173 vtau(ji,jj) = ztaun * SIN( rpi * (gphiv(ji,jj)  15.) / (29.15.) ) 174 END DO 175 END DO 176 177 ! module of wind stress and wind speed at Tpoint 178 zcoef = 1. / ( zrhoa * zcdrag ) 179 DO jj = 2, jpjm1 180 DO ji = fs_2, fs_jpim1 ! vect. opt. 181 ztx = utau(ji1,jj ) + utau(ji,jj) 182 zty = vtau(ji ,jj1) + vtau(ji,jj) 183 zmod = 0.5 * SQRT( ztx * ztx + zty * zty ) 184 taum(ji,jj) = zmod 185 wndm(ji,jj) = SQRT( zmod * zcoef ) 186 END DO 187 END DO 69 utau(:,:) = 0.0_wp 70 vtau(:,:) = 0.0_wp 71 taum(:,:) = 0.0_wp 72 wndm(:,:) = 0.0_wp 188 73 CALL lbc_lnk_multi( 'usrdef_sbc', taum(:,:), 'T', 1. , wndm(:,:), 'T', 1. ) 189 74 … … 193 78 IF( kt == nit000 .AND. lwp ) THEN 194 79 WRITE(numout,*) 195 WRITE(numout,*)'usrdef_sbc_oce : a nalytical surface fluxes for GYRE configuration'80 WRITE(numout,*)'usrdef_sbc_oce : all surface fluxes set to 0' 196 81 WRITE(numout,*)'~~~~~~~~~~~ ' 197 WRITE(numout,*)' nyear = ', nyear 198 WRITE(numout,*)' nmonth = ', nmonth 199 WRITE(numout,*)' nday = ', nday 200 WRITE(numout,*)' nday_year = ', nday_year 201 WRITE(numout,*)' ztime = ', ztime 202 WRITE(numout,*)' ztimemax = ', ztimemax 203 WRITE(numout,*)' ztimemin = ', ztimemin 204 WRITE(numout,*)' ztimemax1 = ', ztimemax1 205 WRITE(numout,*)' ztimemin1 = ', ztimemin1 206 WRITE(numout,*)' ztimemax2 = ', ztimemax2 207 WRITE(numout,*)' ztimemin2 = ', ztimemin2 208 WRITE(numout,*)' zyear0 = ', zyear0 209 WRITE(numout,*)' zmonth0 = ', zmonth0 210 WRITE(numout,*)' zday0 = ', zday0 211 WRITE(numout,*)' zday_year0 = ', zday_year0 212 WRITE(numout,*)' zyydd = ', zyydd 213 WRITE(numout,*)' zemp_S = ', zemp_S 214 WRITE(numout,*)' zemp_N = ', zemp_N 215 WRITE(numout,*)' zemp_sais = ', zemp_sais 216 WRITE(numout,*)' zTstar = ', zTstar 217 WRITE(numout,*)' zsumemp = ', zsumemp 218 WRITE(numout,*)' zsurf = ', zsurf 219 WRITE(numout,*)' ztrp = ', ztrp 220 WRITE(numout,*)' zconv = ', zconv 221 WRITE(numout,*)' ndastp = ', ndastp 222 WRITE(numout,*)' adatrj = ', adatrj 82 223 83 ENDIF 224 84 !
Note: See TracChangeset
for help on using the changeset viewer.