Changeset 954 for codes/icosagcm/trunk/src/dissip
- Timestamp:
- 07/15/19 12:29:31 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/dissip/dissip_gcm.F90
r953 r954 207 207 u=f_u(ind) 208 208 du=f_du(ind) 209 CALL compute_gradiv_inplace(u, 1,1)209 CALL compute_gradiv_inplace(u,Ai,ne,le,de,1,1) 210 210 ! This should be ported on GPU but we are running into compiler issues... 211 211 !$acc update host(u(:)) wait … … 306 306 u=f_u(ind) 307 307 du=f_du(ind) 308 CALL compute_gradrot_inplace(u, 1,1)308 CALL compute_gradrot_inplace(u,Av,ne,le,de,1,1) 309 309 ! This should be ported on GPU but we are running into compiler issues... 310 310 !$acc update host(u(:)) wait … … 401 401 theta=f_theta(ind) 402 402 dtheta=f_dtheta(ind) 403 CALL compute_divgrad_inplace(theta, 1,1)403 CALL compute_divgrad_inplace(theta,Ai,ne,le,de,1,1) 404 404 ! This should be ported on GPU but we are running into compiler issues... 405 405 !$acc update host(theta(:)) wait … … 707 707 CALL swap_geometry(ind) 708 708 due=f_due(ind) 709 CALL compute_gradiv_inplace(due, ll_begin,ll_end)709 CALL compute_gradiv_inplace(due,Ai,ne,le,de,ll_begin,ll_end) 710 710 ENDDO 711 711 ENDDO … … 757 757 CALL swap_geometry(ind) 758 758 due=f_due(ind) 759 CALL compute_gradrot_inplace(due, ll_begin,ll_end)759 CALL compute_gradrot_inplace(due,Av,ne,le,de,ll_begin,ll_end) 760 760 ENDDO 761 761 … … 805 805 CALL swap_geometry(ind) 806 806 dtheta=f_dtheta(ind) 807 CALL compute_divgrad_inplace(dtheta, ll_begin,ll_end)807 CALL compute_divgrad_inplace(dtheta,Ai,ne,le,de,ll_begin,ll_end) 808 808 ENDDO 809 809 … … 857 857 CALL swap_geometry(ind) 858 858 dtheta_rhodz=f_dtheta_rhodz(ind) 859 CALL compute_divgrad_inplace(dtheta_rhodz, ll_begin,ll_end)859 CALL compute_divgrad_inplace(dtheta_rhodz,Ai,ne,le,de,ll_begin,ll_end) 860 860 ENDDO 861 861 … … 884 884 END SUBROUTINE divgrad_theta_rhodz 885 885 886 SUBROUTINE compute_gradiv(ue,gradivu_e, llb,lle)886 SUBROUTINE compute_gradiv(ue,gradivu_e,Ai,ne,le,de,llb,lle) 887 887 INTEGER,INTENT(IN) :: llb 888 888 INTEGER,INTENT(IN) :: lle 889 889 REAL(rstd),INTENT(OUT) :: gradivu_e(iim*3*jjm,llm) 890 890 REAL(rstd),INTENT(IN) :: ue(iim*3*jjm,llm) 891 REAL(rstd),INTENT(IN) :: Ai(iim*jjm) 892 INTEGER,INTENT(IN) :: ne(iim*jjm,6) 893 REAL(rstd),INTENT(IN) :: le(iim*3*jjm) 894 REAL(rstd),INTENT(IN) :: de(iim*3*jjm) 891 895 892 896 gradivu_e = ue 893 CALL compute_gradiv_inplace(gradivu_e, llb,lle)897 CALL compute_gradiv_inplace(gradivu_e,Ai,ne,le,de,llb,lle) 894 898 895 899 END SUBROUTINE compute_gradiv 896 900 897 SUBROUTINE compute_gradiv_inplace(ue_gradivu_e,llb,lle) 898 USE geometry, ONLY : Ai, ne, le, de 901 SUBROUTINE compute_gradiv_inplace(ue_gradivu_e,Ai,ne,le,de,llb,lle) 899 902 INTEGER,INTENT(IN) :: llb 900 903 INTEGER,INTENT(IN) :: lle 901 904 REAL(rstd),INTENT(INOUT) :: ue_gradivu_e(iim*3*jjm,llm) 905 REAL(rstd),INTENT(IN) :: Ai(iim*jjm) 906 INTEGER,INTENT(IN) :: ne(iim*jjm,6) 907 REAL(rstd),INTENT(IN) :: le(iim*3*jjm) 908 REAL(rstd),INTENT(IN) :: de(iim*3*jjm) 902 909 REAL(rstd) :: divu_i(iim*jjm,llb:lle) 903 910 … … 945 952 END SUBROUTINE compute_gradiv_inplace 946 953 947 SUBROUTINE compute_divgrad(theta,divgrad_i, llb,lle)954 SUBROUTINE compute_divgrad(theta,divgrad_i,Ai,ne,le,de,llb,lle) 948 955 INTEGER,INTENT(IN) :: llb 949 956 INTEGER,INTENT(IN) :: lle 950 957 REAL(rstd),INTENT(IN) :: theta(iim*jjm,1:lle) 951 958 REAL(rstd),INTENT(OUT) :: divgrad_i(iim*jjm,1:lle) 959 REAL(rstd),INTENT(IN) :: Ai(iim*jjm) 960 INTEGER,INTENT(IN) :: ne(iim*jjm,6) 961 REAL(rstd),INTENT(IN) :: le(iim*3*jjm) 962 REAL(rstd),INTENT(IN) :: de(iim*3*jjm) 952 963 953 964 divgrad_i = theta 954 CALL compute_divgrad_inplace(divgrad_i, llb,lle)965 CALL compute_divgrad_inplace(divgrad_i,Ai,ne,le,de,llb,lle) 955 966 END SUBROUTINE compute_divgrad 956 967 957 SUBROUTINE compute_divgrad_inplace(theta_divgrad_i,llb,lle) 958 USE geometry, ONLY : Ai, ne, le, de 968 SUBROUTINE compute_divgrad_inplace(theta_divgrad_i,Ai,ne,le,de,llb,lle) 959 969 INTEGER,INTENT(IN) :: llb 960 970 INTEGER,INTENT(IN) :: lle 961 971 REAL(rstd),INTENT(INOUT) :: theta_divgrad_i(iim*jjm,1:lle) 972 REAL(rstd),INTENT(IN) :: Ai(iim*jjm) 973 INTEGER,INTENT(IN) :: ne(iim*jjm,6) 974 REAL(rstd),INTENT(IN) :: le(iim*3*jjm) 975 REAL(rstd),INTENT(IN) :: de(iim*3*jjm) 962 976 REAL(rstd) :: grad_e(3*iim*jjm,llb:lle) 963 977 … … 1003 1017 END SUBROUTINE compute_divgrad_inplace 1004 1018 1005 SUBROUTINE compute_gradrot(ue,gradrot_e, llb,lle)1019 SUBROUTINE compute_gradrot(ue,gradrot_e,Av,ne,le,de,llb,lle) 1006 1020 INTEGER,INTENT(IN) :: llb 1007 1021 INTEGER,INTENT(IN) :: lle 1008 1022 REAL(rstd),INTENT(IN) :: ue(iim*3*jjm,lle) 1009 1023 REAL(rstd),INTENT(OUT) :: gradrot_e(iim*3*jjm,lle) 1024 REAL(rstd),INTENT(IN) :: Av(2*iim*jjm) 1025 INTEGER,INTENT(IN) :: ne(iim*jjm,6) 1026 REAL(rstd),INTENT(IN) :: le(iim*3*jjm) 1027 REAL(rstd),INTENT(IN) :: de(iim*3*jjm) 1010 1028 1011 1029 gradrot_e = ue 1012 CALL compute_gradrot_inplace(gradrot_e, llb,lle)1030 CALL compute_gradrot_inplace(gradrot_e,Av,ne,le,de,llb,lle) 1013 1031 END SUBROUTINE compute_gradrot 1014 1032 1015 SUBROUTINE compute_gradrot_inplace(ue_gradrot_e,llb,lle) 1016 USE geometry, ONLY : Av, ne, le, de 1033 SUBROUTINE compute_gradrot_inplace(ue_gradrot_e,Av,ne,le,de,llb,lle) 1017 1034 INTEGER,INTENT(IN) :: llb 1018 1035 INTEGER,INTENT(IN) :: lle 1019 1036 REAL(rstd),INTENT(INOUT) :: ue_gradrot_e(iim*3*jjm,lle) 1037 REAL(rstd),INTENT(IN) :: Av(2*iim*jjm) 1038 INTEGER,INTENT(IN) :: ne(iim*jjm,6) 1039 REAL(rstd),INTENT(IN) :: le(iim*3*jjm) 1040 REAL(rstd),INTENT(IN) :: de(iim*3*jjm) 1020 1041 REAL(rstd) :: rot_v(2*iim*jjm,llb:lle) 1021 1042
Note: See TracChangeset
for help on using the changeset viewer.