/[lmdze]/trunk/IOIPSL/mathop2.f
ViewVC logotype

Contents of /trunk/IOIPSL/mathop2.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 254 - (show annotations)
Mon Feb 5 10:39:38 2018 UTC (6 years, 3 months ago) by guez
File size: 52880 byte(s)
Move Sources/* to root directory.
1 MODULE mathop2
2
3 ! From mathelp.f90, version 2.0 2004/04/05 14:47:50
4
5 implicit none
6
7 CONTAINS
8
9 !=== FUNCTIONS (only one argument)
10 !-
11 INTEGER FUNCTION ma_sin_r11(nb, x, nbo, y)
12 INTEGER :: nb, nbo, i
13 REAL :: x(nb), y(nbo)
14 !---------------------------------------------------------------------
15 DO i=1, nb
16 y(i) = SIN(x(i))
17 ENDDO
18
19 nbo = nb
20 ma_sin_r11 = 0
21 !----------------------
22 END FUNCTION ma_sin_r11
23
24 !************************************************
25
26 INTEGER FUNCTION ma_cos_r11(nb, x, nbo, y)
27 INTEGER :: nb, nbo, i
28 REAL :: x(nb), y(nbo)
29 !---------------------------------------------------------------------
30 DO i=1, nb
31 y(i) = COS(x(i))
32 ENDDO
33
34 nbo = nb
35 ma_cos_r11 = 0
36 !----------------------
37 END FUNCTION ma_cos_r11
38
39 !************************************************
40
41 INTEGER FUNCTION ma_tan_r11(nb, x, nbo, y)
42 INTEGER :: nb, nbo, i
43 REAL :: x(nb), y(nbo)
44 !---------------------------------------------------------------------
45 DO i=1, nb
46 y(i) = TAN(x(i))
47 ENDDO
48
49 nbo = nb
50 ma_tan_r11 = 0
51 !----------------------
52 END FUNCTION ma_tan_r11
53
54 !************************************************
55
56 INTEGER FUNCTION ma_asin_r11(nb, x, nbo, y)
57 INTEGER :: nb, nbo, i
58 REAL :: x(nb), y(nbo)
59 !---------------------------------------------------------------------
60 DO i=1, nb
61 y(i) = ASIN(x(i))
62 ENDDO
63
64 nbo = nb
65 ma_asin_r11 = 0
66 !-----------------------
67 END FUNCTION ma_asin_r11
68
69 !************************************************
70
71 INTEGER FUNCTION ma_acos_r11(nb, x, nbo, y)
72 INTEGER :: nb, nbo, i
73 REAL :: x(nb), y(nbo)
74 !---------------------------------------------------------------------
75 DO i=1, nb
76 y(i) = ACOS(x(i))
77 ENDDO
78
79 nbo = nb
80 ma_acos_r11 = 0
81 !-----------------------
82 END FUNCTION ma_acos_r11
83
84 !************************************************
85
86 INTEGER FUNCTION ma_atan_r11(nb, x, nbo, y)
87 INTEGER :: nb, nbo, i
88 REAL :: x(nb), y(nbo)
89 !---------------------------------------------------------------------
90 DO i=1, nb
91 y(i) = ATAN(x(i))
92 ENDDO
93
94 nbo = nb
95 ma_atan_r11 = 0
96 !-----------------------
97 END FUNCTION ma_atan_r11
98
99 !************************************************
100
101 INTEGER FUNCTION ma_exp_r11(nb, x, nbo, y)
102 INTEGER :: nb, nbo, i
103 REAL :: x(nb), y(nbo)
104 !---------------------------------------------------------------------
105 DO i=1, nb
106 y(i) = EXP(x(i))
107 ENDDO
108
109 nbo = nb
110 ma_exp_r11 = 0
111 !----------------------
112 END FUNCTION ma_exp_r11
113
114 !************************************************
115
116 INTEGER FUNCTION ma_alog_r11(nb, x, nbo, y)
117 INTEGER :: nb, nbo, i
118 REAL :: x(nb), y(nbo)
119 !---------------------------------------------------------------------
120 DO i=1, nb
121 y(i) = alog(x(i))
122 ENDDO
123
124 nbo = nb
125 ma_alog_r11 = 0
126 !-----------------------
127 END FUNCTION ma_alog_r11
128
129 !************************************************
130
131 INTEGER FUNCTION ma_sqrt_r11(nb, x, nbo, y)
132 INTEGER :: nb, nbo, i
133 REAL :: x(nb), y(nbo)
134 !---------------------------------------------------------------------
135 DO i=1, nb
136 y(i) = SQRT(x(i))
137 ENDDO
138
139 nbo = nb
140 ma_sqrt_r11 = 0
141 !-----------------------
142 END FUNCTION ma_sqrt_r11
143
144 !************************************************
145
146 INTEGER FUNCTION ma_abs_r11(nb, x, nbo, y)
147 INTEGER :: nb, nbo, i
148 REAL :: x(nb), y(nbo)
149 !---------------------------------------------------------------------
150 DO i=1, nb
151 y(i) = ABS(x(i))
152 ENDDO
153
154 nbo = nb
155 ma_abs_r11 = 0
156 !----------------------
157 END FUNCTION ma_abs_r11
158
159 !************************************************
160
161 INTEGER FUNCTION ma_chs_r11(nb, x, nbo, y)
162 INTEGER :: nb, nbo, i
163 REAL :: x(nb), y(nbo)
164 !---------------------------------------------------------------------
165 DO i=1, nb
166 y(i) = x(i)*(-1.)
167 ENDDO
168
169 nbo = nb
170 ma_chs_r11 = 0
171 !----------------------
172 END FUNCTION ma_chs_r11
173
174 !************************************************
175
176 INTEGER FUNCTION ma_cels_r11(nb, x, nbo, y)
177 INTEGER :: nb, nbo, i
178 REAL :: x(nb), y(nbo)
179 !---------------------------------------------------------------------
180 DO i=1, nb
181 y(i) = x(i)-273.15
182 ENDDO
183
184 nbo = nb
185 ma_cels_r11 = 0
186 !-----------------------
187 END FUNCTION ma_cels_r11
188
189 !************************************************
190
191 INTEGER FUNCTION ma_kelv_r11(nb, x, nbo, y)
192 INTEGER :: nb, nbo, i
193 REAL :: x(nb), y(nbo)
194 !---------------------------------------------------------------------
195 DO i=1, nb
196 y(i) = x(i)+273.15
197 ENDDO
198
199 nbo = nb
200 ma_kelv_r11 = 0
201 !-----------------------
202 END FUNCTION ma_kelv_r11
203
204 !************************************************
205
206 INTEGER FUNCTION ma_deg_r11(nb, x, nbo, y)
207 INTEGER :: nb, nbo, i
208 REAL :: x(nb), y(nbo)
209 !---------------------------------------------------------------------
210 DO i=1, nb
211 y(i) = x(i)*57.29577951
212 ENDDO
213
214 nbo = nb
215 ma_deg_r11 = 0
216 !-----------------------
217 END FUNCTION ma_deg_r11
218
219 !************************************************
220
221 INTEGER FUNCTION ma_rad_r11(nb, x, nbo, y)
222 INTEGER :: nb, nbo, i
223 REAL :: x(nb), y(nbo)
224 !---------------------------------------------------------------------
225 DO i=1, nb
226 y(i) = x(i)*0.01745329252
227 ENDDO
228
229 nbo = nb
230 ma_rad_r11 = 0
231 !----------------------
232 END FUNCTION ma_rad_r11
233
234 !************************************************
235
236 INTEGER FUNCTION ma_ident_r11(nb, x, nbo, y)
237 INTEGER :: nb, nbo, i
238 REAL :: x(nb), y(nbo)
239 !---------------------------------------------------------------------
240 DO i=1, nb
241 y(i) = x(i)
242 ENDDO
243
244 nbo = nb
245 ma_ident_r11 = 0
246 !------------------------
247 END FUNCTION ma_ident_r11
248 !-
249 !=== OPERATIONS (two argument)
250 !-
251 INTEGER FUNCTION ma_add_r11(nb, x, s, nbo, y)
252 INTEGER :: nb, nbo
253 REAL :: x(nb), s, y(nbo)
254
255 INTEGER :: i
256 !---------------------------------------------------------------------
257 DO i=1, nb
258 y(i) = x(i)+s
259 ENDDO
260
261 nbo = nb
262 ma_add_r11 = 0
263 !-----------------------
264 END FUNCTION ma_add_r11
265
266 !************************************************
267
268 INTEGER FUNCTION ma_sub_r11(nb, x, s, nbo, y)
269 INTEGER :: nb, nbo
270 REAL :: x(nb), s, y(nbo)
271
272 INTEGER :: i
273 !---------------------------------------------------------------------
274 DO i=1, nb
275 y(i) = x(i)-s
276 ENDDO
277
278 nbo = nb
279 ma_sub_r11 = 0
280 !----------------------
281 END FUNCTION ma_sub_r11
282
283 !************************************************
284
285 INTEGER FUNCTION ma_subi_r11(nb, x, s, nbo, y)
286 INTEGER :: nb, nbo
287 REAL :: x(nb), s, y(nbo)
288
289 INTEGER :: i
290 !---------------------------------------------------------------------
291 DO i=1, nb
292 y(i) = s-x(i)
293 ENDDO
294
295 nbo = nb
296 ma_subi_r11 = 0
297 !-----------------------
298 END FUNCTION ma_subi_r11
299
300 !************************************************
301
302 INTEGER FUNCTION ma_mult_r11(nb, x, s, nbo, y)
303 INTEGER :: nb, nbo
304 REAL :: x(nb), s, y(nbo)
305
306 INTEGER :: i
307 !---------------------------------------------------------------------
308 DO i=1, nb
309 y(i) = x(i)*s
310 ENDDO
311
312 nbo = nb
313 ma_mult_r11 = 0
314 !-----------------------
315 END FUNCTION ma_mult_r11
316
317 !************************************************
318
319 INTEGER FUNCTION ma_div_r11(nb, x, s, nbo, y)
320 INTEGER :: nb, nbo
321 REAL :: x(nb), s, y(nbo)
322
323 INTEGER :: i
324 !---------------------------------------------------------------------
325 DO i=1, nb
326 y(i) = x(i)/s
327 ENDDO
328
329 nbo = nb
330 ma_div_r11 = 0
331 !-----------------------
332 END FUNCTION ma_div_r11
333
334 !************************************************
335
336 INTEGER FUNCTION ma_divi_r11(nb, x, s, nbo, y)
337 INTEGER :: nb, nbo
338 REAL :: x(nb), s, y(nbo)
339
340 INTEGER :: i
341 !---------------------------------------------------------------------
342 DO i=1, nb
343 y(i) = s/x(i)
344 ENDDO
345
346 nbo = nb
347 ma_divi_r11 = 0
348 !-----------------------
349 END FUNCTION ma_divi_r11
350
351 !************************************************
352
353 INTEGER FUNCTION ma_power_r11(nb, x, s, nbo, y)
354 INTEGER :: nb, nbo
355 REAL :: x(nb), s, y(nbo)
356
357 INTEGER :: i
358 !---------------------------------------------------------------------
359 DO i=1, nb
360 y(i) = x(i)**s
361 ENDDO
362
363 nbo = nb
364 ma_power_r11 = 0
365 !-----------------------
366 END FUNCTION ma_power_r11
367
368 !************************************************
369
370 INTEGER FUNCTION ma_fumin_r11(nb, x, s, nbo, y)
371 INTEGER :: nb, nbo
372 REAL :: x(nb), s, y(nbo)
373
374 INTEGER :: i
375 !---------------------------------------------------------------------
376 DO i=1, nb
377 y(i) = MIN(x(i), s)
378 ENDDO
379
380 nbo = nb
381 ma_fumin_r11 = 0
382 !------------------------
383 END FUNCTION ma_fumin_r11
384
385 !************************************************
386
387 INTEGER FUNCTION ma_fumax_r11(nb, x, s, nbo, y)
388 INTEGER :: nb, nbo
389 REAL :: x(nb), s, y(nbo)
390
391 INTEGER :: i
392 !---------------------------------------------------------------------
393 DO i=1, nb
394 y(i) = MAX(x(i), s)
395 ENDDO
396
397 nbo = nb
398 ma_fumax_r11 = 0
399 !------------------------
400 END FUNCTION ma_fumax_r11
401
402 !************************************************
403
404 INTEGER FUNCTION ma_fuscat_r11(nb, x, nbi, ind, miss_val, nbo, y)
405 INTEGER :: nb, nbo, nbi
406 INTEGER :: ind(nbi)
407 REAL :: x(nb), miss_val, y(nbo)
408
409 INTEGER :: i, ii, ipos
410 !---------------------------------------------------------------------
411 ma_fuscat_r11 = 0
412
413 y(1:nbo) = miss_val
414
415 IF (nbi <= nb) THEN
416 ipos = 0
417 DO i=1, nbi
418 IF (ind(i) <= nbo .AND. ind(i) > 0) THEN
419 ipos = ipos+1
420 y(ind(i)) = x(ipos)
421 ELSE
422 IF (ind(i) > nbo) ma_fuscat_r11 = ma_fuscat_r11+1
423 ENDIF
424 ENDDO
425 !-- Repeat the data if needed
426 IF (MINVAL(ind) < 0) THEN
427 DO i=1, nbi
428 IF (ind(i) <= 0) THEN
429 DO ii=1, ABS(ind(i))-1
430 IF (ind(i+1)+ii <= nbo) THEN
431 y(ind(i+1)+ii) = y(ind(i+1))
432 ELSE
433 ma_fuscat_r11 = ma_fuscat_r11+1
434 ENDIF
435 ENDDO
436 ENDIF
437 ENDDO
438 ENDIF
439 ELSE
440 ma_fuscat_r11 = 1
441 ENDIF
442 !-------------------------
443 END FUNCTION ma_fuscat_r11
444
445 !************************************************
446
447 INTEGER FUNCTION ma_fugath_r11(nb, x, nbi, ind, miss_val, nbo, y)
448 INTEGER :: nb, nbo, nbi
449 INTEGER :: ind(nbi)
450 REAL :: x(nb), miss_val, y(nbo)
451
452 INTEGER :: i, ipos
453 !---------------------------------------------------------------------
454 IF (nbi <= nbo) THEN
455 ma_fugath_r11 = 0
456 y(1:nbo) = miss_val
457 ipos = 0
458 DO i=1, nbi
459 IF (ipos+1 <= nbo) THEN
460 IF (ind(i) > 0) THEN
461 ipos = ipos+1
462 y(ipos) = x(ind(i))
463 ENDIF
464 ELSE
465 IF (ipos+1 > nbo) ma_fugath_r11 = ma_fugath_r11+1
466 ENDIF
467 ENDDO
468 ELSE
469 ma_fugath_r11 = 1
470 ENDIF
471
472 nbo = ipos
473 !-------------------------
474 END FUNCTION ma_fugath_r11
475
476 !************************************************
477
478 INTEGER FUNCTION ma_fufill_r11(nb, x, nbi, ind, nbo, y)
479 INTEGER :: nb, nbo, nbi
480 INTEGER :: ind(nbi)
481 REAL :: x(nb), y(nbo)
482
483 INTEGER :: i, ii, ipos
484 !---------------------------------------------------------------------
485 ma_fufill_r11 = 0
486
487 IF (nbi <= nb) THEN
488 ipos = 0
489 DO i=1, nbi
490 IF (ind(i) <= nbo .AND. ind(i) > 0) THEN
491 ipos = ipos+1
492 y(ind(i)) = x(ipos)
493 ELSE
494 IF (ind(i) > nbo) ma_fufill_r11 = ma_fufill_r11+1
495 ENDIF
496 ENDDO
497 !-- Repeat the data if needed
498 IF (MINVAL(ind) < 0) THEN
499 DO i=1, nbi
500 IF (ind(i) <= 0) THEN
501 DO ii=1, ABS(ind(i))-1
502 IF (ind(i+1)+ii <= nbo) THEN
503 y(ind(i+1)+ii) = y(ind(i+1))
504 ELSE
505 ma_fufill_r11 = ma_fufill_r11+1
506 ENDIF
507 ENDDO
508 ENDIF
509 ENDDO
510 ENDIF
511 ELSE
512 ma_fufill_r11 = 1
513 ENDIF
514 !-------------------------
515 END FUNCTION ma_fufill_r11
516
517 !************************************************
518
519 INTEGER FUNCTION ma_fucoll_r11(nb, x, nbi, ind, nbo, y)
520 INTEGER :: nb, nbo, nbi
521 INTEGER :: ind(nbi)
522 REAL :: x(nb), y(nbo)
523
524 INTEGER :: i, ipos
525 !---------------------------------------------------------------------
526 IF (nbi <= nbo) THEN
527 ma_fucoll_r11 = 0
528 ipos = 0
529 DO i=1, nbi
530 IF (ipos+1 <= nbo) THEN
531 IF (ind(i) > 0) THEN
532 ipos = ipos+1
533 y(ipos) = x(ind(i))
534 ENDIF
535 ELSE
536 IF (ipos+1 > nbo) ma_fucoll_r11 = ma_fucoll_r11+1
537 ENDIF
538 ENDDO
539 ELSE
540 ma_fucoll_r11 = 1
541 ENDIF
542
543 nbo = ipos
544 !-------------------------
545 END FUNCTION ma_fucoll_r11
546
547 !************************************************
548
549 INTEGER FUNCTION ma_fuundef_r11(nb, x, nbi, ind, miss_val, nbo, y)
550 INTEGER :: nb, nbo, nbi
551 INTEGER :: ind(nbi)
552 REAL :: x(nb), miss_val, y(nbo)
553
554 INTEGER :: i
555 !---------------------------------------------------------------------
556 IF (nbi <= nbo .AND. nbo == nb) THEN
557 ma_fuundef_r11 = 0
558 DO i=1, nbo
559 y(i) = x(i)
560 ENDDO
561 DO i=1, nbi
562 IF (ind(i) <= nbo .AND. ind(i) > 0) THEN
563 y(ind(i)) = miss_val
564 ELSE
565 IF (ind(i) > nbo) ma_fuundef_r11 = ma_fuundef_r11+1
566 ENDIF
567 ENDDO
568 ELSE
569 ma_fuundef_r11 = 1
570 ENDIF
571 !--------------------------
572 END FUNCTION ma_fuundef_r11
573
574 !************************************************
575
576 INTEGER FUNCTION ma_fuonly_r11(nb, x, nbi, ind, miss_val, nbo, y)
577 INTEGER :: nb, nbo, nbi
578 INTEGER :: ind(nbi)
579 REAL :: x(nb), miss_val, y(nbo)
580
581 INTEGER :: i
582 !---------------------------------------------------------------------
583 IF ( (nbi <= nbo).AND.(nbo == nb) &
584 & .AND.ALL(ind(1:nbi) <= nbo) ) THEN
585 ma_fuonly_r11 = 0
586 y(1:nbo) = miss_val
587 DO i=1, nbi
588 IF (ind(i) > 0) THEN
589 y(ind(i)) = x(ind(i))
590 ENDIF
591 ENDDO
592 ELSE
593 ma_fuonly_r11 = 1
594 ENDIF
595 !-------------------------
596 END FUNCTION ma_fuonly_r11
597
598 !************************************************
599
600 !************************************************
601
602 !=== FUNCTIONS (only one argument)
603 !-
604 INTEGER FUNCTION ma_sin_r21(nb, x, nbo, y)
605 INTEGER :: nb(2), nbo, i, j, ij
606 REAL :: x(nb(1), nb(2)), y(nbo)
607 !---------------------------------------------------------------------
608 ij = 0
609 DO j=1, nb(2)
610 DO i=1, nb(1)
611 ij = ij+1
612 y(ij) = SIN(x(i, j))
613 ENDDO
614 ENDDO
615
616 nbo = nb(1)*nb(2)
617 ma_sin_r21 = 0
618 !----------------------
619 END FUNCTION ma_sin_r21
620
621 !************************************************
622
623 INTEGER FUNCTION ma_cos_r21(nb, x, nbo, y)
624 INTEGER :: nb(2), nbo, i, j, ij
625 REAL :: x(nb(1), nb(2)), y(nbo)
626 !---------------------------------------------------------------------
627 ij = 0
628 DO j=1, nb(2)
629 DO i=1, nb(1)
630 ij = ij+1
631 y(ij) = COS(x(i, j))
632 ENDDO
633 ENDDO
634
635 nbo = nb(1)*nb(2)
636 ma_cos_r21 = 0
637 !----------------------
638 END FUNCTION ma_cos_r21
639
640 !************************************************
641
642 INTEGER FUNCTION ma_tan_r21(nb, x, nbo, y)
643 INTEGER :: nb(2), nbo, i, j, ij
644 REAL :: x(nb(1), nb(2)), y(nbo)
645 !---------------------------------------------------------------------
646 ij = 0
647 DO j=1, nb(2)
648 DO i=1, nb(1)
649 ij = ij+1
650 y(ij) = TAN(x(i, j))
651 ENDDO
652 ENDDO
653
654 nbo = nb(1)*nb(2)
655 ma_tan_r21 = 0
656 !----------------------
657 END FUNCTION ma_tan_r21
658
659 !************************************************
660
661 INTEGER FUNCTION ma_asin_r21(nb, x, nbo, y)
662 INTEGER :: nb(2), nbo, i, j, ij
663 REAL :: x(nb(1), nb(2)), y(nbo)
664 !---------------------------------------------------------------------
665 ij = 0
666 DO j=1, nb(2)
667 DO i=1, nb(1)
668 ij = ij+1
669 y(ij) = ASIN(x(i, j))
670 ENDDO
671 ENDDO
672
673 nbo = nb(1)*nb(2)
674 ma_asin_r21 = 0
675 !-----------------------
676 END FUNCTION ma_asin_r21
677
678 !************************************************
679
680 INTEGER FUNCTION ma_acos_r21(nb, x, nbo, y)
681 INTEGER :: nb(2), nbo, i, j, ij
682 REAL :: x(nb(1), nb(2)), y(nbo)
683 !---------------------------------------------------------------------
684 ij = 0
685 DO j=1, nb(2)
686 DO i=1, nb(1)
687 ij = ij+1
688 y(ij) = ACOS(x(i, j))
689 ENDDO
690 ENDDO
691
692 nbo = nb(1)*nb(2)
693 ma_acos_r21 = 0
694 !-----------------------
695 END FUNCTION ma_acos_r21
696
697 !************************************************
698
699 INTEGER FUNCTION ma_atan_r21(nb, x, nbo, y)
700 INTEGER :: nb(2), nbo, i, j, ij
701 REAL :: x(nb(1), nb(2)), y(nbo)
702 !---------------------------------------------------------------------
703 ij = 0
704 DO j=1, nb(2)
705 DO i=1, nb(1)
706 ij = ij+1
707 y(ij) = ATAN(x(i, j))
708 ENDDO
709 ENDDO
710
711 nbo = nb(1)*nb(2)
712 ma_atan_r21 = 0
713 !-----------------------
714 END FUNCTION ma_atan_r21
715
716 !************************************************
717
718 INTEGER FUNCTION ma_exp_r21(nb, x, nbo, y)
719 INTEGER :: nb(2), nbo, i, j, ij
720 REAL :: x(nb(1), nb(2)), y(nbo)
721 !---------------------------------------------------------------------
722 ij = 0
723 DO j=1, nb(2)
724 DO i=1, nb(1)
725 ij = ij+1
726 y(ij) = EXP(x(i, j))
727 ENDDO
728 ENDDO
729
730 nbo = nb(1)*nb(2)
731 ma_exp_r21 = 0
732 !----------------------
733 END FUNCTION ma_exp_r21
734
735 !************************************************
736
737 INTEGER FUNCTION ma_alog_r21(nb, x, nbo, y)
738 INTEGER :: nb(2), nbo, i, j, ij
739 REAL :: x(nb(1), nb(2)), y(nbo)
740 !---------------------------------------------------------------------
741 ij = 0
742 DO j=1, nb(2)
743 DO i=1, nb(1)
744 ij = ij+1
745 y(ij) = ALOG(x(i, j))
746 ENDDO
747 ENDDO
748
749 nbo = nb(1)*nb(2)
750 ma_alog_r21 = 0
751 !-----------------------
752 END FUNCTION ma_alog_r21
753
754 !************************************************
755
756 INTEGER FUNCTION ma_sqrt_r21(nb, x, nbo, y)
757 INTEGER :: nb(2), nbo, i, j, ij
758 REAL :: x(nb(1), nb(2)), y(nbo)
759 !---------------------------------------------------------------------
760 ij = 0
761 DO j=1, nb(2)
762 DO i=1, nb(1)
763 ij = ij+1
764 y(ij) = SQRT(x(i, j))
765 ENDDO
766 ENDDO
767
768 nbo = nb(1)*nb(2)
769 ma_sqrt_r21 = 0
770 !-----------------------
771 END FUNCTION ma_sqrt_r21
772
773 !************************************************
774
775 INTEGER FUNCTION ma_abs_r21(nb, x, nbo, y)
776 INTEGER :: nb(2), nbo, i, j, ij
777 REAL :: x(nb(1), nb(2)), y(nbo)
778 !---------------------------------------------------------------------
779 ij = 0
780 DO j=1, nb(2)
781 DO i=1, nb(1)
782 ij = ij+1
783 y(ij) = ABS(x(i, j))
784 ENDDO
785 ENDDO
786
787 nbo = nb(1)*nb(2)
788 ma_abs_r21 = 0
789 !----------------------
790 END FUNCTION ma_abs_r21
791
792 !************************************************
793
794 INTEGER FUNCTION ma_chs_r21(nb, x, nbo, y)
795 INTEGER :: nb(2), nbo, i, j, ij
796 REAL :: x(nb(1), nb(2)), y(nbo)
797 !---------------------------------------------------------------------
798 ij = 0
799 DO j=1, nb(2)
800 DO i=1, nb(1)
801 ij = ij+1
802 y(ij) = x(i, j)*(-1.)
803 ENDDO
804 ENDDO
805
806 nbo = nb(1)*nb(2)
807 ma_chs_r21 = 0
808 !----------------------
809 END FUNCTION ma_chs_r21
810
811 !************************************************
812
813 INTEGER FUNCTION ma_cels_r21(nb, x, nbo, y)
814 INTEGER :: nb(2), nbo, i, j, ij
815 REAL :: x(nb(1), nb(2)), y(nbo)
816 !---------------------------------------------------------------------
817 ij = 0
818 DO j=1, nb(2)
819 DO i=1, nb(1)
820 ij = ij+1
821 y(ij) = x(i, j)-273.15
822 ENDDO
823 ENDDO
824
825 nbo = nb(1)*nb(2)
826 ma_cels_r21 = 0
827 !-----------------------
828 END FUNCTION ma_cels_r21
829
830 !************************************************
831
832 INTEGER FUNCTION ma_kelv_r21(nb, x, nbo, y)
833 INTEGER :: nb(2), nbo, i, j, ij
834 REAL :: x(nb(1), nb(2)), y(nbo)
835 !---------------------------------------------------------------------
836 ij = 0
837 DO j=1, nb(2)
838 DO i=1, nb(1)
839 ij = ij+1
840 y(ij) = x(i, j)+273.15
841 ENDDO
842 ENDDO
843
844 nbo = nb(1)*nb(2)
845 ma_kelv_r21 = 0
846 !-----------------------
847 END FUNCTION ma_kelv_r21
848
849 !************************************************
850
851 INTEGER FUNCTION ma_deg_r21(nb, x, nbo, y)
852 INTEGER :: nb(2), nbo, i, j, ij
853 REAL :: x(nb(1), nb(2)), y(nbo)
854 !---------------------------------------------------------------------
855 ij = 0
856 DO j=1, nb(2)
857 DO i=1, nb(1)
858 ij = ij+1
859 y(ij) = x(i, j)*57.29577951
860 ENDDO
861 ENDDO
862
863 nbo = nb(1)*nb(2)
864 ma_deg_r21 = 0
865 !----------------------
866 END FUNCTION ma_deg_r21
867
868 !************************************************
869
870 INTEGER FUNCTION ma_rad_r21(nb, x, nbo, y)
871 INTEGER :: nb(2), nbo, i, j, ij
872 REAL :: x(nb(1), nb(2)), y(nbo)
873 !---------------------------------------------------------------------
874 ij = 0
875 DO j=1, nb(2)
876 DO i=1, nb(1)
877 ij = ij+1
878 y(ij) = x(i, j)*0.01745329252
879 ENDDO
880 ENDDO
881
882 nbo = nb(1)*nb(2)
883 ma_rad_r21 = 0
884 !----------------------
885 END FUNCTION ma_rad_r21
886
887 !************************************************
888
889 INTEGER FUNCTION ma_ident_r21(nb, x, nbo, y)
890 INTEGER :: nb(2), nbo, i, j, ij
891 REAL :: x(nb(1), nb(2)), y(nbo)
892 !---------------------------------------------------------------------
893 ij = 0
894 DO j=1, nb(2)
895 DO i=1, nb(1)
896 ij = ij+1
897 y(ij) = x(i, j)
898 ENDDO
899 ENDDO
900
901 nbo = nb(1)*nb(2)
902 ma_ident_r21 = 0
903 !------------------------
904 END FUNCTION ma_ident_r21
905 !-
906 !=== OPERATIONS (two argument)
907 !-
908 INTEGER FUNCTION ma_add_r21(nb, x, s, nbo, y)
909 INTEGER :: nb(2), nbo
910 REAL :: x(nb(1), nb(2)), s, y(nbo)
911
912 INTEGER :: i, j, ij
913 !---------------------------------------------------------------------
914 ij = 0
915 DO j=1, nb(2)
916 DO i=1, nb(1)
917 ij = ij+1
918 y(ij) = x(i, j)+s
919 ENDDO
920 ENDDO
921
922 nbo = nb(1)*nb(2)
923 ma_add_r21 = 0
924 !----------------------
925 END FUNCTION ma_add_r21
926
927 !************************************************
928
929 INTEGER FUNCTION ma_sub_r21(nb, x, s, nbo, y)
930 INTEGER :: nb(2), nbo
931 REAL :: x(nb(1), nb(2)), s, y(nbo)
932
933 INTEGER :: i, j, ij
934 !---------------------------------------------------------------------
935 ij = 0
936 DO j=1, nb(2)
937 DO i=1, nb(1)
938 ij = ij+1
939 y(ij) = x(i, j)-s
940 ENDDO
941 ENDDO
942
943 nbo = nb(1)*nb(2)
944 ma_sub_r21 = 0
945 !----------------------
946 END FUNCTION ma_sub_r21
947
948 !************************************************
949
950 INTEGER FUNCTION ma_subi_r21(nb, x, s, nbo, y)
951 INTEGER :: nb(2), nbo
952 REAL :: x(nb(1), nb(2)), s, y(nbo)
953
954 INTEGER :: i, j, ij
955 !---------------------------------------------------------------------
956 ij = 0
957 DO j=1, nb(2)
958 DO i=1, nb(1)
959 ij = ij+1
960 y(ij) = s-x(i, j)
961 ENDDO
962 ENDDO
963
964 nbo = nb(1)*nb(2)
965 ma_subi_r21 = 0
966 !-----------------------
967 END FUNCTION ma_subi_r21
968
969 !************************************************
970
971 INTEGER FUNCTION ma_mult_r21(nb, x, s, nbo, y)
972 INTEGER :: nb(2), nbo
973 REAL :: x(nb(1), nb(2)), s, y(nbo)
974
975 INTEGER :: i, j, ij
976 !---------------------------------------------------------------------
977 ij = 0
978 DO j=1, nb(2)
979 DO i=1, nb(1)
980 ij = ij+1
981 y(ij) = x(i, j)*s
982 ENDDO
983 ENDDO
984
985 nbo = nb(1)*nb(2)
986 ma_mult_r21 = 0
987 !-----------------------
988 END FUNCTION ma_mult_r21
989
990 !************************************************
991
992 INTEGER FUNCTION ma_div_r21(nb, x, s, nbo, y)
993 INTEGER :: nb(2), nbo
994 REAL :: x(nb(1), nb(2)), s, y(nbo)
995
996 INTEGER :: i, j, ij
997 !---------------------------------------------------------------------
998 ij = 0
999 DO j=1, nb(2)
1000 DO i=1, nb(1)
1001 ij = ij+1
1002 y(ij) = x(i, j)/s
1003 ENDDO
1004 ENDDO
1005
1006 nbo = nb(1)*nb(2)
1007 ma_div_r21 = 0
1008 !----------------------
1009 END FUNCTION ma_div_r21
1010
1011 !************************************************
1012
1013 INTEGER FUNCTION ma_divi_r21(nb, x, s, nbo, y)
1014 INTEGER :: nb(2), nbo
1015 REAL :: x(nb(1), nb(2)), s, y(nbo)
1016
1017 INTEGER :: i, j, ij
1018 !---------------------------------------------------------------------
1019 ij = 0
1020 DO j=1, nb(2)
1021 DO i=1, nb(1)
1022 ij = ij+1
1023 y(ij) = s/x(i, j)
1024 ENDDO
1025 ENDDO
1026
1027 nbo = nb(1)*nb(2)
1028 ma_divi_r21 = 0
1029 !-----------------------
1030 END FUNCTION ma_divi_r21
1031
1032 !************************************************
1033
1034 INTEGER FUNCTION ma_power_r21(nb, x, s, nbo, y)
1035 INTEGER :: nb(2), nbo
1036 REAL :: x(nb(1), nb(2)), s, y(nbo)
1037
1038 INTEGER :: i, j, ij
1039 !---------------------------------------------------------------------
1040 ij = 0
1041 DO j=1, nb(2)
1042 DO i=1, nb(1)
1043 ij = ij+1
1044 y(ij) = x(i, j) ** s
1045 ENDDO
1046 ENDDO
1047
1048 nbo = nb(1)*nb(2)
1049 ma_power_r21 = 0
1050 !------------------------
1051 END FUNCTION ma_power_r21
1052
1053 !************************************************
1054
1055 INTEGER FUNCTION ma_fumin_r21(nb, x, s, nbo, y)
1056 INTEGER :: nb(2), nbo
1057 REAL :: x(nb(1), nb(2)), s, y(nbo)
1058
1059 INTEGER :: i, j, ij
1060 !---------------------------------------------------------------------
1061 ij = 0
1062 DO j=1, nb(2)
1063 DO i=1, nb(1)
1064 ij = ij+1
1065 y(ij) = MIN(x(i, j), s)
1066 ENDDO
1067 ENDDO
1068
1069 nbo = nb(1)*nb(2)
1070 ma_fumin_r21 = 0
1071 !------------------------
1072 END FUNCTION ma_fumin_r21
1073
1074 !************************************************
1075
1076 INTEGER FUNCTION ma_fumax_r21(nb, x, s, nbo, y)
1077 INTEGER :: nb(2), nbo
1078 REAL :: x(nb(1), nb(2)), s, y(nbo)
1079
1080 INTEGER :: i, j, ij
1081 !---------------------------------------------------------------------
1082 ij = 0
1083 DO j=1, nb(2)
1084 DO i=1, nb(1)
1085 ij = ij+1
1086 y(ij) = MAX(x(i, j), s)
1087 ENDDO
1088 ENDDO
1089
1090 nbo = nb(1)*nb(2)
1091 ma_fumax_r21 = 0
1092 !------------------------
1093 END FUNCTION ma_fumax_r21
1094
1095 !************************************************
1096
1097 INTEGER FUNCTION ma_fuscat_r21(nb, x, nbi, ind, miss_val, nbo, y)
1098 INTEGER :: nb(2), nbo, nbi
1099 INTEGER :: ind(nbi)
1100 REAL :: x(nb(1), nb(2)), miss_val, y(nbo)
1101
1102 INTEGER :: i, j, ij, ii, ipos
1103 !---------------------------------------------------------------------
1104 ma_fuscat_r21 = 0
1105
1106 y(1:nbo) = miss_val
1107
1108 IF (nbi <= nb(1)*nb(2)) THEN
1109 ipos = 0
1110 DO ij=1, nbi
1111 IF (ind(ij) <= nbo .AND. ind(ij) > 0) THEN
1112 ipos = ipos+1
1113 j = ((ipos-1)/nb(1))+1
1114 i = (ipos-(j-1)*nb(1))
1115 y(ind(ij)) = x(i, j)
1116 ELSE
1117 IF (ind(ij) > nbo) ma_fuscat_r21 = ma_fuscat_r21+1
1118 ENDIF
1119 ENDDO
1120 !-- Repeat the data if needed
1121 IF (MINVAL(ind) < 0) THEN
1122 DO i=1, nbi
1123 IF (ind(i) <= 0) THEN
1124 DO ii=1, ABS(ind(i))-1
1125 IF (ind(i+1)+ii <= nbo) THEN
1126 y(ind(i+1)+ii) = y(ind(i+1))
1127 ELSE
1128 ma_fuscat_r21 = ma_fuscat_r21+1
1129 ENDIF
1130 ENDDO
1131 ENDIF
1132 ENDDO
1133 ENDIF
1134 ELSE
1135 ma_fuscat_r21 = 1
1136 ENDIF
1137 !-------------------------
1138 END FUNCTION ma_fuscat_r21
1139
1140 !************************************************
1141
1142 INTEGER FUNCTION ma_fugath_r21(nb, x, nbi, ind, miss_val, nbo, y)
1143 INTEGER :: nb(2), nbo, nbi
1144 INTEGER :: ind(nbi)
1145 REAL :: x(nb(1), nb(2)), miss_val, y(nbo)
1146
1147 INTEGER :: i, j, ij, ipos
1148 !---------------------------------------------------------------------
1149 IF (nbi <= nbo) THEN
1150 ma_fugath_r21 = 0
1151 y(1:nbo) = miss_val
1152 ipos = 0
1153 DO ij=1, nbi
1154 IF (ipos+1 <= nbo) THEN
1155 IF (ind(ij) > 0) THEN
1156 j = ((ind(ij)-1)/nb(1))+1
1157 i = (ind(ij)-(j-1)*nb(1))
1158 ipos = ipos+1
1159 y(ipos) = x(i, j)
1160 ENDIF
1161 ELSE
1162 IF (ipos+1 > nbo) ma_fugath_r21 = ma_fugath_r21+1
1163 ENDIF
1164 ENDDO
1165 ELSE
1166 ma_fugath_r21 = 1
1167 ENDIF
1168 nbo = ipos
1169 !-------------------------
1170 END FUNCTION ma_fugath_r21
1171
1172 !************************************************
1173
1174 INTEGER FUNCTION ma_fufill_r21(nb, x, nbi, ind, nbo, y)
1175 INTEGER :: nb(2), nbo, nbi
1176 INTEGER :: ind(nbi)
1177 REAL :: x(nb(1), nb(2)), y(nbo)
1178
1179 INTEGER :: i, j, ij, ii, ipos
1180 !---------------------------------------------------------------------
1181 ma_fufill_r21 = 0
1182
1183 IF (nbi <= nb(1)*nb(2)) THEN
1184 ipos = 0
1185 DO ij=1, nbi
1186 IF (ind(ij) <= nbo .AND. ind(ij) > 0) THEN
1187 ipos = ipos+1
1188 j = ((ipos-1)/nb(1))+1
1189 i = (ipos-(j-1)*nb(1))
1190 y(ind(ij)) = x(i, j)
1191 ELSE
1192 IF (ind(ij) > nbo) ma_fufill_r21 = ma_fufill_r21+1
1193 ENDIF
1194 ENDDO
1195 !-- Repeat the data if needed
1196 IF (MINVAL(ind) < 0) THEN
1197 DO i=1, nbi
1198 IF (ind(i) <= 0) THEN
1199 DO ii=1, ABS(ind(i))-1
1200 IF (ind(i+1)+ii <= nbo) THEN
1201 y(ind(i+1)+ii) = y(ind(i+1))
1202 ELSE
1203 ma_fufill_r21 = ma_fufill_r21+1
1204 ENDIF
1205 ENDDO
1206 ENDIF
1207 ENDDO
1208 ENDIF
1209 ELSE
1210 ma_fufill_r21 = 1
1211 ENDIF
1212 !-------------------------
1213 END FUNCTION ma_fufill_r21
1214
1215 !************************************************
1216
1217 INTEGER FUNCTION ma_fucoll_r21(nb, x, nbi, ind, nbo, y)
1218 INTEGER :: nb(2), nbo, nbi
1219 INTEGER :: ind(nbi)
1220 REAL :: x(nb(1), nb(2)), y(nbo)
1221
1222 INTEGER :: i, j, ij, ipos
1223 !---------------------------------------------------------------------
1224 IF (nbi <= nbo) THEN
1225 ma_fucoll_r21 = 0
1226 ipos = 0
1227 DO ij=1, nbi
1228 IF (ipos+1 <= nbo) THEN
1229 IF (ind(ij) > 0) THEN
1230 j = ((ind(ij)-1)/nb(1))+1
1231 i = (ind(ij)-(j-1)*nb(1))
1232 ipos = ipos+1
1233 y(ipos) = x(i, j)
1234 ENDIF
1235 ELSE
1236 IF (ipos+1 > nbo) ma_fucoll_r21 = ma_fucoll_r21+1
1237 ENDIF
1238 ENDDO
1239 ELSE
1240 ma_fucoll_r21 = 1
1241 ENDIF
1242 nbo = ipos
1243 !-------------------------
1244 END FUNCTION ma_fucoll_r21
1245
1246 !************************************************
1247
1248 INTEGER FUNCTION ma_fuundef_r21(nb, x, nbi, ind, miss_val, nbo, y)
1249 INTEGER :: nb(2), nbo, nbi
1250 INTEGER :: ind(nbi)
1251 REAL :: x(nb(1), nb(2)), miss_val, y(nbo)
1252
1253 INTEGER :: i, j, ij
1254 !---------------------------------------------------------------------
1255 IF (nbi <= nbo .AND. nbo == nb(1)*nb(2)) THEN
1256 ma_fuundef_r21 = 0
1257 DO ij=1, nbo
1258 j = ((ij-1)/nb(1))+1
1259 i = (ij-(j-1)*nb(1))
1260 y(ij) = x(i, j)
1261 ENDDO
1262 DO i=1, nbi
1263 IF (ind(i) <= nbo .AND. ind(i) > 0) THEN
1264 y(ind(i)) = miss_val
1265 ELSE
1266 IF (ind(i) > nbo) ma_fuundef_r21 = ma_fuundef_r21+1
1267 ENDIF
1268 ENDDO
1269 ELSE
1270 ma_fuundef_r21 = 1
1271 ENDIF
1272 !--------------------------
1273 END FUNCTION ma_fuundef_r21
1274
1275 !************************************************
1276
1277 INTEGER FUNCTION ma_fuonly_r21(nb, x, nbi, ind, miss_val, nbo, y)
1278 INTEGER :: nb(2), nbo, nbi
1279 INTEGER :: ind(nbi)
1280 REAL :: x(nb(1), nb(2)), miss_val, y(nbo)
1281
1282 INTEGER :: i, j, ij
1283 !---------------------------------------------------------------------
1284 IF ( (nbi <= nbo).AND.(nbo == nb(1)*nb(2)) &
1285 & .AND.ALL(ind(1:nbi) <= nbo) ) THEN
1286 ma_fuonly_r21 = 0
1287 y(1:nbo) = miss_val
1288 DO ij=1, nbi
1289 IF (ind(ij) > 0) THEN
1290 j = ((ind(ij)-1)/nb(1))+1
1291 i = (ind(ij)-(j-1)*nb(1))
1292 y(ind(ij)) = x(i, j)
1293 ENDIF
1294 ENDDO
1295 ELSE
1296 ma_fuonly_r21 = 1
1297 ENDIF
1298 !-------------------------
1299 END FUNCTION ma_fuonly_r21
1300
1301 !************************************************
1302
1303 !************************************************
1304
1305 !=== FUNCTIONS (only one argument)
1306 !-
1307 INTEGER FUNCTION ma_sin_r31(nb, x, nbo, y)
1308 INTEGER :: nb(3), nbo, i, j, k, ij
1309 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1310 !---------------------------------------------------------------------
1311 ij = 0
1312 DO k=1, nb(3)
1313 DO j=1, nb(2)
1314 DO i=1, nb(1)
1315 ij = ij+1
1316 y(ij) = SIN(x(i, j, k))
1317 ENDDO
1318 ENDDO
1319 ENDDO
1320
1321 nbo = nb(1)*nb(2)*nb(3)
1322 ma_sin_r31 = 0
1323 !----------------------
1324 END FUNCTION ma_sin_r31
1325
1326 !************************************************
1327
1328 INTEGER FUNCTION ma_cos_r31(nb, x, nbo, y)
1329 INTEGER :: nb(3), nbo, i, j, k, ij
1330 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1331 !---------------------------------------------------------------------
1332 ij = 0
1333 DO k=1, nb(3)
1334 DO j=1, nb(2)
1335 DO i=1, nb(1)
1336 ij = ij+1
1337 y(ij) = COS(x(i, j, k))
1338 ENDDO
1339 ENDDO
1340 ENDDO
1341
1342 nbo = nb(1)*nb(2)*nb(3)
1343 ma_cos_r31 = 0
1344 !----------------------
1345 END FUNCTION ma_cos_r31
1346
1347 !************************************************
1348
1349 INTEGER FUNCTION ma_tan_r31(nb, x, nbo, y)
1350 INTEGER :: nb(3), nbo, i, j, k, ij
1351 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1352 !---------------------------------------------------------------------
1353 ij = 0
1354 DO k=1, nb(3)
1355 DO j=1, nb(2)
1356 DO i=1, nb(1)
1357 ij = ij+1
1358 y(ij) = TAN(x(i, j, k))
1359 ENDDO
1360 ENDDO
1361 ENDDO
1362
1363 nbo = nb(1)*nb(2)*nb(3)
1364 ma_tan_r31 = 0
1365 !----------------------
1366 END FUNCTION ma_tan_r31
1367
1368 !************************************************
1369
1370 INTEGER FUNCTION ma_asin_r31(nb, x, nbo, y)
1371 INTEGER :: nb(3), nbo, i, j, k, ij
1372 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1373 !---------------------------------------------------------------------
1374 ij = 0
1375 DO k=1, nb(3)
1376 DO j=1, nb(2)
1377 DO i=1, nb(1)
1378 ij = ij+1
1379 y(ij) = ASIN(x(i, j, k))
1380 ENDDO
1381 ENDDO
1382 ENDDO
1383
1384 nbo = nb(1)*nb(2)*nb(3)
1385 ma_asin_r31 = 0
1386 !-----------------------
1387 END FUNCTION ma_asin_r31
1388
1389 !************************************************
1390
1391 INTEGER FUNCTION ma_acos_r31(nb, x, nbo, y)
1392 INTEGER :: nb(3), nbo, i, j, k, ij
1393 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1394 !---------------------------------------------------------------------
1395 ij = 0
1396 DO k=1, nb(3)
1397 DO j=1, nb(2)
1398 DO i=1, nb(1)
1399 ij = ij+1
1400 y(ij) = ACOS(x(i, j, k))
1401 ENDDO
1402 ENDDO
1403 ENDDO
1404
1405 nbo = nb(1)*nb(2)*nb(3)
1406 ma_acos_r31 = 0
1407 !-----------------------
1408 END FUNCTION ma_acos_r31
1409
1410 !************************************************
1411
1412 INTEGER FUNCTION ma_atan_r31(nb, x, nbo, y)
1413 INTEGER :: nb(3), nbo, i, j, k, ij
1414 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1415 !---------------------------------------------------------------------
1416 ij = 0
1417 DO k=1, nb(3)
1418 DO j=1, nb(2)
1419 DO i=1, nb(1)
1420 ij = ij+1
1421 y(ij) = ATAN(x(i, j, k))
1422 ENDDO
1423 ENDDO
1424 ENDDO
1425
1426 nbo = nb(1)*nb(2)*nb(3)
1427 ma_atan_r31 = 0
1428 !-----------------------
1429 END FUNCTION ma_atan_r31
1430
1431 !************************************************
1432
1433 INTEGER FUNCTION ma_exp_r31(nb, x, nbo, y)
1434 INTEGER :: nb(3), nbo, i, j, k, ij
1435 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1436 !---------------------------------------------------------------------
1437 ij = 0
1438 DO k=1, nb(3)
1439 DO j=1, nb(2)
1440 DO i=1, nb(1)
1441 ij = ij+1
1442 y(ij) = EXP(x(i, j, k))
1443 ENDDO
1444 ENDDO
1445 ENDDO
1446
1447 nbo = nb(1)*nb(2)*nb(3)
1448 ma_exp_r31 = 0
1449 !----------------------
1450 END FUNCTION ma_exp_r31
1451
1452 !************************************************
1453
1454 INTEGER FUNCTION ma_alog_r31(nb, x, nbo, y)
1455 INTEGER :: nb(3), nbo, i, j, k, ij
1456 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1457 !---------------------------------------------------------------------
1458 ij = 0
1459 DO k=1, nb(3)
1460 DO j=1, nb(2)
1461 DO i=1, nb(1)
1462 ij = ij+1
1463 y(ij) = ALOG(x(i, j, k))
1464 ENDDO
1465 ENDDO
1466 ENDDO
1467
1468 nbo = nb(1)*nb(2)*nb(3)
1469 ma_alog_r31 = 0
1470 !-----------------------
1471 END FUNCTION ma_alog_r31
1472
1473 !************************************************
1474
1475 INTEGER FUNCTION ma_sqrt_r31(nb, x, nbo, y)
1476 INTEGER :: nb(3), nbo, i, j, k, ij
1477 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1478 !---------------------------------------------------------------------
1479 ij = 0
1480 DO k=1, nb(3)
1481 DO j=1, nb(2)
1482 DO i=1, nb(1)
1483 ij = ij+1
1484 y(ij) = SQRT(x(i, j, k))
1485 ENDDO
1486 ENDDO
1487 ENDDO
1488
1489 nbo = nb(1)*nb(2)*nb(3)
1490 ma_sqrt_r31 = 0
1491 !-----------------------
1492 END FUNCTION ma_sqrt_r31
1493
1494 !************************************************
1495
1496 INTEGER FUNCTION ma_abs_r31(nb, x, nbo, y)
1497 INTEGER :: nb(3), nbo, i, j, k, ij
1498 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1499 !---------------------------------------------------------------------
1500 ij = 0
1501 DO k=1, nb(3)
1502 DO j=1, nb(2)
1503 DO i=1, nb(1)
1504 ij = ij+1
1505 y(ij) = ABS(x(i, j, k))
1506 ENDDO
1507 ENDDO
1508 ENDDO
1509
1510 nbo = nb(1)*nb(2)*nb(3)
1511 ma_abs_r31 = 0
1512 !----------------------
1513 END FUNCTION ma_abs_r31
1514
1515 !************************************************
1516
1517 INTEGER FUNCTION ma_chs_r31(nb, x, nbo, y)
1518 INTEGER :: nb(3), nbo, i, j, k, ij
1519 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1520 !---------------------------------------------------------------------
1521 ij = 0
1522 DO k=1, nb(3)
1523 DO j=1, nb(2)
1524 DO i=1, nb(1)
1525 ij = ij+1
1526 y(ij) = x(i, j, k)*(-1.)
1527 ENDDO
1528 ENDDO
1529 ENDDO
1530
1531 nbo = nb(1)*nb(2)*nb(3)
1532 ma_chs_r31 = 0
1533 !----------------------
1534 END FUNCTION ma_chs_r31
1535
1536 !************************************************
1537
1538 INTEGER FUNCTION ma_cels_r31(nb, x, nbo, y)
1539 INTEGER :: nb(3), nbo, i, j, k, ij
1540 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1541 !---------------------------------------------------------------------
1542 ij = 0
1543 DO k=1, nb(3)
1544 DO j=1, nb(2)
1545 DO i=1, nb(1)
1546 ij = ij+1
1547 y(ij) = x(i, j, k)-273.15
1548 ENDDO
1549 ENDDO
1550 ENDDO
1551
1552 nbo = nb(1)*nb(2)*nb(3)
1553 ma_cels_r31 = 0
1554 !-----------------------
1555 END FUNCTION ma_cels_r31
1556
1557 !************************************************
1558
1559 INTEGER FUNCTION ma_kelv_r31(nb, x, nbo, y)
1560 INTEGER :: nb(3), nbo, i, j, k, ij
1561 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1562 !---------------------------------------------------------------------
1563 ij = 0
1564 DO k=1, nb(3)
1565 DO j=1, nb(2)
1566 DO i=1, nb(1)
1567 ij = ij+1
1568 y(ij) = x(i, j, k)+273.15
1569 ENDDO
1570 ENDDO
1571 ENDDO
1572
1573 nbo = nb(1)*nb(2)*nb(3)
1574 ma_kelv_r31 = 0
1575 !-----------------------
1576 END FUNCTION ma_kelv_r31
1577
1578 !************************************************
1579
1580 INTEGER FUNCTION ma_deg_r31(nb, x, nbo, y)
1581 INTEGER :: nb(3), nbo, i, j, k, ij
1582 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1583 !---------------------------------------------------------------------
1584 ij = 0
1585 DO k=1, nb(3)
1586 DO j=1, nb(2)
1587 DO i=1, nb(1)
1588 ij = ij+1
1589 y(ij) = x(i, j, k)*57.29577951
1590 ENDDO
1591 ENDDO
1592 ENDDO
1593
1594 nbo = nb(1)*nb(2)*nb(3)
1595 ma_deg_r31 = 0
1596 !----------------------
1597 END FUNCTION ma_deg_r31
1598
1599 !************************************************
1600
1601 INTEGER FUNCTION ma_rad_r31(nb, x, nbo, y)
1602 INTEGER :: nb(3), nbo, i, j, k, ij
1603 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1604 !---------------------------------------------------------------------
1605 ij = 0
1606 DO k=1, nb(3)
1607 DO j=1, nb(2)
1608 DO i=1, nb(1)
1609 ij = ij+1
1610 y(ij) = x(i, j, k)*0.01745329252
1611 ENDDO
1612 ENDDO
1613 ENDDO
1614
1615 nbo = nb(1)*nb(2)*nb(3)
1616 ma_rad_r31 = 0
1617 !----------------------
1618 END FUNCTION ma_rad_r31
1619
1620 !************************************************
1621
1622 INTEGER FUNCTION ma_ident_r31(nb, x, nbo, y)
1623 INTEGER :: nb(3), nbo, i, j, k, ij
1624 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1625 !---------------------------------------------------------------------
1626 ij = 0
1627 DO k=1, nb(3)
1628 DO j=1, nb(2)
1629 DO i=1, nb(1)
1630 ij = ij+1
1631 y(ij) = x(i, j, k)
1632 ENDDO
1633 ENDDO
1634 ENDDO
1635
1636 nbo = nb(1)*nb(2)*nb(3)
1637 ma_ident_r31 = 0
1638 !------------------------
1639 END FUNCTION ma_ident_r31
1640 !-
1641 !=== OPERATIONS (two argument)
1642 !-
1643 INTEGER FUNCTION ma_add_r31(nb, x, s, nbo, y)
1644 INTEGER :: nb(3), nbo
1645 REAL :: x(nb(1), nb(2), nb(3)), s, y(nbo)
1646
1647 INTEGER :: i, j, k, ij
1648 !---------------------------------------------------------------------
1649 ij = 0
1650 DO k=1, nb(3)
1651 DO j=1, nb(2)
1652 DO i=1, nb(1)
1653 ij = ij+1
1654 y(ij) = x(i, j, k)+s
1655 ENDDO
1656 ENDDO
1657 ENDDO
1658
1659 nbo = nb(1)*nb(2)*nb(3)
1660 ma_add_r31 = 0
1661 !----------------------
1662 END FUNCTION ma_add_r31
1663
1664 !************************************************
1665
1666 INTEGER FUNCTION ma_sub_r31(nb, x, s, nbo, y)
1667 INTEGER :: nb(3), nbo
1668 REAL :: x(nb(1), nb(2), nb(3)), s, y(nbo)
1669
1670 INTEGER :: i, j, k, ij
1671 !---------------------------------------------------------------------
1672 ij = 0
1673 DO k=1, nb(3)
1674 DO j=1, nb(2)
1675 DO i=1, nb(1)
1676 ij = ij+1
1677 y(ij) = x(i, j, k)-s
1678 ENDDO
1679 ENDDO
1680 ENDDO
1681
1682 nbo = nb(1)*nb(2)*nb(3)
1683 ma_sub_r31 = 0
1684 !----------------------
1685 END FUNCTION ma_sub_r31
1686
1687 !************************************************
1688
1689 INTEGER FUNCTION ma_subi_r31(nb, x, s, nbo, y)
1690 INTEGER :: nb(3), nbo
1691 REAL :: x(nb(1), nb(2), nb(3)), s, y(nbo)
1692
1693 INTEGER :: i, j, k, ij
1694 !---------------------------------------------------------------------
1695 ij = 0
1696 DO k=1, nb(3)
1697 DO j=1, nb(2)
1698 DO i=1, nb(1)
1699 ij = ij+1
1700 y(ij) = s-x(i, j, k)
1701 ENDDO
1702 ENDDO
1703 ENDDO
1704
1705 nbo = nb(1)*nb(2)*nb(3)
1706 ma_subi_r31 = 0
1707 !-----------------------
1708 END FUNCTION ma_subi_r31
1709
1710 !************************************************
1711
1712 INTEGER FUNCTION ma_mult_r31(nb, x, s, nbo, y)
1713 INTEGER :: nb(3), nbo
1714 REAL :: x(nb(1), nb(2), nb(3)), s, y(nbo)
1715
1716 INTEGER :: i, j, k, ij
1717 !---------------------------------------------------------------------
1718 ij = 0
1719 DO k=1, nb(3)
1720 DO j=1, nb(2)
1721 DO i=1, nb(1)
1722 ij = ij+1
1723 y(ij) = x(i, j, k)*s
1724 ENDDO
1725 ENDDO
1726 ENDDO
1727
1728 nbo = nb(1)*nb(2)*nb(3)
1729 ma_mult_r31 = 0
1730 !-----------------------
1731 END FUNCTION ma_mult_r31
1732
1733 !************************************************
1734
1735 INTEGER FUNCTION ma_div_r31(nb, x, s, nbo, y)
1736 INTEGER :: nb(3), nbo
1737 REAL :: x(nb(1), nb(2), nb(3)), s, y(nbo)
1738
1739 INTEGER :: i, j, k, ij
1740 !---------------------------------------------------------------------
1741 ij = 0
1742 DO k=1, nb(3)
1743 DO j=1, nb(2)
1744 DO i=1, nb(1)
1745 ij = ij+1
1746 y(ij) = x(i, j, k)/s
1747 ENDDO
1748 ENDDO
1749 ENDDO
1750
1751 nbo = nb(1)*nb(2)*nb(3)
1752 ma_div_r31 = 0
1753 !----------------------
1754 END FUNCTION ma_div_r31
1755
1756 !************************************************
1757
1758 INTEGER FUNCTION ma_divi_r31(nb, x, s, nbo, y)
1759 INTEGER :: nb(3), nbo
1760 REAL :: x(nb(1), nb(2), nb(3)), s, y(nbo)
1761
1762 INTEGER :: i, j, k, ij
1763 !---------------------------------------------------------------------
1764 ij = 0
1765 DO k=1, nb(3)
1766 DO j=1, nb(2)
1767 DO i=1, nb(1)
1768 ij = ij+1
1769 y(ij) = s/x(i, j, k)
1770 ENDDO
1771 ENDDO
1772 ENDDO
1773
1774 nbo = nb(1)*nb(2)*nb(3)
1775 ma_divi_r31 = 0
1776 !-----------------------
1777 END FUNCTION ma_divi_r31
1778
1779 !************************************************
1780
1781 INTEGER FUNCTION ma_power_r31(nb, x, s, nbo, y)
1782 INTEGER :: nb(3), nbo
1783 REAL :: x(nb(1), nb(2), nb(3)), s, y(nbo)
1784
1785 INTEGER :: i, j, k, ij
1786 !---------------------------------------------------------------------
1787 ij = 0
1788 DO k=1, nb(3)
1789 DO j=1, nb(2)
1790 DO i=1, nb(1)
1791 ij = ij+1
1792 y(ij) = x(i, j, k)**s
1793 ENDDO
1794 ENDDO
1795 ENDDO
1796
1797 nbo = nb(1)*nb(2)*nb(3)
1798 ma_power_r31 = 0
1799 !------------------------
1800 END FUNCTION ma_power_r31
1801
1802 !************************************************
1803
1804 INTEGER FUNCTION ma_fumin_r31(nb, x, s, nbo, y)
1805 INTEGER :: nb(3), nbo
1806 REAL :: x(nb(1), nb(2), nb(3)), s, y(nbo)
1807
1808 INTEGER :: i, j, k, ij
1809 !---------------------------------------------------------------------
1810 ij = 0
1811 DO k=1, nb(3)
1812 DO j=1, nb(2)
1813 DO i=1, nb(1)
1814 ij = ij+1
1815 y(ij) = MIN(x(i, j, k), s)
1816 ENDDO
1817 ENDDO
1818 ENDDO
1819
1820 nbo = nb(1)*nb(2)*nb(3)
1821 ma_fumin_r31 = 0
1822 !------------------------
1823 END FUNCTION ma_fumin_r31
1824
1825 !************************************************
1826
1827 INTEGER FUNCTION ma_fumax_r31(nb, x, s, nbo, y)
1828 INTEGER :: nb(3), nbo
1829 REAL :: x(nb(1), nb(2), nb(3)), s, y(nbo)
1830
1831 INTEGER :: i, j, k, ij
1832 !---------------------------------------------------------------------
1833 ij = 0
1834 DO k=1, nb(3)
1835 DO j=1, nb(2)
1836 DO i=1, nb(1)
1837 ij = ij+1
1838 y(ij) = MAX(x(i, j, k), s)
1839 ENDDO
1840 ENDDO
1841 ENDDO
1842
1843 nbo = nb(1)*nb(2)*nb(3)
1844 ma_fumax_r31 = 0
1845 !------------------------
1846 END FUNCTION ma_fumax_r31
1847
1848 !************************************************
1849
1850 INTEGER FUNCTION ma_fuscat_r31(nb, x, nbi, ind, miss_val, nbo, y)
1851 INTEGER :: nb(3), nbo, nbi
1852 INTEGER :: ind(nbi)
1853 REAL :: x(nb(1), nb(2), nb(3)), miss_val, y(nbo)
1854
1855 INTEGER :: i, j, k, ij, ii, ipos, ipp, isb
1856 !---------------------------------------------------------------------
1857 ma_fuscat_r31 = 0
1858
1859 y(1:nbo) = miss_val
1860
1861 IF (nbi <= nb(1)*nb(2)*nb(3)) THEN
1862 ipos = 0
1863 isb = nb(1)*nb(2)
1864 DO ij=1, nbi
1865 IF (ind(ij) <= nbo .AND. ind(ij) > 0) THEN
1866 ipos = ipos+1
1867 k = ((ipos-1)/isb)+1
1868 ipp = ipos-(k-1)*isb
1869 j = ((ipp-1)/nb(1))+1
1870 i = (ipp-(j-1)*nb(1))
1871 y(ind(ij)) = x(i, j, k)
1872 ELSE
1873 IF (ind(ij) > nbo) ma_fuscat_r31 = ma_fuscat_r31+1
1874 ENDIF
1875 ENDDO
1876 !-- Repeat the data if needed
1877 IF (MINVAL(ind) < 0) THEN
1878 DO i=1, nbi
1879 IF (ind(i) <= 0) THEN
1880 DO ii=1, ABS(ind(i))-1
1881 IF (ind(i+1)+ii <= nbo) THEN
1882 y(ind(i+1)+ii) = y(ind(i+1))
1883 ELSE
1884 ma_fuscat_r31 = ma_fuscat_r31+1
1885 ENDIF
1886 ENDDO
1887 ENDIF
1888 ENDDO
1889 ENDIF
1890 ELSE
1891 ma_fuscat_r31 = 1
1892 ENDIF
1893 !-------------------------
1894 END FUNCTION ma_fuscat_r31
1895
1896 !************************************************
1897
1898 INTEGER FUNCTION ma_fugath_r31(nb, x, nbi, ind, miss_val, nbo, y)
1899 INTEGER :: nb(3), nbo, nbi
1900 INTEGER :: ind(nbi)
1901 REAL :: x(nb(1), nb(2), nb(3)), miss_val, y(nbo)
1902
1903 INTEGER :: i, j, k, ij, ipos, ipp, isb
1904 !---------------------------------------------------------------------
1905 IF (nbi <= nbo) THEN
1906 ma_fugath_r31 = 0
1907 y(1:nbo) = miss_val
1908 ipos = 0
1909 isb = nb(1)*nb(2)
1910 DO ij=1, nbi
1911 IF (ipos+1 <= nbo) THEN
1912 IF (ind(ij) > 0) THEN
1913 k = ((ind(ij)-1)/isb)+1
1914 ipp = ind(ij)-(k-1)*isb
1915 j = ((ipp-1)/nb(1))+1
1916 i = (ipp-(j-1)*nb(1))
1917 ipos = ipos+1
1918 y(ipos) = x(i, j, k)
1919 ENDIF
1920 ELSE
1921 IF (ipos+1 > nbo) ma_fugath_r31 = ma_fugath_r31+1
1922 ENDIF
1923 ENDDO
1924 ELSE
1925 ma_fugath_r31 = 1
1926 ENDIF
1927 nbo = ipos
1928 !-------------------------
1929 END FUNCTION ma_fugath_r31
1930
1931 !************************************************
1932
1933 INTEGER FUNCTION ma_fufill_r31(nb, x, nbi, ind, nbo, y)
1934 INTEGER :: nb(3), nbo, nbi
1935 INTEGER :: ind(nbi)
1936 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1937
1938 INTEGER :: i, j, k, ij, ii, ipos, ipp, isb
1939 !---------------------------------------------------------------------
1940 ma_fufill_r31 = 0
1941 IF (nbi <= nb(1)*nb(2)*nb(3)) THEN
1942 ipos = 0
1943 isb = nb(1)*nb(2)
1944 DO ij=1, nbi
1945 IF (ind(ij) <= nbo .AND. ind(ij) > 0) THEN
1946 ipos = ipos+1
1947 k = ((ipos-1)/isb)+1
1948 ipp = ipos-(k-1)*isb
1949 j = ((ipp-1)/nb(1))+1
1950 i = (ipp-(j-1)*nb(1))
1951 y(ind(ij)) = x(i, j, k)
1952 ELSE
1953 IF (ind(ij) > nbo) ma_fufill_r31 = ma_fufill_r31+1
1954 ENDIF
1955 ENDDO
1956 !-- Repeat the data if needed
1957 IF (MINVAL(ind) < 0) THEN
1958 DO i=1, nbi
1959 IF (ind(i) <= 0) THEN
1960 DO ii=1, ABS(ind(i))-1
1961 IF (ind(i+1)+ii <= nbo) THEN
1962 y(ind(i+1)+ii) = y(ind(i+1))
1963 ELSE
1964 ma_fufill_r31 = ma_fufill_r31+1
1965 ENDIF
1966 ENDDO
1967 ENDIF
1968 ENDDO
1969 ENDIF
1970 ELSE
1971 ma_fufill_r31 = 1
1972 ENDIF
1973 !-------------------------
1974 END FUNCTION ma_fufill_r31
1975
1976 !************************************************
1977
1978 INTEGER FUNCTION ma_fucoll_r31(nb, x, nbi, ind, nbo, y)
1979 INTEGER :: nb(3), nbo, nbi
1980 INTEGER :: ind(nbi)
1981 REAL :: x(nb(1), nb(2), nb(3)), y(nbo)
1982
1983 INTEGER :: i, j, k, ij, ipos, ipp, isb
1984 !---------------------------------------------------------------------
1985 IF (nbi <= nbo) THEN
1986 ma_fucoll_r31 = 0
1987 ipos = 0
1988 isb = nb(1)*nb(2)
1989 DO ij=1, nbi
1990 IF (ipos+1 <= nbo) THEN
1991 IF (ind(ij) > 0) THEN
1992 k = ((ind(ij)-1)/isb)+1
1993 ipp = ind(ij)-(k-1)*isb
1994 j = ((ipp-1)/nb(1))+1
1995 i = (ipp-(j-1)*nb(1))
1996 ipos = ipos+1
1997 y(ipos) = x(i, j, k)
1998 ENDIF
1999 ELSE
2000 IF (ipos+1 > nbo) ma_fucoll_r31 = ma_fucoll_r31+1
2001 ENDIF
2002 ENDDO
2003 ELSE
2004 ma_fucoll_r31 = 1
2005 ENDIF
2006 nbo = ipos
2007 !-------------------------
2008 END FUNCTION ma_fucoll_r31
2009
2010 !************************************************
2011
2012 INTEGER FUNCTION ma_fuundef_r31(nb, x, nbi, ind, miss_val, nbo, y)
2013 INTEGER :: nb(3), nbo, nbi
2014 INTEGER :: ind(nbi)
2015 REAL :: x(nb(1), nb(2), nb(3)), miss_val, y(nbo)
2016
2017 INTEGER :: i, j, k, ij, ipp, isb
2018 !---------------------------------------------------------------------
2019 IF (nbi <= nbo .AND. nbo == nb(1)*nb(2)*nb(3)) THEN
2020 ma_fuundef_r31 = 0
2021 isb = nb(1)*nb(2)
2022 DO ij=1, nbo
2023 k = ((ij-1)/isb)+1
2024 ipp = ij-(k-1)*isb
2025 j = ((ipp-1)/nb(1))+1
2026 i = (ipp-(j-1)*nb(1))
2027 y(ij) = x(i, j, k)
2028 ENDDO
2029 DO i=1, nbi
2030 IF (ind(i) <= nbo .AND. ind(i) > 0) THEN
2031 y(ind(i)) = miss_val
2032 ELSE
2033 IF (ind(i) > nbo) ma_fuundef_r31 = ma_fuundef_r31+1
2034 ENDIF
2035 ENDDO
2036 ELSE
2037 ma_fuundef_r31 = 1
2038 ENDIF
2039 !--------------------------
2040 END FUNCTION ma_fuundef_r31
2041
2042 !************************************************
2043
2044 INTEGER FUNCTION ma_fuonly_r31(nb, x, nbi, ind, miss_val, nbo, y)
2045 INTEGER :: nb(3), nbo, nbi
2046 INTEGER :: ind(nbi)
2047 REAL :: x(nb(1), nb(2), nb(3)), miss_val, y(nbo)
2048
2049 INTEGER :: i, j, k, ij, ipp, isb
2050 !---------------------------------------------------------------------
2051 IF ( (nbi <= nbo).AND.(nbo == nb(1)*nb(2)*nb(3)) &
2052 & .AND.ALL(ind(1:nbi) <= nbo) ) THEN
2053 ma_fuonly_r31 = 0
2054 y(1:nbo) = miss_val
2055 isb = nb(1)*nb(2)
2056 DO ij=1, nbi
2057 IF (ind(ij) > 0) THEN
2058 k = ((ind(ij)-1)/isb)+1
2059 ipp = ind(ij)-(k-1)*isb
2060 j = ((ipp-1)/nb(1))+1
2061 i = (ipp-(j-1)*nb(1))
2062 y(ind(ij)) = x(i, j, k)
2063 ENDIF
2064 ENDDO
2065 ELSE
2066 ma_fuonly_r31 = 1
2067 ENDIF
2068 !-------------------------
2069 END FUNCTION ma_fuonly_r31
2070
2071 END MODULE mathop2

  ViewVC Help
Powered by ViewVC 1.1.21