14 pctsrf, alb1, alb2,
tsurf, ustar, u10m, v10m, pbl_tke)
28 USE cpl_mod, ONLY : cpl_receive_frac
37 INTEGER,
INTENT(IN) ::
itime
38 INTEGER,
INTENT(IN) :: jour
39 REAL,
INTENT(IN) ::
dtime
44 REAL,
DIMENSION(klon,nbsrf),
INTENT(INOUT) :: pctsrf
45 REAL,
DIMENSION(klon,nbsrf),
INTENT(INOUT) :: alb1
46 REAL,
DIMENSION(klon,nbsrf),
INTENT(INOUT) :: alb2
47 REAL,
DIMENSION(klon,nbsrf),
INTENT(INOUT) ::
tsurf
48 REAL,
DIMENSION(klon,nbsrf),
INTENT(INOUT) :: ustar
49 REAL,
DIMENSION(klon,nbsrf),
INTENT(INOUT) :: u10m
50 REAL,
DIMENSION(klon,nbsrf),
INTENT(INOUT) :: v10m
51 REAL,
DIMENSION(klon,klev+1,nbsrf),
INTENT(INOUT) :: pbl_tke
56 LOGICAL :: is_modified
57 LOGICAL :: test_sum=.
false.
58 LOGICAL,
DIMENSION(klon,nbsrf) :: new_surf
59 REAL,
DIMENSION(klon,nbsrf) :: pctsrf_old
62 pctsrf_old(:,:) = pctsrf(:,:)
68 SELECT CASE (type_ocean)
91 IF (minval(pctsrf(:,:)) < 0.)
THEN
92 WRITE(
lunout,*)
'Warning! One or several fractions are negative, itime=',
itime
93 WRITE(
lunout,*)
'at point = ',minloc(pctsrf(:,:))
94 WRITE(
lunout,*)
'value = ',minval(pctsrf(:,:))
95 CALL
abort_gcm(
'change_srf_frac',
'Negative fraction',1)
101 tmpsum = sum(pctsrf(
i,:))
102 IF (abs(1. - tmpsum) > 0.05) CALL
abort_gcm(
'change_srf_frac',
'Total fraction not equal 1.',1)
107 WHERE ((pctsrf(:,is_ter) + pctsrf(:,is_lic)) < 2*epsfra)
108 pctsrf(:,is_ter) = 0.
109 pctsrf(:,is_lic) = 0.
112 WHERE ((pctsrf(:,is_oce) + pctsrf(:,is_sic)) < 2*epsfra)
113 pctsrf(:,is_oce) = 0.
114 pctsrf(:,is_sic) = 0.
119 tmpsum = sum(pctsrf(
i,:))
126 WHERE (pctsrf(:,is_ter) < epsfra)
127 pctsrf(:,is_lic) = pctsrf(:,is_ter) + pctsrf(:,is_lic)
128 pctsrf(:,is_ter) = 0.
131 WHERE (pctsrf(:,is_lic) < epsfra)
132 pctsrf(:,is_ter) = pctsrf(:,is_ter) + pctsrf(:,is_lic)
133 pctsrf(:,is_lic) = 0.
136 WHERE (pctsrf(:,is_oce) < epsfra)
137 pctsrf(:,is_sic) = pctsrf(:,is_oce) + pctsrf(:,is_sic)
138 pctsrf(:,is_oce) = 0.
141 WHERE (pctsrf(:,is_sic) < epsfra)
142 pctsrf(:,is_oce) = pctsrf(:,is_oce) + pctsrf(:,is_sic)
143 pctsrf(:,is_sic) = 0.
157 pctsrf(:,:) = pctsrf_old(:,:)