Changeset 428 for codes/icosagcm/trunk/src/observable.f90
- Timestamp:
- 06/14/16 21:54:26 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/observable.f90
r418 r428 158 158 END SUBROUTINE write_output_fields_basic 159 159 160 SUBROUTINE write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, f_q, & 161 f_buf_i, f_buf_v, f_buf_i3, f_buf1_i, f_buf2_i, f_buf_s, f_buf_p) 162 USE vorticity_mod 163 USE theta2theta_rhodz_mod 164 USE pression_mod 165 USE omega_mod 166 USE write_field_mod 167 USE vertical_interp_mod 168 USE wind_mod 169 TYPE(t_field),POINTER :: f_ps(:), f_phis(:), f_u(:), f_theta_rhodz(:), f_q(:), f_dps(:), & 170 f_buf_i(:), f_buf_v(:), f_buf_i3(:), f_buf1_i(:), f_buf2_i(:), f_buf_s(:), f_buf_p(:) 171 172 REAL(rstd) :: out_pression_level 173 CHARACTER(LEN=255) :: str_pression 174 CHARACTER(LEN=255) :: physics_type 175 176 out_pression_level=0. 177 CALL getin("out_pression_level",out_pression_level) 178 WRITE(str_pression,*) INT(out_pression_level/100) 179 str_pression=ADJUSTL(str_pression) 180 181 CALL writefield("ps",f_ps) 182 CALL writefield("dps",f_dps) 183 CALL writefield("phis",f_phis) 184 CALL vorticity(f_u,f_buf_v) 185 CALL writefield("vort",f_buf_v) 186 187 CALL w_omega(f_ps, f_u, f_buf_i) 188 CALL writefield('omega', f_buf_i) 189 IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 190 CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level) 191 CALL writefield("omega"//TRIM(str_pression),f_buf_s) 192 ENDIF 193 194 ! Temperature 195 ! CALL theta_rhodz2temperature(f_ps,f_theta_rhodz,f_buf_i) ; ! FIXME 196 197 CALL getin('physics',physics_type) 198 IF (TRIM(physics_type)=='dcmip') THEN 199 CALL Tv2T(f_buf_i,f_q,f_buf1_i) 200 CALL writefield("T",f_buf1_i) 201 IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 202 CALL vertical_interp(f_ps,f_buf1_i,f_buf_s,out_pression_level) 203 CALL writefield("T"//TRIM(str_pression),f_buf_s) 204 ENDIF 205 ELSE 206 CALL writefield("T",f_buf_i) 207 IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 208 CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level) 209 CALL writefield("T"//TRIM(str_pression),f_buf_s) 210 ENDIF 211 ENDIF 212 213 ! velocity components 214 CALL un2ulonlat(f_u, f_buf1_i, f_buf2_i) 215 CALL writefield("ulon",f_buf1_i) 216 CALL writefield("ulat",f_buf2_i) 217 218 IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 219 CALL vertical_interp(f_ps,f_buf1_i,f_buf_s,out_pression_level) 220 CALL writefield("ulon"//TRIM(str_pression),f_buf_s) 221 CALL vertical_interp(f_ps,f_buf2_i,f_buf_s,out_pression_level) 222 CALL writefield("ulat"//TRIM(str_pression),f_buf_s) 223 ENDIF 224 225 ! geopotential ! FIXME 226 CALL thetarhodz2geopot(f_ps,f_phis,f_theta_rhodz, f_buf_s,f_buf_p,f_buf1_i,f_buf2_i,f_buf_i) 227 CALL writefield("p",f_buf_p) 228 ! CALL writefield("phi",f_geopot) ! geopotential 229 CALL writefield("theta",f_buf1_i) ! potential temperature 230 CALL writefield("pk",f_buf2_i) ! Exner pressure 231 232 END SUBROUTINE write_output_fields 233 234 !------------------- Conversion from prognostic to observable variables ------------------ 160 !------------------- Conversion from prognostic to observable variables ------------------ 235 161 236 162 SUBROUTINE progonostic_vel_to_horiz(f_geopot, f_ps, f_rhodz, f_u, f_W, f_uh, f_uz) … … 308 234 END SUBROUTINE compute_prognostic_vel_to_horiz 309 235 310 SUBROUTINE thetarhodz2geopot(f_ps,f_phis,f_theta_rhodz, f_pks,f_p,f_theta,f_pk,f_phi)311 USE field_mod312 USE pression_mod313 USE exner_mod314 USE geopotential_mod315 USE theta2theta_rhodz_mod316 TYPE(t_field), POINTER :: f_ps(:), f_phis(:), f_theta_rhodz(:), & ! IN317 f_pks(:), f_p(:), f_theta(:), f_pk(:), f_phi(:) ! OUT318 REAL(rstd),POINTER :: pk(:,:), p(:,:), theta(:,:), theta_rhodz(:,:,:), &319 phi(:,:), phis(:), ps(:), pks(:)320 INTEGER :: ind321 322 DO ind=1,ndomain323 IF (.NOT. assigned_domain(ind)) CYCLE324 CALL swap_dimensions(ind)325 CALL swap_geometry(ind)326 ps = f_ps(ind)327 p = f_p(ind)328 !$OMP BARRIER329 CALL compute_pression(ps,p,0)330 pk = f_pk(ind)331 pks = f_pks(ind)332 !$OMP BARRIER333 CALL compute_exner(ps,p,pks,pk,0)334 !$OMP BARRIER335 theta_rhodz = f_theta_rhodz(ind)336 theta = f_theta(ind)337 CALL compute_theta_rhodz2theta(ps, theta_rhodz(:,:,1),theta,0)338 phis = f_phis(ind)339 phi = f_phi(ind)340 CALL compute_geopotential(phis,pks,pk,theta,phi,0)341 END DO342 343 END SUBROUTINE thetarhodz2geopot344 345 236 SUBROUTINE Tv2T(f_Tv, f_q, f_T) 346 237 TYPE(t_field), POINTER :: f_TV(:)
Note: See TracChangeset
for help on using the changeset viewer.