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

Annotation of /trunk/IOIPSL/mathop2.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 76 - (hide annotations)
Fri Nov 15 18:45:49 2013 UTC (10 years, 6 months ago) by guez
File size: 53000 byte(s)
Moved everything out of libf.
1 guez 62 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, miss_val, nbo, y)
479     INTEGER :: nb, nbo, nbi
480     INTEGER :: ind(nbi)
481     REAL :: x(nb), miss_val, 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, miss_val, nbo, y)
520     INTEGER :: nb, nbo, nbi
521     INTEGER :: ind(nbi)
522     REAL :: x(nb), miss_val, 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, miss_val, nbo, y)
1175     INTEGER :: nb(2), nbo, nbi
1176     INTEGER :: ind(nbi)
1177     REAL :: x(nb(1), nb(2)), miss_val, 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, miss_val, nbo, y)
1218     INTEGER :: nb(2), nbo, nbi
1219     INTEGER :: ind(nbi)
1220     REAL :: x(nb(1), nb(2)), miss_val, 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, miss_val, nbo, y)
1934     INTEGER :: nb(3), nbo, nbi
1935     INTEGER :: ind(nbi)
1936     REAL :: x(nb(1), nb(2), nb(3)), miss_val, 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, miss_val, nbo, y)
1979     INTEGER :: nb(3), nbo, nbi
1980     INTEGER :: ind(nbi)
1981     REAL :: x(nb(1), nb(2), nb(3)), miss_val, 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