Ignore:
Timestamp:
06/14/16 07:04:15 (8 years ago)
Author:
dubos
Message:

New kinetic energy (diagnostic)

File:
1 edited

Legend:

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

    r393 r427  
    2424    TYPE(t_field),POINTER :: le_de(:) ! le/de, 0. if de=0. 
    2525    TYPE(t_field),POINTER :: Riv(:) 
     26    TYPE(t_field),POINTER :: S1(:) 
     27    TYPE(t_field),POINTER :: S2(:) 
    2628    TYPE(t_field),POINTER :: Riv2(:) 
    2729    TYPE(t_field),POINTER :: ne(:) 
     
    7072  REAL(rstd),POINTER :: le(:)          ! lenght of a edge 
    7173!$OMP THREADPRIVATE(le) 
    72   REAL(rstd),POINTER :: le_de(:)          ! le/de 
     74  REAL(rstd),POINTER :: le_de(:)       ! le/de 
    7375!$OMP THREADPRIVATE(le_de) 
     76  REAL(rstd),POINTER :: S1(:,:)        ! area of sub-triangle 
     77!$OMP THREADPRIVATE(S1) 
     78  REAL(rstd),POINTER :: S2(:,:)        ! area of sub-tirangle 
     79!$OMP THREADPRIVATE(S2) 
    7480  REAL(rstd),POINTER :: Riv(:,:)       ! weight 
    7581!$OMP THREADPRIVATE(Riv) 
     
    122128    CALL allocate_field(geom%bi,field_t,type_real) 
    123129    CALL allocate_field(geom%Av,field_z,type_real) 
     130    CALL allocate_field(geom%S1,field_t,type_real,6) 
     131    CALL allocate_field(geom%S2,field_t,type_real,6) 
    124132    CALL allocate_field(geom%Riv,field_t,type_real,6) 
    125133    CALL allocate_field(geom%Riv2,field_t,type_real,6) 
     
    156164    le_de=geom%le_de(ind) 
    157165    Av=geom%Av(ind) 
     166    S1=geom%S1(ind) 
     167    S2=geom%S2(ind) 
    158168    Riv=geom%Riv(ind) 
    159169    Riv2=geom%Riv2(ind) 
     
    420430    INTEGER :: ind,i,j,k,n 
    421431    TYPE(t_domain),POINTER :: d 
    422     REAL(rstd) ::  S 
     432    REAL(rstd) ::  S12 
    423433    REAL(rstd) :: w(6) 
    424434    REAL(rstd) :: lon,lat 
    425435    INTEGER :: ii_glo,jj_glo 
    426     REAL(rstd) :: S1,S2 
     436    REAL(rstd) :: S 
    427437           
    428438       
     
    569579           
    570580          DO k=0,5 
    571             CALL surf_triangle(xyz_i(n,:), xyz_v(n+z_pos(k+1),:), xyz_i(n+t_pos(k+1),:),S1) 
    572             CALL surf_triangle(xyz_i(n,:), xyz_v(n+z_pos(k+1),:), xyz_i(n+t_pos(MOD(k+1+6,6)+1),:),S2) 
    573 !            Riv(n,k+1)=0.5*(S1+S2)*(radius**2) ! Definition modified for DEC 
    574             Riv(n,k+1)=0.5*(S1+S2)/Ai(n) 
    575             Riv2(n,k+1)=0.5*(S1+S2)/surf_v(k+1) 
     581            CALL surf_triangle(xyz_i(n,:), xyz_v(n+z_pos(k+1),:), xyz_i(n+t_pos(k+1),:),S1(n,k+1) ) 
     582            CALL surf_triangle(xyz_i(n,:), xyz_v(n+z_pos(k+1),:), xyz_i(n+t_pos(MOD(k+1+6,6)+1),:),S2(n,k+1) ) 
     583            S12 = .5*(S1(n,k+1)+S2(n,k+1)) 
     584            Riv(n,k+1)=S12/Ai(n) 
     585            Riv2(n,k+1)=S12/surf_v(k+1) 
    576586          ENDDO 
    577587 
Note: See TracChangeset for help on using the changeset viewer.