SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
unpack_same_rank.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! ##########################
7 ! ##########################
8 INTERFACE unpack_same_rank
9  SUBROUTINE unpack_same_rank_from1di(KM,K1D_IN,K1D_OUT,KMISS)
10 
11 INTEGER, DIMENSION(:), INTENT(IN) :: km
12 INTEGER, DIMENSION(:), INTENT(IN) :: k1d_in
13 INTEGER, DIMENSION(:), INTENT(OUT):: k1d_out
14 INTEGER, OPTIONAL, INTENT(IN) :: kmiss
15 END SUBROUTINE unpack_same_rank_from1di
16 !
17  SUBROUTINE unpack_same_rank_from2di(KM,K1D_IN,K1D_OUT,KMISS)
18 
19 INTEGER, DIMENSION(:), INTENT(IN) :: km
20 INTEGER, DIMENSION(:,:), INTENT(IN) :: k1d_in
21 INTEGER, DIMENSION(:,:), INTENT(OUT):: k1d_out
22 INTEGER, OPTIONAL, INTENT(IN) :: kmiss
23 END SUBROUTINE unpack_same_rank_from2di
24 !
25  SUBROUTINE unpack_same_rank_from1dl(KM,O1D_IN,O1D_OUT,OMISS)
26 
27 INTEGER, DIMENSION(:), INTENT(IN) :: km
28 LOGICAL, DIMENSION(:), INTENT(IN) :: o1d_in
29 LOGICAL, DIMENSION(:), INTENT(OUT):: o1d_out
30 LOGICAL, OPTIONAL, INTENT(IN) :: omiss
31 END SUBROUTINE unpack_same_rank_from1dl
32 !
33  SUBROUTINE unpack_same_rank_from1d(KM,P1D_IN,P1D_OUT,PMISS)
34 
35 INTEGER, DIMENSION(:), INTENT(IN) :: km
36 REAL, DIMENSION(:), INTENT(IN) :: p1d_in
37 REAL, DIMENSION(:), INTENT(OUT):: p1d_out
38 REAL, OPTIONAL, INTENT(IN) :: pmiss
39 END SUBROUTINE unpack_same_rank_from1d
40 !
41  SUBROUTINE unpack_same_rank_from2d(KM,P2D_IN,P2D_OUT,PMISS)
42 
43 INTEGER, DIMENSION(:), INTENT(IN) :: km
44 REAL, DIMENSION(:,:), INTENT(IN) :: p2d_in
45 REAL, DIMENSION(:,:), INTENT(OUT):: p2d_out
46 REAL, OPTIONAL, INTENT(IN) :: pmiss
47 !
48 END SUBROUTINE unpack_same_rank_from2d
49 !
50  SUBROUTINE unpack_same_rank_from3d(KM,P3D_IN,P3D_OUT,PMISS)
51 
52 INTEGER, DIMENSION(:), INTENT(IN) :: km
53 REAL, DIMENSION(:,:,:), INTENT(IN) :: p3d_in
54 REAL, DIMENSION(:,:,:), INTENT(OUT):: p3d_out
55 REAL, OPTIONAL, INTENT(IN) :: pmiss
56 !
57 END SUBROUTINE unpack_same_rank_from3d
58 !
59  SUBROUTINE unpack_same_rank_from4d(KM,P4D_IN,P4D_OUT,PMISS)
60 
61 INTEGER, DIMENSION(:), INTENT(IN) :: km
62 REAL, DIMENSION(:,:,:,:), INTENT(IN) :: p4d_in
63 REAL, DIMENSION(:,:,:,:), INTENT(OUT):: p4d_out
64 REAL, OPTIONAL, INTENT(IN) :: pmiss
65 !
66 END SUBROUTINE unpack_same_rank_from4d
67 !
68 END INTERFACE
69 !
70 END MODULE modi_unpack_same_rank
71 !
72 ! ##############################################
73  SUBROUTINE unpack_same_rank_from1d(KM,P1D_IN,P1D_OUT,PMISS)
74 ! ##############################################
75 !
76 !!**** *UNPACK_SAME_RANK* - extract the defined data from a 1D field into a 1D field of lower rank
77 !!
78 !! PURPOSE
79 !! -------
80 !!
81 !!** METHOD
82 !! ------
83 !!
84 !! EXTERNAL
85 !! --------
86 !!
87 !!
88 !! IMPLICIT ARGUMENTS
89 !! ------------------
90 !!
91 !! REFERENCE
92 !! ---------
93 !!
94 !!
95 !! AUTHOR
96 !! ------
97 !! F. Habets *Meteo France*
98 !!
99 !! MODIFICATIONS
100 !! -------------
101 !! Original 08/03
102 !! B. Decharme 2008 Allows to put other optional value for missval
103 !-------------------------------------------------------------------------------
104 !
105 !* 0. DECLARATIONS
106 ! ------------
107 !
108 USE modd_surf_par, ONLY : xundef
109 !
110 !
111 USE yomhook ,ONLY : lhook, dr_hook
112 USE parkind1 ,ONLY : jprb
113 !
114 IMPLICIT NONE
115 !
116 !* 0.1 Declarations of arguments
117 ! -------------------------
118 !
119 INTEGER, DIMENSION(:), INTENT(IN) :: km
120 REAL, DIMENSION(:), INTENT(IN) :: p1d_in
121 REAL, DIMENSION(:), INTENT(OUT):: p1d_out
122 REAL, OPTIONAL, INTENT(IN) :: pmiss
123 !
124 !* 0.2 Declarations of local variables
125 ! -------------------------------
126 !
127 INTEGER :: ji ! loop counter
128 REAL(KIND=JPRB) :: zhook_handle
129 !
130 !-------------------------------------------------------------------------------
131 !
132 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM1D',0,zhook_handle)
133 IF(present(pmiss))THEN
134  p1d_out(:) = pmiss
135 ELSE
136  p1d_out(:) = xundef
137 ENDIF
138 !
139 !cdir nodep
140 DO ji=1,SIZE(p1d_in,1)
141  p1d_out(km(ji)) = p1d_in(ji)
142 ENDDO
143 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM1D',1,zhook_handle)
144 !
145 !-------------------------------------------------------------------------------
146 !
147 END SUBROUTINE unpack_same_rank_from1d
148 !
149 !
150 ! ##############################################
151  SUBROUTINE unpack_same_rank_from1di(KM,K1D_IN,K1D_OUT,KMISS)
152 ! ##############################################
153 !
154 !!**** *UNPACK_SAME_RANK* - extract the defined data from a 1D field into a 1D field of lower rank
155 !!
156 !! PURPOSE
157 !! -------
158 !!
159 !!** METHOD
160 !! ------
161 !!
162 !! EXTERNAL
163 !! --------
164 !!
165 !!
166 !! IMPLICIT ARGUMENTS
167 !! ------------------
168 !!
169 !! REFERENCE
170 !! ---------
171 !!
172 !!
173 !! AUTHOR
174 !! ------
175 !! F. Habets *Meteo France*
176 !!
177 !! MODIFICATIONS
178 !! -------------
179 !! Original 08/03
180 !-------------------------------------------------------------------------------
181 !
182 !* 0. DECLARATIONS
183 ! ------------
184 !
185 USE modd_surf_par, ONLY : nundef
186 !
187 !
188 USE yomhook ,ONLY : lhook, dr_hook
189 USE parkind1 ,ONLY : jprb
190 !
191 IMPLICIT NONE
192 !
193 !* 0.1 Declarations of arguments
194 ! -------------------------
195 !
196 INTEGER, DIMENSION(:), INTENT(IN) :: km
197 INTEGER, DIMENSION(:), INTENT(IN) :: k1d_in
198 INTEGER, DIMENSION(:), INTENT(OUT):: k1d_out
199 INTEGER, OPTIONAL, INTENT(IN) :: kmiss
200 !
201 !* 0.2 Declarations of local variables
202 ! -------------------------------
203 !
204 INTEGER :: ji ! loop counter
205 REAL(KIND=JPRB) :: zhook_handle
206 !
207 !-------------------------------------------------------------------------------
208 !
209 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM1DI',0,zhook_handle)
210 IF(present(kmiss))THEN
211  k1d_out(:) = kmiss
212 ELSE
213  k1d_out(:) = nundef
214 ENDIF
215 !
216 !cdir nodep
217 DO ji=1,SIZE(k1d_in,1)
218  k1d_out(km(ji)) = k1d_in(ji)
219 ENDDO
220 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM1DI',1,zhook_handle)
221 !
222 !-------------------------------------------------------------------------------
223 !
224 END SUBROUTINE unpack_same_rank_from1di
225 !
226 ! ##############################################
227  SUBROUTINE unpack_same_rank_from2di(KM,K2D_IN,K2D_OUT,PMISS)
228 ! ##############################################
229 !
230 !!**** *UNPACK_SAME_RANK* - extract the defined data from a 2D field into a 2D field
231 !!
232 !! PURPOSE
233 !! -------
234 !!
235 !!** METHOD
236 !! ------
237 !!
238 !! EXTERNAL
239 !! --------
240 !!
241 !!
242 !! IMPLICIT ARGUMENTS
243 !! ------------------
244 !!
245 !! REFERENCE
246 !! ---------
247 !!
248 !!
249 !! AUTHOR
250 !! ------
251 !! F. Habets *Meteo France*
252 !!
253 !! MODIFICATIONS
254 !! -------------
255 !! Original 08/03
256 !-------------------------------------------------------------------------------
257 !
258 !* 0. DECLARATIONS
259 ! ------------
260 !
261 USE modd_surf_par, ONLY : nundef
262 !
263 USE modd_surfex_omp, ONLY : nwork2_full
264 !
265 USE yomhook ,ONLY : lhook, dr_hook
266 USE parkind1 ,ONLY : jprb
267 !
268 IMPLICIT NONE
269 !
270 !* 0.1 Declarations of arguments
271 ! -------------------------
272 !
273 INTEGER, DIMENSION(:), INTENT(IN) :: km
274 INTEGER, DIMENSION(:,:), INTENT(IN) :: k2d_in
275 INTEGER, DIMENSION(:,:), INTENT(OUT):: k2d_out
276 REAL, OPTIONAL, INTENT(IN) :: pmiss
277 !
278 !* 0.2 Declarations of local variables
279 ! -------------------------------
280 !
281 INTEGER :: ji, jj ! loop counter
282 REAL(KIND=JPRB) :: zhook_handle
283 !
284 !-------------------------------------------------------------------------------
285 !
286 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM2DI',0,zhook_handle)
287 !
288 IF(present(pmiss))THEN
289  k2d_out(:,:) = pmiss
290 ELSE
291  k2d_out(:,:) = nundef
292 ENDIF
293 !
294 DO jj=1,SIZE(k2d_in,2)
295 !cdir nodep
296  DO ji=1,SIZE(k2d_in,1)
297  k2d_out(km(ji),jj) = k2d_in(ji,jj)
298  ENDDO
299 ENDDO
300 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM2DI',1,zhook_handle)
301 !
302 !-------------------------------------------------------------------------------
303 !
304 END SUBROUTINE unpack_same_rank_from2di
305 !
306 ! ##############################################
307  SUBROUTINE unpack_same_rank_from1dl(KM,O1D_IN,O1D_OUT,OMISS)
308 ! ##############################################
309 !
310 !!**** *UNPACK_SAME_RANK* - extract the defined data from a 1D field into a 1D field of lower rank
311 !!
312 !! PURPOSE
313 !! -------
314 !!
315 !!** METHOD
316 !! ------
317 !!
318 !! EXTERNAL
319 !! --------
320 !!
321 !!
322 !! IMPLICIT ARGUMENTS
323 !! ------------------
324 !!
325 !! REFERENCE
326 !! ---------
327 !!
328 !!
329 !! AUTHOR
330 !! ------
331 !! F. Habets *Meteo France*
332 !!
333 !! MODIFICATIONS
334 !! -------------
335 !! Original 08/03
336 !-------------------------------------------------------------------------------
337 !
338 !* 0. DECLARATIONS
339 ! ------------
340 !
341 !
342 !
343 USE yomhook ,ONLY : lhook, dr_hook
344 USE parkind1 ,ONLY : jprb
345 !
346 IMPLICIT NONE
347 !
348 !* 0.1 Declarations of arguments
349 ! -------------------------
350 !
351 INTEGER, DIMENSION(:), INTENT(IN) :: km
352 LOGICAL, DIMENSION(:), INTENT(IN) :: o1d_in
353 LOGICAL, DIMENSION(:), INTENT(OUT):: o1d_out
354 LOGICAL, OPTIONAL, INTENT(IN) :: omiss
355 !
356 !* 0.2 Declarations of local variables
357 ! -------------------------------
358 !
359 INTEGER :: ji ! loop counter
360 REAL(KIND=JPRB) :: zhook_handle
361 !
362 !-------------------------------------------------------------------------------
363 !
364 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM1DL',0,zhook_handle)
365 IF(present(omiss))THEN
366  o1d_out(:) = omiss
367 ELSE
368  o1d_out(:) = .false.
369 ENDIF
370 !
371 !cdir nodep
372 DO ji=1,SIZE(o1d_in,1)
373  o1d_out(km(ji)) = o1d_in(ji)
374 ENDDO
375 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM1DL',1,zhook_handle)
376 !
377 !-------------------------------------------------------------------------------
378 !
379 END SUBROUTINE unpack_same_rank_from1dl
380 !
381 !
382 ! ##############################################
383  SUBROUTINE unpack_same_rank_from2d(KM,P2D_IN,P2D_OUT,PMISS)
384 ! ##############################################
385 !
386 !!**** *UNPACK_SAME_RANK* - extract the defined data from a 2D field into a 2D field
387 !!
388 !! PURPOSE
389 !! -------
390 !!
391 !!** METHOD
392 !! ------
393 !!
394 !! EXTERNAL
395 !! --------
396 !!
397 !!
398 !! IMPLICIT ARGUMENTS
399 !! ------------------
400 !!
401 !! REFERENCE
402 !! ---------
403 !!
404 !!
405 !! AUTHOR
406 !! ------
407 !! F. Habets *Meteo France*
408 !!
409 !! MODIFICATIONS
410 !! -------------
411 !! Original 08/03
412 !-------------------------------------------------------------------------------
413 !
414 !* 0. DECLARATIONS
415 ! ------------
416 !
417 USE modd_surf_par, ONLY : xundef
418 !
419 !
420 USE yomhook ,ONLY : lhook, dr_hook
421 USE parkind1 ,ONLY : jprb
422 !
423 IMPLICIT NONE
424 !
425 !* 0.1 Declarations of arguments
426 ! -------------------------
427 !
428 INTEGER, DIMENSION(:), INTENT(IN) :: km
429 REAL, DIMENSION(:,:), INTENT(IN) :: p2d_in
430 REAL, DIMENSION(:,:), INTENT(OUT):: p2d_out
431 REAL, OPTIONAL, INTENT(IN) :: pmiss
432 !
433 !* 0.2 Declarations of local variables
434 ! -------------------------------
435 !
436 INTEGER :: ji, jj ! loop counter
437 REAL(KIND=JPRB) :: zhook_handle
438 !
439 !-------------------------------------------------------------------------------
440 !
441 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM2D',0,zhook_handle)
442 IF(present(pmiss))THEN
443  p2d_out(:,:) = pmiss
444 ELSE
445  p2d_out(:,:) = xundef
446 ENDIF
447 !
448 DO jj=1,SIZE(p2d_in,2)
449 !cdir nodep
450  DO ji=1,SIZE(p2d_in,1)
451  p2d_out(km(ji),jj) = p2d_in(ji,jj)
452  ENDDO
453 ENDDO
454 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM2D',1,zhook_handle)
455 !
456 !-------------------------------------------------------------------------------
457 !
458 END SUBROUTINE unpack_same_rank_from2d
459 !
460 !
461 !-------------------------------------------------------------------------------
462 !-------------------------------------------------------------------------------
463 ! ##############################################
464  SUBROUTINE unpack_same_rank_from3d(KM,P3D_IN,P3D_OUT,PMISS)
465 ! ##############################################
466 !
467 !!**** *UNPACK_SAME_RANK* - extract the defined data from a 3D field into a 3D field
468 !!
469 !! PURPOSE
470 !! -------
471 !!
472 !!** METHOD
473 !! ------
474 !!
475 !! EXTERNAL
476 !! --------
477 !!
478 !!
479 !! IMPLICIT ARGUMENTS
480 !! ------------------
481 !!
482 !! REFERENCE
483 !! ---------
484 !!
485 !!
486 !! AUTHOR
487 !! ------
488 !! F. Habets *Meteo France*
489 !!
490 !! MODIFICATIONS
491 !! -------------
492 !! Original 08/03
493 !-------------------------------------------------------------------------------
494 !
495 !* 0. DECLARATIONS
496 ! ------------
497 !
498 USE modd_surf_par, ONLY : xundef
499 !
500 !
501 USE yomhook ,ONLY : lhook, dr_hook
502 USE parkind1 ,ONLY : jprb
503 !
504 IMPLICIT NONE
505 !
506 !* 0.1 Declarations of arguments
507 ! -------------------------
508 !
509 INTEGER, DIMENSION(:), INTENT(IN) :: km
510 REAL, DIMENSION(:,:,:), INTENT(IN) :: p3d_in
511 REAL, DIMENSION(:,:,:), INTENT(OUT):: p3d_out
512 REAL, OPTIONAL, INTENT(IN) :: pmiss
513 !
514 !* 0.2 Declarations of local variables
515 ! -------------------------------
516 !
517 INTEGER :: ji, jj, jk ! loop counter
518 REAL(KIND=JPRB) :: zhook_handle
519 !
520 !-------------------------------------------------------------------------------
521 !
522 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM3D',0,zhook_handle)
523 IF(present(pmiss))THEN
524  p3d_out(:,:,:) = pmiss
525 ELSE
526  p3d_out(:,:,:) = xundef
527 ENDIF
528 !
529 DO jk=1,SIZE(p3d_in,3)
530  DO jj=1,SIZE(p3d_in,2)
531 !cdir nodep
532  DO ji=1,SIZE(p3d_in,1)
533  p3d_out(km(ji),jj,jk) = p3d_in(ji,jj,jk)
534  ENDDO
535  ENDDO
536 ENDDO
537 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM3D',1,zhook_handle)
538 !
539 !-------------------------------------------------------------------------------
540 !
541 END SUBROUTINE unpack_same_rank_from3d
542 !
543 !-------------------------------------------------------------------------------
544 !-------------------------------------------------------------------------------
545 ! ##############################################
546  SUBROUTINE unpack_same_rank_from4d(KM,P4D_IN,P4D_OUT,PMISS)
547 ! ##############################################
548 !
549 !!**** *UNPACK_SAME_RANK* - extract the defined data from a 4D field into a 4D field
550 !!
551 !! PURPOSE
552 !! -------
553 !!
554 !!** METHOD
555 !! ------
556 !!
557 !! EXTERNAL
558 !! --------
559 !!
560 !!
561 !! IMPLICIT ARGUMENTS
562 !! ------------------
563 !!
564 !! REFERENCE
565 !! ---------
566 !!
567 !!
568 !! AUTHOR
569 !! ------
570 !! F. Habets *Meteo France*
571 !!
572 !! MODIFICATIONS
573 !! -------------
574 !! Original 08/03
575 !-------------------------------------------------------------------------------
576 !
577 !* 0. DECLARATIONS
578 ! ------------
579 !
580 USE modd_surf_par, ONLY : xundef
581 !
582 !
583 USE yomhook ,ONLY : lhook, dr_hook
584 USE parkind1 ,ONLY : jprb
585 !
586 IMPLICIT NONE
587 !
588 !* 0.1 Declarations of arguments
589 ! -------------------------
590 !
591 INTEGER, DIMENSION(:), INTENT(IN) :: km
592 REAL, DIMENSION(:,:,:,:), INTENT(IN) :: p4d_in
593 REAL, DIMENSION(:,:,:,:), INTENT(OUT):: p4d_out
594 REAL, OPTIONAL, INTENT(IN) :: pmiss
595 !
596 !* 0.2 Declarations of local variables
597 ! -------------------------------
598 !
599 !
600 INTEGER :: ji, jj, jk, jl ! loop counter
601 REAL(KIND=JPRB) :: zhook_handle
602 !
603 !-------------------------------------------------------------------------------
604 !
605 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM4D',0,zhook_handle)
606 IF(present(pmiss))THEN
607  p4d_out(:,:,:,:) = pmiss
608 ELSE
609  p4d_out(:,:,:,:) = xundef
610 ENDIF
611 !
612 DO jl=1,SIZE(p4d_out,4)
613  DO jk=1,SIZE(p4d_out,3)
614  DO jj=1,SIZE(p4d_out,2)
615 !cdir nodep
616  DO ji=1,SIZE(p4d_out,1)
617  p4d_out(km(ji),jj,jk,jl) = p4d_in(ji,jj,jk,jl)
618  ENDDO
619  ENDDO
620  ENDDO
621 ENDDO
622 IF (lhook) CALL dr_hook('MODI_UNPACK_SAME_RANK:UNPACK_SAME_RANK_FROM4D',1,zhook_handle)
623 !
624 !-------------------------------------------------------------------------------
625 !
626 END SUBROUTINE unpack_same_rank_from4d
subroutine unpack_same_rank_from3d(KM, P3D_IN, P3D_OUT, PMISS)
subroutine unpack_same_rank_from2di(KM, K2D_IN, K2D_OUT, PMISS)
subroutine unpack_same_rank_from1d(KM, P1D_IN, P1D_OUT, PMISS)
subroutine unpack_same_rank_from1dl(KM, O1D_IN, O1D_OUT, OMISS)
subroutine unpack_same_rank_from2d(KM, P2D_IN, P2D_OUT, PMISS)
subroutine unpack_same_rank_from4d(KM, P4D_IN, P4D_OUT, PMISS)
subroutine unpack_same_rank_from1di(KM, K1D_IN, K1D_OUT, KMISS)