- Timestamp:
- 06/21/19 01:01:34 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/dynamics/compute_caldyn_Coriolis.F90
r876 r928 1 1 MODULE 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 3 8 IMPLICIT NONE 4 9 PRIVATE … … 6 11 #include "../unstructured/unstructured.h90" 7 12 8 PUBLIC :: compute_caldyn_Coriolis 13 PUBLIC :: compute_caldyn_Coriolis_manual, & 14 compute_caldyn_Coriolis_unst, compute_caldyn_Coriolis_hex 9 15 10 16 CONTAINS … … 55 61 #endif END_DYSL 56 62 57 SUBROUTINE compute_c oriolis_unst(hflux,theta,qu,Ftheta, convm,dtheta_rhodz,du)63 SUBROUTINE compute_caldyn_coriolis_unst(hflux,theta,qu, Ftheta, convm,dtheta_rhodz,du) 58 64 USE ISO_C_BINDING, only : C_DOUBLE, C_FLOAT 59 USE grid_param, ONLY : nqdyn60 65 USE data_unstructured_mod, ONLY : id_coriolis, primal_num, dual_num, edge_num, & 61 66 left, right,primal_deg,primal_edge,primal_ne,trisk_deg,wee,trisk,Ai, & 62 67 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 66 71 DECLARE_INDICES 67 72 DECLARE_EDGES … … 70 75 #include "../kernels_unst/coriolis.k90" 71 76 STOP_TRACE 72 END SUBROUTINE compute_c oriolis_unst73 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) 75 80 USE icosa 76 USE trace77 81 USE caldyn_vars_mod 78 USE omp_para, ONLY : ll_begin, ll_end79 REAL(rstd),INTENT(IN) :: hflux(3*iim*jjm,llm) ! hflux in kg/s80 REAL(rstd),INTENT(IN) :: theta(iim*jjm,llm,nqdyn) ! active scalars81 REAL(rstd), INTENT(IN) :: qu(3*iim*jjm,llm)82 REAL(rstd),INTENT(OUT) :: convm(iim*jjm,llm) ! mass flux convergence83 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) 84 88 REAL(rstd),INTENT(INOUT) :: du(3*iim*jjm,llm) 85 86 REAL(rstd) :: Ftheta(3*iim*jjm,llm) ! potential temperature flux87 89 REAL(rstd) :: uu_right, uu_lup, uu_ldown, du_trisk, divF 88 90 INTEGER :: ij,iq,l,kdown 89 90 91 CALL trace_start("compute_caldyn_Coriolis") 91 92 92 IF(dysl_caldyn_coriolis) THEN93 94 93 #include "../kernels_hex/coriolis.k90" 95 94 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) 98 115 99 116 DO l=ll_begin, ll_end … … 275 292 #undef FTHETA 276 293 277 END IF ! dysl278 279 294 CALL trace_end("compute_caldyn_Coriolis") 280 295 281 END SUBROUTINE compute_caldyn_Coriolis 296 END SUBROUTINE compute_caldyn_Coriolis_manual 282 297 283 298 END MODULE compute_caldyn_Coriolis_mod
Note: See TracChangeset
for help on using the changeset viewer.