Changeset 354
- Timestamp:
- 08/06/15 10:51:35 (9 years ago)
- Location:
- codes/icosagcm/trunk/src
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/caldyn_gcm.f90
r350 r354 10 10 !$OMP THREADPRIVATE(out_u, p, qu) 11 11 12 TYPE(t_field),POINTER :: f_buf_i(:), f_buf_ulon(:), f_buf_ulat(:), f_buf_u3d(:)13 TYPE(t_field),POINTER :: f_buf_v(:), f_buf_s(:), f_buf_p(:)14 15 12 ! temporary shared variable for caldyn 16 TYPE(t_field),POINTER :: f_theta(:)17 13 TYPE(t_field),POINTER :: f_pk(:) 18 14 TYPE(t_field),POINTER :: f_wwuu(:) … … 24 20 TYPE(t_message) :: req_ps, req_mass, req_theta_rhodz, req_u, req_qu 25 21 26 PUBLIC init_caldyn, caldyn_BC, caldyn, write_output_fields, & 27 req_ps, req_mass 22 PUBLIC init_caldyn, caldyn_BC, caldyn, req_ps, req_mass 28 23 29 24 CONTAINS … … 31 26 SUBROUTINE init_caldyn 32 27 USE icosa 33 USE exner_mod 28 USE observable_mod 29 ! USE exner_mod 34 30 USE mpipara 35 31 USE omp_para … … 72 68 CALL allocate_field(f_qu,field_u,type_real,llm) 73 69 CALL allocate_field(f_qv,field_z,type_real,llm) 74 75 CALL allocate_field(f_buf_i, field_t,type_real,llm,name="buffer_i")76 CALL allocate_field(f_buf_p, field_t,type_real,llm+1)77 CALL allocate_field(f_buf_u3d, field_t,type_real,3,llm) ! 3D vel at cell centers78 CALL allocate_field(f_buf_ulon,field_t,type_real,llm)79 CALL allocate_field(f_buf_ulat,field_t,type_real,llm)80 CALL allocate_field(f_buf_v, field_z,type_real,llm)81 CALL allocate_field(f_buf_s, field_t,type_real)82 83 CALL allocate_field(f_theta, field_t,type_real,llm, name='theta') ! potential temperature84 70 CALL allocate_field(f_pk, field_t,type_real,llm, name='pk') 85 71 CALL allocate_field(f_wwuu, field_u,type_real,llm+1,name='wwuu') … … 134 120 f_geopot, f_hflux, f_wflux, f_dps, f_dmass, f_dtheta_rhodz, f_du) 135 121 USE icosa 122 USE observable_mod 136 123 USE disvert_mod, ONLY : caldyn_eta, eta_mass 137 124 USE vorticity_mod … … 294 281 295 282 !$OMP BARRIER 296 IF (write_out) THEN297 298 IF (is_master) PRINT *,'CALL write_output_fields'299 300 ! ---> for openMP test to fix later301 ! CALL write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, f_q, &302 ! f_buf_i, f_buf_v, f_buf_u3d, f_buf_ulon, f_buf_ulat, f_buf_s, f_buf_p)303 CALL un2ulonlat(f_u, f_buf_ulon, f_buf_ulat)304 CALL output_field("ulon",f_buf_ulon)305 CALL output_field("ulat",f_buf_ulat)306 CALL output_field("ps",f_ps)307 ! CALL output_field("dps",f_dps)308 ! CALL output_field("mass",f_mass)309 ! CALL output_field("dmass",f_dmass)310 CALL output_field("vort",f_qv)311 CALL output_field("theta",f_theta)312 ! CALL output_field("exner",f_pk)313 ! CALL output_field("pv",f_qv)314 315 END IF316 317 283 ! CALL check_mass_conservation(f_ps,f_dps) 318 284 CALL trace_end("caldyn") … … 946 912 END SUBROUTINE check_mass_conservation 947 913 948 SUBROUTINE write_output_fields(f_ps, f_phis, f_dps, f_u, f_theta_rhodz, f_q, &949 f_buf_i, f_buf_v, f_buf_i3, f_buf1_i, f_buf2_i, f_buf_s, f_buf_p)950 USE icosa951 USE vorticity_mod952 USE theta2theta_rhodz_mod953 USE pression_mod954 USE omega_mod955 USE write_field_mod956 USE vertical_interp_mod957 USE wind_mod958 TYPE(t_field),POINTER :: f_ps(:), f_phis(:), f_u(:), f_theta_rhodz(:), f_q(:), f_dps(:), &959 f_buf_i(:), f_buf_v(:), f_buf_i3(:), f_buf1_i(:), f_buf2_i(:), f_buf_s(:), f_buf_p(:)960 961 REAL(rstd) :: out_pression_level962 CHARACTER(LEN=255) :: str_pression963 CHARACTER(LEN=255) :: physics_type964 965 out_pression_level=0.966 CALL getin("out_pression_level",out_pression_level)967 WRITE(str_pression,*) INT(out_pression_level/100)968 str_pression=ADJUSTL(str_pression)969 970 CALL writefield("ps",f_ps)971 CALL writefield("dps",f_dps)972 CALL writefield("phis",f_phis)973 CALL vorticity(f_u,f_buf_v)974 CALL writefield("vort",f_buf_v)975 976 CALL w_omega(f_ps, f_u, f_buf_i)977 CALL writefield('omega', f_buf_i)978 IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN979 CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level)980 CALL writefield("omega"//TRIM(str_pression),f_buf_s)981 ENDIF982 983 ! Temperature984 ! CALL theta_rhodz2temperature(f_ps,f_theta_rhodz,f_buf_i) ; ! FIXME985 986 CALL getin('physics',physics_type)987 IF (TRIM(physics_type)=='dcmip') THEN988 CALL Tv2T(f_buf_i,f_q,f_buf1_i)989 CALL writefield("T",f_buf1_i)990 IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN991 CALL vertical_interp(f_ps,f_buf1_i,f_buf_s,out_pression_level)992 CALL writefield("T"//TRIM(str_pression),f_buf_s)993 ENDIF994 ELSE995 CALL writefield("T",f_buf_i)996 IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN997 CALL vertical_interp(f_ps,f_buf_i,f_buf_s,out_pression_level)998 CALL writefield("T"//TRIM(str_pression),f_buf_s)999 ENDIF1000 ENDIF1001 1002 ! velocity components1003 CALL un2ulonlat(f_u, f_buf1_i, f_buf2_i)1004 CALL writefield("ulon",f_buf1_i)1005 CALL writefield("ulat",f_buf2_i)1006 1007 IF (out_pression_level<=preff .AND. out_pression_level > 0) THEN1008 CALL vertical_interp(f_ps,f_buf1_i,f_buf_s,out_pression_level)1009 CALL writefield("ulon"//TRIM(str_pression),f_buf_s)1010 CALL vertical_interp(f_ps,f_buf2_i,f_buf_s,out_pression_level)1011 CALL writefield("ulat"//TRIM(str_pression),f_buf_s)1012 ENDIF1013 1014 ! geopotential ! FIXME1015 CALL thetarhodz2geopot(f_ps,f_phis,f_theta_rhodz, f_buf_s,f_buf_p,f_buf1_i,f_buf2_i,f_buf_i)1016 CALL writefield("p",f_buf_p)1017 ! CALL writefield("phi",f_geopot) ! geopotential1018 CALL writefield("theta",f_buf1_i) ! potential temperature1019 CALL writefield("pk",f_buf2_i) ! Exner pressure1020 1021 END SUBROUTINE write_output_fields1022 1023 SUBROUTINE thetarhodz2geopot(f_ps,f_phis,f_theta_rhodz, f_pks,f_p,f_theta,f_pk,f_phi)1024 USE field_mod1025 USE pression_mod1026 USE exner_mod1027 USE geopotential_mod1028 USE theta2theta_rhodz_mod1029 TYPE(t_field), POINTER :: f_ps(:), f_phis(:), f_theta_rhodz(:), & ! IN1030 f_pks(:), f_p(:), f_theta(:), f_pk(:), f_phi(:) ! OUT1031 REAL(rstd),POINTER :: pk(:,:), p(:,:), theta(:,:), theta_rhodz(:,:), &1032 phi(:,:), phis(:), ps(:), pks(:)1033 INTEGER :: ind1034 1035 DO ind=1,ndomain1036 IF (.NOT. assigned_domain(ind)) CYCLE1037 CALL swap_dimensions(ind)1038 CALL swap_geometry(ind)1039 ps = f_ps(ind)1040 p = f_p(ind)1041 !$OMP BARRIER1042 CALL compute_pression(ps,p,0)1043 pk = f_pk(ind)1044 pks = f_pks(ind)1045 !$OMP BARRIER1046 CALL compute_exner(ps,p,pks,pk,0)1047 !$OMP BARRIER1048 theta_rhodz = f_theta_rhodz(ind)1049 theta = f_theta(ind)1050 CALL compute_theta_rhodz2theta(ps, theta_rhodz,theta,0)1051 phis = f_phis(ind)1052 phi = f_phi(ind)1053 CALL compute_geopotential(phis,pks,pk,theta,phi,0)1054 END DO1055 1056 END SUBROUTINE thetarhodz2geopot1057 1058 SUBROUTINE Tv2T(f_Tv, f_q, f_T)1059 USE icosa1060 IMPLICIT NONE1061 TYPE(t_field), POINTER :: f_TV(:)1062 TYPE(t_field), POINTER :: f_q(:)1063 TYPE(t_field), POINTER :: f_T(:)1064 1065 REAL(rstd),POINTER :: Tv(:,:), q(:,:,:), T(:,:)1066 INTEGER :: ind1067 1068 DO ind=1,ndomain1069 IF (.NOT. assigned_domain(ind)) CYCLE1070 CALL swap_dimensions(ind)1071 CALL swap_geometry(ind)1072 Tv=f_Tv(ind)1073 q=f_q(ind)1074 T=f_T(ind)1075 T=Tv/(1+0.608*q(:,:,1))1076 END DO1077 1078 END SUBROUTINE Tv2T1079 1080 914 END MODULE caldyn_gcm_mod -
codes/icosagcm/trunk/src/geopotential_mod.f90
r295 r354 1 1 MODULE geopotential_mod 2 IMPLICIT NONE 3 PRIVATE 2 4 5 PUBLIC :: compute_geopotential 3 6 CONTAINS 4 7 5 SUBROUTINE geopotential(f_phis,f_pks,f_pk,f_theta,f_phi) 8 SUBROUTINE geopotential(f_phis,f_pks,f_pk,f_theta,f_phi) ! ORPHAN 6 9 USE icosa 7 IMPLICIT NONE8 10 TYPE(t_field), POINTER :: f_phis(:) 9 11 TYPE(t_field), POINTER :: f_pks(:) -
codes/icosagcm/trunk/src/timeloop_gcm.f90
r350 r354 30 30 USE icosa 31 31 USE dissip_gcm_mod 32 USE observable_mod 32 33 USE caldyn_mod 33 34 USE etat0_mod … … 131 132 CALL init_dissip 132 133 CALL init_sponge 134 CALL init_observable 133 135 CALL init_caldyn 134 136 CALL init_guided … … 157 159 USE caldyn_mod 158 160 USE caldyn_gcm_mod, ONLY : req_ps, req_mass 161 USE observable_mod 159 162 USE etat0_mod 160 163 USE guided_mod … … 242 245 IF (mod(it,itau_out)==0 ) THEN 243 246 CALL update_time_counter(dt*it) 244 CALL output_field("q",f_q) 247 CALL write_output_fields_basic(f_ps, f_u, f_q) 248 ! CALL output_field("q",f_q) 245 249 ENDIF 246 250
Note: See TracChangeset
for help on using the changeset viewer.