Changeset 186 for codes/icosagcm/trunk/src/physics_dry.f90
- Timestamp:
- 01/09/14 09:56:11 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/physics_dry.f90
r149 r186 1 MODULE physics_dry_mod2 USE ICOSA3 PUBLIC init_physics_dry, physics_dry4 5 CONTAINS6 7 SUBROUTINE init_physics_dry8 USE ICOSA !sarvesh9 USE time_mod !sarvesh10 USE dimphys_mod11 USE RADIATION12 13 IMPLICIT NONE14 INTEGER::i,j,ij15 !-------------------------------------- ORBITAL PARAMETER----16 periheli=150.17 CALL getin('periheli', periheli)18 aphelie=150.19 CALL getin('aphelie',aphelie)20 coefir=0.0821 CALL getin('coefir',coefir)22 coefvis=0.9923 CALL getin('coefvis',coefvis)24 obliquit=0.025 CALL getin('obliquit',obliquit)26 peri_day=0.27 CALL getin('peri_day',peri_day)28 year_day=360.29 CALL getin('year_day',year_day)30 callrad=.true.31 CALL getin('callrad', callrad)32 calldifv=.true.33 CALL getin('calldifv', calldifv)34 calladj=.true.35 CALL getin('calladj', calladj)36 callcond=.true.37 callsoil=.true.38 CALL getin('callsoil',callsoil)39 season=.true.40 CALL getin('season',season)41 diurnal=.true.42 CALL getin('diurnal',diurnal)43 lverbose=.false.44 CALL getin('lverbose',lverbose)45 period_sort=1.46 CALL getin('period_sort',period_sort)47 ! ptimestep=dt48 ! CALL getin('ptimestep',ptimestep)49 50 print*,'Activation de la physique:'51 print*,' Rayonnement ',callrad52 print*,' Diffusion verticale turbulente ', calldifv53 print*,' Ajustement convectif ',calladj54 print*,' Sol ',callsoil55 print*,' Cycle diurne ',diurnal56 ! choice of the frequency of the computation of radiations57 IF(diurnal) THEN58 iradia=NINT(daysec/(20.*dt))59 ELSE60 iradia=NINT(daysec/(4.*dt))61 ENDIF62 iradia=163 64 ngridmx=iim*jjm ; nlayermx=llm65 offset=halo66 67 ALLOCATE(albedo(ngridmx));ALLOCATE(emissiv(ngridmx))68 ALLOCATE(inertie(ngridmx));ALLOCATE(z0(ngridmx))69 ALLOCATE(rnatur(ngridmx));ALLOCATE(tsurf(ngridmx))70 ALLOCATE(tsoil(ngridmx,nlayermx));ALLOCATE(fluxgrd(ngridmx))71 ALLOCATE(fluxrad(ngridmx));ALLOCATE(dtrad(ngridmx,llm+1))72 ALLOCATE(q2(ngridmx,llm+1));ALLOCATE(q2l(ngridmx,llm+1))73 ALLOCATE(capcal(ngridmx))74 75 CALL iniorbit(aphelie,periheli,year_day,peri_day,obliquit)76 77 PRINT*,'unjours',daysec78 PRINT*,'The radiative transfer is computed each ', iradia,' physical time-step or each ', &79 iradia*dt,' seconds'80 END SUBROUTINE init_physics_dry81 82 83 SUBROUTINE physics_dry( it,jD_cur,jH_cur,f_phis, f_ps, f_theta_rhodz, f_ue, f_q)84 USE icosa85 IMPLICIT NONE86 INTEGER,INTENT(IN) :: it87 REAL(rstd),INTENT(IN) :: jD_cur,jH_cur88 TYPE(t_field),POINTER :: f_phis(:)89 TYPE(t_field),POINTER :: f_ps(:)90 TYPE(t_field),POINTER :: f_theta_rhodz(:)91 TYPE(t_field),POINTER :: f_ue(:)92 TYPE(t_field),POINTER :: f_q(:)93 94 REAL(rstd),POINTER :: phis(:)95 REAL(rstd),POINTER :: ps(:)96 REAL(rstd),POINTER :: theta_rhodz(:,:)97 REAL(rstd),POINTER :: ue(:,:)98 REAL(rstd),POINTER :: q(:,:,:)99 ! REAL(rstd),POINTER :: precl(:)100 INTEGER :: ind101 ! LOGICAL:: firstcall,lastcall102 103 CALL transfert_request(f_ue,req_e1_vect)104 CALL transfert_request(f_theta_rhodz,req_i1)105 106 DO ind=1,ndomain107 CALL swap_dimensions(ind)108 CALL swap_geometry(ind)109 phis=f_phis(ind)110 ps=f_ps(ind)111 theta_rhodz=f_theta_rhodz(ind)112 ue=f_ue(ind)113 q=f_q(ind)114 ! out_i=f_out_i(ind)115 ! precl=f_precl(ind)116 ! print*,"====================================ind",ind,"----------it",it117 CALL compute_physics_dry(it,jD_cur,jH_cur,phis, ps, theta_rhodz, ue, q(:,:,1))118 ENDDO119 120 ! CALL writefield("out_i",f_out_i)121 122 ! IF (mod(it,itau_out)==0 ) THEN123 ! CALL writefield("precl",f_precl)124 ! ENDIF125 126 END SUBROUTINE physics_dry127 128 SUBROUTINE compute_physics_dry(it,jD_cur,jH_cur,phis, ps, theta_rhodz, ue, q)129 USE icosa130 USE pression_mod131 USE exner_mod132 USE theta2theta_rhodz_mod133 USE geopotential_mod134 USE wind_mod135 USE PHY136 137 IMPLICIT NONE138 INTEGER::it139 REAL(rstd) :: jD_cur140 REAL(rstd) :: jH_cur141 REAL(rstd) :: phis(iim*jjm)142 REAL(rstd) :: ps(iim*jjm)143 REAL(rstd) :: theta_rhodz(iim*jjm,llm)144 REAL(rstd) :: ue(3*iim*jjm,llm)145 REAL(rstd) :: q(iim*jjm,llm)146 ! REAL(rstd) :: precl(iim*jjm)147 148 REAL(rstd) :: p(iim*jjm,llm+1)149 REAL(rstd) :: pks(iim*jjm)150 REAL(rstd) :: pk(iim*jjm,llm)151 REAL(rstd) :: phi(iim*jjm,llm)152 REAL(rstd) :: T(iim*jjm,llm)153 REAL(rstd) :: Tfi(iim*jjm,llm)154 REAL(rstd) :: theta(iim*jjm,llm)155 156 REAL(rstd) :: uc(iim*jjm,3,llm)157 REAL(rstd) :: u(iim*jjm,llm)158 REAL(rstd) :: v(iim*jjm,llm)159 REAL(rstd) :: ufi(iim*jjm,llm)160 REAL(rstd) :: vfi(iim*jjm,llm)161 REAL(rstd) :: qfi(iim*jjm,llm)162 REAL(rstd) :: utemp(iim*jjm,llm)163 REAL(rstd) :: vtemp(iim*jjm,llm)164 REAL(rstd) :: lat(iim*jjm)165 REAL(rstd) :: lon(iim*jjm)166 REAL(rstd) :: pmid(iim*jjm,llm)167 REAL(rstd) :: pint(iim*jjm,llm+1)168 REAL(rstd) :: pdel(iim*jjm,llm)169 REAL(rstd) :: plev(iim*jjm,llm+1),play(iim*jjm,llm)170 REAL(rstd) :: pkbycp171 INTEGER :: i,j,l,ij,ig172 173 !-------------------174 ! LOGICAL:: firstcall,lastcall175 REAL(rstd) :: dufi(iim*jjm,llm)176 REAL(rstd) :: dvfi(iim*jjm,llm)177 REAL(rstd) :: dTfi(iim*jjm,llm)178 REAL(rstd) :: dpsfi(iim*jjm)179 REAL(rstd) :: dqfi(iim*jjm,llm)180 ! PRINT *,'Entering in LMD SIMPLE physics'181 182 183 offset=halo184 CALL compute_pression(ps,p,halo)185 CALL compute_exner(ps,p,pks,pk,halo)186 CALL compute_theta_rhodz2theta(ps,theta_rhodz,theta,halo)187 CALL compute_geopotential(phis,pks,pk,theta,phi,halo)188 CALL compute_theta_rhodz2temperature(ps,theta_rhodz,T,halo)189 CALL compute_wind_centered(ue,uc)190 CALL compute_wind_centered_lonlat_compound(uc, u, v)191 192 DO j=jj_begin-offset,jj_end+offset193 DO i=ii_begin-offset,ii_end+offset194 ij=(j-1)*iim+i195 CALL xyz2lonlat(xyz_i(ij,:),lon(ij),lat(ij))196 ENDDO197 ENDDO198 199 DO l=1,llm200 DO j=jj_begin-offset,jj_end+offset201 DO i=ii_begin-offset,ii_end+offset202 ij=(j-1)*iim+i203 ! Tfi(ij,l)=T(ij,l)204 ! ufi(ij,l)=u(ij,l)205 ! vfi(ij,l)=v(ij,l)206 ! qfi(ij,l)=q(ij,l)207 dTfi(ij,l)=0.0208 dufi(ij,l)=0.0209 dvfi(ij,l)=0.0210 dqfi(ij,l)=0.0211 ENDDO212 ENDDO213 ENDDO214 plev(:,:) = p(:,:)215 dpsfi=0.0216 217 DO l=1,llm218 DO j=jj_begin-offset,jj_end+offset219 DO i=ii_begin-offset,ii_end+offset220 ij=(j-1)*iim+i221 pkbycp=pk(ij,l)/cpp222 play(ij,l)=preff*pkbycp**(1./kappa)223 ENDDO224 ENDDO225 ENDDO226 227 228 CALL phyparam_lmd(it,iim*jjm,llm,1,dt,lat,lon,jD_cur,jH_cur, &229 plev,play,phi,phis,u,v,T,q,dufi,dvfi,dTfi,dqfi,dpsfi)230 231 CALL ADDFI(u,v,T,q,ps,dufi,dvfi,dTfi,dqfi,dpsfi)232 233 ! CALL SARCHECKF(llm)234 ! print*,"plev",(maxval(plev(:,l)),l=1,llm+1)235 236 ! CALL phyparam_lmd(it,iim*jjm,llm,1,dt,lat,lon,jD_cur,jH_cur, &237 ! plev,play,phi,phis,ufi,vfi,Tfi,qfi,dufi,dvfi,dTfi,dqfi,dpsfi)238 239 ! Print*,"going ADD FI",it240 ! CALL ADDFI(ufi,vfi,Tfi,qfi,ps,dufi,dvfi,dTfi,dqfi,dpsfi)241 242 ! WRITE(11,*)"ducovfi",maxval(dufi),minval(dufi),it243 ! WRITE(11,*)"ucovfi",maxval(ufi),minval(ufi)244 ! WRITE(11,*)"dtetafi",maxval(dTfi),minval(dTfi)245 246 !=============================================247 ! go to 1234248 DO l=1,llm249 DO j=jj_begin-offset,jj_end+offset250 DO i=ii_begin-offset,ii_end+offset251 ij=(j-1)*iim+i252 uc(ij,:,l)=(dufi(ij,l)*elon_i(ij,:)+dvfi(ij,l)*elat_i(ij,:))*dt253 ENDDO254 ENDDO255 ENDDO256 257 258 DO l=1,llm259 DO j=jj_begin-offset,jj_end+offset260 DO i=ii_begin-offset,ii_end+offset261 ij=(j-1)*iim+i262 ue(ij+u_right,l)=ue(ij+u_right,l)+sum( 0.5*(uc(ij,:,l) + uc(ij+t_right,:,l))*ep_e(ij+u_right,:) )263 ue(ij+u_lup,l)=ue(ij+u_lup,l)+sum( 0.5*(uc(ij,:,l) + uc(ij+t_lup,:,l))*ep_e(ij+u_lup,:) )264 ue(ij+u_ldown,l)=ue(ij+u_ldown,l)+sum( 0.5*(uc(ij,:,l) + uc(ij+t_ldown,:,l))*ep_e(ij+u_ldown,:) )265 ENDDO266 ENDDO267 ENDDO268 !1234 continue269 270 ! CALL compute_temperature2theta_rhodz(ps,Tfi,theta_rhodz,halo)271 CALL compute_temperature2theta_rhodz(ps,T,theta_rhodz,halo)272 273 ! WRITE(13,*)"tetafi",maxval(theta_rhodz),minval(theta_rhodz)274 RETURN275 END SUBROUTINE compute_physics_dry276 277 SUBROUTINE addfi(ufi,vfi,Tfi,qfi,ps,dufi,dvfi,dTfi,dqfi,dpsfi)278 USE ICOSA279 IMPLICIT NONE280 REAL(rstd) :: dufi(iim*jjm,llm)281 REAL(rstd) :: dvfi(iim*jjm,llm)282 REAL(rstd) :: dTfi(iim*jjm,llm)283 REAL(rstd) :: dpsfi(iim*jjm)284 REAL(rstd) :: dqfi(iim*jjm,llm)285 REAL(rstd) :: ufi(iim*jjm,llm)286 REAL(rstd) :: vfi(iim*jjm,llm)287 REAL(rstd) :: qfi(iim*jjm,llm)288 REAL(rstd) :: ps(iim*jjm)289 REAL(rstd) :: Tfi(iim*jjm,llm)290 INTEGER::i,j,l,ij,offset291 offset=halo292 293 DO l=1,llm294 DO j=jj_begin-offset,jj_end+offset295 DO i=ii_begin-offset,ii_end+offset296 ij=(j-1)*iim+i297 Tfi(ij,l)=Tfi(ij,l)+dTfi(ij,l)*dt298 ufi(ij,l)=ufi(ij,l)+dufi(ij,l)*dt299 vfi(ij,l)=vfi(ij,l)+dvfi(ij,l)*dt300 qfi(ij,l)=qfi(ij,l)+dqfi(ij,l)*dt301 END DO302 END DO303 END DO304 ps(:)=ps(:) + dpsfi(:)*dt305 END SUBROUTINE addfi306 307 END MODULE physics_dry_mod
Note: See TracChangeset
for help on using the changeset viewer.