| 1 | SUBROUTINE dump2ds(im,jm,z,nom_z) |
|---|
| 2 | C Copyright (C) 2005 Centre National de la Recherche Scientifique |
|---|
| 3 | c ================================================================== |
|---|
| 4 | c Perform a scatter plot print of big matrices using regular |
|---|
| 5 | c intervals between min and max matrix coefficient values. |
|---|
| 6 | c ================================================================== |
|---|
| 7 | c adapted from LMD3 by Alain Lahellec and retranscipted for LMDZ5 |
|---|
| 8 | c NAN et INF ajoute aux plots Pat fin 2006 |
|---|
| 9 | c ================================================================== |
|---|
| 10 | c Comme dump2d sauf que le signe est préservé, la valeur zero |
|---|
| 11 | c identifiee par un blanc. |
|---|
| 12 | c detection des Infty (= ou -) et NaN (?) |
|---|
| 13 | c ================================================================== |
|---|
| 14 | IMPLICIT NONE |
|---|
| 15 | INTEGER im,jm |
|---|
| 16 | REAL z(im,jm),az |
|---|
| 17 | CHARACTER*32 jform,jline*1000 |
|---|
| 18 | CHARACTER*1 iform(32) |
|---|
| 19 | CHARACTER*16 F1000 |
|---|
| 20 | logical zinf,znan,zsign |
|---|
| 21 | CHARACTER (len=*) :: nom_z |
|---|
| 22 | INTEGER*4 icheck(2) |
|---|
| 23 | EQUIVALENCE(az,icheck) |
|---|
| 24 | EQUIVALENCE(iform,jform) |
|---|
| 25 | DATA jform/'-@zyxwvutsrqpon NOPQRSTUVWXYZ*+?'/ |
|---|
| 26 | INTEGER i,j,k,imin,imax,jmin,jmax,kzero,kchar(im) |
|---|
| 27 | REAL zmin,zmax,zllu,zllm |
|---|
| 28 | write(F1000,'(''(4x,'',I3,''(1H-))'')')im+3 |
|---|
| 29 | DO 10001 i=1,200 |
|---|
| 30 | jline(1+(i-1)*5:5*i)='. ' |
|---|
| 31 | 10001 CONTINUE |
|---|
| 32 | 10002 zmin=z(1,1) |
|---|
| 33 | imin=1 |
|---|
| 34 | jmin=1 |
|---|
| 35 | zmax=z(1,1) |
|---|
| 36 | imax=1 |
|---|
| 37 | jmax=1 |
|---|
| 38 | kzero=0 |
|---|
| 39 | DO 10003 j=1,jm |
|---|
| 40 | DO 10005 i=1,im |
|---|
| 41 | IF(.NOT.( z(i,j).GT.zmax))GOTO 10007 |
|---|
| 42 | zmax=z(i,j) |
|---|
| 43 | imax=i |
|---|
| 44 | jmax=j |
|---|
| 45 | 10007 IF(.NOT.( z(i,j).LT.zmin))GOTO 10009 |
|---|
| 46 | zmin=z(i,j) |
|---|
| 47 | imin=i |
|---|
| 48 | jmin=j |
|---|
| 49 | 10009 IF(.NOT.( z(i,j).eq.0.))GOTO 10011 |
|---|
| 50 | kzero=kzero+1 |
|---|
| 51 | 10011 CONTINUE |
|---|
| 52 | 10005 CONTINUE |
|---|
| 53 | 10006 CONTINUE |
|---|
| 54 | 10003 CONTINUE |
|---|
| 55 | 10004 zsign=(sign(1.,zmin)*sign(1.,zmax).gt.0.) |
|---|
| 56 | WRITE(*,*)'>>> dump2ds: ',trim(nom_z) |
|---|
| 57 | PRINT*,'>>> ',kzero,' zero values <<<' |
|---|
| 58 | IF(.NOT.( ZMin.lt.0.))GOTO 10013 |
|---|
| 59 | PRINT2000,' [MIN:',zmin,'(',imin,',',jmin,') (-@zyxwvutsrqpon NOPQ |
|---|
| 60 | *RSTUVWXYZ*+) ',zmax,'(',imax,',',jmax,'):MAX]' |
|---|
| 61 | GOTO 10014 |
|---|
| 62 | 10013 PRINT2000,' [MIN:',zmin,'(',imin,',',jmin,') ( NOPQRSTUVWXYZ*+) ', |
|---|
| 63 | *zmax,'(',imax,',',jmax,'):MAX]' |
|---|
| 64 | 10014 CONTINUE |
|---|
| 65 | 2000 Format(a,1pg11.4,a1,i3,a1,i3,a,1pg11.4,a1,i3,a1,i3,a) |
|---|
| 66 | IF(.NOT.( zmax.GT.zmin))GOTO 10015 |
|---|
| 67 | zllm=max(abs(zmax),abs(zmin)) |
|---|
| 68 | zllu=min(abs(zmax),abs(zmin)) |
|---|
| 69 | if(im.ge.100)WRITE(*,'(104x,900i1)')(mod(i/100,10),i=100,im) |
|---|
| 70 | WRITE(*,'(14x,1000i1)')(mod(i/10,10),i=10,im) |
|---|
| 71 | WRITE(*,'(5x,1009i1)')(mod(i,10),i=1,im) |
|---|
| 72 | write(*,F1000) |
|---|
| 73 | zinf=.false. |
|---|
| 74 | znan=.false. |
|---|
| 75 | DO 10017 j=1,jm |
|---|
| 76 | DO 10019 i=1,im |
|---|
| 77 | az=abs(z(i,j)) |
|---|
| 78 | IF(.NOT.( az.eq.0.))GOTO 10021 |
|---|
| 79 | kchar(i)=16 |
|---|
| 80 | GOTO 10022 |
|---|
| 81 | 10021 IF(.NOT.((az.ne.0.and.icheck(1).eq.0.and.icheck(2).eq.2146435072)) |
|---|
| 82 | *)GOTO 10023 |
|---|
| 83 | kchar(i)=31 |
|---|
| 84 | zinf=.true. |
|---|
| 85 | GOTO 10022 |
|---|
| 86 | 10023 IF(.NOT.((az.ne.0.and.icheck(1).eq.0.and.icheck(2).eq.2146959360)) |
|---|
| 87 | *)GOTO 10024 |
|---|
| 88 | kchar(i)=32 |
|---|
| 89 | znan=.true. |
|---|
| 90 | GOTO 10022 |
|---|
| 91 | 10024 IF(.NOT.( zsign))GOTO 10025 |
|---|
| 92 | kchar(i)=NINT(13.*(az-zllu)/(zllm-zllu)+17) |
|---|
| 93 | GOTO 10026 |
|---|
| 94 | 10025 kchar(i)=NINT(13.*az/zllm+17) |
|---|
| 95 | 10026 CONTINUE |
|---|
| 96 | 10022 IF(.NOT.( z(i,j).lt.0.))GOTO 10027 |
|---|
| 97 | kchar(i)=32-kchar(i) |
|---|
| 98 | 10027 CONTINUE |
|---|
| 99 | 10019 CONTINUE |
|---|
| 100 | 10020 WRITE(*,'(1x,i3,''|'',1000a)')j+1,(iform(kchar(i)),i=1,im),'|','| |
|---|
| 101 | *' |
|---|
| 102 | 10017 CONTINUE |
|---|
| 103 | 10018 write(*,F1000) |
|---|
| 104 | WRITE(*,'(5x,1000i1)')(mod(i,10),i=1,im) |
|---|
| 105 | WRITE(*,'(14x,1000i1)')(mod(i/10,10),i=10,im) |
|---|
| 106 | if(im.ge.100)WRITE(*,'(104x,900i1)')(mod(i/100,10),i=100,im) |
|---|
| 107 | GOTO 10016 |
|---|
| 108 | 10015 print*,'>>> ZERO MAP <<<' |
|---|
| 109 | 10016 if(zinf)print*,' *** Infty value(s) (+ or -) in map ***' |
|---|
| 110 | if(znan)print*,' *** NaN value(s) (?) in map ***' |
|---|
| 111 | print* |
|---|
| 112 | RETURN |
|---|
| 113 | END |
|---|