Changeset 1086 for trunk/LMDZ.COMMON/libf/dyn3d
- Timestamp:
- Oct 30, 2013, 9:39:51 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.COMMON/libf/dyn3d/cpdet_mod.F90
r1017 r1086 1 2 3 1 module cpdet_mod 2 3 implicit none 4 4 5 5 ! ADAPTATION OF GCM TO CP(T) … … 17 17 !====================================================================== 18 18 19 19 contains 20 20 21 21 SUBROUTINE ini_cpdet … … 134 134 !====================================================================== 135 135 !====================================================================== 136 ! Routines pour les calculs paralleles 137 !====================================================================== 138 #ifdef CPP_PARA 139 !====================================================================== 140 141 SUBROUTINE t2tpot_p(nlon,nlev, yt, yteta, ypk) 142 ! Parallel version of t2tpot, for an arbitrary number of columns 143 USE control_mod, only : planet_type 144 IMPLICIT none 145 146 ! for cpp, nu_venus and t0_venus: 147 #include "comconst.h" 148 149 integer,intent(in) :: nlon,nlev 150 real,intent(in) :: yt(nlon,nlev) 151 real,intent(out) :: yteta(nlon,nlev) 152 real,intent(in) :: ypk(nlon,nlev) 153 ! local variable: 154 integer :: l 155 156 if (planet_type.eq."venus") then 157 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 158 do l=1,nlev 159 yteta(:,l)=yt(:,l)**nu_venus & 160 & -nu_venus*t0_venus**nu_venus* & 161 & log(ypk(:,l)/cpp) 162 yteta(:,l)=yteta(:,l)**(1./nu_venus) 163 enddo 164 !$OMP END DO 165 else 166 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 167 do l=1,nlev 168 yteta(:,l)=yt(:,l)*cpp/ypk(:,l) 169 enddo 170 !$OMP END DO 171 endif ! of if (planet_type.eq."venus") 172 173 end subroutine t2tpot_p 174 175 !====================================================================== 176 !====================================================================== 177 178 SUBROUTINE t2tpot_glo_p(yt, yteta, ypk) 179 ! Parallel version of t2tpot, over the full dynamics (scalar) grid 180 ! (more efficient than multiple calls to t2tpot_p() with slices of data) 181 USE parallel_lmdz, only : jj_begin,jj_end 182 USE control_mod, only : planet_type 183 IMPLICIT none 184 ! for iip1, jjp1 and llm 185 #include "dimensions.h" 186 #include "paramet.h" 187 ! for cpp, nu_venus and t0_venus: 188 #include "comconst.h" 189 190 real,intent(in) :: yt(iip1,jjp1,llm) 191 real,intent(out) :: yteta(iip1,jjp1,llm) 192 real,intent(in) :: ypk(iip1,jjp1,llm) 193 ! local variable: 194 integer :: j,l 195 integer :: jjb,jje 196 197 jjb=jj_begin 198 jje=jj_end 199 200 if (planet_type.eq."venus") then 201 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 202 do l=1,llm 203 yteta(:,jjb:jje,l)=yt(:,jjb:jje,l)**nu_venus & 204 & -nu_venus*t0_venus**nu_venus* & 205 & log(ypk(:,jjb:jje,l)/cpp) 206 yteta(:,jjb:jje,l)=yteta(:,jjb:jje,l)**(1./nu_venus) 207 enddo 208 !$OMP END DO 209 else 210 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 211 do l=1,llm 212 yteta(:,jjb:jje,l)=yt(:,jjb:jje,l)*cpp/ypk(:,jjb:jje,l) 213 enddo 214 !$OMP END DO 215 endif ! of if (planet_type.eq."venus") 216 217 end subroutine t2tpot_glo_p 218 219 !====================================================================== 220 !====================================================================== 221 222 SUBROUTINE tpot2t_p(nlon,nlev,yteta,yt,ypk) 223 ! Parallel version of tpot2t, for an arbitrary number of columns 224 USE control_mod, only : planet_type 225 IMPLICIT none 226 ! for cpp, nu_venus and t0_venus: 227 #include "comconst.h" 228 229 integer,intent(in) :: nlon,nlev 230 real,intent(out) :: yt(nlon,nlev) 231 real,intent(in) :: yteta(nlon,nlev) 232 real,intent(in) :: ypk(nlon,nlev) 233 234 ! local variable: 235 integer :: l 236 237 if (planet_type.eq."venus") then 238 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 239 do l=1,nlev 240 yt(:,l)=yteta(:,l)**nu_venus & 241 & +nu_venus*t0_venus**nu_venus* & 242 & log(ypk(:,l)/cpp) 243 yt(:,l)=yt(:,l)**(1./nu_venus) 244 enddo 245 !$OMP END DO 246 else 247 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 248 do l=1,nlev 249 yt(:,l)=yteta(:,l)*ypk(:,l)/cpp 250 enddo 251 !$OMP END DO 252 endif ! of if (planet_type.eq."venus") 253 end subroutine tpot2t_p 254 255 !====================================================================== 256 !====================================================================== 257 258 SUBROUTINE tpot2t_glo_p(yteta,yt,ypk) 259 ! Parallel version of tpot2t, over the full dynamics (scalar) grid 260 ! (more efficient than multiple calls to tpot2t_p() with slices of data) 261 USE parallel_lmdz, only : jj_begin,jj_end 262 USE control_mod, only : planet_type 263 IMPLICIT none 264 ! for iip1, jjp1 and llm 265 #include "dimensions.h" 266 #include "paramet.h" 267 ! for cpp, nu_venus and t0_venus: 268 #include "comconst.h" 269 270 real,intent(out) :: yt(iip1,jjp1,llm) 271 real,intent(in) :: yteta(iip1,jjp1,llm) 272 real,intent(in) :: ypk(iip1,jjp1,llm) 273 ! local variable: 274 integer :: j,l 275 integer :: jjb,jje 276 277 jjb=jj_begin 278 jje=jj_end 279 280 if (planet_type.eq."venus") then 281 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 282 do l=1,llm 283 yt(:,jjb:jje,l)=yteta(:,jjb:jje,l)**nu_venus & 284 & +nu_venus*t0_venus**nu_venus* & 285 & log(ypk(:,jjb:jje,l)/cpp) 286 yt(:,jjb:jje,l)=yt(:,jjb:jje,l)**(1./nu_venus) 287 enddo 288 !$OMP END DO 289 else 290 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 291 do l=1,llm 292 yt(:,jjb:jje,l)=yteta(:,jjb:jje,l)*ypk(:,jjb:jje,l)/cpp 293 enddo 294 !$OMP END DO 295 endif ! of if (planet_type.eq."venus") 296 end subroutine tpot2t_glo_p 297 298 !====================================================================== 299 #endif 300 !====================================================================== 301 ! Fin routines specifiques parallele 302 !====================================================================== 303 !====================================================================== 136 304 ! 137 305 ! ATTENTION … … 142 310 !====================================================================== 143 311 !====================================================================== 144 312 end module cpdet_mod
Note: See TracChangeset
for help on using the changeset viewer.