Changeset 921 for codes/icosagcm/devel/src
- Timestamp:
- 06/19/19 01:37:50 (5 years ago)
- Location:
- codes/icosagcm/devel/src/dynamics
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/dynamics/caldyn_hevi.f90
r920 r921 9 9 USE compute_caldyn_kv_mod, ONLY : compute_caldyn_kv 10 10 USE compute_caldyn_Coriolis_mod, ONLY : compute_caldyn_Coriolis 11 USE compute_caldyn_slow_hydro_mod, ONLY : compute_caldyn_slow_hydro 11 USE compute_caldyn_slow_hydro_mod, ONLY : compute_caldyn_slow_hydro => compute_caldyn_slow_hydro_manual 12 12 USE compute_caldyn_slow_NH_mod, ONLY : compute_caldyn_slow_NH 13 13 USE compute_caldyn_solver_mod, ONLY : compute_caldyn_solver 14 USE compute_caldyn_fast_mod, ONLY : compute_caldyn_fast 14 USE compute_caldyn_fast_mod, ONLY : compute_caldyn_fast => compute_caldyn_fast_manual 15 15 USE compute_NH_geopot_mod, ONLY : compute_NH_geopot 16 16 IMPLICIT NONE … … 136 136 END IF 137 137 u=f_u(ind) 138 CALL compute_caldyn_fast(tau,u,mass,theta,pk,geopot,du) ! computes du_fast and updates u 138 Kv=f_Kv(ind) ! buffer for partial Bernoulli function 139 CALL compute_caldyn_fast(tau,theta,geopot, pk,Kv,du,u) ! computes du_fast and updates u 139 140 ENDDO 140 141 … … 185 186 hv=f_hv(ind) 186 187 Kv=f_Kv(ind) 187 CALL compute_caldyn_slow_hydro( u,mass,hv, hflux,Kv,du, .TRUE.)188 CALL compute_caldyn_slow_hydro(.TRUE., u,mass,hv,Kv, Kv, hflux,du) 188 189 ELSE 189 190 W = f_W(ind) -
codes/icosagcm/devel/src/dynamics/compute_caldyn_fast.F90
r858 r921 1 1 MODULE compute_caldyn_fast_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_fast 13 PUBLIC :: compute_caldyn_fast_unst, compute_caldyn_fast_hex, compute_caldyn_fast_manual 9 14 10 15 CONTAINS … … 65 70 #endif END_DYSL 66 71 67 SUBROUTINE compute_caldyn_fast_unst(tau, pk,berni,theta,geopot,du,u)72 SUBROUTINE compute_caldyn_fast_unst(tau,theta,geopot, pk,berni,du,u) 68 73 USE ISO_C_BINDING, only : C_DOUBLE, C_FLOAT 69 USE earth_const70 USE grid_param, ONLY : nqdyn71 74 USE data_unstructured_mod, ONLY : enter_trace, exit_trace, & 72 75 id_fast, primal_num, dual_num, edge_num, & … … 86 89 END SUBROUTINE compute_caldyn_fast_unst 87 90 88 SUBROUTINE compute_caldyn_fast (tau,u,rhodz,theta,pk,geopot,du)91 SUBROUTINE compute_caldyn_fast_hex(tau,theta,geopot, pk,berni,du,u) 89 92 USE icosa 90 USE trace91 USE caldyn_vars_mod92 USE omp_para, ONLY : ll_begin, ll_end93 93 REAL(rstd),INTENT(IN) :: tau ! "solve" u-tau*du/dt = rhs 94 REAL(rstd),INTENT(INOUT) :: u(iim*3*jjm,llm) ! OUT if tau>095 REAL(rstd),INTENT(IN) :: rhodz(iim*jjm,llm)96 94 REAL(rstd),INTENT(IN) :: theta(iim*jjm,llm,nqdyn) 95 REAL(rstd),INTENT(IN) :: geopot(iim*jjm,llm+1) 97 96 REAL(rstd),INTENT(INOUT) :: pk(iim*jjm,llm) 98 REAL(rstd),INTENT(INOUT) :: geopot(iim*jjm,llm+1)99 REAL(rstd),INTENT(INOUT) 100 REAL(rstd) :: berni(iim*jjm,llm) ! Bernoulli function97 REAL(rstd),INTENT(INOUT) :: berni(iim*jjm,llm) ! partial Bernoulli function 98 REAL(rstd),INTENT(INOUT) :: du(iim*3*jjm,llm) 99 REAL(rstd),INTENT(INOUT) :: u(iim*3*jjm,llm) ! INOUT if tau>0 101 100 REAL(rstd) :: berniv(iim*jjm,llm) ! moist Bernoulli function 102 101 103 INTEGER :: i ,j,ij,l102 INTEGER :: ij,l 104 103 REAL(rstd) :: cp_ik, qv, temp, chi, log_p_preff, due, due_right, due_lup, due_ldown 105 104 106 105 CALL trace_start("compute_caldyn_fast") 107 108 IF(dysl_caldyn_fast) THEN109 106 #include "../kernels_hex/caldyn_fast.k90" 110 ELSE 107 CALL trace_end("compute_caldyn_fast") 108 END SUBROUTINE compute_caldyn_fast_hex 109 110 SUBROUTINE compute_caldyn_fast_manual(tau,theta,geopot, pk,berni,du,u) 111 USE icosa 112 REAL(rstd),INTENT(IN) :: tau ! "solve" u-tau*du/dt = rhs 113 REAL(rstd),INTENT(IN) :: theta(iim*jjm,llm,nqdyn) 114 REAL(rstd),INTENT(IN) :: geopot(iim*jjm,llm+1) 115 REAL(rstd),INTENT(INOUT) :: pk(iim*jjm,llm) 116 REAL(rstd),INTENT(INOUT) :: berni(iim*jjm,llm) ! partial Bernoulli function 117 REAL(rstd),INTENT(INOUT) :: du(iim*3*jjm,llm) 118 REAL(rstd),INTENT(INOUT) :: u(iim*3*jjm,llm) ! INOUT if tau>0 119 REAL(rstd) :: berniv(iim*jjm,llm) ! moist Bernoulli function 120 121 INTEGER :: ij,l 122 REAL(rstd) :: cp_ik, qv, temp, chi, log_p_preff, due, due_right, due_lup, due_ldown 123 124 CALL trace_start("compute_caldyn_fast") 111 125 112 126 ! Compute Bernoulli term … … 208 222 END DO 209 223 210 END IF ! dysl211 224 CALL trace_end("compute_caldyn_fast") 212 225 213 END SUBROUTINE compute_caldyn_fast 226 END SUBROUTINE compute_caldyn_fast_manual 214 227 215 228 END MODULE compute_caldyn_fast_mod -
codes/icosagcm/devel/src/dynamics/compute_caldyn_slow_hydro.F90
r877 r921 1 1 MODULE compute_caldyn_slow_hydro_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_slow_hydro 13 PUBLIC :: compute_caldyn_slow_hydro_unst, & 14 compute_caldyn_slow_hydro_hex, compute_caldyn_slow_hydro_manual 9 15 10 16 CONTAINS … … 47 53 #endif END_DYSL 48 54 49 SUBROUTINE compute_caldyn_slow_hydro_unst( rhodz,theta,u, berni,hflux,du)55 SUBROUTINE compute_caldyn_slow_hydro_unst(zero, u,rhodz,hv,Kv, berni, hflux,du) 50 56 USE ISO_C_BINDING, only : C_DOUBLE, C_FLOAT 51 USE grid_param, ONLY : nqdyn52 57 USE data_unstructured_mod, ONLY :left,right,edge_num,primal_num,dual_num,id_slow_hydro, & 53 58 primal_deg,le_de,primal_edge,Ai,enter_trace, exit_trace 54 FIELD_MASS :: rhodz,berni! IN55 FIELD_ THETA :: theta ! IN59 LOGICAL, INTENT(IN) :: zero 60 FIELD_MASS :: rhodz, hv, Kv, berni ! IN, IN, IN, BUF 56 61 FIELD_U :: u,hflux,du ! IN, OUT, OUT 57 62 DECLARE_INDICES 58 63 DECLARE_EDGES 59 LOGICAL, PARAMETER :: zero=.TRUE.60 64 NUM :: ke, uu 61 65 START_TRACE(id_slow_hydro, 3,0,3) … … 64 68 END SUBROUTINE compute_caldyn_slow_hydro_unst 65 69 66 SUBROUTINE compute_caldyn_slow_hydro (u,rhodz,hv, hflux,Kv,du, zero)70 SUBROUTINE compute_caldyn_slow_hydro_hex(zero, u,rhodz,hv,Kv, berni, hflux,du) 67 71 USE icosa 68 USE trace69 USE omp_para, ONLY : ll_begin, ll_end70 72 USE caldyn_vars_mod 71 73 LOGICAL, INTENT(IN) :: zero … … 83 85 84 86 CALL trace_start("compute_caldyn_slow_hydro") 85 86 IF(dysl_slow_hydro) THEN87 88 87 #define BERNI(ij,l) berni(ij,l) 89 88 #include "../kernels_hex/caldyn_slow_hydro.k90" 90 89 #undef BERNI 90 CALL trace_end("compute_caldyn_slow_hydro") 91 91 92 ELSE 92 END SUBROUTINE compute_caldyn_slow_hydro_hex 93 94 SUBROUTINE compute_caldyn_slow_hydro_manual(zero, u,rhodz,hv,Kv, berni, hflux,du) 95 USE icosa 96 USE caldyn_vars_mod 97 LOGICAL, INTENT(IN) :: zero 98 REAL(rstd),INTENT(IN) :: u(3*iim*jjm,llm) ! prognostic "velocity" 99 REAL(rstd),INTENT(IN) :: Kv(2*iim*jjm,llm) ! kinetic energy at vertices 100 REAL(rstd),INTENT(IN) :: hv(2*iim*jjm,llm) ! height/mass averaged to vertices 101 REAL(rstd),INTENT(IN) :: rhodz(iim*jjm,llm) 102 REAL(rstd),INTENT(OUT) :: hflux(3*iim*jjm,llm) ! hflux in kg/s 103 REAL(rstd),INTENT(INOUT) :: du(3*iim*jjm,llm) 104 105 REAL(rstd) :: berni(iim*jjm,llm) ! Bernoulli function 106 REAL(rstd) :: berni1(iim*jjm) ! Bernoulli function 107 REAL(rstd) :: uu_right, uu_lup, uu_ldown, ke, uu 108 INTEGER :: ij,l 109 110 CALL trace_start("compute_caldyn_slow_hydro") 93 111 94 112 #define BERNI(ij) berni1(ij) … … 172 190 #undef BERNI 173 191 174 END IF ! dysl175 192 CALL trace_end("compute_caldyn_slow_hydro") 176 END SUBROUTINE compute_caldyn_slow_hydro 193 END SUBROUTINE compute_caldyn_slow_hydro_manual 177 194 178 195 END MODULE compute_caldyn_slow_hydro_mod
Note: See TracChangeset
for help on using the changeset viewer.