1 | !!---------------------------------------------------------------------- |
---|
2 | !! *** ocesbc_cpl_ice.h90 *** |
---|
3 | !!---------------------------------------------------------------------- |
---|
4 | |
---|
5 | SUBROUTINE oce_sbc(kt) |
---|
6 | !!--------------------------------------------------------------------- |
---|
7 | !! *** ROUTINE oce_sbc *** |
---|
8 | !! |
---|
9 | !! ** Purpose : Ocean surface boundaries conditions with |
---|
10 | !! Louvain la Neuve Sea Ice Model in coupled mode |
---|
11 | !! |
---|
12 | !! History : |
---|
13 | !! 1.0 ! 00-10 (O. Marti) Original code |
---|
14 | !! 2.0 ! 02-12 (G. Madec) F90: Free form and module |
---|
15 | !!---------------------------------------------------------------------- |
---|
16 | !! * Local declarations |
---|
17 | INTEGER :: ji, jj ! dummy loop indices |
---|
18 | REAL(wp) :: ztx, ztaux, zty, ztauy, ztrp, zsrp |
---|
19 | REAL(wp) :: ztdta, ztgel, zqrp |
---|
20 | |
---|
21 | !!---------------------------------------------------------------------- |
---|
22 | !! OPA 8.5, LODYC-IPSL (2002) |
---|
23 | !!---------------------------------------------------------------------- |
---|
24 | |
---|
25 | !!---------------------------------------------------------------------- |
---|
26 | ! 1. initialization to zero at kt = nit000 |
---|
27 | ! --------------------------------------- |
---|
28 | |
---|
29 | IF( kt == nit000 ) THEN |
---|
30 | qsr (:,:) = 0.e0 |
---|
31 | freeze(:,:) = 0.e0 |
---|
32 | qt (:,:) = 0.e0 |
---|
33 | q (:,:) = 0.e0 |
---|
34 | qrp (:,:) = 0.e0 |
---|
35 | emp (:,:) = 0.e0 |
---|
36 | emps (:,:) = 0.e0 |
---|
37 | erp (:,:) = 0.e0 |
---|
38 | #if defined key_dynspg_fsc |
---|
39 | dmp (:,:) = 0.e0 |
---|
40 | #endif |
---|
41 | ENDIF |
---|
42 | |
---|
43 | IF( MOD( kt-1, nfice ) == 0 ) THEN |
---|
44 | |
---|
45 | CALL oce_sbc_dmp ! Computation of internal and evaporation damping terms |
---|
46 | |
---|
47 | ! Surface heat flux (W/m2) |
---|
48 | ! ----------------------- |
---|
49 | |
---|
50 | ! restoring heat flux |
---|
51 | DO jj = 1, jpj |
---|
52 | DO ji = 1, jpi |
---|
53 | ztgel = fzptn(ji,jj) |
---|
54 | #if defined key_dtasst |
---|
55 | ztdta = MAX( sst(ji,jj), ztgel ) |
---|
56 | #else |
---|
57 | ztdta = MAX( t_dta(ji,jj,1), ztgel ) |
---|
58 | #endif |
---|
59 | zqrp = ztrp * ( tb(ji,jj,1) - ztdta ) |
---|
60 | |
---|
61 | qrp(ji,jj) = (1.0-freeze(ji,jj) ) * zqrp |
---|
62 | END DO |
---|
63 | END DO |
---|
64 | |
---|
65 | ! non solar heat flux + solar flux + restoring |
---|
66 | q (:,:) = fnsolar(:,:) + fsolar(:,:) + qrp(:,:) |
---|
67 | qt (:,:) = q(:,:) |
---|
68 | |
---|
69 | ! solar flux |
---|
70 | qsr(:,:) = fsolar(:,:) |
---|
71 | |
---|
72 | #if defined key_dynspg_fsc |
---|
73 | ! total concentration/dilution effect (use on SSS) |
---|
74 | emps(:,:) = fmass(:,:) + fsalt(:,:) + runoff(:,:) + erp(:,:) |
---|
75 | |
---|
76 | ! total volume flux (use on sea-surface height) |
---|
77 | emp (:,:) = fmass(:,:) - dmp(:,:) + runoff(:,:) + erp(:,:) |
---|
78 | |
---|
79 | #else |
---|
80 | ! Rigid-lid (emp=emps=E-P-R+Erp) |
---|
81 | ! freshwater flux |
---|
82 | emps(:,:) = fmass(:,:) + fsalt(:,:) + runoff(:,:) + erp(:,:) |
---|
83 | emp (:,:) = emps(:,:) |
---|
84 | |
---|
85 | #endif |
---|
86 | |
---|
87 | DO jj = 1, jpjm1 |
---|
88 | DO ji = 1, fs_jpim1 ! vertor opt. |
---|
89 | ztx = 0.5 * ( freeze(ji+1,jj) + freeze(ji+1,jj+1) ) |
---|
90 | ztaux = 0.5 * ( ftaux (ji+1,jj) + ftaux (ji+1,jj+1) ) |
---|
91 | taux(ji,jj) = (1.0-ztx) * taux(ji,jj) + ztx * ztaux |
---|
92 | |
---|
93 | zty = 0.5 * ( freeze(ji,jj+1) + freeze(ji+1,jj+1) ) |
---|
94 | ztauy = 0.5 * ( ftauy (ji,jj+1) + ftauy (ji+1,jj+1) ) |
---|
95 | tauy(ji,jj) = (1.0-zty) * tauy(ji,jj) + zty * ztauy |
---|
96 | END DO |
---|
97 | END DO |
---|
98 | CALL lbc_lnk( taux, 'U', -1. ) |
---|
99 | CALL lbc_lnk( tauy, 'V', -1. ) |
---|
100 | |
---|
101 | ! Re-initialization of fluxes |
---|
102 | sst_io(:,:) = 0.0 |
---|
103 | sss_io(:,:) = 0.0 |
---|
104 | u_io (:,:) = 0.0 |
---|
105 | v_io (:,:) = 0.0 |
---|
106 | gtaux (:,:) = 0. |
---|
107 | gtauy (:,:) = 0. |
---|
108 | |
---|
109 | ENDIF |
---|
110 | |
---|
111 | END SUBROUTINE oce_sbc |
---|