Changeset 110 for codes/icosagcm/trunk/src/caldyn_gcm.f90
- Timestamp:
- 08/07/12 19:10:05 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/caldyn_gcm.f90
r104 r110 74 74 END SUBROUTINE check_mass_conservation 75 75 76 SUBROUTINE caldyn(it,f_phis, f_ps, f_theta_rhodz, f_u, f_ dps, f_dtheta_rhodz, f_du)76 SUBROUTINE caldyn(it,f_phis, f_ps, f_theta_rhodz, f_u, f_q, f_dps, f_dtheta_rhodz, f_du) 77 77 USE icosa 78 78 USE vorticity_mod … … 85 85 TYPE(t_field),POINTER :: f_theta_rhodz(:) 86 86 TYPE(t_field),POINTER :: f_u(:) 87 TYPE(t_field),POINTER :: f_q(:) 87 88 TYPE(t_field),POINTER :: f_dps(:) 88 89 TYPE(t_field),POINTER :: f_dtheta_rhodz(:) … … 123 124 IF (mod(it,itau_out)==0 ) THEN 124 125 PRINT *,'CALL write_output_fields' 125 CALL write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, &126 CALL write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, f_q, & 126 127 f_buf_i, f_buf_v, f_buf_u3d, f_buf_ulon, f_buf_ulat, f_buf_s, f_buf_p) 127 128 END IF … … 626 627 END SUBROUTINE compute_caldyn 627 628 628 SUBROUTINE write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, &629 SUBROUTINE write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, f_q, & 629 630 f_buf_i, f_buf_v, f_buf_i3, f_buf1_i, f_buf2_i, f_buf_s, f_buf_p) 630 631 USE icosa … … 635 636 USE write_field 636 637 USE vertical_interp_mod 637 TYPE(t_field),POINTER :: f_ps(:), f_phis(:), f_u(:), f_theta_rhodz(:), f_ dps(:), &638 TYPE(t_field),POINTER :: f_ps(:), f_phis(:), f_u(:), f_theta_rhodz(:), f_q(:), f_dps(:), & 638 639 f_buf_i(:), f_buf_v(:), f_buf_i3(:), f_buf1_i(:), f_buf2_i(:), f_buf_s(:), f_buf_p(:) 639 640 640 641 REAL(rstd) :: out_pression_lev 641 642 CHARACTER(LEN=255) :: str_pression 643 CHARACTER(LEN=255) :: physics_type 642 644 643 645 out_pression_level=0 … … 661 663 ! Temperature 662 664 CALL theta_rhodz2temperature(f_ps,f_theta_rhodz,f_buf_i) ; 663 CALL writefield("T",f_buf_i) 664 665 IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 666 CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level) 667 CALL writefield("T"//TRIM(str_pression),f_buf_s) 665 666 CALL getin('physics',physics_type) 667 IF (TRIM(physics_type)=='dcmip') THEN 668 CALL Tv2T(f_buf_i,f_q,f_buf1_i) 669 CALL writefield("T",f_buf1_i) 670 IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 671 CALL vertical_interp(f_ps,f_buf1_i,f_buf_s,out_pression_level) 672 CALL writefield("T"//TRIM(str_pression),f_buf_s) 673 ENDIF 674 ELSE 675 CALL writefield("T",f_buf_i) 676 IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN 677 CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level) 678 CALL writefield("T"//TRIM(str_pression),f_buf_s) 679 ENDIF 668 680 ENDIF 669 681 670 682 ! velocity components 671 683 CALL un2ulonlat(f_u, f_buf_i3, f_buf1_i, f_buf2_i) … … 739 751 END DO 740 752 END SUBROUTINE un2ulonlat 741 753 754 SUBROUTINE Tv2T(f_Tv, f_q, f_T) 755 USE icosa 756 IMPLICIT NONE 757 TYPE(t_field), POINTER :: f_TV(:) 758 TYPE(t_field), POINTER :: f_q(:) 759 TYPE(t_field), POINTER :: f_T(:) 760 761 REAL(rstd),POINTER :: Tv(:,:), q(:,:,:), T(:,:) 762 INTEGER :: ind 763 764 DO ind=1,ndomain 765 CALL swap_dimensions(ind) 766 CALL swap_geometry(ind) 767 Tv=f_Tv(ind) 768 q=f_q(ind) 769 T=f_T(ind) 770 T=Tv/(1+0.608*q(:,:,1)) 771 END DO 772 773 END SUBROUTINE Tv2T 774 742 775 END MODULE caldyn_gcm_mod
Note: See TracChangeset
for help on using the changeset viewer.