Ignore:
Timestamp:
05/22/12 18:06:53 (12 years ago)
Author:
ymipsl
Message:

some update

YM

Location:
codes/icosagcm/trunk/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/dissip.f90

    r12 r13  
    66  TYPE(t_field),POINTER,SAVE :: f_gradrot(:) 
    77  TYPE(t_request),POINTER :: req_dissip(:)  
    8  
     8  TYPE(t_field),POINTER,SAVE :: f_due(:) 
     9  
    910  INTEGER,PARAMETER :: nitergdiv=1 
    1011  INTEGER,PARAMETER :: nitergrot=1 
     
    2324  IMPLICIT NONE   
    2425    CALL allocate_field(f_gradrot,field_u,type_real) 
     26    CALL allocate_field(f_due,field_u,type_real) 
    2527  END SUBROUTINE allocate_dissip 
    2628  
     
    4244  REAL(rstd)            :: r 
    4345  INTEGER :: i,j,n,ind,it 
     46  REAL :: sum1,sum2 
    4447 
    4548    tetagdiv=5000 
     
    184187      dumaxm1=dumax  
    185188      dumax=0 
    186  
     189      sum1=0 ; sum2=0 
    187190      DO ind=1,ndomain 
    188191        u=f_u(ind) 
    189192        du=f_du(ind) 
    190         CALL gradrot(u,du) 
     193        CALL gradrot(u,du,ind,sum1,sum2) 
    191194      ENDDO 
    192195 
     
    225228  
    226229   
    227   SUBROUTINE dissip(f_ue,f_due) 
     230  SUBROUTINE dissip(f_ue) 
    228231  USE domain_mod 
    229232  USE dimensions 
     
    232235  IMPLICIT NONE 
    233236    TYPE(t_field),POINTER :: f_ue(:) 
    234     TYPE(t_field),POINTER :: f_due(:) 
     237!    TYPE(t_field),POINTER :: f_due(:) 
    235238    REAL(rstd),POINTER         :: ue(:) 
    236239    REAL(rstd),POINTER         :: due(:) 
     
    238241    INTEGER :: ind 
    239242    REAL :: v 
     243    REAL :: sum1,sum2 
    240244     
    241245    CALL transfert_request(f_ue,req_dissip) 
    242246    CALL transfert_request(f_ue,req_dissip) 
    243  
     247    sum1=0 ; sum2=0 
    244248    DO ind=1,ndomain 
    245249      CALL swap_dimensions(ind) 
     
    250254      CALL gradiv(ue,due) 
    251255      due=due*dtdissip/tetagdiv 
    252       CALL gradrot(ue,gradrot_e) 
     256      CALL gradrot(ue,gradrot_e,ind,sum1,sum2) 
    253257      due=due+gradrot_e*dtdissip/tetagrot  
    254258    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       
    256269  END SUBROUTINE dissip 
    257270   
     
    271284      DO i=ii_begin,ii_end 
    272285        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)  +  & 
    274287                             ne(n,rup)*ue(n+u_rup)*le(n+u_rup)        +  &   
    275288                             ne(n,lup)*ue(n+u_lup)*le(n+u_lup)        +  &   
     
    285298        n=(j-1)*iim+i 
    286299  
    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) ) 
    292305 
    293306      ENDDO 
     
    297310      DO i=ii_begin,ii_end 
    298311        n=(j-1)*iim+i 
    299         gradivu_e(n+u_right)=-gradivu_e(n+u_right)*cdivu 
    300         gradivu_e(n+u_lup)=-gradivu_e(n+u_lup)*cdivu 
    301         gradivu_e(n+u_ldown)=-gradivu_e(n+u_ldown)*cdivu 
     312        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 
    302315      ENDDO 
    303316    ENDDO 
     
    308321   
    309322   
    310   SUBROUTINE gradrot(ue,gradrot_e) 
     323  SUBROUTINE gradrot(ue,gradrot_e,ind,sum1,sum2) 
    311324  USE domain_mod 
    312325  USE dimensions 
     
    316329    REAL(rstd),INTENT(IN)  :: ue(iim*3*jjm) 
    317330    REAL(rstd),INTENT(OUT) :: gradrot_e(iim*3*jjm) 
     331    INTEGER,INTENT(IN) :: ind 
     332    REAL,INTENT(OUT) ::sum1,sum2 
    318333    REAL(rstd)             :: rot_v(2*iim*jjm) 
    319334 
     
    349364    ENDDO 
    350365 
     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       
    351431    DO j=jj_begin,jj_end 
    352432      DO i=ii_begin,ii_end 
     
    359439      ENDDO 
    360440    ENDDO   
     441     
     442     
    361443  END SUBROUTINE  
    362444 
  • codes/icosagcm/trunk/src/etat0_academic.f90

    r12 r13  
    157157 
    158158         CALL xyz2lonlat(xyz_e(ij+u_right,:),lon,lat) 
    159          IF (abs(sin(lat)<1.e-4)) lat=1e-4 
     159         IF (abs(sin(lat))<1.e-4) lat=1e-4 
    160160         x=cos(lat) ; x=x*x ; x=x*x ; x=x*x 
    161161         fact(ij+u_right)=(1.-x)/(2.*omega*sin(lat)) 
    162162 
    163163         CALL xyz2lonlat(xyz_e(ij+u_lup,:),lon,lat) 
    164          IF (abs(sin(lat)<1.e-4)) lat=1e-4 
     164         IF (abs(sin(lat))<1.e-4) lat=1e-4 
    165165         x=cos(lat) ; x=x*x ; x=x*x ; x=x*x 
    166166         fact(ij+u_lup)=(1.-x)/(2.*omega*sin(lat)) 
    167167 
    168168         CALL xyz2lonlat(xyz_e(ij+u_ldown,:),lon,lat) 
    169          IF (abs(sin(lat)<1.e-4)) lat=1e-4 
     169         IF (abs(sin(lat))<1.e-4) lat=1e-4 
    170170         x=cos(lat) ; x=x*x ; x=x*x ; x=x*x 
    171171         fact(ij+u_ldown)=(1.-x)/(2.*omega*sin(lat)) 
  • codes/icosagcm/trunk/src/icosa_sw.f90

    r12 r13  
    5353!  CALL WriteField("Ai",geom%Ai) 
    5454!  CALL WriteField("sum_ne",sum_ne) 
    55  
    5655 CALL timeloop 
    5756   
  • codes/icosagcm/trunk/src/metric.f90

    r12 r13  
    194194   ENDDO 
    195195 
    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) 
    200200!  CALL div_arc(vertex_glo(2,1,1)%xyz,vertex_glo(1,3,1)%xyz,1./3,p1) 
    201201!  CALL div_arc(vertex_glo(1,2,1)%xyz,vertex_glo(3,1,1)%xyz,1./3,p2) 
     
    206206!  PRINT *,"dist",vertex_glo(2,1,1)%xyz 
    207207!  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)  
    214214!  PRINT *, "dist",d1 
    215215!  PRINT *, "dist",d2 
  • codes/icosagcm/trunk/src/spherical_geom.f90

    r12 r13  
    125125  M(2,1)=xb ; M(2,2)=yb ; M(2,3)=zb 
    126126  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) 
    129129   
    130130END SUBROUTINE div_arc 
  • codes/icosagcm/trunk/src/timeloop_sw.f90

    r12 r13  
    7070 
    7171  CALL allocate_caldyn 
    72    
     72  CALL init_dissip(dt) 
    7373 
    7474  CALL etat0_williamson(f_h,f_u) 
     
    7878 
    7979    CALL caldyn(f_h, f_u, f_dh, f_du) 
     80     
    8081 
    8182    IF (scheme==Euler) THEN 
     
    8990    ENDIF 
    9091 
     92    CALL dissip(f_u)    
     93 
    9194  ENDDO 
    9295   
Note: See TracChangeset for help on using the changeset viewer.