Ignore:
Timestamp:
06/21/19 01:01:34 (5 years ago)
Author:
dubos
Message:

devel : separate modules for caldyn_vert and caldyn_vert_NH

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/src/dynamics/compute_caldyn_Coriolis.F90

    r876 r928  
    11MODULE compute_caldyn_Coriolis_mod 
    2   USE grid_param, ONLY : llm 
     2  USE prec, ONLY : rstd 
     3  USE grid_param 
     4  USE earth_const 
     5  USE disvert_mod 
     6  USE omp_para 
     7  USE trace 
    38  IMPLICIT NONE 
    49  PRIVATE 
     
    611#include "../unstructured/unstructured.h90" 
    712 
    8   PUBLIC :: compute_caldyn_Coriolis 
     13  PUBLIC :: compute_caldyn_Coriolis_manual, & 
     14       compute_caldyn_Coriolis_unst, compute_caldyn_Coriolis_hex 
    915 
    1016CONTAINS 
     
    5561#endif END_DYSL 
    5662 
    57   SUBROUTINE compute_coriolis_unst(hflux,theta,qu,Ftheta, convm,dtheta_rhodz,du) 
     63  SUBROUTINE compute_caldyn_coriolis_unst(hflux,theta,qu, Ftheta, convm,dtheta_rhodz,du) 
    5864    USE ISO_C_BINDING, only : C_DOUBLE, C_FLOAT 
    59     USE grid_param, ONLY : nqdyn 
    6065    USE data_unstructured_mod, ONLY : id_coriolis, primal_num, dual_num, edge_num, & 
    6166          left, right,primal_deg,primal_edge,primal_ne,trisk_deg,wee,trisk,Ai, & 
    6267          enter_trace, exit_trace 
    63     FIELD_U     :: hflux, Ftheta, qu, du 
    64     FIELD_MASS  :: convm 
    65     FIELD_THETA :: theta, dtheta_rhodz 
     68    FIELD_U     :: hflux, Ftheta, qu, du ! IN, BUF, IN, INOUT 
     69    FIELD_MASS  :: convm                 ! BUF 
     70    FIELD_THETA :: theta, dtheta_rhodz   ! IN, OUT 
    6671    DECLARE_INDICES 
    6772    DECLARE_EDGES 
     
    7075#include "../kernels_unst/coriolis.k90" 
    7176    STOP_TRACE 
    72   END SUBROUTINE compute_coriolis_unst 
    73  
    74   SUBROUTINE compute_caldyn_Coriolis(hflux,theta,qu, convm,dtheta_rhodz,du) 
     77  END SUBROUTINE compute_caldyn_coriolis_unst 
     78 
     79  SUBROUTINE compute_caldyn_Coriolis_hex(hflux,theta,qu, Ftheta, convm,dtheta_rhodz,du) 
    7580    USE icosa 
    76     USE trace 
    7781    USE caldyn_vars_mod 
    78     USE omp_para, ONLY : ll_begin, ll_end 
    79     REAL(rstd),INTENT(IN)  :: hflux(3*iim*jjm,llm)  ! hflux in kg/s 
    80     REAL(rstd),INTENT(IN)  :: theta(iim*jjm,llm,nqdyn) ! active scalars 
    81     REAL(rstd),INTENT(IN)  :: qu(3*iim*jjm,llm) 
    82     REAL(rstd),INTENT(OUT) :: convm(iim*jjm,llm)  ! mass flux convergence 
    83     REAL(rstd),INTENT(OUT) :: dtheta_rhodz(iim*jjm,llm,nqdyn) 
     82    REAL(rstd),INTENT(IN)    :: hflux(3*iim*jjm,llm)  ! hflux in kg/s 
     83    REAL(rstd),INTENT(IN)    :: theta(iim*jjm,llm,nqdyn) ! active scalars 
     84    REAL(rstd),INTENT(IN)    :: qu(3*iim*jjm,llm) 
     85    REAL(rstd), INTENT(OUT)  :: Ftheta(3*iim*jjm,llm)  ! potential temperature flux 
     86    REAL(rstd),INTENT(OUT)   :: convm(iim*jjm,llm)  ! mass flux convergence 
     87    REAL(rstd),INTENT(OUT)   :: dtheta_rhodz(iim*jjm,llm,nqdyn) 
    8488    REAL(rstd),INTENT(INOUT) :: du(3*iim*jjm,llm) 
    85      
    86     REAL(rstd) :: Ftheta(3*iim*jjm,llm)  ! potential temperature flux 
    8789    REAL(rstd) :: uu_right, uu_lup, uu_ldown, du_trisk, divF 
    8890    INTEGER :: ij,iq,l,kdown 
    89  
    9091    CALL trace_start("compute_caldyn_Coriolis") 
    9192 
    92     IF(dysl_caldyn_coriolis) THEN 
    93  
    9493#include "../kernels_hex/coriolis.k90" 
    9594 
    96     ELSE 
    97 #define FTHETA(ij) Ftheta(ij,1) 
     95    CALL trace_end("compute_caldyn_Coriolis") 
     96  END SUBROUTINE compute_caldyn_Coriolis_hex 
     97 
     98  SUBROUTINE compute_caldyn_Coriolis_manual(hflux,theta,qu, Ftheta, convm,dtheta_rhodz,du) 
     99    USE icosa 
     100    USE caldyn_vars_mod 
     101    REAL(rstd),INTENT(IN)    :: hflux(3*iim*jjm,llm)  ! hflux in kg/s 
     102    REAL(rstd),INTENT(IN)    :: theta(iim*jjm,llm,nqdyn) ! active scalars 
     103    REAL(rstd),INTENT(IN)    :: qu(3*iim*jjm,llm) 
     104    REAL(rstd),INTENT(IN)    :: Ftheta(3*iim*jjm,llm)  ! ignored in favor of local buffer 
     105    REAL(rstd),INTENT(OUT)   :: convm(iim*jjm,llm)  ! mass flux convergence 
     106    REAL(rstd),INTENT(OUT)   :: dtheta_rhodz(iim*jjm,llm,nqdyn) 
     107    REAL(rstd),INTENT(INOUT) :: du(3*iim*jjm,llm) 
     108    REAL(rstd)  :: buf_Ftheta(3*iim*jjm)  ! local buffer for potential temperature flux 
     109    REAL(rstd) :: uu_right, uu_lup, uu_ldown, du_trisk, divF 
     110    INTEGER :: ij,iq,l,kdown 
     111 
     112    CALL trace_start("compute_caldyn_Coriolis") 
     113 
     114#define FTHETA(ij) buf_Ftheta(ij) 
    98115 
    99116    DO l=ll_begin, ll_end 
     
    275292#undef FTHETA 
    276293 
    277     END IF ! dysl 
    278  
    279294    CALL trace_end("compute_caldyn_Coriolis") 
    280295 
    281   END SUBROUTINE compute_caldyn_Coriolis 
     296  END SUBROUTINE compute_caldyn_Coriolis_manual 
    282297   
    283298END MODULE compute_caldyn_Coriolis_mod 
Note: See TracChangeset for help on using the changeset viewer.