Changeset 728 for codes/icosagcm


Ignore:
Timestamp:
08/23/18 17:38:00 (6 years ago)
Author:
dubos
Message:

devel : diagnose consistent kinetic energy using new req_z1_scal (r711)

Location:
codes/icosagcm/devel/src/diagnostics
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/src/diagnostics/kinetic.f90

    r533 r728  
    33PRIVATE 
    44 
    5 PUBLIC :: kinetic, kinetic_v, kinetic_new, gradient 
     5PUBLIC :: kinetic, kinetic_new, gradient 
    66 
    77CONTAINS 
     
    1818   
    1919    CALL transfert_request(f_ue,req_e1_vect) 
    20     CALL transfert_request(f_ue,req_e1_vect) 
    2120 
    2221    DO ind=1,ndomain 
     
    2625      ue=f_ue(ind) 
    2726      Ki=f_Ki(ind) 
    28       CALL compute_kinetic(ue, Ki) 
     27      CALL compute_kinetic_trisk(ue, Ki) 
    2928    ENDDO   
    3029  END SUBROUTINE kinetic 
    3130   
    32   SUBROUTINE kinetic_new(f_ue,f_Ki) 
     31  SUBROUTINE kinetic_new(f_ue,f_Kv,f_Ki) 
    3332    USE icosa 
    3433    IMPLICIT NONE 
    3534    TYPE(t_field), POINTER :: f_ue(:) 
     35    TYPE(t_field), POINTER :: f_Kv(:) 
    3636    TYPE(t_field), POINTER :: f_Ki(:) 
    3737     
    3838    REAL(rstd), POINTER :: ue(:,:) 
     39    REAL(rstd), POINTER :: Kv(:,:) 
    3940    REAL(rstd), POINTER :: Ki(:,:) 
    4041    INTEGER :: ind 
    4142     
    42     CALL transfert_request(f_ue,req_e1_vect) 
    43     CALL transfert_request(f_ue,req_e1_vect) 
    44      
    45     DO ind=1,ndomain 
    46        IF (.NOT. assigned_domain(ind)) CYCLE 
    47        CALL swap_dimensions(ind) 
    48        CALL swap_geometry(ind) 
    49        ue=f_ue(ind) 
    50        Ki=f_Ki(ind) 
    51        CALL compute_Ki_new(ue, Ki) 
    52     ENDDO 
    53   END SUBROUTINE kinetic_new 
    54    
    55   SUBROUTINE kinetic_v(f_ue,f_Kv) 
    56   USE icosa 
    57   IMPLICIT NONE 
    58     TYPE(t_field), POINTER :: f_ue(:) 
    59     TYPE(t_field), POINTER :: f_Kv(:) 
    60    
    61     REAL(rstd), POINTER :: ue(:,:) 
    62     REAL(rstd), POINTER :: Kv(:,:) 
    63     INTEGER :: ind 
    64    
    65     CALL transfert_request(f_ue,req_e1_vect) 
    6643    CALL transfert_request(f_ue,req_e1_vect) 
    6744 
     
    7350      Kv=f_Kv(ind) 
    7451      CALL compute_kv(ue, Kv) 
    75     ENDDO   
    76   END SUBROUTINE kinetic_v 
     52    ENDDO 
     53     
     54    CALL transfert_request(f_Kv,req_z1_scal) 
     55 
     56    DO ind=1,ndomain 
     57       IF (.NOT. assigned_domain(ind)) CYCLE 
     58       CALL swap_dimensions(ind) 
     59       CALL swap_geometry(ind) 
     60       Kv=f_Kv(ind) 
     61       Ki=f_Ki(ind) 
     62       CALL compute_Ki_from_Kv(Kv, Ki) 
     63    ENDDO 
     64  END SUBROUTINE kinetic_new 
    7765   
    78   SUBROUTINE compute_kinetic(ue, Ki) 
     66  SUBROUTINE compute_kinetic_trisk(ue, Ki) 
    7967  USE icosa 
    8068  USE omp_para 
     
    9987      ENDDO 
    10088    ENDDO 
    101   END SUBROUTINE compute_kinetic 
     89  END SUBROUTINE compute_kinetic_trisk 
    10290   
    10391  SUBROUTINE compute_kv(ue, Kv) 
     
    113101     
    114102    DO l=ll_begin,ll_end 
     103      Kv(:,l)=0. 
    115104      DO ij=ij_begin,ij_end 
    116105          Kv(ij+z_up,l) = (radius**2/Av(ij+z_up))*(                         & 
     
    127116  END SUBROUTINE compute_kv 
    128117   
    129   SUBROUTINE compute_Ki_new(ue, Ki) 
     118  SUBROUTINE compute_Ki_from_Kv(Kv, Ki) 
    130119    USE icosa 
    131120    USE omp_para 
    132121    IMPLICIT NONE 
    133     REAL(rstd),INTENT(IN) :: ue(3*iim*jjm,llm) 
    134122    REAL(rstd),INTENT(OUT):: Ki(iim*jjm,llm) 
    135     REAL(rstd) :: Kv(2*iim*jjm,llm) 
    136     INTEGER :: ij,l, u_up, u_down 
    137      
    138     CALL compute_kv(ue,Kv) 
     123    REAL(rstd), INTENT(IN) :: Kv(2*iim*jjm,llm) 
     124    INTEGER :: ij,l 
    139125     
    140126    DO l=ll_begin,ll_end 
     
    148134       END DO 
    149135    END DO 
    150   END SUBROUTINE compute_Ki_new 
     136  END SUBROUTINE compute_Ki_from_Kv 
    151137   
    152138  SUBROUTINE gradient(f_berni, f_du) 
  • codes/icosagcm/devel/src/diagnostics/observable.f90

    r714 r728  
    4646    USE theta2theta_rhodz_mod 
    4747    USE omega_mod 
     48    USE kinetic_mod 
     49 
    4850    LOGICAL, INTENT(IN) :: init 
    4951    INTEGER :: l 
     
    155157       CALL vertical_interp(f_pmid,f_buf_i,f_buf_s,50000.) 
    156158       CALL output_field("omega500",f_buf_s) 
     159    END IF 
     160 
     161    CALL kinetic(f_u, f_buf_i) 
     162    IF(init) THEN 
     163       CALL output_field("kinetic_trisk_init",f_buf_i) 
     164    ELSE 
     165       CALL output_field("kinetic_trisk",f_buf_i) 
     166    END IF 
     167 
     168    CALL kinetic_new(f_u, f_buf_v, f_buf_i) 
     169    IF(init) THEN 
     170       CALL output_field("kinetic_init",f_buf_i) 
     171    ELSE 
     172       CALL output_field("kinetic",f_buf_i) 
    157173    END IF 
    158174 
Note: See TracChangeset for help on using the changeset viewer.