- Timestamp:
- Mar 29, 2023, 3:14:27 PM (18 months ago)
- Location:
- LMDZ6/branches/LMDZ_ECRad
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ_ECRad
- Property svn:mergeinfo changed
-
LMDZ6/branches/LMDZ_ECRad/libf/phylmd/dyn1d/mod_1D_cases_read_std.F90
r4104 r4482 5 5 6 6 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 7 !Declarations specifiques au cas standard8 9 ! Discr?tisation10 11 12 13 !profils environnementaux14 15 16 17 18 19 20 21 22 !forcing23 24 25 26 27 28 29 30 31 32 real, allocatable:: lat_cas(:),sens_cas(:),ts_cas(:),ps_cas(:),ustar_cas(:)33 34 35 !champs interpoles36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 real o3_cas,lat_prof_cas,sens_prof_cas,ts_prof_cas,ps_prof_cas,ustar_prof_cas,tkes_prof_cas80 real orog_cas,albedo_cas,emiss_cas,t_skin_cas,q_skin_cas,mom_rough,heat_rough,rugos_cas,sand_cas,clay_cas81 7 !Declarations specifiques au cas standard 8 character*80 :: fich_cas 9 ! Discr?tisation 10 integer nlev_cas, nt_cas 11 12 13 !profils environnementaux 14 real, allocatable:: plev_cas(:,:),plevh_cas(:) 15 real, allocatable:: ap_cas(:),bp_cas(:) 16 17 real, allocatable:: z_cas(:,:),zh_cas(:) 18 real, allocatable:: t_cas(:,:),q_cas(:,:),qv_cas(:,:),ql_cas(:,:),qi_cas(:,:),rh_cas(:,:) 19 real, allocatable:: th_cas(:,:),thv_cas(:,:),thl_cas(:,:),rv_cas(:,:) 20 real, allocatable:: u_cas(:,:),v_cas(:,:),vitw_cas(:,:),omega_cas(:,:),tke_cas(:,:) 21 22 !forcing 23 real, allocatable:: ht_cas(:,:),vt_cas(:,:),dt_cas(:,:),dtrad_cas(:,:) 24 real, allocatable:: hth_cas(:,:),vth_cas(:,:),dth_cas(:,:) 25 real, allocatable:: hq_cas(:,:),vq_cas(:,:),dq_cas(:,:) 26 real, allocatable:: hr_cas(:,:),vr_cas(:,:),dr_cas(:,:) 27 real, allocatable:: hu_cas(:,:),vu_cas(:,:),du_cas(:,:) 28 real, allocatable:: hv_cas(:,:),vv_cas(:,:),dv_cas(:,:) 29 real, allocatable:: ug_cas(:,:),vg_cas(:,:) 30 real, allocatable:: temp_nudg_cas(:,:),qv_nudg_cas(:,:),u_nudg_cas(:,:),v_nudg_cas(:,:) 31 real, allocatable:: invtau_temp_nudg_cas(:,:),invtau_qv_nudg_cas(:,:),invtau_u_nudg_cas(:,:),invtau_v_nudg_cas(:,:) 32 real, allocatable:: lat_cas(:),sens_cas(:),tskin_cas(:),ts_cas(:),ps_cas(:),ustar_cas(:) 33 real, allocatable:: uw_cas(:,:),vw_cas(:,:),q1_cas(:,:),q2_cas(:,:),tkes_cas(:) 34 35 !champs interpoles 36 real, allocatable:: plev_prof_cas(:) 37 real, allocatable:: t_prof_cas(:) 38 real, allocatable:: theta_prof_cas(:) 39 real, allocatable:: thl_prof_cas(:) 40 real, allocatable:: thv_prof_cas(:) 41 real, allocatable:: q_prof_cas(:) 42 real, allocatable:: qv_prof_cas(:) 43 real, allocatable:: ql_prof_cas(:) 44 real, allocatable:: qi_prof_cas(:) 45 real, allocatable:: rh_prof_cas(:) 46 real, allocatable:: rv_prof_cas(:) 47 real, allocatable:: u_prof_cas(:) 48 real, allocatable:: v_prof_cas(:) 49 real, allocatable:: vitw_prof_cas(:) 50 real, allocatable:: omega_prof_cas(:) 51 real, allocatable:: tke_prof_cas(:) 52 real, allocatable:: ug_prof_cas(:) 53 real, allocatable:: vg_prof_cas(:) 54 real, allocatable:: temp_nudg_prof_cas(:),qv_nudg_prof_cas(:),u_nudg_prof_cas(:),v_nudg_prof_cas(:) 55 real, allocatable:: invtau_temp_nudg_prof_cas(:),invtau_qv_nudg_prof_cas(:),invtau_u_nudg_prof_cas(:),invtau_v_nudg_prof_cas(:) 56 57 real, allocatable:: ht_prof_cas(:) 58 real, allocatable:: hth_prof_cas(:) 59 real, allocatable:: hq_prof_cas(:) 60 real, allocatable:: vt_prof_cas(:) 61 real, allocatable:: vth_prof_cas(:) 62 real, allocatable:: vq_prof_cas(:) 63 real, allocatable:: dt_prof_cas(:) 64 real, allocatable:: dth_prof_cas(:) 65 real, allocatable:: dtrad_prof_cas(:) 66 real, allocatable:: dq_prof_cas(:) 67 real, allocatable:: hu_prof_cas(:) 68 real, allocatable:: hv_prof_cas(:) 69 real, allocatable:: vu_prof_cas(:) 70 real, allocatable:: vv_prof_cas(:) 71 real, allocatable:: du_prof_cas(:) 72 real, allocatable:: dv_prof_cas(:) 73 real, allocatable:: uw_prof_cas(:) 74 real, allocatable:: vw_prof_cas(:) 75 real, allocatable:: q1_prof_cas(:) 76 real, allocatable:: q2_prof_cas(:) 77 78 79 real o3_cas,lat_prof_cas,sens_prof_cas,ts_prof_cas,tskin_prof_cas,ps_prof_cas,ustar_prof_cas,tkes_prof_cas 80 real orog_cas,albedo_cas,emiss_cas,q_skin_cas,mom_rough,heat_rough,rugos_cas,sand_cas,clay_cas 81 82 82 83 83 … … 85 85 86 86 87 !********************************************************************************************** 88 SUBROUTINE read_SCM_cas 89 implicit none 87 !********************************************************************************************** 88 SUBROUTINE read_SCM_cas 89 use netcdf, only: nf90_get_var 90 implicit none 90 91 91 92 #include "netcdf.inc" 92 93 #include "date_cas.h" 93 94 94 INTEGER nid,rid,ierr 95 INTEGER ii,jj,timeid 96 REAL, ALLOCATABLE :: time_val(:) 97 98 fich_cas='cas.nc' 99 print*,'fich_cas ',fich_cas 100 ierr = NF_OPEN(fich_cas,NF_NOWRITE,nid) 101 print*,'fich_cas,NF_NOWRITE,nid ',fich_cas,NF_NOWRITE,nid 102 if (ierr.NE.NF_NOERR) then 103 write(*,*) 'ERROR: GROS Pb opening forcings nc file ' 104 write(*,*) NF_STRERROR(ierr) 105 stop "" 106 endif 107 !....................................................................... 108 ierr=NF_INQ_DIMID(nid,'lat',rid) 109 IF (ierr.NE.NF_NOERR) THEN 110 print*, 'Oh probleme lecture dimension lat' 111 ENDIF 112 ierr=NF_INQ_DIMLEN(nid,rid,ii) 113 print*,'OK1 read2: nid,rid,lat',nid,rid,ii 114 !....................................................................... 115 ierr=NF_INQ_DIMID(nid,'lon',rid) 116 IF (ierr.NE.NF_NOERR) THEN 117 print*, 'Oh probleme lecture dimension lon' 118 ENDIF 119 ierr=NF_INQ_DIMLEN(nid,rid,jj) 120 print*,'OK2 read2: nid,rid,lat',nid,rid,jj 121 !....................................................................... 122 ierr=NF_INQ_DIMID(nid,'lev',rid) 123 IF (ierr.NE.NF_NOERR) THEN 124 print*, 'Oh probleme lecture dimension nlev' 125 ENDIF 126 ierr=NF_INQ_DIMLEN(nid,rid,nlev_cas) 127 print*,'OK3 read2: nid,rid,nlev_cas',nid,rid,nlev_cas 128 IF ( .NOT. ( nlev_cas > 10 .AND. nlev_cas < 200000 )) THEN 129 print*,'Valeur de nlev_cas peu probable' 130 STOP 131 ENDIF 132 !....................................................................... 133 ierr=NF_INQ_DIMID(nid,'time',rid) 134 nt_cas=0 135 IF (ierr.NE.NF_NOERR) THEN 136 stop 'Oh probleme lecture dimension time' 137 ENDIF 138 ierr=NF_INQ_DIMLEN(nid,rid,nt_cas) 139 print*,'OK4 read2: nid,rid,nt_cas',nid,rid,nt_cas 140 ! Lecture de l'axe des temps 141 print*,'LECTURE DU TEMPS' 142 ierr=NF_INQ_VARID(nid,'time',timeid) 143 if(ierr/=NF_NOERR) then 144 print *,'Variable time manquante dans cas.nc:' 145 ierr=NF_NOERR 146 else 147 allocate(time_val(nt_cas)) 148 #ifdef NC_DOUBLE 149 ierr = NF_GET_VAR_DOUBLE(nid,timeid,time_val) 150 #else 151 ierr = NF_GET_VAR_REAL(nid,timeid,time_val) 152 #endif 153 if(ierr/=NF_NOERR) then 154 print *,'Pb a la lecture de time cas.nc: ' 155 endif 156 endif 157 IF (nt_cas>1) THEN 158 pdt_cas=time_val(2)-time_val(1) 159 ELSE 160 pdt_cas=0. 161 ENDIF 95 INTEGER nid,rid,ierr 96 INTEGER ii,jj,timeid 97 REAL, ALLOCATABLE :: time_val(:) 98 99 fich_cas='cas.nc' 100 print*,'fich_cas ',fich_cas 101 ierr = NF_OPEN(fich_cas,NF_NOWRITE,nid) 102 print*,'fich_cas,NF_NOWRITE,nid ',fich_cas,NF_NOWRITE,nid 103 if (ierr.NE.NF_NOERR) then 104 write(*,*) 'ERROR: GROS Pb opening forcings nc file ' 105 write(*,*) NF_STRERROR(ierr) 106 stop "" 107 endif 108 !....................................................................... 109 ierr=NF_INQ_DIMID(nid,'lat',rid) 110 IF (ierr.NE.NF_NOERR) THEN 111 print*, 'Oh probleme lecture dimension lat' 112 ENDIF 113 ierr=NF_INQ_DIMLEN(nid,rid,ii) 114 print*,'OK1 read_SCM_cas: nid,rid,lat',nid,rid,ii 115 !....................................................................... 116 ierr=NF_INQ_DIMID(nid,'lon',rid) 117 IF (ierr.NE.NF_NOERR) THEN 118 print*, 'Oh probleme lecture dimension lon' 119 ENDIF 120 ierr=NF_INQ_DIMLEN(nid,rid,jj) 121 print*,'OK2 read_SCM_cas: nid,rid,lat',nid,rid,jj 122 !....................................................................... 123 ierr=NF_INQ_DIMID(nid,'lev',rid) 124 IF (ierr.NE.NF_NOERR) THEN 125 print*, 'Oh probleme lecture dimension nlev' 126 ENDIF 127 ierr=NF_INQ_DIMLEN(nid,rid,nlev_cas) 128 print*,'OK3 read_SCM_cas: nid,rid,nlev_cas',nid,rid,nlev_cas 129 IF ( .NOT. ( nlev_cas > 10 .AND. nlev_cas < 200000 )) THEN 130 print*,'Valeur de nlev_cas peu probable' 131 STOP 132 ENDIF 133 !....................................................................... 134 ierr=NF_INQ_DIMID(nid,'time',rid) 135 nt_cas=0 136 IF (ierr.NE.NF_NOERR) THEN 137 stop 'Oh probleme lecture dimension time' 138 ENDIF 139 ierr=NF_INQ_DIMLEN(nid,rid,nt_cas) 140 print*,'OK4 read_SCM_cas: nid,rid,nt_cas',nid,rid,nt_cas 141 ! Lecture de l'axe des temps 142 print*,'LECTURE DU TEMPS' 143 ierr=NF_INQ_VARID(nid,'time',timeid) 144 if(ierr/=NF_NOERR) then 145 print *,'Variable time manquante dans cas.nc:' 146 ierr=NF_NOERR 147 else 148 allocate(time_val(nt_cas)) 149 ierr = NF90_GET_VAR(nid,timeid,time_val) 150 if(ierr/=NF_NOERR) then 151 print *,'A Pb a la lecture de time cas.nc: ' 152 endif 153 endif 154 IF (nt_cas>1) THEN 155 pdt_cas=time_val(2)-time_val(1) 156 ELSE 157 pdt_cas=0. 158 ENDIF 162 159 163 160 164 161 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 165 !profils moyens:166 167 168 169 170 171 172 173 174 !forcing175 176 177 178 179 180 181 182 183 184 185 186 allocate(lat_cas(nt_cas),sens_cas(nt_cas),ts_cas(nt_cas),ps_cas(nt_cas),ustar_cas(nt_cas),tkes_cas(nt_cas))187 188 189 190 191 !champs interpoles192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 &ap_cas,bp_cas,z_cas,plev_cas,zh_cas,plevh_cas,t_cas,th_cas,thv_cas,thl_cas,qv_cas, &238 &ql_cas,qi_cas,rh_cas,rv_cas,u_cas,v_cas,vitw_cas,omega_cas,tke_cas,ug_cas,vg_cas, &239 &temp_nudg_cas,qv_nudg_cas,u_nudg_cas,v_nudg_cas, &240 &invtau_temp_nudg_cas,invtau_qv_nudg_cas,invtau_u_nudg_cas,invtau_v_nudg_cas, &241 &du_cas,hu_cas,vu_cas, &242 &dv_cas,hv_cas,vv_cas,dt_cas,ht_cas,vt_cas,dq_cas,hq_cas,vq_cas,dth_cas,hth_cas,vth_cas, &243 & dr_cas,hr_cas,vr_cas,dtrad_cas,sens_cas,lat_cas,ts_cas,ps_cas,ustar_cas,tkes_cas,&244 & uw_cas,vw_cas,q1_cas,q2_cas,orog_cas,albedo_cas,emiss_cas,t_skin_cas,q_skin_cas,mom_rough,heat_rough, &245 &o3_cas,rugos_cas,clay_cas,sand_cas)246 247 248 print*,'apres read2_SCM, plev_cas=',ii,plev_cas(ii,1)249 250 251 252 253 END SUBROUTINE read_SCM_cas162 !profils moyens: 163 allocate(plev_cas(nlev_cas,nt_cas),plevh_cas(nlev_cas+1)) 164 allocate(z_cas(nlev_cas,nt_cas),zh_cas(nlev_cas+1)) 165 allocate(ap_cas(nlev_cas+1),bp_cas(nt_cas+1)) 166 allocate(t_cas(nlev_cas,nt_cas),q_cas(nlev_cas,nt_cas),qv_cas(nlev_cas,nt_cas),ql_cas(nlev_cas,nt_cas), & 167 qi_cas(nlev_cas,nt_cas),rh_cas(nlev_cas,nt_cas)) 168 allocate(th_cas(nlev_cas,nt_cas),thl_cas(nlev_cas,nt_cas),thv_cas(nlev_cas,nt_cas),rv_cas(nlev_cas,nt_cas)) 169 allocate(u_cas(nlev_cas,nt_cas),v_cas(nlev_cas,nt_cas),vitw_cas(nlev_cas,nt_cas),omega_cas(nlev_cas,nt_cas)) 170 allocate(tke_cas(nlev_cas,nt_cas)) 171 !forcing 172 allocate(ht_cas(nlev_cas,nt_cas),vt_cas(nlev_cas,nt_cas),dt_cas(nlev_cas,nt_cas),dtrad_cas(nlev_cas,nt_cas)) 173 allocate(hq_cas(nlev_cas,nt_cas),vq_cas(nlev_cas,nt_cas),dq_cas(nlev_cas,nt_cas)) 174 allocate(hth_cas(nlev_cas,nt_cas),vth_cas(nlev_cas,nt_cas),dth_cas(nlev_cas,nt_cas)) 175 allocate(hr_cas(nlev_cas,nt_cas),vr_cas(nlev_cas,nt_cas),dr_cas(nlev_cas,nt_cas)) 176 allocate(hu_cas(nlev_cas,nt_cas),vu_cas(nlev_cas,nt_cas),du_cas(nlev_cas,nt_cas)) 177 allocate(hv_cas(nlev_cas,nt_cas),vv_cas(nlev_cas,nt_cas),dv_cas(nlev_cas,nt_cas)) 178 allocate(ug_cas(nlev_cas,nt_cas),vg_cas(nlev_cas,nt_cas)) 179 allocate(temp_nudg_cas(nlev_cas,nt_cas),qv_nudg_cas(nlev_cas,nt_cas)) 180 allocate(u_nudg_cas(nlev_cas,nt_cas),v_nudg_cas(nlev_cas,nt_cas)) 181 allocate(invtau_temp_nudg_cas(nlev_cas,nt_cas),invtau_qv_nudg_cas(nlev_cas,nt_cas)) 182 allocate(invtau_u_nudg_cas(nlev_cas,nt_cas),invtau_v_nudg_cas(nlev_cas,nt_cas)) 183 allocate(lat_cas(nt_cas),sens_cas(nt_cas),ts_cas(nt_cas),tskin_cas(nt_cas),ps_cas(nt_cas),ustar_cas(nt_cas),tkes_cas(nt_cas)) 184 allocate(uw_cas(nlev_cas,nt_cas),vw_cas(nlev_cas,nt_cas),q1_cas(nlev_cas,nt_cas),q2_cas(nlev_cas,nt_cas)) 185 186 187 188 !champs interpoles 189 allocate(plev_prof_cas(nlev_cas)) 190 allocate(t_prof_cas(nlev_cas)) 191 allocate(theta_prof_cas(nlev_cas)) 192 allocate(thl_prof_cas(nlev_cas)) 193 allocate(thv_prof_cas(nlev_cas)) 194 allocate(q_prof_cas(nlev_cas)) 195 allocate(qv_prof_cas(nlev_cas)) 196 allocate(ql_prof_cas(nlev_cas)) 197 allocate(qi_prof_cas(nlev_cas)) 198 allocate(rh_prof_cas(nlev_cas)) 199 allocate(rv_prof_cas(nlev_cas)) 200 allocate(u_prof_cas(nlev_cas)) 201 allocate(v_prof_cas(nlev_cas)) 202 allocate(vitw_prof_cas(nlev_cas)) 203 allocate(omega_prof_cas(nlev_cas)) 204 allocate(tke_prof_cas(nlev_cas)) 205 allocate(ug_prof_cas(nlev_cas)) 206 allocate(vg_prof_cas(nlev_cas)) 207 allocate(temp_nudg_prof_cas(nlev_cas),qv_nudg_prof_cas(nlev_cas)) 208 allocate(u_nudg_prof_cas(nlev_cas),v_nudg_prof_cas(nlev_cas)) 209 allocate(invtau_temp_nudg_prof_cas(nlev_cas),invtau_qv_nudg_prof_cas(nlev_cas)) 210 allocate(invtau_u_nudg_prof_cas(nlev_cas),invtau_v_nudg_prof_cas(nlev_cas)) 211 allocate(ht_prof_cas(nlev_cas)) 212 allocate(hth_prof_cas(nlev_cas)) 213 allocate(hq_prof_cas(nlev_cas)) 214 allocate(hu_prof_cas(nlev_cas)) 215 allocate(hv_prof_cas(nlev_cas)) 216 allocate(vt_prof_cas(nlev_cas)) 217 allocate(vth_prof_cas(nlev_cas)) 218 allocate(vq_prof_cas(nlev_cas)) 219 allocate(vu_prof_cas(nlev_cas)) 220 allocate(vv_prof_cas(nlev_cas)) 221 allocate(dt_prof_cas(nlev_cas)) 222 allocate(dth_prof_cas(nlev_cas)) 223 allocate(dtrad_prof_cas(nlev_cas)) 224 allocate(dq_prof_cas(nlev_cas)) 225 allocate(du_prof_cas(nlev_cas)) 226 allocate(dv_prof_cas(nlev_cas)) 227 allocate(uw_prof_cas(nlev_cas)) 228 allocate(vw_prof_cas(nlev_cas)) 229 allocate(q1_prof_cas(nlev_cas)) 230 allocate(q2_prof_cas(nlev_cas)) 231 232 print*,'Allocations OK' 233 CALL read_SCM (nid,nlev_cas,nt_cas, & 234 ap_cas,bp_cas,z_cas,plev_cas,zh_cas,plevh_cas,t_cas,th_cas,thv_cas,thl_cas,qv_cas, & 235 ql_cas,qi_cas,rh_cas,rv_cas,u_cas,v_cas,vitw_cas,omega_cas,tke_cas,ug_cas,vg_cas, & 236 temp_nudg_cas,qv_nudg_cas,u_nudg_cas,v_nudg_cas, & 237 invtau_temp_nudg_cas,invtau_qv_nudg_cas,invtau_u_nudg_cas,invtau_v_nudg_cas, & 238 du_cas,hu_cas,vu_cas, & 239 dv_cas,hv_cas,vv_cas,dt_cas,ht_cas,vt_cas,dq_cas,hq_cas,vq_cas,dth_cas,hth_cas,vth_cas, & 240 dr_cas,hr_cas,vr_cas,dtrad_cas,sens_cas,lat_cas,ts_cas,tskin_cas,ps_cas,ustar_cas,tkes_cas, & 241 uw_cas,vw_cas,q1_cas,q2_cas,orog_cas,albedo_cas,emiss_cas,q_skin_cas,mom_rough,heat_rough, & 242 o3_cas,rugos_cas,clay_cas,sand_cas) 243 print*,'read_SCM cas OK' 244 do ii=1,nlev_cas 245 print*,'apres read_SCM_cas, plev_cas=',ii,plev_cas(ii,1) 246 !print*,'apres read_SCM, plev_cas=',ii,omega_cas(ii,nt_cas/2+1) 247 enddo 248 249 250 END SUBROUTINE read_SCM_cas 254 251 255 252 256 253 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 257 SUBROUTINE deallocate2_1D_cases 258 !profils environnementaux: 259 deallocate(plev_cas,plevh_cas) 260 261 deallocate(z_cas,zh_cas) 262 deallocate(ap_cas,bp_cas) 263 deallocate(t_cas,q_cas,qv_cas,ql_cas,qi_cas,rh_cas) 264 deallocate(th_cas,thl_cas,thv_cas,rv_cas) 265 deallocate(u_cas,v_cas,vitw_cas,omega_cas,tke_cas) 266 267 !forcing 268 deallocate(ht_cas,vt_cas,dt_cas,dtrad_cas) 269 deallocate(hq_cas,vq_cas,dq_cas) 270 deallocate(hth_cas,vth_cas,dth_cas) 271 deallocate(hr_cas,vr_cas,dr_cas) 272 deallocate(hu_cas,vu_cas,du_cas) 273 deallocate(hv_cas,vv_cas,dv_cas) 274 deallocate(ug_cas) 275 deallocate(vg_cas) 276 deallocate(lat_cas,sens_cas,ts_cas,ps_cas,ustar_cas,tkes_cas,uw_cas,vw_cas,q1_cas,q2_cas) 277 278 !champs interpoles 279 deallocate(plev_prof_cas) 280 deallocate(t_prof_cas) 281 deallocate(theta_prof_cas) 282 deallocate(thl_prof_cas) 283 deallocate(thv_prof_cas) 284 deallocate(q_prof_cas) 285 deallocate(qv_prof_cas) 286 deallocate(ql_prof_cas) 287 deallocate(qi_prof_cas) 288 deallocate(rh_prof_cas) 289 deallocate(rv_prof_cas) 290 deallocate(u_prof_cas) 291 deallocate(v_prof_cas) 292 deallocate(vitw_prof_cas) 293 deallocate(omega_prof_cas) 294 deallocate(tke_prof_cas) 295 deallocate(ug_prof_cas) 296 deallocate(vg_prof_cas) 297 deallocate(temp_nudg_prof_cas,qv_nudg_prof_cas,u_nudg_prof_cas,v_nudg_prof_cas) 298 deallocate(invtau_temp_nudg_prof_cas,invtau_qv_nudg_prof_cas,invtau_u_nudg_prof_cas,invtau_v_nudg_prof_cas) 299 deallocate(ht_prof_cas) 300 deallocate(hq_prof_cas) 301 deallocate(hu_prof_cas) 302 deallocate(hv_prof_cas) 303 deallocate(vt_prof_cas) 304 deallocate(vq_prof_cas) 305 deallocate(vu_prof_cas) 306 deallocate(vv_prof_cas) 307 deallocate(dt_prof_cas) 308 deallocate(dtrad_prof_cas) 309 deallocate(dq_prof_cas) 310 deallocate(du_prof_cas) 311 deallocate(dv_prof_cas) 312 deallocate(t_prof_cas) 313 deallocate(u_prof_cas) 314 deallocate(v_prof_cas) 315 deallocate(uw_prof_cas) 316 deallocate(vw_prof_cas) 317 deallocate(q1_prof_cas) 318 deallocate(q2_prof_cas) 319 320 END SUBROUTINE deallocate2_1D_cases 321 322 323 !===================================================================== 324 SUBROUTINE read_SCM(nid,nlevel,ntime, & 325 & ap,bp,zz,pp,zzh,pph,temp,theta,thv,thl,qv,ql,qi,rh,rv,u,v,vitw,omega,tke,ug,vg,& 326 & temp_nudg,qv_nudg,u_nudg,v_nudg, & 327 & invtau_temp_nudg,invtau_qv_nudg,invtau_u_nudg,invtau_v_nudg, & 328 & du,hu,vu,dv,hv,vv,dt,ht,vt,dq,hq,vq, & 329 & dth,hth,vth,dr,hr,vr,dtrad,sens,flat,ts,ps,ustar,tkes,uw,vw,q1,q2, & 330 & orog_cas,albedo_cas,emiss_cas,t_skin_cas,q_skin_cas,mom_rough, & 331 & heat_rough,o3_cas,rugos_cas,clay_cas,sand_cas) 332 333 !program reading forcing of the case study 334 implicit none 254 SUBROUTINE deallocate2_1D_cases 255 !profils environnementaux: 256 deallocate(plev_cas,plevh_cas) 257 258 deallocate(z_cas,zh_cas) 259 deallocate(ap_cas,bp_cas) 260 deallocate(t_cas,q_cas,qv_cas,ql_cas,qi_cas,rh_cas) 261 deallocate(th_cas,thl_cas,thv_cas,rv_cas) 262 deallocate(u_cas,v_cas,vitw_cas,omega_cas,tke_cas) 263 264 !forcing 265 deallocate(ht_cas,vt_cas,dt_cas,dtrad_cas) 266 deallocate(hq_cas,vq_cas,dq_cas) 267 deallocate(hth_cas,vth_cas,dth_cas) 268 deallocate(hr_cas,vr_cas,dr_cas) 269 deallocate(hu_cas,vu_cas,du_cas) 270 deallocate(hv_cas,vv_cas,dv_cas) 271 deallocate(ug_cas) 272 deallocate(vg_cas) 273 deallocate(lat_cas,sens_cas,tskin_cas,ts_cas,ps_cas,ustar_cas,tkes_cas,uw_cas,vw_cas,q1_cas,q2_cas) 274 275 !champs interpoles 276 deallocate(plev_prof_cas) 277 deallocate(t_prof_cas) 278 deallocate(theta_prof_cas) 279 deallocate(thl_prof_cas) 280 deallocate(thv_prof_cas) 281 deallocate(q_prof_cas) 282 deallocate(qv_prof_cas) 283 deallocate(ql_prof_cas) 284 deallocate(qi_prof_cas) 285 deallocate(rh_prof_cas) 286 deallocate(rv_prof_cas) 287 deallocate(u_prof_cas) 288 deallocate(v_prof_cas) 289 deallocate(vitw_prof_cas) 290 deallocate(omega_prof_cas) 291 deallocate(tke_prof_cas) 292 deallocate(ug_prof_cas) 293 deallocate(vg_prof_cas) 294 deallocate(temp_nudg_prof_cas,qv_nudg_prof_cas,u_nudg_prof_cas,v_nudg_prof_cas) 295 deallocate(invtau_temp_nudg_prof_cas,invtau_qv_nudg_prof_cas,invtau_u_nudg_prof_cas,invtau_v_nudg_prof_cas) 296 deallocate(ht_prof_cas) 297 deallocate(hq_prof_cas) 298 deallocate(hu_prof_cas) 299 deallocate(hv_prof_cas) 300 deallocate(vt_prof_cas) 301 deallocate(vq_prof_cas) 302 deallocate(vu_prof_cas) 303 deallocate(vv_prof_cas) 304 deallocate(dt_prof_cas) 305 deallocate(dtrad_prof_cas) 306 deallocate(dq_prof_cas) 307 deallocate(du_prof_cas) 308 deallocate(dv_prof_cas) 309 deallocate(t_prof_cas) 310 deallocate(u_prof_cas) 311 deallocate(v_prof_cas) 312 deallocate(uw_prof_cas) 313 deallocate(vw_prof_cas) 314 deallocate(q1_prof_cas) 315 deallocate(q2_prof_cas) 316 317 END SUBROUTINE deallocate2_1D_cases 318 319 320 !===================================================================== 321 SUBROUTINE read_SCM(nid,nlevel,ntime, & 322 ap,bp,zz,pp,zzh,pph,temp,theta,thv,thl,qv,ql,qi,rh,rv,u,v,vitw,omega,tke,ug,vg,& 323 temp_nudg,qv_nudg,u_nudg,v_nudg, & 324 invtau_temp_nudg,invtau_qv_nudg,invtau_u_nudg,invtau_v_nudg, & 325 du,hu,vu,dv,hv,vv,dt,ht,vt,dq,hq,vq, & 326 dth,hth,vth,dr,hr,vr,dtrad,sens,flat,ts,tskin,ps,ustar,tkes,uw,vw,q1,q2, & 327 orog_cas,albedo_cas,emiss_cas,q_skin_cas,mom_rough, & 328 heat_rough,o3_cas,rugos_cas,clay_cas,sand_cas) 329 330 !program reading forcing of the case study 331 use netcdf, only: nf90_get_var 332 implicit none 335 333 #include "netcdf.inc" 336 334 #include "compar1d.h" 337 335 338 339 340 341 342 343 !profils initiaux344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 real ts(ntime),ps(ntime)363 real orog_cas,albedo_cas,emiss_cas,t_skin_cas,q_skin_cas,mom_rough,heat_rough,o3_cas,rugos_cas,clay_cas,sand_cas364 365 366 367 368 369 370 371 372 373 374 ! data name_var/ &375 ! ! coordonnees pression (n+1 niveaux) #4376 ! & 'coor_par_a','coor_par_b','height_h','pressure_h',& ! #1-#4377 ! ! coordonnees pression (n niveaux) #8378 ! &'temp','qv','ql','qi','u','v','tke','pressure',& ! #5-#12379 ! ! coordonnees pression + temps #42380 ! &'w','omega','ug','vg','uadv','uadvh','uadvv','vadv','vadvh','vadvv','temp_adv','tadvh','tadvv',& ! #13 - #25381 ! &'qv_adv','qvadvh','qvadvv','thadv','thadvh','thadvv','thladvh', & ! #26 - #32382 ! & 'radv','radvh','radvv','radcool','q1','q2','ustress','vstress', & ! #33 - #40383 ! & 'rh','temp_nudging','qv_nudging','u_nudging','v_nudging', & ! #41-45384 ! &'height_f','pressure_forc','tempt','theta','thv','thl','qvt','qlt','qit','rv','ut','vt', & ! #46-58385 ! ! coordonnees temps #12386 ! &'tkes','sfc_sens_flx','sfc_lat_flx','ts','ps','ustar',&387 ! &'orog','albedo','emiss','t_skin','q_skin','mom_rough','heat_rough',&388 ! ! scalaires #4389 ! &'o3','rugos','clay','sand'/390 391 392 393 394 ! coordonnees pression (n+1 niveaux) #4395 &'coor_par_a','coor_par_b','zf','pressure_h',& ! #1-#4396 ! coordonnees pression (n niveaux) #8397 &'ta','qv','ql','qi','ua','va','tke','pa',& ! #5-#12398 ! coordonnees pression + temps #46399 & 'wa','wap','ug','vg','tnua_adv','tnua_advh','tnua_advv','tnva_adv','tnva_advh','tnva_advv','tnta_adv','tnta_advh','tnta_advv',& ! #13 - #25400 &'tnqv_adv','tnqv_advh','tnqv_advv','thadv','thadvh','thadvv','thladvh', & ! #26 - #32401 &'radv','radvh','radvv','tnta_rad','q1','q2','ustress','vstress', & ! #33 - #40402 &'rh','ta_nud','qv_nud','ua_nud','va_nud', & ! #41-45403 & 'zh_forc','pa_forc','tat','thetat','thetavt','thetalt','qvt','qlt','qit','rv','uat','vat', & ! #46-57404 &'nudging_constant_ta', 'nudging_constant_qv', 'nudging_constant_ua', 'nudging_constant_va', & ! # 58-61405 ! coordonnees temps #12406 & 'tkes','hfss','hfls','ts_forc','ps_forc','ustar', & ! 62-67407 & 'orog','albedo','emiss','t_skin','q_skin','z0','z0h', & ! 68-74408 ! scalaires #4409 &'O3','rugos','clay','sand'/ ! 75-78410 411 412 !-----------------------------------------------------------------------413 ! First check that we are using a version > v2 of the 1D standard format414 ! use the difference between 'temp' (old version) and 'ta' (new version)415 !-----------------------------------------------------------------------416 417 418 419 420 421 422 423 424 425 426 427 428 !-----------------------------------------------------------------------429 ! Checking availability of variable #i in the cas.nc file430 ! missing_var=1 if the variable is missing431 !-----------------------------------------------------------------------432 433 434 435 436 437 438 439 440 441 442 443 !-----------------------------------------------------------------------444 ! Activating keys depending on the presence of specific variables in cas.nc445 !-----------------------------------------------------------------------446 if ( 1 == 1 ) THEN447 ! A MODIFIER: il faudrait dire nudging_temp mais faut le declarer dans compar1d.h etc...448 ! if ( name_var(i) == 'temp_nudging' .and. nint(nudging_t)==0) stop 'Nudging inconsistency temp'449 if ( name_var(i) == 'qv_nud' .and. nint(nudging_qv)==0) stop 'Nudging inconsistency qv'450 if ( name_var(i) == 'ua_nud' .and. nint(nudging_u)==0) stop 'Nudging inconsistency u'451 if ( name_var(i) == 'va_nud' .and. nint(nudging_v)==0) stop 'Nudging inconsistency v'452 ELSE336 integer ntime,nlevel,k,t 337 338 real ap(nlevel+1),bp(nlevel+1) 339 real zz(nlevel,ntime),zzh(nlevel+1) 340 real pp(nlevel,ntime),pph(nlevel+1) 341 !profils initiaux 342 real temp0(nlevel),qv0(nlevel),ql0(nlevel),qi0(nlevel),u0(nlevel),v0(nlevel),tke0(nlevel) 343 real pp0(nlevel) 344 real temp(nlevel,ntime),qv(nlevel,ntime),ql(nlevel,ntime),qi(nlevel,ntime),rh(nlevel,ntime) 345 real theta(nlevel,ntime),thv(nlevel,ntime),thl(nlevel,ntime),rv(nlevel,ntime) 346 real u(nlevel,ntime),v(nlevel,ntime),tkes(ntime) 347 real temp_nudg(nlevel,ntime),qv_nudg(nlevel,ntime),u_nudg(nlevel,ntime),v_nudg(nlevel,ntime) 348 real invtau_temp_nudg(nlevel,ntime),invtau_qv_nudg(nlevel,ntime),invtau_u_nudg(nlevel,ntime),invtau_v_nudg(nlevel,ntime) 349 real ug(nlevel,ntime),vg(nlevel,ntime) 350 real vitw(nlevel,ntime),omega(nlevel,ntime),tke(nlevel,ntime) 351 real du(nlevel,ntime),hu(nlevel,ntime),vu(nlevel,ntime) 352 real dv(nlevel,ntime),hv(nlevel,ntime),vv(nlevel,ntime) 353 real dt(nlevel,ntime),ht(nlevel,ntime),vt(nlevel,ntime) 354 real dtrad(nlevel,ntime) 355 real dq(nlevel,ntime),hq(nlevel,ntime),vq(nlevel,ntime) 356 real dth(nlevel,ntime),hth(nlevel,ntime),vth(nlevel,ntime),hthl(nlevel,ntime) 357 real dr(nlevel,ntime),hr(nlevel,ntime),vr(nlevel,ntime) 358 real flat(ntime),sens(ntime),ustar(ntime) 359 real uw(nlevel,ntime),vw(nlevel,ntime),q1(nlevel,ntime),q2(nlevel,ntime) 360 real ts(ntime),tskin(ntime),ps(ntime) 361 real orog_cas,albedo_cas,emiss_cas,q_skin_cas,mom_rough,heat_rough,o3_cas,rugos_cas,clay_cas,sand_cas 362 real apbp(nlevel+1),resul(nlevel,ntime),resul1(nlevel),resul2(ntime),resul3 363 364 365 integer nid, ierr,ierr1,ierr2,rid,i,int_test 366 integer nbvar3d 367 parameter(nbvar3d=78) 368 integer var3didin(nbvar3d),missing_var(nbvar3d) 369 character*13 name_var(1:nbvar3d) 370 371 372 ! data name_var/ & 373 ! ! coordonnees pression (n+1 niveaux) #4 374 ! & 'coor_par_a','coor_par_b','height_h','pressure_h',& ! #1-#4 375 ! ! coordonnees pression (n niveaux) #8 376 ! &'temp','qv','ql','qi','u','v','tke','pressure',& ! #5-#12 377 ! ! coordonnees pression + temps #42 378 ! &'w','omega','ug','vg','uadv','uadvh','uadvv','vadv','vadvh','vadvv','temp_adv','tadvh','tadvv',& ! #13 - #25 379 ! &'qv_adv','qvadvh','qvadvv','thadv','thadvh','thadvv','thladvh', & ! #26 - #32 380 ! & 'radv','radvh','radvv','radcool','q1','q2','ustress','vstress', & ! #33 - #40 381 ! & 'rh','temp_nudging','qv_nudging','u_nudging','v_nudging', & ! #41-45 382 ! &'height_f','pressure_forc','tempt','theta','thv','thl','qvt','qlt','qit','rv','ut','vt', & ! #46-58 383 ! ! coordonnees temps #12 384 ! &'tkes','sfc_sens_flx','sfc_lat_flx','ts','ps','ustar',& 385 ! &'orog','albedo','emiss','t_skin','q_skin','mom_rough','heat_rough',& 386 ! ! scalaires #4 387 ! &'o3','rugos','clay','sand'/ 388 389 390 391 data name_var/ & 392 ! coordonnees pression (n+1 niveaux) #4 393 'coor_par_a','coor_par_b','zf','pressure_h',& ! #1-#4 394 ! coordonnees pression (n niveaux) #8 395 'ta','qv','ql','qi','ua','va','tke','pa',& ! #5-#12 396 ! coordonnees pression + temps #46 397 'wa','wap','ug','vg','tnua_adv','tnua_advh','tnua_advv','tnva_adv','tnva_advh','tnva_advv','tnta_adv','tnta_advh',& ! #13 - #25 398 'tnta_advv','tnqv_adv','tnqv_advh','tnqv_advv','thadv','thadvh','thadvv','thladvh', & ! #26 - #32 399 'radv','radvh','radvv','tnta_rad','q1','q2','ustress','vstress', & ! #33 - #40 400 'rh','ta_nud','qv_nud','ua_nud','va_nud', & ! #41-45 401 'zh_forc','pa_forc','tat','thetat','thetavt','thetalt','qvt','qlt','qit','rvt','uat','vat', & ! #46-57 402 'nudging_constant_ta', 'nudging_constant_qv', 'nudging_constant_ua', 'nudging_constant_va', & ! # 58-61 403 ! coordonnees temps #12 404 'tkes','hfss','hfls','ts_forc','tskin','ps_forc','ustar', & ! 62-68 405 ! scalaires 406 'orog','albedo','emiss','q_skin','z0','z0h', & ! 69-74 407 'O3','rugos','clay','sand'/ ! 75-78 408 409 410 !----------------------------------------------------------------------- 411 ! First check that we are using a version > v2 of the 1D standard format 412 ! use the difference between 'temp' (old version) and 'ta' (new version) 413 !----------------------------------------------------------------------- 414 415 416 ierr=NF_INQ_VARID(nid,'ta',int_test) 417 if(ierr/=NF_NOERR) then 418 print*, '++++++++++++++++++++++++++++++' 419 print*, 'variable ta missing in cas.nc ' 420 print*, 'You are probably using an obsolete version of the 1D cases' 421 print*, 'please dowload the last version of the 1D archive from https://lmdz.lmd.jussieu.fr/pub/' 422 print*, '++++++++++++++++++++++++++++++' 423 CALL abort_gcm ('mod_1D_cases_read_std','bad version of 1D directory',0) 424 endif 425 426 !----------------------------------------------------------------------- 427 ! Checking availability of variable #i in the cas.nc file 428 ! missing_var=1 if the variable is missing 429 !----------------------------------------------------------------------- 430 431 do i=1,nbvar3d 432 missing_var(i)=0. 433 ierr=NF_INQ_VARID(nid,name_var(i),var3didin(i)) 434 print*, 'name_var(i)', name_var(i), var3didin(i) 435 if(ierr/=NF_NOERR) then 436 print *,'Variable manquante dans cas.nc:',i,name_var(i) 437 ierr=NF_NOERR 438 missing_var(i)=1 439 else 440 441 !----------------------------------------------------------------------- 442 ! Activating keys depending on the presence of specific variables in cas.nc 443 !----------------------------------------------------------------------- 444 if ( 1 == 1 ) THEN 445 ! A MODIFIER: il faudrait dire nudging_temp mais faut le declarer dans compar1d.h etc... 446 ! if ( name_var(i) == 'temp_nudging' .and. nint(nudging_t)==0) stop 'Nudging inconsistency temp' 447 if ( name_var(i) == 'qv_nud' .and. nint(nudging_qv)==0) stop 'Nudging inconsistency qv' 448 if ( name_var(i) == 'ua_nud' .and. nint(nudging_u)==0) stop 'Nudging inconsistency u' 449 if ( name_var(i) == 'va_nud' .and. nint(nudging_v)==0) stop 'Nudging inconsistency v' 450 ELSE 453 451 print*,'GUIDAGE : CONSISTENCY CHECK DEACTIVATED FOR TESTS of SANDU/REF' 454 ENDIF 455 456 !----------------------------------------------------------------------- 457 ! Reading variables 1D (N+1) vertical variables (nlevelp1,lat,lon) 458 !----------------------------------------------------------------------- 459 if(i.LE.4) then 460 #ifdef NC_DOUBLE 461 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(i),apbp) 462 #else 463 ierr = NF_GET_VAR_REAL(nid,var3didin(i),apbp) 464 #endif 465 print *,'read2_cas(apbp), on a lu ',i,name_var(i) 466 if(ierr/=NF_NOERR) then 467 print *,'Pb a la lecture de cas.nc: ',name_var(i) 468 stop "getvarup" 469 endif 470 471 !----------------------------------------------------------------------- 472 ! Reading 1D (N) vertical varialbes (nlevel,lat,lon) 473 !----------------------------------------------------------------------- 474 else if(i.gt.4.and.i.LE.12) then 475 #ifdef NC_DOUBLE 476 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(i),resul1) 477 #else 478 ierr = NF_GET_VAR_REAL(nid,var3didin(i),resul1) 479 #endif 480 print *,'read2_cas(resul1), on a lu ',i,name_var(i) 481 if(ierr/=NF_NOERR) then 482 print *,'Pb a la lecture de cas.nc: ',name_var(i) 483 stop "getvarup" 484 endif 485 print*,'Lecture de la variable #i ',i,name_var(i),minval(resul1),maxval(resul1) 486 487 !----------------------------------------------------------------------- 488 ! Reading 2D tim-vertical variables (time,nlevel,lat,lon) 489 ! TBD : seems to be the same as above. 490 !----------------------------------------------------------------------- 491 else if(i.gt.12.and.i.LE.61) then 492 #ifdef NC_DOUBLE 493 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(i),resul) 494 #else 495 ierr = NF_GET_VAR_REAL(nid,var3didin(i),resul) 496 #endif 497 print *,'read2_cas(resul), on a lu ',i,name_var(i) 498 if(ierr/=NF_NOERR) then 499 print *,'Pb a la lecture de cas.nc: ',name_var(i) 500 stop "getvarup" 501 endif 502 print*,'Lecture de la variable #i ',i,name_var(i),minval(resul),maxval(resul) 503 504 !----------------------------------------------------------------------- 505 ! Reading 1D time variables (time,lat,lon) 506 !----------------------------------------------------------------------- 507 else if (i.gt.62.and.i.LE.75) then 508 #ifdef NC_DOUBLE 509 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(i),resul2) 510 #else 511 ierr = NF_GET_VAR_REAL(nid,var3didin(i),resul2) 512 #endif 513 print *,'read2_cas(resul2), on a lu ',i,name_var(i) 514 if(ierr/=NF_NOERR) then 515 print *,'Pb a la lecture de cas.nc: ',name_var(i) 516 stop "getvarup" 517 endif 518 print*,'Lecture de la variable #i ',i,name_var(i),minval(resul2),maxval(resul2) 519 520 !----------------------------------------------------------------------- 521 ! Reading scalar variables (lat,lon) 522 !----------------------------------------------------------------------- 523 else 524 #ifdef NC_DOUBLE 525 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(i),resul3) 526 #else 527 ierr = NF_GET_VAR_REAL(nid,var3didin(i),resul3) 528 #endif 529 print *,'read2_cas(resul3), on a lu ',i,name_var(i) 530 if(ierr/=NF_NOERR) then 531 print *,'Pb a la lecture de cas.nc: ',name_var(i) 532 stop "getvarup" 533 endif 534 print*,'Lecture de la variable #i ',i,name_var(i),resul3 535 endif 536 endif 537 538 !----------------------------------------------------------------------- 539 ! Attributing variables 540 !----------------------------------------------------------------------- 541 select case(i) 542 !case(1) ; ap=apbp ! donnees indexees en nlevel+1 543 ! case(2) ; bp=apbp 544 case(3) ; zzh=apbp 545 case(4) ; pph=apbp 546 case(5) ; temp0=resul1 ! donnees initiales 547 case(6) ; qv0=resul1 548 case(7) ; ql0=resul1 549 case(8) ; qi0=resul1 550 case(9) ; u0=resul1 551 case(10) ; v0=resul1 552 case(11) ; tke0=resul1 553 case(12) ; pp0=resul1 554 case(13) ; vitw=resul ! donnees indexees en nlevel,time 555 case(14) ; omega=resul 556 case(15) ; ug=resul 557 case(16) ; vg=resul 558 case(17) ; du=resul 559 case(18) ; hu=resul 560 case(19) ; vu=resul 561 case(20) ; dv=resul 562 case(21) ; hv=resul 563 case(22) ; vv=resul 564 case(23) ; dt=resul 565 case(24) ; ht=resul 566 case(25) ; vt=resul 567 case(26) ; dq=resul 568 case(27) ; hq=resul 569 case(28) ; vq=resul 570 case(29) ; dth=resul 571 case(30) ; hth=resul 572 case(31) ; vth=resul 573 case(32) ; hthl=resul 574 case(33) ; dr=resul 575 case(34) ; hr=resul 576 case(35) ; vr=resul 577 case(36) ; dtrad=resul 578 case(37) ; q1=resul 579 case(38) ; q2=resul 580 case(39) ; uw=resul 581 case(40) ; vw=resul 582 case(41) ; rh=resul 583 case(42) ; temp_nudg=resul 584 case(43) ; qv_nudg=resul 585 case(44) ; u_nudg=resul 586 case(45) ; v_nudg=resul 587 case(46) ; zz=resul ! donnees en time,nlevel pour profil initial 588 case(47) ; pp=resul 589 case(48) ; temp=resul 590 case(49) ; theta=resul 591 case(50) ; thv=resul 592 case(51) ; thl=resul 593 case(52) ; qv=resul 594 case(53) ; ql=resul 595 case(54) ; qi=resul 596 case(55) ; rv=resul 597 case(56) ; u=resul 598 case(57) ; v=resul 599 case(58) ; invtau_temp_nudg=resul 600 case(59) ; invtau_qv_nudg=resul 601 case(60) ; invtau_u_nudg=resul 602 case(61) ; invtau_v_nudg=resul 603 case(62) ; tkes=resul2 ! donnees indexees en time 604 case(63) ; sens=resul2 605 case(64) ; flat=resul2 606 case(65) ; ts=resul2 607 case(66) ; ps=resul2 608 case(67) ; ustar=resul2 609 case(68) ; orog_cas=resul3 ! constantes 610 case(69) ; albedo_cas=resul3 611 case(70) ; emiss_cas=resul3 612 case(71) ; t_skin_cas=resul3 613 case(72) ; q_skin_cas=resul3 614 case(73) ; mom_rough=resul3 615 case(74) ; heat_rough=resul3 616 case(75) ; o3_cas=resul3 617 case(76) ; rugos_cas=resul3 618 case(77) ; clay_cas=resul3 619 case(78) ; sand_cas=resul3 620 end select 621 resul=0. 622 resul1=0. 623 resul2=0. 624 resul3=0. 452 ENDIF 453 454 !----------------------------------------------------------------------- 455 ! Reading variables 1D (N+1) vertical variables (nlevelp1,lat,lon) 456 !----------------------------------------------------------------------- 457 if(i.LE.4) then 458 ierr = NF90_GET_VAR(nid,var3didin(i),apbp) 459 print *,'read_SCM(apbp), on a lu ',i,name_var(i) 460 if(ierr/=NF_NOERR) then 461 print *,'B Pb a la lecture de cas.nc: ',name_var(i) 462 stop "getvarup" 463 endif 464 465 !----------------------------------------------------------------------- 466 ! Reading 1D (N) vertical varialbes (nlevel,lat,lon) 467 !----------------------------------------------------------------------- 468 else if(i.gt.4.and.i.LE.12) then 469 ierr = NF90_GET_VAR(nid,var3didin(i),resul1) 470 print *,'read_SCM(resul1), on a lu ',i,name_var(i) 471 if(ierr/=NF_NOERR) then 472 print *,'C Pb a la lecture de cas.nc: ',name_var(i) 473 stop "getvarup" 474 endif 475 print*,'Lecture de la variable #i ',i,name_var(i),minval(resul1),maxval(resul1) 476 477 !----------------------------------------------------------------------- 478 ! Reading 2D tim-vertical variables (time,nlevel,lat,lon) 479 ! TBD : seems to be the same as above. 480 !----------------------------------------------------------------------- 481 else if(i.gt.12.and.i.LE.61) then 482 ierr = NF90_GET_VAR(nid,var3didin(i),resul) 483 print *,'read_SCM(resul), on a lu ',i,name_var(i) 484 if(ierr/=NF_NOERR) then 485 print *,'D Pb a la lecture de cas.nc: ',name_var(i) 486 stop "getvarup" 487 endif 488 print*,'Lecture de la variable #i ',i,name_var(i),minval(resul),maxval(resul) 489 490 !----------------------------------------------------------------------- 491 ! Reading 1D time variables (time,lat,lon) 492 !----------------------------------------------------------------------- 493 else if (i.gt.62.and.i.LE.75) then 494 ierr = NF90_GET_VAR(nid,var3didin(i),resul2) 495 print *,'read_SCM(resul2), on a lu ',i,name_var(i) 496 if(ierr/=NF_NOERR) then 497 print *,'E Pb a la lecture de cas.nc: ',name_var(i) 498 stop "getvarup" 499 endif 500 print*,'Lecture de la variable #i ',i,name_var(i),minval(resul2),maxval(resul2) 501 502 !----------------------------------------------------------------------- 503 ! Reading scalar variables (lat,lon) 504 !----------------------------------------------------------------------- 505 else 506 ierr = NF90_GET_VAR(nid,var3didin(i),resul3) 507 print *,'read_SCM(resul3), on a lu ',i,name_var(i) 508 if(ierr/=NF_NOERR) then 509 print *,'F Pb a la lecture de cas.nc: ',name_var(i) 510 stop "getvarup" 511 endif 512 print*,'Lecture de la variable #i ',i,name_var(i),resul3 513 endif 514 endif 515 516 !----------------------------------------------------------------------- 517 ! Attributing variables 518 !----------------------------------------------------------------------- 519 select case(i) 520 !case(1) ; ap=apbp ! donnees indexees en nlevel+1 521 ! case(2) ; bp=apbp 522 case(3) ; zzh=apbp 523 case(4) ; pph=apbp 524 case(5) ; temp0=resul1 ! donnees initiales 525 case(6) ; qv0=resul1 526 case(7) ; ql0=resul1 527 case(8) ; qi0=resul1 528 case(9) ; u0=resul1 529 case(10) ; v0=resul1 530 case(11) ; tke0=resul1 531 case(12) ; pp0=resul1 532 case(13) ; vitw=resul ! donnees indexees en nlevel,time 533 case(14) ; omega=resul 534 case(15) ; ug=resul 535 case(16) ; vg=resul 536 case(17) ; du=resul 537 case(18) ; hu=resul 538 case(19) ; vu=resul 539 case(20) ; dv=resul 540 case(21) ; hv=resul 541 case(22) ; vv=resul 542 case(23) ; dt=resul 543 case(24) ; ht=resul 544 case(25) ; vt=resul 545 case(26) ; dq=resul 546 case(27) ; hq=resul 547 case(28) ; vq=resul 548 case(29) ; dth=resul 549 case(30) ; hth=resul 550 case(31) ; vth=resul 551 case(32) ; hthl=resul 552 case(33) ; dr=resul 553 case(34) ; hr=resul 554 case(35) ; vr=resul 555 case(36) ; dtrad=resul 556 case(37) ; q1=resul 557 case(38) ; q2=resul 558 case(39) ; uw=resul 559 case(40) ; vw=resul 560 case(41) ; rh=resul 561 case(42) ; temp_nudg=resul 562 case(43) ; qv_nudg=resul 563 case(44) ; u_nudg=resul 564 case(45) ; v_nudg=resul 565 case(46) ; zz=resul ! donnees en time,nlevel pour profil initial 566 case(47) ; pp=resul 567 case(48) ; temp=resul 568 case(49) ; theta=resul 569 case(50) ; thv=resul 570 case(51) ; thl=resul 571 case(52) ; qv=resul 572 case(53) ; ql=resul 573 case(54) ; qi=resul 574 case(55) ; rv=resul 575 case(56) ; u=resul 576 case(57) ; v=resul 577 case(58) ; invtau_temp_nudg=resul 578 case(59) ; invtau_qv_nudg=resul 579 case(60) ; invtau_u_nudg=resul 580 case(61) ; invtau_v_nudg=resul 581 case(62) ; tkes=resul2 ! donnees indexees en time 582 case(63) ; sens=resul2 583 case(64) ; flat=resul2 584 case(65) ; ts=resul2 585 case(66) ; tskin=resul2 586 case(67) ; ps=resul2 587 case(68) ; ustar=resul2 588 case(69) ; orog_cas=resul3 ! constantes 589 case(70) ; albedo_cas=resul3 590 case(71) ; emiss_cas=resul3 591 case(72) ; q_skin_cas=resul3 592 case(73) ; mom_rough=resul3 593 case(74) ; heat_rough=resul3 594 case(75) ; o3_cas=resul3 595 case(76) ; rugos_cas=resul3 596 case(77) ; clay_cas=resul3 597 case(78) ; sand_cas=resul3 598 end select 599 resul=0. 600 resul1=0. 601 resul2=0. 602 resul3=0. 603 enddo 604 print*,'Lecture de la variable APRES ,sens ',minval(sens),maxval(sens) 605 print*,'Lecture de la variable APRES ,flat ',minval(flat),maxval(flat) 606 607 !CR:ATTENTION EN ATTENTE DE REGLER LA QUESTION DU PAS DE TEMPS INITIAL 608 do t=1,ntime 609 do k=1,nlevel 610 temp(k,t)=temp0(k) 611 qv(k,t)=qv0(k) 612 ql(k,t)=ql0(k) 613 qi(k,t)=qi0(k) 614 u(k,t)=u0(k) 615 v(k,t)=v0(k) 616 tke(k,t)=tke0(k) 625 617 enddo 626 print*,'Lecture de la variable APRES ,sens ',minval(sens),maxval(sens) 627 print*,'Lecture de la variable APRES ,flat ',minval(flat),maxval(flat) 628 629 !CR:ATTENTION EN ATTENTE DE REGLER LA QUESTION DU PAS DE TEMPS INITIAL 630 do t=1,ntime 631 do k=1,nlevel 632 temp(k,t)=temp0(k) 633 qv(k,t)=qv0(k) 634 ql(k,t)=ql0(k) 635 qi(k,t)=qi0(k) 636 u(k,t)=u0(k) 637 v(k,t)=v0(k) 638 tke(k,t)=tke0(k) 639 enddo 640 enddo 641 !!!! TRAVAIL : EN FONCTION DES DECISIONS SUR LA SPECIFICATION DE W 642 !!!omega=-vitw*pres*rg/(rd*temp) 643 !----------------------------------------------------------------------- 644 645 return 646 END SUBROUTINE read_SCM 647 !====================================================================== 648 649 !====================================================================== 650 651 !********************************************************************************************** 652 653 !********************************************************************************************** 654 SUBROUTINE interp_case_time_std(day,day1,annee_ref & 655 ! & ,year_cas,day_cas,nt_cas,pdt_forc,nlev_cas & 656 & ,nt_cas,nlev_cas & 657 & ,ts_cas,ps_cas,plev_cas,t_cas,theta_cas,thv_cas,thl_cas & 658 & ,qv_cas,ql_cas,qi_cas,u_cas,v_cas & 659 & ,ug_cas,vg_cas,temp_nudg_cas,qv_nudg_cas,u_nudg_cas,v_nudg_cas & 660 & ,invtau_temp_nudg_cas,invtau_qv_nudg_cas,invtau_u_nudg_cas,invtau_v_nudg_cas & 661 & ,vitw_cas,omega_cas,tke_cas,du_cas,hu_cas,vu_cas & 662 & ,dv_cas,hv_cas,vv_cas,dt_cas,ht_cas,vt_cas,dtrad_cas & 663 & ,dq_cas,hq_cas,vq_cas,dth_cas,hth_cas,vth_cas & 664 & ,lat_cas,sens_cas,ustar_cas & 665 & ,uw_cas,vw_cas,q1_cas,q2_cas,tkes_cas & 666 ! 667 & ,ts_prof_cas,ps_prof_cas,plev_prof_cas,t_prof_cas,theta_prof_cas & 668 & ,thv_prof_cas,thl_prof_cas,qv_prof_cas,ql_prof_cas,qi_prof_cas & 669 & ,u_prof_cas,v_prof_cas,ug_prof_cas,vg_prof_cas & 670 & ,temp_nudg_prof_cas,qv_nudg_prof_cas,u_nudg_prof_cas,v_nudg_prof_cas & 671 & ,invtau_temp_nudg_prof_cas,invtau_qv_nudg_prof_cas,invtau_u_nudg_prof_cas,invtau_v_nudg_prof_cas & 672 & ,vitw_prof_cas,omega_prof_cas,tke_prof_cas,du_prof_cas,hu_prof_cas,vu_prof_cas & 673 & ,dv_prof_cas,hv_prof_cas,vv_prof_cas,dt_prof_cas & 674 & ,ht_prof_cas,vt_prof_cas,dtrad_prof_cas,dq_prof_cas & 675 & ,hq_prof_cas,vq_prof_cas,dth_prof_cas,hth_prof_cas,vth_prof_cas & 676 & ,lat_prof_cas,sens_prof_cas & 677 & ,ustar_prof_cas,uw_prof_cas,vw_prof_cas,q1_prof_cas,q2_prof_cas,tkes_prof_cas) 678 679 680 681 682 683 684 implicit none 685 686 !--------------------------------------------------------------------------------------- 687 ! Time interpolation of a 2D field to the timestep corresponding to day 688 ! 689 ! day: current julian day (e.g. 717538.2) 690 ! day1: first day of the simulation 691 ! nt_cas: total nb of data in the forcing 692 ! pdt_cas: total time interval (in sec) between 2 forcing data 693 !--------------------------------------------------------------------------------------- 618 enddo 619 !!!! TRAVAIL : EN FONCTION DES DECISIONS SUR LA SPECIFICATION DE W 620 !!!omega=-vitw*pres*rg/(rd*temp) 621 !----------------------------------------------------------------------- 622 623 return 624 END SUBROUTINE read_SCM 625 !====================================================================== 626 627 !====================================================================== 628 629 !********************************************************************************************** 630 631 !********************************************************************************************** 632 SUBROUTINE interp_case_time_std(day,day1,annee_ref & 633 ! & ,year_cas,day_cas,nt_cas,pdt_forc,nlev_cas & 634 ,nt_cas,nlev_cas & 635 ,ts_cas,tskin_cas,ps_cas,plev_cas,t_cas,theta_cas,thv_cas,thl_cas & 636 ,qv_cas,ql_cas,qi_cas,u_cas,v_cas & 637 ,ug_cas,vg_cas,temp_nudg_cas,qv_nudg_cas,u_nudg_cas,v_nudg_cas & 638 ,invtau_temp_nudg_cas,invtau_qv_nudg_cas,invtau_u_nudg_cas,invtau_v_nudg_cas & 639 ,vitw_cas,omega_cas,tke_cas,du_cas,hu_cas,vu_cas & 640 ,dv_cas,hv_cas,vv_cas,dt_cas,ht_cas,vt_cas,dtrad_cas & 641 ,dq_cas,hq_cas,vq_cas,dth_cas,hth_cas,vth_cas & 642 ,lat_cas,sens_cas,ustar_cas & 643 ,uw_cas,vw_cas,q1_cas,q2_cas,tkes_cas & 644 ! 645 ,ts_prof_cas,tskin_prof_cas,ps_prof_cas,plev_prof_cas,t_prof_cas,theta_prof_cas & 646 ,thv_prof_cas,thl_prof_cas,qv_prof_cas,ql_prof_cas,qi_prof_cas & 647 ,u_prof_cas,v_prof_cas,ug_prof_cas,vg_prof_cas & 648 ,temp_nudg_prof_cas,qv_nudg_prof_cas,u_nudg_prof_cas,v_nudg_prof_cas & 649 ,invtau_temp_nudg_prof_cas,invtau_qv_nudg_prof_cas,invtau_u_nudg_prof_cas,invtau_v_nudg_prof_cas & 650 ,vitw_prof_cas,omega_prof_cas,tke_prof_cas,du_prof_cas,hu_prof_cas,vu_prof_cas & 651 ,dv_prof_cas,hv_prof_cas,vv_prof_cas,dt_prof_cas & 652 ,ht_prof_cas,vt_prof_cas,dtrad_prof_cas,dq_prof_cas & 653 ,hq_prof_cas,vq_prof_cas,dth_prof_cas,hth_prof_cas,vth_prof_cas & 654 ,lat_prof_cas,sens_prof_cas & 655 ,ustar_prof_cas,uw_prof_cas,vw_prof_cas,q1_prof_cas,q2_prof_cas,tkes_prof_cas) 656 657 658 659 660 661 662 implicit none 663 664 !--------------------------------------------------------------------------------------- 665 ! Time interpolation of a 2D field to the timestep corresponding to day 666 ! 667 ! day: current julian day (e.g. 717538.2) 668 ! day1: first day of the simulation 669 ! nt_cas: total nb of data in the forcing 670 ! pdt_cas: total time interval (in sec) between 2 forcing data 671 !--------------------------------------------------------------------------------------- 694 672 695 673 #include "compar1d.h" 696 674 #include "date_cas.h" 697 675 698 ! inputs:699 700 701 702 real ts_cas(nt_cas),ps_cas(nt_cas)703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 ! outputs:727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 real lat_prof_cas,sens_prof_cas,tkes_prof_cas,ts_prof_cas,ps_prof_cas,ustar_prof_cas746 747 ! local:748 749 750 751 752 753 ! do k=1,nlev_cas754 ! print*,'debut de interp2_case_time, plev_cas=',k,plev_cas(k,1)755 ! enddo756 757 ! On teste si la date du cas AMMA est correcte.758 ! C est pour memoire car en fait les fichiers .def759 ! sont censes etre corrects.760 ! A supprimer a terme (MPL 20150623)761 ! if ((forcing_type.eq.10).and.(1.eq.0)) then762 ! Check that initial day of the simulation consistent with AMMA case:763 ! if (annee_ref.ne.2006) then764 ! print*,'Pour AMMA, annee_ref doit etre 2006'765 ! print*,'Changer annee_ref dans run.def'766 ! stop767 ! endif768 ! if (annee_ref.eq.2006 .and. day1.lt.day_cas) then769 ! print*,'AMMA a debute le 10 juillet 2006',day1,day_cas770 ! print*,'Changer dayref dans run.def'771 ! stop772 ! endif773 ! if (annee_ref.eq.2006 .and. day1.gt.day_cas+1) then774 ! print*,'AMMA a fini le 11 juillet'775 ! print*,'Changer dayref ou nday dans run.def'776 ! stop777 ! endif778 ! endif779 780 ! Determine timestep relative to the 1st day:781 ! timeit=(day-day1)*86400.782 ! if (annee_ref.eq.1992) then783 ! timeit=(day-day_cas)*86400.784 ! else785 ! timeit=(day+61.-1.)*86400. ! 61 days between Nov01 and Dec31 1992786 ! endif787 788 789 790 791 792 793 794 ! Determine the closest observation times:795 ! it_cas1=INT(timeit/pdt_cas)+1796 ! it_cas2=it_cas1 + 1797 ! time_cas1=(it_cas1-1)*pdt_cas798 ! time_cas2=(it_cas2-1)*pdt_cas799 800 801 676 ! inputs: 677 integer annee_ref 678 integer nt_cas,nlev_cas 679 real day, day1,day_cas 680 real ts_cas(nt_cas),tskin_cas(nt_cas),ps_cas(nt_cas) 681 real plev_cas(nlev_cas,nt_cas) 682 real t_cas(nlev_cas,nt_cas),theta_cas(nlev_cas,nt_cas) 683 real thv_cas(nlev_cas,nt_cas), thl_cas(nlev_cas,nt_cas) 684 real qv_cas(nlev_cas,nt_cas),ql_cas(nlev_cas,nt_cas),qi_cas(nlev_cas,nt_cas) 685 real u_cas(nlev_cas,nt_cas),v_cas(nlev_cas,nt_cas) 686 real ug_cas(nlev_cas,nt_cas),vg_cas(nlev_cas,nt_cas) 687 real temp_nudg_cas(nlev_cas,nt_cas),qv_nudg_cas(nlev_cas,nt_cas) 688 real u_nudg_cas(nlev_cas,nt_cas),v_nudg_cas(nlev_cas,nt_cas) 689 690 real invtau_temp_nudg_cas(nlev_cas,nt_cas),invtau_qv_nudg_cas(nlev_cas,nt_cas) 691 real invtau_u_nudg_cas(nlev_cas,nt_cas),invtau_v_nudg_cas(nlev_cas,nt_cas) 692 693 real vitw_cas(nlev_cas,nt_cas),omega_cas(nlev_cas,nt_cas),tke_cas(nlev_cas,nt_cas) 694 real du_cas(nlev_cas,nt_cas),hu_cas(nlev_cas,nt_cas),vu_cas(nlev_cas,nt_cas) 695 real dv_cas(nlev_cas,nt_cas),hv_cas(nlev_cas,nt_cas),vv_cas(nlev_cas,nt_cas) 696 real dt_cas(nlev_cas,nt_cas),ht_cas(nlev_cas,nt_cas),vt_cas(nlev_cas,nt_cas) 697 real dth_cas(nlev_cas,nt_cas),hth_cas(nlev_cas,nt_cas),vth_cas(nlev_cas,nt_cas) 698 real dtrad_cas(nlev_cas,nt_cas) 699 real dq_cas(nlev_cas,nt_cas),hq_cas(nlev_cas,nt_cas),vq_cas(nlev_cas,nt_cas) 700 real lat_cas(nt_cas),sens_cas(nt_cas),tkes_cas(nt_cas) 701 real ustar_cas(nt_cas),uw_cas(nlev_cas,nt_cas),vw_cas(nlev_cas,nt_cas) 702 real q1_cas(nlev_cas,nt_cas),q2_cas(nlev_cas,nt_cas) 703 704 ! outputs: 705 real plev_prof_cas(nlev_cas) 706 real t_prof_cas(nlev_cas),theta_prof_cas(nlev_cas),thl_prof_cas(nlev_cas),thv_prof_cas(nlev_cas) 707 real qv_prof_cas(nlev_cas),ql_prof_cas(nlev_cas),qi_prof_cas(nlev_cas) 708 real u_prof_cas(nlev_cas),v_prof_cas(nlev_cas) 709 real ug_prof_cas(nlev_cas),vg_prof_cas(nlev_cas) 710 real temp_nudg_prof_cas(nlev_cas),qv_nudg_prof_cas(nlev_cas) 711 real u_nudg_prof_cas(nlev_cas),v_nudg_prof_cas(nlev_cas) 712 713 real invtau_temp_nudg_prof_cas(nlev_cas),invtau_qv_nudg_prof_cas(nlev_cas) 714 real invtau_u_nudg_prof_cas(nlev_cas),invtau_v_nudg_prof_cas(nlev_cas) 715 716 real vitw_prof_cas(nlev_cas),omega_prof_cas(nlev_cas),tke_prof_cas(nlev_cas) 717 real du_prof_cas(nlev_cas),hu_prof_cas(nlev_cas),vu_prof_cas(nlev_cas) 718 real dv_prof_cas(nlev_cas),hv_prof_cas(nlev_cas),vv_prof_cas(nlev_cas) 719 real dt_prof_cas(nlev_cas),ht_prof_cas(nlev_cas),vt_prof_cas(nlev_cas) 720 real dth_prof_cas(nlev_cas),hth_prof_cas(nlev_cas),vth_prof_cas(nlev_cas) 721 real dtrad_prof_cas(nlev_cas) 722 real dq_prof_cas(nlev_cas),hq_prof_cas(nlev_cas),vq_prof_cas(nlev_cas) 723 real lat_prof_cas,sens_prof_cas,tkes_prof_cas,ts_prof_cas,tskin_prof_cas,ps_prof_cas,ustar_prof_cas 724 real uw_prof_cas(nlev_cas),vw_prof_cas(nlev_cas),q1_prof_cas(nlev_cas),q2_prof_cas(nlev_cas) 725 ! local: 726 integer it_cas1, it_cas2,k 727 real timeit,time_cas1,time_cas2,frac 728 729 730 print*,'Check time',day1,day_ju_ini_cas,day_deb+1,pdt_cas 731 ! do k=1,nlev_cas 732 ! print*,'debut de interp2_case_time, plev_cas=',k,plev_cas(k,1) 733 ! enddo 734 735 ! On teste si la date du cas AMMA est correcte. 736 ! C est pour memoire car en fait les fichiers .def 737 ! sont censes etre corrects. 738 ! A supprimer a terme (MPL 20150623) 739 ! if ((forcing_type.eq.10).and.(1.eq.0)) then 740 ! Check that initial day of the simulation consistent with AMMA case: 741 ! if (annee_ref.ne.2006) then 742 ! print*,'Pour AMMA, annee_ref doit etre 2006' 743 ! print*,'Changer annee_ref dans run.def' 744 ! stop 745 ! endif 746 ! if (annee_ref.eq.2006 .and. day1.lt.day_cas) then 747 ! print*,'AMMA a debute le 10 juillet 2006',day1,day_cas 748 ! print*,'Changer dayref dans run.def' 749 ! stop 750 ! endif 751 ! if (annee_ref.eq.2006 .and. day1.gt.day_cas+1) then 752 ! print*,'AMMA a fini le 11 juillet' 753 ! print*,'Changer dayref ou nday dans run.def' 754 ! stop 755 ! endif 756 ! endif 757 758 ! Determine timestep relative to the 1st day: 759 ! timeit=(day-day1)*86400. 760 ! if (annee_ref.eq.1992) then 761 ! timeit=(day-day_cas)*86400. 762 ! else 763 ! timeit=(day+61.-1.)*86400. ! 61 days between Nov01 and Dec31 1992 764 ! endif 765 timeit=(day-day_ju_ini_cas)*86400 766 print *,'day=',day 767 print *,'day_ju_ini_cas=',day_ju_ini_cas 768 print *,'pdt_cas=',pdt_cas 769 print *,'timeit=',timeit 770 print *,'nt_cas=',nt_cas 771 772 ! Determine the closest observation times: 773 ! it_cas1=INT(timeit/pdt_cas)+1 774 ! it_cas2=it_cas1 + 1 775 ! time_cas1=(it_cas1-1)*pdt_cas 776 ! time_cas2=(it_cas2-1)*pdt_cas 777 778 it_cas1=INT(timeit/pdt_cas)+1 779 IF (it_cas1 .EQ. nt_cas) THEN 802 780 it_cas2=it_cas1 803 781 ELSE 804 782 it_cas2=it_cas1 + 1 805 ENDIF 806 time_cas1=(it_cas1-1)*pdt_cas 807 time_cas2=(it_cas2-1)*pdt_cas 808 ! print *,'timeit,pdt_cas,nt_cas=',timeit,pdt_cas,nt_cas 809 ! print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas2 810 811 if (it_cas1 .gt. nt_cas) then 812 write(*,*) 'PB-stop: day, day_ju_ini_cas,it_cas1, it_cas2, timeit: ' & 813 & ,day,day_ju_ini_cas,it_cas1,it_cas2,timeit 814 stop 815 endif 816 817 ! time interpolation: 818 IF (it_cas1 .EQ. it_cas2) THEN 819 frac=0. 820 ELSE 821 frac=(time_cas2-timeit)/(time_cas2-time_cas1) 822 frac=max(frac,0.0) 823 ENDIF 824 825 lat_prof_cas = lat_cas(it_cas2) & 826 & -frac*(lat_cas(it_cas2)-lat_cas(it_cas1)) 827 sens_prof_cas = sens_cas(it_cas2) & 828 & -frac*(sens_cas(it_cas2)-sens_cas(it_cas1)) 829 tkes_prof_cas = tkes_cas(it_cas2) & 830 & -frac*(tkes_cas(it_cas2)-tkes_cas(it_cas1)) 831 ts_prof_cas = ts_cas(it_cas2) & 832 & -frac*(ts_cas(it_cas2)-ts_cas(it_cas1)) 833 ps_prof_cas = ps_cas(it_cas2) & 834 & -frac*(ps_cas(it_cas2)-ps_cas(it_cas1)) 835 ustar_prof_cas = ustar_cas(it_cas2) & 836 & -frac*(ustar_cas(it_cas2)-ustar_cas(it_cas1)) 837 838 do k=1,nlev_cas 839 plev_prof_cas(k) = plev_cas(k,it_cas2) & 840 & -frac*(plev_cas(k,it_cas2)-plev_cas(k,it_cas1)) 841 t_prof_cas(k) = t_cas(k,it_cas2) & 842 & -frac*(t_cas(k,it_cas2)-t_cas(k,it_cas1)) 843 !print *,'k,frac,plev_cas1,plev_cas2=',k,frac,plev_cas(k,it_cas1),plev_cas(k,it_cas2) 844 theta_prof_cas(k) = theta_cas(k,it_cas2) & 845 & -frac*(theta_cas(k,it_cas2)-theta_cas(k,it_cas1)) 846 thv_prof_cas(k) = thv_cas(k,it_cas2) & 847 & -frac*(thv_cas(k,it_cas2)-thv_cas(k,it_cas1)) 848 thl_prof_cas(k) = thl_cas(k,it_cas2) & 849 & -frac*(thl_cas(k,it_cas2)-thl_cas(k,it_cas1)) 850 qv_prof_cas(k) = qv_cas(k,it_cas2) & 851 & -frac*(qv_cas(k,it_cas2)-qv_cas(k,it_cas1)) 852 ql_prof_cas(k) = ql_cas(k,it_cas2) & 853 & -frac*(ql_cas(k,it_cas2)-ql_cas(k,it_cas1)) 854 qi_prof_cas(k) = qi_cas(k,it_cas2) & 855 & -frac*(qi_cas(k,it_cas2)-qi_cas(k,it_cas1)) 856 u_prof_cas(k) = u_cas(k,it_cas2) & 857 & -frac*(u_cas(k,it_cas2)-u_cas(k,it_cas1)) 858 v_prof_cas(k) = v_cas(k,it_cas2) & 859 & -frac*(v_cas(k,it_cas2)-v_cas(k,it_cas1)) 860 ug_prof_cas(k) = ug_cas(k,it_cas2) & 861 & -frac*(ug_cas(k,it_cas2)-ug_cas(k,it_cas1)) 862 vg_prof_cas(k) = vg_cas(k,it_cas2) & 863 & -frac*(vg_cas(k,it_cas2)-vg_cas(k,it_cas1)) 864 temp_nudg_prof_cas(k) = temp_nudg_cas(k,it_cas2) & 865 & -frac*(temp_nudg_cas(k,it_cas2)-temp_nudg_cas(k,it_cas1)) 866 qv_nudg_prof_cas(k) = qv_nudg_cas(k,it_cas2) & 867 & -frac*(qv_nudg_cas(k,it_cas2)-qv_nudg_cas(k,it_cas1)) 868 u_nudg_prof_cas(k) = u_nudg_cas(k,it_cas2) & 869 & -frac*(u_nudg_cas(k,it_cas2)-u_nudg_cas(k,it_cas1)) 870 v_nudg_prof_cas(k) = v_nudg_cas(k,it_cas2) & 871 & -frac*(v_nudg_cas(k,it_cas2)-v_nudg_cas(k,it_cas1)) 872 invtau_temp_nudg_prof_cas(k) = invtau_temp_nudg_cas(k,it_cas2) & 873 & -frac*(invtau_temp_nudg_cas(k,it_cas2)-invtau_temp_nudg_cas(k,it_cas1)) 874 invtau_qv_nudg_prof_cas(k) = invtau_qv_nudg_cas(k,it_cas2) & 875 & -frac*(invtau_qv_nudg_cas(k,it_cas2)-invtau_qv_nudg_cas(k,it_cas1)) 876 invtau_u_nudg_prof_cas(k) = invtau_u_nudg_cas(k,it_cas2) & 877 & -frac*(invtau_u_nudg_cas(k,it_cas2)-invtau_u_nudg_cas(k,it_cas1)) 878 invtau_v_nudg_prof_cas(k) = invtau_v_nudg_cas(k,it_cas2) & 879 & -frac*(invtau_v_nudg_cas(k,it_cas2)-invtau_v_nudg_cas(k,it_cas1)) 880 vitw_prof_cas(k) = vitw_cas(k,it_cas2) & 881 & -frac*(vitw_cas(k,it_cas2)-vitw_cas(k,it_cas1)) 882 omega_prof_cas(k) = omega_cas(k,it_cas2) & 883 & -frac*(omega_cas(k,it_cas2)-omega_cas(k,it_cas1)) 884 tke_prof_cas(k) = tke_cas(k,it_cas2) & 885 & -frac*(tke_cas(k,it_cas2)-tke_cas(k,it_cas1)) 886 du_prof_cas(k) = du_cas(k,it_cas2) & 887 & -frac*(du_cas(k,it_cas2)-du_cas(k,it_cas1)) 888 hu_prof_cas(k) = hu_cas(k,it_cas2) & 889 & -frac*(hu_cas(k,it_cas2)-hu_cas(k,it_cas1)) 890 vu_prof_cas(k) = vu_cas(k,it_cas2) & 891 & -frac*(vu_cas(k,it_cas2)-vu_cas(k,it_cas1)) 892 dv_prof_cas(k) = dv_cas(k,it_cas2) & 893 & -frac*(dv_cas(k,it_cas2)-dv_cas(k,it_cas1)) 894 hv_prof_cas(k) = hv_cas(k,it_cas2) & 895 & -frac*(hv_cas(k,it_cas2)-hv_cas(k,it_cas1)) 896 vv_prof_cas(k) = vv_cas(k,it_cas2) & 897 & -frac*(vv_cas(k,it_cas2)-vv_cas(k,it_cas1)) 898 dt_prof_cas(k) = dt_cas(k,it_cas2) & 899 & -frac*(dt_cas(k,it_cas2)-dt_cas(k,it_cas1)) 900 ht_prof_cas(k) = ht_cas(k,it_cas2) & 901 & -frac*(ht_cas(k,it_cas2)-ht_cas(k,it_cas1)) 902 vt_prof_cas(k) = vt_cas(k,it_cas2) & 903 & -frac*(vt_cas(k,it_cas2)-vt_cas(k,it_cas1)) 904 dth_prof_cas(k) = dth_cas(k,it_cas2) & 905 & -frac*(dth_cas(k,it_cas2)-dth_cas(k,it_cas1)) 906 hth_prof_cas(k) = hth_cas(k,it_cas2) & 907 & -frac*(hth_cas(k,it_cas2)-hth_cas(k,it_cas1)) 908 vth_prof_cas(k) = vth_cas(k,it_cas2) & 909 & -frac*(vth_cas(k,it_cas2)-vth_cas(k,it_cas1)) 910 dtrad_prof_cas(k) = dtrad_cas(k,it_cas2) & 911 & -frac*(dtrad_cas(k,it_cas2)-dtrad_cas(k,it_cas1)) 912 dq_prof_cas(k) = dq_cas(k,it_cas2) & 913 & -frac*(dq_cas(k,it_cas2)-dq_cas(k,it_cas1)) 914 hq_prof_cas(k) = hq_cas(k,it_cas2) & 915 & -frac*(hq_cas(k,it_cas2)-hq_cas(k,it_cas1)) 916 vq_prof_cas(k) = vq_cas(k,it_cas2) & 917 & -frac*(vq_cas(k,it_cas2)-vq_cas(k,it_cas1)) 783 ENDIF 784 time_cas1=(it_cas1-1)*pdt_cas 785 time_cas2=(it_cas2-1)*pdt_cas 786 ! print *,'timeit,pdt_cas,nt_cas=',timeit,pdt_cas,nt_cas 787 ! print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas2 788 789 if (it_cas1 .gt. nt_cas) then 790 write(*,*) 'PB-stop: day, day_ju_ini_cas,it_cas1, it_cas2, timeit: ' & 791 ,day,day_ju_ini_cas,it_cas1,it_cas2,timeit 792 stop 793 endif 794 795 ! time interpolation: 796 IF (it_cas1 .EQ. it_cas2) THEN 797 frac=0. 798 ELSE 799 frac=(time_cas2-timeit)/(time_cas2-time_cas1) 800 frac=max(frac,0.0) 801 ENDIF 802 803 lat_prof_cas = lat_cas(it_cas2) & 804 -frac*(lat_cas(it_cas2)-lat_cas(it_cas1)) 805 sens_prof_cas = sens_cas(it_cas2) & 806 -frac*(sens_cas(it_cas2)-sens_cas(it_cas1)) 807 tkes_prof_cas = tkes_cas(it_cas2) & 808 -frac*(tkes_cas(it_cas2)-tkes_cas(it_cas1)) 809 ts_prof_cas = ts_cas(it_cas2) & 810 -frac*(ts_cas(it_cas2)-ts_cas(it_cas1)) 811 tskin_prof_cas = tskin_cas(it_cas2) & 812 -frac*(tskin_cas(it_cas2)-tskin_cas(it_cas1)) 813 ps_prof_cas = ps_cas(it_cas2) & 814 -frac*(ps_cas(it_cas2)-ps_cas(it_cas1)) 815 ustar_prof_cas = ustar_cas(it_cas2) & 816 -frac*(ustar_cas(it_cas2)-ustar_cas(it_cas1)) 817 818 do k=1,nlev_cas 819 plev_prof_cas(k) = plev_cas(k,it_cas2) & 820 -frac*(plev_cas(k,it_cas2)-plev_cas(k,it_cas1)) 821 t_prof_cas(k) = t_cas(k,it_cas2) & 822 -frac*(t_cas(k,it_cas2)-t_cas(k,it_cas1)) 823 !print *,'k,frac,plev_cas1,plev_cas2=',k,frac,plev_cas(k,it_cas1),plev_cas(k,it_cas2) 824 theta_prof_cas(k) = theta_cas(k,it_cas2) & 825 -frac*(theta_cas(k,it_cas2)-theta_cas(k,it_cas1)) 826 thv_prof_cas(k) = thv_cas(k,it_cas2) & 827 -frac*(thv_cas(k,it_cas2)-thv_cas(k,it_cas1)) 828 thl_prof_cas(k) = thl_cas(k,it_cas2) & 829 -frac*(thl_cas(k,it_cas2)-thl_cas(k,it_cas1)) 830 qv_prof_cas(k) = qv_cas(k,it_cas2) & 831 -frac*(qv_cas(k,it_cas2)-qv_cas(k,it_cas1)) 832 ql_prof_cas(k) = ql_cas(k,it_cas2) & 833 -frac*(ql_cas(k,it_cas2)-ql_cas(k,it_cas1)) 834 qi_prof_cas(k) = qi_cas(k,it_cas2) & 835 -frac*(qi_cas(k,it_cas2)-qi_cas(k,it_cas1)) 836 u_prof_cas(k) = u_cas(k,it_cas2) & 837 -frac*(u_cas(k,it_cas2)-u_cas(k,it_cas1)) 838 v_prof_cas(k) = v_cas(k,it_cas2) & 839 -frac*(v_cas(k,it_cas2)-v_cas(k,it_cas1)) 840 ug_prof_cas(k) = ug_cas(k,it_cas2) & 841 -frac*(ug_cas(k,it_cas2)-ug_cas(k,it_cas1)) 842 vg_prof_cas(k) = vg_cas(k,it_cas2) & 843 -frac*(vg_cas(k,it_cas2)-vg_cas(k,it_cas1)) 844 temp_nudg_prof_cas(k) = temp_nudg_cas(k,it_cas2) & 845 -frac*(temp_nudg_cas(k,it_cas2)-temp_nudg_cas(k,it_cas1)) 846 qv_nudg_prof_cas(k) = qv_nudg_cas(k,it_cas2) & 847 -frac*(qv_nudg_cas(k,it_cas2)-qv_nudg_cas(k,it_cas1)) 848 u_nudg_prof_cas(k) = u_nudg_cas(k,it_cas2) & 849 -frac*(u_nudg_cas(k,it_cas2)-u_nudg_cas(k,it_cas1)) 850 v_nudg_prof_cas(k) = v_nudg_cas(k,it_cas2) & 851 -frac*(v_nudg_cas(k,it_cas2)-v_nudg_cas(k,it_cas1)) 852 invtau_temp_nudg_prof_cas(k) = invtau_temp_nudg_cas(k,it_cas2) & 853 -frac*(invtau_temp_nudg_cas(k,it_cas2)-invtau_temp_nudg_cas(k,it_cas1)) 854 invtau_qv_nudg_prof_cas(k) = invtau_qv_nudg_cas(k,it_cas2) & 855 -frac*(invtau_qv_nudg_cas(k,it_cas2)-invtau_qv_nudg_cas(k,it_cas1)) 856 invtau_u_nudg_prof_cas(k) = invtau_u_nudg_cas(k,it_cas2) & 857 -frac*(invtau_u_nudg_cas(k,it_cas2)-invtau_u_nudg_cas(k,it_cas1)) 858 invtau_v_nudg_prof_cas(k) = invtau_v_nudg_cas(k,it_cas2) & 859 -frac*(invtau_v_nudg_cas(k,it_cas2)-invtau_v_nudg_cas(k,it_cas1)) 860 vitw_prof_cas(k) = vitw_cas(k,it_cas2) & 861 -frac*(vitw_cas(k,it_cas2)-vitw_cas(k,it_cas1)) 862 omega_prof_cas(k) = omega_cas(k,it_cas2) & 863 -frac*(omega_cas(k,it_cas2)-omega_cas(k,it_cas1)) 864 tke_prof_cas(k) = tke_cas(k,it_cas2) & 865 -frac*(tke_cas(k,it_cas2)-tke_cas(k,it_cas1)) 866 du_prof_cas(k) = du_cas(k,it_cas2) & 867 -frac*(du_cas(k,it_cas2)-du_cas(k,it_cas1)) 868 hu_prof_cas(k) = hu_cas(k,it_cas2) & 869 -frac*(hu_cas(k,it_cas2)-hu_cas(k,it_cas1)) 870 vu_prof_cas(k) = vu_cas(k,it_cas2) & 871 -frac*(vu_cas(k,it_cas2)-vu_cas(k,it_cas1)) 872 dv_prof_cas(k) = dv_cas(k,it_cas2) & 873 -frac*(dv_cas(k,it_cas2)-dv_cas(k,it_cas1)) 874 hv_prof_cas(k) = hv_cas(k,it_cas2) & 875 -frac*(hv_cas(k,it_cas2)-hv_cas(k,it_cas1)) 876 vv_prof_cas(k) = vv_cas(k,it_cas2) & 877 -frac*(vv_cas(k,it_cas2)-vv_cas(k,it_cas1)) 878 dt_prof_cas(k) = dt_cas(k,it_cas2) & 879 -frac*(dt_cas(k,it_cas2)-dt_cas(k,it_cas1)) 880 ht_prof_cas(k) = ht_cas(k,it_cas2) & 881 -frac*(ht_cas(k,it_cas2)-ht_cas(k,it_cas1)) 882 vt_prof_cas(k) = vt_cas(k,it_cas2) & 883 -frac*(vt_cas(k,it_cas2)-vt_cas(k,it_cas1)) 884 dth_prof_cas(k) = dth_cas(k,it_cas2) & 885 -frac*(dth_cas(k,it_cas2)-dth_cas(k,it_cas1)) 886 hth_prof_cas(k) = hth_cas(k,it_cas2) & 887 -frac*(hth_cas(k,it_cas2)-hth_cas(k,it_cas1)) 888 vth_prof_cas(k) = vth_cas(k,it_cas2) & 889 -frac*(vth_cas(k,it_cas2)-vth_cas(k,it_cas1)) 890 dtrad_prof_cas(k) = dtrad_cas(k,it_cas2) & 891 -frac*(dtrad_cas(k,it_cas2)-dtrad_cas(k,it_cas1)) 892 dq_prof_cas(k) = dq_cas(k,it_cas2) & 893 -frac*(dq_cas(k,it_cas2)-dq_cas(k,it_cas1)) 894 hq_prof_cas(k) = hq_cas(k,it_cas2) & 895 -frac*(hq_cas(k,it_cas2)-hq_cas(k,it_cas1)) 896 vq_prof_cas(k) = vq_cas(k,it_cas2) & 897 -frac*(vq_cas(k,it_cas2)-vq_cas(k,it_cas1)) 918 898 uw_prof_cas(k) = uw_cas(k,it_cas2) & 919 &-frac*(uw_cas(k,it_cas2)-uw_cas(k,it_cas1))899 -frac*(uw_cas(k,it_cas2)-uw_cas(k,it_cas1)) 920 900 vw_prof_cas(k) = vw_cas(k,it_cas2) & 921 &-frac*(vw_cas(k,it_cas2)-vw_cas(k,it_cas1))901 -frac*(vw_cas(k,it_cas2)-vw_cas(k,it_cas1)) 922 902 q1_prof_cas(k) = q1_cas(k,it_cas2) & 923 &-frac*(q1_cas(k,it_cas2)-q1_cas(k,it_cas1))903 -frac*(q1_cas(k,it_cas2)-q1_cas(k,it_cas1)) 924 904 q2_prof_cas(k) = q2_cas(k,it_cas2) & 925 &-frac*(q2_cas(k,it_cas2)-q2_cas(k,it_cas1))926 927 928 929 930 931 !**********************************************************************************************932 !=====================================================================933 934 &,t_prof_cas,th_prof_cas,thv_prof_cas,thl_prof_cas &935 &,qv_prof_cas,ql_prof_cas,qi_prof_cas,u_prof_cas,v_prof_cas &936 &,ug_prof_cas,vg_prof_cas &937 &,temp_nudg_prof_cas,qv_nudg_prof_cas,u_nudg_prof_cas,v_nudg_prof_cas &938 &,invtau_temp_nudg_prof_cas,invtau_qv_nudg_prof_cas,invtau_u_nudg_prof_cas,invtau_v_nudg_prof_cas &939 &,vitw_prof_cas,omega_prof_cas,tke_prof_cas &940 &,du_prof_cas,hu_prof_cas,vu_prof_cas,dv_prof_cas,hv_prof_cas,vv_prof_cas &941 &,dt_prof_cas,ht_prof_cas,vt_prof_cas,dtrad_prof_cas,dq_prof_cas,hq_prof_cas,vq_prof_cas &942 &,dth_prof_cas,hth_prof_cas,vth_prof_cas &943 !944 &,t_mod_cas,theta_mod_cas,thv_mod_cas,thl_mod_cas &945 &,qv_mod_cas,ql_mod_cas,qi_mod_cas,u_mod_cas,v_mod_cas &946 &,ug_mod_cas,vg_mod_cas &947 &,temp_nudg_mod_cas,qv_nudg_mod_cas,u_nudg_mod_cas,v_nudg_mod_cas &948 &,invtau_temp_nudg_mod_cas,invtau_qv_nudg_mod_cas,invtau_u_nudg_mod_cas,invtau_v_nudg_mod_cas &949 &,w_mod_cas,omega_mod_cas,tke_mod_cas &950 &,du_mod_cas,hu_mod_cas,vu_mod_cas,dv_mod_cas,hv_mod_cas,vv_mod_cas &951 &,dt_mod_cas,ht_mod_cas,vt_mod_cas,dtrad_mod_cas,dq_mod_cas,hq_mod_cas,vq_mod_cas &952 &,dth_mod_cas,hth_mod_cas,vth_mod_cas,mxcalc)953 954 955 905 -frac*(q2_cas(k,it_cas2)-q2_cas(k,it_cas1)) 906 enddo 907 908 return 909 END SUBROUTINE interp_case_time_std 910 911 !********************************************************************************************** 912 !===================================================================== 913 SUBROUTINE interp2_case_vertical_std(play,plev,nlev_cas,plev_prof_cas & 914 ,t_prof_cas,th_prof_cas,thv_prof_cas,thl_prof_cas & 915 ,qv_prof_cas,ql_prof_cas,qi_prof_cas,u_prof_cas,v_prof_cas & 916 ,ug_prof_cas,vg_prof_cas & 917 ,temp_nudg_prof_cas,qv_nudg_prof_cas,u_nudg_prof_cas,v_nudg_prof_cas & 918 ,invtau_temp_nudg_prof_cas,invtau_qv_nudg_prof_cas,invtau_u_nudg_prof_cas,invtau_v_nudg_prof_cas & 919 ,vitw_prof_cas,omega_prof_cas,tke_prof_cas & 920 ,du_prof_cas,hu_prof_cas,vu_prof_cas,dv_prof_cas,hv_prof_cas,vv_prof_cas & 921 ,dt_prof_cas,ht_prof_cas,vt_prof_cas,dtrad_prof_cas,dq_prof_cas,hq_prof_cas,vq_prof_cas & 922 ,dth_prof_cas,hth_prof_cas,vth_prof_cas & 923 ! 924 ,t_mod_cas,theta_mod_cas,thv_mod_cas,thl_mod_cas & 925 ,qv_mod_cas,ql_mod_cas,qi_mod_cas,u_mod_cas,v_mod_cas & 926 ,ug_mod_cas,vg_mod_cas & 927 ,temp_nudg_mod_cas,qv_nudg_mod_cas,u_nudg_mod_cas,v_nudg_mod_cas & 928 ,invtau_temp_nudg_mod_cas,invtau_qv_nudg_mod_cas,invtau_u_nudg_mod_cas,invtau_v_nudg_mod_cas & 929 ,w_mod_cas,omega_mod_cas,tke_mod_cas & 930 ,du_mod_cas,hu_mod_cas,vu_mod_cas,dv_mod_cas,hv_mod_cas,vv_mod_cas & 931 ,dt_mod_cas,ht_mod_cas,vt_mod_cas,dtrad_mod_cas,dq_mod_cas,hq_mod_cas,vq_mod_cas & 932 ,dth_mod_cas,hth_mod_cas,vth_mod_cas,mxcalc) 933 934 implicit none 935 956 936 #include "YOMCST.h" 957 937 #include "dimensions.h" 958 938 959 !------------------------------------------------------------------------- 960 ! Vertical interpolation of generic case forcing data onto mod_casel levels 961 !------------------------------------------------------------------------- 962 963 integer nlevmax 964 parameter (nlevmax=41) 965 integer nlev_cas,mxcalc 966 ! real play(llm), plev_prof(nlevmax) 967 ! real t_prof(nlevmax),q_prof(nlevmax) 968 ! real u_prof(nlevmax),v_prof(nlevmax), w_prof(nlevmax) 969 ! real ht_prof(nlevmax),vt_prof(nlevmax) 970 ! real hq_prof(nlevmax),vq_prof(nlevmax) 971 972 real play(llm), plev(llm+1), plev_prof_cas(nlev_cas) 973 real t_prof_cas(nlev_cas),th_prof_cas(nlev_cas),thv_prof_cas(nlev_cas),thl_prof_cas(nlev_cas) 974 real qv_prof_cas(nlev_cas),ql_prof_cas(nlev_cas),qi_prof_cas(nlev_cas) 975 real u_prof_cas(nlev_cas),v_prof_cas(nlev_cas) 976 real ug_prof_cas(nlev_cas),vg_prof_cas(nlev_cas), vitw_prof_cas(nlev_cas),omega_prof_cas(nlev_cas),tke_prof_cas(nlev_cas) 977 real temp_nudg_prof_cas(nlev_cas),qv_nudg_prof_cas(nlev_cas) 978 real u_nudg_prof_cas(nlev_cas),v_nudg_prof_cas(nlev_cas) 979 real invtau_temp_nudg_prof_cas(nlev_cas),invtau_qv_nudg_prof_cas(nlev_cas) 980 real invtau_u_nudg_prof_cas(nlev_cas),invtau_v_nudg_prof_cas(nlev_cas) 981 982 real du_prof_cas(nlev_cas),hu_prof_cas(nlev_cas),vu_prof_cas(nlev_cas) 983 real dv_prof_cas(nlev_cas),hv_prof_cas(nlev_cas),vv_prof_cas(nlev_cas) 984 real dt_prof_cas(nlev_cas),ht_prof_cas(nlev_cas),vt_prof_cas(nlev_cas),dtrad_prof_cas(nlev_cas) 985 real dth_prof_cas(nlev_cas),hth_prof_cas(nlev_cas),vth_prof_cas(nlev_cas) 986 real dq_prof_cas(nlev_cas),hq_prof_cas(nlev_cas),vq_prof_cas(nlev_cas) 987 988 real t_mod_cas(llm),theta_mod_cas(llm),thv_mod_cas(llm),thl_mod_cas(llm) 989 real qv_mod_cas(llm),ql_mod_cas(llm),qi_mod_cas(llm) 990 real u_mod_cas(llm),v_mod_cas(llm) 991 real ug_mod_cas(llm),vg_mod_cas(llm), w_mod_cas(llm),omega_mod_cas(llm),tke_mod_cas(llm+1) 992 real temp_nudg_mod_cas(llm),qv_nudg_mod_cas(llm) 993 real u_nudg_mod_cas(llm),v_nudg_mod_cas(llm) 994 real invtau_temp_nudg_mod_cas(llm),invtau_qv_nudg_mod_cas(llm) 995 real invtau_u_nudg_mod_cas(llm),invtau_v_nudg_mod_cas(llm) 996 real du_mod_cas(llm),hu_mod_cas(llm),vu_mod_cas(llm) 997 real dv_mod_cas(llm),hv_mod_cas(llm),vv_mod_cas(llm) 998 real dt_mod_cas(llm),ht_mod_cas(llm),vt_mod_cas(llm),dtrad_mod_cas(llm) 999 real dth_mod_cas(llm),hth_mod_cas(llm),vth_mod_cas(llm) 1000 real dq_mod_cas(llm),hq_mod_cas(llm),vq_mod_cas(llm) 1001 1002 integer l,k,k1,k2 1003 real frac,frac1,frac2,fact 1004 1005 1006 1007 ! for variables defined at the middle of layers 1008 1009 do l = 1, llm 1010 1011 if (play(l).ge.plev_prof_cas(nlev_cas)) then 1012 1013 mxcalc=l 1014 ! print *,'debut interp2, mxcalc=',mxcalc 1015 k1=0 1016 k2=0 1017 1018 if (play(l).le.plev_prof_cas(1)) then 1019 1020 do k = 1, nlev_cas-1 1021 if (play(l).le.plev_prof_cas(k).and. play(l).gt.plev_prof_cas(k+1)) then 1022 k1=k 1023 k2=k+1 1024 endif 1025 enddo 1026 1027 if (k1.eq.0 .or. k2.eq.0) then 1028 write(*,*) 'PB! k1, k2 = ',k1,k2 1029 write(*,*) 'l,play(l) = ',l,play(l)/100 1030 do k = 1, nlev_cas-1 1031 write(*,*) 'k,plev_prof_cas(k) = ',k,plev_prof_cas(k)/100 1032 enddo 1033 endif 1034 1035 1036 1037 frac = (plev_prof_cas(k2)-play(l))/(plev_prof_cas(k2)-plev_prof_cas(k1)) 1038 1039 t_mod_cas(l)= t_prof_cas(k2) - frac*(t_prof_cas(k2)-t_prof_cas(k1)) 1040 theta_mod_cas(l)= th_prof_cas(k2) - frac*(th_prof_cas(k2)-th_prof_cas(k1)) 1041 if(theta_mod_cas(l).NE.0) t_mod_cas(l)= theta_mod_cas(l)*(play(l)/100000.)**(RD/RCPD) 1042 thv_mod_cas(l)= thv_prof_cas(k2) - frac*(thv_prof_cas(k2)-thv_prof_cas(k1)) 1043 thl_mod_cas(l)= thl_prof_cas(k2) - frac*(thl_prof_cas(k2)-thl_prof_cas(k1)) 1044 qv_mod_cas(l)= qv_prof_cas(k2) - frac*(qv_prof_cas(k2)-qv_prof_cas(k1)) 1045 ql_mod_cas(l)= ql_prof_cas(k2) - frac*(ql_prof_cas(k2)-ql_prof_cas(k1)) 1046 qi_mod_cas(l)= qi_prof_cas(k2) - frac*(qi_prof_cas(k2)-qi_prof_cas(k1)) 1047 u_mod_cas(l)= u_prof_cas(k2) - frac*(u_prof_cas(k2)-u_prof_cas(k1)) 1048 v_mod_cas(l)= v_prof_cas(k2) - frac*(v_prof_cas(k2)-v_prof_cas(k1)) 1049 ug_mod_cas(l)= ug_prof_cas(k2) - frac*(ug_prof_cas(k2)-ug_prof_cas(k1)) 1050 vg_mod_cas(l)= vg_prof_cas(k2) - frac*(vg_prof_cas(k2)-vg_prof_cas(k1)) 1051 temp_nudg_mod_cas(l)= temp_nudg_prof_cas(k2) - frac*(temp_nudg_prof_cas(k2)-temp_nudg_prof_cas(k1)) 1052 qv_nudg_mod_cas(l)= qv_nudg_prof_cas(k2) - frac*(qv_nudg_prof_cas(k2)-qv_nudg_prof_cas(k1)) 1053 u_nudg_mod_cas(l)= u_nudg_prof_cas(k2) - frac*(u_nudg_prof_cas(k2)-u_nudg_prof_cas(k1)) 1054 v_nudg_mod_cas(l)= v_nudg_prof_cas(k2) - frac*(v_nudg_prof_cas(k2)-v_nudg_prof_cas(k1)) 1055 1056 invtau_temp_nudg_mod_cas(l)= invtau_temp_nudg_prof_cas(k2) - frac*(invtau_temp_nudg_prof_cas(k2)-invtau_temp_nudg_prof_cas(k1)) 1057 invtau_qv_nudg_mod_cas(l)= invtau_qv_nudg_prof_cas(k2) - frac*(invtau_qv_nudg_prof_cas(k2)-invtau_qv_nudg_prof_cas(k1)) 1058 invtau_u_nudg_mod_cas(l)= invtau_u_nudg_prof_cas(k2) - frac*(invtau_u_nudg_prof_cas(k2)-invtau_u_nudg_prof_cas(k1)) 1059 invtau_v_nudg_mod_cas(l)= invtau_v_nudg_prof_cas(k2) - frac*(invtau_v_nudg_prof_cas(k2)-invtau_v_nudg_prof_cas(k1)) 1060 1061 w_mod_cas(l)= vitw_prof_cas(k2) - frac*(vitw_prof_cas(k2)-vitw_prof_cas(k1)) 1062 omega_mod_cas(l)= omega_prof_cas(k2) - frac*(omega_prof_cas(k2)-omega_prof_cas(k1)) 1063 du_mod_cas(l)= du_prof_cas(k2) - frac*(du_prof_cas(k2)-du_prof_cas(k1)) 1064 hu_mod_cas(l)= hu_prof_cas(k2) - frac*(hu_prof_cas(k2)-hu_prof_cas(k1)) 1065 vu_mod_cas(l)= vu_prof_cas(k2) - frac*(vu_prof_cas(k2)-vu_prof_cas(k1)) 1066 dv_mod_cas(l)= dv_prof_cas(k2) - frac*(dv_prof_cas(k2)-dv_prof_cas(k1)) 1067 hv_mod_cas(l)= hv_prof_cas(k2) - frac*(hv_prof_cas(k2)-hv_prof_cas(k1)) 1068 vv_mod_cas(l)= vv_prof_cas(k2) - frac*(vv_prof_cas(k2)-vv_prof_cas(k1)) 1069 dt_mod_cas(l)= dt_prof_cas(k2) - frac*(dt_prof_cas(k2)-dt_prof_cas(k1)) 1070 ht_mod_cas(l)= ht_prof_cas(k2) - frac*(ht_prof_cas(k2)-ht_prof_cas(k1)) 1071 vt_mod_cas(l)= vt_prof_cas(k2) - frac*(vt_prof_cas(k2)-vt_prof_cas(k1)) 1072 dth_mod_cas(l)= dth_prof_cas(k2) - frac*(dth_prof_cas(k2)-dth_prof_cas(k1)) 1073 hth_mod_cas(l)= hth_prof_cas(k2) - frac*(hth_prof_cas(k2)-hth_prof_cas(k1)) 1074 vth_mod_cas(l)= vth_prof_cas(k2) - frac*(vth_prof_cas(k2)-vth_prof_cas(k1)) 1075 dq_mod_cas(l)= dq_prof_cas(k2) - frac*(dq_prof_cas(k2)-dq_prof_cas(k1)) 1076 hq_mod_cas(l)= hq_prof_cas(k2) - frac*(hq_prof_cas(k2)-hq_prof_cas(k1)) 1077 vq_mod_cas(l)= vq_prof_cas(k2) - frac*(vq_prof_cas(k2)-vq_prof_cas(k1)) 1078 dtrad_mod_cas(l)= dtrad_prof_cas(k2) - frac*(dtrad_prof_cas(k2)-dtrad_prof_cas(k1)) 1079 1080 else !play>plev_prof_cas(1) 1081 1082 k1=1 1083 k2=2 1084 print *,'interp2_vert, k1,k2=',plev_prof_cas(k1),plev_prof_cas(k2) 1085 frac1 = (play(l)-plev_prof_cas(k2))/(plev_prof_cas(k1)-plev_prof_cas(k2)) 1086 frac2 = (play(l)-plev_prof_cas(k1))/(plev_prof_cas(k1)-plev_prof_cas(k2)) 1087 t_mod_cas(l)= frac1*t_prof_cas(k1) - frac2*t_prof_cas(k2) 1088 theta_mod_cas(l)= frac1*th_prof_cas(k1) - frac2*th_prof_cas(k2) 1089 if(theta_mod_cas(l).NE.0) t_mod_cas(l)= theta_mod_cas(l)*(play(l)/100000.)**(RD/RCPD) 1090 thv_mod_cas(l)= frac1*thv_prof_cas(k1) - frac2*thv_prof_cas(k2) 1091 thl_mod_cas(l)= frac1*thl_prof_cas(k1) - frac2*thl_prof_cas(k2) 1092 qv_mod_cas(l)= frac1*qv_prof_cas(k1) - frac2*qv_prof_cas(k2) 1093 ql_mod_cas(l)= frac1*ql_prof_cas(k1) - frac2*ql_prof_cas(k2) 1094 qi_mod_cas(l)= frac1*qi_prof_cas(k1) - frac2*qi_prof_cas(k2) 1095 u_mod_cas(l)= frac1*u_prof_cas(k1) - frac2*u_prof_cas(k2) 1096 v_mod_cas(l)= frac1*v_prof_cas(k1) - frac2*v_prof_cas(k2) 1097 ug_mod_cas(l)= frac1*ug_prof_cas(k1) - frac2*ug_prof_cas(k2) 1098 vg_mod_cas(l)= frac1*vg_prof_cas(k1) - frac2*vg_prof_cas(k2) 1099 temp_nudg_mod_cas(l)= frac1*temp_nudg_prof_cas(k1) - frac2*temp_nudg_prof_cas(k2) 1100 qv_nudg_mod_cas(l)= frac1*qv_nudg_prof_cas(k1) - frac2*qv_nudg_prof_cas(k2) 1101 u_nudg_mod_cas(l)= frac1*u_nudg_prof_cas(k1) - frac2*u_nudg_prof_cas(k2) 1102 v_nudg_mod_cas(l)= frac1*v_nudg_prof_cas(k1) - frac2*v_nudg_prof_cas(k2) 1103 1104 invtau_temp_nudg_mod_cas(l)= frac1*invtau_temp_nudg_prof_cas(k1) - frac2*invtau_temp_nudg_prof_cas(k2) 1105 invtau_qv_nudg_mod_cas(l)= frac1*invtau_qv_nudg_prof_cas(k1) - frac2*invtau_qv_nudg_prof_cas(k2) 1106 invtau_u_nudg_mod_cas(l)= frac1*invtau_u_nudg_prof_cas(k1) - frac2*invtau_u_nudg_prof_cas(k2) 1107 invtau_v_nudg_mod_cas(l)= frac1*invtau_v_nudg_prof_cas(k1) - frac2*invtau_v_nudg_prof_cas(k2) 1108 1109 w_mod_cas(l)= frac1*vitw_prof_cas(k1) - frac2*vitw_prof_cas(k2) 1110 omega_mod_cas(l)= frac1*omega_prof_cas(k1) - frac2*omega_prof_cas(k2) 1111 du_mod_cas(l)= frac1*du_prof_cas(k1) - frac2*du_prof_cas(k2) 1112 hu_mod_cas(l)= frac1*hu_prof_cas(k1) - frac2*hu_prof_cas(k2) 1113 vu_mod_cas(l)= frac1*vu_prof_cas(k1) - frac2*vu_prof_cas(k2) 1114 dv_mod_cas(l)= frac1*dv_prof_cas(k1) - frac2*dv_prof_cas(k2) 1115 hv_mod_cas(l)= frac1*hv_prof_cas(k1) - frac2*hv_prof_cas(k2) 1116 vv_mod_cas(l)= frac1*vv_prof_cas(k1) - frac2*vv_prof_cas(k2) 1117 dt_mod_cas(l)= frac1*dt_prof_cas(k1) - frac2*dt_prof_cas(k2) 1118 ht_mod_cas(l)= frac1*ht_prof_cas(k1) - frac2*ht_prof_cas(k2) 1119 vt_mod_cas(l)= frac1*vt_prof_cas(k1) - frac2*vt_prof_cas(k2) 1120 dth_mod_cas(l)= frac1*dth_prof_cas(k1) - frac2*dth_prof_cas(k2) 1121 hth_mod_cas(l)= frac1*hth_prof_cas(k1) - frac2*hth_prof_cas(k2) 1122 vth_mod_cas(l)= frac1*vth_prof_cas(k1) - frac2*vth_prof_cas(k2) 1123 dq_mod_cas(l)= frac1*dq_prof_cas(k1) - frac2*dq_prof_cas(k2) 1124 hq_mod_cas(l)= frac1*hq_prof_cas(k1) - frac2*hq_prof_cas(k2) 1125 vq_mod_cas(l)= frac1*vq_prof_cas(k1) - frac2*vq_prof_cas(k2) 1126 dtrad_mod_cas(l)= frac1*dtrad_prof_cas(k1) - frac2*dtrad_prof_cas(k2) 1127 1128 endif ! play.le.plev_prof_cas(1) 1129 1130 else ! above max altitude of forcing file 1131 1132 !jyg 1133 fact=20.*(plev_prof_cas(nlev_cas)-play(l))/plev_prof_cas(nlev_cas) !jyg 1134 fact = max(fact,0.) !jyg 1135 fact = exp(-fact) !jyg 1136 t_mod_cas(l)= t_prof_cas(nlev_cas) !jyg 1137 theta_mod_cas(l)= th_prof_cas(nlev_cas) !jyg 1138 thv_mod_cas(l)= thv_prof_cas(nlev_cas) !jyg 1139 thl_mod_cas(l)= thl_prof_cas(nlev_cas) !jyg 1140 qv_mod_cas(l)= qv_prof_cas(nlev_cas)*fact !jyg 1141 ql_mod_cas(l)= ql_prof_cas(nlev_cas)*fact !jyg 1142 qi_mod_cas(l)= qi_prof_cas(nlev_cas)*fact !jyg 1143 u_mod_cas(l)= u_prof_cas(nlev_cas)*fact !jyg 1144 v_mod_cas(l)= v_prof_cas(nlev_cas)*fact !jyg 1145 ug_mod_cas(l)= ug_prof_cas(nlev_cas) !jyg 1146 vg_mod_cas(l)= vg_prof_cas(nlev_cas) !jyg 1147 temp_nudg_mod_cas(l)= temp_nudg_prof_cas(nlev_cas) !jyg 1148 qv_nudg_mod_cas(l)= qv_nudg_prof_cas(nlev_cas) !jyg 1149 u_nudg_mod_cas(l)= u_nudg_prof_cas(nlev_cas) !jyg 1150 v_nudg_mod_cas(l)= v_nudg_prof_cas(nlev_cas) !jyg 1151 1152 invtau_temp_nudg_mod_cas(l)= invtau_temp_nudg_prof_cas(nlev_cas) !jyg 1153 invtau_qv_nudg_mod_cas(l)= invtau_qv_nudg_prof_cas(nlev_cas) !jyg 1154 invtau_u_nudg_mod_cas(l)= invtau_u_nudg_prof_cas(nlev_cas) !jyg 1155 invtau_v_nudg_mod_cas(l)= invtau_v_nudg_prof_cas(nlev_cas) !jyg 1156 1157 thv_mod_cas(l)= thv_prof_cas(nlev_cas) !jyg 1158 w_mod_cas(l)= 0.0 !jyg 1159 omega_mod_cas(l)= 0.0 !jyg 1160 du_mod_cas(l)= du_prof_cas(nlev_cas)*fact 1161 hu_mod_cas(l)= hu_prof_cas(nlev_cas)*fact !jyg 1162 vu_mod_cas(l)= vu_prof_cas(nlev_cas)*fact !jyg 1163 dv_mod_cas(l)= dv_prof_cas(nlev_cas)*fact 1164 hv_mod_cas(l)= hv_prof_cas(nlev_cas)*fact !jyg 1165 vv_mod_cas(l)= vv_prof_cas(nlev_cas)*fact !jyg 1166 dt_mod_cas(l)= dt_prof_cas(nlev_cas) 1167 ht_mod_cas(l)= ht_prof_cas(nlev_cas) !jyg 1168 vt_mod_cas(l)= vt_prof_cas(nlev_cas) !jyg 1169 dth_mod_cas(l)= dth_prof_cas(nlev_cas) 1170 hth_mod_cas(l)= hth_prof_cas(nlev_cas) !jyg 1171 vth_mod_cas(l)= vth_prof_cas(nlev_cas) !jyg 1172 dq_mod_cas(l)= dq_prof_cas(nlev_cas)*fact 1173 hq_mod_cas(l)= hq_prof_cas(nlev_cas)*fact !jyg 1174 vq_mod_cas(l)= vq_prof_cas(nlev_cas)*fact !jyg 1175 dtrad_mod_cas(l)= dtrad_prof_cas(nlev_cas)*fact !jyg 1176 1177 endif ! play 1178 1179 enddo ! l 1180 1181 ! for variables defined at layer interfaces (EV): 1182 1183 1184 do l = 1, llm+1 1185 1186 if (plev(l).ge.plev_prof_cas(nlev_cas)) then 1187 1188 mxcalc=l 1189 k1=0 1190 k2=0 1191 1192 if (plev(l).le.plev_prof_cas(1)) then 1193 1194 do k = 1, nlev_cas-1 1195 if (plev(l).le.plev_prof_cas(k).and. plev(l).gt.plev_prof_cas(k+1)) then 1196 k1=k 1197 k2=k+1 1198 endif 1199 enddo 1200 1201 if (k1.eq.0 .or. k2.eq.0) then 1202 write(*,*) 'PB! k1, k2 = ',k1,k2 1203 write(*,*) 'l,plev(l) = ',l,plev(l)/100 1204 do k = 1, nlev_cas-1 1205 write(*,*) 'k,plev_prof_cas(k) = ',k,plev_prof_cas(k)/100 1206 enddo 1207 endif 1208 1209 frac = (plev_prof_cas(k2)-plev(l))/(plev_prof_cas(k2)-plev_prof_cas(k1)) 1210 tke_mod_cas(l)= tke_prof_cas(k2) - frac*(tke_prof_cas(k2)-tke_prof_cas(k1)) 1211 else !play>plev_prof_cas(1) 1212 k1=1 1213 k2=2 1214 tke_mod_cas(l)= frac1*tke_prof_cas(k1) - frac2*tke_prof_cas(k2) 1215 1216 endif ! plev.le.plev_prof_cas(1) 1217 1218 else ! above max altitude of forcing file 1219 1220 tke_mod_cas(l)=0.0 1221 1222 endif ! plev 1223 1224 enddo ! l 1225 1226 1227 1228 return 1229 end SUBROUTINE interp2_case_vertical_std 1230 !***************************************************************************** 939 !------------------------------------------------------------------------- 940 ! Vertical interpolation of generic case forcing data onto mod_casel levels 941 !------------------------------------------------------------------------- 942 943 integer nlevmax 944 parameter (nlevmax=41) 945 integer nlev_cas,mxcalc 946 ! real play(llm), plev_prof(nlevmax) 947 ! real t_prof(nlevmax),q_prof(nlevmax) 948 ! real u_prof(nlevmax),v_prof(nlevmax), w_prof(nlevmax) 949 ! real ht_prof(nlevmax),vt_prof(nlevmax) 950 ! real hq_prof(nlevmax),vq_prof(nlevmax) 951 952 real play(llm), plev(llm+1), plev_prof_cas(nlev_cas) 953 real t_prof_cas(nlev_cas),th_prof_cas(nlev_cas),thv_prof_cas(nlev_cas),thl_prof_cas(nlev_cas) 954 real qv_prof_cas(nlev_cas),ql_prof_cas(nlev_cas),qi_prof_cas(nlev_cas) 955 real u_prof_cas(nlev_cas),v_prof_cas(nlev_cas) 956 real ug_prof_cas(nlev_cas),vg_prof_cas(nlev_cas), vitw_prof_cas(nlev_cas),omega_prof_cas(nlev_cas),tke_prof_cas(nlev_cas) 957 real temp_nudg_prof_cas(nlev_cas),qv_nudg_prof_cas(nlev_cas) 958 real u_nudg_prof_cas(nlev_cas),v_nudg_prof_cas(nlev_cas) 959 real invtau_temp_nudg_prof_cas(nlev_cas),invtau_qv_nudg_prof_cas(nlev_cas) 960 real invtau_u_nudg_prof_cas(nlev_cas),invtau_v_nudg_prof_cas(nlev_cas) 961 962 real du_prof_cas(nlev_cas),hu_prof_cas(nlev_cas),vu_prof_cas(nlev_cas) 963 real dv_prof_cas(nlev_cas),hv_prof_cas(nlev_cas),vv_prof_cas(nlev_cas) 964 real dt_prof_cas(nlev_cas),ht_prof_cas(nlev_cas),vt_prof_cas(nlev_cas),dtrad_prof_cas(nlev_cas) 965 real dth_prof_cas(nlev_cas),hth_prof_cas(nlev_cas),vth_prof_cas(nlev_cas) 966 real dq_prof_cas(nlev_cas),hq_prof_cas(nlev_cas),vq_prof_cas(nlev_cas) 967 968 real t_mod_cas(llm),theta_mod_cas(llm),thv_mod_cas(llm),thl_mod_cas(llm) 969 real qv_mod_cas(llm),ql_mod_cas(llm),qi_mod_cas(llm) 970 real u_mod_cas(llm),v_mod_cas(llm) 971 real ug_mod_cas(llm),vg_mod_cas(llm), w_mod_cas(llm),omega_mod_cas(llm),tke_mod_cas(llm+1) 972 real temp_nudg_mod_cas(llm),qv_nudg_mod_cas(llm) 973 real u_nudg_mod_cas(llm),v_nudg_mod_cas(llm) 974 real invtau_temp_nudg_mod_cas(llm),invtau_qv_nudg_mod_cas(llm) 975 real invtau_u_nudg_mod_cas(llm),invtau_v_nudg_mod_cas(llm) 976 real du_mod_cas(llm),hu_mod_cas(llm),vu_mod_cas(llm) 977 real dv_mod_cas(llm),hv_mod_cas(llm),vv_mod_cas(llm) 978 real dt_mod_cas(llm),ht_mod_cas(llm),vt_mod_cas(llm),dtrad_mod_cas(llm) 979 real dth_mod_cas(llm),hth_mod_cas(llm),vth_mod_cas(llm) 980 real dq_mod_cas(llm),hq_mod_cas(llm),vq_mod_cas(llm) 981 982 integer l,k,k1,k2 983 real frac,frac1,frac2,fact 984 985 986 987 ! for variables defined at the middle of layers 988 989 do l = 1, llm 990 991 if (play(l).ge.plev_prof_cas(nlev_cas)) then 992 993 mxcalc=l 994 ! print *,'debut interp2, mxcalc=',mxcalc 995 k1=0 996 k2=0 997 998 if (play(l).le.plev_prof_cas(1)) then 999 1000 do k = 1, nlev_cas-1 1001 if (play(l).le.plev_prof_cas(k).and. play(l).gt.plev_prof_cas(k+1)) then 1002 k1=k 1003 k2=k+1 1004 endif 1005 enddo 1006 1007 if (k1.eq.0 .or. k2.eq.0) then 1008 write(*,*) 'PB! k1, k2 = ',k1,k2 1009 write(*,*) 'l,play(l) = ',l,play(l)/100 1010 do k = 1, nlev_cas-1 1011 write(*,*) 'k,plev_prof_cas(k) = ',k,plev_prof_cas(k)/100 1012 enddo 1013 endif 1014 1015 1016 1017 frac = (plev_prof_cas(k2)-play(l))/(plev_prof_cas(k2)-plev_prof_cas(k1)) 1018 1019 t_mod_cas(l)= t_prof_cas(k2) - frac*(t_prof_cas(k2)-t_prof_cas(k1)) 1020 theta_mod_cas(l)= th_prof_cas(k2) - frac*(th_prof_cas(k2)-th_prof_cas(k1)) 1021 if(theta_mod_cas(l).NE.0) t_mod_cas(l)= theta_mod_cas(l)*(play(l)/100000.)**(RD/RCPD) 1022 thv_mod_cas(l)= thv_prof_cas(k2) - frac*(thv_prof_cas(k2)-thv_prof_cas(k1)) 1023 thl_mod_cas(l)= thl_prof_cas(k2) - frac*(thl_prof_cas(k2)-thl_prof_cas(k1)) 1024 qv_mod_cas(l)= qv_prof_cas(k2) - frac*(qv_prof_cas(k2)-qv_prof_cas(k1)) 1025 ql_mod_cas(l)= ql_prof_cas(k2) - frac*(ql_prof_cas(k2)-ql_prof_cas(k1)) 1026 qi_mod_cas(l)= qi_prof_cas(k2) - frac*(qi_prof_cas(k2)-qi_prof_cas(k1)) 1027 u_mod_cas(l)= u_prof_cas(k2) - frac*(u_prof_cas(k2)-u_prof_cas(k1)) 1028 v_mod_cas(l)= v_prof_cas(k2) - frac*(v_prof_cas(k2)-v_prof_cas(k1)) 1029 ug_mod_cas(l)= ug_prof_cas(k2) - frac*(ug_prof_cas(k2)-ug_prof_cas(k1)) 1030 vg_mod_cas(l)= vg_prof_cas(k2) - frac*(vg_prof_cas(k2)-vg_prof_cas(k1)) 1031 temp_nudg_mod_cas(l)= temp_nudg_prof_cas(k2) - frac*(temp_nudg_prof_cas(k2)-temp_nudg_prof_cas(k1)) 1032 qv_nudg_mod_cas(l)= qv_nudg_prof_cas(k2) - frac*(qv_nudg_prof_cas(k2)-qv_nudg_prof_cas(k1)) 1033 u_nudg_mod_cas(l)= u_nudg_prof_cas(k2) - frac*(u_nudg_prof_cas(k2)-u_nudg_prof_cas(k1)) 1034 v_nudg_mod_cas(l)= v_nudg_prof_cas(k2) - frac*(v_nudg_prof_cas(k2)-v_nudg_prof_cas(k1)) 1035 1036 invtau_temp_nudg_mod_cas(l)= invtau_temp_nudg_prof_cas(k2) & 1037 - frac*(invtau_temp_nudg_prof_cas(k2)-invtau_temp_nudg_prof_cas(k1)) 1038 invtau_qv_nudg_mod_cas(l)= invtau_qv_nudg_prof_cas(k2) - frac*(invtau_qv_nudg_prof_cas(k2)-invtau_qv_nudg_prof_cas(k1)) 1039 invtau_u_nudg_mod_cas(l)= invtau_u_nudg_prof_cas(k2) - frac*(invtau_u_nudg_prof_cas(k2)-invtau_u_nudg_prof_cas(k1)) 1040 invtau_v_nudg_mod_cas(l)= invtau_v_nudg_prof_cas(k2) - frac*(invtau_v_nudg_prof_cas(k2)-invtau_v_nudg_prof_cas(k1)) 1041 1042 w_mod_cas(l)= vitw_prof_cas(k2) - frac*(vitw_prof_cas(k2)-vitw_prof_cas(k1)) 1043 omega_mod_cas(l)= omega_prof_cas(k2) - frac*(omega_prof_cas(k2)-omega_prof_cas(k1)) 1044 du_mod_cas(l)= du_prof_cas(k2) - frac*(du_prof_cas(k2)-du_prof_cas(k1)) 1045 hu_mod_cas(l)= hu_prof_cas(k2) - frac*(hu_prof_cas(k2)-hu_prof_cas(k1)) 1046 vu_mod_cas(l)= vu_prof_cas(k2) - frac*(vu_prof_cas(k2)-vu_prof_cas(k1)) 1047 dv_mod_cas(l)= dv_prof_cas(k2) - frac*(dv_prof_cas(k2)-dv_prof_cas(k1)) 1048 hv_mod_cas(l)= hv_prof_cas(k2) - frac*(hv_prof_cas(k2)-hv_prof_cas(k1)) 1049 vv_mod_cas(l)= vv_prof_cas(k2) - frac*(vv_prof_cas(k2)-vv_prof_cas(k1)) 1050 dt_mod_cas(l)= dt_prof_cas(k2) - frac*(dt_prof_cas(k2)-dt_prof_cas(k1)) 1051 ht_mod_cas(l)= ht_prof_cas(k2) - frac*(ht_prof_cas(k2)-ht_prof_cas(k1)) 1052 vt_mod_cas(l)= vt_prof_cas(k2) - frac*(vt_prof_cas(k2)-vt_prof_cas(k1)) 1053 dth_mod_cas(l)= dth_prof_cas(k2) - frac*(dth_prof_cas(k2)-dth_prof_cas(k1)) 1054 hth_mod_cas(l)= hth_prof_cas(k2) - frac*(hth_prof_cas(k2)-hth_prof_cas(k1)) 1055 vth_mod_cas(l)= vth_prof_cas(k2) - frac*(vth_prof_cas(k2)-vth_prof_cas(k1)) 1056 dq_mod_cas(l)= dq_prof_cas(k2) - frac*(dq_prof_cas(k2)-dq_prof_cas(k1)) 1057 hq_mod_cas(l)= hq_prof_cas(k2) - frac*(hq_prof_cas(k2)-hq_prof_cas(k1)) 1058 vq_mod_cas(l)= vq_prof_cas(k2) - frac*(vq_prof_cas(k2)-vq_prof_cas(k1)) 1059 dtrad_mod_cas(l)= dtrad_prof_cas(k2) - frac*(dtrad_prof_cas(k2)-dtrad_prof_cas(k1)) 1060 1061 else !play>plev_prof_cas(1) 1062 1063 k1=1 1064 k2=2 1065 print *,'interp2_vert, k1,k2=',plev_prof_cas(k1),plev_prof_cas(k2) 1066 frac1 = (play(l)-plev_prof_cas(k2))/(plev_prof_cas(k1)-plev_prof_cas(k2)) 1067 frac2 = (play(l)-plev_prof_cas(k1))/(plev_prof_cas(k1)-plev_prof_cas(k2)) 1068 t_mod_cas(l)= frac1*t_prof_cas(k1) - frac2*t_prof_cas(k2) 1069 theta_mod_cas(l)= frac1*th_prof_cas(k1) - frac2*th_prof_cas(k2) 1070 if(theta_mod_cas(l).NE.0) t_mod_cas(l)= theta_mod_cas(l)*(play(l)/100000.)**(RD/RCPD) 1071 thv_mod_cas(l)= frac1*thv_prof_cas(k1) - frac2*thv_prof_cas(k2) 1072 thl_mod_cas(l)= frac1*thl_prof_cas(k1) - frac2*thl_prof_cas(k2) 1073 qv_mod_cas(l)= frac1*qv_prof_cas(k1) - frac2*qv_prof_cas(k2) 1074 ql_mod_cas(l)= frac1*ql_prof_cas(k1) - frac2*ql_prof_cas(k2) 1075 qi_mod_cas(l)= frac1*qi_prof_cas(k1) - frac2*qi_prof_cas(k2) 1076 u_mod_cas(l)= frac1*u_prof_cas(k1) - frac2*u_prof_cas(k2) 1077 v_mod_cas(l)= frac1*v_prof_cas(k1) - frac2*v_prof_cas(k2) 1078 ug_mod_cas(l)= frac1*ug_prof_cas(k1) - frac2*ug_prof_cas(k2) 1079 vg_mod_cas(l)= frac1*vg_prof_cas(k1) - frac2*vg_prof_cas(k2) 1080 temp_nudg_mod_cas(l)= frac1*temp_nudg_prof_cas(k1) - frac2*temp_nudg_prof_cas(k2) 1081 qv_nudg_mod_cas(l)= frac1*qv_nudg_prof_cas(k1) - frac2*qv_nudg_prof_cas(k2) 1082 u_nudg_mod_cas(l)= frac1*u_nudg_prof_cas(k1) - frac2*u_nudg_prof_cas(k2) 1083 v_nudg_mod_cas(l)= frac1*v_nudg_prof_cas(k1) - frac2*v_nudg_prof_cas(k2) 1084 1085 invtau_temp_nudg_mod_cas(l)= frac1*invtau_temp_nudg_prof_cas(k1) - frac2*invtau_temp_nudg_prof_cas(k2) 1086 invtau_qv_nudg_mod_cas(l)= frac1*invtau_qv_nudg_prof_cas(k1) - frac2*invtau_qv_nudg_prof_cas(k2) 1087 invtau_u_nudg_mod_cas(l)= frac1*invtau_u_nudg_prof_cas(k1) - frac2*invtau_u_nudg_prof_cas(k2) 1088 invtau_v_nudg_mod_cas(l)= frac1*invtau_v_nudg_prof_cas(k1) - frac2*invtau_v_nudg_prof_cas(k2) 1089 1090 w_mod_cas(l)= frac1*vitw_prof_cas(k1) - frac2*vitw_prof_cas(k2) 1091 omega_mod_cas(l)= frac1*omega_prof_cas(k1) - frac2*omega_prof_cas(k2) 1092 du_mod_cas(l)= frac1*du_prof_cas(k1) - frac2*du_prof_cas(k2) 1093 hu_mod_cas(l)= frac1*hu_prof_cas(k1) - frac2*hu_prof_cas(k2) 1094 vu_mod_cas(l)= frac1*vu_prof_cas(k1) - frac2*vu_prof_cas(k2) 1095 dv_mod_cas(l)= frac1*dv_prof_cas(k1) - frac2*dv_prof_cas(k2) 1096 hv_mod_cas(l)= frac1*hv_prof_cas(k1) - frac2*hv_prof_cas(k2) 1097 vv_mod_cas(l)= frac1*vv_prof_cas(k1) - frac2*vv_prof_cas(k2) 1098 dt_mod_cas(l)= frac1*dt_prof_cas(k1) - frac2*dt_prof_cas(k2) 1099 ht_mod_cas(l)= frac1*ht_prof_cas(k1) - frac2*ht_prof_cas(k2) 1100 vt_mod_cas(l)= frac1*vt_prof_cas(k1) - frac2*vt_prof_cas(k2) 1101 dth_mod_cas(l)= frac1*dth_prof_cas(k1) - frac2*dth_prof_cas(k2) 1102 hth_mod_cas(l)= frac1*hth_prof_cas(k1) - frac2*hth_prof_cas(k2) 1103 vth_mod_cas(l)= frac1*vth_prof_cas(k1) - frac2*vth_prof_cas(k2) 1104 dq_mod_cas(l)= frac1*dq_prof_cas(k1) - frac2*dq_prof_cas(k2) 1105 hq_mod_cas(l)= frac1*hq_prof_cas(k1) - frac2*hq_prof_cas(k2) 1106 vq_mod_cas(l)= frac1*vq_prof_cas(k1) - frac2*vq_prof_cas(k2) 1107 dtrad_mod_cas(l)= frac1*dtrad_prof_cas(k1) - frac2*dtrad_prof_cas(k2) 1108 1109 endif ! play.le.plev_prof_cas(1) 1110 1111 else ! above max altitude of forcing file 1112 1113 !jyg 1114 fact=20.*(plev_prof_cas(nlev_cas)-play(l))/plev_prof_cas(nlev_cas) !jyg 1115 fact = max(fact,0.) !jyg 1116 fact = exp(-fact) !jyg 1117 t_mod_cas(l)= t_prof_cas(nlev_cas) !jyg 1118 theta_mod_cas(l)= th_prof_cas(nlev_cas) !jyg 1119 thv_mod_cas(l)= thv_prof_cas(nlev_cas) !jyg 1120 thl_mod_cas(l)= thl_prof_cas(nlev_cas) !jyg 1121 qv_mod_cas(l)= qv_prof_cas(nlev_cas)*fact !jyg 1122 ql_mod_cas(l)= ql_prof_cas(nlev_cas)*fact !jyg 1123 qi_mod_cas(l)= qi_prof_cas(nlev_cas)*fact !jyg 1124 u_mod_cas(l)= u_prof_cas(nlev_cas)*fact !jyg 1125 v_mod_cas(l)= v_prof_cas(nlev_cas)*fact !jyg 1126 ug_mod_cas(l)= ug_prof_cas(nlev_cas) !jyg 1127 vg_mod_cas(l)= vg_prof_cas(nlev_cas) !jyg 1128 temp_nudg_mod_cas(l)= temp_nudg_prof_cas(nlev_cas) !jyg 1129 qv_nudg_mod_cas(l)= qv_nudg_prof_cas(nlev_cas) !jyg 1130 u_nudg_mod_cas(l)= u_nudg_prof_cas(nlev_cas) !jyg 1131 v_nudg_mod_cas(l)= v_nudg_prof_cas(nlev_cas) !jyg 1132 1133 invtau_temp_nudg_mod_cas(l)= invtau_temp_nudg_prof_cas(nlev_cas) !jyg 1134 invtau_qv_nudg_mod_cas(l)= invtau_qv_nudg_prof_cas(nlev_cas) !jyg 1135 invtau_u_nudg_mod_cas(l)= invtau_u_nudg_prof_cas(nlev_cas) !jyg 1136 invtau_v_nudg_mod_cas(l)= invtau_v_nudg_prof_cas(nlev_cas) !jyg 1137 1138 thv_mod_cas(l)= thv_prof_cas(nlev_cas) !jyg 1139 w_mod_cas(l)= 0.0 !jyg 1140 omega_mod_cas(l)= 0.0 !jyg 1141 du_mod_cas(l)= du_prof_cas(nlev_cas)*fact 1142 hu_mod_cas(l)= hu_prof_cas(nlev_cas)*fact !jyg 1143 vu_mod_cas(l)= vu_prof_cas(nlev_cas)*fact !jyg 1144 dv_mod_cas(l)= dv_prof_cas(nlev_cas)*fact 1145 hv_mod_cas(l)= hv_prof_cas(nlev_cas)*fact !jyg 1146 vv_mod_cas(l)= vv_prof_cas(nlev_cas)*fact !jyg 1147 dt_mod_cas(l)= dt_prof_cas(nlev_cas) 1148 ht_mod_cas(l)= ht_prof_cas(nlev_cas) !jyg 1149 vt_mod_cas(l)= vt_prof_cas(nlev_cas) !jyg 1150 dth_mod_cas(l)= dth_prof_cas(nlev_cas) 1151 hth_mod_cas(l)= hth_prof_cas(nlev_cas) !jyg 1152 vth_mod_cas(l)= vth_prof_cas(nlev_cas) !jyg 1153 dq_mod_cas(l)= dq_prof_cas(nlev_cas)*fact 1154 hq_mod_cas(l)= hq_prof_cas(nlev_cas)*fact !jyg 1155 vq_mod_cas(l)= vq_prof_cas(nlev_cas)*fact !jyg 1156 dtrad_mod_cas(l)= dtrad_prof_cas(nlev_cas)*fact !jyg 1157 1158 endif ! play 1159 1160 enddo ! l 1161 1162 ! for variables defined at layer interfaces (EV): 1163 1164 1165 do l = 1, llm+1 1166 1167 if (plev(l).ge.plev_prof_cas(nlev_cas)) then 1168 1169 mxcalc=l 1170 k1=0 1171 k2=0 1172 1173 if (plev(l).le.plev_prof_cas(1)) then 1174 1175 do k = 1, nlev_cas-1 1176 if (plev(l).le.plev_prof_cas(k).and. plev(l).gt.plev_prof_cas(k+1)) then 1177 k1=k 1178 k2=k+1 1179 endif 1180 enddo 1181 1182 if (k1.eq.0 .or. k2.eq.0) then 1183 write(*,*) 'PB! k1, k2 = ',k1,k2 1184 write(*,*) 'l,plev(l) = ',l,plev(l)/100 1185 do k = 1, nlev_cas-1 1186 write(*,*) 'k,plev_prof_cas(k) = ',k,plev_prof_cas(k)/100 1187 enddo 1188 endif 1189 1190 frac = (plev_prof_cas(k2)-plev(l))/(plev_prof_cas(k2)-plev_prof_cas(k1)) 1191 tke_mod_cas(l)= tke_prof_cas(k2) - frac*(tke_prof_cas(k2)-tke_prof_cas(k1)) 1192 else !play>plev_prof_cas(1) 1193 k1=1 1194 k2=2 1195 frac1 = (play(l)-plev_prof_cas(k2))/(plev_prof_cas(k1)-plev_prof_cas(k2)) 1196 frac2 = (play(l)-plev_prof_cas(k1))/(plev_prof_cas(k1)-plev_prof_cas(k2)) 1197 tke_mod_cas(l)= frac1*tke_prof_cas(k1) - frac2*tke_prof_cas(k2) 1198 1199 endif ! plev.le.plev_prof_cas(1) 1200 1201 else ! above max altitude of forcing file 1202 1203 tke_mod_cas(l)=0.0 1204 1205 endif ! plev 1206 1207 enddo ! l 1208 1209 1210 1211 return 1212 end SUBROUTINE interp2_case_vertical_std 1213 !***************************************************************************** 1231 1214 1232 1215
Note: See TracChangeset
for help on using the changeset viewer.