Changeset 921


Ignore:
Timestamp:
06/19/19 01:37:50 (5 years ago)
Author:
dubos
Message:

devel : unique interface for compute_caldyn_fast_X, compute_caldyn_slow_hydro_X

Location:
codes/icosagcm/devel/src/dynamics
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/src/dynamics/caldyn_hevi.f90

    r920 r921  
    99  USE compute_caldyn_kv_mod, ONLY : compute_caldyn_kv 
    1010  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 
    1212  USE compute_caldyn_slow_NH_mod, ONLY : compute_caldyn_slow_NH 
    1313  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 
    1515  USE compute_NH_geopot_mod, ONLY : compute_NH_geopot 
    1616  IMPLICIT NONE 
     
    136136       END IF 
    137137       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 
    139140    ENDDO 
    140141     
     
    185186          hv=f_hv(ind) 
    186187          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) 
    188189       ELSE 
    189190          W = f_W(ind) 
  • codes/icosagcm/devel/src/dynamics/compute_caldyn_fast.F90

    r858 r921  
    11MODULE 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 
    38  IMPLICIT NONE 
    49  PRIVATE 
     
    611#include "../unstructured/unstructured.h90" 
    712 
    8   PUBLIC :: compute_caldyn_fast 
     13  PUBLIC :: compute_caldyn_fast_unst, compute_caldyn_fast_hex, compute_caldyn_fast_manual 
    914 
    1015CONTAINS 
     
    6570#endif END_DYSL 
    6671 
    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) 
    6873    USE ISO_C_BINDING, only : C_DOUBLE, C_FLOAT 
    69     USE earth_const 
    70     USE grid_param, ONLY : nqdyn 
    7174    USE data_unstructured_mod, ONLY : enter_trace, exit_trace, & 
    7275         id_fast, primal_num, dual_num, edge_num, & 
     
    8689  END SUBROUTINE compute_caldyn_fast_unst 
    8790 
    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) 
    8992    USE icosa 
    90     USE trace 
    91     USE caldyn_vars_mod 
    92     USE omp_para, ONLY : ll_begin, ll_end 
    9393    REAL(rstd),INTENT(IN)    :: tau                ! "solve" u-tau*du/dt = rhs 
    94     REAL(rstd),INTENT(INOUT) :: u(iim*3*jjm,llm)   ! OUT if tau>0 
    95     REAL(rstd),INTENT(IN)    :: rhodz(iim*jjm,llm) 
    9694    REAL(rstd),INTENT(IN)    :: theta(iim*jjm,llm,nqdyn) 
     95    REAL(rstd),INTENT(IN)    :: geopot(iim*jjm,llm+1) 
    9796    REAL(rstd),INTENT(INOUT) :: pk(iim*jjm,llm) 
    98     REAL(rstd),INTENT(INOUT) :: geopot(iim*jjm,llm+1) 
    99     REAL(rstd),INTENT(INOUT)   :: du(iim*3*jjm,llm) 
    100     REAL(rstd) :: berni(iim*jjm,llm)  ! Bernoulli function 
     97    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 
    101100    REAL(rstd) :: berniv(iim*jjm,llm)  ! moist Bernoulli function 
    102101 
    103     INTEGER :: i,j,ij,l 
     102    INTEGER :: ij,l 
    104103    REAL(rstd) :: cp_ik, qv, temp, chi, log_p_preff, due, due_right, due_lup, due_ldown 
    105104 
    106105    CALL trace_start("compute_caldyn_fast") 
    107  
    108     IF(dysl_caldyn_fast) THEN 
    109106#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") 
    111125 
    112126    ! Compute Bernoulli term 
     
    208222    END DO 
    209223 
    210     END IF ! dysl 
    211224    CALL trace_end("compute_caldyn_fast") 
    212225 
    213   END SUBROUTINE compute_caldyn_fast 
     226  END SUBROUTINE compute_caldyn_fast_manual 
    214227 
    215228END MODULE compute_caldyn_fast_mod 
  • codes/icosagcm/devel/src/dynamics/compute_caldyn_slow_hydro.F90

    r877 r921  
    11MODULE 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 
    38  IMPLICIT NONE 
    49  PRIVATE 
     
    611#include "../unstructured/unstructured.h90" 
    712 
    8   PUBLIC :: compute_caldyn_slow_hydro 
     13  PUBLIC :: compute_caldyn_slow_hydro_unst, & 
     14       compute_caldyn_slow_hydro_hex, compute_caldyn_slow_hydro_manual 
    915 
    1016CONTAINS 
     
    4753#endif END_DYSL 
    4854 
    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) 
    5056    USE ISO_C_BINDING, only : C_DOUBLE, C_FLOAT 
    51     USE grid_param, ONLY : nqdyn 
    5257    USE data_unstructured_mod, ONLY :left,right,edge_num,primal_num,dual_num,id_slow_hydro, & 
    5358        primal_deg,le_de,primal_edge,Ai,enter_trace, exit_trace 
    54     FIELD_MASS  :: rhodz,berni! IN 
    55     FIELD_THETA :: theta      ! IN 
     59    LOGICAL, INTENT(IN) :: zero 
     60    FIELD_MASS  :: rhodz, hv, Kv, berni  ! IN, IN, IN, BUF 
    5661    FIELD_U     :: u,hflux,du ! IN, OUT, OUT 
    5762    DECLARE_INDICES 
    5863    DECLARE_EDGES 
    59     LOGICAL, PARAMETER :: zero=.TRUE. 
    6064    NUM :: ke, uu 
    6165    START_TRACE(id_slow_hydro, 3,0,3) 
     
    6468  END SUBROUTINE compute_caldyn_slow_hydro_unst 
    6569 
    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) 
    6771    USE icosa 
    68     USE trace 
    69     USE omp_para, ONLY : ll_begin, ll_end 
    7072    USE caldyn_vars_mod 
    7173    LOGICAL, INTENT(IN) :: zero 
     
    8385 
    8486    CALL trace_start("compute_caldyn_slow_hydro") 
    85  
    86     IF(dysl_slow_hydro) THEN 
    87  
    8887#define BERNI(ij,l) berni(ij,l) 
    8988#include "../kernels_hex/caldyn_slow_hydro.k90" 
    9089#undef BERNI 
     90    CALL trace_end("compute_caldyn_slow_hydro")     
    9191 
    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") 
    93111 
    94112#define BERNI(ij) berni1(ij) 
     
    172190#undef BERNI 
    173191 
    174     END IF ! dysl 
    175192    CALL trace_end("compute_caldyn_slow_hydro")     
    176   END SUBROUTINE compute_caldyn_slow_hydro 
     193  END SUBROUTINE compute_caldyn_slow_hydro_manual 
    177194 
    178195END MODULE compute_caldyn_slow_hydro_mod 
Note: See TracChangeset for help on using the changeset viewer.