Changeset 604
- Timestamp:
- 10/24/17 01:32:57 (6 years ago)
- Location:
- codes/icosagcm/trunk/src
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/diagnostics/diagflux.F90
r599 r604 10 10 f_massfluxt(:), f_qfluxt(:), & ! time-integrated mass flux and tracer flux 11 11 f_qfluxt_lon(:), f_qfluxt_lat(:), & ! scalar flux reconstructed at cell centers 12 f_ epot(:), f_ekin(:), f_enthalpy(:), & ! time-averaged potential E, kinetic E and enthalpy13 f_ epotfluxt(:), f_ekinfluxt(:), f_enthalpyfluxt(:) ! time averaged 'fluxes' of epot, ekin and enthalpy12 f_ulont(:), f_thetat(:), f_epot(:), f_ekin(:), f_enthalpy(:), & ! time-averaged potential E, kinetic E and enthalpy 13 f_ulonfluxt(:), f_thetafluxt(:), f_epotfluxt(:), f_ekinfluxt(:), f_enthalpyfluxt(:) ! time averaged 'fluxes' of epot, ekin and enthalpy 14 14 LOGICAL :: diagflux_on 15 15 !$OMP THREADPRIVATE(diagflux_on) … … 26 26 ll = MERGE(llm,1,diagflux_on) 27 27 CALL allocate_field(f_masst, field_t,type_real,ll, name="masst") 28 CALL allocate_field(f_ulont, field_t,type_real,ll, name="ulont") 29 CALL allocate_field(f_thetat, field_t,type_real,ll, name="thetat") 28 30 CALL allocate_field(f_epot, field_t,type_real,ll, name="epot") 29 31 CALL allocate_field(f_ekin, field_t,type_real,ll, name="ekin") … … 31 33 CALL allocate_field(f_qmasst, field_t,type_real,ll,nqtot, name="qmasst") 32 34 CALL allocate_field(f_massfluxt, field_u,type_real,ll, name="massfluxt") 35 CALL allocate_field(f_ulonfluxt, field_u,type_real,ll, name="ulonfluxt") 36 CALL allocate_field(f_thetafluxt, field_u,type_real,ll, name="thetafluxt") 33 37 CALL allocate_field(f_epotfluxt, field_u,type_real,ll, name="epotfluxt") 34 38 CALL allocate_field(f_ekinfluxt, field_u,type_real,ll, name="ekinfluxt") … … 50 54 CALL swap_dimensions(ind) 51 55 ZERO2(f_masst) 56 ZERO2(f_ulont) 57 ZERO2(f_thetat) 52 58 ZERO2(f_epot) 53 59 ZERO2(f_ekin) … … 55 61 ZERO3(f_qmasst) 56 62 ZERO2(f_massfluxt) 63 ZERO2(f_ulonfluxt) 64 ZERO2(f_thetafluxt) 57 65 ZERO2(f_epotfluxt) 58 66 ZERO2(f_ekinfluxt) … … 110 118 !------------------------------------ Compute energy fluxes --------------------------------------- 111 119 112 SUBROUTINE diagflux_energy(frac, f_phis,f_rhodz,f_theta_rhodz,f_u, f_geopot,f_theta, f_hfluxt)120 SUBROUTINE diagflux_energy(frac, f_phis,f_rhodz,f_theta_rhodz,f_u, f_geopot,f_theta,f_pk, f_hfluxt) 113 121 REAL(rstd), INTENT(IN) :: frac 114 TYPE(t_field),POINTER :: f_phis(:),f_rhodz(:),f_theta_rhodz(:),f_u(:), f_geopot(:), f_theta(:), f_ hfluxt(:)122 TYPE(t_field),POINTER :: f_phis(:),f_rhodz(:),f_theta_rhodz(:),f_u(:), f_geopot(:), f_theta(:), f_pk(:), f_hfluxt(:) 115 123 REAL(rstd), POINTER :: phis(:), rhodz(:,:), theta_rhodz(:,:,:), u(:,:), & 116 geopot(:,:), pk(:,:,:), hfluxt(:,:), &117 epot(:,:), ekin(:,:), enthalpy(:,:), &118 epotflux(:,:), ekinflux(:,:), enthalpyflux(:,:)124 geopot(:,:), theta(:,:,:), pk(:,:), hfluxt(:,:), & 125 ulont(:,:), thetat(:,:), epot(:,:), ekin(:,:), enthalpy(:,:), & 126 thetaflux(:,:), ulonflux(:,:), epotflux(:,:), ekinflux(:,:), enthalpyflux(:,:) 119 127 INTEGER :: ind 120 128 DO ind=1,ndomain … … 128 136 u = f_u(ind) 129 137 geopot = f_geopot(ind) 130 pk = f_theta(ind) ! buffer 138 theta = f_theta(ind) ! buffer 139 pk = f_pk(ind) ! buffer 140 ulont = f_ulont(ind) 141 thetat = f_thetat(ind) 131 142 epot = f_epot(ind) 132 143 ekin = f_ekin(ind) 133 144 enthalpy = f_enthalpy(ind) 145 ulonflux = f_ulonfluxt(ind) 146 thetaflux = f_thetafluxt(ind) 134 147 epotflux = f_epotfluxt(ind) 135 148 ekinflux = f_ekinfluxt(ind) 136 149 enthalpyflux = f_enthalpyfluxt(ind) 137 CALL compute_diagflux_energy(frac,hfluxt, phis,rhodz,theta_rhodz,u, geopot,pk, epot,ekin,enthalpy, epotflux, ekinflux, enthalpyflux) 150 CALL compute_diagflux_energy(frac,hfluxt, phis,rhodz,theta_rhodz,u, geopot,theta,pk, & 151 ulont, thetat, epot, ekin, enthalpy, & 152 ulonflux, thetaflux, epotflux, ekinflux, enthalpyflux) 138 153 END DO 139 154 END SUBROUTINE diagflux_energy 140 155 141 SUBROUTINE compute_diagflux_energy(frac, massflux, phis,rhodz,theta_rhodz,u, geopot,pk, epot,ekin,enthalpy, epot_flux, ekin_flux, enthalpy_flux) 156 SUBROUTINE compute_diagflux_energy(frac, massflux, phis,rhodz,theta_rhodz,ue, geopot,theta,pk, & 157 ulon, thetat, epot, ekin, enthalpy, & 158 ulon_flux, thetat_flux, epot_flux, ekin_flux, enthalpy_flux) 142 159 USE disvert_mod, ONLY : ptop 143 160 REAL(rstd), INTENT(IN) :: frac 144 REAL(rstd), INTENT(IN) :: massflux(3*iim*jjm,llm), u (3*iim*jjm,llm),&161 REAL(rstd), INTENT(IN) :: massflux(3*iim*jjm,llm), ue(3*iim*jjm,llm),& 145 162 phis(iim*jjm), rhodz(iim*jjm,llm), theta_rhodz(iim*jjm,llm,nqtot) 146 REAL(rstd), INTENT(INOUT) :: geopot(iim*jjm,llm+1), pk(iim*jjm,llm) ! pk = buffer147 REAL(rstd), INTENT(INOUT), DIMENSION(iim*jjm, llm) :: epot, ekin, enthalpy148 REAL(rstd), INTENT(INOUT), DIMENSION(3*iim*jjm, llm) :: epot_flux, ekin_flux, enthalpy_flux149 REAL(rstd) :: energy, p_ik, theta_ik, temp_ik, gv, Rd 163 REAL(rstd), INTENT(INOUT) :: geopot(iim*jjm,llm+1), theta(iim*jjm,llm), pk(iim*jjm,llm) ! theta,pk = buffers 164 REAL(rstd), INTENT(INOUT), DIMENSION(iim*jjm, llm) :: ulon, thetat, epot, ekin, enthalpy 165 REAL(rstd), INTENT(INOUT), DIMENSION(3*iim*jjm, llm) :: ulon_flux, thetat_flux, epot_flux, ekin_flux, enthalpy_flux 166 REAL(rstd) :: energy, p_ik, theta_ik, temp_ik, gv, Rd, cx,cy,cz, ux,uy,uz, ue_le,ulon_i 150 167 INTEGER :: ij, l, ij_omp_begin_ext, ij_omp_end_ext 151 168 Rd = kappa*cpp 152 169 ! even if loops are of the _ext variant, we still need halo exchanges before reconstructing fluxes at cell centers 153 170 ! => loop over interior region 154 CALL distrib_level(ij_end-ij_begin+1,ij_omp_begin_ext,ij_omp_end_ext) 155 ij_omp_begin_ext = ij_omp_begin_ext+ij_begin-1 156 ij_omp_end_ext = ij_omp_end_ext+ij_begin-1 171 CALL distrib_level(ij_begin_ext, ij_end_ext, ij_omp_begin_ext,ij_omp_end_ext) 157 172 #include "../kernels/energy_fluxes.k90" 158 173 END SUBROUTINE compute_diagflux_energy -
codes/icosagcm/trunk/src/diagnostics/observable.f90
r599 r604 1 1 MODULE observable_mod 2 2 USE icosa 3 USE diagflux_mod 4 USE output_field_mod 3 5 IMPLICIT NONE 4 6 PRIVATE … … 38 40 USE disvert_mod 39 41 USE wind_mod 40 USE output_field_mod41 42 USE omp_para 42 43 USE time_mod … … 47 48 USE theta2theta_rhodz_mod 48 49 USE omega_mod 49 USE diagflux_mod50 50 LOGICAL, INTENT(IN) :: init 51 51 INTEGER :: l … … 166 166 CALL output_field("massflux_lat",f_buf_ulat) 167 167 168 CALL transfert_request(f_epotfluxt,req_e1_vect) 169 CALL flux_centered_lonlat(1./(itau_out*dt) , f_epotfluxt, f_buf_ulon, f_buf_ulat) 170 CALL output_field("epot_t", f_epot) 171 CALL output_field("epotflux_lon",f_buf_ulon) 172 CALL output_field("epotflux_lat",f_buf_ulat) 173 174 CALL transfert_request(f_ekinfluxt,req_e1_vect) 175 CALL flux_centered_lonlat(1./(itau_out*dt) , f_ekinfluxt, f_buf_ulon, f_buf_ulat) 176 CALL output_field("ekin_t", f_ekin) 177 CALL output_field("ekinflux_lon",f_buf_ulon) 178 CALL output_field("ekinflux_lat",f_buf_ulat) 179 180 CALL transfert_request(f_enthalpyfluxt,req_e1_vect) 181 CALL flux_centered_lonlat(1./(itau_out*dt) , f_enthalpyfluxt, f_buf_ulon, f_buf_ulat) 182 CALL output_field("enthalpy_t", f_enthalpy) 183 CALL output_field("enthalpyflux_lon",f_buf_ulon) 184 CALL output_field("enthalpyflux_lat",f_buf_ulat) 168 CALL output_energyflux(f_ulont, f_ulonfluxt, "ulon_t", "ulonflux_lon", "ulonflux_lat") 169 CALL output_energyflux(f_thetat, f_thetafluxt, "theta_t", "thetaflux_lon", "thetaflux_lat") 170 CALL output_energyflux(f_epot, f_epotfluxt, "epot_t", "epotflux_lon", "epotflux_lat") 171 CALL output_energyflux(f_ekin, f_ekinfluxt, "ekin_t", "ekinflux_lon", "ekinflux_lat") 172 CALL output_energyflux(f_enthalpy, f_enthalpyfluxt, "enthalpy_t", "enthalpyflux_lon", "enthalpyflux_lat") 185 173 186 174 CALL qflux_centered_lonlat(1./(itau_out*dt) , f_qfluxt, f_qfluxt_lon, f_qfluxt_lat) … … 192 180 END IF 193 181 END SUBROUTINE write_output_fields_basic 182 183 SUBROUTINE output_energyflux(f_energy, f_flux, name_energy, name_fluxlon, name_fluxlat) 184 TYPE(t_field), POINTER :: f_energy(:), f_flux(:) 185 CHARACTER(*), INTENT(IN) :: name_energy, name_fluxlon, name_fluxlat 186 CALL transfert_request(f_flux,req_e1_vect) 187 CALL flux_centered_lonlat(1./(itau_out*dt) , f_flux, f_buf_ulon, f_buf_ulat) 188 CALL output_field(name_energy, f_energy) 189 CALL output_field(name_fluxlon, f_buf_ulon) 190 CALL output_field(name_fluxlat, f_buf_ulat) 191 END SUBROUTINE output_energyflux 194 192 195 193 !------------------- Conversion from prognostic to observable variables ------------------ -
codes/icosagcm/trunk/src/dynamics/caldyn_kernels_base.F90
r580 r604 43 43 !$OMP BARRIER 44 44 45 CALL distrib_level(ij_end_ext-ij_begin_ext+1,ij_omp_begin_ext,ij_omp_end_ext) 46 ij_omp_begin_ext=ij_omp_begin_ext+ij_begin_ext-1 47 ij_omp_end_ext=ij_omp_end_ext+ij_begin_ext-1 45 CALL distrib_level(ij_begin_ext,ij_end_ext, ij_omp_begin_ext,ij_omp_end_ext) 48 46 49 47 Rd = kappa*cpp … … 190 188 CALL trace_start("compute_caldyn_vert") 191 189 192 CALL distrib_level(ij_end-ij_begin+1,ij_omp_begin,ij_omp_end) 193 ij_omp_begin=ij_omp_begin+ij_begin-1 194 ij_omp_end=ij_omp_end+ij_begin-1 190 CALL distrib_level(ij_begin,ij_end, ij_omp_begin,ij_omp_end) 195 191 196 192 ! REAL(rstd) :: wwuu(iim*3*jjm,llm+1) ! tmp var, don't know why but gain 30% on the whole code in opemp -
codes/icosagcm/trunk/src/dynamics/caldyn_kernels_hevi.F90
r580 r604 122 122 INTEGER :: iter, ij, l, ij_omp_begin_ext, ij_omp_end_ext 123 123 124 CALL distrib_level(ij_end_ext-ij_begin_ext+1,ij_omp_begin_ext,ij_omp_end_ext) 125 ij_omp_begin_ext=ij_omp_begin_ext+ij_begin_ext-1 126 ij_omp_end_ext=ij_omp_end_ext+ij_begin_ext-1 124 CALL distrib_level(ij_begin_ext,ij_end_ext, ij_omp_begin_ext,ij_omp_end_ext) 127 125 128 126 IF(dysl) THEN -
codes/icosagcm/trunk/src/kernels/energy_fluxes.k90
r599 r604 11 11 END DO 12 12 END DO 13 ! NB : at this point pressure is stored in array pk 14 ! pk then serves as buffer to store temperature 13 15 SELECT CASE(caldyn_thermo) 14 16 CASE(thermo_theta) … … 17 19 p_ik = pk(ij,l) 18 20 theta_ik = theta_rhodz(ij,l,1)/rhodz(ij,l) 21 theta(ij,l) = theta_ik 19 22 temp_ik = theta_ik*(p_ik/preff)**kappa 20 23 gv = (g*Rd)*temp_ik/p_ik … … 29 32 theta_ik = theta_rhodz(ij,l,1)/rhodz(ij,l) 30 33 temp_ik = Treff*exp((theta_ik + Rd*log(p_ik/preff))/cpp) 34 theta(ij,l) = Treff*exp(theta_ik/cpp) 31 35 gv = (g*Rd)*temp_ik/p_ik ! specific volume v = Rd*T/p 32 36 pk(ij,l) = temp_ik … … 37 41 !$OMP BARRIER 38 42 ! Now accumulate energies and energy fluxes 39 ! enthalpy40 43 ! NB : at this point temperature is stored in array pk 41 44 ! pk then serves as buffer to store energy 45 ! enthalpy 42 46 DO l = ll_begin, ll_end 43 47 !DIR$ SIMD … … 73 77 END DO 74 78 END DO 79 ! theta 80 DO l = ll_begin, ll_end 81 !DIR$ SIMD 82 DO ij=ij_begin_ext, ij_end_ext 83 energy = theta(ij,l) 84 thetat(ij,l) = thetat(ij,l) + frac*rhodz(ij,l)*energy 85 pk(ij,l) = energy 86 END DO 87 END DO 88 DO l = ll_begin, ll_end 89 !DIR$ SIMD 90 DO ij=ij_begin_ext, ij_end_ext 91 thetat_flux(ij+u_right,l) = thetat_flux(ij+u_right,l) + .5*massflux(ij+u_right,l)*(pk(ij,l)+pk(ij+t_right,l)) 92 thetat_flux(ij+u_lup,l) = thetat_flux(ij+u_lup,l) + .5*massflux(ij+u_lup,l)*(pk(ij,l)+pk(ij+t_lup,l)) 93 thetat_flux(ij+u_ldown,l) = thetat_flux(ij+u_ldown,l) + .5*massflux(ij+u_ldown,l)*(pk(ij,l)+pk(ij+t_ldown,l)) 94 END DO 95 END DO 75 96 ! kinetic energy 76 97 DO l = ll_begin, ll_end … … 78 99 DO ij=ij_begin_ext, ij_end_ext 79 100 energy=0.d0 80 energy = energy + le(ij+u_rup)*de(ij+u_rup)*u (ij+u_rup,l)**281 energy = energy + le(ij+u_lup)*de(ij+u_lup)*u (ij+u_lup,l)**282 energy = energy + le(ij+u_left)*de(ij+u_left)*u (ij+u_left,l)**283 energy = energy + le(ij+u_ldown)*de(ij+u_ldown)*u (ij+u_ldown,l)**284 energy = energy + le(ij+u_rdown)*de(ij+u_rdown)*u (ij+u_rdown,l)**285 energy = energy + le(ij+u_right)*de(ij+u_right)*u (ij+u_right,l)**2101 energy = energy + le(ij+u_rup)*de(ij+u_rup)*ue(ij+u_rup,l)**2 102 energy = energy + le(ij+u_lup)*de(ij+u_lup)*ue(ij+u_lup,l)**2 103 energy = energy + le(ij+u_left)*de(ij+u_left)*ue(ij+u_left,l)**2 104 energy = energy + le(ij+u_ldown)*de(ij+u_ldown)*ue(ij+u_ldown,l)**2 105 energy = energy + le(ij+u_rdown)*de(ij+u_rdown)*ue(ij+u_rdown,l)**2 106 energy = energy + le(ij+u_right)*de(ij+u_right)*ue(ij+u_right,l)**2 86 107 energy = energy * (.25/Ai(ij)) 87 108 ekin(ij,l) = ekin(ij,l) + frac*rhodz(ij,l)*energy … … 97 118 END DO 98 119 END DO 120 ! ulon 121 DO l = ll_begin, ll_end 122 !DIR$ SIMD 123 DO ij=ij_begin_ext, ij_end_ext 124 cx=centroid(ij,1) 125 cy=centroid(ij,2) 126 cz=centroid(ij,3) 127 ux=0. ; uy=0. ; uz=0. 128 ue_le = ne_rup*ue(ij+u_rup,l)*le(ij+u_rup) 129 ux = ux + ue_le*(.5*(xyz_v(ij+z_rup,1)+xyz_v(ij+z_up,1))-cx) 130 uy = uy + ue_le*(.5*(xyz_v(ij+z_rup,2)+xyz_v(ij+z_up,2))-cy) 131 uz = uz + ue_le*(.5*(xyz_v(ij+z_rup,3)+xyz_v(ij+z_up,3))-cz) 132 ue_le = ne_lup*ue(ij+u_lup,l)*le(ij+u_lup) 133 ux = ux + ue_le*(.5*(xyz_v(ij+z_lup,1)+xyz_v(ij+z_up,1))-cx) 134 uy = uy + ue_le*(.5*(xyz_v(ij+z_lup,2)+xyz_v(ij+z_up,2))-cy) 135 uz = uz + ue_le*(.5*(xyz_v(ij+z_lup,3)+xyz_v(ij+z_up,3))-cz) 136 ue_le = ne_left*ue(ij+u_left,l)*le(ij+u_left) 137 ux = ux + ue_le*(.5*(xyz_v(ij+z_lup,1)+xyz_v(ij+z_ldown,1))-cx) 138 uy = uy + ue_le*(.5*(xyz_v(ij+z_lup,2)+xyz_v(ij+z_ldown,2))-cy) 139 uz = uz + ue_le*(.5*(xyz_v(ij+z_lup,3)+xyz_v(ij+z_ldown,3))-cz) 140 ue_le = ne_ldown*ue(ij+u_ldown,l)*le(ij+u_ldown) 141 ux = ux + ue_le*(.5*(xyz_v(ij+z_ldown,1)+xyz_v(ij+z_down,1))-cx) 142 uy = uy + ue_le*(.5*(xyz_v(ij+z_ldown,2)+xyz_v(ij+z_down,2))-cy) 143 uz = uz + ue_le*(.5*(xyz_v(ij+z_ldown,3)+xyz_v(ij+z_down,3))-cz) 144 ue_le = ne_rdown*ue(ij+u_rdown,l)*le(ij+u_rdown) 145 ux = ux + ue_le*(.5*(xyz_v(ij+z_rdown,1)+xyz_v(ij+z_down,1))-cx) 146 uy = uy + ue_le*(.5*(xyz_v(ij+z_rdown,2)+xyz_v(ij+z_down,2))-cy) 147 uz = uz + ue_le*(.5*(xyz_v(ij+z_rdown,3)+xyz_v(ij+z_down,3))-cz) 148 ue_le = ne_right*ue(ij+u_right,l)*le(ij+u_right) 149 ux = ux + ue_le*(.5*(xyz_v(ij+z_rup,1)+xyz_v(ij+z_rdown,1))-cx) 150 uy = uy + ue_le*(.5*(xyz_v(ij+z_rup,2)+xyz_v(ij+z_rdown,2))-cy) 151 uz = uz + ue_le*(.5*(xyz_v(ij+z_rup,3)+xyz_v(ij+z_rdown,3))-cz) 152 ulon_i = ux*elon_i(ij,1) + uy*elon_i(ij,2) + uz*elon_i(ij,3) 153 energy = ulon_i*(1./Ai(ij)) 154 ulon(ij,l) = ulon(ij,l) + frac*rhodz(ij,l)*energy 155 pk(ij,l) = energy 156 END DO 157 END DO 158 DO l = ll_begin, ll_end 159 !DIR$ SIMD 160 DO ij=ij_begin_ext, ij_end_ext 161 ulon_flux(ij+u_right,l) = ulon_flux(ij+u_right,l) + .5*massflux(ij+u_right,l)*(pk(ij,l)+pk(ij+t_right,l)) 162 ulon_flux(ij+u_lup,l) = ulon_flux(ij+u_lup,l) + .5*massflux(ij+u_lup,l)*(pk(ij,l)+pk(ij+t_lup,l)) 163 ulon_flux(ij+u_ldown,l) = ulon_flux(ij+u_ldown,l) + .5*massflux(ij+u_ldown,l)*(pk(ij,l)+pk(ij+t_ldown,l)) 164 END DO 165 END DO 99 166 !---------------------------- energy_fluxes ---------------------------------- 100 167 !-------------------------------------------------------------------------- -
codes/icosagcm/trunk/src/parallel/omp_para.F90
r548 r604 204 204 END SUBROUTINE init_omp_para 205 205 206 SUBROUTINE distrib_level( size,lbegin,lend)207 IMPLICIT NONE 208 INTEGER,INTENT(IN) :: size206 SUBROUTINE distrib_level(ibegin,iend, lbegin,lend) 207 IMPLICIT NONE 208 INTEGER,INTENT(IN) :: ibegin,iend 209 209 INTEGER,INTENT(OUT) :: lbegin 210 210 INTEGER,INTENT(OUT) :: lend 211 INTEGER :: div,rest212 211 INTEGER :: size,div,rest 212 size=iend-ibegin+1 213 213 div=size/omp_level_size 214 214 rest=MOD(size,omp_level_size) 215 215 IF (omp_level_rank<rest) THEN 216 lbegin=(div+1)*omp_level_rank +1216 lbegin=(div+1)*omp_level_rank + ibegin 217 217 lend=lbegin+div 218 218 ELSE 219 lbegin=(div+1)*rest + (omp_level_rank-rest)*div +1219 lbegin=(div+1)*rest + (omp_level_rank-rest)*div + ibegin 220 220 lend=lbegin+div-1 221 221 ENDIF -
codes/icosagcm/trunk/src/parallel/transfert_mpi.f90
r548 r604 1237 1237 1238 1238 dim3=size(field(ind)%rval3d,2) 1239 CALL distrib_level( dim3,lbegin,lend)1239 CALL distrib_level(1,dim3, lbegin,lend) 1240 1240 1241 1241 rval3d=>field(ind)%rval3d … … 1295 1295 IF (.NOT. assigned_domain(ind) ) CYCLE 1296 1296 dim3=size(field(ind)%rval3d,2) 1297 CALL distrib_level( dim3,lbegin,lend)1297 CALL distrib_level(1,dim3, lbegin,lend) 1298 1298 rval3d=>field(ind)%rval3d 1299 1299 req=>message%request(ind) … … 1349 1349 1350 1350 dim3=size(field(ind)%rval4d,2) 1351 CALL distrib_level( dim3,lbegin,lend)1351 CALL distrib_level(1,dim3, lbegin,lend) 1352 1352 dim4=size(field(ind)%rval4d,3) 1353 1353 rval4d=>field(ind)%rval4d … … 1411 1411 1412 1412 dim3=size(field(ind)%rval4d,2) 1413 CALL distrib_level( dim3,lbegin,lend)1413 CALL distrib_level(1,dim3, lbegin,lend) 1414 1414 dim4=size(field(ind)%rval4d,3) 1415 1415 rval4d=>field(ind)%rval4d … … 1589 1589 dim3=size(rval3d,2) 1590 1590 1591 CALL distrib_level( dim3,lbegin,lend)1591 CALL distrib_level(1,dim3, lbegin,lend) 1592 1592 offset=recv%offset*dim3 + (lbegin-1)*recv%size 1593 1593 CALL trace_start("copy_from_buffer") … … 1637 1637 1638 1638 dim3=size(rval4d,2) 1639 CALL distrib_level( dim3,lbegin,lend)1639 CALL distrib_level(1,dim3, lbegin,lend) 1640 1640 dim4=size(rval4d,3) 1641 1641 CALL trace_start("copy_from_buffer") -
codes/icosagcm/trunk/src/sphere/geometry.f90
r548 r604 639 639 IF (ii_glo==1 .AND. jj_glo==1) THEN 640 640 le(n+u_ldown)=0 641 le_de(n+u_ldown)=0 641 642 xyz_v(n+z_ldown,:)=xyz_v(n+z_down,:) 642 643 … … 645 646 IF (ii_glo==iim_glo .AND. jj_glo==1) THEN 646 647 le(n+u_right)=0 648 le_de(n+u_right)=0 647 649 xyz_v(n+z_rdown,:)=xyz_v(n+z_rup,:) 648 650 ENDIF … … 650 652 IF (ii_glo==iim_glo .AND. jj_glo==jjm_glo) THEN 651 653 le(n+u_rup)=0 654 le_de(n+u_rup)=0 652 655 xyz_v(n+z_rup,:)=xyz_v(n+z_up,:) 653 656 ENDIF … … 655 658 IF (ii_glo==1 .AND. jj_glo==jjm_glo) THEN 656 659 le(n+u_lup)=0 660 le_de(n+u_lup)=0 657 661 xyz_v(n+z_up,:)=xyz_v(n+z_lup,:) 658 662 ENDIF -
codes/icosagcm/trunk/src/time/timeloop_gcm.f90
r599 r604 309 309 ! At this point advect_tracer has obtained the halos of u and rhodz, 310 310 ! needed for correct computation of kinetic energy 311 IF(diagflux_on) CALL diagflux_energy(adv_over_out, f_phis,f_rhodz,f_theta_rhodz,f_u, f_geopot,f_theta, f_hfluxt)311 IF(diagflux_on) CALL diagflux_energy(adv_over_out, f_phis,f_rhodz,f_theta_rhodz,f_u, f_geopot,f_theta,f_buf_i, f_hfluxt) 312 312 313 313 IF (check_rhodz) THEN ! check that rhodz is consistent with ps
Note: See TracChangeset
for help on using the changeset viewer.