Changeset 13 for codes/icosagcm/trunk/src
- Timestamp:
- 05/22/12 18:06:53 (12 years ago)
- Location:
- codes/icosagcm/trunk/src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/dissip.f90
r12 r13 6 6 TYPE(t_field),POINTER,SAVE :: f_gradrot(:) 7 7 TYPE(t_request),POINTER :: req_dissip(:) 8 8 TYPE(t_field),POINTER,SAVE :: f_due(:) 9 9 10 INTEGER,PARAMETER :: nitergdiv=1 10 11 INTEGER,PARAMETER :: nitergrot=1 … … 23 24 IMPLICIT NONE 24 25 CALL allocate_field(f_gradrot,field_u,type_real) 26 CALL allocate_field(f_due,field_u,type_real) 25 27 END SUBROUTINE allocate_dissip 26 28 … … 42 44 REAL(rstd) :: r 43 45 INTEGER :: i,j,n,ind,it 46 REAL :: sum1,sum2 44 47 45 48 tetagdiv=5000 … … 184 187 dumaxm1=dumax 185 188 dumax=0 186 189 sum1=0 ; sum2=0 187 190 DO ind=1,ndomain 188 191 u=f_u(ind) 189 192 du=f_du(ind) 190 CALL gradrot(u,du )193 CALL gradrot(u,du,ind,sum1,sum2) 191 194 ENDDO 192 195 … … 225 228 226 229 227 SUBROUTINE dissip(f_ue ,f_due)230 SUBROUTINE dissip(f_ue) 228 231 USE domain_mod 229 232 USE dimensions … … 232 235 IMPLICIT NONE 233 236 TYPE(t_field),POINTER :: f_ue(:) 234 TYPE(t_field),POINTER :: f_due(:)237 ! TYPE(t_field),POINTER :: f_due(:) 235 238 REAL(rstd),POINTER :: ue(:) 236 239 REAL(rstd),POINTER :: due(:) … … 238 241 INTEGER :: ind 239 242 REAL :: v 243 REAL :: sum1,sum2 240 244 241 245 CALL transfert_request(f_ue,req_dissip) 242 246 CALL transfert_request(f_ue,req_dissip) 243 247 sum1=0 ; sum2=0 244 248 DO ind=1,ndomain 245 249 CALL swap_dimensions(ind) … … 250 254 CALL gradiv(ue,due) 251 255 due=due*dtdissip/tetagdiv 252 CALL gradrot(ue,gradrot_e )256 CALL gradrot(ue,gradrot_e,ind,sum1,sum2) 253 257 due=due+gradrot_e*dtdissip/tetagrot 254 258 ENDDO 255 259 PRINT *,"SUM1 == SUM2 ?? ", sum1,sum2 260 DO ind=1,ndomain 261 CALL swap_dimensions(ind) 262 CALL swap_geometry(ind) 263 ue=f_ue(ind) 264 due=f_due(ind) 265 266 ue(:)=ue(:)+0.5*due(:) 267 ENDDO 268 256 269 END SUBROUTINE dissip 257 270 … … 271 284 DO i=ii_begin,ii_end 272 285 n=(j-1)*iim+i 273 divu_i(n)= -1./Ai(n)*(ne(n,right)*ue(n+u_right)*le(n+u_right) + &286 divu_i(n)=1./Ai(n)*(ne(n,right)*ue(n+u_right)*le(n+u_right) + & 274 287 ne(n,rup)*ue(n+u_rup)*le(n+u_rup) + & 275 288 ne(n,lup)*ue(n+u_lup)*le(n+u_lup) + & … … 285 298 n=(j-1)*iim+i 286 299 287 gradivu_e(n+u_right)= 1/de(n+u_right)*(ne(n,right)*divu_i(n)+ ne(n+t_right,left)*divu_i(n+t_right) )288 289 gradivu_e(n+u_lup)= 1/de(n+u_lup)*(ne(n,lup)*divu_i(n)+ ne(n+t_lup,rdown)*divu_i(n+t_lup ))290 291 gradivu_e(n+u_ldown)= 1/de(n+u_ldown)*(ne(n,ldown)*divu_i(n)+ne(n+t_ldown,rup)*divu_i(n+t_ldown) )300 gradivu_e(n+u_right)=-1/de(n+u_right)*(ne(n,right)*divu_i(n)+ ne(n+t_right,left)*divu_i(n+t_right) ) 301 302 gradivu_e(n+u_lup)=-1/de(n+u_lup)*(ne(n,lup)*divu_i(n)+ ne(n+t_lup,rdown)*divu_i(n+t_lup )) 303 304 gradivu_e(n+u_ldown)=-1/de(n+u_ldown)*(ne(n,ldown)*divu_i(n)+ne(n+t_ldown,rup)*divu_i(n+t_ldown) ) 292 305 293 306 ENDDO … … 297 310 DO i=ii_begin,ii_end 298 311 n=(j-1)*iim+i 299 gradivu_e(n+u_right)= -gradivu_e(n+u_right)*cdivu300 gradivu_e(n+u_lup)= -gradivu_e(n+u_lup)*cdivu301 gradivu_e(n+u_ldown)= -gradivu_e(n+u_ldown)*cdivu312 gradivu_e(n+u_right)=gradivu_e(n+u_right)*cdivu 313 gradivu_e(n+u_lup)=gradivu_e(n+u_lup)*cdivu 314 gradivu_e(n+u_ldown)=gradivu_e(n+u_ldown)*cdivu 302 315 ENDDO 303 316 ENDDO … … 308 321 309 322 310 SUBROUTINE gradrot(ue,gradrot_e )323 SUBROUTINE gradrot(ue,gradrot_e,ind,sum1,sum2) 311 324 USE domain_mod 312 325 USE dimensions … … 316 329 REAL(rstd),INTENT(IN) :: ue(iim*3*jjm) 317 330 REAL(rstd),INTENT(OUT) :: gradrot_e(iim*3*jjm) 331 INTEGER,INTENT(IN) :: ind 332 REAL,INTENT(OUT) ::sum1,sum2 318 333 REAL(rstd) :: rot_v(2*iim*jjm) 319 334 … … 349 364 ENDDO 350 365 366 367 DO j=jj_begin,jj_end-1 368 DO i=ii_begin,ii_end-1 369 n=(j-1)*iim+i 370 sum1=sum1+rot_v(n+z_rup)**2*Av(n+z_rup) 371 ENDDO 372 ENDDO 373 374 DO j=jj_begin+1,jj_end 375 DO i=ii_begin,ii_end-1 376 n=(j-1)*iim+i 377 sum1=sum1+rot_v(n+z_rdown)**2*Av(n+z_rdown) 378 ENDDO 379 ENDDO 380 381 382 DO j=jj_begin+1,jj_end-1 383 DO i=ii_begin,ii_end-1 384 n=(j-1)*iim+i 385 sum2=sum2+gradrot_e(n+u_right)*le(n+u_right)*de(n+u_right)*ue(n+u_right) 386 ENDDO 387 ENDDO 388 389 DO j=jj_begin,jj_end-1 390 DO i=ii_begin+1,ii_end-1 391 n=(j-1)*iim+i 392 sum2=sum2+gradrot_e(n+u_rup)*le(n+u_rup)*de(n+u_rup)*ue(n+u_rup) 393 ENDDO 394 ENDDO 395 396 DO j=jj_begin,jj_end-1 397 DO i=ii_begin+1,ii_end 398 n=(j-1)*iim+i 399 sum2=sum2+gradrot_e(n+u_lup)*le(n+u_lup)*de(n+u_lup)*ue(n+u_lup) 400 ENDDO 401 ENDDO 402 403 ! frontière 404 j=jj_begin 405 DO i=ii_begin,ii_end-1 406 n=(j-1)*iim+i 407 if (domain(ind)%own(i,j)) sum2=sum2+gradrot_e(n+u_right)*le(n+u_right)*de(n+u_right)*ue(n+u_right) 408 ENDDO 409 410 j=jj_end 411 DO i=ii_begin,ii_end-1 412 n=(j-1)*iim+i 413 if (domain(ind)%own(i,j)) sum2=sum2+gradrot_e(n+u_right)*le(n+u_right)*de(n+u_right)*ue(n+u_right) 414 ENDDO 415 416 i=ii_begin 417 DO j=jj_begin,jj_end-1 418 n=(j-1)*iim+i 419 if (domain(ind)%own(i,j))sum2=sum2+gradrot_e(n+u_rup)*le(n+u_rup)*de(n+u_rup)*ue(n+u_rup) 420 ENDDO 421 422 i=ii_end 423 DO j=jj_begin,jj_end-1 424 n=(j-1)*iim+i 425 if (domain(ind)%own(i,j))sum2=sum2+gradrot_e(n+u_rup)*le(n+u_rup)*de(n+u_rup)*ue(n+u_rup) 426 ENDDO 427 428 429 430 351 431 DO j=jj_begin,jj_end 352 432 DO i=ii_begin,ii_end … … 359 439 ENDDO 360 440 ENDDO 441 442 361 443 END SUBROUTINE 362 444 -
codes/icosagcm/trunk/src/etat0_academic.f90
r12 r13 157 157 158 158 CALL xyz2lonlat(xyz_e(ij+u_right,:),lon,lat) 159 IF (abs(sin(lat) <1.e-4)) lat=1e-4159 IF (abs(sin(lat))<1.e-4) lat=1e-4 160 160 x=cos(lat) ; x=x*x ; x=x*x ; x=x*x 161 161 fact(ij+u_right)=(1.-x)/(2.*omega*sin(lat)) 162 162 163 163 CALL xyz2lonlat(xyz_e(ij+u_lup,:),lon,lat) 164 IF (abs(sin(lat) <1.e-4)) lat=1e-4164 IF (abs(sin(lat))<1.e-4) lat=1e-4 165 165 x=cos(lat) ; x=x*x ; x=x*x ; x=x*x 166 166 fact(ij+u_lup)=(1.-x)/(2.*omega*sin(lat)) 167 167 168 168 CALL xyz2lonlat(xyz_e(ij+u_ldown,:),lon,lat) 169 IF (abs(sin(lat) <1.e-4)) lat=1e-4169 IF (abs(sin(lat))<1.e-4) lat=1e-4 170 170 x=cos(lat) ; x=x*x ; x=x*x ; x=x*x 171 171 fact(ij+u_ldown)=(1.-x)/(2.*omega*sin(lat)) -
codes/icosagcm/trunk/src/icosa_sw.f90
r12 r13 53 53 ! CALL WriteField("Ai",geom%Ai) 54 54 ! CALL WriteField("sum_ne",sum_ne) 55 56 55 CALL timeloop 57 56 -
codes/icosagcm/trunk/src/metric.f90
r12 r13 194 194 ENDDO 195 195 196 CALL dist_cart(vertex_glo(1,1,1)%xyz,vertex_glo(2,1,1)%xyz,d1)197 CALL dist_cart(vertex_glo(2,1,1)%xyz,vertex_glo(3,1,1)%xyz,d2)198 CALL dist_cart(vertex_glo(3,1,1)%xyz,vertex_glo(4,1,1)%xyz,d3)199 CALL div_arc(vertex_glo(1,1,1)%xyz,vertex_glo(3,1,1)%xyz,0.5,p1)196 ! CALL dist_cart(vertex_glo(1,1,1)%xyz,vertex_glo(2,1,1)%xyz,d1) 197 ! CALL dist_cart(vertex_glo(2,1,1)%xyz,vertex_glo(3,1,1)%xyz,d2) 198 ! CALL dist_cart(vertex_glo(3,1,1)%xyz,vertex_glo(4,1,1)%xyz,d3) 199 ! CALL div_arc(vertex_glo(1,1,1)%xyz,vertex_glo(3,1,1)%xyz,0.5,p1) 200 200 ! CALL div_arc(vertex_glo(2,1,1)%xyz,vertex_glo(1,3,1)%xyz,1./3,p1) 201 201 ! CALL div_arc(vertex_glo(1,2,1)%xyz,vertex_glo(3,1,1)%xyz,1./3,p2) … … 206 206 ! PRINT *,"dist",vertex_glo(2,1,1)%xyz 207 207 ! PRINT *,"dist",p1/sqrt(sum(p1**2)) 208 CALL Centroide(vertex_glo(1,1,1)%xyz,vertex_glo(2,1,1)%xyz,vertex_glo(1,2,1)%xyz,p1)209 CALL Centroide(vertex_glo(1,2,1)%xyz,vertex_glo(2,1,1)%xyz,vertex_glo(1,1,1)%xyz,p1)210 CALL Centroide(vertex_glo(1,2,1)%xyz,vertex_glo(1,1,1)%xyz,vertex_glo(2,1,1)%xyz,p1)211 CALL dist_cart(vertex_glo(1,1,1)%xyz,p1,d1)212 CALL dist_cart(vertex_glo(2,1,1)%xyz,p1,d2)213 CALL dist_cart(vertex_glo(1,2,1)%xyz,p1,d3)208 ! CALL Centroide(vertex_glo(1,1,1)%xyz,vertex_glo(2,1,1)%xyz,vertex_glo(1,2,1)%xyz,p1) 209 ! CALL Centroide(vertex_glo(1,2,1)%xyz,vertex_glo(2,1,1)%xyz,vertex_glo(1,1,1)%xyz,p1) 210 ! CALL Centroide(vertex_glo(1,2,1)%xyz,vertex_glo(1,1,1)%xyz,vertex_glo(2,1,1)%xyz,p1) 211 ! CALL dist_cart(vertex_glo(1,1,1)%xyz,p1,d1) 212 ! CALL dist_cart(vertex_glo(2,1,1)%xyz,p1,d2) 213 ! CALL dist_cart(vertex_glo(1,2,1)%xyz,p1,d3) 214 214 ! PRINT *, "dist",d1 215 215 ! PRINT *, "dist",d2 -
codes/icosagcm/trunk/src/spherical_geom.f90
r12 r13 125 125 M(2,1)=xb ; M(2,2)=yb ; M(2,3)=zb 126 126 M(3,1)=xc ; M(3,2)=yc ; M(3,3)=zc 127 128 CALL DGESV(3,1,M,3,IPIV,C,3,info)127 stop 'STOP' 128 ! CALL DGESV(3,1,M,3,IPIV,C,3,info) 129 129 130 130 END SUBROUTINE div_arc -
codes/icosagcm/trunk/src/timeloop_sw.f90
r12 r13 70 70 71 71 CALL allocate_caldyn 72 72 CALL init_dissip(dt) 73 73 74 74 CALL etat0_williamson(f_h,f_u) … … 78 78 79 79 CALL caldyn(f_h, f_u, f_dh, f_du) 80 80 81 81 82 IF (scheme==Euler) THEN … … 89 90 ENDIF 90 91 92 CALL dissip(f_u) 93 91 94 ENDDO 92 95
Note: See TracChangeset
for help on using the changeset viewer.