Changeset 143
- Timestamp:
- 07/21/06 14:57:51 (18 years ago)
- Location:
- trunk/SRC/Documentation/idldoc_html_output
- Files:
-
- 1 added
- 157 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SRC/Documentation/idldoc_html_output/Interpolation/testinterp.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/curl.html
r142 r143 770 770 771 771 <h4>Version</h4><div class="preformat"> 772 $Id $772 $Id: curl.pro 142 2006-07-21 12:47:49Z navarro $ 773 773 </div> 774 774 <h4>History</h4><div class="preformat"> </div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/depth2floatlevel.html
r142 r143 780 780 781 781 <h4>Version</h4><div class="preformat"> 782 $Id $782 $Id: depth2floatlevel.pro 142 2006-07-21 12:47:49Z navarro $ 783 783 </div> 784 784 <h4>History</h4><div class="preformat"> </div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/depth2level.html
r142 r143 832 832 833 833 <h4>Version</h4><div class="preformat"> 834 $Id $</div>834 $Id: depth2level.pro 142 2006-07-21 12:47:49Z navarro $</div> 835 835 <h4>History</h4><div class="preformat"></div> 836 836 -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/depth2mask.html
r142 r143 776 776 777 777 <h4>Version</h4><div class="preformat"> 778 $Id $778 $Id: depth2mask.pro 142 2006-07-21 12:47:49Z navarro $ 779 779 </div> 780 780 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/determ2.html
r142 r143 810 810 811 811 <h4>Version</h4><div class="preformat"> 812 $Id $812 $Id: determ2.pro 142 2006-07-21 12:47:49Z navarro $ 813 813 </div> 814 814 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/determ3.html
r142 r143 894 894 895 895 <h4>Version</h4><div class="preformat"> 896 $Id $896 $Id: determ3.pro 142 2006-07-21 12:47:49Z navarro $ 897 897 </div> 898 898 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/div.html
r142 r143 770 770 771 771 <h4>Version</h4><div class="preformat"> 772 $Id $772 $Id: div.pro 142 2006-07-21 12:47:49Z navarro $ 773 773 </div> 774 774 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/floatlevel2depth.html
r142 r143 779 779 780 780 <h4>Version</h4><div class="preformat"> 781 $Id $781 $Id: floatlevel2depth.pro 142 2006-07-21 12:47:49Z navarro $ 782 782 </div> 783 783 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/grossemoyenne.html
r142 r143 911 911 912 912 <h4>Version</h4><div class="preformat"> 913 $Id $</div>913 $Id: grossemoyenne.pro 142 2006-07-21 12:47:49Z navarro $</div> 914 914 <h4>History</h4><div class="preformat"> </div> 915 915 -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/hdyn.html
r142 r143 877 877 878 878 <h4>Version</h4><div class="preformat"> 879 $Id $879 $Id: hdyn.pro 142 2006-07-21 12:47:49Z navarro $ 880 880 </div> 881 881 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/level2depth.html
r142 r143 774 774 775 775 <h4>Version</h4><div class="preformat"> 776 $Id $776 $Id: level2depth.pro 142 2006-07-21 12:47:49Z navarro $ 777 777 </div> 778 778 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/level2index.html
r142 r143 759 759 760 760 <h4>Version</h4><div class="preformat"> 761 $Id $761 $Id: level2index.pro 142 2006-07-21 12:47:49Z navarro $ 762 762 </div> 763 763 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/level2mask.html
r142 r143 756 756 757 757 <h4>Version</h4><div class="preformat"> 758 $Id $758 $Id: level2mask.pro 142 2006-07-21 12:47:49Z navarro $ 759 759 </div> 760 760 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/moyenne.html
r142 r143 872 872 873 873 <h4>Version</h4><div class="preformat"> 874 $Id $874 $Id: moyenne.pro 142 2006-07-21 12:47:49Z navarro $ 875 875 </div> 876 876 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/norme.html
r142 r143 830 830 831 831 <h4>Version</h4><div class="preformat"> 832 $Id $832 $Id: norme.pro 142 2006-07-21 12:47:49Z navarro $ 833 833 </div> 834 834 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALCULS/projectondepth.html
r142 r143 782 782 783 783 <h4>Version</h4><div class="preformat"> 784 $Id $784 $Id: projectondepth.pro 142 2006-07-21 12:47:49Z navarro $ 785 785 </div> 786 786 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALENDRIER/caldat.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/CALENDRIER/julday.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/COULEURS/color24.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/COULEURS/colorbar.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/COULEURS/getcolor.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/COULEURS/lct.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/COULEURS/newpalette.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/COULEURS/xlct.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/COULEURS/xpal.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/GRILLE/decoupeterre.html
r142 r143 925 925 926 926 <h4>Version</h4><div class="preformat"> 927 $Id $927 $Id: decoupeterre.pro 142 2006-07-21 12:47:49Z navarro $ 928 928 </div> 929 929 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/GRILLE/domdef.html
r142 r143 1021 1021 1022 1022 <h4>Version</h4><div class="preformat"> 1023 $Id $1023 $Id: domdef.pro 142 2006-07-21 12:47:49Z navarro $ 1024 1024 </div> 1025 1025 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/GRILLE/f2v.html
r142 r143 757 757 758 758 <h4>Version</h4><div class="preformat"> 759 $Id $759 $Id: f2v.pro 142 2006-07-21 12:47:49Z navarro $ 760 760 </div> 761 761 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/GRILLE/fmask.html
r142 r143 738 738 739 739 <h4>Version</h4><div class="preformat"> 740 $Id $740 $Id: fmask.pro 142 2006-07-21 12:47:49Z navarro $ 741 741 </div> 742 742 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/GRILLE/grille.html
r142 r143 1096 1096 1097 1097 <h4>Version</h4><div class="preformat"> 1098 $Id $1098 $Id: grille.pro 142 2006-07-21 12:47:49Z navarro $ 1099 1099 </div> 1100 1100 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/GRILLE/t2v.html
r142 r143 756 756 757 757 <h4>Version</h4><div class="preformat"> 758 $Id $758 $Id: t2v.pro 142 2006-07-21 12:47:49Z navarro $ 759 759 </div> 760 760 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/GRILLE/tracegrille.html
r142 r143 875 875 876 876 <h4>Version</h4><div class="preformat"> 877 $Id $877 $Id: tracegrille.pro 142 2006-07-21 12:47:49Z navarro $ 878 878 </div> 879 879 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/GRILLE/u2t.html
r142 r143 757 757 758 758 <h4>Version</h4><div class="preformat"> 759 $Id $759 $Id: u2t.pro 142 2006-07-21 12:47:49Z navarro $ 760 760 </div> 761 761 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/GRILLE/umask.html
r142 r143 738 738 739 739 <h4>Version</h4><div class="preformat"> 740 $Id $740 $Id: umask.pro 142 2006-07-21 12:47:49Z navarro $ 741 741 </div> 742 742 -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/GRILLE/v2t.html
r142 r143 757 757 758 758 <h4>Version</h4><div class="preformat"> 759 $Id $759 $Id: v2t.pro 142 2006-07-21 12:47:49Z navarro $ 760 760 </div> 761 761 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/GRILLE/vmask.html
r142 r143 738 738 739 739 <h4>Version</h4><div class="preformat"> 740 $Id $740 $Id: vmask.pro 142 2006-07-21 12:47:49Z navarro $ 741 741 </div> 742 742 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/HOPE/computehopegrid.html
r142 r143 867 867 868 868 <h4>Version</h4><div class="preformat"> 869 $Id $869 $Id: computehopegrid.pro 142 2006-07-21 12:47:49Z navarro $ 870 870 </div> 871 871 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/HOPE/read_hope.html
r142 r143 1020 1020 1021 1021 <h4>Version</h4><div class="preformat"> 1022 $Id $1022 $Id: read_hope.pro 142 2006-07-21 12:47:49Z navarro $ 1023 1023 </div> 1024 1024 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/IMAGE/animgif.html
r142 r143 754 754 755 755 <h4>Version</h4><div class="preformat"> 756 $Id: animgif.pro 1 34 2006-07-07 10:19:08Z navarro $756 $Id: animgif.pro 142 2006-07-21 12:47:49Z navarro $ 757 757 </div> 758 758 <h4>History</h4><div class="preformat"> </div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/IMAGE/image_viewer.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/IMAGE/imdisp.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/IMAGE/saveimage.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/IMAGE/showimage.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/INIT/initncdf.html
r142 r143 945 945 946 946 <h4>Version</h4><div class="preformat"> 947 $Id $947 $Id: initncdf.pro 142 2006-07-21 12:47:49Z navarro $ 948 948 </div> 949 949 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/LECTURE/binary.html
r142 r143 769 769 770 770 <h4>Version</h4><div class="preformat"> 771 $Id $771 $Id: binary.pro 142 2006-07-21 12:47:49Z navarro $ 772 772 </div> 773 773 <h4>History</h4><div class="preformat">: -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/LECTURE/inverse_binary.html
r142 r143 789 789 790 790 <h4>Version</h4><div class="preformat"> 791 $Id $791 $Id: inverse_binary.pro 142 2006-07-21 12:47:49Z navarro $ 792 792 </div> 793 793 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/LECTURE/litchamp.html
r142 r143 915 915 916 916 <h4>Version</h4><div class="preformat"> 917 $Id $917 $Id: litchamp.pro 142 2006-07-21 12:47:49Z navarro $ 918 918 </div> 919 919 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/LECTURE/ncdf_lec.html
r142 r143 838 838 839 839 <h4>Version</h4><div class="preformat"> 840 $Id $840 $Id: ncdf_lec.pro 142 2006-07-21 12:47:49Z navarro $ 841 841 </div> 842 842 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/LECTURE/read_ftp.html
r142 r143 1137 1137 1138 1138 <h4>Version</h4><div class="preformat"> 1139 $Id $1139 $Id: read_ftp.pro 142 2006-07-21 12:47:49Z navarro $ 1140 1140 </div> 1141 1141 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/MATRICE/cmapply.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/MATRICE/cmset_op.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/MATRICE/colle.html
r142 r143 1060 1060 <h3>Version history</h3> 1061 1061 1062 <h4>Version</h4><div class="preformat"> $Id: colle.pro 1 34 2006-07-07 10:19:08Z navarro $1062 <h4>Version</h4><div class="preformat"> $Id: colle.pro 142 2006-07-21 12:47:49Z navarro $ 1063 1063 </div> 1064 1064 <h4>History</h4><div class="preformat"> Sebastien Masson (smasson@lodyc.jussieu.fr) -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/MATRICE/congridseb.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/MATRICE/different.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/MATRICE/extrait.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/MATRICE/inter.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/MATRICE/make_selection.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/MATRICE/union.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/MATRICE/zeroun.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DESSINE/bar_plot.html
r142 r143 1054 1054 spacing the bars slightly. 1055 1055 1056 $Id: bar_plot.pro 1 34 2006-07-07 10:19:08Z navarro $1056 $Id: bar_plot.pro 142 2006-07-21 12:47:49Z navarro $ 1057 1057 </div> 1058 1058 -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DESSINE/plt.html
r142 r143 1287 1287 1288 1288 <h4>Version</h4><div class="preformat"> 1289 $Id $1289 $Id: plt.pro 142 2006-07-21 12:47:49Z navarro $ 1290 1290 </div> 1291 1291 <h4>History</h4><div class="preformat"> </div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DESSINE/plt1d.html
r142 r143 1082 1082 1083 1083 <h4>Version</h4><div class="preformat"> 1084 $Id $1084 $Id: plt1d.pro 142 2006-07-21 12:47:49Z navarro $ 1085 1085 </div> 1086 1086 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DESSINE/pltbase.html
r142 r143 1387 1387 1388 1388 <h4>Version</h4><div class="preformat"> 1389 $Id $1389 $Id: pltbase.pro 142 2006-07-21 12:47:49Z navarro $ 1390 1390 </div> 1391 1391 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DESSINE/pltt.html
r142 r143 1342 1342 1343 1343 <h4>Version</h4><div class="preformat"> 1344 $Id $1344 $Id: pltt.pro 142 2006-07-21 12:47:49Z navarro $ 1345 1345 </div> 1346 1346 <h4>History</h4><div class="preformat"> </div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DESSINE/pltz.html
r142 r143 1296 1296 1297 1297 <h4>Version</h4><div class="preformat"> 1298 $Id $1298 $Id: pltz.pro 142 2006-07-21 12:47:49Z navarro $ 1299 1299 </div> 1300 1300 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DESSINE/sbar_plot.html
r142 r143 813 813 814 814 <h4>Version</h4><div class="preformat"> 815 $Id $815 $Id: sbar_plot.pro 142 2006-07-21 12:47:49Z navarro $ 816 816 </div> 817 817 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DESSINE/scontour.html
r142 r143 817 817 818 818 <h4>Version</h4><div class="preformat"> 819 $Id $819 $Id: scontour.pro 142 2006-07-21 12:47:49Z navarro $ 820 820 </div> 821 821 <h4>History</h4><div class="preformat"> Sebastien Masson (smasson@lodyc.jussieu.fr) -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DESSINE/splot.html
r142 r143 805 805 806 806 <h4>Version</h4><div class="preformat"> 807 $Id $807 $Id: splot.pro 142 2006-07-21 12:47:49Z navarro $ 808 808 </div> 809 809 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DESSINE/tvplus.html
r142 r143 971 971 972 972 <h4>Version</h4><div class="preformat"> 973 $Id $973 $Id: tvplus.pro 142 2006-07-21 12:47:49Z navarro $ 974 974 </div> 975 975 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/addaxe.html
r142 r143 802 802 803 803 <h4>Version</h4><div class="preformat"> 804 $Id $804 $Id: addaxe.pro 142 2006-07-21 12:47:49Z navarro $ 805 805 </div> 806 806 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/autoscale.html
r142 r143 784 784 785 785 <h4>Version</h4><div class="preformat"> 786 $Id $786 $Id: autoscale.pro 142 2006-07-21 12:47:49Z navarro $ 787 787 </div> 788 788 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/axis4pltz.html
r142 r143 932 932 933 933 <h4>Version</h4><div class="preformat"> 934 $Id $934 $Id: axis4pltz.pro 142 2006-07-21 12:47:49Z navarro $ 935 935 </div> 936 936 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/barrecouleur.html
r142 r143 924 924 925 925 <h4>Version</h4><div class="preformat"> 926 $Id $926 $Id: barrecouleur.pro 142 2006-07-21 12:47:49Z navarro $ 927 927 </div> 928 928 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/checkfield.html
r142 r143 1221 1221 1222 1222 <h4>Version</h4><div class="preformat"> 1223 $Id $1223 $Id: checkfield.pro 142 2006-07-21 12:47:49Z navarro $ 1224 1224 </div> 1225 1225 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/determineminmax.html
r142 r143 917 917 918 918 <h4>Version</h4><div class="preformat"> 919 $Id $919 $Id: determineminmax.pro 142 2006-07-21 12:47:49Z navarro $ 920 920 </div> 921 921 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/givewindowsize.html
r142 r143 709 709 710 710 711 <div class="routine_details" id="_ -1">712 713 <h2><a class="top" href="#container">top</a> -1 <span class="warning">obsolete</span> <span class="warning">abstract</span> <span class="warning">private</span> <span class="categories"> -1</span></h2>711 <div class="routine_details" id="_givewindowsize"> 712 713 <h2><a class="top" href="#container">top</a>givewindowsize </h2> 714 714 715 715 <p class="header"> 716 <span class="result">result = </span> -1()</p>716 <span class="result">result = </span>givewindowsize()</p> 717 717 718 <div class="comments preformat"> -1</div> 719 720 <h3>Return value</h3><div class="preformat"> -1</div> 721 722 723 724 725 726 <h3>Examples</h3><div class="preformat"> -1</div> 727 <h3>Version history</h3> 728 <h4>Author</h4><div class="preformat"> -1</div> 729 <h4>Version</h4><div class="preformat">2.0</div> 730 <h4>History</h4><div class="preformat"> -1</div> 731 <h4>Copyright</h4><div class="preformat"> -1</div> 732 <h4>Customer ID</h4><div class="preformat"> -1</div> 718 <div class="comments"> 719 </div> 720 721 722 723 724 725 726 727 728 729 730 731 732 733 733 734 <h3>Known issues</h3> 734 <h4>Obsolete</h4><div class="preformat"> -1</div> 735 <h4>Known bugs</h4><div class="preformat"> -1</div> 736 <h4>Todo items</h4><div class="preformat"> -1</div> 737 <h4>Restrictions</h4><div class="preformat"> -1</div> 735 736 737 <h4>Todo items</h4><div class="preformat"> seb 738 </div> 739 738 740 739 <h3>Other attributes</h3>740 <h4>Inherits classes</h4><div class="preformat"> -1</div>741 <h4>Requires IDL version</h4><div class="preformat"> -1</div>742 <h4>Uses routines</h4><div class="preformat"> -1</div>743 <h4>Pre-condition</h4><div class="preformat"> -1</div>744 <h4>Post-condition</h4><div class="preformat"> -1</div>745 <h4>Common blocks used</h4><div class="preformat"> -1</div>741 742 743 744 745 746 747 746 748 747 <h3>Statistics</h3>748 <table class="statistics">749 <tr><td>McCabe cyclic</td><td> -1</td></tr>750 <tr><td>McCabe essential</td><td> -1</td></tr>751 <tr><td>McCabe modular design</td><td> -1</td></tr>752 </table>753 749 754 750 -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/meridienparallele.html
r142 r143 752 752 753 753 <h4>Version</h4><div class="preformat"> 754 $Id $754 $Id: meridienparallele.pro 142 2006-07-21 12:47:49Z navarro $ 755 755 </div> 756 756 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/placecolor.html
r142 r143 776 776 777 777 <h4>Version</h4><div class="preformat"> 778 $Id $778 $Id: placecolor.pro 142 2006-07-21 12:47:49Z navarro $ 779 779 </div> 780 780 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/placedessin.html
r142 r143 1143 1143 1144 1144 <h4>Version</h4><div class="preformat"> 1145 $Id $1145 $Id: placedessin.pro 142 2006-07-21 12:47:49Z navarro $ 1146 1146 </div> 1147 1147 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/projsegment.html
r142 r143 803 803 804 804 <h4>Version</h4><div class="preformat"> 805 $Id $805 $Id: projsegment.pro 142 2006-07-21 12:47:49Z navarro $ 806 806 </div> 807 807 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/restoreatt.html
r142 r143 755 755 756 756 <h4>Version</h4><div class="preformat"> 757 $Id $757 $Id: restoreatt.pro 142 2006-07-21 12:47:49Z navarro $ 758 758 </div> 759 759 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/rotation.html
r142 r143 811 811 812 812 <h4>Version</h4><div class="preformat"> 813 $Id $813 $Id: rotation.pro 142 2006-07-21 12:47:49Z navarro $ 814 814 </div> 815 815 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/saveatt.html
r142 r143 736 736 737 737 <h4>Version</h4><div class="preformat"> 738 $Id $738 $Id: saveatt.pro 142 2006-07-21 12:47:49Z navarro $ 739 739 </div> 740 740 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/DIVERS/terminedessin.html
r142 r143 794 794 795 795 <h4>Version</h4><div class="preformat"> 796 $Id $796 $Id: terminedessin.pro 142 2006-07-21 12:47:49Z navarro $ 797 797 </div> 798 798 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/LABEL/label.html
r142 r143 877 877 878 878 <h4>Version</h4><div class="preformat"> 879 $Id $879 $Id: label.pro 142 2006-07-21 12:47:49Z navarro $ 880 880 </div> 881 881 <h4>History</h4><div class="preformat"> </div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/LABEL/label_date.html
r142 r143 885 885 886 886 <h4>Version</h4><div class="preformat"> 887 $Id: label_date.pro 1 34 2006-07-07 10:19:08Z navarro $887 $Id: label_date.pro 142 2006-07-21 12:47:49Z navarro $ 888 888 </div> 889 889 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/LABEL/lataxe.html
r142 r143 785 785 786 786 <h4>Version</h4><div class="preformat"> 787 $Id $787 $Id: lataxe.pro 142 2006-07-21 12:47:49Z navarro $ 788 788 </div> 789 789 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/LABEL/lonaxe.html
r142 r143 785 785 786 786 <h4>Version</h4><div class="preformat"> 787 $Id $787 $Id: lonaxe.pro 142 2006-07-21 12:47:49Z navarro $ 788 788 </div> 789 789 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/VECTEUR/ajoutvect.html
r142 r143 834 834 835 835 <h4>Version</h4><div class="preformat"> 836 $Id $836 $Id: ajoutvect.pro 142 2006-07-21 12:47:49Z navarro $ 837 837 </div> 838 838 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/VECTEUR/vecteur.html
r142 r143 1123 1123 1124 1124 <h4>Version</h4><div class="preformat"> 1125 $Id $1125 $Id: vecteur.pro 142 2006-07-21 12:47:49Z navarro $ 1126 1126 </div> 1127 1127 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/VECTEUR/velovect.html
r142 r143 941 941 942 942 <h4>Version</h4><div class="preformat"> 943 $Id: velovect.pro 1 34 2006-07-07 10:19:08Z navarro $943 $Id: velovect.pro 142 2006-07-21 12:47:49Z navarro $ 944 944 </div> 945 945 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/axe.html
r142 r143 881 881 882 882 <h4>Version</h4><div class="preformat"> 883 $Id $883 $Id: axe.pro 142 2006-07-21 12:47:49Z navarro $ 884 884 </div> 885 885 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/legende.html
r142 r143 912 912 913 913 <h4>Version</h4><div class="preformat"> 914 $Id $914 $Id: legende.pro 142 2006-07-21 12:47:49Z navarro $ 915 915 </div> 916 916 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/plotsym.html
r142 r143 857 857 858 858 <h4>Version</h4><div class="preformat"> 859 $Id $859 $Id: plotsym.pro 142 2006-07-21 12:47:49Z navarro $ 860 860 </div> 861 861 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/reinitplt.html
r142 r143 830 830 831 831 <h4>Version</h4><div class="preformat"> 832 $Id $832 $Id: reinitplt.pro 142 2006-07-21 12:47:49Z navarro $ 833 833 </div> 834 834 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/style.html
r142 r143 806 806 807 807 <h4>Version</h4><div class="preformat"> 808 $Id $808 $Id: style.pro 142 2006-07-21 12:47:49Z navarro $ 809 809 </div> 810 810 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/PLOTS/symbols.html
r142 r143 803 803 804 804 <h4>Version</h4><div class="preformat"> 805 $Id $805 $Id: symbols.pro 142 2006-07-21 12:47:49Z navarro $ 806 806 </div> 807 807 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/chkeywd.html
r142 r143 847 847 848 848 <h4>Version</h4><div class="preformat"> 849 $Id $849 $Id: chkeywd.pro 142 2006-07-21 12:47:49Z navarro $ 850 850 </div> 851 851 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/delchr.html
r142 r143 787 787 788 788 <h4>Version</h4><div class="preformat"> 789 $Id $789 $Id: delchr.pro 142 2006-07-21 12:47:49Z navarro $ 790 790 </div> 791 791 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/getfile.html
r142 r143 834 834 835 835 <h4>Version</h4><div class="preformat"> 836 $Id $836 $Id: getfile.pro 142 2006-07-21 12:47:49Z navarro $ 837 837 </div> 838 838 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/getwrd.html
r142 r143 878 878 879 879 <h4>Version</h4><div class="preformat"> 880 $Id $880 $Id: getwrd.pro 142 2006-07-21 12:47:49Z navarro $ 881 881 </div> 882 882 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/isnumber.html
r142 r143 792 792 793 793 <h4>Version</h4><div class="preformat"> 794 $Id $794 $Id: isnumber.pro 142 2006-07-21 12:47:49Z navarro $ 795 795 </div> 796 796 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/nwrds.html
r142 r143 787 787 788 788 <h4>Version</h4><div class="preformat"> 789 $Id $789 $Id: nwrds.pro 142 2006-07-21 12:47:49Z navarro $ 790 790 </div> 791 791 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/putfile.html
r142 r143 800 800 801 801 <h4>Version</h4><div class="preformat"> 802 $Id $802 $Id: putfile.pro 142 2006-07-21 12:47:49Z navarro $ 803 803 </div> 804 804 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/str_size.html
r142 r143 824 824 825 825 <h4>Version</h4><div class="preformat"> 826 $Id: str_size.pro 1 34 2006-07-07 10:19:08Z navarro $826 $Id: str_size.pro 142 2006-07-21 12:47:49Z navarro $ 827 827 </div> 828 828 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/strcnt.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/string2struct.html
r142 r143 851 851 852 852 <h4>Version</h4><div class="preformat"> 853 $Id $853 $Id: string2struct.pro 142 2006-07-21 12:47:49Z navarro $ 854 854 </div> 855 855 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/strkeywd.html
r142 r143 776 776 777 777 <h4>Version</h4><div class="preformat"> 778 $Id $778 $Id: strkeywd.pro 142 2006-07-21 12:47:49Z navarro $ 779 779 </div> 780 780 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/strrepl.html
r142 r143 804 804 805 805 <h4>Version</h4><div class="preformat"> 806 $Id: strrepl.pro 1 34 2006-07-07 10:19:08Z navarro $806 $Id: strrepl.pro 142 2006-07-21 12:47:49Z navarro $ 807 807 </div> 808 808 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/strright.html
r142 r143 774 774 775 775 <h4>Version</h4><div class="preformat"> 776 $Id: strright.pro 1 34 2006-07-07 10:19:08Z navarro $776 $Id: strright.pro 142 2006-07-21 12:47:49Z navarro $ 777 777 </div> 778 778 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/strsci.html
r142 r143 854 854 855 855 <h4>Version</h4><div class="preformat"> 856 $Id: strsci.pro 1 34 2006-07-07 10:19:08Z navarro $856 $Id: strsci.pro 142 2006-07-21 12:47:49Z navarro $ 857 857 </div> 858 858 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/strtok.html
r142 r143 814 814 815 815 <h4>Version</h4><div class="preformat"> 816 $Id: strtok.pro 1 34 2006-07-07 10:19:08Z navarro $816 $Id: strtok.pro 142 2006-07-21 12:47:49Z navarro $ 817 817 </div> 818 818 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/strtrans.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/strwhere.html
r142 r143 790 790 791 791 <h4>Version</h4><div class="preformat"> 792 $Id: strwhere.pro 1 34 2006-07-07 10:19:08Z navarro $792 $Id: strwhere.pro 142 2006-07-21 12:47:49Z navarro $ 793 793 </div> 794 794 <h4>History</h4><div class="preformat"> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/STRING/tostr.html
r142 r143 766 766 767 767 <h4>Version</h4><div class="preformat"> 768 $Id $768 $Id: tostr.pro 142 2006-07-21 12:47:49Z navarro $ 769 769 </div> 770 770 <h4>History</h4><div class="preformat"></div> -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/UTILITAIRE/fitintobox.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/UTILITAIRE/linearequation.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/UTILITAIRE/lineintersection.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/UTILITAIRE/pwd.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/UTILITAIRE/report.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/UTILITAIRE/routine_name.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/UTILITAIRE/test.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/UTILITAIRE/testvar.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/UTILITAIRE/text_box.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/UTILITAIRE/undefine.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/UTILITAIRE/xfile.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/ToBeReviewed/UTILITAIRE/xhelp.html
r142 r143 328 328 table.variables td.image { width: 64px; } 329 329 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 330 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; 331 331 margin: 2em; 332 332 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-B.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-C.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-D.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-E.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-F.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-G.html
r142 r143 362 362 table.variables td.image { width: 64px; } 363 363 364 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre;364 div#file_comments { white-space: pre; 365 365 margin: 2em; 366 366 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-H.html
r142 r143 362 362 table.variables td.image { width: 64px; } 363 363 364 div#file_comments { white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre; white-space: pre;364 div#file_comments { white-space: pre; 365 365 margin: 2em; 366 366 font-size: 80%; -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-I.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-JK.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-L.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-M.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-N.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-O.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-P.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-Q.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-R.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-S.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-T.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-U.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-V.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-W.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-X.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-Y.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-Z.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index-_.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-index.html
r142 r143 737 737 <a href="idldoc-index-F.html?format=raw#_F">F</a> 738 738 739 <a href="idldoc-index-G H.html?format=raw#_G">G</a>740 741 <a href="idldoc-index- GH.html?format=raw#_H">H</a>739 <a href="idldoc-index-G.html?format=raw#_G">G</a> 740 741 <a href="idldoc-index-H.html?format=raw#_H">H</a> 742 742 743 743 <a href="idldoc-index-I.html?format=raw#_I">I</a> -
trunk/SRC/Documentation/idldoc_html_output/idldoc-warnings.html
r142 r143 982 982 </dd> 983 983 984 </dl><h3><a href="./ToBeReviewed/PLOTS/DIVERS/givewindowsize.html?format=raw">./ToBeReviewed/PLOTS/DIVERS/givewindowsize.pro</a></h3> 985 <dl> 986 987 <dt><a href="./ToBeReviewed/PLOTS/DIVERS/givewindowsize.html?format=raw#_givewindowsize">givewindowsize</a></dt> 988 <dd> seb 989 </dd> 990 984 991 </dl><h3><a href="./ToBeReviewed/STRING/lenstr.html?format=raw">./ToBeReviewed/STRING/lenstr.pro</a></h3> 985 992 <dl> … … 1928 1935 </tr> 1929 1936 1937 </table><a href="./ToBeReviewed/PLOTS/DIVERS/givewindowsize.html?format=raw">./ToBeReviewed/PLOTS/DIVERS/givewindowsize.pro</a> 1938 <table> 1939 1940 <tr> 1941 <td class="docroutine"><a href="./ToBeReviewed/PLOTS/DIVERS/givewindowsize.html?format=raw#_givewindowsize">givewindowsize</a></td> 1942 <td class="docstat partialdoc">partially documented</td> 1943 </tr> 1944 1930 1945 </table><a href="./ToBeReviewed/PLOTS/DIVERS/placedessin.html?format=raw">./ToBeReviewed/PLOTS/DIVERS/placedessin.pro</a> 1931 1946 <table> -
trunk/SRC/Documentation/idldoc_html_output/overview.html
r142 r143 980 980 <tr> 981 981 <td>Routines/methods</td> 982 <td class="value"> 73 0</td>982 <td class="value"> 731</td> 983 983 </tr> 984 984 <tr> -
trunk/SRC/Documentation/idldoc_html_output/search.js
r142 r143 173 173 a[171] = new Array("./Textoidl/textoidl.html", "textoidl.pro", "", " NAME: TEXTOIDL PURPOSE: Convert a valid TeX string to a valid IDL string for plot labels CATEGORY: text strings CALLING SEQUENCE: new textoidl old INPUTS: old TeX string to be converted Will not be in modified old may be a string array KEYWORD PARAMETERS: FONT Set to 0 to use hardware font 1 to use vector Note that the only hardware font supported is PostScript TEX_SEQUENCES return the available TeX sequences HELP print out info on use of the function and exit OUTPUTS: new IDL string corresponding to old out COMMON BLOCKS: SIDE EFFECTS: NOTES: Use the procedure SHOWTEX to get a list of the available TeX control sequences The only hardware font for which translation is available is PostScript The only device for which hardware font translation is available is PostScript The FONT keyword overrides the font selected by p font EXAMPLE: out TeXtoIDL Gamma 2 5N_ ed The string out may be used in XYOUTS or other IDL text display routines It will be an uppercase Gamma with an exponent of 2 then a plus sign then an N with the subscript ed MODIFICATION HISTORY: Id: textoidl pro 134 2006 07 07 10:19:08Z navarro Log: textoidl pro v Revision 1 7 2004 06 15 17:25:54 mcraig Fixed bug in regular expression changed array notation to square brackets Revision 1 6 2004 01 11 01:49:00 mcraig Changed format of one array to newer style to avoidf conflict with function name in astro library Revision 1 5 2001 11 23 21:10:55 mcraig Added backslash to tex sequences in translation table to protect them during regexp search in strsplit Revision 1 4 1996 06 14 20:00:27 mcraig Updated Copyright info Revision 1 3 1996 05 09 00:22:17 mcraig Added error handling cleaned up documentation Revision 1 2 1996 02 08 18:52:50 mcraig Added ability to use hardware fonts for PostScript device Revision 1 1 1996 01 31 18:47:37 mcraig Initial revision RELEASE: Name: Rel_2_1_2 COPYRIGHT: Copyright C 1996 The Regents of the University of California All Rights Reserved Written by Matthew W Craig See the file COPYRIGHT for restrictions on distrubting this code This code comes with absolutely NO warranty see DISCLAIMER for details FUNCTION Textoidl InputString FONT fnt HELP hlp TEX_SEQUENCES tex_seq compile_opt idl2 strictarrsubs Return to caller if there is an error On_error 2 We begin by deciding on the font PostScript 0 means use vector PostScript 0 IF n_elements fnt EQ 0 THEN BEGIN get font from p font IF p font NE 1 THEN BEGIN User wants hardware font PostScript 1 ENDIF ENDIF ELSE BEGIN get font from FONT keyword IF fnt NE 1 THEN PostScript 1 ENDELSE Bomb out if user wants non PostScript hardware font IF PostScript EQ 1 AND d name NE PS THEN BEGIN Device isn t postscript and user wants hardware font Not good print Warning: No translation for device: d name return InputString ENDIF IF keyword_set tex_seq THEN BEGIN table textable return table 0 ENDIF IF keyword_set hlp OR n_params EQ 0 THEN BEGIN print Convert a TeX string to an IDL string print new TeXtoIDL old print old TeX string to translate in print new resulting IDL string out print Keywords: print FONT set to 1 to translate for vector fonts print DEFAULT Set to 0 to translate for print hardware font print TEX_SEQUENCES return the available TeX sequences print HELP print this message and exit print NOTES: print Use SHOWTEX to obtain a list of the available print TeX control sequences print old may be a string array If so new is too print The only device for which hardware font print translation is available is PostScript print The FONT keyword overrides the font selected print by p font return 1 ENDIF PostScript has been set to 1 if PostScript fonts are desired strn InputString table textable POSTSCRIPT PostScript Greek sub superscripts need to be protected by putting braces around them if they are unbraced This will have the result the it will be difficult to use as a sub superscript Get over it V2 11 Must include the in from of translation table TeX sequences to ensure that strsplit properly treats the in the TeX sequence Since strsplit is doing a regexp replace and is special in regexps need to escape it strn strtrans strn table 0 table 0 strn strtrans strn _ table 0 _ table 0 First we translate Greek letters and the like This makes guessing alignment of sub superscripts easier as all special characters will then be one character long V2 11 Must include the in from of translation table TeX sequences to ensure that strsplit properly treats the in the TeX sequence Since strsplit is doing a regexp replace and is special in regexps need to escape it strn strtrans strn table 0 table 1 FOR i 0L n_elements strn 1 DO BEGIN strn i translate_sub_super strn i Take care of sub superscripts ENDFOR return strn END "); 174 174 a[172] = new Array("./Textoidl/translate_sub_super.html", "translate_sub_super.pro", "", " NOTE to future maintainers: Make sure sub_sup_idl stays before translate_sub_super At least for now when IDL encounters a function and automatically compiles it it only compiles the functions in the file up to the named function So even if sub_sup_idl was declared with FORWARD_FUNCTION in translate_sub_super it would not properly compile SPECIAL NOTE: The file translate_sub_super pro contains two functions translate_sub_super and sub_sup_idl The former is the generic routine for processing TeX sub superscripts the latter is used only by translate_sub_super and has no general utility Hence it lives here You will see documentation for translate_sub_super second if you use DOC_LIBRARY NAME: SUB_SUP_IDL PURPOSE: Return the proper IDL font positioning command for TeX sub superscripts CATEGORY: TeXtoIDL CALLING SEQUENCE: fnt sub_sup_idl strn INPUTS: strn Either or _ the TeX super subscript in characters KEYWORD PARAMETERS: FORCE_UD Set this to use U D instead of E I for sub superscripts HELP Set to print useful message and exit OUTPUTS: fnt Either U or E for superscripts out or D or I for subscripts COMMON BLOCKS: SIDE EFFECTS: NOTES: Used only by translate_sub_super Should be kept in same file EXAMPLE: MODIFICATION HISTORY: Id: translate_sub_super pro 134 2006 07 07 10:19:08Z navarro Log: translate_sub_super pro v Revision 1 5 2000 06 14 19:09:22 mcraig Changed name of strtok str_token to avoid conflict in IDL 5 3 Revision 1 4 1996 06 14 20:00:27 mcraig Updated Copyright info Revision 1 3 1996 05 09 00:22:17 mcraig Changed some function calls to reflect changes in those functions moved some code out of the main loop that didn t need to be there added documentation Revision 1 1 1996 01 31 18:47:37 mcraig Initial revision RELEASE: Name: Rel_2_1_2 COPYRIGHT: Copyright C 1996 The Regents of the University of California All Rights Reserved Written by Matthew W Craig See the file COPYRIGHT for restrictions on distrubting this code This code comes with absolutely NO warranty see DISCLAIMER for details FUNCTION Sub_sup_idl token FORCE_UD force_ud compile_opt idl2 strictarrsubs provide help if needed IF n_params NE 1 OR keyword_set Help THEN BEGIN offset print offset Return the proper IDL font positioning command for TeX print offset sub superscripts print offset fnt sub_sup_idl strn print offset Inputs: print offset offset strn Either or _ the TeX super subscript in print offset offset characters print offset Keywords: print offset offset FORCE_UD Set this to use U D instead of E I for print offset offset sub superscripts print offset offset HELP Set to print useful message and exit print offset Outputs: print offset offset fnt Either U or E for superscripts out print offset offset or D or I for subscripts return 1 ENDIF IF keyword_set force_ud THEN BEGIN IF token EQ THEN return U IF token EQ _ THEN return D return ENDIF ELSE BEGIN IF token EQ THEN return E IF token EQ _ THEN return I return ENDELSE END NAME: TRANSLATE_SUB_SUPER PURPOSE: Translate TeX sub superscripts to IDL sub superscripts CATEGORY: text strings CALLING SEQUENCE: new translate_sub_super old INPUTS: old string to be translated from TeX to IDL in KEYWORD PARAMETERS: RECURSED set if this function is being called recursively HELP Set to print useful message and exit OUTPUTS: new string old converted from TeX to IDL out COMMON BLOCKS: SIDE EFFECTS: NOTES: For best results when both a sub and superscript are used place the shorter of the two first e g N a _ bbbb is better than N_ bbbb a Single character sub super scripts do not need to be protected by braces Sub superscripts may be nested e g N N_1 N EXAMPLE: out translate_sub_super N 2_ big Then out N U2 N Dbig N which looks like it should on the display LIBRARY FUNCTIONS CALLED: str_token Text string mcraig sub_sup_idl contained in this file MODIFICATION HISTORY: Id: translate_sub_super pro 134 2006 07 07 10:19:08Z navarro Log: translate_sub_super pro v Revision 1 5 2000 06 14 19:09:22 mcraig Changed name of strtok str_token to avoid conflict in IDL 5 3 Revision 1 4 1996 06 14 20:00:27 mcraig Updated Copyright info Revision 1 3 1996 05 09 00:22:17 mcraig Changed some function calls to reflect changes in those functions moved some code out of the main loop that didn t need to be there added documentation Revision 1 2 1996 02 08 18:54:20 mcraig Changed default sub superscript size to be D U rather than I E to improve readability of plat annotations Revision 1 1 1996 01 31 18:47:37 mcraig Initial revision RELEASE: Name: Rel_2_1_2 COPYRIGHT: Copyright C 1996 The Regents of the University of California All Rights Reserved Written by Matthew W Craig See the file COPYRIGHT for restrictions on distrubting this code This code comes with absolutely NO warranty see DISCLAIMER for details FUNCTION Translate_sub_super InputString RECURSED recursed HELP Help compile_opt idl2 strictarrsubs Return to caller if error On_error 2 Offer help if needed and or desired IF n_params NE 1 OR keyword_set help THEN BEGIN offset print offset Translate TeX sub superscripts to IDL sub superscripts print offset new translate_sub_super old print offset Inputs: print offset offset old string to be translated from TeX to IDL in print offset Keywords: print offset offset RECURSED set if this function is being called print offset offset recursively print offset offset HELP Set to print useful message and exit print offset Outputs: print offset offset new string old converted from TeX to IDL out print offset Notes: print offset offset For best results when both a sub and superscript are used print offset offset place the shorter of the two first e g N a _ bbbb is print offset offset better than N_ bbbb a print offset offset Single character sub super scripts do not need to be print offset offset protected by braces print offset offset Sub superscripts may be nested e g N N_1 N return 1 ENDIF To allow for nested scripts use E I instead of U D for scripts when called recursively IF NOT keyword_set recursed THEN ud 1 ELSE ud 0 Return to the normal level after making sub superscript unless we are recursed which indicates we are processing a nested script IF keyword_set recursed THEN fontRestore ELSE fontRestore N Initialize vars for processing scripts SpcByte byte 0 We need the BYTE value for a space below strn InputString pos 0 StorePos RecallPos OldToken LenLastScript 0 Grab next sub superscript Token will be either or _ RETURN if no scripts Token nexttok strn _ pos pos if pos EQ 1 then return InputString nothing to process FntChange sub_sup_idl Token Our approach will be to grab the input string up to the next or _ then process the script we ve found NewString str_token strn Token WHILE strlen strn GT 0 DO BEGIN Grab first char of sub superscript Script strmid strn 0 1 EndOfScript 0 Position of end of this script IF Script EQ THEN BEGIN Scripts of more than 1 char EndOfScript matchdelim strn Script translate_sub_super strmid strn 1 EndOfScript 1 recursed ENDIF Grab rest of string _after_ the end of the script strn strmid strn EndOfScript 1 strlen strn EndOfScript 1 Find the next script and prepare for processing it FntChange sub_sup_idl Token FORCE_UD ud OldToken Token Token nexttok strn _ POS pos If the input is n 2_j we want the 2 to be directly above the j rather than having the j below and to the right of the 2 In other words we want the first below not the second 2 2 N N J J To accomplish this we need to save the position at which we begin writing the 2 with a S and restore that position with a R after writing the 2 The first section in the IF block below handles the J above the thing after the first script We don t care if there is another script following We also padd the second script with spaces if it is shorter than the first to make sure that whatever comes out after the scripts starts in the proper place The worry is that without the spaces the input N looong _ s 1 will end up with the starting right the s ends IF StorePos EQ S THEN BEGIN StorePos RecallPos calculate the difference in length between this script and the previous stacked one removing font change commands crudely by guessing that the number of characters this takes is twice the number of exclamation points The 1 below is a kludge I don t know why but I need one extra space NumSpaces LenLastScript strlen script 2 strcnt Script NumSpaces NumSpaces 1 0 IF NumSpaces GT 0 THEN Script Script string replicate SpcByte NumSpaces ENDIF ELSE BEGIN IF Token NE OldToken AND pos EQ 0 THEN BEGIN The next script immediately folows this one Arrange to save the position of the current script so that both begin with the same horizontal position StorePos S RecallPos R LenLastScript strlen Script 2 strcnt Script ENDIF ENDELSE Continue building the IDL string adding on our just processed script NewString NewString StorePos FntChange Script RecallPos FontRestore IF pos NE 1 THEN BEGIN more left to process NewString NewString str_token strn Token ENDIF ELSE BEGIN we are done NewString NewString strn strn ENDELSE ENDWHILE return NewString END "); 175 a[173] = new Array("./ToBeReviewed/CALCULS/curl.html", "curl.pro", "", " file_comments Calculate the vertical component of the curl of a field of horizontal vectors categories Calculation on matrixes param UU Matrix representing coordinates of a field of vectors param VV Matrix representing coordinates of a field of vectors returns RES A 2d matrix uses common pro restrictions U and V matrixes can be 2 or 4d Beware to discern differents configuration of U and V xy xyz xyt xyzt we look at the variable of the common time which contain the calendar in IDL julian days to which U and V refered to in the same way as the variable jpt which is the number of time s step to consider in time U and V arrays ae cut in the same geographic domain Because of the gap of T U V and F grids it is possible that these two arrays hase not the same size and refered to different indexes In this case arrays are recut on common indexesand the domain is redifined to match with these common indexes To avoid these recuts use the keyword memeindice in domdef pro Points on the drawing edge are at values f_nan history Guillaume Roullet grlod ipsl jussieu fr Sebastien Masson smasson lodyc jussieu fr adaptation pour marcher avec un domaine reduit 21 5 1999: valeurs manquantes a values f_nan periodicite version Id FUNCTION curl uu vv compile_opt idl2 strictarrsubs common tempsun systime 1 To key_performance IF finite glamu 0 finite gphiu 0 finite glamv 0 finite gphiv 0 EQ 0 THEN return report This version of curl is based on Arakawa C grid U and V grids must therefore be defined u litchamp uu v litchamp vv date1 time 0 if n_elements jpt EQ 0 then date2 date1 ELSE date2 time jpt 1 if size u 0 NE size v 0 then return 1 We find common points between U and V indicexu lindgen jpi firstxu:firstxu nxu 1 indicexv lindgen jpi firstxv:firstxv nxv 1 indicex inter indicexu indicexv indiceyu lindgen jpj firstyu:firstyu nyu 1 indiceyv lindgen jpj firstyv:firstyv nyv 1 indicey inter indiceyu indiceyv nx n_elements indicex ny n_elements indicey case 1 of xyz size u 0 EQ 3 AND date1 EQ date2 :BEGIN indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 extraction of U and V on the appropriated domain case 1 of size u 0 NE 3 OR size v 0 NE 3: return 1 size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN case 1 of nxu NE nx:if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx nxv NE nx:if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx nyu NE ny:if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny nyv NE ny:if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny ELSE : endcase END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 v v indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 END ELSE:return 1 endcase calculation of the curl coefu e1u indice2d replicate 1 nzt coefu reform coefu nx ny nzt over coefu coefu umask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt terreu where coefu EQ 0 if terreu 0 NE 1 then coefu temporary terreu values f_nan coefv e2v indice2d replicate 1 nzt coefv reform coefv nx ny nzt over coefv coefv vmask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt terrev where coefv EQ 0 if terrev 0 NE 1 then coefv temporary terrev values f_nan tabf fmask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt div e1f indice2d e2f indice2d replicate 1 nzt div reform div nx ny nzt over tabf tabf div zu u temporary coefu zv v temporary coefv psi shift zv 1 0 0 zv zu shift zu 0 1 0 psi tabf psi Edging put at values f_nan if NOT keyword_set key_periodic OR nx NE jpi then begin psi 0 values f_nan psi nx 1 values f_nan endif psi 0 values f_nan psi ny 1 values f_nan if n_elements valmask EQ 0 THEN valmask 1e20 terref where tabf EQ 0 if terref 0 NE 1 then psi temporary terref valmask For the graphic drawing domdef glagmt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 gridtype t f if keyword_set direc then psi moyenne psi direc nan END xyt date1 NE date2 AND size u 0 EQ 3 :BEGIN indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 extraction of U and V on the appropriated domain case 1 of size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 v v indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 END ELSE:BEGIN print problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs return 1 end endcase Calculation of the curl coefu e1u indice2d umask indice2d jpi jpj firstzt terreu where coefu EQ 0 if terreu 0 NE 1 then coefu temporary terreu values f_nan coefu temporary coefu replicate 1 jpt coefu reform coefu nx ny jpt over coefv e2v indice2d vmask indice2d jpi jpj firstzt terrev where coefv EQ 0 if terrev 0 NE 1 then coefv temporary terrev values f_nan coefv temporary coefv replicate 1 jpt coefv reform coefv nx ny jpt over tabf fmask indice2d jpi jpj firstzt e1f indice2d e2f indice2d tabf temporary tabf replicate 1 jpt tabf reform tabf nx ny jpt over Calculation of the curl zu u temporary coefu zv v temporary coefv psi shift zv 1 0 0 zv zu shift zu 0 1 0 psi tabf psi extraction of U and V on the appropriated domain if NOT keyword_set key_periodic OR nx NE jpi then begin psi 0 values f_nan psi nx 1 values f_nan endif psi 0 values f_nan psi ny 1 values f_nan if n_elements valmask EQ 0 THEN valmask 1e20 terref where tabf EQ 0 if terref 0 NE 1 then psi temporary terref valmask domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 gridtype t f if keyword_set direc then psi grossemoyenne psi direc nan END xyzt date1 NE date2 AND size u 0 EQ 4:BEGIN return report non code END xy ELSE:BEGIN xy indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 case 1 of size u 0 NE 2 OR size v 0 NE 2: return 1 size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indice2d v v indice2d END ELSE:return 1 endcase Calculation of the curl coefu e1u indice2d umask indice2d jpi jpj firstzt terreu where coefu EQ 0 if terreu 0 NE 1 then coefu temporary terreu values f_nan coefv e2v indice2d vmask indice2d jpi jpj firstzt terrev where coefv EQ 0 if terrev 0 NE 1 then coefv temporary terrev values f_nan tabf fmask indice2d jpi jpj firstzt e1f indice2d e2f indice2d zu u temporary coefu zv v temporary coefv psi shift zv 1 0 zv zu shift zu 0 1 psi tabf psi Edging put at values f_nan if NOT keyword_set key_periodic OR nx NE jpi then begin psi 0 values f_nan psi nx 1 values f_nan endif psi 0 values f_nan psi ny 1 values f_nan if n_elements valmask EQ 0 THEN valmask 1e20 terref where tabf EQ 0 if terref 0 NE 1 then psi temporary terref valmask for the graphic drawing domdef glamt indice2d 0 0 glamf indice2d nx 1 0 gphit indice2d 0 0 gphif indice2d 0 ny 1 vert1 vert2 gridtype t f if keyword_set direc then psi moyenne psi direc nan END endcase if keyword_set key_performance THEN print temps curl systime 1 tempsun vargrid F varname vorticity return psi end");176 a[174] = new Array("./ToBeReviewed/CALCULS/depth2floatlevel.html", "depth2floatlevel.pro", "", " file_comments Rather comparable to depth2level but here the calculated level is in float For example the level 5 4 correspond to a depth equal to gdep 5 4 gdep 6 gdep 5 categories Without loop param TAB in required 2d depth array or a structure respecting litchamp criterions keyword NOMASK To do not mask land points returns An 2d array of float containing levels s values uses common pro restrictions Accept values at values f_nan and mask land points at valmask examples IDL a jpk 1 1 jpi jpj findgen jpi jpj IDL plt 1e6 a floatlevel2depth depth2floatlevel a nocontour champ nul a 1e 6 pres history Sebastien Masson smasson lodyc jussieu fr 15 06 2000 version Id FUNCTION depth2floatlevel tab NOMASK nomask compile_opt idl2 strictarrsubs tempsun systime 1 for key_performance common depthin litchamp tab levelup depth2level depthin UPPER nomask depthup level2depth levelup nomask levellow depth2level depthin lower nomask depthlow level2depth levellow nomask calculate the distance depthlow depthup and management of the case of this distance is null or eqal to values f_nan divi depthlow depthup nan where finite divi EQ 0 if nan 0 NE 1 then divi nan 0 nan where divi EQ 0 if nan 0 NE 1 then divi nan values f_nan calculation of the result res levelup depthin depthup divi We mask land point at valmask if NOT keyword_set nomask then begin grille mask if n_elements valmask EQ 0 then valmask 1e20 terre where temporary mask 0 EQ 0 if terre 0 NE 1 then res terre valmask endif if keyword_set key_performance THEN print temps depth2floatlevel systime 1 tempsun return res end");177 a[175] = new Array("./ToBeReviewed/CALCULS/depth2level.html", "depth2level.pro", "", " file_comments Allows to pass from a 2d depth array to a corresponding 2d level array categories Without loop param TAB 2d depth array or a structure respecting litchamp critrions keyword UPPER activated by default We select the level just above the depth keyword LOWER We select the level just below the depth keyword CLOSER We select the depth s closer level keyword NOMASK To do not mask land points returns It is a 2d array containing level s values uses common pro restrictions For depthes out of gdep s values the value values f_nan is sent back if the depth is superior to this one of the bottom we send back jpk 1 in the upper case and values f_nan in the lower case history Sebastien Masson smasson lodyc jussieu fr 17 6 1999 15 6 2000 accepte values f_nan version Id FUNCTION depth2level tab LOWER lower UPPER upper CLOSER closer NOMASK nomask _extra ex compile_opt idl2 strictarrsubs tempsun systime 1 for key_performance common upper 1 if keyword_set lower THEN upper 0 Reading of the input field and recuperation of the used subdomain s size in litchamp tab grille mask 1 1 gdep nx ny nz firstx firsty firstz lastx lasty lastz Verification of the coherence between array s size and the defined by domdef domain IF ny EQ 1 THEN in reform in nx ny over taille size in if taille 0 NE 2 then return report le champ en entree doit contenir un tableau 2d case 1 of taille 1 eq jpi and taille 2 eq jpj:in in firstx:lastx firsty:lasty taille 1 eq nx and taille 2 eq ny: else:return report Probleme d adequation entre les tailles du domaine et celle du champ endcase delete points at values f_nan notanumber where finite in nan EQ 1 if notanumber 0 NE 1 then in notanumber 0 We transform the 2d deth value in a 2d array of levels corresponding to depthes We go on array who have the size of 3d arrays prof replicate 1 nx ny gdep firstz:lastz in in replicate 1 nz mask01 prof LT in mask01 reform mask01 nx ny nz levels total mask01 3 notvalid where levels EQ nz if keyword_set upper then begin levels levels 1 notvalid where levels EQ 1 ENDIF ELSE notvalid where levels EQ nz IF notvalid 0 NE 1 THEN levels notvalid values f_nan If closer is activated if keyword_set closer then begin test litchamp tab level2depth levels level2depth levels 1 jpk 1 litchamp tab test test 0 test 1 changer where test GE 0 if changer 0 NE 1 then levels changer levels changer 1 jpk 1 endif We put back points at values f_nan if notanumber 0 NE 1 then levels notanumber values f_nan We mask land points at valmask if NOT keyword_set nomask then begin if n_elements valmask EQ 0 then valmask 1e20 terre where mask 0 EQ 0 if terre 0 NE 1 then levels terre valmask endif if keyword_set key_performance THEN print temps depth2level systime 1 tempsun return levels end");178 a[176] = new Array("./ToBeReviewed/CALCULS/depth2mask.html", "depth2mask.pro", "", " file_comments Allows to pass from a 2d depth sill array to a 3d array of mask with one of levels above the sill depth and 0s below categories Without loop param TAB 2d sill depth array or a structure respecting litchamp critrions keyword _EXTRA used to pass your keywords returns It is a 3d array containing the mas associated to the 2d sill depth array profondeurs seuil uses common pro history Sebastien Masson smasson lodyc jussieu fr 17 6 1999 version Id FUNCTION depth2mask tab _extra ex compile_opt idl2 strictarrsubs tempsun systime 1 For key_performance common We transform the 2d deth value in a 2d array of levels corresponding to depthes niveaux depth2level tab _extra ex IF niveaux 0 EQ 1 THEN return 1 We transform the 2d array in a 3d array of mask mask level2mask niveaux if keyword_set key_performance NE 0 THEN print temps depth2mask systime 1 tempsun return mask end");179 a[177] = new Array("./ToBeReviewed/CALCULS/determ2.html", "determ2.pro", "", " file_comments computes the determinant of n 2 by 2 arrays Z2DS is an 2 2 n array categories Without loop param A in required n element array Defined as z2ds 0 0 z1d00 param B in required n element array Defined as z2ds 0 1 z1d01 param C in required n element array Defined as z2ds 1 0 z1d10 param D in required n element array Defined as z2ds 1 1 z1d11 returns n elements array the determinent of each 2 2 arrrays examples a findgen 2 2 5 print determ2 a FOR i 0 4 DO print determ a i IDL solution history S Masson smasson lodyc jussieu fr July 11th 2002 version Id FUNCTION determ2 a b c d compile_opt idl2 strictarrsubs CASE n_params OF 1:res a 0 0 a 1 1 a 0 1 a 1 0 4:res a d c b ELSE:stop ENDCASE RETURN res END");180 a[178] = new Array("./ToBeReviewed/CALCULS/determ3.html", "determ3.pro", "", " file_comments computes the determinant of n 3 by 3 arrays Z2DS is an 3 3 n array categories Without loop param IN00 in required It is an n element array defined by in00 z2ds 0 0 param IN01 in required It is an n element array defined by in01 z2ds 0 1 param IN02 in required It is an n element array defined by in02 z2ds 0 2 param IN10 in required It is an n element array defined by in10 z2ds 1 0 param IN11 in required It is an n element array defined by in11 z2ds 1 1 param IN12 in required It is an n element array defined by in12 z2ds 1 2 param IN20 in required It is an n element array defined by in20 z2ds 2 0 param IN21 in required It is an n element array defined by in21 z2ds 2 1 param IN22 in required It is an n element array defined by in22 z2ds 2 2 returns n elements array the determinent of each 3 3 arrrays examples a findgen 3 3 5 print determ3 a 2 FOR i 0 4 DO print determ a i 2 IDL solution history S Masson smasson lodyc jussieu fr July 11th 2002 version Id FUNCTION determ3 in00 in01 in02 in10 in11 in12 in20 in21 in22 compile_opt idl2 strictarrsubs IF n_params EQ 1 THEN BEGIN in00save temporary in00 in00 in00save 0 0 in01 in00save 0 1 in02 in00save 0 2 in10 in00save 1 0 in11 in00save 1 1 in12 in00save 1 2 in20 in00save 2 0 in21 in00save 2 1 in22 in00save 2 2 ENDIF a01 determ2 in10 in20 in12 in22 a11 determ2 in00 in20 in02 in22 a21 determ2 in00 in10 in02 in12 res in01 a01 in11 a11 in21 a21 IF n_params EQ 1 THEN in00 temporary in00save RETURN res END");181 a[179] = new Array("./ToBeReviewed/CALCULS/div.html", "div.pro", "", " file_comments calculation of the divergence of a 2d field categories Calculation on matrixes param UU Matrix representing coordinates of a field of vectors param VV Matrix representing coordinates of a field of vectors returns RES A 2d matrix uses common pro restrictions U and V matrixes can be 2 or 4d Beware to discern differents configuration of U and V xy xyz xyt xyzt we look at the variable of the common time which contain the calendar in IDL julian days to which U and V refered to in the same way as the variable jpt which is the number of time s step to consider in time U and V arrays ae cut in the same geographic domain Because of the gap of T U V and F grids it is possible that these two arrays hase not the same size and refered to different indexes In this case arrays are recut on common indexesand the domain is redifined to match with these common indexes To avoid these recuts use the keyword memeindice in domdef pro Points on the drawing edge are at values f_nan history Guillaume Roullet grlod ipsl jussieu fr Creation : printemps 1998 Sebastien Masson smasson lodyc jussieu fr adaptation pour marcher avec un domaine reduit 12 1 2000 version Id FUNCTION div uu vv compile_opt idl2 strictarrsubs tempsun systime 1 For key_performance common IF finite glamu 0 finite gphiu 0 finite glamv 0 finite gphiv 0 EQ 0 THEN return report This version of div is based on Arakawa C grid U and V grids must therefore be defined u litchamp uu v litchamp vv date1 time 0 if n_elements jpt EQ 0 then date2 date1 ELSE date2 time jpt 1 if size u 0 NE size v 0 then return 1 We find common points between U and V indicexu lindgen jpi firstxu:firstxu nxu 1 indicexv lindgen jpi firstxv:firstxv nxv 1 indicex inter indicexu indicexv indiceyu lindgen jpj firstyu:firstyu nyu 1 indiceyv lindgen jpj firstyv:firstyv nyv 1 indicey inter indiceyu indiceyv nx n_elements indicex ny n_elements indicey indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 case 1 of xyz size u 0 EQ 3 AND date1 EQ date2 :BEGIN extraction of U and V on the appropriated domain case 1 of size v 0 NE 3: return 1 size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN case 1 of nxu NE nx:if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx nxv NE nx:if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx nyu NE ny:if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny nyv NE ny:if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny ELSE : endcase END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 v v indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 END ELSE:BEGIN zdiv 1 GOTO sortie end endcase calcul de la divergence zu e2u indice2d replicate 1 nzt zu reform zu nx ny nzt over zu temporary u temporary zu umask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt terreu where zu EQ 0 if terreu 0 NE 1 then zu temporary terreu values f_nan zv e1v indice2d replicate 1 nzt zv reform zv nx ny nzt over zv temporary v temporary zv vmask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt terrev where zv EQ 0 if terrev 0 NE 1 then zv temporary terrev values f_nan zdiv 1e6 e1t indice2d e2t indice2d zdiv zdiv replicate 1 nzt zdiv reform zdiv nx ny nzt over zdiv temporary zdiv zu shift zu 1 0 0 zv shift zv 0 1 0 tmask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt Edging put at values f_nan if NOT keyword_set key_periodic OR nx NE jpi then begin zdiv 0 values f_nan zdiv nx 1 values f_nan endif zdiv 0 values f_nan zdiv ny 1 values f_nan zdiv temporary zdiv if n_elements valmask EQ 0 THEN valmask 1e20 terre where tmask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt EQ 0 if terre 0 NE 1 then zdiv temporary terre valmask For the graphic drawing vargrid T varname div varunits 1e6 s 1 domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 gridtype t if keyword_set direc then zdiv moyenne zdiv direc nan END xyt date1 NE date2 AND size u 0 EQ 3 :BEGIN extraction of U and V on the appropriated domain case 1 of size u 0 NE 3 OR size v 0 NE 3: return 1 size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN case 1 of nxu NE nx:if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx nxv NE nx:if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx nyu NE ny:if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny nyv NE ny:if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny ELSE : endcase END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 v v indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 END ELSE:return 1 endcase Calculation of the divergence zu e2u indice2d umask indice2d jpi jpj firstzt terreu where zu EQ 0 if terreu 0 NE 1 then zu temporary terreu values f_nan zu zu replicate 1 jpt zu reform zu nx ny jpt over zu temporary u temporary zu zv e1v indice2d vmask indice2d jpi jpj firstzt terrev where zv EQ 0 if terrev 0 NE 1 then zv temporary terrev values f_nan zv zv replicate 1 jpt zv reform zv nx ny jpt over zv temporary v temporary zv zdiv 1e6 tmask indice2d jpi jpj firstzt e1t indice2d e2t indice2d zdiv zdiv replicate 1 jpt zdiv reform zdiv nx ny jpt over terre where zdiv EQ 0 zdiv temporary zdiv zu shift zu 1 0 0 zv shift zv 0 1 0 Edging put at values f_nan if NOT keyword_set key_periodic OR nx NE jpi then begin zdiv 0 values f_nan zdiv nx 1 values f_nan endif zdiv 0 values f_nan zdiv ny 1 values f_nan if n_elements valmask EQ 0 THEN valmask 1e20 if terre 0 NE 1 then zdiv temporary terre valmask for the graphic drawing vargrid T varname div varunits 1e6 s 1 domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 gridtype t if keyword_set direc then zdiv grossemoyenne zdiv direc nan END xyzt date1 NE date2 AND size u 0 EQ 4:BEGIN return report non code END xy ELSE:BEGIN xy indice3d lindgen jpi jpj jpk indice3d indice3d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt extraction of U and V on the appropriated domain case 1 of size u 0 NE 2 OR size v 0 NE 2: BEGIN zdiv 1 GOTO sortie end size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN case 1 of nxu NE nx:if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx nxv NE nx:if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx nyu NE ny:if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny nyv NE ny:if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny ELSE : endcase END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indice2d v v indice2d END ELSE:return 1 endcase Calculation of the divergence zu temporary u e2u indice2d umask indice3d terreu where zu EQ 0 if terreu 0 NE 1 then zu temporary terreu values f_nan zv temporary v e1v indice2d vmask indice3d terrev where zv EQ 0 if terrev 0 NE 1 then zv temporary terrev values f_nan zdiv zu shift zu 1 0 zv shift zv 0 1 zdiv temporary zdiv tmask indice3d e1t indice2d e2t indice2d Edging put at values f_nan if NOT keyword_set key_periodic OR nx NE jpi then begin zdiv 0 values f_nan zdiv nx 1 values f_nan endif zdiv 0 values f_nan zdiv ny 1 values f_nan zdiv temporary zdiv 1e6 if n_elements valmask EQ 0 THEN valmask 1e20 terre where tmask indice3d EQ 0 if terre 0 NE 1 then zdiv temporary terre valmask for the graphic drawing vargrid T varname div varunits 1e6 s 1 domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 gridtype t if keyword_set direc then zdiv moyenne zdiv direc nan END endcase sortie: if keyword_set key_performance THEN print temps div systime 1 tempsun return zdiv end");182 a[180] = new Array("./ToBeReviewed/CALCULS/floatlevel2depth.html", "floatlevel2depth.pro", "", " file_comments Rather comparable to level2depth It is the invert funcion of depth2floatlevel categories Without loop param TAB 2d array of sill levels or a structure respecting litchamp criterions keyword NOMASK To do not mask land points returns 2d array containing depthes uses common pro examples IDL a gdept jpk 1 1 jpi jpj findgen jpi jpj IDL plt 1e6 a floatlevel2depth depth2floatlevel a nocontour null field at 1e 6 pres history Sebastien Masson smasson lodyc jussieu fr 15 6 2000 version Id FUNCTION floatlevel2depth tab NOMASK nomask compile_opt idl2 strictarrsubs tempsun systime 1 To key_performance common flevelin litchamp tab We delete points at values f_nan notanumber where finite flevelin nan EQ 1 if notanumber 0 NE 1 then flevelin notanumber 0 We sill delete land points at valmask for example flevelin 0 flevelin jpk 1 We caculate the depth depthup level2depth floor flevelin nomask depthlow level2depth ceil flevelin nomask weight flevelin floor flevelin res depthup weight depthlow depthup We put back points at values f_nan if notanumber 0 NE 1 then res notanumber values f_nan We mask land points at valmask if NOT keyword_set nomask then begin grille mask if n_elements valmask EQ 0 then valmask 1e20 terre where temporary mask 0 EQ 0 if terre 0 NE 1 then res terre valmask endif if keyword_set key_performance THEN print temps floatlevel2depth systime 1 tempsun return res end");175 a[173] = new Array("./ToBeReviewed/CALCULS/curl.html", "curl.pro", "", " file_comments Calculate the vertical component of the curl of a field of horizontal vectors categories Calculation on matrixes param UU Matrix representing coordinates of a field of vectors param VV Matrix representing coordinates of a field of vectors returns RES A 2d matrix uses common pro restrictions U and V matrixes can be 2 or 4d Beware to discern differents configuration of U and V xy xyz xyt xyzt we look at the variable of the common time which contain the calendar in IDL julian days to which U and V refered to in the same way as the variable jpt which is the number of time s step to consider in time U and V arrays ae cut in the same geographic domain Because of the gap of T U V and F grids it is possible that these two arrays hase not the same size and refered to different indexes In this case arrays are recut on common indexesand the domain is redifined to match with these common indexes To avoid these recuts use the keyword memeindice in domdef pro Points on the drawing edge are at values f_nan history Guillaume Roullet grlod ipsl jussieu fr Sebastien Masson smasson lodyc jussieu fr adaptation pour marcher avec un domaine reduit 21 5 1999: valeurs manquantes a values f_nan periodicite version Id: curl pro 142 2006 07 21 12:47:49Z navarro FUNCTION curl uu vv compile_opt idl2 strictarrsubs common tempsun systime 1 To key_performance IF finite glamu 0 finite gphiu 0 finite glamv 0 finite gphiv 0 EQ 0 THEN return report This version of curl is based on Arakawa C grid U and V grids must therefore be defined u litchamp uu v litchamp vv date1 time 0 if n_elements jpt EQ 0 then date2 date1 ELSE date2 time jpt 1 if size u 0 NE size v 0 then return 1 We find common points between U and V indicexu lindgen jpi firstxu:firstxu nxu 1 indicexv lindgen jpi firstxv:firstxv nxv 1 indicex inter indicexu indicexv indiceyu lindgen jpj firstyu:firstyu nyu 1 indiceyv lindgen jpj firstyv:firstyv nyv 1 indicey inter indiceyu indiceyv nx n_elements indicex ny n_elements indicey case 1 of xyz size u 0 EQ 3 AND date1 EQ date2 :BEGIN indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 extraction of U and V on the appropriated domain case 1 of size u 0 NE 3 OR size v 0 NE 3: return 1 size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN case 1 of nxu NE nx:if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx nxv NE nx:if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx nyu NE ny:if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny nyv NE ny:if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny ELSE : endcase END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 v v indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 END ELSE:return 1 endcase calculation of the curl coefu e1u indice2d replicate 1 nzt coefu reform coefu nx ny nzt over coefu coefu umask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt terreu where coefu EQ 0 if terreu 0 NE 1 then coefu temporary terreu values f_nan coefv e2v indice2d replicate 1 nzt coefv reform coefv nx ny nzt over coefv coefv vmask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt terrev where coefv EQ 0 if terrev 0 NE 1 then coefv temporary terrev values f_nan tabf fmask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt div e1f indice2d e2f indice2d replicate 1 nzt div reform div nx ny nzt over tabf tabf div zu u temporary coefu zv v temporary coefv psi shift zv 1 0 0 zv zu shift zu 0 1 0 psi tabf psi Edging put at values f_nan if NOT keyword_set key_periodic OR nx NE jpi then begin psi 0 values f_nan psi nx 1 values f_nan endif psi 0 values f_nan psi ny 1 values f_nan if n_elements valmask EQ 0 THEN valmask 1e20 terref where tabf EQ 0 if terref 0 NE 1 then psi temporary terref valmask For the graphic drawing domdef glagmt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 gridtype t f if keyword_set direc then psi moyenne psi direc nan END xyt date1 NE date2 AND size u 0 EQ 3 :BEGIN indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 extraction of U and V on the appropriated domain case 1 of size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 v v indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 END ELSE:BEGIN print problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs return 1 end endcase Calculation of the curl coefu e1u indice2d umask indice2d jpi jpj firstzt terreu where coefu EQ 0 if terreu 0 NE 1 then coefu temporary terreu values f_nan coefu temporary coefu replicate 1 jpt coefu reform coefu nx ny jpt over coefv e2v indice2d vmask indice2d jpi jpj firstzt terrev where coefv EQ 0 if terrev 0 NE 1 then coefv temporary terrev values f_nan coefv temporary coefv replicate 1 jpt coefv reform coefv nx ny jpt over tabf fmask indice2d jpi jpj firstzt e1f indice2d e2f indice2d tabf temporary tabf replicate 1 jpt tabf reform tabf nx ny jpt over Calculation of the curl zu u temporary coefu zv v temporary coefv psi shift zv 1 0 0 zv zu shift zu 0 1 0 psi tabf psi extraction of U and V on the appropriated domain if NOT keyword_set key_periodic OR nx NE jpi then begin psi 0 values f_nan psi nx 1 values f_nan endif psi 0 values f_nan psi ny 1 values f_nan if n_elements valmask EQ 0 THEN valmask 1e20 terref where tabf EQ 0 if terref 0 NE 1 then psi temporary terref valmask domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 gridtype t f if keyword_set direc then psi grossemoyenne psi direc nan END xyzt date1 NE date2 AND size u 0 EQ 4:BEGIN return report non code END xy ELSE:BEGIN xy indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 case 1 of size u 0 NE 2 OR size v 0 NE 2: return 1 size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indice2d v v indice2d END ELSE:return 1 endcase Calculation of the curl coefu e1u indice2d umask indice2d jpi jpj firstzt terreu where coefu EQ 0 if terreu 0 NE 1 then coefu temporary terreu values f_nan coefv e2v indice2d vmask indice2d jpi jpj firstzt terrev where coefv EQ 0 if terrev 0 NE 1 then coefv temporary terrev values f_nan tabf fmask indice2d jpi jpj firstzt e1f indice2d e2f indice2d zu u temporary coefu zv v temporary coefv psi shift zv 1 0 zv zu shift zu 0 1 psi tabf psi Edging put at values f_nan if NOT keyword_set key_periodic OR nx NE jpi then begin psi 0 values f_nan psi nx 1 values f_nan endif psi 0 values f_nan psi ny 1 values f_nan if n_elements valmask EQ 0 THEN valmask 1e20 terref where tabf EQ 0 if terref 0 NE 1 then psi temporary terref valmask for the graphic drawing domdef glamt indice2d 0 0 glamf indice2d nx 1 0 gphit indice2d 0 0 gphif indice2d 0 ny 1 vert1 vert2 gridtype t f if keyword_set direc then psi moyenne psi direc nan END endcase if keyword_set key_performance THEN print temps curl systime 1 tempsun vargrid F varname vorticity return psi end"); 176 a[174] = new Array("./ToBeReviewed/CALCULS/depth2floatlevel.html", "depth2floatlevel.pro", "", " file_comments Rather comparable to depth2level but here the calculated level is in float For example the level 5 4 correspond to a depth equal to gdep 5 4 gdep 6 gdep 5 categories Without loop param TAB in required 2d depth array or a structure respecting litchamp criterions keyword NOMASK To do not mask land points returns An 2d array of float containing levels s values uses common pro restrictions Accept values at values f_nan and mask land points at valmask examples IDL a jpk 1 1 jpi jpj findgen jpi jpj IDL plt 1e6 a floatlevel2depth depth2floatlevel a nocontour champ nul a 1e 6 pres history Sebastien Masson smasson lodyc jussieu fr 15 06 2000 version Id: depth2floatlevel pro 142 2006 07 21 12:47:49Z navarro FUNCTION depth2floatlevel tab NOMASK nomask compile_opt idl2 strictarrsubs tempsun systime 1 for key_performance common depthin litchamp tab levelup depth2level depthin UPPER nomask depthup level2depth levelup nomask levellow depth2level depthin lower nomask depthlow level2depth levellow nomask calculate the distance depthlow depthup and management of the case of this distance is null or eqal to values f_nan divi depthlow depthup nan where finite divi EQ 0 if nan 0 NE 1 then divi nan 0 nan where divi EQ 0 if nan 0 NE 1 then divi nan values f_nan calculation of the result res levelup depthin depthup divi We mask land point at valmask if NOT keyword_set nomask then begin grille mask if n_elements valmask EQ 0 then valmask 1e20 terre where temporary mask 0 EQ 0 if terre 0 NE 1 then res terre valmask endif if keyword_set key_performance THEN print temps depth2floatlevel systime 1 tempsun return res end"); 177 a[175] = new Array("./ToBeReviewed/CALCULS/depth2level.html", "depth2level.pro", "", " file_comments Allows to pass from a 2d depth array to a corresponding 2d level array categories Without loop param TAB 2d depth array or a structure respecting litchamp critrions keyword UPPER activated by default We select the level just above the depth keyword LOWER We select the level just below the depth keyword CLOSER We select the depth s closer level keyword NOMASK To do not mask land points returns It is a 2d array containing level s values uses common pro restrictions For depthes out of gdep s values the value values f_nan is sent back if the depth is superior to this one of the bottom we send back jpk 1 in the upper case and values f_nan in the lower case history Sebastien Masson smasson lodyc jussieu fr 17 6 1999 15 6 2000 accepte values f_nan version Id: depth2level pro 142 2006 07 21 12:47:49Z navarro FUNCTION depth2level tab LOWER lower UPPER upper CLOSER closer NOMASK nomask _extra ex compile_opt idl2 strictarrsubs tempsun systime 1 for key_performance common upper 1 if keyword_set lower THEN upper 0 Reading of the input field and recuperation of the used subdomain s size in litchamp tab grille mask 1 1 gdep nx ny nz firstx firsty firstz lastx lasty lastz Verification of the coherence between array s size and the defined by domdef domain IF ny EQ 1 THEN in reform in nx ny over taille size in if taille 0 NE 2 then return report le champ en entree doit contenir un tableau 2d case 1 of taille 1 eq jpi and taille 2 eq jpj:in in firstx:lastx firsty:lasty taille 1 eq nx and taille 2 eq ny: else:return report Probleme d adequation entre les tailles du domaine et celle du champ endcase delete points at values f_nan notanumber where finite in nan EQ 1 if notanumber 0 NE 1 then in notanumber 0 We transform the 2d deth value in a 2d array of levels corresponding to depthes We go on array who have the size of 3d arrays prof replicate 1 nx ny gdep firstz:lastz in in replicate 1 nz mask01 prof LT in mask01 reform mask01 nx ny nz levels total mask01 3 notvalid where levels EQ nz if keyword_set upper then begin levels levels 1 notvalid where levels EQ 1 ENDIF ELSE notvalid where levels EQ nz IF notvalid 0 NE 1 THEN levels notvalid values f_nan If closer is activated if keyword_set closer then begin test litchamp tab level2depth levels level2depth levels 1 jpk 1 litchamp tab test test 0 test 1 changer where test GE 0 if changer 0 NE 1 then levels changer levels changer 1 jpk 1 endif We put back points at values f_nan if notanumber 0 NE 1 then levels notanumber values f_nan We mask land points at valmask if NOT keyword_set nomask then begin if n_elements valmask EQ 0 then valmask 1e20 terre where mask 0 EQ 0 if terre 0 NE 1 then levels terre valmask endif if keyword_set key_performance THEN print temps depth2level systime 1 tempsun return levels end"); 178 a[176] = new Array("./ToBeReviewed/CALCULS/depth2mask.html", "depth2mask.pro", "", " file_comments Allows to pass from a 2d depth sill array to a 3d array of mask with one of levels above the sill depth and 0s below categories Without loop param TAB 2d sill depth array or a structure respecting litchamp critrions keyword _EXTRA used to pass your keywords returns It is a 3d array containing the mas associated to the 2d sill depth array profondeurs seuil uses common pro history Sebastien Masson smasson lodyc jussieu fr 17 6 1999 version Id: depth2mask pro 142 2006 07 21 12:47:49Z navarro FUNCTION depth2mask tab _extra ex compile_opt idl2 strictarrsubs tempsun systime 1 For key_performance common We transform the 2d deth value in a 2d array of levels corresponding to depthes niveaux depth2level tab _extra ex IF niveaux 0 EQ 1 THEN return 1 We transform the 2d array in a 3d array of mask mask level2mask niveaux if keyword_set key_performance NE 0 THEN print temps depth2mask systime 1 tempsun return mask end"); 179 a[177] = new Array("./ToBeReviewed/CALCULS/determ2.html", "determ2.pro", "", " file_comments computes the determinant of n 2 by 2 arrays Z2DS is an 2 2 n array categories Without loop param A in required n element array Defined as z2ds 0 0 z1d00 param B in required n element array Defined as z2ds 0 1 z1d01 param C in required n element array Defined as z2ds 1 0 z1d10 param D in required n element array Defined as z2ds 1 1 z1d11 returns n elements array the determinent of each 2 2 arrrays examples a findgen 2 2 5 print determ2 a FOR i 0 4 DO print determ a i IDL solution history S Masson smasson lodyc jussieu fr July 11th 2002 version Id: determ2 pro 142 2006 07 21 12:47:49Z navarro FUNCTION determ2 a b c d compile_opt idl2 strictarrsubs CASE n_params OF 1:res a 0 0 a 1 1 a 0 1 a 1 0 4:res a d c b ELSE:stop ENDCASE RETURN res END"); 180 a[178] = new Array("./ToBeReviewed/CALCULS/determ3.html", "determ3.pro", "", " file_comments computes the determinant of n 3 by 3 arrays Z2DS is an 3 3 n array categories Without loop param IN00 in required It is an n element array defined by in00 z2ds 0 0 param IN01 in required It is an n element array defined by in01 z2ds 0 1 param IN02 in required It is an n element array defined by in02 z2ds 0 2 param IN10 in required It is an n element array defined by in10 z2ds 1 0 param IN11 in required It is an n element array defined by in11 z2ds 1 1 param IN12 in required It is an n element array defined by in12 z2ds 1 2 param IN20 in required It is an n element array defined by in20 z2ds 2 0 param IN21 in required It is an n element array defined by in21 z2ds 2 1 param IN22 in required It is an n element array defined by in22 z2ds 2 2 returns n elements array the determinent of each 3 3 arrrays examples a findgen 3 3 5 print determ3 a 2 FOR i 0 4 DO print determ a i 2 IDL solution history S Masson smasson lodyc jussieu fr July 11th 2002 version Id: determ3 pro 142 2006 07 21 12:47:49Z navarro FUNCTION determ3 in00 in01 in02 in10 in11 in12 in20 in21 in22 compile_opt idl2 strictarrsubs IF n_params EQ 1 THEN BEGIN in00save temporary in00 in00 in00save 0 0 in01 in00save 0 1 in02 in00save 0 2 in10 in00save 1 0 in11 in00save 1 1 in12 in00save 1 2 in20 in00save 2 0 in21 in00save 2 1 in22 in00save 2 2 ENDIF a01 determ2 in10 in20 in12 in22 a11 determ2 in00 in20 in02 in22 a21 determ2 in00 in10 in02 in12 res in01 a01 in11 a11 in21 a21 IF n_params EQ 1 THEN in00 temporary in00save RETURN res END"); 181 a[179] = new Array("./ToBeReviewed/CALCULS/div.html", "div.pro", "", " file_comments calculation of the divergence of a 2d field categories Calculation on matrixes param UU Matrix representing coordinates of a field of vectors param VV Matrix representing coordinates of a field of vectors returns RES A 2d matrix uses common pro restrictions U and V matrixes can be 2 or 4d Beware to discern differents configuration of U and V xy xyz xyt xyzt we look at the variable of the common time which contain the calendar in IDL julian days to which U and V refered to in the same way as the variable jpt which is the number of time s step to consider in time U and V arrays ae cut in the same geographic domain Because of the gap of T U V and F grids it is possible that these two arrays hase not the same size and refered to different indexes In this case arrays are recut on common indexesand the domain is redifined to match with these common indexes To avoid these recuts use the keyword memeindice in domdef pro Points on the drawing edge are at values f_nan history Guillaume Roullet grlod ipsl jussieu fr Creation : printemps 1998 Sebastien Masson smasson lodyc jussieu fr adaptation pour marcher avec un domaine reduit 12 1 2000 version Id: div pro 142 2006 07 21 12:47:49Z navarro FUNCTION div uu vv compile_opt idl2 strictarrsubs tempsun systime 1 For key_performance common IF finite glamu 0 finite gphiu 0 finite glamv 0 finite gphiv 0 EQ 0 THEN return report This version of div is based on Arakawa C grid U and V grids must therefore be defined u litchamp uu v litchamp vv date1 time 0 if n_elements jpt EQ 0 then date2 date1 ELSE date2 time jpt 1 if size u 0 NE size v 0 then return 1 We find common points between U and V indicexu lindgen jpi firstxu:firstxu nxu 1 indicexv lindgen jpi firstxv:firstxv nxv 1 indicex inter indicexu indicexv indiceyu lindgen jpj firstyu:firstyu nyu 1 indiceyv lindgen jpj firstyv:firstyv nyv 1 indicey inter indiceyu indiceyv nx n_elements indicex ny n_elements indicey indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 case 1 of xyz size u 0 EQ 3 AND date1 EQ date2 :BEGIN extraction of U and V on the appropriated domain case 1 of size v 0 NE 3: return 1 size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN case 1 of nxu NE nx:if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx nxv NE nx:if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx nyu NE ny:if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny nyv NE ny:if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny ELSE : endcase END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 v v indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 END ELSE:BEGIN zdiv 1 GOTO sortie end endcase calcul de la divergence zu e2u indice2d replicate 1 nzt zu reform zu nx ny nzt over zu temporary u temporary zu umask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt terreu where zu EQ 0 if terreu 0 NE 1 then zu temporary terreu values f_nan zv e1v indice2d replicate 1 nzt zv reform zv nx ny nzt over zv temporary v temporary zv vmask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt terrev where zv EQ 0 if terrev 0 NE 1 then zv temporary terrev values f_nan zdiv 1e6 e1t indice2d e2t indice2d zdiv zdiv replicate 1 nzt zdiv reform zdiv nx ny nzt over zdiv temporary zdiv zu shift zu 1 0 0 zv shift zv 0 1 0 tmask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt Edging put at values f_nan if NOT keyword_set key_periodic OR nx NE jpi then begin zdiv 0 values f_nan zdiv nx 1 values f_nan endif zdiv 0 values f_nan zdiv ny 1 values f_nan zdiv temporary zdiv if n_elements valmask EQ 0 THEN valmask 1e20 terre where tmask indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt EQ 0 if terre 0 NE 1 then zdiv temporary terre valmask For the graphic drawing vargrid T varname div varunits 1e6 s 1 domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 gridtype t if keyword_set direc then zdiv moyenne zdiv direc nan END xyt date1 NE date2 AND size u 0 EQ 3 :BEGIN extraction of U and V on the appropriated domain case 1 of size u 0 NE 3 OR size v 0 NE 3: return 1 size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN case 1 of nxu NE nx:if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx nxv NE nx:if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx nyu NE ny:if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny nyv NE ny:if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny ELSE : endcase END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 v v indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 END ELSE:return 1 endcase Calculation of the divergence zu e2u indice2d umask indice2d jpi jpj firstzt terreu where zu EQ 0 if terreu 0 NE 1 then zu temporary terreu values f_nan zu zu replicate 1 jpt zu reform zu nx ny jpt over zu temporary u temporary zu zv e1v indice2d vmask indice2d jpi jpj firstzt terrev where zv EQ 0 if terrev 0 NE 1 then zv temporary terrev values f_nan zv zv replicate 1 jpt zv reform zv nx ny jpt over zv temporary v temporary zv zdiv 1e6 tmask indice2d jpi jpj firstzt e1t indice2d e2t indice2d zdiv zdiv replicate 1 jpt zdiv reform zdiv nx ny jpt over terre where zdiv EQ 0 zdiv temporary zdiv zu shift zu 1 0 0 zv shift zv 0 1 0 Edging put at values f_nan if NOT keyword_set key_periodic OR nx NE jpi then begin zdiv 0 values f_nan zdiv nx 1 values f_nan endif zdiv 0 values f_nan zdiv ny 1 values f_nan if n_elements valmask EQ 0 THEN valmask 1e20 if terre 0 NE 1 then zdiv temporary terre valmask for the graphic drawing vargrid T varname div varunits 1e6 s 1 domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 gridtype t if keyword_set direc then zdiv grossemoyenne zdiv direc nan END xyzt date1 NE date2 AND size u 0 EQ 4:BEGIN return report non code END xy ELSE:BEGIN xy indice3d lindgen jpi jpj jpk indice3d indice3d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt extraction of U and V on the appropriated domain case 1 of size u 0 NE 2 OR size v 0 NE 2: BEGIN zdiv 1 GOTO sortie end size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN case 1 of nxu NE nx:if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx nxv NE nx:if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx nyu NE ny:if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny nyv NE ny:if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny ELSE : endcase END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indice2d v v indice2d END ELSE:return 1 endcase Calculation of the divergence zu temporary u e2u indice2d umask indice3d terreu where zu EQ 0 if terreu 0 NE 1 then zu temporary terreu values f_nan zv temporary v e1v indice2d vmask indice3d terrev where zv EQ 0 if terrev 0 NE 1 then zv temporary terrev values f_nan zdiv zu shift zu 1 0 zv shift zv 0 1 zdiv temporary zdiv tmask indice3d e1t indice2d e2t indice2d Edging put at values f_nan if NOT keyword_set key_periodic OR nx NE jpi then begin zdiv 0 values f_nan zdiv nx 1 values f_nan endif zdiv 0 values f_nan zdiv ny 1 values f_nan zdiv temporary zdiv 1e6 if n_elements valmask EQ 0 THEN valmask 1e20 terre where tmask indice3d EQ 0 if terre 0 NE 1 then zdiv temporary terre valmask for the graphic drawing vargrid T varname div varunits 1e6 s 1 domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 gridtype t if keyword_set direc then zdiv moyenne zdiv direc nan END endcase sortie: if keyword_set key_performance THEN print temps div systime 1 tempsun return zdiv end"); 182 a[180] = new Array("./ToBeReviewed/CALCULS/floatlevel2depth.html", "floatlevel2depth.pro", "", " file_comments Rather comparable to level2depth It is the invert funcion of depth2floatlevel categories Without loop param TAB 2d array of sill levels or a structure respecting litchamp criterions keyword NOMASK To do not mask land points returns 2d array containing depthes uses common pro examples IDL a gdept jpk 1 1 jpi jpj findgen jpi jpj IDL plt 1e6 a floatlevel2depth depth2floatlevel a nocontour null field at 1e 6 pres history Sebastien Masson smasson lodyc jussieu fr 15 6 2000 version Id: floatlevel2depth pro 142 2006 07 21 12:47:49Z navarro FUNCTION floatlevel2depth tab NOMASK nomask compile_opt idl2 strictarrsubs tempsun systime 1 To key_performance common flevelin litchamp tab We delete points at values f_nan notanumber where finite flevelin nan EQ 1 if notanumber 0 NE 1 then flevelin notanumber 0 We sill delete land points at valmask for example flevelin 0 flevelin jpk 1 We caculate the depth depthup level2depth floor flevelin nomask depthlow level2depth ceil flevelin nomask weight flevelin floor flevelin res depthup weight depthlow depthup We put back points at values f_nan if notanumber 0 NE 1 then res notanumber values f_nan We mask land points at valmask if NOT keyword_set nomask then begin grille mask if n_elements valmask EQ 0 then valmask 1e20 terre where temporary mask 0 EQ 0 if terre 0 NE 1 then res terre valmask endif if keyword_set key_performance THEN print temps floatlevel2depth systime 1 tempsun return res end"); 183 183 a[181] = new Array("./ToBeReviewed/CALCULS/fsfzpt.html", "fsfzpt.pro", "", " Ice freezing point fsfzpt: freezing point of seawater in degrees celsius units : salinity pfs ipss 78 pressure pfp decibars temperature fszfpt degrees celsius freezing pt reference : unesco tech papers in the marine science no 28 1978 eigth report jpots annex 6 freezing point of seawater F J Millero pp 29 35 checkvalue: fsfzpt 2 588567 deg c for s 40 0 p 500 decibars todo seb FUNCTION fsfzpt pfs pfp compile_opt idl2 strictarrsubs RETURN 0 0575 1 710523e 3 sqrt pfs 2 154996e 4 pfs pfs 7 53e 4 pfp END"); 184 184 a[182] = new Array("./ToBeReviewed/CALCULS/grad.html", "grad.pro", "", " NAME: PURPOSE: CATEGORY: CALLING SEQUENCE: INPUTS: KEYWORD PARAMETERS: OUTPUTS: COMMON BLOCKS:common pro SIDE EFFECTS: RESTRICTIONS: EXAMPLE: MODIFICATION HISTORY:Sebastien Masson smasson lodyc jussieu fr todo seb: remplir les truc FUNCTION grad field direc compile_opt idl2 strictarrsubs common IF finite glamu 0 finite gphiu 0 finite glamv 0 finite gphiv 0 EQ 0 THEN return report This version of grad is based on Arakawa C grid U and V grids must therefore be defined res litchamp field taille size res grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz if n_elements valmask EQ 0 then valmask 1e20 case strupcase vargrid of T :BEGIN case direc of x :BEGIN divi e1u firstx:lastx firsty:lasty newmask umask firstx:lastx firsty:lasty firstz:lastz vargrid U domdef glamt firstx 0 glamu lastx 0 gphit 0 firsty gphiu 0 lasty gridtype T U END y :BEGIN divi e2v firstx:lastx firsty:lasty newmask vmask firstx:lastx firsty:lasty firstz:lastz vargrid V domdef glamt firstx 0 glamv lastx 0 gphit 0 firsty gphiv 0 lasty gridtype T V END z :BEGIN divi e3w firstz:lastz newmask mask vargrid W END ELSE:return report Bad definition of direction argument ENDCASE END W :BEGIN case direc of x :divi e1u firstx:lastx firsty:lasty y :divi e2v firstx:lastx firsty:lasty z :BEGIN divi e3t firstz:lastz newmask mask vargrid T END ELSE:return report Bad definition of direction argument endcase END U :BEGIN case direc of x :BEGIN divi shift e1t 1 0 firstx:lastx firsty:lasty newmask tmask firstx:lastx firsty:lasty firstz:lastz vargrid T domdef glamt firstx 0 glamu lastx gphit 0 firsty gphiu 0 lasty gridtype T U END y :BEGIN divi e2f firstx:lastx firsty:lasty newmask fmask firstx:lastx firsty:lasty firstz:lastz vargrid F domdef glamu firstx 0 glamf lastx 0 gphiu 0 firsty gphif 0 lasty gridtype U F END z :BEGIN divi e3w firstz:lastz newmask mask vargrid W END ELSE:return report Bad definition of direction argument endcase END V :BEGIN case direc of x :BEGIN divi e1f firstx:lastx firsty:lasty newmask fmask firstx:lastx firsty:lasty firstz:lastz vargrid F domdef glamv firstx 0 glamf lastx 0 gphiv 0 firsty gphif 0 lasty gridtype V F END y :BEGIN divi shift e2t 0 1 firstx:lastx firsty:lasty newmask tmask firstx:lastx firsty:lasty firstz:lastz vargrid T domdef glamt firstx 0 glamv lastx 0 gphit 0 firsty gphiv 0 lasty gridtype T V END z :BEGIN divi e3w firstz:lastz newmask mask vargrid W END ELSE:return report Bad definition of direction argument endcase END F :BEGIN case direc of x :divi shift e1v 1 0 firstx:lastx firsty:lasty y :divi shift e2u 0 1 firstx:lastx firsty:lasty z :divi e3w firstz:lastz ELSE:return report Bad definition of direction argument endcase END ELSE:return report Bad definition of vargrid ENDCASE res fitintobox res case 1 of xy taille 0 EQ 2:BEGIN earth where mask firstz EQ 0 if earth 0 NE 1 then res earth values f_nan case direc of x :BEGIN res shift res 1 0 res divi if key_periodic EQ 0 OR nx NE jpi THEN res nx 1 values f_nan if vargrid EQ T OR vargrid EQ V then res shift res 1 0 END y :BEGIN res shift res 0 1 res divi res ny 1 values f_nan if vargrid EQ T OR vargrid EQ U then res shift res 0 1 END ELSE:return report Bad definition of direction argument for the type of array ENDCASE earth where newmask firstz EQ 0 if earth 0 NE 1 then res earth valmask END xyt taille 0 EQ 3 AND jpt NE 1:BEGIN earth where mask firstz EQ 0 if earth 0 NE 1 then BEGIN earth earth replicate 1 jpt replicate 1 n_elements earth nx ny lindgen jpt res earth values f_nan ENDIF divi divi replicate 1 jpt case direc of x :BEGIN res shift res 1 0 0 res divi if key_periodic EQ 0 OR nx NE jpi THEN res nx 1 values f_nan if vargrid EQ T OR vargrid EQ V then res shift res 1 0 0 END y :BEGIN res shift res 0 1 0 res divi res ny 1 values f_nan if vargrid EQ T OR vargrid EQ U then res shift res 0 1 0 END ELSE:return report Bad definition of direction argument for the type of array ENDCASE earth where newmask firstz EQ 0 if earth 0 NE 1 THEN res earth valmask END xyz taille 0 EQ 3 AND jpt EQ 1:BEGIN earth where mask EQ 0 if earth 0 NE 1 then res earth values f_nan case direc OF x :BEGIN divi divi replicate 1 nz res shift res 1 0 0 res divi if key_periodic EQ 0 OR nx NE jpi THEN res nx 1 values f_nan if vargrid EQ T OR vargrid EQ V then res shift res 1 0 0 END y :BEGIN divi divi replicate 1 nz res shift res 0 1 0 res divi res ny 1 values f_nan if vargrid EQ T OR vargrid EQ U then res shift res 0 1 0 END z :BEGIN divi reform replicate 1 nx ny divi nx ny nz if nx EQ 1 OR ny EQ 1 then res reform res nx ny nz if vargrid EQ W THEN BEGIN res shift res 0 0 1 res divi res 0 values f_nan ENDIF ELSE BEGIN res res shift res 0 0 1 divi res nz 1 values f_nan ENDELSE if earth 0 NE 1 then res earth valmask END ENDCASE END xyzt taille 0 EQ 4:BEGIN earth where mask replicate 1 jpt EQ 0 if earth 0 NE 1 then res earth values f_nan case direc OF x :BEGIN divi divi replicate 1 nz jpt res shift res 1 0 0 0 res divi if key_periodic EQ 0 OR nx NE jpi THEN res nx 1 values f_nan if vargrid EQ T OR vargrid EQ V then res shift res 1 0 0 0 END y :BEGIN divi divi replicate 1 nz jpt res shift res 0 1 0 0 res divi res ny 1 values f_nan if vargrid EQ T OR vargrid EQ U then res shift res 0 1 0 0 END z :BEGIN divi replicate 1 nx ny divi divi reform divi replicate 1 jpt nx ny nz jpt over if nx EQ 1 OR ny EQ 1 then res reform res nx ny nz jpt if vargrid EQ W THEN BEGIN res shift res 0 0 1 0 res divi res 0 values f_nan ENDIF ELSE BEGIN res res shift res 0 0 1 0 divi res nz 1 values f_nan ENDELSE END ENDCASE if earth 0 NE 1 then res earth valmask END endcase varname grad of varname varunit varunit m return res end "); 185 a[183] = new Array("./ToBeReviewed/CALCULS/grossemoyenne.html", "grossemoyenne.pro", "", " file_comments averages a 3 or 4 d time serie field over a selected geographical area or along the time axis For one ore more selected axes x y z t categories param TAB in required 3 or 4d field param DIREC in required x y z t xy xz yz xyz xt yt zt xyt xzt yzt or xyzt keyword BOXZOOM xmin xmax ymin ymax zmin zmax to more details see domdef boxzoom can have 5 forms: vert2 vert1 vert2 lon1 lon2 lat1 lat2 lon1 lon2 lat1 lat2 vert2 lon1 lon2 lat1 lat2 vert1 vert2 keyword NAN not a number we activate it if we want to average without considerate some masked values of TAB If masked values of TAB are values consecrated by IDL values f_nan wr just have to put NAN If masked values of TAB are valued a a must be different of 1 corresponding to nan values f_nan and of 0 which desactivate nan We have to put NAN a Comment: In output rsult points which are NAN will be valued a or values f_nan keyword NODOMDEF We activate it if we do not want to pass in domdef even if the keyword boxzoom is present like when grossemoyenne is called via checkfield keyword INTEGRATION To make an integral rather than an average keyword SPATIALFIRST when performing at the same time spatial and temporal mean grossemoyenne is assuming that the mask is not changing with the time In consequence grossemoyenne performs temporal mean first and then call moyenne Activate SPATIALFIRST if you want to perform the spatial mean before the temporal mean Note that if NAN is activated then SPATIALFIRST is activated automatically keyword TEMPORALFIRST to force to perform first temporal mean even if nan is activated see SPATIALFIRST explanations keyword WDEPTH to specify that the field is at W depth instad of T depth automatically activated if vargrid eq W uses result:un tableau common domdef restrictions Put values corresponding to land at 1 e20 history Jerome Vialard jv lodyc jussieu fr 2 7 98 Sebastien Masson smasson lodyc jussieu fr adaptation array containing a temporal dimension 14 8 98 15 1 98 12 3 99 adaptation for NAN and utilisation of TEMPORARY version Id function grossemoyenne tab direc BOXZOOM boxzoom INTEGRATION integration NAN nan NODOMDEF nodomdef WDEPTH wdepth SPATIALFIRST spatialfirst TEMPORALFIRST temporalfirst _extra ex compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 For key_performance I preliminaries dirt 0 dirx 0 diry 0 dirz 0 dim aa I 1 Directions s we follow to integrate if strpos direc t ge 0 then dirt 1 if strpos direc x ge 0 then dirx 1 if strpos direc y ge 0 then diry 1 if strpos direc z ge 0 then dirz 1 IF keyword_set NAN AND dirx EQ 1 OR diry EQ 1 OR dirz EQ 1 THEN spatialfirst 1 IF keyword_set temporalfirst THEN spatialfirst 0 I 2 verification of the input array s size taille size tab case 1 of taille 0 eq 1 :return report Le tableau n a qu une dimension cas non traite taille 0 eq 2 :return report Le tableau n a qu deux dimension cas non traite taille 0 eq 3 :BEGIN dim 3d if dirx eq 0 and diry eq 0 and dirt eq 0 then return tab END taille 0 eq 4 :BEGIN dim 4d if dirx eq 0 and diry eq 0 and dirz eq 0 and dirt eq 0 then return tab END else : return report Le tableau d entree doit etre a 3 ou 4 dimensions s il ne contient pas de dim temporelle utiliser moyenne endcase I 3 Obtainment of scale s factors and of the mask on the subdomain concernedby the average Redefinition of the domain ajusted at boxzoom at 6 elements This will allowed us to calculate only in the domain concerned by the average Domdef followed by grid give us all arrays of the grid on the subdomain if keyword_set boxzoom then BEGIN Case 1 Of N_Elements Boxzoom Eq 1: bte lon1 lon2 lat1 lat2 0 boxzoom 0 N_Elements Boxzoom Eq 2: bte lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 N_Elements Boxzoom Eq 4: bte Boxzoom vert1 vert2 N_Elements Boxzoom Eq 5: bte Boxzoom 0:3 0 Boxzoom 4 N_Elements Boxzoom Eq 6: bte Boxzoom Else: return report Wrong Definition of Boxzoom endcase if NOT keyword_set nodomdef then BEGIN savedbox 1b saveboxparam boxparam4grmoyenne dat domdef bte GRIDTYPE vargrid _extra ex ENDIF ENDIF attribution of the mask and of longitude and latitude arrays grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz e1 e2 e3 WDEPTH wdepth I 4 if dirt equal 1 we make the temporal average and we send it in moyenne if dirt EQ 1 AND NOT keyword_set spatialfirst then begin if dim EQ 3d then BEGIN case 1 of taille 1 eq jpi and taille 2 eq jpj and taille 3 eq jpt: res tab firstx:firstx nx 1 firsty:firsty ny 1 taille 1 EQ nx and taille 2 eq ny and taille 3 eq jpt:res tab else:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return report Probleme d adequation entre les tailles du domaine nx ny jpt strtrim nx 1 strtrim ny 1 strtrim jpt 1 et du tableau strtrim taille 1 1 strtrim taille 2 1 strtrim taille 3 1 END ENDCASE if keyword_set integration then begin res total res 3 nan nan ENDIF ELSE BEGIN if keyword_set nan then BEGIN divi finite res divi total temporary divi 3 notanum where divi EQ 0 res total res 3 nan keyword_set nan 1 divi if notanum 0 NE 1 then res temporary notanum values f_nan ENDIF ELSE res total res 3 1 taille 3 ENDELSE ENDIF ELSE BEGIN case 1 of taille 1 eq jpi and taille 2 eq jpj and taille 3 eq jpk and taille 4 eq jpt: res tab firstx:lastx firsty:lasty firstz:lastz taille 1 eq jpi and taille 2 eq jpj and taille 3 eq nz and taille 4 eq jpt: res tab firstx:lastx firsty:lasty taille 1 EQ nx and taille 2 eq ny and taille 3 eq nz and taille 4 eq jpt:res tab taille 1 EQ nx and taille 2 eq ny and taille 3 eq jpk and taille 4 eq jpt: res tab firstz:lastz else:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return report Probleme d adequation entre les tailles du domaine nx ny nz jpt strtrim nx 1 strtrim ny 1 strtrim nz 1 strtrim jpt 1 et du tableau strtrim taille 1 1 strtrim taille 2 1 strtrim taille 3 1 strtrim taille 4 1 END endcase if keyword_set integration then begin res total res 4 nan nan ENDIF ELSE BEGIN if keyword_set nan then begin divi finite res divi total temporary divi 4 notanum where divi EQ 0 res total res 4 nan 1 divi if notanum 0 NE 1 then res temporary notanum values f_nan ENDIF ELSE res total res 4 1 taille 4 ENDELSE ENDELSE if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return moyenne temporary res direc BOXZOOM boxzoom NAN nan INTEGRATION integration NODOMDEF nodomdef WDEPTH wdepth _extra ex ENDIF ELSE res tab IF jpt EQ 1 THEN BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return moyenne reform res over direc BOXZOOM boxzoom NAN nan INTEGRATION integration NODOMDEF nodomdef WDEPTH wdepth _extra ex END II Case 2d arrays series tab3d if dim eq 3d then begin II 1 verification of the coherence of the array s size to average Verification of the coherence between the array s size and the domain defined by domdef The input array must have either the total domain s size jpi jpj jpt or this one of the reduced domain nx ny jpt case 1 of taille 1 eq jpi and taille 2 eq jpj and taille 3 eq jpt: res tab firstx:firstx nx 1 firsty:firsty ny 1 taille 1 EQ nx and taille 2 eq ny and taille 3 eq jpt:res tab else:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return report Probleme d adequation entre les tailles du domaine nx ny jpt strtrim nx 1 strtrim ny 1 strtrim jpt 1 et du tableau strtrim taille 1 1 strtrim taille 2 1 strtrim taille 3 1 enD endcase if keyword_set nan NE 0 then BEGIN if nan NE 1 then BEGIN If nan is not values f_nan we put it at values f_nan if abs nan LT 1e6 then notanumber where res EQ nan ELSE notanumber where abs res GT abs nan 10 if notanumber 0 NE 1 then res temporary notanumber values f_nan ENDIF ENDIF Comment : WE HAVE TO BE CAREFUL ABOUT CASES WHERE THE DIMENSION TO AVERAGE 1 AND MAKE SURE THAT IT EXIST THAT IS WHY WE USE reform nx ny WHICH CAN LOOK USELESS AT THE BEGINNING if nx EQ 1 OR ny EQ 1 then BEGIN res reform res nx ny jpt over e1 reform e1 nx ny over e2 reform e2 nx ny over endif if nx EQ 1 OR ny EQ 1 OR nz EQ 1 THEN mask reform mask nx ny nz over II 3 Different types of average if keyword_set nan NE 0 then msknan finite res ELSE msknan 1 mask mask 0 case 1 of dirx eq 1 and diry eq 0 : begin e temporary e1 temporary mask echelle temporary e replicate 1 jpt echelle reform echelle nx ny jpt over if keyword_set integration then divi 1 ELSE BEGIN IF msknan 0 NE 1 THEN divi total echelle msknan 1 ELSE divi total echelle 1 ENDELSE res total temporary res echelle 1 nan nan divi 1 if msknan 0 NE 1 then BEGIN echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total temporary testnan 1 total temporary echelle 1 EQ 0 endif end dirx eq 0 and diry eq 1 : begin e temporary e2 temporary mask if nx EQ 1 OR ny EQ 1 then e reform e nx ny over echelle temporary e replicate 1 jpt echelle reform echelle nx ny jpt over if keyword_set integration then divi 1 ELSE BEGIN IF msknan 0 NE 1 THEN divi total echelle msknan 2 ELSE divi total echelle 2 ENDELSE res total temporary res echelle 2 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total temporary testnan 2 total temporary echelle 2 EQ 0 endif end dirx eq 1 and diry eq 1 : begin echelle temporary e1 temporary e2 temporary mask replicate 1 jpt echelle reform echelle nx ny jpt over if keyword_set integration then divi 1 ELSE BEGIN IF msknan 0 NE 1 THEN divi total total echelle msknan 1 1 ELSE divi total total echelle 1 1 ENDELSE res total temporary total temporary res echelle 1 nan nan 1 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total total temporary testnan 1 1 total total temporary echelle 1 1 EQ 0 endif end endcase endif III Case 3d arrays series tab4d if dim eq 4d then begin III 1 Verification of the coherence of the array to average size Verification of the coherence between the array s size and the domain defind by domdef The input array must have either the total domain size jpi jpj jpk jpt or this one of the reduced domain nx ny ny jpt case 1 of taille 1 eq jpi and taille 2 eq jpj and taille 3 eq jpk and taille 4 eq jpt: res tab firstx:lastx firsty:lasty firstz:lastz taille 1 eq jpi and taille 2 eq jpj and taille 3 eq nz and taille 4 eq jpt: res tab firstx:lastx firsty:lasty taille 1 EQ nx and taille 2 eq ny and taille 3 eq nz and taille 4 eq jpt:res tab taille 1 EQ nx and taille 2 eq ny and taille 3 eq jpk and taille 4 eq jpt: res tab firstz:lastz else:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return report Probleme d adequation entre les tailles du domaine nx ny nz jpt strtrim nx 1 strtrim ny 1 strtrim nz 1 strtrim jpt 1 et du tableau strtrim taille 1 1 strtrim taille 2 1 strtrim taille 3 1 strtrim taille 4 1 END endcase if nx EQ 1 OR ny EQ 1 OR nz EQ 1 OR jpt EQ 1 then res reform res nx ny nz jpt over if keyword_set nan NE 0 then BEGIN if nan NE 1 then BEGIN if nan is not values f_nan we put it at values f_nan if abs nan LT 1e6 then notanumber where res EQ nan ELSE notanumber where abs res GT abs nan 10 if notanumber 0 NE 1 then res temporary notanumber values f_nan ENDIF ENDIF Comment : WE HAVE TO BE CAREFUL ABOUT CASES WHERE THE DIMENSION TO AVERAGE 1 AND MAKE SURE THAT IT EXIST THAT IS WHY WE USE reform nx ny WHICH CAN LOOK USELESS AT THE BEGINNING if nx EQ 1 OR ny EQ 1 OR nz EQ 1 then BEGIN res reform res nx ny nz jpt over mask reform mask nx ny nz over ENDIF IF keyword_set key_partialstep THEN BEGIN the top of the ocean floor is IF vargrid EQ T OR vargrid EQ W THEN bottom total mask 3 ELSE bottom total tmask firstx:lastx firsty:lasty firstz:lastz 3 we suppress columns with only ocean or land good where bottom NE 0 AND bottom NE nz the bottom of the ocean in 3D index is: bottom lindgen nx ny temporary bottom 1L nx ny IF good 0 NE 1 THEN bottom bottom good ELSE bottom 1 ENDIF ELSE bottom 1 III 2 different average types IF keyword_set nan NE 0 THEN msknan finite res ELSE msknan 1 case 1 of dirx eq 1 and diry eq 0 and dirz eq 0 : BEGIN e13 temporary e1 replicate 1 nz e13 reform e13 nx ny nz over echelle temporary e13 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over IF keyword_set key_partialstep AND bottom 0 NE 1 AND nx NE 1 THEN BEGIN IF msknan 0 EQ 1 THEN BEGIN msknan replicate 1b nx ny nz jpt nan 1 ENDIF bottom bottom replicate 1 jpt 4D bottom replicate 1 n_elements bottom nx ny nz lindgen jpt msknan bottom 0 res temporary bottom values f_nan ENDIF if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total echelle msknan 1 ELSE divi total echelle 1 endelse res temporary res echelle res total temporary res 1 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total temporary testnan 1 total temporary echelle 1 EQ 0 endif end dirx eq 0 and diry eq 1 and dirz eq 0 : begin e23 temporary e2 replicate 1 nz e23 reform e23 nx ny nz over echelle temporary e23 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over IF keyword_set key_partialstep AND bottom 0 NE 1 AND ny NE 1 THEN BEGIN IF msknan 0 EQ 1 THEN BEGIN msknan replicate 1b nx ny nz nan 1 endif bottom bottom replicate 1 jpt 4D bottom replicate 1 n_elements bottom nx ny nz lindgen jpt msknan bottom 0 res temporary bottom values f_nan ENDIF if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total echelle msknan 2 ELSE divi total echelle 2 endelse res total temporary res echelle 2 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total temporary testnan 2 total temporary echelle 2 EQ 0 endif end dirx eq 0 and diry eq 0 and dirz eq 1 : begin e33 replicate 1 1 nx ny e3 e33 reform e33 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e33 bottom e3w_ps firstx:lastx firsty:lasty temporary good ELSE e33 bottom e3t_ps firstx:lastx firsty:lasty temporary good ENDIF echelle temporary e33 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total echelle msknan 3 ELSE divi total echelle 3 endelse res total temporary res echelle 3 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total temporary testnan 3 total temporary echelle 3 EQ 0 endif end dirx eq 1 and diry eq 1 and dirz eq 0 : begin e13 e1 replicate 1 nz e13 reform e13 nx ny nz over e23 e2 replicate 1 nz e23 reform e23 nx ny nz over echelle temporary e13 temporary e23 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over IF keyword_set key_partialstep AND bottom 0 NE 1 AND nx ny NE 1 THEN BEGIN IF msknan 0 EQ 1 THEN BEGIN msknan replicate 1b nx ny nz nan 1 endif bottom bottom replicate 1 jpt 4D bottom replicate 1 n_elements bottom nx ny nz lindgen jpt msknan bottom 0 res temporary bottom values f_nan ENDIF if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total total echelle msknan 1 1 ELSE divi total total echelle 1 1 endelse res total total temporary res echelle 1 nan nan 1 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total total temporary testnan 1 1 total total temporary echelle 1 1 EQ 0 endif end dirx eq 1 and diry eq 0 and dirz eq 1 : begin e133 e1 e3 IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e133 bottom e1 e3w_ps firstx:lastx firsty:lasty temporary good ELSE e133 bottom e1 e3t_ps firstx:lastx firsty:lasty temporary good ENDIF echelle temporary e133 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total total echelle msknan 1 2 ELSE divi total total echelle 1 2 endelse res total total temporary res echelle 1 nan nan 2 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total total temporary testnan 1 2 total total temporary echelle 1 2 EQ 0 endif end dirx eq 0 and diry eq 1 and dirz eq 1 : begin e233 e2 e3 IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e233 bottom e2 e3w_ps firstx:lastx firsty:lasty temporary good ELSE e233 bottom e2 e3t_ps firstx:lastx firsty:lasty temporary good ENDIF echelle temporary e233 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total total echelle msknan 2 2 ELSE divi total total echelle 2 2 endelse res total total temporary res echelle 2 nan nan 2 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total total temporary testnan 2 2 total total temporary echelle 2 2 EQ 0 endif end dirx eq 1 and diry eq 1 and dirz eq 1 : begin e1233 e1 e2 e3 IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e1233 bottom e1 e2 e3w_ps firstx:lastx firsty:lasty temporary good ELSE e1233 bottom e1 e2 e3t_ps firstx:lastx firsty:lasty temporary good ENDIF echelle temporary e1233 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total total total echelle msknan 1 1 1 ELSE divi total total total echelle 1 1 1 endelse res total total total temporary res echelle 1 nan nan 1 nan nan 1 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total total total temporary testnan 1 1 1 total total total temporary echelle 1 1 1 EQ 0 endif end endcase endif if dirt EQ 1 AND keyword_set spatialfirst then BEGIN IF reverse size res dimension 0 NE jpt THEN BEGIN print the last dimension of res is not equal to jpt: strtrim jpt 2 if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return 1 ENDIF tdim size res n_dimensions if keyword_set integration then res total res tdim nan nan ELSE BEGIN if keyword_set nan then BEGIN testnan testnan divi ENDELSE ENDIF IV finishing IV 1 We mask land by a value equal to 1 e 20 valmask 1e 20 terre where divi EQ 0 IF terre 0 NE 1 THEN BEGIN res temporary terre 1e 20 ENDIF IV 2 We replace when nan equal 1 values f_nan by nan if keyword_set nan NE 0 then BEGIN puttonan where temporary testnan EQ 0 if puttonan 0 NE 1 then res temporary puttonan values f_nan if nan NE 1 then BEGIN notanumber where finite res eq 0 if notanumber 0 NE 1 then res temporary notanumber nan ENDIF ENDIF IV 3 We replace in the domain whch was defined at the entry of average if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat if keyword_set key_performance THEN print temps grossemoyenne systime 1 tempsun return res end");186 a[184] = new Array("./ToBeReviewed/CALCULS/hdyn.html", "hdyn.pro", "", " file_comments Calculate the height by rapport to a reference state for a depth reference See keywords for different possibilities By default the state reference is rho 1020 and the depth reference is gdepw ka with ka the first W level directly above 1000 m categories Post traiment calculation param TABSN in required array representing the salinity param TABTN in required array representing the temperature Has the same size than SN keyword GILL We activate this key if we want to calculate the dinamic height like in the GILL page 215 which means by rapport to a reference state which vary in depth and which is determinated by a reference temperature tref at 0 C and a reference salinity sref at 35psu keyword LEVEL It is the same reference level to take This level is defined like that gdepw level is the reference depth keyword SREF Give a value to this keyword to change the reference salinity used in the calculation when GILL is activated keyword TREF Give a value to this keyword to change the reference temperature used in the calculation when GILL is activated keyword PROFREF Give a depth to this keyword which will be considerated as the refeence depth in this case LEVEL has not any effect the calculation will be effectuated until this depth effecting an interpolation between the the last W level above PROFREF and PROFREF keyword SURFACE_LEVEL It is the level where we wan to calculate the dynamic height By default it is the level 0 returns An array of the same size of sn and tn representing the dynamic height calculated from a reference depth nd by rapport to a reference state uses common pro restrictions Points for which we can not calculate the dynamic height whose the batymetry is less deep than the reference depth are put at the value values f_nan restrictions approximation: The pressure in decibars is equal to the depth in meters the pressure increase of 1bar all 10m history Sebastien Masson smasson lodyc jussieu fr version Id FUNCTION hdyn tabsn tabtn TREF tref SREF sref PROFREF profref LEVEL level GILL gill SURFACE_LEVEL surface_level compile_opt idl2 strictarrsubs tempsun systime 1 for key_performance common if NOT keyword_set surface_level then surface_level 0 useful if GILL is activated if NOT keyword_set tref then tref 0 if NOT keyword_set sref then sref 35 If needed we determinate the reference depth and the W level situated directly above if keyword_set profref then begin rien where gdepw LE profref level level level 1 za gdepw level ENDIF ELSE BEGIN if NOT keyword_set level then BEGIN rien where gdepw LE 1000 level level level 1 ENDIF profref gdepw level za profref ENDELSE tailles size tabsn taillet size tabtn if total tailles 0:tailles 0 NE taillet 0:taillet 0 NE 0 then return report Les tableaux sn et tn doivent avoir la meme taille if tailles 3 NE jpk then return report La dim verticale des tableaux sn et tn doit etre egalre a jpk nx nxt ny nyt case size tabsn 0 OF 3:BEGIN case 1 of tailles 1 eq jpi and tailles 2 eq jpj: BEGIN sn tabsn firstxt:lastxt firstyt:lastyt tn tabtn firstxt:lastxt firstyt:lastyt end tailles 1 eq nx and tailles 2 eq ny:BEGIN sn tabsn tn tabtn end else:return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE if keyword_set gill then rhonref rhon replicate sref nx ny jpk replicate tref nx ny jpk insitu ELSE rhonref 1020 vol rhonref rhon sn tn insitu rhonref e33d replicate 1 nx ny e3t e33d reform e33d nx ny jpk over terre where tmask firstxt:lastxt firstyt:lastyt EQ 0 if terre 0 NE 1 then vol terre values f_nan case level of 0:hdyn 100 profref gdepw 0 vol 0 1:hdyn 100 vol e33d 0 profref gdepw 1 vol 1 ELSE:hdyn 100 total vol e33d surface_level: level 1 3 profref gdepw level vol level endcase END 4:BEGIN case 1 of tailles 1 eq jpi and tailles 2 eq jpj AND tailles 4 EQ jpt: BEGIN sn tabsn firstxt:lastxt firstyt:lastyt tn tabtn firstxt:lastxt firstyt:lastyt end tailles 1 eq nx and tailles 2 eq ny AND tailles 4 EQ jpt:BEGIN sn tabsn tn tabtn end else:return report Probleme d adequation entre les tailles du domaine et de la boite endcase if keyword_set gill then rhonref rhon replicate sref nx ny jpk jpt replicate tref nx ny jpk jpt insitu ELSE rhonref 1020 vol rhonref rhon sn tn insitu rhonref e33d replicate 1 nx ny e3t e33d e33d replicate 1 jpt e33d reform e33d nx ny jpk jpt over mask tmask firstxt:lastxt firstyt:lastyt mask mask replicate 1 jpt terre where mask EQ 0 if terre 0 NE 1 then vol terre values f_nan case level of 0:hdyn 100 profref gdepw 0 vol 0 1:hdyn 100 vol e33d 0 profref gdepw 1 vol 1 ELSE:hdyn 100 total vol e33d surface_level: level 1 3 profref gdepw level vol level endcase END ELSE: return report cas non code ENDCASE varunit cm varname Dynamic Height href strtrim round profref 1 m IF keyword_set key_performance THEN print temps hdyn systime 1 tempsun return hdyn end");187 a[185] = new Array("./ToBeReviewed/CALCULS/level2depth.html", "level2depth.pro", "", " file_comments Allows to pass from a 2d level array to a 2d depth array corresponding o these levels categories Without loop param TAB in required 2d level array of sill levels or a structure respecting litchamp criterions keyword NOMASK To do not mask land points returns 2d array containing depthes uses common pro history Sebastien Masson smasson lodyc jussieu fr 17 6 1999 14 6 2000 accepte values f_nan version Id FUNCTION level2depth tab NOMASK nomask compile_opt idl2 strictarrsubs tempsun systime 1 To key_performance common Reading of the input field and recovery of the used subdomain s size niveaux litchamp tab grille mask 1 1 gdep nx ny nz firstx firsty firstz lastx lasty lastz verification of the coherence between array s size and the domain definied by domdef taille size niveaux if taille 0 NE 2 then return report le champ en entree doit contenir un tableau 2d case 1 of taille 1 eq jpi and taille 2 eq jpj:niveaux niveaux firstx:lastx firsty:lasty taille 1 eq nx and taille 2 eq ny: else:return report Probleme d adequation entre les tailles du domaine et celle du champ endcase wherenan where finite niveaux nan EQ 1 if wherenan 0 NE 1 then niveaux wherenan 0 niveaux 0 niveaux jpk 1 gdep replicate 1 nx ny gdep niveaux lindgen nx ny nx ny niveaux gdep reform gdep niveaux nx ny if wherenan 0 NE 1 then gdep wherenan values f_nan if NOT keyword_set nomask then begin if n_elements valmask EQ 0 then valmask 1e20 terre where mask 0 EQ 0 if terre 0 NE 1 then gdep terre valmask endif if keyword_set key_performance THEN print temps level2depth systime 1 tempsun return gdep end");188 a[186] = new Array("./ToBeReviewed/CALCULS/level2index.html", "level2index.pro", "", " file_comments We want from a 3d matrix to extract a 2d x y array whose each element has been extract from a level specified by the 2d level array typically we want to obtain the salinity along an isopycn we have repered by its level level2index is a function who give in function of level a 2d indexes array which will allow to extract the 2d array from the 3d array categories without loop param LEVEL in required A 2d level array returns a 2d indexes array history Sebastien Masson smasson lodyc jussieu fr 24 11 1999 version Id FUNCTION level2index level An element of 3d array whose the two first dimensions are nx and ny whose coordinates are i j and k have for index in the same 3d array i j nx k nx ny level given for each point of level we know i j et k so we can calculate the index compile_opt idl2 strictarrsubs taille size level nx taille 1 ny taille 2 array k nx ny tabknxny nx ny long level return lindgen nx ny tabknxny end");189 a[187] = new Array("./ToBeReviewed/CALCULS/level2mask.html", "level2mask.pro", "", " file_comments Allow to pass from a 2d sill level array to the 3d mask array with 1s in levels above the sill level and 0s below and on it categories without loop param TAB in required 2d level array of sill level or a structure respecting litchamp criterions returns It is a 3d array containing the mask associated to the 2d sill level array uses common pro history Sebastien Masson smasson lodyc jussieu fr 17 6 1999 Setp 2004: boundary level have 0 values and not 1 as it was explained before in the header see: print array_equal niveau total level2mask niveau 3 version Id FUNCTION level2mask tab compile_opt idl2 strictarrsubs tempsun systime 1 To key_performance common Reading of the input field and recovery of the size of the used subdomain niveaux litchamp tab grille maskterre 1 1 1 nx ny nz firstx firsty firstz lastx lasty lastz verification of the coherence between the array s size and the defined by domdef domain IF ny EQ 1 THEN niveaux reform niveaux nx ny over taille size niveaux if taille 0 NE 2 then return report le champ en entree doit contenir un tableau 2d case 1 of taille 1 eq jpi and taille 2 eq jpj:niveaux niveaux firstx:lastx firsty:lasty taille 1 eq nx and taille 2 eq ny: else:return report Probleme d adequation entre les tailles du domaine et celle du champ endcase We transform the 2d leval array in 3d mask array mask reform niveaux 1 indgen nz 1 nx ny nz mask floor temporary mask 1 mask temporary mask temporary maskterre if keyword_set key_performance THEN print temps level2mask systime 1 tempsun return mask end");190 a[188] = new Array("./ToBeReviewed/CALCULS/moyenne.html", "moyenne.pro", "", " file_comments averages a 2 or 3 d field over a selected geographical area and along one ore more selected axes x y or z categories param TAB in required 2 or 3d field param DIREC in required x y z xy xz yz or xyz keyword BOXZOOM xmin xmax ymin ymax zmin zmax to more details see domdef boxzoom can have 5 forms: vert2 vert1 vert2 lon1 lon2 lat1 lat2 lon1 lon2 lat1 lat2 vert2 lon1 lon2 lat1 lat2 vert1 vert2 keyword NAN not a number we activate it if we want to average without considerate some masked values of TAB If masked values of TAB are values consecrated by IDL values f_nan wr just have to put NAN If masked values of TAB are valued a a must be different of 1 corresponding to nan values f_nan and of 0 which desactivate nan We have to put NAN a Comment: In output rsult points which are NAN will be valued a or values f_nan keyword NODOMDEF We activate it if we do not want to pass in domdef even if the keyword boxzoom is present like when grossemoyenne is called via checkfield keyword INTEGRATION To make an integral rather than an average keyword WDEPTH to specify that the field is at W depth instad of T depth automatically activated if vargrid eq W returns An array uses common domdef restrictions Put values corresponding to land at 1 e20 history Jerome Vialard jv lodyc jussieu fr 2 7 98 Sebastien Masson smasson lodyc jussieu fr 14 8 98 15 1 98 11 3 99 adaptation for NAN 28 7 99 Averages 1d arrays version Id function moyenne tab direc BOXZOOM boxzoom INTEGRATION integration NAN nan NODOMDEF nodomdef WDEPTH wdepth _extra ex compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 To key_performance I preliminaries dirt 0 dirx 0 diry 0 dirz 0 I 1 Directions s we follow to integrate if strpos direc t ge 0 then dirt 1 if strpos direc x ge 0 then dirx 1 if strpos direc y ge 0 then diry 1 if strpos direc z ge 0 then dirz 1 if dirx eq 0 and diry eq 0 and dirz eq 0 then return tab I 2 verification of the input array s size taille size tab case 1 of taille 0 eq 1 :dim 1d taille 0 eq 2 :BEGIN dim 2d if dirx eq 0 and diry eq 0 then return tab END taille 0 eq 3 :BEGIN dim 3d if dirx eq 0 and diry eq 0 and dirz eq 0 then return tab END else : return report Le tableau d entree doit etre a 2 ou 3 dimensions s il contient une dim temporelle utiliser grossemoyenne endcase I 3 Obtainment of scale s factors and of the mask on the subdomain concernedby the average Redefinition of the domain ajusted at boxzoom at 6 elements This will allowed us to calculate only in the domain concerned by the average Domdef followed by grid give us all arrays of the grid on the subdomain if keyword_set boxzoom then BEGIN Case 1 Of N_Elements Boxzoom Eq 1:bte lon1 lon2 lat1 lat2 0 boxzoom 0 N_Elements Boxzoom Eq 2:bte lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 N_Elements Boxzoom Eq 4:bte Boxzoom vert1 vert2 N_Elements Boxzoom Eq 5:bte Boxzoom 0:3 0 Boxzoom 4 N_Elements Boxzoom Eq 6:bte Boxzoom Else: return report Mauvaise Definition de Boxzoom endcase if NOT keyword_set nodomdef then BEGIN savedbox 1b saveboxparam boxparam4moyenne dat domdef bte GRIDTYPE vargrid _extra ex ENDIF ENDIF attribution of the mask and of longitude and latitude arrays IF vargrid EQ W THEN wdepth 1 grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz e1 e2 e3 WDEPTH wdepth II Case of the 1d array if dim EQ 1d then BEGIN if n_elements tab NE nx ny AND n_elements tab NE nx ny nz then BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return report Probleme d adequation entre les tailles du domaine et de la boxzoom ENDIF case 1 of nx EQ 1 AND ny EQ 1:BEGIN vector following z case n_elements tab of jpk:res tab firstz:lastz nz:res tab ELSE:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return report Probleme d adequation entre les tailles du domaine et de la boxzoom END ENDCASE if dirz EQ 1 then BEGIN dim 3d taille size reform res nx ny nz ENDIF ELSE BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return res ENDELSE END ny EQ 1:BEGIN vector following x case n_elements tab of jpi:res tab firstx:lastx nx:res tab ELSE:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return report Probleme d adequation entre les tailles du domaine et de la boxzoom END ENDCASE if dirx EQ 1 then BEGIN dim 2d taille size reform res nx ny ENDIF ELSE BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return res ENDELSE END nx EQ 1:BEGIN vector following y case n_elements tab of jpj:res tab firsty:lasty ny:res tab ELSE:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return report Probleme d adequation entre les tailles du domaine et de la boxzoom END ENDCASE if diry EQ 1 then BEGIN dim 2d taille size reform res nx ny ENDIF ELSE BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return res ENDELSE END endcase endif II Case of the 2d array if dim eq 2d then begin II 1 verification of the coherence of the array s size to average Verification of the coherence between the array s size and the domain defined by domdef The input array must have either the total domain s size jpi jpj or this one of the reduced domain nx ny case 1 of taille 1 eq jpi and taille 2 eq jpj: res tab firstx:lastx firsty:lasty taille 1 eq nx and taille 2 eq ny:res tab else:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return report Probleme d adequation entre les tailles du domaine nx ny strtrim nx 1 strtrim ny 1 et du tableau strtrim taille 1 1 strtrim taille 2 1 END ENDCASE if keyword_set nan NE 0 then BEGIN if nan NE 1 then BEGIN If nan is not values f_nan we put it at values f_nan if abs nan LT 1e6 then notanumber where res EQ nan ELSE notanumber where abs res GT abs nan 10 if notanumber 0 NE 1 then res temporary notanumber values f_nan ENDIF ENDIF Comment : WE HAVE TO BE CAREFUL ABOUT CASES WHERE THE DIMENSION TO AVERAGE 1 AND MAKE SURE THAT IT EXIST THAT IS WHY WE USE reform nx ny WHICH CAN LOOK USELESS AT THE BEGINNING if nx EQ 1 OR ny EQ 1 then BEGIN res reform res nx ny over e1 reform e1 nx ny over e2 reform e2 nx ny over endif if nx EQ 1 OR ny EQ 1 OR nz EQ 1 THEN mask reform mask nx ny nz over II 3 Different types of average mask mask 0 if keyword_set nan NE 0 then msknan finite res ELSE msknan 1 case 1 of dirx eq 1 and diry eq 0 : begin e e1 mask if keyword_set integration then divi 1 else begin divi e IF msknan 0 NE 1 THEN divi temporary divi msknan if ny EQ 1 then divi reform divi nx ny over divi total divi 1 endelse res res e if ny EQ 1 then res reform res nx ny over res total res 1 nan nan divi 1 if msknan 0 NE 1 then begin testnan msknan mask if ny EQ 1 then testnan reform testnan nx ny over testnan total testnan 1 total mask 1 EQ 0 endif end dirx eq 0 and diry eq 1 : begin e e2 mask if keyword_set integration then divi 1 else begin divi e IF msknan 0 NE 1 THEN divi temporary divi msknan if ny EQ 1 then divi reform divi nx ny over divi total divi 2 endelse res res e if ny EQ 1 then res reform res nx ny over res total res 2 nan nan divi 1 if msknan 0 NE 1 then begin testnan msknan mask if ny EQ 1 then testnan reform testnan nx ny over testnan total testnan 2 total mask 2 EQ 0 endif end dirx eq 1 and diry eq 1 : begin if keyword_set integration then divi 1 else BEGIN IF msknan 0 NE 1 THEN divi total e1 e2 mask msknan ELSE divi total e1 e2 mask ENDELSE res total res e1 e2 mask nan nan divi 1 if msknan 0 NE 1 then begin testnan msknan mask testnan total testnan total mask EQ 0 endif end endcase endif III Case 3d arrays series tab4d if dim eq 3d then begin III 1 Verification of the coherence of the array to average size Verification of the coherence between the array s size and the domain defind by domdef The input array must have either the total domain size jpi jpj jpk or this one of the reduced domain nx ny ny case 1 of taille 1 eq jpi and taille 2 eq jpj and taille 3 eq jpk: res tab firstx:lastx firsty:lasty firstz:lastz taille 1 eq jpi and taille 2 eq jpj and taille 3 eq nz: res tab firstx:lastx firsty:lasty taille 1 EQ nx and taille 2 eq ny and taille 3 eq nz :res tab taille 1 EQ nx and taille 2 eq ny and taille 3 eq jpk : res tab firstz:lastz else:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return report Probleme d adequation entre les tailles du domaine nx ny nz strtrim nx 1 strtrim ny 1 strtrim nz 1 et du tableau strtrim taille 1 1 strtrim taille 2 1 strtrim taille 3 1 END endcase if keyword_set nan NE 0 then BEGIN if nan NE 1 then BEGIN if nan is not values f_nan we put it at values f_nan if abs nan LT 1e6 then notanumber where res EQ nan ELSE notanumber where abs res GT abs nan 10 if notanumber 0 NE 1 then res temporary notanumber values f_nan ENDIF ENDIF Comment : WE HAVE TO BE CAREFUL ABOUT CASES WHERE THE DIMENSION TO AVERAGE 1 AND MAKE SURE THAT IT EXIST THAT IS WHY WE USE reform nx ny WHICH CAN LOOK USELESS AT THE BEGINNING if nx EQ 1 OR ny EQ 1 OR nz EQ 1 then BEGIN res reform res nx ny nz over e1 reform e1 nx ny over e2 reform e2 nx ny over endif if nx EQ 1 OR ny EQ 1 OR nz EQ 1 THEN mask reform mask nx ny nz over IF keyword_set key_partialstep THEN BEGIN the top of the ocean floor is IF vargrid EQ T OR vargrid EQ W THEN bottom total mask 3 ELSE bottom total tmask firstx:lastx firsty:lasty firstz:lastz 3 we suppress columns with only ocean or land good where bottom NE 0 AND bottom NE nz the bottom of the ocean in 3D index is: bottom lindgen nx ny temporary bottom 1L nx ny IF good 0 NE 1 THEN bottom bottom good ELSE bottom 1 ENDIF ELSE bottom 1 III 2 different average types if keyword_set nan NE 0 then msknan finite res ELSE msknan 1 case 1 of dirx eq 1 and diry eq 0 and dirz eq 0 : begin e13 e1 replicate 1 nz e13 reform e13 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 AND nx NE 1 THEN BEGIN IF msknan 0 EQ 1 THEN BEGIN msknan replicate 1b nx ny nz nan 1 endif msknan bottom 0 res bottom values f_nan ENDIF if keyword_set integration then divi 1 else begin divi e13 mask IF msknan 0 NE 1 THEN divi temporary divi msknan if nz EQ 1 then divi reform divi nx ny nz over divi total divi 1 ENDELSE res res e13 mask if nz EQ 1 then res reform res nx ny nz over res total res 1 nan nan divi 1 e13 1 if msknan 0 NE 1 then begin testnan msknan mask if nz EQ 1 then testnan reform testnan nx ny nz over testnan total testnan 1 total mask 1 EQ 0 endif end dirx eq 0 and diry eq 1 and dirz eq 0 : begin e23 e2 replicate 1 nz e23 reform e23 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 AND ny NE 1 THEN BEGIN IF msknan 0 EQ 1 THEN BEGIN msknan replicate 1b nx ny nz nan 1 endif msknan bottom 0 res bottom values f_nan ENDIF if keyword_set integration then divi 1 else begin divi e23 mask IF msknan 0 NE 1 THEN divi temporary divi msknan if nz EQ 1 then divi reform divi nx ny nz over divi total divi 2 ENDELSE res res e23 mask if nz EQ 1 then res reform res nx ny nz over res total res 2 nan nan divi 1 e23 1 if msknan 0 NE 1 then begin testnan msknan mask if nz EQ 1 then testnan reform testnan nx ny nz over testnan total testnan 2 total mask 2 EQ 0 endif end dirx eq 0 and diry eq 0 and dirz eq 1 : begin e33 replicate 1 1 nx ny e3 e33 reform e33 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e33 bottom e3w_ps firstx:lastx firsty:lasty temporary good ELSE e33 bottom e3t_ps firstx:lastx firsty:lasty temporary good ENDIF if keyword_set integration then divi 1 else begin divi e33 mask if msknan 0 NE 1 then divi temporary divi msknan if nz EQ 1 then divi reform divi nx ny nz over divi total divi 3 ENDELSE res res e33 mask if nz EQ 1 then res reform res nx ny nz over res total res 3 nan nan divi 1 e33 1 if msknan 0 NE 1 then begin testnan msknan mask if nz EQ 1 then testnan reform testnan nx ny nz over testnan total testnan 3 total mask 3 EQ 0 endif end dirx eq 1 and diry eq 1 and dirz eq 0 : begin e123 e1 e2 replicate 1 nz e123 reform e123 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 AND nx ny NE 1 THEN BEGIN IF msknan 0 EQ 1 THEN BEGIN msknan replicate 1b nx ny nz nan 1 endif msknan bottom 0 res bottom values f_nan ENDIF if keyword_set integration then divi 1 else BEGIN divi e123 mask IF msknan 0 NE 1 THEN divi temporary divi msknan if nz EQ 1 then divi reform divi nx ny nz over divi total total divi 1 1 ENDELSE res res e123 mask if nz EQ 1 then res reform res nx ny nz over res total total res 1 nan nan 1 nan nan divi 1 e123 1 if msknan 0 NE 1 then begin testnan msknan mask if nz EQ 1 then testnan reform testnan nx ny nz over testnan total total testnan 1 1 total total mask 1 1 EQ 0 endif end dirx eq 1 and diry eq 0 and dirz eq 1 : begin e133 e1 e3 e133 reform e133 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e133 bottom e1 e3w_ps firstx:lastx firsty:lasty temporary good ELSE e133 bottom e1 e3t_ps firstx:lastx firsty:lasty temporary good ENDIF if keyword_set integration then divi 1 else BEGIN divi e133 mask if msknan 0 NE 1 then divi temporary divi msknan if nz EQ 1 then divi reform divi nx ny nz over divi total total divi 1 2 ENDELSE res res e133 mask if nz EQ 1 then res reform res nx ny nz over res total total res 1 nan nan 2 nan nan divi 1 e133 1 if msknan 0 NE 1 then begin testnan msknan mask if nz EQ 1 then testnan reform testnan nx ny nz over testnan total total testnan 1 2 total total mask 1 2 EQ 0 endif end dirx eq 0 and diry eq 1 and dirz eq 1 : begin e233 e2 e3 e233 reform e233 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e233 bottom e2 e3w_ps firstx:lastx firsty:lasty temporary good ELSE e233 bottom e2 e3t_ps firstx:lastx firsty:lasty temporary good ENDIF if keyword_set integration then divi 1 else BEGIN divi e233 mask if msknan 0 NE 1 then divi temporary divi msknan if nz EQ 1 then divi reform divi nx ny nz over divi total total divi 2 2 ENDELSE res res e233 mask if nz EQ 1 then res reform res nx ny nz over res total total res 2 nan nan 2 nan nan divi 1 e233 1 if msknan 0 NE 1 then begin testnan msknan mask if nz EQ 1 then testnan reform testnan nx ny nz over testnan total total testnan 2 2 total total mask 2 2 EQ 0 endif end dirx eq 1 and diry eq 1 and dirz eq 1 : begin e1233 e1 e2 e3 e1233 reform e1233 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e1233 bottom e1 e2 e3w_ps firstx:lastx firsty:lasty temporary good ELSE e1233 bottom e1 e2 e3t_ps firstx:lastx firsty:lasty temporary good ENDIF if keyword_set integration then divi 1 else BEGIN if msknan 0 NE 1 then divi total e1233 mask msknan ELSE divi total e1233 mask ENDELSE res total res e1233 mask nan nan divi 1 e1233 1 if msknan 0 NE 1 then begin testnan msknan mask testnan total testnan total mask EQ 0 endif end endcase endif IV finishing IV 1 We mask land by a value equal to 1 e 20 valmask 1e 20 terre where divi EQ 0 IF terre 0 NE 1 THEN BEGIN res terre 1e 20 ENDIF IV 2 We replace when nan equal 1 values f_nan by nan if keyword_set nan NE 0 then BEGIN puttonan where testnan EQ 0 if puttonan 0 NE 1 then res puttonan values f_nan if nan NE 1 then BEGIN notanumber where finite res eq 0 if notanumber 0 NE 1 then res notanumber nan ENDIF ENDIF IV 3 We replace in the domain whch was defined at the entry of average if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat if keyword_set key_performance THEN print temps moyenne systime 1 tempsun return res end");191 a[189] = new Array("./ToBeReviewed/CALCULS/norme.html", "norme.pro", "", " file_comments calculate the norme of a field of vectors then make a possible average Comment 1: The field of vector can be 2d:xy 3d: xyz or xyt 4d: xyzt Comment 2: The calculation of the norme is made before the possible spatial or temporal average because the average of the norme is not equal to the norme of averages categories Post traitment calculation param COMPOSANTEU in required an 2d 3d or 4d array param COMPOSANTEV in required an 2d 3d or 4d array keyword BOXZOOM boxzoom on which do the average by default the domain selected by the last domdef done keyword DIREC t x y z xys xz yz xyz xt yt zt xyt xzt yzt xyzt Direction on which do averages returns Array to trace with plt pltz or pltt uses common pro restrictions The norme is calculated on points TTo do this calculation we average field U and Von points T before calculate the norme At the edge of coast and of domain we can not calculate fields U and V at points T that is why these points are at value values f_nan When we calculate on a reduce geographic domain field U and V have not necessarily the same number of point In this case we recut U and V to keep only common points We profit of this to redo a domdef which redefine a geographic domain on which fields U and V are extracted on same points restrictions To know what type of array we work with we test its size and dates gave by time 0 and time jpt 1 to know if thee is a temporal dimension Before to start norme make sure that time and jpt are defined how they have to examples To calculate the average of the norme of streams on all the domain between 0 et 50: IDL res norme un vn boxzoom 0 50 dir xyz history Sebastien Masson smasson lodyc jussieu fr 9 6 1999 version Id FUNCTION norme composanteu composantev BOXZOOM boxzoom DIREC direc _extra ex compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 To key_performance IF finite glamu 0 finite gphiu 0 finite glamv 0 finite gphiv 0 EQ 0 THEN return report This version of norme is based on Arakawa C grid U and V grids must therefore be defined if keyword_set boxzoom then BEGIN Case 1 Of N_Elements Boxzoom Eq 1:bte lon1 lon2 lat1 lat2 0 boxzoom 0 N_Elements Boxzoom Eq 2:bte lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 N_Elements Boxzoom Eq 4:bte Boxzoom vert1 vert2 N_Elements Boxzoom Eq 5:bte Boxzoom 0:3 0 Boxzoom 4 N_Elements Boxzoom Eq 6:bte Boxzoom Else: return report Mauvaise Definition de Boxzoom ENDCASE domdef boxzoom ENDIF if NOT keyword_set direc then direc 0 construction of u and v at points T u litchamp composanteu v litchamp composantev date1 time 0 if n_elements jpt EQ 0 then date2 date1 ELSE date2 time jpt 1 if size u 0 NE size v 0 then return 1 vargrid T varname norme valmask 1e20 grilleu litchamp composanteu grid if grilleu EQ then grilleu U grillev litchamp composantev grid if grillev EQ then grillev V IF grilleu EQ V AND grillev EQ U THEN inverse 1 IF grilleu EQ T AND grillev EQ T THEN BEGIN interpolle 0 return report cas non code mais facile a faire ENDIF ELSE interpolle 1 if keyword_set inverse then begin rien u u v v rien endif We find common points between u and v indicexu lindgen jpi firstxu:firstxu nxu 1 indicexv lindgen jpi firstxv:firstxv nxv 1 indicex inter indicexu indicexv indiceyu lindgen jpj firstyu:firstyu nyu 1 indiceyv lindgen jpj firstyv:firstyv nyv 1 indicey inter indiceyu indiceyv nx n_elements indicex ny n_elements indicey case 1 of xyz size u 0 EQ 3 AND date1 EQ date2 :BEGIN indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 indice3d lindgen jpi jpj jpk indice3d indice3d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt extraction of u and v on the appropriated domain case 1 of size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN case size u 3 OF nzt:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny end jpk:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 firstzt:lastzt ELSE u u 1: nx firstzt:lastzt IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 firstzt:lastzt ELSE v v 1: nx firstzt:lastzt IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 firstzt:lastzt ELSE u u 1: ny firstzt:lastzt IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 firstzt:lastzt ELSE v v 1: ny firstzt:lastzt end ELSE: return report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs endcase END size u 1 EQ jpi AND size u 2 EQ jpj AND size u 3 EQ jpk AND size v 1 EQ jpi AND size v 2 EQ jpj AND size u 3 EQ jpk :BEGIN u u indice3d v v indice3d END ELSE: return report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs endcase We reshape u and v to make sure that no dimension has been erased if nzt EQ 1 then begin u reform u nx ny nzt over v reform v nx ny nzt over endif construction of u and v at points T a u 0 u u shift u 1 0 0 2 if NOT keyword_set key_periodic OR nx NE jpi then u 0 a a v 0 v v shift v 0 1 0 2 if NOT keyword_set key_periodic OR nx NE jpi then v 0 a attribution of the mask and of logitude and latitude arrays mask tmask indice3d if nzt EQ 1 then mask reform mask nx ny nzt over if n_elements valmask EQ 0 THEN valmask 1e20 landu where u GE valmask 10 if landu 0 NE 1 then u landu 0 landv where v GE valmask 10 if landv 0 NE 1 then v landv 0 res sqrt u 2 v 2 if NOT keyword_set key_periodic OR nx NE jpi then res 0 values f_nan res 0 values f_nan mask where mask eq 0 IF mask 0 NE 1 THEN res mask valmask All kind of average domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 meme if keyword_set direc then res moyenne res direc nan boxzoom boxzoom nodomdef END xyt date1 NE date2 AND size u 0 EQ 3 :BEGIN indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 extraction of u and v on the appropriated domain case 1 of size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 v v indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 END ELSE:return report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs endcase construction of u and v at points T a u 0 u u shift u 1 0 0 2 if NOT keyword_set key_periodic OR nx NE jpi then u 0 a a v 0 v v shift v 0 1 0 2 if NOT keyword_set key_periodic OR nx NE jpi then v 0 a attribution of the mask and of longitude and latitude arrays We recover the complete grid to establish a big mask extent in the four direction to cover pointsfor which a land point has been considerated make a small drawing mask tmask indice2d jpi jpj firstzt if ny EQ 1 then mask reform mask nx ny over construction of land containing all points to mask if n_elements valmask EQ 0 THEN valmask 1e20 landu where u GE valmask 10 if landu 0 NE 1 then u landu 0 landv where v GE valmask 10 if landv 0 NE 1 then v landv 0 res sqrt u 2 v 2 if NOT keyword_set key_periodic OR nx NE jpi then res 0 values f_nan res 0 values f_nan mask where mask eq 0 IF mask 0 NE 1 THEN BEGIN coeftps lindgen jpt nx ny coeftps replicate 1 n_elements mask coeftps mask temporary mask replicate 1 jpt mask temporary mask temporary coeftps res temporary mask valmask ENDIF moyennes en tous genres domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 meme if keyword_set direc then res grossemoyenne res direc nan boxzoom boxzoom nodomdef END xyzt date1 NE date2 AND size u 0 EQ 4:BEGIN indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 indice3d lindgen jpi jpj jpk indice3d indice3d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt extraction of u and v on the appropriated domain case 1 of size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN case size u 3 OF nzt:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny end jpk:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 firstzt:lastzt ELSE u u 1: nx firstzt:lastzt IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 firstzt:lastzt ELSE v v 1: nx firstzt:lastzt IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 firstzt:lastzt ELSE u u 1: ny firstzt:lastzt IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 firstzt:lastzt ELSE v v 1: ny firstzt:lastzt end ELSE: return report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs endcase END size u 1 EQ jpi AND size u 2 EQ jpj AND size u 3 EQ jpk AND size v 1 EQ jpi AND size v 2 EQ jpj AND size u 3 EQ jpk :BEGIN u u indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt v v indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt END ELSE: return report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs endcase construction of u and v at points T a u 0 u u shift u 1 0 0 0 2 if NOT keyword_set key_periodic OR nx NE jpi then u 0 a a v 0 v v shift v 0 1 0 0 2 if NOT keyword_set key_periodic OR nx NE jpi then v 0 a attribution of the mask and of logitude and latitude arrays mask tmask indice3d if nzt EQ 1 then mask reform mask nx ny nzt over if n_elements valmask EQ 0 THEN valmask 1e20 landu where u GE valmask 10 if landu 0 NE 1 then u landu 0 landv where v GE valmask 10 if landv 0 NE 1 then v landv 0 res sqrt u 2 v 2 if NOT keyword_set key_periodic OR nx NE jpi then res 0 values f_nan res 0 values f_nan mask where mask eq 0 IF mask 0 NE 1 THEN BEGIN coeftps lindgen jpt nx ny nzt coeftps replicate 1 n_elements mask coeftps mask temporary mask replicate 1 jpt mask temporary mask temporary coeftps res temporary mask valmask ENDIF All kind of average domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 meme if keyword_set direc then res grossemoyenne res direc nan boxzoom boxzoom nodomdef END xy ELSE:BEGIN xy indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 extraction of u and v on the appropriated domain case 1 of size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indice2d v v indice2d END ELSE:return report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs endcase We reshape u and v to make sure that no dimension has been erased if ny EQ 1 then begin u reform u nx ny over v reform v nx ny over endif construction of u and v at points T a u 0 u u shift u 1 0 2 if NOT keyword_set key_periodic OR nx NE jpi then u 0 a a v 0 v v shift v 0 1 2 if NOT keyword_set key_periodic OR nx NE jpi then v 0 a attribution of the mask and of longitude and latitude arrays We recover the complete grid to establish a big mask extent in the four direction to cover pointsfor which a land point has been considerated make a small drawing mask tmask indice2d jpi jpj firstzt if nyt EQ 1 THEN mask reform mask nx ny over construction of land containing all points to mask if n_elements valmask EQ 0 THEN valmask 1e20 landu where u GE valmask 10 if landu 0 NE 1 then u landu 0 landv where v GE valmask 10 if landv 0 NE 1 then v landv 0 res sqrt u 2 v 2 if NOT keyword_set key_periodic OR nx NE jpi then res 0 values f_nan res 0 values f_nan mask where mask eq 0 IF mask 0 NE 1 THEN res mask valmask All kind of average domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 meme if keyword_set direc then res moyenne res direc nan boxzoom boxzoom nodomdef END endcase if keyword_set key_performance THEN print temps norme systime 1 tempsun return res end");192 a[190] = new Array("./ToBeReviewed/CALCULS/projectondepth.html", "projectondepth.pro", "", " file_comments Allows to project a 3d field following a depth array categories without loop param ARRAYIN It is a 3d array whose 3rd dimension must be equal to jpk param DEPTHIN It is a 2d array indicating for each point n at which depth to project returns A 2d array which is the projection of the 3d array following depthes indicated by depthin uses common pro restrictions points at values f_nan impossible calculation Land points masked at valmask examples we build a possible depthes array IDL a gdept jpk 1 1 jpi jpj findgen jpi jpj We build an array to project on these depthes For the test we build a 3d array whose each vector following z is the depth IDL arraytest replicate 1 jpi jpj gdept IDL arraytest reform arraytest jpi jpj jpk over We test the projection of the depth array on the depth IDL plt 1e6 a projectondepth arraytest a nocontour null field at 1e 6 pres verifcation projecting the temperature of 20 C for example history Sebastien Masson smasson lodyc jussieu fr 15 6 2000 version Id FUNCTION projectondepth arrayin depthin compile_opt idl2 strictarrsubs tempsun systime 1 To key_performance common depth litchamp depthin array litchamp arrayin Small verifications tailledepth size depth taillearray size array if tailledepth 0 NE 2 THEN return report Depth array must have 2 dimensions if taillearray 0 NE 3 THEN return report Array in must have 3 dimensions verification of the coherence between array s size and the domain grille mask 1 1 1 nx ny nz firstx firsty firstz lastx lasty lastz case 1 of tailledepth 1 eq jpi and tailledepth 2 eq jpj:depth depth firstx:lastx firsty:lasty tailledepth 1 eq nx and tailledepth 2 eq ny: else:return report Probleme d adequation entre les tailles du domaine et celle du tableau de profondeur endcase case 1 OF taillearray 3 NE jpk:return report Le tableau 3d doit avoir sa 3eme dimension egale a jpk taillearray 1 eq jpi and taillearray 2 eq jpj:array array firstx:lastx firsty:lasty taillearray 1 eq nx and taillearray 2 eq ny: else:return report Probleme d adequation entre les tailles du domaine et celle du tableau de profondeur endcase c est parti flevel depth2floatlevel depth we delete points at values f_nan notanumber where finite flevel nan EQ 1 if notanumber 0 NE 1 then flevel notanumber 0 we sill delete land points at valmask for example flevel 0 flevel jpk 1 indexup level2index floor flevel indexlow nx ny indexup out where indexlow GE nx ny jpk 1 if out 0 NE 1 then indexlow out indexlow out nx ny weight flevel floor flevel res array indexup res res weight array indexlow res We put back points at values f_nan if notanumber 0 NE 1 then res notanumber values f_nan if out 0 NE 1 then res out values f_nan We mask land points at valmask if n_elements valmask EQ 0 then valmask 1e20 terre where temporary mask 0 EQ 0 if terre 0 NE 1 then res terre valmask if keyword_set key_performance THEN print temps projectondepth systime 1 tempsun return res end");185 a[183] = new Array("./ToBeReviewed/CALCULS/grossemoyenne.html", "grossemoyenne.pro", "", " file_comments averages a 3 or 4 d time serie field over a selected geographical area or along the time axis For one ore more selected axes x y z t categories param TAB in required 3 or 4d field param DIREC in required x y z t xy xz yz xyz xt yt zt xyt xzt yzt or xyzt keyword BOXZOOM xmin xmax ymin ymax zmin zmax to more details see domdef boxzoom can have 5 forms: vert2 vert1 vert2 lon1 lon2 lat1 lat2 lon1 lon2 lat1 lat2 vert2 lon1 lon2 lat1 lat2 vert1 vert2 keyword NAN not a number we activate it if we want to average without considerate some masked values of TAB If masked values of TAB are values consecrated by IDL values f_nan wr just have to put NAN If masked values of TAB are valued a a must be different of 1 corresponding to nan values f_nan and of 0 which desactivate nan We have to put NAN a Comment: In output rsult points which are NAN will be valued a or values f_nan keyword NODOMDEF We activate it if we do not want to pass in domdef even if the keyword boxzoom is present like when grossemoyenne is called via checkfield keyword INTEGRATION To make an integral rather than an average keyword SPATIALFIRST when performing at the same time spatial and temporal mean grossemoyenne is assuming that the mask is not changing with the time In consequence grossemoyenne performs temporal mean first and then call moyenne Activate SPATIALFIRST if you want to perform the spatial mean before the temporal mean Note that if NAN is activated then SPATIALFIRST is activated automatically keyword TEMPORALFIRST to force to perform first temporal mean even if nan is activated see SPATIALFIRST explanations keyword WDEPTH to specify that the field is at W depth instad of T depth automatically activated if vargrid eq W uses result:un tableau common domdef restrictions Put values corresponding to land at 1 e20 history Jerome Vialard jv lodyc jussieu fr 2 7 98 Sebastien Masson smasson lodyc jussieu fr adaptation array containing a temporal dimension 14 8 98 15 1 98 12 3 99 adaptation for NAN and utilisation of TEMPORARY version Id: grossemoyenne pro 142 2006 07 21 12:47:49Z navarro function grossemoyenne tab direc BOXZOOM boxzoom INTEGRATION integration NAN nan NODOMDEF nodomdef WDEPTH wdepth SPATIALFIRST spatialfirst TEMPORALFIRST temporalfirst _extra ex compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 For key_performance I preliminaries dirt 0 dirx 0 diry 0 dirz 0 dim aa I 1 Directions s we follow to integrate if strpos direc t ge 0 then dirt 1 if strpos direc x ge 0 then dirx 1 if strpos direc y ge 0 then diry 1 if strpos direc z ge 0 then dirz 1 IF keyword_set NAN AND dirx EQ 1 OR diry EQ 1 OR dirz EQ 1 THEN spatialfirst 1 IF keyword_set temporalfirst THEN spatialfirst 0 I 2 verification of the input array s size taille size tab case 1 of taille 0 eq 1 :return report Le tableau n a qu une dimension cas non traite taille 0 eq 2 :return report Le tableau n a qu deux dimension cas non traite taille 0 eq 3 :BEGIN dim 3d if dirx eq 0 and diry eq 0 and dirt eq 0 then return tab END taille 0 eq 4 :BEGIN dim 4d if dirx eq 0 and diry eq 0 and dirz eq 0 and dirt eq 0 then return tab END else : return report Le tableau d entree doit etre a 3 ou 4 dimensions s il ne contient pas de dim temporelle utiliser moyenne endcase I 3 Obtainment of scale s factors and of the mask on the subdomain concernedby the average Redefinition of the domain ajusted at boxzoom at 6 elements This will allowed us to calculate only in the domain concerned by the average Domdef followed by grid give us all arrays of the grid on the subdomain if keyword_set boxzoom then BEGIN Case 1 Of N_Elements Boxzoom Eq 1: bte lon1 lon2 lat1 lat2 0 boxzoom 0 N_Elements Boxzoom Eq 2: bte lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 N_Elements Boxzoom Eq 4: bte Boxzoom vert1 vert2 N_Elements Boxzoom Eq 5: bte Boxzoom 0:3 0 Boxzoom 4 N_Elements Boxzoom Eq 6: bte Boxzoom Else: return report Wrong Definition of Boxzoom endcase if NOT keyword_set nodomdef then BEGIN savedbox 1b saveboxparam boxparam4grmoyenne dat domdef bte GRIDTYPE vargrid _extra ex ENDIF ENDIF attribution of the mask and of longitude and latitude arrays grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz e1 e2 e3 WDEPTH wdepth I 4 if dirt equal 1 we make the temporal average and we send it in moyenne if dirt EQ 1 AND NOT keyword_set spatialfirst then begin if dim EQ 3d then BEGIN case 1 of taille 1 eq jpi and taille 2 eq jpj and taille 3 eq jpt: res tab firstx:firstx nx 1 firsty:firsty ny 1 taille 1 EQ nx and taille 2 eq ny and taille 3 eq jpt:res tab else:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return report Probleme d adequation entre les tailles du domaine nx ny jpt strtrim nx 1 strtrim ny 1 strtrim jpt 1 et du tableau strtrim taille 1 1 strtrim taille 2 1 strtrim taille 3 1 END ENDCASE if keyword_set integration then begin res total res 3 nan nan ENDIF ELSE BEGIN if keyword_set nan then BEGIN divi finite res divi total temporary divi 3 notanum where divi EQ 0 res total res 3 nan keyword_set nan 1 divi if notanum 0 NE 1 then res temporary notanum values f_nan ENDIF ELSE res total res 3 1 taille 3 ENDELSE ENDIF ELSE BEGIN case 1 of taille 1 eq jpi and taille 2 eq jpj and taille 3 eq jpk and taille 4 eq jpt: res tab firstx:lastx firsty:lasty firstz:lastz taille 1 eq jpi and taille 2 eq jpj and taille 3 eq nz and taille 4 eq jpt: res tab firstx:lastx firsty:lasty taille 1 EQ nx and taille 2 eq ny and taille 3 eq nz and taille 4 eq jpt:res tab taille 1 EQ nx and taille 2 eq ny and taille 3 eq jpk and taille 4 eq jpt: res tab firstz:lastz else:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return report Probleme d adequation entre les tailles du domaine nx ny nz jpt strtrim nx 1 strtrim ny 1 strtrim nz 1 strtrim jpt 1 et du tableau strtrim taille 1 1 strtrim taille 2 1 strtrim taille 3 1 strtrim taille 4 1 END endcase if keyword_set integration then begin res total res 4 nan nan ENDIF ELSE BEGIN if keyword_set nan then begin divi finite res divi total temporary divi 4 notanum where divi EQ 0 res total res 4 nan 1 divi if notanum 0 NE 1 then res temporary notanum values f_nan ENDIF ELSE res total res 4 1 taille 4 ENDELSE ENDELSE if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return moyenne temporary res direc BOXZOOM boxzoom NAN nan INTEGRATION integration NODOMDEF nodomdef WDEPTH wdepth _extra ex ENDIF ELSE res tab IF jpt EQ 1 THEN BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return moyenne reform res over direc BOXZOOM boxzoom NAN nan INTEGRATION integration NODOMDEF nodomdef WDEPTH wdepth _extra ex END II Case 2d arrays series tab3d if dim eq 3d then begin II 1 verification of the coherence of the array s size to average Verification of the coherence between the array s size and the domain defined by domdef The input array must have either the total domain s size jpi jpj jpt or this one of the reduced domain nx ny jpt case 1 of taille 1 eq jpi and taille 2 eq jpj and taille 3 eq jpt: res tab firstx:firstx nx 1 firsty:firsty ny 1 taille 1 EQ nx and taille 2 eq ny and taille 3 eq jpt:res tab else:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return report Probleme d adequation entre les tailles du domaine nx ny jpt strtrim nx 1 strtrim ny 1 strtrim jpt 1 et du tableau strtrim taille 1 1 strtrim taille 2 1 strtrim taille 3 1 enD endcase if keyword_set nan NE 0 then BEGIN if nan NE 1 then BEGIN If nan is not values f_nan we put it at values f_nan if abs nan LT 1e6 then notanumber where res EQ nan ELSE notanumber where abs res GT abs nan 10 if notanumber 0 NE 1 then res temporary notanumber values f_nan ENDIF ENDIF Comment : WE HAVE TO BE CAREFUL ABOUT CASES WHERE THE DIMENSION TO AVERAGE 1 AND MAKE SURE THAT IT EXIST THAT IS WHY WE USE reform nx ny WHICH CAN LOOK USELESS AT THE BEGINNING if nx EQ 1 OR ny EQ 1 then BEGIN res reform res nx ny jpt over e1 reform e1 nx ny over e2 reform e2 nx ny over endif if nx EQ 1 OR ny EQ 1 OR nz EQ 1 THEN mask reform mask nx ny nz over II 3 Different types of average if keyword_set nan NE 0 then msknan finite res ELSE msknan 1 mask mask 0 case 1 of dirx eq 1 and diry eq 0 : begin e temporary e1 temporary mask echelle temporary e replicate 1 jpt echelle reform echelle nx ny jpt over if keyword_set integration then divi 1 ELSE BEGIN IF msknan 0 NE 1 THEN divi total echelle msknan 1 ELSE divi total echelle 1 ENDELSE res total temporary res echelle 1 nan nan divi 1 if msknan 0 NE 1 then BEGIN echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total temporary testnan 1 total temporary echelle 1 EQ 0 endif end dirx eq 0 and diry eq 1 : begin e temporary e2 temporary mask if nx EQ 1 OR ny EQ 1 then e reform e nx ny over echelle temporary e replicate 1 jpt echelle reform echelle nx ny jpt over if keyword_set integration then divi 1 ELSE BEGIN IF msknan 0 NE 1 THEN divi total echelle msknan 2 ELSE divi total echelle 2 ENDELSE res total temporary res echelle 2 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total temporary testnan 2 total temporary echelle 2 EQ 0 endif end dirx eq 1 and diry eq 1 : begin echelle temporary e1 temporary e2 temporary mask replicate 1 jpt echelle reform echelle nx ny jpt over if keyword_set integration then divi 1 ELSE BEGIN IF msknan 0 NE 1 THEN divi total total echelle msknan 1 1 ELSE divi total total echelle 1 1 ENDELSE res total temporary total temporary res echelle 1 nan nan 1 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total total temporary testnan 1 1 total total temporary echelle 1 1 EQ 0 endif end endcase endif III Case 3d arrays series tab4d if dim eq 4d then begin III 1 Verification of the coherence of the array to average size Verification of the coherence between the array s size and the domain defind by domdef The input array must have either the total domain size jpi jpj jpk jpt or this one of the reduced domain nx ny ny jpt case 1 of taille 1 eq jpi and taille 2 eq jpj and taille 3 eq jpk and taille 4 eq jpt: res tab firstx:lastx firsty:lasty firstz:lastz taille 1 eq jpi and taille 2 eq jpj and taille 3 eq nz and taille 4 eq jpt: res tab firstx:lastx firsty:lasty taille 1 EQ nx and taille 2 eq ny and taille 3 eq nz and taille 4 eq jpt:res tab taille 1 EQ nx and taille 2 eq ny and taille 3 eq jpk and taille 4 eq jpt: res tab firstz:lastz else:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return report Probleme d adequation entre les tailles du domaine nx ny nz jpt strtrim nx 1 strtrim ny 1 strtrim nz 1 strtrim jpt 1 et du tableau strtrim taille 1 1 strtrim taille 2 1 strtrim taille 3 1 strtrim taille 4 1 END endcase if nx EQ 1 OR ny EQ 1 OR nz EQ 1 OR jpt EQ 1 then res reform res nx ny nz jpt over if keyword_set nan NE 0 then BEGIN if nan NE 1 then BEGIN if nan is not values f_nan we put it at values f_nan if abs nan LT 1e6 then notanumber where res EQ nan ELSE notanumber where abs res GT abs nan 10 if notanumber 0 NE 1 then res temporary notanumber values f_nan ENDIF ENDIF Comment : WE HAVE TO BE CAREFUL ABOUT CASES WHERE THE DIMENSION TO AVERAGE 1 AND MAKE SURE THAT IT EXIST THAT IS WHY WE USE reform nx ny WHICH CAN LOOK USELESS AT THE BEGINNING if nx EQ 1 OR ny EQ 1 OR nz EQ 1 then BEGIN res reform res nx ny nz jpt over mask reform mask nx ny nz over ENDIF IF keyword_set key_partialstep THEN BEGIN the top of the ocean floor is IF vargrid EQ T OR vargrid EQ W THEN bottom total mask 3 ELSE bottom total tmask firstx:lastx firsty:lasty firstz:lastz 3 we suppress columns with only ocean or land good where bottom NE 0 AND bottom NE nz the bottom of the ocean in 3D index is: bottom lindgen nx ny temporary bottom 1L nx ny IF good 0 NE 1 THEN bottom bottom good ELSE bottom 1 ENDIF ELSE bottom 1 III 2 different average types IF keyword_set nan NE 0 THEN msknan finite res ELSE msknan 1 case 1 of dirx eq 1 and diry eq 0 and dirz eq 0 : BEGIN e13 temporary e1 replicate 1 nz e13 reform e13 nx ny nz over echelle temporary e13 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over IF keyword_set key_partialstep AND bottom 0 NE 1 AND nx NE 1 THEN BEGIN IF msknan 0 EQ 1 THEN BEGIN msknan replicate 1b nx ny nz jpt nan 1 ENDIF bottom bottom replicate 1 jpt 4D bottom replicate 1 n_elements bottom nx ny nz lindgen jpt msknan bottom 0 res temporary bottom values f_nan ENDIF if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total echelle msknan 1 ELSE divi total echelle 1 endelse res temporary res echelle res total temporary res 1 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total temporary testnan 1 total temporary echelle 1 EQ 0 endif end dirx eq 0 and diry eq 1 and dirz eq 0 : begin e23 temporary e2 replicate 1 nz e23 reform e23 nx ny nz over echelle temporary e23 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over IF keyword_set key_partialstep AND bottom 0 NE 1 AND ny NE 1 THEN BEGIN IF msknan 0 EQ 1 THEN BEGIN msknan replicate 1b nx ny nz nan 1 endif bottom bottom replicate 1 jpt 4D bottom replicate 1 n_elements bottom nx ny nz lindgen jpt msknan bottom 0 res temporary bottom values f_nan ENDIF if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total echelle msknan 2 ELSE divi total echelle 2 endelse res total temporary res echelle 2 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total temporary testnan 2 total temporary echelle 2 EQ 0 endif end dirx eq 0 and diry eq 0 and dirz eq 1 : begin e33 replicate 1 1 nx ny e3 e33 reform e33 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e33 bottom e3w_ps firstx:lastx firsty:lasty temporary good ELSE e33 bottom e3t_ps firstx:lastx firsty:lasty temporary good ENDIF echelle temporary e33 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total echelle msknan 3 ELSE divi total echelle 3 endelse res total temporary res echelle 3 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total temporary testnan 3 total temporary echelle 3 EQ 0 endif end dirx eq 1 and diry eq 1 and dirz eq 0 : begin e13 e1 replicate 1 nz e13 reform e13 nx ny nz over e23 e2 replicate 1 nz e23 reform e23 nx ny nz over echelle temporary e13 temporary e23 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over IF keyword_set key_partialstep AND bottom 0 NE 1 AND nx ny NE 1 THEN BEGIN IF msknan 0 EQ 1 THEN BEGIN msknan replicate 1b nx ny nz nan 1 endif bottom bottom replicate 1 jpt 4D bottom replicate 1 n_elements bottom nx ny nz lindgen jpt msknan bottom 0 res temporary bottom values f_nan ENDIF if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total total echelle msknan 1 1 ELSE divi total total echelle 1 1 endelse res total total temporary res echelle 1 nan nan 1 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total total temporary testnan 1 1 total total temporary echelle 1 1 EQ 0 endif end dirx eq 1 and diry eq 0 and dirz eq 1 : begin e133 e1 e3 IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e133 bottom e1 e3w_ps firstx:lastx firsty:lasty temporary good ELSE e133 bottom e1 e3t_ps firstx:lastx firsty:lasty temporary good ENDIF echelle temporary e133 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total total echelle msknan 1 2 ELSE divi total total echelle 1 2 endelse res total total temporary res echelle 1 nan nan 2 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total total temporary testnan 1 2 total total temporary echelle 1 2 EQ 0 endif end dirx eq 0 and diry eq 1 and dirz eq 1 : begin e233 e2 e3 IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e233 bottom e2 e3w_ps firstx:lastx firsty:lasty temporary good ELSE e233 bottom e2 e3t_ps firstx:lastx firsty:lasty temporary good ENDIF echelle temporary e233 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total total echelle msknan 2 2 ELSE divi total total echelle 2 2 endelse res total total temporary res echelle 2 nan nan 2 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total total temporary testnan 2 2 total total temporary echelle 2 2 EQ 0 endif end dirx eq 1 and diry eq 1 and dirz eq 1 : begin e1233 e1 e2 e3 IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e1233 bottom e1 e2 e3w_ps firstx:lastx firsty:lasty temporary good ELSE e1233 bottom e1 e2 e3t_ps firstx:lastx firsty:lasty temporary good ENDIF echelle temporary e1233 temporary mask replicate 1 jpt echelle reform echelle nx ny nz jpt over if keyword_set integration then divi 1 ELSE begin IF msknan 0 NE 1 THEN divi total total total echelle msknan 1 1 1 ELSE divi total total total echelle 1 1 1 endelse res total total total temporary res echelle 1 nan nan 1 nan nan 1 nan nan divi 1 if msknan 0 NE 1 then begin echelle temporary echelle NE 0 testnan temporary msknan echelle testnan total total total temporary testnan 1 1 1 total total total temporary echelle 1 1 1 EQ 0 endif end endcase endif if dirt EQ 1 AND keyword_set spatialfirst then BEGIN IF reverse size res dimension 0 NE jpt THEN BEGIN print the last dimension of res is not equal to jpt: strtrim jpt 2 if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat return 1 ENDIF tdim size res n_dimensions if keyword_set integration then res total res tdim nan nan ELSE BEGIN if keyword_set nan then BEGIN testnan testnan divi ENDELSE ENDIF IV finishing IV 1 We mask land by a value equal to 1 e 20 valmask 1e 20 terre where divi EQ 0 IF terre 0 NE 1 THEN BEGIN res temporary terre 1e 20 ENDIF IV 2 We replace when nan equal 1 values f_nan by nan if keyword_set nan NE 0 then BEGIN puttonan where temporary testnan EQ 0 if puttonan 0 NE 1 then res temporary puttonan values f_nan if nan NE 1 then BEGIN notanumber where finite res eq 0 if notanumber 0 NE 1 then res temporary notanumber nan ENDIF ENDIF IV 3 We replace in the domain whch was defined at the entry of average if keyword_set savedbox THEN restoreboxparam boxparam4grmoyenne dat if keyword_set key_performance THEN print temps grossemoyenne systime 1 tempsun return res end"); 186 a[184] = new Array("./ToBeReviewed/CALCULS/hdyn.html", "hdyn.pro", "", " file_comments Calculate the height by rapport to a reference state for a depth reference See keywords for different possibilities By default the state reference is rho 1020 and the depth reference is gdepw ka with ka the first W level directly above 1000 m categories Post traiment calculation param TABSN in required array representing the salinity param TABTN in required array representing the temperature Has the same size than SN keyword GILL We activate this key if we want to calculate the dinamic height like in the GILL page 215 which means by rapport to a reference state which vary in depth and which is determinated by a reference temperature tref at 0 C and a reference salinity sref at 35psu keyword LEVEL It is the same reference level to take This level is defined like that gdepw level is the reference depth keyword SREF Give a value to this keyword to change the reference salinity used in the calculation when GILL is activated keyword TREF Give a value to this keyword to change the reference temperature used in the calculation when GILL is activated keyword PROFREF Give a depth to this keyword which will be considerated as the refeence depth in this case LEVEL has not any effect the calculation will be effectuated until this depth effecting an interpolation between the the last W level above PROFREF and PROFREF keyword SURFACE_LEVEL It is the level where we wan to calculate the dynamic height By default it is the level 0 returns An array of the same size of sn and tn representing the dynamic height calculated from a reference depth nd by rapport to a reference state uses common pro restrictions Points for which we can not calculate the dynamic height whose the batymetry is less deep than the reference depth are put at the value values f_nan restrictions approximation: The pressure in decibars is equal to the depth in meters the pressure increase of 1bar all 10m history Sebastien Masson smasson lodyc jussieu fr version Id: hdyn pro 142 2006 07 21 12:47:49Z navarro FUNCTION hdyn tabsn tabtn TREF tref SREF sref PROFREF profref LEVEL level GILL gill SURFACE_LEVEL surface_level compile_opt idl2 strictarrsubs tempsun systime 1 for key_performance common if NOT keyword_set surface_level then surface_level 0 useful if GILL is activated if NOT keyword_set tref then tref 0 if NOT keyword_set sref then sref 35 If needed we determinate the reference depth and the W level situated directly above if keyword_set profref then begin rien where gdepw LE profref level level level 1 za gdepw level ENDIF ELSE BEGIN if NOT keyword_set level then BEGIN rien where gdepw LE 1000 level level level 1 ENDIF profref gdepw level za profref ENDELSE tailles size tabsn taillet size tabtn if total tailles 0:tailles 0 NE taillet 0:taillet 0 NE 0 then return report Les tableaux sn et tn doivent avoir la meme taille if tailles 3 NE jpk then return report La dim verticale des tableaux sn et tn doit etre egalre a jpk nx nxt ny nyt case size tabsn 0 OF 3:BEGIN case 1 of tailles 1 eq jpi and tailles 2 eq jpj: BEGIN sn tabsn firstxt:lastxt firstyt:lastyt tn tabtn firstxt:lastxt firstyt:lastyt end tailles 1 eq nx and tailles 2 eq ny:BEGIN sn tabsn tn tabtn end else:return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE if keyword_set gill then rhonref rhon replicate sref nx ny jpk replicate tref nx ny jpk insitu ELSE rhonref 1020 vol rhonref rhon sn tn insitu rhonref e33d replicate 1 nx ny e3t e33d reform e33d nx ny jpk over terre where tmask firstxt:lastxt firstyt:lastyt EQ 0 if terre 0 NE 1 then vol terre values f_nan case level of 0:hdyn 100 profref gdepw 0 vol 0 1:hdyn 100 vol e33d 0 profref gdepw 1 vol 1 ELSE:hdyn 100 total vol e33d surface_level: level 1 3 profref gdepw level vol level endcase END 4:BEGIN case 1 of tailles 1 eq jpi and tailles 2 eq jpj AND tailles 4 EQ jpt: BEGIN sn tabsn firstxt:lastxt firstyt:lastyt tn tabtn firstxt:lastxt firstyt:lastyt end tailles 1 eq nx and tailles 2 eq ny AND tailles 4 EQ jpt:BEGIN sn tabsn tn tabtn end else:return report Probleme d adequation entre les tailles du domaine et de la boite endcase if keyword_set gill then rhonref rhon replicate sref nx ny jpk jpt replicate tref nx ny jpk jpt insitu ELSE rhonref 1020 vol rhonref rhon sn tn insitu rhonref e33d replicate 1 nx ny e3t e33d e33d replicate 1 jpt e33d reform e33d nx ny jpk jpt over mask tmask firstxt:lastxt firstyt:lastyt mask mask replicate 1 jpt terre where mask EQ 0 if terre 0 NE 1 then vol terre values f_nan case level of 0:hdyn 100 profref gdepw 0 vol 0 1:hdyn 100 vol e33d 0 profref gdepw 1 vol 1 ELSE:hdyn 100 total vol e33d surface_level: level 1 3 profref gdepw level vol level endcase END ELSE: return report cas non code ENDCASE varunit cm varname Dynamic Height href strtrim round profref 1 m IF keyword_set key_performance THEN print temps hdyn systime 1 tempsun return hdyn end"); 187 a[185] = new Array("./ToBeReviewed/CALCULS/level2depth.html", "level2depth.pro", "", " file_comments Allows to pass from a 2d level array to a 2d depth array corresponding o these levels categories Without loop param TAB in required 2d level array of sill levels or a structure respecting litchamp criterions keyword NOMASK To do not mask land points returns 2d array containing depthes uses common pro history Sebastien Masson smasson lodyc jussieu fr 17 6 1999 14 6 2000 accepte values f_nan version Id: level2depth pro 142 2006 07 21 12:47:49Z navarro FUNCTION level2depth tab NOMASK nomask compile_opt idl2 strictarrsubs tempsun systime 1 To key_performance common Reading of the input field and recovery of the used subdomain s size niveaux litchamp tab grille mask 1 1 gdep nx ny nz firstx firsty firstz lastx lasty lastz verification of the coherence between array s size and the domain definied by domdef taille size niveaux if taille 0 NE 2 then return report le champ en entree doit contenir un tableau 2d case 1 of taille 1 eq jpi and taille 2 eq jpj:niveaux niveaux firstx:lastx firsty:lasty taille 1 eq nx and taille 2 eq ny: else:return report Probleme d adequation entre les tailles du domaine et celle du champ endcase wherenan where finite niveaux nan EQ 1 if wherenan 0 NE 1 then niveaux wherenan 0 niveaux 0 niveaux jpk 1 gdep replicate 1 nx ny gdep niveaux lindgen nx ny nx ny niveaux gdep reform gdep niveaux nx ny if wherenan 0 NE 1 then gdep wherenan values f_nan if NOT keyword_set nomask then begin if n_elements valmask EQ 0 then valmask 1e20 terre where mask 0 EQ 0 if terre 0 NE 1 then gdep terre valmask endif if keyword_set key_performance THEN print temps level2depth systime 1 tempsun return gdep end"); 188 a[186] = new Array("./ToBeReviewed/CALCULS/level2index.html", "level2index.pro", "", " file_comments We want from a 3d matrix to extract a 2d x y array whose each element has been extract from a level specified by the 2d level array typically we want to obtain the salinity along an isopycn we have repered by its level level2index is a function who give in function of level a 2d indexes array which will allow to extract the 2d array from the 3d array categories without loop param LEVEL in required A 2d level array returns a 2d indexes array history Sebastien Masson smasson lodyc jussieu fr 24 11 1999 version Id: level2index pro 142 2006 07 21 12:47:49Z navarro FUNCTION level2index level An element of 3d array whose the two first dimensions are nx and ny whose coordinates are i j and k have for index in the same 3d array i j nx k nx ny level given for each point of level we know i j et k so we can calculate the index compile_opt idl2 strictarrsubs taille size level nx taille 1 ny taille 2 array k nx ny tabknxny nx ny long level return lindgen nx ny tabknxny end"); 189 a[187] = new Array("./ToBeReviewed/CALCULS/level2mask.html", "level2mask.pro", "", " file_comments Allow to pass from a 2d sill level array to the 3d mask array with 1s in levels above the sill level and 0s below and on it categories without loop param TAB in required 2d level array of sill level or a structure respecting litchamp criterions returns It is a 3d array containing the mask associated to the 2d sill level array uses common pro history Sebastien Masson smasson lodyc jussieu fr 17 6 1999 Setp 2004: boundary level have 0 values and not 1 as it was explained before in the header see: print array_equal niveau total level2mask niveau 3 version Id: level2mask pro 142 2006 07 21 12:47:49Z navarro FUNCTION level2mask tab compile_opt idl2 strictarrsubs tempsun systime 1 To key_performance common Reading of the input field and recovery of the size of the used subdomain niveaux litchamp tab grille maskterre 1 1 1 nx ny nz firstx firsty firstz lastx lasty lastz verification of the coherence between the array s size and the defined by domdef domain IF ny EQ 1 THEN niveaux reform niveaux nx ny over taille size niveaux if taille 0 NE 2 then return report le champ en entree doit contenir un tableau 2d case 1 of taille 1 eq jpi and taille 2 eq jpj:niveaux niveaux firstx:lastx firsty:lasty taille 1 eq nx and taille 2 eq ny: else:return report Probleme d adequation entre les tailles du domaine et celle du champ endcase We transform the 2d leval array in 3d mask array mask reform niveaux 1 indgen nz 1 nx ny nz mask floor temporary mask 1 mask temporary mask temporary maskterre if keyword_set key_performance THEN print temps level2mask systime 1 tempsun return mask end"); 190 a[188] = new Array("./ToBeReviewed/CALCULS/moyenne.html", "moyenne.pro", "", " file_comments averages a 2 or 3 d field over a selected geographical area and along one ore more selected axes x y or z categories param TAB in required 2 or 3d field param DIREC in required x y z xy xz yz or xyz keyword BOXZOOM xmin xmax ymin ymax zmin zmax to more details see domdef boxzoom can have 5 forms: vert2 vert1 vert2 lon1 lon2 lat1 lat2 lon1 lon2 lat1 lat2 vert2 lon1 lon2 lat1 lat2 vert1 vert2 keyword NAN not a number we activate it if we want to average without considerate some masked values of TAB If masked values of TAB are values consecrated by IDL values f_nan wr just have to put NAN If masked values of TAB are valued a a must be different of 1 corresponding to nan values f_nan and of 0 which desactivate nan We have to put NAN a Comment: In output rsult points which are NAN will be valued a or values f_nan keyword NODOMDEF We activate it if we do not want to pass in domdef even if the keyword boxzoom is present like when grossemoyenne is called via checkfield keyword INTEGRATION To make an integral rather than an average keyword WDEPTH to specify that the field is at W depth instad of T depth automatically activated if vargrid eq W returns An array uses common domdef restrictions Put values corresponding to land at 1 e20 history Jerome Vialard jv lodyc jussieu fr 2 7 98 Sebastien Masson smasson lodyc jussieu fr 14 8 98 15 1 98 11 3 99 adaptation for NAN 28 7 99 Averages 1d arrays version Id: moyenne pro 142 2006 07 21 12:47:49Z navarro function moyenne tab direc BOXZOOM boxzoom INTEGRATION integration NAN nan NODOMDEF nodomdef WDEPTH wdepth _extra ex compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 To key_performance I preliminaries dirt 0 dirx 0 diry 0 dirz 0 I 1 Directions s we follow to integrate if strpos direc t ge 0 then dirt 1 if strpos direc x ge 0 then dirx 1 if strpos direc y ge 0 then diry 1 if strpos direc z ge 0 then dirz 1 if dirx eq 0 and diry eq 0 and dirz eq 0 then return tab I 2 verification of the input array s size taille size tab case 1 of taille 0 eq 1 :dim 1d taille 0 eq 2 :BEGIN dim 2d if dirx eq 0 and diry eq 0 then return tab END taille 0 eq 3 :BEGIN dim 3d if dirx eq 0 and diry eq 0 and dirz eq 0 then return tab END else : return report Le tableau d entree doit etre a 2 ou 3 dimensions s il contient une dim temporelle utiliser grossemoyenne endcase I 3 Obtainment of scale s factors and of the mask on the subdomain concernedby the average Redefinition of the domain ajusted at boxzoom at 6 elements This will allowed us to calculate only in the domain concerned by the average Domdef followed by grid give us all arrays of the grid on the subdomain if keyword_set boxzoom then BEGIN Case 1 Of N_Elements Boxzoom Eq 1:bte lon1 lon2 lat1 lat2 0 boxzoom 0 N_Elements Boxzoom Eq 2:bte lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 N_Elements Boxzoom Eq 4:bte Boxzoom vert1 vert2 N_Elements Boxzoom Eq 5:bte Boxzoom 0:3 0 Boxzoom 4 N_Elements Boxzoom Eq 6:bte Boxzoom Else: return report Mauvaise Definition de Boxzoom endcase if NOT keyword_set nodomdef then BEGIN savedbox 1b saveboxparam boxparam4moyenne dat domdef bte GRIDTYPE vargrid _extra ex ENDIF ENDIF attribution of the mask and of longitude and latitude arrays IF vargrid EQ W THEN wdepth 1 grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz e1 e2 e3 WDEPTH wdepth II Case of the 1d array if dim EQ 1d then BEGIN if n_elements tab NE nx ny AND n_elements tab NE nx ny nz then BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return report Probleme d adequation entre les tailles du domaine et de la boxzoom ENDIF case 1 of nx EQ 1 AND ny EQ 1:BEGIN vector following z case n_elements tab of jpk:res tab firstz:lastz nz:res tab ELSE:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return report Probleme d adequation entre les tailles du domaine et de la boxzoom END ENDCASE if dirz EQ 1 then BEGIN dim 3d taille size reform res nx ny nz ENDIF ELSE BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return res ENDELSE END ny EQ 1:BEGIN vector following x case n_elements tab of jpi:res tab firstx:lastx nx:res tab ELSE:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return report Probleme d adequation entre les tailles du domaine et de la boxzoom END ENDCASE if dirx EQ 1 then BEGIN dim 2d taille size reform res nx ny ENDIF ELSE BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return res ENDELSE END nx EQ 1:BEGIN vector following y case n_elements tab of jpj:res tab firsty:lasty ny:res tab ELSE:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return report Probleme d adequation entre les tailles du domaine et de la boxzoom END ENDCASE if diry EQ 1 then BEGIN dim 2d taille size reform res nx ny ENDIF ELSE BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return res ENDELSE END endcase endif II Case of the 2d array if dim eq 2d then begin II 1 verification of the coherence of the array s size to average Verification of the coherence between the array s size and the domain defined by domdef The input array must have either the total domain s size jpi jpj or this one of the reduced domain nx ny case 1 of taille 1 eq jpi and taille 2 eq jpj: res tab firstx:lastx firsty:lasty taille 1 eq nx and taille 2 eq ny:res tab else:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return report Probleme d adequation entre les tailles du domaine nx ny strtrim nx 1 strtrim ny 1 et du tableau strtrim taille 1 1 strtrim taille 2 1 END ENDCASE if keyword_set nan NE 0 then BEGIN if nan NE 1 then BEGIN If nan is not values f_nan we put it at values f_nan if abs nan LT 1e6 then notanumber where res EQ nan ELSE notanumber where abs res GT abs nan 10 if notanumber 0 NE 1 then res temporary notanumber values f_nan ENDIF ENDIF Comment : WE HAVE TO BE CAREFUL ABOUT CASES WHERE THE DIMENSION TO AVERAGE 1 AND MAKE SURE THAT IT EXIST THAT IS WHY WE USE reform nx ny WHICH CAN LOOK USELESS AT THE BEGINNING if nx EQ 1 OR ny EQ 1 then BEGIN res reform res nx ny over e1 reform e1 nx ny over e2 reform e2 nx ny over endif if nx EQ 1 OR ny EQ 1 OR nz EQ 1 THEN mask reform mask nx ny nz over II 3 Different types of average mask mask 0 if keyword_set nan NE 0 then msknan finite res ELSE msknan 1 case 1 of dirx eq 1 and diry eq 0 : begin e e1 mask if keyword_set integration then divi 1 else begin divi e IF msknan 0 NE 1 THEN divi temporary divi msknan if ny EQ 1 then divi reform divi nx ny over divi total divi 1 endelse res res e if ny EQ 1 then res reform res nx ny over res total res 1 nan nan divi 1 if msknan 0 NE 1 then begin testnan msknan mask if ny EQ 1 then testnan reform testnan nx ny over testnan total testnan 1 total mask 1 EQ 0 endif end dirx eq 0 and diry eq 1 : begin e e2 mask if keyword_set integration then divi 1 else begin divi e IF msknan 0 NE 1 THEN divi temporary divi msknan if ny EQ 1 then divi reform divi nx ny over divi total divi 2 endelse res res e if ny EQ 1 then res reform res nx ny over res total res 2 nan nan divi 1 if msknan 0 NE 1 then begin testnan msknan mask if ny EQ 1 then testnan reform testnan nx ny over testnan total testnan 2 total mask 2 EQ 0 endif end dirx eq 1 and diry eq 1 : begin if keyword_set integration then divi 1 else BEGIN IF msknan 0 NE 1 THEN divi total e1 e2 mask msknan ELSE divi total e1 e2 mask ENDELSE res total res e1 e2 mask nan nan divi 1 if msknan 0 NE 1 then begin testnan msknan mask testnan total testnan total mask EQ 0 endif end endcase endif III Case 3d arrays series tab4d if dim eq 3d then begin III 1 Verification of the coherence of the array to average size Verification of the coherence between the array s size and the domain defind by domdef The input array must have either the total domain size jpi jpj jpk or this one of the reduced domain nx ny ny case 1 of taille 1 eq jpi and taille 2 eq jpj and taille 3 eq jpk: res tab firstx:lastx firsty:lasty firstz:lastz taille 1 eq jpi and taille 2 eq jpj and taille 3 eq nz: res tab firstx:lastx firsty:lasty taille 1 EQ nx and taille 2 eq ny and taille 3 eq nz :res tab taille 1 EQ nx and taille 2 eq ny and taille 3 eq jpk : res tab firstz:lastz else:BEGIN if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat return report Probleme d adequation entre les tailles du domaine nx ny nz strtrim nx 1 strtrim ny 1 strtrim nz 1 et du tableau strtrim taille 1 1 strtrim taille 2 1 strtrim taille 3 1 END endcase if keyword_set nan NE 0 then BEGIN if nan NE 1 then BEGIN if nan is not values f_nan we put it at values f_nan if abs nan LT 1e6 then notanumber where res EQ nan ELSE notanumber where abs res GT abs nan 10 if notanumber 0 NE 1 then res temporary notanumber values f_nan ENDIF ENDIF Comment : WE HAVE TO BE CAREFUL ABOUT CASES WHERE THE DIMENSION TO AVERAGE 1 AND MAKE SURE THAT IT EXIST THAT IS WHY WE USE reform nx ny WHICH CAN LOOK USELESS AT THE BEGINNING if nx EQ 1 OR ny EQ 1 OR nz EQ 1 then BEGIN res reform res nx ny nz over e1 reform e1 nx ny over e2 reform e2 nx ny over endif if nx EQ 1 OR ny EQ 1 OR nz EQ 1 THEN mask reform mask nx ny nz over IF keyword_set key_partialstep THEN BEGIN the top of the ocean floor is IF vargrid EQ T OR vargrid EQ W THEN bottom total mask 3 ELSE bottom total tmask firstx:lastx firsty:lasty firstz:lastz 3 we suppress columns with only ocean or land good where bottom NE 0 AND bottom NE nz the bottom of the ocean in 3D index is: bottom lindgen nx ny temporary bottom 1L nx ny IF good 0 NE 1 THEN bottom bottom good ELSE bottom 1 ENDIF ELSE bottom 1 III 2 different average types if keyword_set nan NE 0 then msknan finite res ELSE msknan 1 case 1 of dirx eq 1 and diry eq 0 and dirz eq 0 : begin e13 e1 replicate 1 nz e13 reform e13 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 AND nx NE 1 THEN BEGIN IF msknan 0 EQ 1 THEN BEGIN msknan replicate 1b nx ny nz nan 1 endif msknan bottom 0 res bottom values f_nan ENDIF if keyword_set integration then divi 1 else begin divi e13 mask IF msknan 0 NE 1 THEN divi temporary divi msknan if nz EQ 1 then divi reform divi nx ny nz over divi total divi 1 ENDELSE res res e13 mask if nz EQ 1 then res reform res nx ny nz over res total res 1 nan nan divi 1 e13 1 if msknan 0 NE 1 then begin testnan msknan mask if nz EQ 1 then testnan reform testnan nx ny nz over testnan total testnan 1 total mask 1 EQ 0 endif end dirx eq 0 and diry eq 1 and dirz eq 0 : begin e23 e2 replicate 1 nz e23 reform e23 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 AND ny NE 1 THEN BEGIN IF msknan 0 EQ 1 THEN BEGIN msknan replicate 1b nx ny nz nan 1 endif msknan bottom 0 res bottom values f_nan ENDIF if keyword_set integration then divi 1 else begin divi e23 mask IF msknan 0 NE 1 THEN divi temporary divi msknan if nz EQ 1 then divi reform divi nx ny nz over divi total divi 2 ENDELSE res res e23 mask if nz EQ 1 then res reform res nx ny nz over res total res 2 nan nan divi 1 e23 1 if msknan 0 NE 1 then begin testnan msknan mask if nz EQ 1 then testnan reform testnan nx ny nz over testnan total testnan 2 total mask 2 EQ 0 endif end dirx eq 0 and diry eq 0 and dirz eq 1 : begin e33 replicate 1 1 nx ny e3 e33 reform e33 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e33 bottom e3w_ps firstx:lastx firsty:lasty temporary good ELSE e33 bottom e3t_ps firstx:lastx firsty:lasty temporary good ENDIF if keyword_set integration then divi 1 else begin divi e33 mask if msknan 0 NE 1 then divi temporary divi msknan if nz EQ 1 then divi reform divi nx ny nz over divi total divi 3 ENDELSE res res e33 mask if nz EQ 1 then res reform res nx ny nz over res total res 3 nan nan divi 1 e33 1 if msknan 0 NE 1 then begin testnan msknan mask if nz EQ 1 then testnan reform testnan nx ny nz over testnan total testnan 3 total mask 3 EQ 0 endif end dirx eq 1 and diry eq 1 and dirz eq 0 : begin e123 e1 e2 replicate 1 nz e123 reform e123 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 AND nx ny NE 1 THEN BEGIN IF msknan 0 EQ 1 THEN BEGIN msknan replicate 1b nx ny nz nan 1 endif msknan bottom 0 res bottom values f_nan ENDIF if keyword_set integration then divi 1 else BEGIN divi e123 mask IF msknan 0 NE 1 THEN divi temporary divi msknan if nz EQ 1 then divi reform divi nx ny nz over divi total total divi 1 1 ENDELSE res res e123 mask if nz EQ 1 then res reform res nx ny nz over res total total res 1 nan nan 1 nan nan divi 1 e123 1 if msknan 0 NE 1 then begin testnan msknan mask if nz EQ 1 then testnan reform testnan nx ny nz over testnan total total testnan 1 1 total total mask 1 1 EQ 0 endif end dirx eq 1 and diry eq 0 and dirz eq 1 : begin e133 e1 e3 e133 reform e133 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e133 bottom e1 e3w_ps firstx:lastx firsty:lasty temporary good ELSE e133 bottom e1 e3t_ps firstx:lastx firsty:lasty temporary good ENDIF if keyword_set integration then divi 1 else BEGIN divi e133 mask if msknan 0 NE 1 then divi temporary divi msknan if nz EQ 1 then divi reform divi nx ny nz over divi total total divi 1 2 ENDELSE res res e133 mask if nz EQ 1 then res reform res nx ny nz over res total total res 1 nan nan 2 nan nan divi 1 e133 1 if msknan 0 NE 1 then begin testnan msknan mask if nz EQ 1 then testnan reform testnan nx ny nz over testnan total total testnan 1 2 total total mask 1 2 EQ 0 endif end dirx eq 0 and diry eq 1 and dirz eq 1 : begin e233 e2 e3 e233 reform e233 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e233 bottom e2 e3w_ps firstx:lastx firsty:lasty temporary good ELSE e233 bottom e2 e3t_ps firstx:lastx firsty:lasty temporary good ENDIF if keyword_set integration then divi 1 else BEGIN divi e233 mask if msknan 0 NE 1 then divi temporary divi msknan if nz EQ 1 then divi reform divi nx ny nz over divi total total divi 2 2 ENDELSE res res e233 mask if nz EQ 1 then res reform res nx ny nz over res total total res 2 nan nan 2 nan nan divi 1 e233 1 if msknan 0 NE 1 then begin testnan msknan mask if nz EQ 1 then testnan reform testnan nx ny nz over testnan total total testnan 2 2 total total mask 2 2 EQ 0 endif end dirx eq 1 and diry eq 1 and dirz eq 1 : begin e1233 e1 e2 e3 e1233 reform e1233 nx ny nz over IF keyword_set key_partialstep AND bottom 0 NE 1 THEN BEGIN IF keyword_set wdepth THEN e1233 bottom e1 e2 e3w_ps firstx:lastx firsty:lasty temporary good ELSE e1233 bottom e1 e2 e3t_ps firstx:lastx firsty:lasty temporary good ENDIF if keyword_set integration then divi 1 else BEGIN if msknan 0 NE 1 then divi total e1233 mask msknan ELSE divi total e1233 mask ENDELSE res total res e1233 mask nan nan divi 1 e1233 1 if msknan 0 NE 1 then begin testnan msknan mask testnan total testnan total mask EQ 0 endif end endcase endif IV finishing IV 1 We mask land by a value equal to 1 e 20 valmask 1e 20 terre where divi EQ 0 IF terre 0 NE 1 THEN BEGIN res terre 1e 20 ENDIF IV 2 We replace when nan equal 1 values f_nan by nan if keyword_set nan NE 0 then BEGIN puttonan where testnan EQ 0 if puttonan 0 NE 1 then res puttonan values f_nan if nan NE 1 then BEGIN notanumber where finite res eq 0 if notanumber 0 NE 1 then res notanumber nan ENDIF ENDIF IV 3 We replace in the domain whch was defined at the entry of average if keyword_set savedbox THEN restoreboxparam boxparam4moyenne dat if keyword_set key_performance THEN print temps moyenne systime 1 tempsun return res end"); 191 a[189] = new Array("./ToBeReviewed/CALCULS/norme.html", "norme.pro", "", " file_comments calculate the norme of a field of vectors then make a possible average Comment 1: The field of vector can be 2d:xy 3d: xyz or xyt 4d: xyzt Comment 2: The calculation of the norme is made before the possible spatial or temporal average because the average of the norme is not equal to the norme of averages categories Post traitment calculation param COMPOSANTEU in required an 2d 3d or 4d array param COMPOSANTEV in required an 2d 3d or 4d array keyword BOXZOOM boxzoom on which do the average by default the domain selected by the last domdef done keyword DIREC t x y z xys xz yz xyz xt yt zt xyt xzt yzt xyzt Direction on which do averages returns Array to trace with plt pltz or pltt uses common pro restrictions The norme is calculated on points TTo do this calculation we average field U and Von points T before calculate the norme At the edge of coast and of domain we can not calculate fields U and V at points T that is why these points are at value values f_nan When we calculate on a reduce geographic domain field U and V have not necessarily the same number of point In this case we recut U and V to keep only common points We profit of this to redo a domdef which redefine a geographic domain on which fields U and V are extracted on same points restrictions To know what type of array we work with we test its size and dates gave by time 0 and time jpt 1 to know if thee is a temporal dimension Before to start norme make sure that time and jpt are defined how they have to examples To calculate the average of the norme of streams on all the domain between 0 et 50: IDL res norme un vn boxzoom 0 50 dir xyz history Sebastien Masson smasson lodyc jussieu fr 9 6 1999 version Id: norme pro 142 2006 07 21 12:47:49Z navarro FUNCTION norme composanteu composantev BOXZOOM boxzoom DIREC direc _extra ex compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 To key_performance IF finite glamu 0 finite gphiu 0 finite glamv 0 finite gphiv 0 EQ 0 THEN return report This version of norme is based on Arakawa C grid U and V grids must therefore be defined if keyword_set boxzoom then BEGIN Case 1 Of N_Elements Boxzoom Eq 1:bte lon1 lon2 lat1 lat2 0 boxzoom 0 N_Elements Boxzoom Eq 2:bte lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 N_Elements Boxzoom Eq 4:bte Boxzoom vert1 vert2 N_Elements Boxzoom Eq 5:bte Boxzoom 0:3 0 Boxzoom 4 N_Elements Boxzoom Eq 6:bte Boxzoom Else: return report Mauvaise Definition de Boxzoom ENDCASE domdef boxzoom ENDIF if NOT keyword_set direc then direc 0 construction of u and v at points T u litchamp composanteu v litchamp composantev date1 time 0 if n_elements jpt EQ 0 then date2 date1 ELSE date2 time jpt 1 if size u 0 NE size v 0 then return 1 vargrid T varname norme valmask 1e20 grilleu litchamp composanteu grid if grilleu EQ then grilleu U grillev litchamp composantev grid if grillev EQ then grillev V IF grilleu EQ V AND grillev EQ U THEN inverse 1 IF grilleu EQ T AND grillev EQ T THEN BEGIN interpolle 0 return report cas non code mais facile a faire ENDIF ELSE interpolle 1 if keyword_set inverse then begin rien u u v v rien endif We find common points between u and v indicexu lindgen jpi firstxu:firstxu nxu 1 indicexv lindgen jpi firstxv:firstxv nxv 1 indicex inter indicexu indicexv indiceyu lindgen jpj firstyu:firstyu nyu 1 indiceyv lindgen jpj firstyv:firstyv nyv 1 indicey inter indiceyu indiceyv nx n_elements indicex ny n_elements indicey case 1 of xyz size u 0 EQ 3 AND date1 EQ date2 :BEGIN indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 indice3d lindgen jpi jpj jpk indice3d indice3d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt extraction of u and v on the appropriated domain case 1 of size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN case size u 3 OF nzt:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny end jpk:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 firstzt:lastzt ELSE u u 1: nx firstzt:lastzt IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 firstzt:lastzt ELSE v v 1: nx firstzt:lastzt IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 firstzt:lastzt ELSE u u 1: ny firstzt:lastzt IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 firstzt:lastzt ELSE v v 1: ny firstzt:lastzt end ELSE: return report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs endcase END size u 1 EQ jpi AND size u 2 EQ jpj AND size u 3 EQ jpk AND size v 1 EQ jpi AND size v 2 EQ jpj AND size u 3 EQ jpk :BEGIN u u indice3d v v indice3d END ELSE: return report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs endcase We reshape u and v to make sure that no dimension has been erased if nzt EQ 1 then begin u reform u nx ny nzt over v reform v nx ny nzt over endif construction of u and v at points T a u 0 u u shift u 1 0 0 2 if NOT keyword_set key_periodic OR nx NE jpi then u 0 a a v 0 v v shift v 0 1 0 2 if NOT keyword_set key_periodic OR nx NE jpi then v 0 a attribution of the mask and of logitude and latitude arrays mask tmask indice3d if nzt EQ 1 then mask reform mask nx ny nzt over if n_elements valmask EQ 0 THEN valmask 1e20 landu where u GE valmask 10 if landu 0 NE 1 then u landu 0 landv where v GE valmask 10 if landv 0 NE 1 then v landv 0 res sqrt u 2 v 2 if NOT keyword_set key_periodic OR nx NE jpi then res 0 values f_nan res 0 values f_nan mask where mask eq 0 IF mask 0 NE 1 THEN res mask valmask All kind of average domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 meme if keyword_set direc then res moyenne res direc nan boxzoom boxzoom nodomdef END xyt date1 NE date2 AND size u 0 EQ 3 :BEGIN indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 extraction of u and v on the appropriated domain case 1 of size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 v v indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 END ELSE:return report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs endcase construction of u and v at points T a u 0 u u shift u 1 0 0 2 if NOT keyword_set key_periodic OR nx NE jpi then u 0 a a v 0 v v shift v 0 1 0 2 if NOT keyword_set key_periodic OR nx NE jpi then v 0 a attribution of the mask and of longitude and latitude arrays We recover the complete grid to establish a big mask extent in the four direction to cover pointsfor which a land point has been considerated make a small drawing mask tmask indice2d jpi jpj firstzt if ny EQ 1 then mask reform mask nx ny over construction of land containing all points to mask if n_elements valmask EQ 0 THEN valmask 1e20 landu where u GE valmask 10 if landu 0 NE 1 then u landu 0 landv where v GE valmask 10 if landv 0 NE 1 then v landv 0 res sqrt u 2 v 2 if NOT keyword_set key_periodic OR nx NE jpi then res 0 values f_nan res 0 values f_nan mask where mask eq 0 IF mask 0 NE 1 THEN BEGIN coeftps lindgen jpt nx ny coeftps replicate 1 n_elements mask coeftps mask temporary mask replicate 1 jpt mask temporary mask temporary coeftps res temporary mask valmask ENDIF moyennes en tous genres domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 meme if keyword_set direc then res grossemoyenne res direc nan boxzoom boxzoom nodomdef END xyzt date1 NE date2 AND size u 0 EQ 4:BEGIN indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 indice3d lindgen jpi jpj jpk indice3d indice3d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt extraction of u and v on the appropriated domain case 1 of size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN case size u 3 OF nzt:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny end jpk:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 firstzt:lastzt ELSE u u 1: nx firstzt:lastzt IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 firstzt:lastzt ELSE v v 1: nx firstzt:lastzt IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 firstzt:lastzt ELSE u u 1: ny firstzt:lastzt IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 firstzt:lastzt ELSE v v 1: ny firstzt:lastzt end ELSE: return report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs endcase END size u 1 EQ jpi AND size u 2 EQ jpj AND size u 3 EQ jpk AND size v 1 EQ jpi AND size v 2 EQ jpj AND size u 3 EQ jpk :BEGIN u u indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt v v indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 firstzt:lastzt END ELSE: return report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs endcase construction of u and v at points T a u 0 u u shift u 1 0 0 0 2 if NOT keyword_set key_periodic OR nx NE jpi then u 0 a a v 0 v v shift v 0 1 0 0 2 if NOT keyword_set key_periodic OR nx NE jpi then v 0 a attribution of the mask and of logitude and latitude arrays mask tmask indice3d if nzt EQ 1 then mask reform mask nx ny nzt over if n_elements valmask EQ 0 THEN valmask 1e20 landu where u GE valmask 10 if landu 0 NE 1 then u landu 0 landv where v GE valmask 10 if landv 0 NE 1 then v landv 0 res sqrt u 2 v 2 if NOT keyword_set key_periodic OR nx NE jpi then res 0 values f_nan res 0 values f_nan mask where mask eq 0 IF mask 0 NE 1 THEN BEGIN coeftps lindgen jpt nx ny nzt coeftps replicate 1 n_elements mask coeftps mask temporary mask replicate 1 jpt mask temporary mask temporary coeftps res temporary mask valmask ENDIF All kind of average domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 meme if keyword_set direc then res grossemoyenne res direc nan boxzoom boxzoom nodomdef END xy ELSE:BEGIN xy indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 extraction of u and v on the appropriated domain case 1 of size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indice2d v v indice2d END ELSE:return report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs endcase We reshape u and v to make sure that no dimension has been erased if ny EQ 1 then begin u reform u nx ny over v reform v nx ny over endif construction of u and v at points T a u 0 u u shift u 1 0 2 if NOT keyword_set key_periodic OR nx NE jpi then u 0 a a v 0 v v shift v 0 1 2 if NOT keyword_set key_periodic OR nx NE jpi then v 0 a attribution of the mask and of longitude and latitude arrays We recover the complete grid to establish a big mask extent in the four direction to cover pointsfor which a land point has been considerated make a small drawing mask tmask indice2d jpi jpj firstzt if nyt EQ 1 THEN mask reform mask nx ny over construction of land containing all points to mask if n_elements valmask EQ 0 THEN valmask 1e20 landu where u GE valmask 10 if landu 0 NE 1 then u landu 0 landv where v GE valmask 10 if landv 0 NE 1 then v landv 0 res sqrt u 2 v 2 if NOT keyword_set key_periodic OR nx NE jpi then res 0 values f_nan res 0 values f_nan mask where mask eq 0 IF mask 0 NE 1 THEN res mask valmask All kind of average domdef glamt indice2d 0 0 glamu indice2d nx 1 0 gphit indice2d 0 0 gphiv indice2d 0 ny 1 vert1 vert2 meme if keyword_set direc then res moyenne res direc nan boxzoom boxzoom nodomdef END endcase if keyword_set key_performance THEN print temps norme systime 1 tempsun return res end"); 192 a[190] = new Array("./ToBeReviewed/CALCULS/projectondepth.html", "projectondepth.pro", "", " file_comments Allows to project a 3d field following a depth array categories without loop param ARRAYIN It is a 3d array whose 3rd dimension must be equal to jpk param DEPTHIN It is a 2d array indicating for each point n at which depth to project returns A 2d array which is the projection of the 3d array following depthes indicated by depthin uses common pro restrictions points at values f_nan impossible calculation Land points masked at valmask examples we build a possible depthes array IDL a gdept jpk 1 1 jpi jpj findgen jpi jpj We build an array to project on these depthes For the test we build a 3d array whose each vector following z is the depth IDL arraytest replicate 1 jpi jpj gdept IDL arraytest reform arraytest jpi jpj jpk over We test the projection of the depth array on the depth IDL plt 1e6 a projectondepth arraytest a nocontour null field at 1e 6 pres verifcation projecting the temperature of 20 C for example history Sebastien Masson smasson lodyc jussieu fr 15 6 2000 version Id: projectondepth pro 142 2006 07 21 12:47:49Z navarro FUNCTION projectondepth arrayin depthin compile_opt idl2 strictarrsubs tempsun systime 1 To key_performance common depth litchamp depthin array litchamp arrayin Small verifications tailledepth size depth taillearray size array if tailledepth 0 NE 2 THEN return report Depth array must have 2 dimensions if taillearray 0 NE 3 THEN return report Array in must have 3 dimensions verification of the coherence between array s size and the domain grille mask 1 1 1 nx ny nz firstx firsty firstz lastx lasty lastz case 1 of tailledepth 1 eq jpi and tailledepth 2 eq jpj:depth depth firstx:lastx firsty:lasty tailledepth 1 eq nx and tailledepth 2 eq ny: else:return report Probleme d adequation entre les tailles du domaine et celle du tableau de profondeur endcase case 1 OF taillearray 3 NE jpk:return report Le tableau 3d doit avoir sa 3eme dimension egale a jpk taillearray 1 eq jpi and taillearray 2 eq jpj:array array firstx:lastx firsty:lasty taillearray 1 eq nx and taillearray 2 eq ny: else:return report Probleme d adequation entre les tailles du domaine et celle du tableau de profondeur endcase c est parti flevel depth2floatlevel depth we delete points at values f_nan notanumber where finite flevel nan EQ 1 if notanumber 0 NE 1 then flevel notanumber 0 we sill delete land points at valmask for example flevel 0 flevel jpk 1 indexup level2index floor flevel indexlow nx ny indexup out where indexlow GE nx ny jpk 1 if out 0 NE 1 then indexlow out indexlow out nx ny weight flevel floor flevel res array indexup res res weight array indexlow res We put back points at values f_nan if notanumber 0 NE 1 then res notanumber values f_nan if out 0 NE 1 then res out values f_nan We mask land points at valmask if n_elements valmask EQ 0 then valmask 1e20 terre where temporary mask 0 EQ 0 if terre 0 NE 1 then res terre valmask if keyword_set key_performance THEN print temps projectondepth systime 1 tempsun return res end"); 193 193 a[191] = new Array("./ToBeReviewed/CALCULS/remplit.html", "remplit.pro", "", " Extrapole zinout jpi jpj sur les continents en utilisant les 4 plus proches voisins masques oceaniquement et construit un nouveau masque contenant l ancien masque oceanique PLUSles points extrapoles Reitere le processus niter fois C est pas clair essayez Nan: to fill the point which have the value values f_nan Whitout this keyword these point are not filling and stays at values f_nan todo seb FUNCTION remplit zinput NAN nan NITER niter BASIQUE basique mask mask FILLXDIR fillxdir FILLYDIR fillydir FILLVAL fillval _extra ex compile_opt idl2 strictarrsubs common tempsun systime 1 pour key_performance les points non remplis sont masques a valmask IF n_elements niter EQ 0 THEN niter 1 IF niter EQ 0 THEN return zinput z zinput if n_elements key_gridtype EQ 0 then key_gridtype c if keyword_set basique then begin oldkey_gridtype key_gridtype key_gridtype c nx size zinput 1 ny size zinput 2 if NOT keyword_set mask then mmmask basique ELSE mmmask mask if key_gridtype eq e then begin case vargrid of T :glam glamt firstxt:lastxt firstyt:lastyt U :glam glamu firstxu:lastxu firstyu:lastyu endcase endif ENDIF ELSE grille mmmask glam gphi gdep nx ny nz _extra ex if keyword_set mask then mmmask mask if size mmmask 0 EQ 3 THEN mmmask mmmask 0 if n_elements mmmask EQ 1 then mmmask replicate 1b nx ny if keyword_set nan then begin nanpoint where finite z EQ 0 if nanpoint 0 NE 1 then begin mmmask nanpoint 0b z nanpoint 0 endif ENDIF mmmask byte mmmask on ajoute un cadre de zero a z mask e1 e2 comme ca apres on peut faire des shifts ds tous les sens sans se soucier des bords du domaine tempdeux systime 1 pour key_performance 2 nx2 nx 2 case key_gridtype of c :BEGIN ztmp bytarr nx 2 ny 2 ztmp 1:nx 1:ny mmmask mmmask temporary ztmp ztmp fltarr nx 2 ny 2 ztmp 1:nx 1:ny z if keyword_set key_periodic AND nx EQ jpi then begin ztmp 0 1:ny z jpi 1 ztmp nx 1 1:ny z 0 endif z temporary ztmp END e :BEGIN ztmp bytarr nx 2 ny 4 ztmp 1:nx 2:ny 1 mmmask mmmask temporary ztmp ztmp fltarr nx 2 ny 4 ztmp 1:nx 2:ny 1 z if keyword_set key_periodic AND nx EQ jpi then begin ztmp 0 2:ny 1 z jpi 1 ztmp nx 1 2:ny 1 z 0 endif z temporary ztmp END endcase IF testvar var key_performance EQ 2 THEN print temps remplit: on ajoute un cadre de zero systime 1 tempdeux iteration FOR n 1 niter DO BEGIN on trouve les points coast tempdeux systime 1 pour key_performance 2 les points du bord du cadre ne doivent pas etre selectionnes comme la coast case key_gridtype of c :BEGIN mmmask 0 1b mmmask nx 1 1b mmmask 0 1b mmmask ny 1 1b END e :BEGIN mmmask 0 1b mmmask nx 1 1b mmmask 0:1 1b mmmask ny 2:ny 3 1b END endcase liste des points terre restant IF keyword_set fillxdir THEN BEGIN we stop if all the lines that contains data have been filled test total mmmask 1:nx 1 IF total test EQ 0 test EQ nx EQ ny 2 THEN GOTO fini ENDIF IF keyword_set fillydir THEN BEGIN we stop if all the columns that contains data have been filled test total mmmask 1:ny 2 IF total test EQ 0 test EQ ny EQ nx 2 THEN GOTO fini ENDIF land where mmmask EQ 0 if land 0 EQ 1 then GOTO fini les points du bord du cadre doivent maintenant etre dans la terre case key_gridtype of c :BEGIN mmmask 0 0b mmmask nx 1 0b mmmask 0 0b mmmask ny 1 0b END e :BEGIN mmmask 0 0b mmmask nx 1 0b mmmask 0:1 0b mmmask ny 2:ny 3 0b END endcase if keyword_set key_periodic AND nx EQ jpi then begin mmmask 0 mmmask nx mmmask nx 1 mmmask 1 endif liste des voisins mer case key_gridtype of c :BEGIN CASE 1 OF keyword_set fillxdir :weight mmmask 1 land mmmask 1 land keyword_set fillydir :weight mmmask nx2 land mmmask nx2 land ELSE:weight mmmask 1 land mmmask 1 land mmmask nx2 land mmmask nx2 land 1 sqrt 2 mmmask nx2 1 land mmmask nx2 1 land mmmask nx2 1 land mmmask nx2 1 land ENDCASE END e :BEGIN shifted glam 0 0 LT glam 0 1 oddeven land nx2 1 shifted MOD 2 weight mmmask 1 land mmmask 1 land mmmask 2 nx2 land mmmask 2 nx2 land sqrt 2 mmmask nx2 oddeven land mmmask nx2 1 oddeven land mmmask nx2 oddeven land mmmask nx2 1 oddeven land END endcase ok where weight GT 0 weight weight ok coast land temporary ok IF testvar var key_performance EQ 2 THEN print temps remplit: trouver la coast systime 1 tempdeux remplissage des points coast tempdeux systime 1 pour key_performance 2 on masque z z temporary z mmmask case key_gridtype of c :BEGIN CASE 1 OF keyword_set fillxdir :zcoast z 1 coast z 1 coast keyword_set fillydir :zcoast z nx2 coast z nx2 coast ELSE:zcoast z 1 coast z 1 coast z nx2 coast z nx2 coast 1 sqrt 2 z nx2 1 coast z nx2 1 coast z nx2 1 coast z nx2 1 coast ENDCASE END e :BEGIN oddeven coast nx2 1 shifted MOD 2 zcoast z 1 coast z 1 coast z 2 nx2 coast z 2 nx2 coast sqrt 2 z nx2 oddeven coast z nx2 1 oddeven coast z nx2 oddeven coast z nx2 1 oddeven coast END endcase z coast temporary zcoast temporary weight we update the the boundary conditions of z if keyword_set key_periodic AND nx EQ jpi then begin z 0 z nx z nx 1 z 1 endif IV on reduit le masque mmmask temporary coast 1 IF testvar var key_performance EQ 2 THEN print temps remplit: une iteration systime 1 tempdeux ENDFOR fini: on masque les valeurs sur les lands restantes IF n_elements valmask EQ 0 then valmask 1e20 IF n_elements fillval EQ 0 THEN fillval valmask z temporary z mmmask fillval 1b mmmask on redecoupe le tableau pour retirer le cadre case key_gridtype of c :BEGIN z z 1:nx 1:ny END e :BEGIN z z 1:nx 2:ny 1 END endcase if keyword_set basique then key_gridtype oldkey_gridtype if keyword_set key_performance THEN print temps remplit systime 1 tempsun return z END "); 194 194 a[192] = new Array("./ToBeReviewed/CALCULS/rhon.html", "rhon.pro", "", " Calcul de la fonction d etat issue de eos F Creation : 1997 G Roullet adaptation pour les tableaux z zt xyz xyzt par seb todo seb FUNCTION rhon sn tn INSITU insitu SIGMA_N sigma_n compile_opt idl2 strictarrsubs common tempsun systime 1 pour key_performance sn 1e5 double sn double tn 1e5 IF keyword_set sigma_n then insitu 1 taille size sn case taille 0 of 0:BEGIN z zrhop 0d jkmax 1 END 1:BEGIN z zrhop dblarr taille 1 jkmax taille 1 END 2:BEGIN xy jpt 1 ou zt zrhop dblarr taille 1 taille 2 if jpt EQ 1 then jkmax 1 ELSE jkmax taille 1 END 3:BEGIN xyz jpt 1 ou xyt zrhop dblarr taille 1 taille 2 taille 3 if jpt EQ 1 then jkmax taille 3 ELSE jkmax 1 END 4:BEGIN xyzt zrhop dblarr taille 1 taille 2 taille 3 taille 4 jkmax taille 3 END endcase FOR jk 0 jkmax 1 DO BEGIN case taille 0 of 0:BEGIN z ztt tn zs sn END 1:BEGIN z ztt tn jk zs sn jk END 2:BEGIN xy jpt 1 ou zt if jpt EQ 1 then begin ztt tn zs sn ENDIF ELSE BEGIN ztt tn jk zs sn jk ENDELSE END 3:BEGIN xyz jpt 1 ou xyt if jpt EQ 1 then begin ztt tn jk zs sn jk endif ELSE BEGIN ztt tn zs sn ENDELSE END 4:BEGIN xyzt ztt tn jk zs sn jk END endcase if n_elements sigma_n NE 0 then zh 1000 sigma_n ELSE zh gdept jk square root salinity zsr sqrt abs zs compute density pure water at atm pressure zr1 6 536332e 9 ztt 1 120083e 6 ztt 1 001685e 4 ztt 9 095290e 3 ztt 6 793952e 2 ztt 999 842594 seawater density atm pressure zr2 5 3875e 9 ztt 8 2467e 7 ztt 7 6438e 5 ztt 4 0899e 3 ztt 0 824493 zr3 1 6546e 6 ztt 1 0227e 4 ztt 5 72466e 3 zr4 4 8314e 4 potential density reference to the surface case taille 0 of 0: zrhop zr4 zs zr3 zsr zr2 zs zr1 1: zrhop jk zr4 zs zr3 zsr zr2 zs zr1 2:BEGIN if jpt EQ 1 then zrhop zr4 zs zr3 zsr zr2 zs zr1 ELSE zrhop jk zr4 zs zr3 zsr zr2 zs zr1 END 3:BEGIN if jpt EQ 1 then zrhop jk zr4 zs zr3 zsr zr2 zs zr1 ELSE zrhop zr4 zs zr3 zsr zr2 zs zr1 END 4: zrhop jk zr4 zs zr3 zsr zr2 zs zr1 endcase IF n_elements insitu EQ 1 THEN BEGIN add the compression terms ze 3 508914e 8 ztt 1 248266e 8 ztt 2 595994e 6 zbw 1 296821e 6 ztt 5 782165e 9 ztt 1 045941e 4 zb zbw ze zs zd 2 042967e 2 zc 7 267926e 5 ztt 2 598241e 3 ztt 0 1571896 zaw 5 939910e 6 ztt 2 512549e 3 ztt 0 1028859 ztt 4 721788 za zd zsr zc zs zaw zb1 0 1909078 ztt 7 390729 ztt 55 87545 za1 2 326469e 3 ztt 1 553190 ztt 65 00517 ztt 1044 077 zkw 1 361629e 4 ztt 1 852732e 2 ztt 30 41638 ztt 2098 925 ztt 190925 6 zk0 zb1 zsr za1 zs zkw masked in situ density case taille 0 of 0: zrhop zrhop 1 0 zh zk0 zh za zh zb 1: zrhop jk zrhop jk 1 0 zh zk0 zh za zh zb 2:BEGIN if jpt EQ 1 then zrhop zrhop 1 0 zh zk0 zh za zh zb ELSE zrhop jk zrhop jk 1 0 zh zk0 zh za zh zb END 3:BEGIN if jpt EQ 1 then zrhop jk zrhop jk 1 0 zh zk0 zh za zh zb ELSE zrhop zrhop 1 0 zh zk0 zh za zh zb END 4: zrhop jk zrhop jk 1 0 zh zk0 zh za zh zb endcase ENDIF ENDFOR terre where tn GE 1e6 if terre 0 NE 1 then zrhop terre valmask if keyword_set key_performance THEN print temps rhon systime 1 tempsun return zrhop END "); … … 197 197 a[195] = new Array("./ToBeReviewed/GRILLE/changegrid.html", "changegrid.pro", "", " todo seb function changegrid newgrid compile_opt idl2 strictarrsubs cm_4mesh if cmpgrid newgrid EQ 0 then return 0 update the common paramaters ccmeshparameters newgrid ixminmesh newgrid ixminmesh ixmaxmesh newgrid ixmaxmesh iyminmesh newgrid iyminmesh iymaxmesh newgrid iymaxmesh izminmesh newgrid izminmesh izmaxmesh newgrid izmaxmesh read the new file loadgrid newgrid filename IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return 1 end"); 198 198 a[196] = new Array("./ToBeReviewed/GRILLE/cmpgrid.html", "cmpgrid.pro", "", " todo seb FUNCTION cmpgrid newgrid compile_opt idl2 strictarrsubs common newgrid must be a structure if size newgrid type NE 8 then return 0 does ccmeshparameters exist if n_elements ccmeshparameters EQ 0 then return 1 we compare the structure which caracterise the grid whith ccmeshparameters case 1 of ccmeshparameters jpiglo NE newgrid jpiglo: ccmeshparameters jpjglo NE newgrid jpjglo: ccmeshparameters jpkglo NE newgrid jpkglo: ccmeshparameters jpi NE newgrid jpi: ccmeshparameters jpj NE newgrid jpj: ccmeshparameters jpk NE newgrid jpk: total ccmeshparameters glaminfo newgrid glaminfo NE 0: total ccmeshparameters gphiinfo newgrid gphiinfo NE 0: ccmeshparameters ixminmesh NE newgrid ixminmesh: ccmeshparameters ixmaxmesh NE newgrid ixmaxmesh: ccmeshparameters iyminmesh NE newgrid iyminmesh: ccmeshparameters iymaxmesh NE newgrid iymaxmesh: ccmeshparameters izminmesh NE newgrid izminmesh: ccmeshparameters izmaxmesh NE newgrid izmaxmesh: ccmeshparameters key_shift NE newgrid key_shift: ccmeshparameters key_periodic NE newgrid key_periodic: array_equal ccmeshparameters key_stride newgrid key_stride EQ 0: ccmeshparameters key_gridtype NE newgrid key_gridtype: ccmeshparameters key_yreverse NE newgrid key_yreverse: ccmeshparameters key_zreverse NE newgrid key_zreverse: ccmeshparameters key_partialstep NE newgrid key_partialstep: ccmeshparameters key_onearth NE newgrid key_onearth: ELSE:return 0 endcase return 1 end"); 199 a[197] = new Array("./ToBeReviewed/GRILLE/decoupeterre.html", "decoupeterre.pro", "", " file_comments Similar to grille Here when vargrid is not T or W we have to recuperate Tmask glamt gphit and the array of triangulation on the considerated subdomain for the drawing The specificity of decoupeterre in comparaison with grille is that we take if possible a subdomain just a little bit bigger than the one defined by domdef in order to be sure that the mask we draw will cover over all the drawing categories utilities keyword TRI This keyword serve to obtain thanks to grille the triangulation which refer to the grid but only on the part of the zoom This of triangulation is passed in the variable we have equate at TRI For example: grille tri triangulation_reduite This keyword is used in plt pro keyword WDEPTH To specify that the field is at W depth instad of T depth automatically activated if vargrid eq W uses common pro history Sebastien Masson smasson lodyc jussieu fr 24 2 99 version Id todo seb : manque tous les param et plein de keywords PRO decoupeterre mask glam gphi gdep TYPE type TRI tri INDICEZOOM indicezoom COINMONTE coinmonte COINDESCEND coindescend WDEPTH wdepth REALSECTION realsection USETRI usetri _extra ex compile_opt idl2 strictarrsubs cm_4mesh cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF tempsun systime 1 For key_performance if vargrid EQ W then wdepth 1 horizontal parameters if possible extent the domain according to the grid type default case case vargrid of U :BEGIN firstx 0 min firstxt firstxu 1 lastx max lastxt lastxu 1 min firstyt firstyu 1 lasty max lastyt lastyu 1 min firstxt firstxv 1 lastx max lastxt lastxv 1 min firstyt firstyv 1 lasty max lastyt lastyv 1 min firstxt firstxf 1 lastx max lastxt lastxf 1 min firstyt firstyf 1 lasty max lastyt lastyf 1 firstx 1 :lastx firsty:lasty ELSE glam glamu 0 firstx 1 :lastx firsty:lasty ENDELSE END yz :BEGIN if keyword_set realsection EQ 0 then begin if vargrid EQ U OR vargrid EQ F then gphi gphiu firstx:lastx firsty:lasty ENDIF ELSE BEGIN to drawsectionbottom if vargrid EQ U OR vargrid EQ F OR finite gphiv 0 EQ 0 then gphi gphif firstx:lastx 0 firsty 1 :lasty ELSE gphi gphiv firstx:lastx 0 firsty 1 :lasty ENDELSE END ELSE: ENDCASE vertical boundaries if keyword_set wdepth then begin firstz 0 min firstzt firstzw 1 lastz max lastzt lastzw 1 jpk 1 ENDIF ELSE BEGIN firstz firstzt lastz lastzt ENDELSE nz lastz firstz 1 mask case type of xy :BEGIN mask tmask firstx:lastx firsty:lasty firstz profond firstz NE 0 END for the verical section we have to choose the right mask according to the grid point and to the direction of the section xz :BEGIN if vargrid EQ V OR vargrid EQ F then begin mask vmask firstx:lastx firstyv:lastyv firstz:lastz ENDIF ELSE mask tmask firstx:lastx firsty:lasty firstz:lastz END yz :BEGIN if vargrid EQ U OR vargrid EQ F then begin mask umask firstxu:lastxu firsty:lasty firstz:lastz ENDIF ELSE mask tmask firstx:lastx firsty:lasty firstz:lastz END ELSE:mask tmask firstx:lastx firsty:lasty firstz:lastz endcase vertical axis when we do a real section we directly plot the gdepw in drawsectionbottom pro instead of contouring the mask at 0 5 at gdept IF keyword_set realsection EQ 0 then gdep gdept firstz:lastz ELSE BEGIN if lastz EQ jpk 1 then we add some fictive very deep level that will not be used but that is necessary to avoid array size bugs in draw bottom section gdep gdepw firstz 1:lastz 2 gdept jpk 1 ELSE gdep gdepw firstz 1:lastz 1 gdep gdepw firstz:lastz special case when we are using the partial steps in the vertical section that are only 1 point wide in that case the z axis is a 2d array and we modify the depth of the last level ocean with hdepw that is the real depth of the bottom CASE 1 OF keyword_set key_partialstep and type EQ xz AND ny EQ 1 AND keyword_set realsection :BEGIN bottom total mask 3 good where bottom NE 0 AND bottom NE nz 1 bottom lindgen nx bottom nx IF good 0 NE 1 THEN BEGIN bottom bottom good gdep replicate 1 nx gdep truegdep hdepw firstx:lastx firsty:lasty gdep bottom truegdep good ENDIF END keyword_set key_partialstep and type EQ yz AND nx EQ 1 AND keyword_set realsection :BEGIN bottom total mask 3 good where bottom NE 0 AND bottom NE nz 1 bottom lindgen ny bottom ny IF good 0 NE 1 THEN BEGIN bottom bottom good gdep replicate 1 ny gdep truegdep hdepw firstx:lastx firsty:lasty gdep bottom truegdep good ENDIF END ELSE: ENDCASE ENDELSE Triangulation vector when TRI is activated IF arg_present TRI then if triangles_list 0 EQ 1 OR usetri LT 1 then tri 1 ELSE BEGIN If we are tracing a deep level we redo the triangulation if keyword_set profond then begin tri triangule mask coinmonte coinmonte coindescend coindescend _extra ex indicezoom lindgen jpi jpj firstx:lastx firsty:lasty ENDIF ELSE BEGIN Otherwise we recuperate the part of triangulation that interest us and we number them well if nx EQ jpi AND ny EQ jpj then tri triangles_list ELSE BEGIN msk bytarr jpi jpj msk firstx:lastx firsty:lasty 1 ind where msk triangles_list 0 EQ 1 AND msk triangles_list 1 EQ 1 AND msk triangles_list 2 EQ 1 tri triangles_list ind firstx firsty jpi y tri jpi x tri y jpi tri x y nx ENDELSE ENDELSE ENDELSE if keyword_set key_performance THEN print temps decoupeterre systime 1 tempsun return end ");200 a[198] = new Array("./ToBeReviewed/GRILLE/domdef.html", "domdef.pro", "", " file_comments Allows to extract a subdomain of study by providing parameters needed for drawings see outputs categories param Z1 in optional For a 3d domain whose the horizontal part cover all glam param Z2 in optional For a 3d domain whose the horizontal part cover all gphi param X1 in optional Define the minimum longitude All levels are selected param X2 in optional Define the maximum longitude All levels are selected param Y1 in optional Define the minimum latitude All levels are selected param Y2 in optional Define the maximum latitude All levels are selected keyword ENDPOINTS A four elements vector x1 y1 x2 y2 used to specify that domdef must define the box used to make a plot pltz pltt plt1d done strictly along the line that can have any direction starting at x1 y1 ending at x2 y2 When defining endpoints you must also define TYPE which define the type of plots pltz xt yt zt x y z t will used ENDPOINTS keywords keyword FINDALWAYS Force to redefine a box even when none point is find in the box In this case we select all the grid keyword GRIDTYPE It is a string or a vector of strings containing the grids s name Only determinated by T U V W F for which the calculation must be done For example: T ou T U keyword MEMEINDICES It is possible that points t u v and F correspond to a same geographic box which do not concern the same array indexes This is sometimes a problem or at least serious complications in programs where several type of grid interven see norme curl Activate MEMEINDICE to force domdef to take same indexes those of the grid T for all other grids keyword INDEX We activate it if we want that all elements passed in input of domdef refer to indexes of glam gphi and gdep arrays rather than to values of these arrays keyword XINDEX We activate it if we want that all elements passed in input of domdef and concerning the X dimension refer to indexes of glam arrays rather than to values of these arrays keyword YINDEX We activate it if we want that all elements passed in input of domdef and concerning the X dimension refer to indexes of gphi arrays rather than to values of these arrays keyword ZINDEX We activate it if we want that all elements passed in input of domdef and concerning the X dimension refer to indexes of gdep arrays rather than to values of these arrays OUTPUTS:on recupere pour les 4 grilles t u v f nxt u v:entier qui contient le nombre de pts en longitude de la grille reduite au domaine nyt u v:entier qui contient le nombre de pts en latitude de la grille reduite au domaine nzt w:entier qui contient le nombre de pts en profondeur de la grille reduite au domaine 3D firstxt u v f: le first indice qui delimite le sous domaine suivant x firstyt u v f: le first indice qui delimite le sous domaine suivant y firstzt w: le first indice qui delimite le sous domaine suivant z lastxt u v f: le last indice qui delimite le sous domaine suivant x lastyt u v f: le last indice qui delimite le sous domaine suivant y lastzt w: le last indice qui delimite le sous domaine suivant z uses common pro history Sebastien Masson smasson lodyc jussieu fr 8 2 98 rewrite everything debug and spee up Sebastien Masson April 2005 version Id todo seb: output pas clair pas d input required pro domdef x1 x2 y1 y2 z1 z2 FINDALWAYS findalways GRIDTYPE gridtype MEMEINDICES memeindices XINDEX xindex YINDEX yindex ZINDEX zindex ENDPOINTS endpoints TYPE type INDEX index _extra ex include commons compile_opt idl2 strictarrsubs cm_4mesh IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 For key_performance CASE N_PARAMS OF 0: 1: 2: 4: 6: ELSE:BEGIN ras report Bad number of parameter in the call of domdef RETURN END ENDCASE IF keyword_set endpoints THEN BEGIN IF NOT keyword_set type THEN BEGIN dummy report If domdef is used do find the box associated to endpoints you must also specify type keyword return ENDIF CASE N_PARAMS OF 0: 1:boxzoom x1 2:boxzoom x1 x2 4:boxzoom x1 x2 y1 y2 6:boxzoom x1 x2 y1 y2 z1 z2 ENDCASE section BOXZOOM boxzoom ENDPOINTS endpoints TYPE type ONLYBOX return ENDIF recall domdef when there is only one input parameter IF N_PARAMS EQ 1 THEN BEGIN CASE n_elements x1 OF 2:domdef x1 0 x1 1 FINDALWAYS findalways GRIDTYPE gridtype MEMEINDICES memeindices XINDEX xindex YINDEX yindex ZINDEX zindex INDEX index _extra ex 4:domdef x1 0 x1 1 x1 2 x1 3 FINDALWAYS findalways GRIDTYPE gridtype MEMEINDICES memeindices XINDEX xindex YINDEX yindex ZINDEX zindex INDEX index _extra ex 6:domdef x1 0 x1 1 x1 2 x1 3 x1 4 x1 5 FINDALWAYS findalways GRIDTYPE gridtype MEMEINDICES memeindices XINDEX xindex YINDEX yindex ZINDEX zindex INDEX index _extra ex ELSE:BEGIN ras report Bad number of elements in x1 RETURN END ENDCASE RETURN ENDIF default definitions and checks IF NOT keyword_set gridtype THEN gridtype T U V W F ELSE gridtype strupcase gridtype IF keyword_set memeindices THEN gridtype T gridtype IF finite glamu 0 eq 0 THEN gridtype gridtype where gridtype NE U IF finite glamv 0 eq 0 THEN gridtype gridtype where gridtype NE V default definitions lon1t 99999 lon2t 99999 lat1t 99999 lat2t 99999 lon1u 99999 lon2u 99999 lat1u 99999 lat2u 99999 lon1v 99999 lon2v 99999 lat1v 99999 lat2v 99999 lon1f 99999 lon2f 99999 lat1f 99999 lat2f 99999 vert1t 99999 vert2t 99999 vert1w 99999 vert2w 99999 IF jpj EQ 1 THEN BEGIN IF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1 THEN BEGIN glamt reform glamt jpi jpj over gphit reform gphit jpi jpj over ENDIF IF where gridtype eq U 0 NE 1 THEN BEGIN glamu reform glamu jpi jpj over gphiu reform gphiu jpi jpj over ENDIF IF where gridtype eq V 0 NE 1 THEN BEGIN glamv reform glamv jpi jpj over gphiv reform gphiv jpi jpj over ENDIF IF where gridtype eq F 0 NE 1 THEN BEGIN glamf reform glamf jpi jpj over gphif reform gphif jpi jpj over ENDIF ENDIF IF N_PARAMS EQ 2 THEN GOTO vertical define all horizontal parameters lon1 et lon2 lat1 et lat2 firstx tuvf lastx tuvf nx tuvf check if the grid is defined for U and V points If not take care of the cases gridtype eq U or V errstatus 0 IF finite glamu 0 gphiu 0 EQ 0 OR n_elements glamu EQ 0 OR n_elements gphiu EQ 0 AND where gridtype eq U 0 NE 1 THEN BEGIN firstxu values f_nan lastxu values f_nan nxu values f_nan okgrid where gridtype NE U count IF count NE 0 THEN gridtype gridtype okgrid ELSE errstatus report U grid is undefined Impossible to call domdef with vargid U ENDIF IF finite glamv 0 gphiv 0 EQ 0 OR n_elements glamv EQ 0 OR n_elements gphiv EQ 0 AND where gridtype eq V 0 NE 1 THEN BEGIN firstxv values f_nan lastxv values f_nan nxv values f_nan okgrid where gridtype NE V count IF count NE 0 THEN gridtype gridtype okgrid ELSE errstatus report V grid is undefined Impossible to call domdef with vargid V ENDIF IF errstatus EQ 1 THEN return horizontal domain defined with lon1 lon2 lat1 and lat2 IF N_PARAMS EQ 0 OR N_PARAMS EQ 4 OR N_PARAMS EQ 6 AND NOT keyword_set xindex AND NOT keyword_set yindex AND NOT keyword_set index THEN BEGIN IF N_PARAMS EQ 0 THEN BEGIN find lon1 and lon2 the longitudinal boudaries of the full domain IF where gridtype eq T 0 NE 1 THEN lon1t min glamt max lon2t IF where gridtype eq W 0 NE 1 AND where gridtype eq T 0 EQ 1 THEN lon1t min glamt max lon2t IF where gridtype eq U 0 NE 1 THEN lon1u min glamu max lon2u IF where gridtype eq V 0 NE 1 THEN lon1v min glamv max lon2v IF where gridtype eq F 0 NE 1 THEN lon1f min glamf max lon2f lon1 min lon1t lon1u lon1v lon1f lon2 max lon2t lon2u lon2v lon2f find lat1 and lat2 the latitudinal boudaries of the full domain IF where gridtype eq T 0 NE 1 THEN lat1t min gphit max lat2t IF where gridtype eq W 0 NE 1 AND where gridtype eq T 0 EQ 1 THEN lat1t min gphit max lat2t IF where gridtype eq U 0 NE 1 THEN lat1u min gphiu max lat2u IF where gridtype eq V 0 NE 1 THEN lat1v min gphiv max lat2v IF where gridtype eq F 0 NE 1 THEN lat1f min gphif max lat2f lat1 min lat1t lat1u lat1v lat1f lat2 max lat2t lat2u lat2v lat2f ENDIF ELSE BEGIN lon1 min x1 x2 max lon2 lat1 min y1 y2 max lat2 ENDELSE find firstxt firstxt nxt and nyt according to lon1 lon2 lat1 and lat2 IF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1 THEN BEGIN dom where glamt GE lon1 AND glamt LE lon2 AND gphit GE lat1 AND gphit LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN print WARNING empty T points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamt gphit sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamt gphit sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamt neig1 max glamt neig2 min gphit neig1 max gphit neig2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex 6:domdef min glamt neig1 max glamt neig2 min gphit neig1 max gphit neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex ENDCASE RETURN ENDIF ELSE BEGIN ras report WARNING The box does not contain any T points firstxt 1 lastxt 1 nxt 0 firstyt 1 lastyt 1 nyt 0 ENDELSE ENDIF ELSE BEGIN jyt dom jpi ixt temporary dom MOD jpi firstxt min temporary ixt max lastxt firstyt min temporary jyt max lastyt nxt lastxt firstxt 1 nyt lastyt firstyt 1 ENDELSE ENDIF find firstxu firstxu firstyu firstyu nxu and nyu according to lon1 lon2 lat1 and lat2 IF where gridtype eq U 0 NE 1 THEN BEGIN IF keyword_set memeindices THEN BEGIN firstxu firstxt lastxu lastxt nxu nxt firstyu firstyt lastyu lastyt nyu nyt ENDIF ELSE BEGIN dom where glamu GE lon1 AND glamu LE lon2 AND gphiu GE lat1 AND gphiu LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN if t grid parameters alreday defined we use them CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty U points box we use the same index as T points firstxu firstxt lastxu lastxt nxu nxt firstyu firstyt lastyu lastyt nyu nyt END ELSE:BEGIN print WARNING empty U points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamu gphiu sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamu gphiu sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamu neig1 max glamu neig2 min gphiu neig1 max gphiu neig2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex 6:domdef min glamu neig1 max glamu neig2 min gphiu neig1 max gphiu neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any U points firstxu 1 lastxu 1 nxu 0 firstyu 1 lastyu 1 nyu 0 ENDELSE ENDIF ELSE BEGIN jyu dom jpi ixu temporary dom MOD jpi firstxu min temporary ixu max lastxu firstyu min temporary jyu max lastyu nxu lastxu firstxu 1 nyu lastyu firstyu 1 ENDELSE ENDELSE ENDIF find firstxv firstxv firstyv firstyv nxv and nyv according to lon1 lon2 lat1 and lat2 IF where gridtype eq V 0 NE 1 THEN BEGIN IF keyword_set memeindices THEN BEGIN firstxv firstxt lastxv lastxt nxv nxt firstyv firstyt lastyv lastyt nyv nyt ENDIF ELSE BEGIN dom where glamv GE lon1 AND glamv LE lon2 AND gphiv GE lat1 AND gphiv LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty V points box we use the same index as T points firstxv firstxt lastxv lastxt nxv nxt firstyv firstyt lastyv lastyt nyv nyt END where gridtype eq U 0 NE 1:BEGIN print WARNING empty V points box we use the same index as U points firstxv firstxu lastxv lastxu nxv nxu firstyv firstyu lastyv lastyu nyv nyu END ELSE:BEGIN print WARNING empty V points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamv gphiv sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamv gphiv sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamv neig1 max glamv neig2 min gphiv neig1 max gphiv neig2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex 6:domdef min glamv neig1 max glamv neig2 min gphiv neig1 max gphiv neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any V points firstxv 1 lastxv 1 nxv 0 firstyv 1 lastyv 1 nyv 0 ENDELSE ENDIF ELSE BEGIN jyv dom jpi ixv temporary dom MOD jpi firstxv min temporary ixv max lastxv firstyv min temporary jyv max lastyv nxv lastxv firstxv 1 nyv lastyv firstyv 1 ENDELSE ENDELSE ENDIF find firstxf firstxf firstyf firstyf nxf and nyf according to lon1 lon2 lat1 and lat2 IF where gridtype eq F 0 NE 1 THEN BEGIN IF keyword_set memeindices THEN BEGIN firstxf firstxt lastxf lastxt nxf nxt firstyf firstyt lastyf lastyt nyf nyt ENDIF ELSE BEGIN dom where glamf GE lon1 AND glamf LE lon2 AND gphif GE lat1 AND gphif LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty F points box we use the same index as T points firstxf firstxt lastxf lastxt nxf nxt firstyf firstyt lastyf lastyt nyf nyt END where gridtype eq U 0 NE 1:BEGIN print WARNING empty F points box we use the same index as U points firstxf firstxu lastxf lastxu nxf nxu firstyf firstyu lastyf lastyu nyf nyu END where gridtype eq V 0 NE 1:BEGIN print WARNING empty F points box we use the same index as V points firstxf firstxv lastxf lastxv nxf nxv firstyf firstyv lastyf lastyv nyf nyv END ELSE:BEGIN print WARNING empty F points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamf gphif sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamf gphif sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamf neig1 max glamf neig2 min gphif neig1 max gphif neig2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex 6:domdef min glamf neig1 max glamf neig2 min gphif neig1 max gphif neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any F points firstxf 1 lastxf 1 nxf 0 firstyf 1 lastyf 1 nyf 0 ENDELSE ENDIF ELSE BEGIN jyf dom jpi ixf temporary dom MOD jpi firstxf min temporary ixf max lastxf firstyf min temporary jyf max lastyf nxf lastxf firstxf 1 nyf lastyf firstyf 1 ENDELSE ENDELSE ENDIF ENDIF ELSE BEGIN CASE 1 OF horizontal domain defined with the X and Y indexes keyword_set xindex AND keyword_set yindex OR keyword_set index :BEGIN fstx min x1 x2 max lstx fsty min y1 y2 max lsty IF fstx LT 0 OR lstx GE jpi THEN BEGIN ras report Bad definition of X1 or X2 return ENDIF IF fsty LT 0 OR lsty GE jpj THEN BEGIN ras report Bad definition of Y1 or Y2 return ENDIF nx lstx fstx 1 ny lsty fsty 1 find lon1t lon2t lat1t lat2t firstxt firstxt nxt and nyt according to x1 x2 y1 y2 IF where gridtype eq T 0 NE 1 OR where gridtype eq W 0 NE 1 THEN BEGIN lon1t min glamt fstx:lstx fsty:lsty max lon2t lat1t min gphit fstx:lstx fsty:lsty max lat2t firstxt fstx lastxt lstx firstyt fsty lastyt lsty nxt nx nyt ny ENDIF find lon1u lon2u lat1u lat2u firstxu firstxu nxu and nyu according to x1 x2 y1 y2 IF where gridtype eq U 0 NE 1 THEN BEGIN lon1u min glamu fstx:lstx fsty:lsty max lon2u lat1u min gphiu fstx:lstx fsty:lsty max lat2u firstxu fstx lastxu lstx firstyu fsty lastyu lsty nxu nx nyu ny ENDIF find lon1v lon2v lat1v lat2v firstxv firstxv nxv and nyv according to x1 x2 y1 y2 IF where gridtype eq V 0 NE 1 THEN BEGIN lon1v min glamv fstx:lstx fsty:lsty max lon2v lat1v min gphiv fstx:lstx fsty:lsty max lat2v firstxv fstx lastxv lstx firstyv fsty lastyv lsty nxv nx nyv ny ENDIF find lon1f lon2f lat1f lat2f firstxf firstxf nxf and nyf according to x1 x2 y1 y2 IF where gridtype eq F 0 NE 1 THEN BEGIN lon1f min glamf fstx:lstx fsty:lsty max lon2f lat1f min gphif fstx:lstx fsty:lsty max lat2f firstxf fstx lastxf lstx firstyf fsty lastyf lsty nxf nx nyf ny ENDIF lon1 min lon1t lon1u lon1v lon1f lon2 max lon2t lon2u lon2v lon2f lat1 min lat1t lat1u lat1v lat1f lat2 max lat2t lat2u lat2v lat2f END horizontal domain defined with the X index and lat1 lat2 keyword_set xindex :BEGIN fstx min x1 x2 max lstx IF fstx LT 0 OR lstx GE jpi THEN BEGIN ras report Bad definition of X1 or X2 return ENDIF nx lstx fstx 1 lat1 min y1 y2 max lat2 find lon1t lon2t firstxt firstxt firstyt firstyt nxt and nyt according to x1 x2 lat1 and lat2 IF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1 THEN BEGIN firstxt fstx lastxt lstx nxt nx dom where gphit fstx:lstx GE lat1 AND gphit fstx:lstx LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN print WARNING empty T points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamt fstx:lstx gphit fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamt fstx:lstx gphit fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef fstx lstx min gphit fstx:lstx neig1 max gphit fstx:lstx neig2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex 6:domdef fstx lstx min gphit fstx:lstx neig1 max gphit fstx:lstx neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex ENDCASE RETURN ENDIF ELSE BEGIN ras report WARNING The box does not contain any T points firstyt 1 lastyt 1 nyt 0 ENDELSE ENDIF ELSE BEGIN jyt temporary dom nx firstyt min temporary jyt max lastyt nyt lastyt firstyt 1 ENDELSE IF nyt NE 0 THEN lon1t min glamt firstxt:lastxt firstyt:lastyt max lon2t ENDIF find lon1u lon2u firstxu firstxu firstyu firstyu nxu and nyu according to x1 x2 lat1 and lat2 IF where gridtype eq U 0 NE 1 THEN BEGIN firstxu fstx lastxu lstx nxu nx IF keyword_set memeindices THEN BEGIN firstyu firstyt lastyu lastyt nyu nyt ENDIF ELSE BEGIN dom where gphiu fstx:lstx GE lat1 AND gphiu fstx:lstx LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty U points box we use the same index as T points firstyu firstyt lastyu lastyt nyu nyt END ELSE:BEGIN print WARNING empty U points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamu fstx:lstx gphiu fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamu fstx:lstx gphiu fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef fstx lstx min gphiu fstx:lstx neig1 max gphiu fstx:lstx neig2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex 6:domdef fstx lstx min gphiu fstx:lstx neig1 max gphiu fstx:lstx neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any U points firstyu 1 lastyu 1 nyu 0 ENDELSE ENDIF ELSE BEGIN jyu temporary dom nx firstyu min temporary jyu max lastyu nyu lastyu firstyu 1 ENDELSE ENDELSE IF nyu NE 0 THEN lon1u min glamu firstxu:lastxu firstyu:lastyu max lon2u ENDIF find lon1v lon2v firstxv firstxv firstyv firstyv nxv and nyv according to x1 x2 lat1 and lat2 IF where gridtype eq V 0 NE 1 THEN BEGIN firstxv fstx lastxv lstx nxv nx IF keyword_set memeindices THEN BEGIN firstyv firstyt lastyv lastyt nyv nyt ENDIF ELSE BEGIN dom where gphiv fstx:lstx GE lat1 AND gphiv fstx:lstx LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty V points box we use the same index as T points firstyv firstyt lastyv lastyt nyv nyt END where gridtype eq U 0 NE 1:BEGIN print WARNING empty V points box we use the same index as U points firstyv firstyu lastyv lastyu nyv nyu END ELSE:BEGIN print WARNING empty V points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamv fstx:lstx gphiv fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamv fstx:lstx gphiv fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef fstx lstx min gphiv fstx:lstx neig1 max gphiv fstx:lstx neig2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex 6:domdef fstx lstx min gphiv fstx:lstx neig1 max gphiv fstx:lstx neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any V points firstyv 1 lastyv 1 nyv 0 ENDELSE ENDIF ELSE BEGIN jyv temporary dom nx firstyv min temporary jyv max lastyv nyv lastyv firstyv 1 ENDELSE ENDELSE IF nyv NE 0 THEN lon1v min glamv firstxv:lastxv firstyv:lastyv max lon2v ENDIF find lon1f lon2f firstxf firstxf firstyf firstyf nxf and nyf according to x1 x2 lat1 and lat2 IF where gridtype eq F 0 NE 1 THEN BEGIN firstxf fstx lastxf lstx nxf nx IF keyword_set memeindices THEN BEGIN firstyf firstyt lastyf lastyt nyf nyt ENDIF ELSE BEGIN dom where gphif fstx:lstx GE lat1 AND gphif fstx:lstx LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty F points box we use the same index as T points firstyf firstyt lastyf lastyt nyf nyt END where gridtype eq U 0 NE 1:BEGIN print WARNING empty F points box we use the same index as U points firstyf firstyu lastyf lastyu nyf nyu END where gridtype eq V 0 NE 1:BEGIN print WARNING empty F points box we use the same index as V points firstyf firstyv lastyf lastyv nyf nyv END ELSE:BEGIN print WARNING empty F points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamf fstx:lstx gphif fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamf fstx:lstx gphif fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef fstx lstx min gphif fstx:lstx neig1 max gphif fstx:lstx neig2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex 6:domdef fstx lstx min gphif fstx:lstx neig1 max gphif fstx:lstx neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any F points firstyf 1 lastyf 1 nyf 0 ENDELSE ENDIF ELSE BEGIN jyf temporary dom nx firstyf min temporary jyf max lastyf nyf lastyf firstyf 1 ENDELSE ENDELSE IF nyf NE 0 THEN lon1f min glamf firstxf:lastxf firstyf:lastyf max lon2f ENDIF lon1 min lon1t lon1u lon1v lon1f lon2 max lon2t lon2u lon2v lon2f END horizontal domain defined with the Y index and lon1 lon2 keyword_set yindex :BEGIN fsty min y1 y2 max lsty IF fsty LT 0 OR lsty GE jpj THEN BEGIN ras report Bad definition of Y1 or Y2 return ENDIF ny lsty fsty 1 lon1 min x1 x2 max lon2 find lat1t lat2t firstxt firstxt firstyt firstyt nxt and nyt according to x1 x2 lon1 and lon2 IF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1 THEN BEGIN firstyt fsty lastyt lsty nyt ny dom where glamt fsty:lsty GE lon1 AND glamt fsty:lsty LE lon2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN print WARNING empty T points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamt fsty:lsty gphit fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamt fsty:lsty gphit fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamt fsty:lsty neig1 max glamt fsty:lsty neig2 fsty lsty GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex 6:domdef min glamt fsty:lsty neig1 max glamt fsty:lsty neig2 fsty lsty z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex ENDCASE RETURN ENDIF ELSE BEGIN ras report WARNING The box does not contain any T points firstxt 1 lastxt 1 nxt 0 ENDELSE ENDIF ELSE BEGIN jxt temporary dom MOD jpi firstxt min temporary jxt max lastxt nxt lastxt firstxt 1 ENDELSE IF nxt NE 0 THEN lat1t min gphit firstxt:lastxt firstyt:lastyt max lat2t ENDIF find lat1u lat2u firstxu firstxu firstyu firstyu nxu and nyu according to x1 x2 lon1 and lon2 IF where gridtype eq U 0 NE 1 THEN BEGIN firstyu fsty lastyu lsty nyu ny IF keyword_set memeindices THEN BEGIN firstxu firstyt lastxu lastyt nxu nxt ENDIF ELSE BEGIN dom where glamu fsty:lsty GE lon1 AND glamu fsty:lsty LE lon2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty U points box we use the same index as T points firstxu firstxt lastxu lastxt nxu nxt END ELSE:BEGIN print WARNING empty U points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamu fsty:lsty gphiu fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamu fsty:lsty gphiu fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamu fsty:lsty neig1 max glamu fsty:lsty neig2 fsty lsty GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex 6:domdef min glamu fsty:lsty neig1 max glamu fsty:lsty neig2 fsty lsty z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any U points firstxu 1 lastxu 1 nxu 0 ENDELSE ENDIF ELSE BEGIN jxu temporary dom MOD jpi firstxu min temporary jxu max lastxu nxu lastxu firstxu 1 ENDELSE ENDELSE IF nxu NE 0 THEN lat1u min gphiu firstxu:lastxu firstyu:lastyu max lat2u ENDIF find lat1v lat2v firstxv firstxv firstyv firstyv nxv and nyv according to x1 x2 lon1 and lon2 IF where gridtype eq V 0 NE 1 THEN BEGIN firstyv fsty lastyv lsty nyv ny IF keyword_set memeindices THEN BEGIN firstxv firstyt lastxv lastyt nxv nxt ENDIF ELSE BEGIN dom where glamv fsty:lsty GE lon1 AND glamv fsty:lsty LE lon2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty V points box we use the same index as T points firstxv firstxt lastxv lastxt nxv nxt END where gridtype eq U 0 NE 1:BEGIN print WARNING empty V points box we use the same index as U points firstxv firstxu lastxv lastxu nxv nxu END ELSE:BEGIN print WARNING empty V points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamv fsty:lsty gphiv fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamv fsty:lsty gphiv fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamv fsty:lsty neig1 max glamv fsty:lsty neig2 fsty lsty GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex 6:domdef min glamv fsty:lsty neig1 max glamv fsty:lsty neig2 fsty lsty z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any V points firstxv 1 lastxv 1 nxv 0 ENDELSE ENDIF ELSE BEGIN jxv temporary dom MOD jpi firstxv min temporary jxv max lastxv nxv lastxv firstxv 1 ENDELSE ENDELSE IF nxv NE 0 THEN lat1v min gphiv firstxv:lastxv firstyv:lastyv max lat2v ENDIF find lat1f lat2f firstxf firstxf firstyf firstyf nxf and nyf according to x1 x2 lon1 and lon2 IF where gridtype eq F 0 NE 1 THEN BEGIN firstyf fsty lastyf lsty nyf ny IF keyword_set memeindices THEN BEGIN firstxf firstyt lastxf lastyt nxf nxt ENDIF ELSE BEGIN dom where glamf fsty:lsty GE lon1 AND glamf fsty:lsty LE lon2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty F points box we use the same index as T points firstxf firstxt lastxf lastxt nxf nxt END where gridtype eq U 0 NE 1:BEGIN print WARNING empty F points box we use the same index as U points firstxf firstxu lastxf lastxu nxf nxu END where gridtype eq V 0 NE 1:BEGIN print WARNING empty F points box we use the same index as V points firstxf firstxv lastxf lastxv nxf nxv END ELSE:BEGIN print WARNING empty F points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamf fsty:lsty gphif fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamf fsty:lsty gphif fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamf fsty:lsty neig1 max glamf fsty:lsty neig2 fsty lsty GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex 6:domdef min glamf fsty:lsty neig1 max glamf fsty:lsty neig2 fsty lsty z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any F points firstxf 1 lastyf 1 nxf 0 ENDELSE ENDIF ELSE BEGIN jxf temporary dom MOD jpi firstxf min temporary jxf max lastxf nxf lastxf firstxf 1 ENDELSE ENDELSE IF nxf NE 0 THEN lat1f min gphif firstxf:lastxf firstyf:lastyf max lat2f ENDIF lat1 min lat1t lat1u lat1v lat1f lat2 max lat2t lat2u lat2v lat2f END ENDCASE ENDELSE The extracted domain is it regular or not CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype eq W 0 NE 1 AND nxt NE 0 AND nyt NE 0:BEGIN to get faster we first test the most basic cases befor testing the full array CASE 0 OF array_equal glamt firstxt:lastxt firstyt glamt firstxt:lastxt lastyt :key_irregular 1b array_equal gphit firstxt firstyt:lastyt gphit lastxt firstyt:lastyt :key_irregular 1b array_equal glamt firstxt:lastxt firstyt:lastyt glamt firstxt:lastxt firstyt replicate 1 nyt :key_irregular 1b array_equal gphit firstxt:lastxt firstyt:lastyt replicate 1 nxt gphit firstxt firstyt:lastyt :key_irregular 1b ELSE:key_irregular 0b ENDCASE END where gridtype eq U 0 NE 1 AND nxu NE 0 AND nyu NE 0:BEGIN CASE 0 OF array_equal glamu firstxu:lastxu firstyu glamu firstxu:lastxu lastyu :key_irregular 1b array_equal gphiu firstxu firstyu:lastyu gphiu lastxu firstyu:lastyu :key_irregular 1b array_equal glamu firstxu:lastxu firstyu:lastyu glamu firstxu:lastxu firstyu replicate 1 nyu :key_irregular 1b array_equal gphiu firstxu:lastxu firstyu:lastyu replicate 1 nxu gphiu firstxu firstyu:lastyu :key_irregular 1b ELSE:key_irregular 0b ENDCASE END where gridtype eq V 0 NE 1 AND nxv NE 0 AND nyv NE 0:BEGIN CASE 0 OF array_equal glamv firstxv:lastxv firstyv glamv firstxv:lastxv lastyv :key_irregular 1b array_equal gphiv firstxv firstyv:lastyv gphiv lastxv firstyv:lastyv :key_irregular 1b array_equal glamv firstxv:lastxv firstyv:lastyv glamv firstxv:lastxv firstyv replicate 1 nyv :key_irregular 1b array_equal gphiv firstxv:lastxv firstyv:lastyv replicate 1 nxv gphiv firstxv firstyv:lastyv :key_irregular 1b ELSE:key_irregular 0b ENDCASE END where gridtype eq F 0 NE 1 AND nxf NE 0 AND nyf NE 0:BEGIN CASE 0 OF array_equal glamf firstxf:lastxf firstyf glamf firstxf:lastxf lastyf :key_irregular 1b array_equal gphif firstxf firstyf:lastyf gphif lastxf firstyf:lastyf :key_irregular 1b array_equal glamf firstxf:lastxf firstyf:lastyf glamf firstxf:lastxf firstyf replicate 1 nyf :key_irregular 1b array_equal gphif firstxf:lastxf firstyf:lastyf replicate 1 nxf gphif firstxf firstyf:lastyf :key_irregular 1b ELSE:key_irregular 0b ENDCASE END ELSE: ENDCASE define all vertical parameters vert1 vert2 firstz tw lastz tw nz tw vertical: vertical domain defined with vert1 vert2 IF NOT keyword_set zindex OR keyword_set index THEN BEGIN define vert1 et vert2 CASE N_PARAMS OF 2:vert1 min x1 x2 max vert2 6:vert1 min z1 z2 max vert2 ELSE:BEGIN IF inter byte gridtype byte T U V F 0 NE 1 THEN vert1t min gdept max vert2t IF where gridtype eq W 0 NE 1 AND n_elements gdepw NE 0 THEN vert1w min gdepw max vert2w vert1 min vert1t vert1w vert2 max vert2t vert2w END ENDCASE define firstzt firstzt nzt IF inter byte gridtype byte T U V F 0 NE 1 THEN BEGIN domz where gdept ge vert1 and gdept le vert2 nzt IF nzt NE 0 THEN BEGIN firstzt domz 0 lastzt domz nzt 1 ENDIF ELSE BEGIN ras report WARNING The box does not contain any T level firstzt 1 lastzt 1 ENDELSE ENDIF define firstzw firstzw nzw IF where gridtype eq W 0 NE 1 AND n_elements gdepw NE 0 THEN BEGIN IF keyword_set memeindices THEN BEGIN firstzw firstzt lastzw lastzt nzw nzt ENDIF ELSE BEGIN domz where gdepw ge vert1 and gdepw le vert2 nzw IF nzw NE 0 THEN BEGIN firstzw domz 0 lastzw domz nzw 1 ENDIF ELSE BEGIN ras report WARNING The box does not contain any W level firstzw 1 lastzw 1 ENDELSE ENDELSE ENDIF vertical domain defined with the Z index ENDIF ELSE BEGIN CASE N_PARAMS OF 2:fstz min x1 x2 max lstz 4:return 6:fstz min z1 z2 max lstz ENDCASE IF fstz LT 0 OR lstz GE jpk THEN BEGIN ras report Bad definition of X1 X2 Z1 or Z2 return ENDIF nz lstz fstz 1 find vert1t vert2t firstzt firstzt nzt according to x1 x2 or z1 z2 IF where gridtype eq T 0 NE 1 THEN BEGIN vert1t min gdept fstz:lstz max vert2t firstzt fstz lastzt lstz nzt nz ENDIF find vert1w vert2w firstzw firstzw nzw according to x1 x2 or z1 z2 IF where gridtype eq W 0 NE 1 AND n_elements gdepw NE 0 THEN BEGIN vert1w min gdepw fstz:lstz max vert2w firstzw fstz lastzw lstz nzw nz ENDIF vert1 min vert1t vert1w vert2 max vert2t vert2w ENDELSE IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF if keyword_set key_performance THEN print temps domdef systime 1 tempsun return end");201 a[199] = new Array("./ToBeReviewed/GRILLE/f2v.html", "f2v.pro", "", " file_comments Allows to pass a field refering to the grid F on the grid V thanks to the average: res 0 5 res shift res 1 0 categories Grille param TEMP in required A 2 3 or 4d array returns res a 2 3 or 4d array uses common pro restrictions Force parameters of the zoom on the grid V to be the same as those on the grid T restrictions Points which can not be calculated are put at the value NaN consecrated by IDL: values f_nan history From Marina Levy s programs Sebastien Masson smasson lodyc jussieu fr : Validation 5 6 2000 version Id FUNCTION f2v temp compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF res temp We force nxt nxf etc firstxv firstxf lastxv lastxf firstyv firstyf lastyv lastyf nxv nxf nyv nyf vargrid V if NOT keyword_set valmask then valmask 1e20 lon1 glamv firstxv 0 lon2 glamf lastxf 0 case on tha array s size and application taille size temp CASE taille 0 OF 1: res 1 2: BEGIN case 1 of taille 1 eq nxf and taille 2 eq nyf: taille 1 eq jpi and taille 2 eq jpj: res res firstxf:lastxf firstyf:lastyf else: return report Probleme d adequation entre les tailles du domaine et de la boite endcase mask fmask firstxf:lastxf firstyf:lastyf 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre values f_nan res 0 5 res shift res 1 0 if NOT keyword_set key_periodic AND nxf EQ jpi then res 0 values f_nan mask vmask firstxf:lastxf firstyf:lastyf 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre valmask END 3: BEGIN case 1 of taille 1 eq nxf and taille 2 eq nyf AND taille 3 EQ nzt: taille 1 eq nxf and taille 2 eq nyf AND taille 3 EQ jpk: res res firstzt:lastzt taille 1 eq nxf and taille 2 eq nyf AND taille 3 EQ jpt: taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk: res res firstxf:lastxf firstyf:lastyf firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpt: res res firstxf:lastxf firstyf:lastyf else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE if taille 3 EQ jpt then begin mask fmask firstxf:lastxf firstyf:lastyf lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxf nyf jpt over ENDIF ELSE mask fmask firstxf:lastxf firstyf:lastyf firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 1 0 0 if NOT keyword_set key_periodic AND nxf EQ jpi then res 0 values f_nan if taille 3 EQ jpt then BEGIN mask tmask firstxf:lastxf firstyf:lastyf lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxf nyf jpt over ENDIF ELSE mask vmask firstxf:lastxf firstyf:lastyf firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END 4: BEGIN case 1 of taille 1 eq nxf and taille 2 eq nyf AND taille 3 EQ nzt AND taille 4 EQ jpt: taille 1 eq nxf and taille 2 eq nyf AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstxf:lastxf firstyf:lastyf firstzt:lastzt else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE mask fmask firstxf:lastxf firstyf:lastyf firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxf nyf nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 1 0 0 0 if NOT keyword_set key_periodic AND nxf EQ jpi then res 0 values f_nan mask vmask firstxf:lastxf firstyf:lastyf firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxf nyf nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END endcase IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return res END ");202 a[200] = new Array("./ToBeReviewed/GRILLE/fmask.html", "fmask.pro", "", " file_comments calculate fmask Economize memory we do not need to keep fmask anymore categories Utilities returns A 3d array corresponding to fmask examples Used like if fmask was a known array by substituing fmask by fmask For example: Instaed of write fmask domainef we have to write fmask domainef history Sebastien Masson smasson lodyc jussieu fr 11 12 98 version Id FUNCTION fmask compile_opt idl2 strictarrsubs cm_4mesh IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF tempsun systime 1 For key_performance CASE size tmask n_dimensions OF 2:res tmask shift tmask 1 0 shift tmask 0 1 shift tmask 1 1 3:res tmask shift tmask 1 0 0 shift tmask 0 1 0 shift tmask 1 1 0 ENDCASE if NOT keyword_set key_periodic then res jpi 1 fmaskredy res jpj 1 fmaskredx if keyword_set key_performance THEN print temps fmask systime 1 tempsun return res end");203 a[201] = new Array("./ToBeReviewed/GRILLE/grille.html", "grille.pro", "", " file_comments Choose the grid which must be used to do the graph in function of vargrid and send back corresponding parameters calculated in domdef pro and reduced at the domain defined by domdef contrarily to grandegrille pro BEWARE The choice of the grid is made from the value of the global variable vargrid which can be equal to T U V W ou F categories keyword TRI This keyword serve to obtain thanks to grille the triangulation which refer to the grid but only on the part of the zoom This of triangulation is passed in the variable we have equate at TRI For example: grille tri triangulation_reduite This keyword is used in plt pro keyword WDEPTH To specify that the field is at W depth instad of T depth automatically activated if vargrid eq W keyword FORPLT In plt we want that land points glam and gphi be equal to glamt and gphit regardless of the grid keyword NOTRI Useful only when TRI is activated In this case grill send back 1 in the variable tri even if the variable of the common triangles_list is defined and different of 1 keyword _EXTRA Used to pass your keywords keyword TOUT param MASK out optional For the definition see domdef and the management of subdomains on the web param GLAM out optional For the definition see domdef and the management of subdomains on the web param GPHI out optional For the definition see domdef and the management of subdomains on the web param GDEP out optional For the definition see domdef and the management of subdomains on the web param NX out optional For the definition see domdef and the management of subdomains on the web param NY out optional For the definition see domdef and the management of subdomains on the web param NZ out optional For the definition see domdef and the management of subdomains on the web param FIRSTX out optional For the definition see domdef and the management of subdomains on the web param FIRSTY out optional For the definition see domdef and the management of subdomains on the web param FIRSTZ out optional For the definition see domdef and the management of subdomains on the web param LASTX out optional For the definition see domdef and the management of subdomains on the web param LASTY out optional For the definition see domdef and the management of subdomains on the web param LASTZ out optional For the definition see domdef and the management of subdomains on the web param E1 out optional For the definition see domdef and the management of subdomains on the web param E2 out optional For the definition see domdef and the management of subdomains on the web param E3 out optional For the definition see domdef and the management of subdomains on the web uses cm_4mesh cm_4data restrictions Use the variable vargrid restrictions Vargrid must be T W U V ou F history Sebastien Masson smasson lodyc jussieu fr 12 2 1999 10 11 1999 forplt version Id todo Comment ecrire la remarque sur les inputs pro grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz e1 e2 e3 TRI tri NOTRI notri TOUT tout FORPLT forplt IFPLTZ ifpltz WDEPTH wdepth _EXTRA ex include commons compile_opt idl2 strictarrsubs cm_4mesh cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF tempsun systime 1 For key_performance vargrid strupcase strmid vargrid 0 reverse_offset if vargrid eq W then wdepth 1 if keyword_set tout then begin savedbox 1b saveboxparam boxparam4grille dat domdef gridtype vargrid _EXTRA ex endif tempdeux systime 1 For key_performance 2 IF keyword_set wdepth THEN BEGIN firstz firstzw lastz lastzw nz nzw ENDIF ELSE BEGIN firstz firstzt lastz lastzt nz nzt ENDELSE CASE 1 OF grid T and W vargrid eq T OR vargrid eq W : begin scalars nx nxt ny nyt firstx firstxt firsty firstyt lastx lastxt lasty lastyt 2d vectors IF arg_present glam THEN glam glamt firstx:lastx firsty:lasty IF arg_present gphi THEN gphi gphit firstx:lastx firsty:lasty IF arg_present e1 THEN e1 e1t firstx:lastx firsty:lasty IF arg_present e2 THEN e2 e2t firstx:lastx firsty:lasty 3d vectors IF keyword_set forplt THEN mask tmask firstx:lastx firsty:lasty firstz ELSE IF arg_present mask THEN mask tmask firstx:lastx firsty:lasty firstz:lastz end grid U vargrid eq U : begin scalars nx nxu ny nyu firstx firstxu firsty firstyu lastx lastxu lasty lastyu 2d vectors IF arg_present glam THEN glam glamu firstx:lastx firsty:lasty IF arg_present gphi THEN gphi gphiu firstx:lastx firsty:lasty if keyword_set forplt then BEGIN mask 1b tmask firstx:lastx firsty:lasty firstz eastboarder mask shift mask 1 0 mask westboarder mask shift mask 1 0 mask if key_periodic NE 1 OR nx NE jpi then westboarder nx 1 0b tmp1 shift eastboarder 0 1 tmp1 0 0b tmp2 shift eastboarder 0 1 tmp2 ny 1 0b add temporary tmp1 temporary tmp2 1b eastboarder 1b temporary westboarder eastboarder temporary eastboarder temporary add tmp1 mask shift mask 0 1 shift mask 0 1 NE 1b tmp1 ny 1 1b tmp1 0 1b tmp2 mask shift mask 1 0 shift mask 1 0 NE 1b if key_periodic NE 1 OR nx NE jpi then begin tmp2 nx 1 1b tmp2 0 0b endif no1 temporary tmp1 temporary tmp2 tmp temporary eastboarder temporary no1 mask mask 0:nx 2 0b tmp temporary tmp temporary mask tmp where tmp GE 1 if tmp 0 NE 1 then begin glam tmp glamt firstx:lastx firsty:lasty tmp gphi tmp gphit firstx:lastx firsty:lasty tmp endif ENDIF IF arg_present e1 THEN e1 e1u firstx:lastx firsty:lasty IF arg_present e2 THEN e2 e2u firstx:lastx firsty:lasty 3d vectors IF keyword_set forplt THEN mask umask firstx:lastx firsty:lasty firstz ELSE IF arg_present mask THEN mask umask firstx:lastx firsty:lasty firstz:lastz end grid V vargrid eq OPAPTDHV or vargrid eq OPAPT3DV or vargrid eq V : begin scalars nx nxv ny nyv firstx firstxv firsty firstyv lastx lastxv lasty lastyv 2d vectors IF arg_present glam THEN glam glamv firstx:lastx firsty:lasty IF arg_present gphi THEN gphi gphiv firstx:lastx firsty:lasty if keyword_set forplt then BEGIN mask 1b tmask firstx:lastx firsty:lasty firstz northboarder mask shift mask 0 1 mask southboarder mask shift mask 0 1 mask southboarder ny 1 0b tmp1 shift northboarder 1 0 if key_periodic NE 1 OR nx NE jpi then tmp1 nx 1 0b tmp2 shift northboarder 1 0 if key_periodic NE 1 OR nx NE jpi then tmp2 0 0b add temporary tmp1 temporary tmp2 1b northboarder 1b southboarder northboarder temporary northboarder temporary add tmp1 mask shift mask 0 1 shift mask 0 1 NE 1b tmp1 ny 1 1b tmp1 0 0b tmp2 mask shift mask 1 0 shift mask 1 0 NE 1b if key_periodic NE 1 OR nx NE jpi then begin tmp2 nx 1 1b tmp2 0 1b endif no1 temporary tmp1 temporary tmp2 tmp temporary northboarder mask temporary no1 mask 0:ny 2 0b tmp temporary tmp temporary mask tmp where tmp GE 1 if tmp 0 NE 1 then begin glam tmp glamt firstx:lastx firsty:lasty tmp gphi tmp gphit firstx:lastx firsty:lasty tmp endif ENDIF IF arg_present e1 THEN e1 e1v firstx:lastx firsty:lasty IF arg_present e2 THEN e2 e2v firstx:lastx firsty:lasty 3d vecteurs IF keyword_set forplt THEN mask vmask firstx:lastx firsty:lasty firstz ELSE IF arg_present mask THEN mask vmask firstx:lastx firsty:lasty firstz:lastz end grid F vargrid eq OPAPTDHF or vargrid eq OPAPT3DF or vargrid eq F : begin scalars nx nxf ny nyf firstx firstxf firsty firstyf lastx lastxf lasty lastyf 2d vectors IF arg_present glam THEN glam glamf firstx:lastx firsty:lasty IF arg_present gphi THEN gphi gphif firstx:lastx firsty:lasty if keyword_set forplt then BEGIN mask 1b tmask firstx:lastx firsty:lasty firstz eastboarder mask shift mask 1 0 mask westboarder mask shift mask 1 0 mask westboarder nx 1 0b northboarder mask shift mask 0 1 mask southboarder mask shift mask 0 1 mask southboarder ny 1 0b tmp1 shift northboarder 1 0 if key_periodic NE 1 OR nx NE jpi then tmp1 nx 1 0b tmp2 shift northboarder 1 0 if key_periodic NE 1 OR nx NE jpi then tmp2 0 0b add temporary tmp1 temporary tmp2 1b northboarder 1b southboarder northboarder temporary northboarder temporary add tmp1 shift eastboarder 0 1 tmp1 0 0b tmp2 shift eastboarder 0 1 tmp2 ny 1 0b add temporary tmp1 temporary tmp2 1b eastboarder 1b temporary westboarder eastboarder temporary eastboarder temporary add tmp1 mask shift mask 0 1 shift mask 0 1 NE 1b tmp1 ny 1 1b tmp1 0 1b tmp2 mask shift mask 1 0 shift mask 1 0 NE 1b if key_periodic NE 1 OR nx NE jpi then begin tmp2 nx 1 1b tmp2 0 1b endif no1 temporary tmp1 temporary tmp2 tmp temporary northboarder temporary eastboarder mask temporary no1 mask 0:nx 2 0b mask 0:ny 2 0b tmp temporary tmp temporary mask tmp where tmp GE 1 if tmp 0 NE 1 then begin glam tmp glamt firstx:lastx firsty:lasty tmp gphi tmp gphit firstx:lastx firsty:lasty tmp endif ENDIF IF arg_present e1 THEN e1 e1f firstx:lastx firsty:lasty IF arg_present e2 THEN e2 e2f firstx:lastx firsty:lasty 3d vectors IF keyword_set forplt THEN mask fmask firstx:lastx firsty:lasty firstz ELSE IF arg_present mask THEN mask fmask firstx:lastx firsty:lasty firstz:lastz END ELSE:BEGIN ras report Wrong definition of vargrid vargrid Only T U V W or F are acceptable stop END ENDCASE IF testvar var key_performance EQ 2 THEN print temps grille: attribution des scalaires vecteurs et tableaux systime 1 tempdeux Variables refering to the vertical dimension tempdeux systime 1 For key_performance 2 if keyword_set wdepth then begin gdep gdepw firstz:lastz e3 e3w firstz:lastz endif else begin gdep gdept firstz:lastz e3 e3t firstz:lastz ENDELSE for the vertical sections with partial steps IF keyword_set ifpltz AND keyword_set key_partialstep THEN BEGIN CASE 1 OF ifpltz EQ xz AND ny EQ 1:BEGIN bottom total tmask firstx:lastx firsty:lasty firstz:lastz 3 good where bottom NE 0 AND bottom NE nz keyword_set wdepth bottom lindgen nx bottom 1l keyword_set wdepth nx IF good 0 NE 1 THEN BEGIN bottom bottom good IF lastz EQ jpk 1 THEN gdep nz 1 max hdepw gdep replicate 1 nx gdep if keyword_set wdepth THEN truegdep hdepw firstx:lastx firsty:lasty ELSE truegdep hdept firstx:lastx firsty:lasty gdep bottom truegdep good ENDIF END ifpltz EQ yz AND nx EQ 1:BEGIN bottom total tmask firstx:lastx firsty:lasty firstz:lastz 3 good where bottom NE 0 AND bottom NE nz keyword_set wdepth bottom lindgen ny bottom 1l keyword_set wdepth ny IF good 0 NE 1 THEN BEGIN bottom bottom good IF lastz EQ jpk 1 THEN gdep nz 1 max hdepw gdep replicate 1 ny gdep if keyword_set wdepth THEN truegdep hdepw firstx:lastx firsty:lasty ELSE truegdep hdept firstx:lastx firsty:lasty gdep bottom truegdep good ENDIF END ELSE: ENDCASE ENDIF IF testvar var key_performance EQ 2 THEN print temps grille: Variables se rapportant a la dimension verticale systime 1 tempdeux Triangulation vector when TRI is activated if arg_present TRI then if triangles_list 0 EQ 1 OR keyword_set notri then tri 1 ELSE BEGIN tempdeux systime 1 pour key_performance 2 msk bytarr jpi jpj msk firstx:lastx firsty:lasty 1 ind where msk triangles_list 0 msk triangles_list 1 msk triangles_list 2 EQ 1 tri triangles_list ind firstx firsty jpi y tri jpi x tri y jpi tri x y nx IF testvar var key_performance EQ 2 THEN print temps grille: decoupage de la triangulation systime 1 tempdeux ENDELSE To make sure there is not any degenerated dimension 1 mask reform mask over glam reform glam over gphi reform gphi over gdep reform gdep over e1 reform e1 over e2 reform e2 over e3 reform e3 over if keyword_set savedbox THEN restoreboxparam boxparam4grille dat if keyword_set key_performance THEN print temps grille systime 1 tempsun IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return end ");204 a[202] = new Array("./ToBeReviewed/GRILLE/t2v.html", "t2v.pro", "", " file_comments Allows to pass a field refering to the grid T on the grid V thanks to the average res 0 5 res shift res 0 1 categories Grille param TEMP in required A 2 3 or 4d array returns res a 2 3 or 4d array uses common pro restrictions Force parameters of the zoom on the grid V to be the same as those on the grid T restrictions Points which can not be calculated are put at the value NaN consecrated by IDL: values f_nan history From Marina Levy s programs Sebastien Masson smasson lodyc jussieu fr : Validation 5 6 2000 version Id FUNCTION t2v temp compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF res temp We force nxt nxv etc firstxv firstxt lastxv lastxt firstyv firstyt lastyv lastyt nxv nxt nyv nyt vargrid V if NOT keyword_set valmask then valmask 1e20 lat1 gphit 0 firstyt lat2 gphiv 0 lastyv case on tha array s size and application taille size temp CASE taille 0 OF 1: res 1 2: BEGIN case 1 of taille 1 eq nxt and taille 2 eq nyt: taille 1 eq jpi and taille 2 eq jpj: res res firstxt:lastxt firstyt:lastyt else: return report Probleme d adequation entre les tailles du domaine et de la boite endcase mask tmask firstxt:lastxt firstyt:lastyt 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre values f_nan res 0 5 res shift res 0 1 res nyt 1 values f_nan mask vmask firstxt:lastxt firstyt:lastyt 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre valmask END 3: BEGIN case 1 of taille 1 eq nxt and taille 2 eq nyt AND taille 3 EQ nzt: taille 1 eq nxt and taille 2 eq nyt AND taille 3 EQ jpk: res res firstzt:lastzt taille 1 eq nxt and taille 2 eq nyt AND taille 3 EQ jpt: taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk: res res firstxt:lastxt firstyt:lastyt firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpt: res res firstxt:lastxt firstyt:lastyt else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE if taille 3 EQ jpt then begin mask tmask firstxt:lastxt firstyt:lastyt lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxt nyt jpt over ENDIF ELSE mask tmask firstxt:lastxt firstyt:lastyt firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 0 1 0 res nyt 1 values f_nan if taille 3 EQ jpt then BEGIN mask vmask firstxt:lastxt firstyt:lastyt lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxt nyt jpt over ENDIF ELSE mask vmask firstxt:lastxt firstyt:lastyt firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END 4: BEGIN case 1 of taille 1 eq nxt and taille 2 eq nyt AND taille 3 EQ nzt AND taille 4 EQ jpt: taille 1 eq nxt and taille 2 eq nyt AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstxt:lastxt firstyt:lastyt firstzt:lastzt else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE mask tmask firstxt:lastxt firstyt:lastyt firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxt nyt nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 0 1 0 0 res nyt 1 values f_nan mask vmask firstxt:lastxt firstyt:lastyt firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxt nyt nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END ENDCASE IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return res END ");205 a[203] = new Array("./ToBeReviewed/GRILLE/tracegrille.html", "tracegrille.pro", "", " file_comments Draw the grid categories param GLAMIN in required The 1d or 2d array in longitude of points of the grid If GLAM GLAMIN is not specified it trace the grid specified by vargrid on the domain defined by domdef param GPHIIN in required The 1d or 2d array in latitude of points of the grid If GPHI GPHIIN is not specified it trace the grid specified by vargrid on the domain defined by domdef keyword XSTRIDE It is an integer to specify that we want to trace only one line of constant i every xstride points keyword YSTRIDE It is an integer to specify that we want to trace only one line of constant j every xstride points keyword OCEAN To trace the grid only on ocean points keyword EARTH To trace the grid only on land points pour ne tracer la grille que sur les points terre keyword RMOUT Select to remove all cell having one corner out of the plot boundaries x range y range keyword _EXTRA Used to pass your keywords uses common pro examples IDL plt indgen jpi jpj nocontour nofill IDL vargrid T IDL tracegrille ocean color 20 IDL tracegrille earth color 80 history Sebastien Masson smasson lodyc jussieu fr version Id PRO tracegrille glamin gphiin OCEAN ocean EARTH earth XSTRIDE xstride YSTRIDE ystride RMOUT rmout _extra extra compile_opt idl2 strictarrsubs cm_4mesh cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF tempsun systime 1 For key_performance to avoid warning message oldexcept except except 0 if n_elements key_gridtype EQ 0 then key_gridtype c if n_elements glamin n_elements gphiin EQ 0 then BEGIN grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz IF keyword_set ocean AND key_gridtype EQ c THEN BEGIN we reduce the mask to take into account the point located ON the coastline CASE vargrid OF U :BEGIN mask tmask firstx:lastx firsty:lasty IF NOT keyword_set key_periodic OR nx NE jpi THEN tmpx mask nx 1 mask mask shift mask 1 0 1 IF NOT keyword_set key_periodic OR nx NE jpi THEN mask nx 1 temporary tmpx END V :BEGIN mask tmask firstx:lastx firsty:lasty tmpy mask ny 1 mask mask shift mask 0 1 1 mask ny 1 temporary tmpy END F :BEGIN mask tmask firstx:lastx firsty:lasty IF NOT keyword_set key_periodic OR nx NE jpi THEN tmpx mask nx 1 tmpy mask ny 1 mask mask shift mask 1 0 shift mask 0 1 shift mask 1 1 1 mask ny 1 temporary tmpy IF NOT keyword_set key_periodic OR nx NE jpi THEN mask nx 1 temporary tmpx END ELSE: ENDCASE ENDIF ENDIF ELSE BEGIN glam glamin gphi gphiin IF size glam 0 EQ 1 AND size gphi 0 EQ 1 THEN BEGIN nx n_elements glam ny n_elements gphi glam glam replicate 1 ny gphi replicate 1 nx gphi ENDIF ELSE BEGIN nx size glam 1 ny size glam 2 ENDELSE ENDELSE if n_elements mask EQ 0 then mask replicate 1b nx ny if size mask 0 EQ 3 then mask mask 0 IF keyword_set RMOUT THEN BEGIN out where glam GT max x range OR glam LT min x range OR gphi GT max y range OR gphi LT min y range IF out 0 NE 1 THEN BEGIN glam out values f_nan gphi out values f_nan ENDIF ENDIF IF keyword_set ocean then BEGIN earth where mask EQ 0 if earth 0 NE 1 then begin glam earth values f_nan gphi earth values f_nan ENDIF earth 0 ENDIF IF keyword_set earth THEN BEGIN ocean where mask EQ 1 if ocean 0 NE 1 then begin glam ocean values f_nan gphi ocean values f_nan ENDIF ocean 0 ENDIF if NOT keyword_set xstride then xstride 1 if NOT keyword_set ystride then ystride 1 case key_gridtype of c :BEGIN for i 0 ny 1 ystride do begin plots glam i gphi i _extra extra endfor for i 0 nx 1 xstride do begin plots glam i gphi i _extra extra endfor END e :BEGIN shifted glam 0 0 LT glam 0 1 glam2 glam glam 1 glam 0 2 if shifted then begin for i 0 ny 2 do BEGIN xx transpose glam i glam2 i yy transpose gphi i gphi i 1 plots xx 0:2 nx 2 yy 0:2 nx 2 _extra extra ENDFOR ENDIF ELSE BEGIN for i 1 ny 1 do BEGIN xx transpose glam i glam2 i yy transpose gphi i gphi i 1 plots xx 0:2 nx 2 yy 0:2 nx 2 _extra extra ENDFOR ENDELSE for i 1 ny 1 2 do plots glam 0 2 i 1 glam 0 2 i gphi 0 2 i 1 gphi 0 2 i _extra extra for i 0 ny 2 2 do plots glam nx 1 2 i glam nx 1 2 i 1 gphi nx 1 2 i gphi nx 1 2 i 1 _extra extra END endcase if keyword_set key_performance THEN print temps trace grille systime 1 tempsun except oldexcept return end");206 a[204] = new Array("./ToBeReviewed/GRILLE/u2t.html", "u2t.pro", "", " file_comments Allows to pass a field refering to the grid U on the grid T thanks to the average: res 0 5 res shift res 1 0 categories Grille param TEMP in required A 2 3 or 4d array returns res a 2 3 or 4d array uses common pro restrictions Force parameters of the zoom on the grid V to be the same as those on the grid T restrictions Points which can not be calculated are put at the value NaN consecrated by IDL: values f_nan history From Marina Levy s programs Sebastien Masson smasson lodyc jussieu fr : Validation 5 6 2000 version Id FUNCTION u2t temp compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF res temp on force nxt nxu etc firstxt firstxu lastxt lastxu firstyt firstyu lastyt lastyu nxt nxu nyt nyu vargrid T if NOT keyword_set valmask then valmask 1e20 lon1 glamt firstxt 0 lon2 glamu lastxu 0 case on tha array s size and application taille size temp CASE taille 0 OF 1: res 1 2: BEGIN case 1 of taille 1 eq nxu and taille 2 eq nyu: taille 1 eq jpi and taille 2 eq jpj: res res firstxu:lastxu firstyu:lastyu else: return report Probleme d adequation entre les tailles du domaine et de la boite endcase mask umask firstxu:lastxu firstyu:lastyu 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre values f_nan res 0 5 res shift res 1 0 if NOT keyword_set key_periodic AND nxu EQ jpi then res 0 values f_nan mask tmask firstxu:lastxu firstyu:lastyu 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre valmask END 3: BEGIN case 1 of taille 1 eq nxu and taille 2 eq nyu AND taille 3 EQ nzt: taille 1 eq nxu and taille 2 eq nyu AND taille 3 EQ jpk: res res firstzt:lastzt taille 1 eq nxu and taille 2 eq nyu AND taille 3 EQ jpt: taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk: res res firstxu:lastxu firstyu:lastyu firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpt: res res firstxu:lastxu firstyu:lastyu else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE if taille 3 EQ jpt then begin mask umask firstxu:lastxu firstyu:lastyu lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxu nyu jpt over ENDIF ELSE mask umask firstxu:lastxu firstyu:lastyu firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 1 0 0 if NOT keyword_set key_periodic AND nxu EQ jpi then res 0 values f_nan if taille 3 EQ jpt then BEGIN mask tmask firstxu:lastxu firstyu:lastyu lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxu nyu jpt over ENDIF ELSE mask tmask firstxu:lastxu firstyu:lastyu firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END 4: BEGIN case 1 of taille 1 eq nxu and taille 2 eq nyu AND taille 3 EQ nzt AND taille 4 EQ jpt: taille 1 eq nxu and taille 2 eq nyu AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstxu:lastxu firstyu:lastyu firstzt:lastzt else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE mask umask firstxu:lastxu firstyu:lastyu firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxu nyu nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 1 0 0 0 if NOT keyword_set key_periodic AND nxu EQ jpi then res 0 values f_nan mask tmask firstxu:lastxu firstyu:lastyu firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxu nyu nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END endcase IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return res END ");207 a[205] = new Array("./ToBeReviewed/GRILLE/umask.html", "umask.pro", "", " file_comments calculate umask Economize memory we do not need to keep umask anymore categories Utilities returns A 3d array corresponding to umask uses common pro examples Used like if umask was a known array by substituing umask by umask For example: Instaed of write umask domainef we have to write umask domainef MODIFICATION HISTORY: Sebastien Masson smasson lodyc jussieu fr 11 12 98 6 99 introduction of the key_shift 20 9 99 cas jpk 1 Thanks to jpblod ipsl jussieu fr version Id FUNCTION umask compile_opt idl2 strictarrsubs cm_4mesh IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF tempsun systime 1 For key_performance CASE size tmask n_dimensions OF 2:res tmask shift tmask 1 0 3:res tmask shift tmask 1 0 0 ENDCASE if NOT keyword_set key_periodic then res jpi 1 umaskred if keyword_set key_performance THEN print temps umask systime 1 tempsun return res end");208 a[206] = new Array("./ToBeReviewed/GRILLE/v2t.html", "v2t.pro", "", " file_comments Allows to pass a field refering to the grid V on the grid T thanks to the average: res 0 5 res shift res 1 0 categories Grille param TEMP in required A 2 3 or 4d array returns res a 2 3 or 4d array uses common pro restrictions Force parameters of the zoom on the grid V to be the same as those on the grid T restrictions Points which can not be calculated are put at the value NaN consecrated by IDL: values f_nan history From Marina Levy s programs Sebastien Masson smasson lodyc jussieu fr : Validation 5 6 2000 version Id todo seb: nom du input FUNCTION v2t temp compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF res temp We force nxt nxv etc firstxt firstxv lastxt lastxv firstyt firstyv lastyt lastyv nxt nxv nyt nyv vargrid T if NOT keyword_set valmask then valmask 1e20 lat1 gphit 0 firstyt lat2 gphiv 0 lastyv case on tha array s size and application taille size temp CASE taille 0 OF 1: res 1 2: BEGIN case 1 of taille 1 eq nxv and taille 2 eq nyv: taille 1 eq jpi and taille 2 eq jpj: res res firstxv:lastxv firstyv:lastyv else: return report Probleme d adequation entre les tailles du domaine et de la boite endcase mask vmask firstxv:lastxv firstyv:lastyv 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre values f_nan res 0 5 res shift res 0 1 res 0 values f_nan mask tmask firstxv:lastxv firstyv:lastyv 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre valmask END 3: BEGIN case 1 of taille 1 eq nxv and taille 2 eq nyv AND taille 3 EQ nzt: taille 1 eq nxv and taille 2 eq nyv AND taille 3 EQ jpk: res res firstzt:lastzt taille 1 eq nxv and taille 2 eq nyv AND taille 3 EQ jpt: taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk: res res firstxv:lastxv firstyv:lastyv firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpt: res res firstxv:lastxv firstyv:lastyv else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE if taille 3 EQ jpt then begin mask vmask firstxv:lastxv firstyv:lastyv lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxv nyv jpt over ENDIF ELSE mask vmask firstxv:lastxv firstyv:lastyv firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 0 1 0 res 0 values f_nan if taille 3 EQ jpt then BEGIN mask tmask firstxv:lastxv firstyv:lastyv lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxv nyv jpt over ENDIF ELSE mask tmask firstxv:lastxv firstyv:lastyv firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END 4: BEGIN case 1 of taille 1 eq nxv and taille 2 eq nyv AND taille 3 EQ nzt AND taille 4 EQ jpt: taille 1 eq nxv and taille 2 eq nyv AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstxv:lastxv firstyv:lastyv firstzt:lastzt else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE mask vmask firstxv:lastxv firstyv:lastyv firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxv nyv nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 0 1 0 0 res 0 values f_nan mask tmask firstxv:lastxv firstyv:lastyv firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxv nyv nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END endcase IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return res END ");209 a[207] = new Array("./ToBeReviewed/GRILLE/vmask.html", "vmask.pro", "", " file_comments calculate fmask Economize memory we do not need to keep vmask anymore categories Utilities returns A 3d array corresponding to vmask examples Used like if vmask was a known array by substituing vmask by vmask For example: Instaed of write vmask domainef we have to write vmask domainef history Sebastien Masson smasson lodyc jussieu fr 11 12 98 20 9 99 cas jpk 1 merci jpblod ipsl jussieu fr version Id FUNCTION vmask compile_opt idl2 strictarrsubs common tempsun systime 1 For key_performance CASE size tmask n_dimensions OF 2:res tmask shift tmask 0 1 3:res tmask shift tmask 0 1 0 ENDCASE res jpj 1 vmaskred if keyword_set key_performance THEN print temps vmask systime 1 tempsun return res end");199 a[197] = new Array("./ToBeReviewed/GRILLE/decoupeterre.html", "decoupeterre.pro", "", " file_comments Similar to grille Here when vargrid is not T or W we have to recuperate Tmask glamt gphit and the array of triangulation on the considerated subdomain for the drawing The specificity of decoupeterre in comparaison with grille is that we take if possible a subdomain just a little bit bigger than the one defined by domdef in order to be sure that the mask we draw will cover over all the drawing categories utilities keyword TRI This keyword serve to obtain thanks to grille the triangulation which refer to the grid but only on the part of the zoom This of triangulation is passed in the variable we have equate at TRI For example: grille tri triangulation_reduite This keyword is used in plt pro keyword WDEPTH To specify that the field is at W depth instad of T depth automatically activated if vargrid eq W uses common pro history Sebastien Masson smasson lodyc jussieu fr 24 2 99 version Id: decoupeterre pro 142 2006 07 21 12:47:49Z navarro todo seb : manque tous les param et plein de keywords PRO decoupeterre mask glam gphi gdep TYPE type TRI tri INDICEZOOM indicezoom COINMONTE coinmonte COINDESCEND coindescend WDEPTH wdepth REALSECTION realsection USETRI usetri _extra ex compile_opt idl2 strictarrsubs cm_4mesh cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF tempsun systime 1 For key_performance if vargrid EQ W then wdepth 1 horizontal parameters if possible extent the domain according to the grid type default case case vargrid of U :BEGIN firstx 0 min firstxt firstxu 1 lastx max lastxt lastxu 1 min firstyt firstyu 1 lasty max lastyt lastyu 1 min firstxt firstxv 1 lastx max lastxt lastxv 1 min firstyt firstyv 1 lasty max lastyt lastyv 1 min firstxt firstxf 1 lastx max lastxt lastxf 1 min firstyt firstyf 1 lasty max lastyt lastyf 1 firstx 1 :lastx firsty:lasty ELSE glam glamu 0 firstx 1 :lastx firsty:lasty ENDELSE END yz :BEGIN if keyword_set realsection EQ 0 then begin if vargrid EQ U OR vargrid EQ F then gphi gphiu firstx:lastx firsty:lasty ENDIF ELSE BEGIN to drawsectionbottom if vargrid EQ U OR vargrid EQ F OR finite gphiv 0 EQ 0 then gphi gphif firstx:lastx 0 firsty 1 :lasty ELSE gphi gphiv firstx:lastx 0 firsty 1 :lasty ENDELSE END ELSE: ENDCASE vertical boundaries if keyword_set wdepth then begin firstz 0 min firstzt firstzw 1 lastz max lastzt lastzw 1 jpk 1 ENDIF ELSE BEGIN firstz firstzt lastz lastzt ENDELSE nz lastz firstz 1 mask case type of xy :BEGIN mask tmask firstx:lastx firsty:lasty firstz profond firstz NE 0 END for the verical section we have to choose the right mask according to the grid point and to the direction of the section xz :BEGIN if vargrid EQ V OR vargrid EQ F then begin mask vmask firstx:lastx firstyv:lastyv firstz:lastz ENDIF ELSE mask tmask firstx:lastx firsty:lasty firstz:lastz END yz :BEGIN if vargrid EQ U OR vargrid EQ F then begin mask umask firstxu:lastxu firsty:lasty firstz:lastz ENDIF ELSE mask tmask firstx:lastx firsty:lasty firstz:lastz END ELSE:mask tmask firstx:lastx firsty:lasty firstz:lastz endcase vertical axis when we do a real section we directly plot the gdepw in drawsectionbottom pro instead of contouring the mask at 0 5 at gdept IF keyword_set realsection EQ 0 then gdep gdept firstz:lastz ELSE BEGIN if lastz EQ jpk 1 then we add some fictive very deep level that will not be used but that is necessary to avoid array size bugs in draw bottom section gdep gdepw firstz 1:lastz 2 gdept jpk 1 ELSE gdep gdepw firstz 1:lastz 1 gdep gdepw firstz:lastz special case when we are using the partial steps in the vertical section that are only 1 point wide in that case the z axis is a 2d array and we modify the depth of the last level ocean with hdepw that is the real depth of the bottom CASE 1 OF keyword_set key_partialstep and type EQ xz AND ny EQ 1 AND keyword_set realsection :BEGIN bottom total mask 3 good where bottom NE 0 AND bottom NE nz 1 bottom lindgen nx bottom nx IF good 0 NE 1 THEN BEGIN bottom bottom good gdep replicate 1 nx gdep truegdep hdepw firstx:lastx firsty:lasty gdep bottom truegdep good ENDIF END keyword_set key_partialstep and type EQ yz AND nx EQ 1 AND keyword_set realsection :BEGIN bottom total mask 3 good where bottom NE 0 AND bottom NE nz 1 bottom lindgen ny bottom ny IF good 0 NE 1 THEN BEGIN bottom bottom good gdep replicate 1 ny gdep truegdep hdepw firstx:lastx firsty:lasty gdep bottom truegdep good ENDIF END ELSE: ENDCASE ENDELSE Triangulation vector when TRI is activated IF arg_present TRI then if triangles_list 0 EQ 1 OR usetri LT 1 then tri 1 ELSE BEGIN If we are tracing a deep level we redo the triangulation if keyword_set profond then begin tri triangule mask coinmonte coinmonte coindescend coindescend _extra ex indicezoom lindgen jpi jpj firstx:lastx firsty:lasty ENDIF ELSE BEGIN Otherwise we recuperate the part of triangulation that interest us and we number them well if nx EQ jpi AND ny EQ jpj then tri triangles_list ELSE BEGIN msk bytarr jpi jpj msk firstx:lastx firsty:lasty 1 ind where msk triangles_list 0 EQ 1 AND msk triangles_list 1 EQ 1 AND msk triangles_list 2 EQ 1 tri triangles_list ind firstx firsty jpi y tri jpi x tri y jpi tri x y nx ENDELSE ENDELSE ENDELSE if keyword_set key_performance THEN print temps decoupeterre systime 1 tempsun return end "); 200 a[198] = new Array("./ToBeReviewed/GRILLE/domdef.html", "domdef.pro", "", " file_comments Allows to extract a subdomain of study by providing parameters needed for drawings see outputs categories param Z1 in optional For a 3d domain whose the horizontal part cover all glam param Z2 in optional For a 3d domain whose the horizontal part cover all gphi param X1 in optional Define the minimum longitude All levels are selected param X2 in optional Define the maximum longitude All levels are selected param Y1 in optional Define the minimum latitude All levels are selected param Y2 in optional Define the maximum latitude All levels are selected keyword ENDPOINTS A four elements vector x1 y1 x2 y2 used to specify that domdef must define the box used to make a plot pltz pltt plt1d done strictly along the line that can have any direction starting at x1 y1 ending at x2 y2 When defining endpoints you must also define TYPE which define the type of plots pltz xt yt zt x y z t will used ENDPOINTS keywords keyword FINDALWAYS Force to redefine a box even when none point is find in the box In this case we select all the grid keyword GRIDTYPE It is a string or a vector of strings containing the grids s name Only determinated by T U V W F for which the calculation must be done For example: T ou T U keyword MEMEINDICES It is possible that points t u v and F correspond to a same geographic box which do not concern the same array indexes This is sometimes a problem or at least serious complications in programs where several type of grid interven see norme curl Activate MEMEINDICE to force domdef to take same indexes those of the grid T for all other grids keyword INDEX We activate it if we want that all elements passed in input of domdef refer to indexes of glam gphi and gdep arrays rather than to values of these arrays keyword XINDEX We activate it if we want that all elements passed in input of domdef and concerning the X dimension refer to indexes of glam arrays rather than to values of these arrays keyword YINDEX We activate it if we want that all elements passed in input of domdef and concerning the X dimension refer to indexes of gphi arrays rather than to values of these arrays keyword ZINDEX We activate it if we want that all elements passed in input of domdef and concerning the X dimension refer to indexes of gdep arrays rather than to values of these arrays OUTPUTS:on recupere pour les 4 grilles t u v f nxt u v:entier qui contient le nombre de pts en longitude de la grille reduite au domaine nyt u v:entier qui contient le nombre de pts en latitude de la grille reduite au domaine nzt w:entier qui contient le nombre de pts en profondeur de la grille reduite au domaine 3D firstxt u v f: le first indice qui delimite le sous domaine suivant x firstyt u v f: le first indice qui delimite le sous domaine suivant y firstzt w: le first indice qui delimite le sous domaine suivant z lastxt u v f: le last indice qui delimite le sous domaine suivant x lastyt u v f: le last indice qui delimite le sous domaine suivant y lastzt w: le last indice qui delimite le sous domaine suivant z uses common pro history Sebastien Masson smasson lodyc jussieu fr 8 2 98 rewrite everything debug and spee up Sebastien Masson April 2005 version Id: domdef pro 142 2006 07 21 12:47:49Z navarro todo seb: output pas clair pas d input required pro domdef x1 x2 y1 y2 z1 z2 FINDALWAYS findalways GRIDTYPE gridtype MEMEINDICES memeindices XINDEX xindex YINDEX yindex ZINDEX zindex ENDPOINTS endpoints TYPE type INDEX index _extra ex include commons compile_opt idl2 strictarrsubs cm_4mesh IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 For key_performance CASE N_PARAMS OF 0: 1: 2: 4: 6: ELSE:BEGIN ras report Bad number of parameter in the call of domdef RETURN END ENDCASE IF keyword_set endpoints THEN BEGIN IF NOT keyword_set type THEN BEGIN dummy report If domdef is used do find the box associated to endpoints you must also specify type keyword return ENDIF CASE N_PARAMS OF 0: 1:boxzoom x1 2:boxzoom x1 x2 4:boxzoom x1 x2 y1 y2 6:boxzoom x1 x2 y1 y2 z1 z2 ENDCASE section BOXZOOM boxzoom ENDPOINTS endpoints TYPE type ONLYBOX return ENDIF recall domdef when there is only one input parameter IF N_PARAMS EQ 1 THEN BEGIN CASE n_elements x1 OF 2:domdef x1 0 x1 1 FINDALWAYS findalways GRIDTYPE gridtype MEMEINDICES memeindices XINDEX xindex YINDEX yindex ZINDEX zindex INDEX index _extra ex 4:domdef x1 0 x1 1 x1 2 x1 3 FINDALWAYS findalways GRIDTYPE gridtype MEMEINDICES memeindices XINDEX xindex YINDEX yindex ZINDEX zindex INDEX index _extra ex 6:domdef x1 0 x1 1 x1 2 x1 3 x1 4 x1 5 FINDALWAYS findalways GRIDTYPE gridtype MEMEINDICES memeindices XINDEX xindex YINDEX yindex ZINDEX zindex INDEX index _extra ex ELSE:BEGIN ras report Bad number of elements in x1 RETURN END ENDCASE RETURN ENDIF default definitions and checks IF NOT keyword_set gridtype THEN gridtype T U V W F ELSE gridtype strupcase gridtype IF keyword_set memeindices THEN gridtype T gridtype IF finite glamu 0 eq 0 THEN gridtype gridtype where gridtype NE U IF finite glamv 0 eq 0 THEN gridtype gridtype where gridtype NE V default definitions lon1t 99999 lon2t 99999 lat1t 99999 lat2t 99999 lon1u 99999 lon2u 99999 lat1u 99999 lat2u 99999 lon1v 99999 lon2v 99999 lat1v 99999 lat2v 99999 lon1f 99999 lon2f 99999 lat1f 99999 lat2f 99999 vert1t 99999 vert2t 99999 vert1w 99999 vert2w 99999 IF jpj EQ 1 THEN BEGIN IF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1 THEN BEGIN glamt reform glamt jpi jpj over gphit reform gphit jpi jpj over ENDIF IF where gridtype eq U 0 NE 1 THEN BEGIN glamu reform glamu jpi jpj over gphiu reform gphiu jpi jpj over ENDIF IF where gridtype eq V 0 NE 1 THEN BEGIN glamv reform glamv jpi jpj over gphiv reform gphiv jpi jpj over ENDIF IF where gridtype eq F 0 NE 1 THEN BEGIN glamf reform glamf jpi jpj over gphif reform gphif jpi jpj over ENDIF ENDIF IF N_PARAMS EQ 2 THEN GOTO vertical define all horizontal parameters lon1 et lon2 lat1 et lat2 firstx tuvf lastx tuvf nx tuvf check if the grid is defined for U and V points If not take care of the cases gridtype eq U or V errstatus 0 IF finite glamu 0 gphiu 0 EQ 0 OR n_elements glamu EQ 0 OR n_elements gphiu EQ 0 AND where gridtype eq U 0 NE 1 THEN BEGIN firstxu values f_nan lastxu values f_nan nxu values f_nan okgrid where gridtype NE U count IF count NE 0 THEN gridtype gridtype okgrid ELSE errstatus report U grid is undefined Impossible to call domdef with vargid U ENDIF IF finite glamv 0 gphiv 0 EQ 0 OR n_elements glamv EQ 0 OR n_elements gphiv EQ 0 AND where gridtype eq V 0 NE 1 THEN BEGIN firstxv values f_nan lastxv values f_nan nxv values f_nan okgrid where gridtype NE V count IF count NE 0 THEN gridtype gridtype okgrid ELSE errstatus report V grid is undefined Impossible to call domdef with vargid V ENDIF IF errstatus EQ 1 THEN return horizontal domain defined with lon1 lon2 lat1 and lat2 IF N_PARAMS EQ 0 OR N_PARAMS EQ 4 OR N_PARAMS EQ 6 AND NOT keyword_set xindex AND NOT keyword_set yindex AND NOT keyword_set index THEN BEGIN IF N_PARAMS EQ 0 THEN BEGIN find lon1 and lon2 the longitudinal boudaries of the full domain IF where gridtype eq T 0 NE 1 THEN lon1t min glamt max lon2t IF where gridtype eq W 0 NE 1 AND where gridtype eq T 0 EQ 1 THEN lon1t min glamt max lon2t IF where gridtype eq U 0 NE 1 THEN lon1u min glamu max lon2u IF where gridtype eq V 0 NE 1 THEN lon1v min glamv max lon2v IF where gridtype eq F 0 NE 1 THEN lon1f min glamf max lon2f lon1 min lon1t lon1u lon1v lon1f lon2 max lon2t lon2u lon2v lon2f find lat1 and lat2 the latitudinal boudaries of the full domain IF where gridtype eq T 0 NE 1 THEN lat1t min gphit max lat2t IF where gridtype eq W 0 NE 1 AND where gridtype eq T 0 EQ 1 THEN lat1t min gphit max lat2t IF where gridtype eq U 0 NE 1 THEN lat1u min gphiu max lat2u IF where gridtype eq V 0 NE 1 THEN lat1v min gphiv max lat2v IF where gridtype eq F 0 NE 1 THEN lat1f min gphif max lat2f lat1 min lat1t lat1u lat1v lat1f lat2 max lat2t lat2u lat2v lat2f ENDIF ELSE BEGIN lon1 min x1 x2 max lon2 lat1 min y1 y2 max lat2 ENDELSE find firstxt firstxt nxt and nyt according to lon1 lon2 lat1 and lat2 IF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1 THEN BEGIN dom where glamt GE lon1 AND glamt LE lon2 AND gphit GE lat1 AND gphit LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN print WARNING empty T points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamt gphit sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamt gphit sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamt neig1 max glamt neig2 min gphit neig1 max gphit neig2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex 6:domdef min glamt neig1 max glamt neig2 min gphit neig1 max gphit neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex ENDCASE RETURN ENDIF ELSE BEGIN ras report WARNING The box does not contain any T points firstxt 1 lastxt 1 nxt 0 firstyt 1 lastyt 1 nyt 0 ENDELSE ENDIF ELSE BEGIN jyt dom jpi ixt temporary dom MOD jpi firstxt min temporary ixt max lastxt firstyt min temporary jyt max lastyt nxt lastxt firstxt 1 nyt lastyt firstyt 1 ENDELSE ENDIF find firstxu firstxu firstyu firstyu nxu and nyu according to lon1 lon2 lat1 and lat2 IF where gridtype eq U 0 NE 1 THEN BEGIN IF keyword_set memeindices THEN BEGIN firstxu firstxt lastxu lastxt nxu nxt firstyu firstyt lastyu lastyt nyu nyt ENDIF ELSE BEGIN dom where glamu GE lon1 AND glamu LE lon2 AND gphiu GE lat1 AND gphiu LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN if t grid parameters alreday defined we use them CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty U points box we use the same index as T points firstxu firstxt lastxu lastxt nxu nxt firstyu firstyt lastyu lastyt nyu nyt END ELSE:BEGIN print WARNING empty U points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamu gphiu sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamu gphiu sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamu neig1 max glamu neig2 min gphiu neig1 max gphiu neig2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex 6:domdef min glamu neig1 max glamu neig2 min gphiu neig1 max gphiu neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any U points firstxu 1 lastxu 1 nxu 0 firstyu 1 lastyu 1 nyu 0 ENDELSE ENDIF ELSE BEGIN jyu dom jpi ixu temporary dom MOD jpi firstxu min temporary ixu max lastxu firstyu min temporary jyu max lastyu nxu lastxu firstxu 1 nyu lastyu firstyu 1 ENDELSE ENDELSE ENDIF find firstxv firstxv firstyv firstyv nxv and nyv according to lon1 lon2 lat1 and lat2 IF where gridtype eq V 0 NE 1 THEN BEGIN IF keyword_set memeindices THEN BEGIN firstxv firstxt lastxv lastxt nxv nxt firstyv firstyt lastyv lastyt nyv nyt ENDIF ELSE BEGIN dom where glamv GE lon1 AND glamv LE lon2 AND gphiv GE lat1 AND gphiv LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty V points box we use the same index as T points firstxv firstxt lastxv lastxt nxv nxt firstyv firstyt lastyv lastyt nyv nyt END where gridtype eq U 0 NE 1:BEGIN print WARNING empty V points box we use the same index as U points firstxv firstxu lastxv lastxu nxv nxu firstyv firstyu lastyv lastyu nyv nyu END ELSE:BEGIN print WARNING empty V points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamv gphiv sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamv gphiv sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamv neig1 max glamv neig2 min gphiv neig1 max gphiv neig2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex 6:domdef min glamv neig1 max glamv neig2 min gphiv neig1 max gphiv neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any V points firstxv 1 lastxv 1 nxv 0 firstyv 1 lastyv 1 nyv 0 ENDELSE ENDIF ELSE BEGIN jyv dom jpi ixv temporary dom MOD jpi firstxv min temporary ixv max lastxv firstyv min temporary jyv max lastyv nxv lastxv firstxv 1 nyv lastyv firstyv 1 ENDELSE ENDELSE ENDIF find firstxf firstxf firstyf firstyf nxf and nyf according to lon1 lon2 lat1 and lat2 IF where gridtype eq F 0 NE 1 THEN BEGIN IF keyword_set memeindices THEN BEGIN firstxf firstxt lastxf lastxt nxf nxt firstyf firstyt lastyf lastyt nyf nyt ENDIF ELSE BEGIN dom where glamf GE lon1 AND glamf LE lon2 AND gphif GE lat1 AND gphif LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty F points box we use the same index as T points firstxf firstxt lastxf lastxt nxf nxt firstyf firstyt lastyf lastyt nyf nyt END where gridtype eq U 0 NE 1:BEGIN print WARNING empty F points box we use the same index as U points firstxf firstxu lastxf lastxu nxf nxu firstyf firstyu lastyf lastyu nyf nyu END where gridtype eq V 0 NE 1:BEGIN print WARNING empty F points box we use the same index as V points firstxf firstxv lastxf lastxv nxf nxv firstyf firstyv lastyf lastyv nyf nyv END ELSE:BEGIN print WARNING empty F points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamf gphif sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamf gphif sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamf neig1 max glamf neig2 min gphif neig1 max gphif neig2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex 6:domdef min glamf neig1 max glamf neig2 min gphif neig1 max gphif neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any F points firstxf 1 lastxf 1 nxf 0 firstyf 1 lastyf 1 nyf 0 ENDELSE ENDIF ELSE BEGIN jyf dom jpi ixf temporary dom MOD jpi firstxf min temporary ixf max lastxf firstyf min temporary jyf max lastyf nxf lastxf firstxf 1 nyf lastyf firstyf 1 ENDELSE ENDELSE ENDIF ENDIF ELSE BEGIN CASE 1 OF horizontal domain defined with the X and Y indexes keyword_set xindex AND keyword_set yindex OR keyword_set index :BEGIN fstx min x1 x2 max lstx fsty min y1 y2 max lsty IF fstx LT 0 OR lstx GE jpi THEN BEGIN ras report Bad definition of X1 or X2 return ENDIF IF fsty LT 0 OR lsty GE jpj THEN BEGIN ras report Bad definition of Y1 or Y2 return ENDIF nx lstx fstx 1 ny lsty fsty 1 find lon1t lon2t lat1t lat2t firstxt firstxt nxt and nyt according to x1 x2 y1 y2 IF where gridtype eq T 0 NE 1 OR where gridtype eq W 0 NE 1 THEN BEGIN lon1t min glamt fstx:lstx fsty:lsty max lon2t lat1t min gphit fstx:lstx fsty:lsty max lat2t firstxt fstx lastxt lstx firstyt fsty lastyt lsty nxt nx nyt ny ENDIF find lon1u lon2u lat1u lat2u firstxu firstxu nxu and nyu according to x1 x2 y1 y2 IF where gridtype eq U 0 NE 1 THEN BEGIN lon1u min glamu fstx:lstx fsty:lsty max lon2u lat1u min gphiu fstx:lstx fsty:lsty max lat2u firstxu fstx lastxu lstx firstyu fsty lastyu lsty nxu nx nyu ny ENDIF find lon1v lon2v lat1v lat2v firstxv firstxv nxv and nyv according to x1 x2 y1 y2 IF where gridtype eq V 0 NE 1 THEN BEGIN lon1v min glamv fstx:lstx fsty:lsty max lon2v lat1v min gphiv fstx:lstx fsty:lsty max lat2v firstxv fstx lastxv lstx firstyv fsty lastyv lsty nxv nx nyv ny ENDIF find lon1f lon2f lat1f lat2f firstxf firstxf nxf and nyf according to x1 x2 y1 y2 IF where gridtype eq F 0 NE 1 THEN BEGIN lon1f min glamf fstx:lstx fsty:lsty max lon2f lat1f min gphif fstx:lstx fsty:lsty max lat2f firstxf fstx lastxf lstx firstyf fsty lastyf lsty nxf nx nyf ny ENDIF lon1 min lon1t lon1u lon1v lon1f lon2 max lon2t lon2u lon2v lon2f lat1 min lat1t lat1u lat1v lat1f lat2 max lat2t lat2u lat2v lat2f END horizontal domain defined with the X index and lat1 lat2 keyword_set xindex :BEGIN fstx min x1 x2 max lstx IF fstx LT 0 OR lstx GE jpi THEN BEGIN ras report Bad definition of X1 or X2 return ENDIF nx lstx fstx 1 lat1 min y1 y2 max lat2 find lon1t lon2t firstxt firstxt firstyt firstyt nxt and nyt according to x1 x2 lat1 and lat2 IF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1 THEN BEGIN firstxt fstx lastxt lstx nxt nx dom where gphit fstx:lstx GE lat1 AND gphit fstx:lstx LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN print WARNING empty T points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamt fstx:lstx gphit fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamt fstx:lstx gphit fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef fstx lstx min gphit fstx:lstx neig1 max gphit fstx:lstx neig2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex 6:domdef fstx lstx min gphit fstx:lstx neig1 max gphit fstx:lstx neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex ENDCASE RETURN ENDIF ELSE BEGIN ras report WARNING The box does not contain any T points firstyt 1 lastyt 1 nyt 0 ENDELSE ENDIF ELSE BEGIN jyt temporary dom nx firstyt min temporary jyt max lastyt nyt lastyt firstyt 1 ENDELSE IF nyt NE 0 THEN lon1t min glamt firstxt:lastxt firstyt:lastyt max lon2t ENDIF find lon1u lon2u firstxu firstxu firstyu firstyu nxu and nyu according to x1 x2 lat1 and lat2 IF where gridtype eq U 0 NE 1 THEN BEGIN firstxu fstx lastxu lstx nxu nx IF keyword_set memeindices THEN BEGIN firstyu firstyt lastyu lastyt nyu nyt ENDIF ELSE BEGIN dom where gphiu fstx:lstx GE lat1 AND gphiu fstx:lstx LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty U points box we use the same index as T points firstyu firstyt lastyu lastyt nyu nyt END ELSE:BEGIN print WARNING empty U points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamu fstx:lstx gphiu fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamu fstx:lstx gphiu fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef fstx lstx min gphiu fstx:lstx neig1 max gphiu fstx:lstx neig2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex 6:domdef fstx lstx min gphiu fstx:lstx neig1 max gphiu fstx:lstx neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any U points firstyu 1 lastyu 1 nyu 0 ENDELSE ENDIF ELSE BEGIN jyu temporary dom nx firstyu min temporary jyu max lastyu nyu lastyu firstyu 1 ENDELSE ENDELSE IF nyu NE 0 THEN lon1u min glamu firstxu:lastxu firstyu:lastyu max lon2u ENDIF find lon1v lon2v firstxv firstxv firstyv firstyv nxv and nyv according to x1 x2 lat1 and lat2 IF where gridtype eq V 0 NE 1 THEN BEGIN firstxv fstx lastxv lstx nxv nx IF keyword_set memeindices THEN BEGIN firstyv firstyt lastyv lastyt nyv nyt ENDIF ELSE BEGIN dom where gphiv fstx:lstx GE lat1 AND gphiv fstx:lstx LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty V points box we use the same index as T points firstyv firstyt lastyv lastyt nyv nyt END where gridtype eq U 0 NE 1:BEGIN print WARNING empty V points box we use the same index as U points firstyv firstyu lastyv lastyu nyv nyu END ELSE:BEGIN print WARNING empty V points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamv fstx:lstx gphiv fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamv fstx:lstx gphiv fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef fstx lstx min gphiv fstx:lstx neig1 max gphiv fstx:lstx neig2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex 6:domdef fstx lstx min gphiv fstx:lstx neig1 max gphiv fstx:lstx neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any V points firstyv 1 lastyv 1 nyv 0 ENDELSE ENDIF ELSE BEGIN jyv temporary dom nx firstyv min temporary jyv max lastyv nyv lastyv firstyv 1 ENDELSE ENDELSE IF nyv NE 0 THEN lon1v min glamv firstxv:lastxv firstyv:lastyv max lon2v ENDIF find lon1f lon2f firstxf firstxf firstyf firstyf nxf and nyf according to x1 x2 lat1 and lat2 IF where gridtype eq F 0 NE 1 THEN BEGIN firstxf fstx lastxf lstx nxf nx IF keyword_set memeindices THEN BEGIN firstyf firstyt lastyf lastyt nyf nyt ENDIF ELSE BEGIN dom where gphif fstx:lstx GE lat1 AND gphif fstx:lstx LE lat2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty F points box we use the same index as T points firstyf firstyt lastyf lastyt nyf nyt END where gridtype eq U 0 NE 1:BEGIN print WARNING empty F points box we use the same index as U points firstyf firstyu lastyf lastyu nyf nyu END where gridtype eq V 0 NE 1:BEGIN print WARNING empty F points box we use the same index as V points firstyf firstyv lastyf lastyv nyf nyv END ELSE:BEGIN print WARNING empty F points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamf fstx:lstx gphif fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamf fstx:lstx gphif fstx:lstx sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef fstx lstx min gphif fstx:lstx neig1 max gphif fstx:lstx neig2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex 6:domdef fstx lstx min gphif fstx:lstx neig1 max gphif fstx:lstx neig2 z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices XINDEX ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any F points firstyf 1 lastyf 1 nyf 0 ENDELSE ENDIF ELSE BEGIN jyf temporary dom nx firstyf min temporary jyf max lastyf nyf lastyf firstyf 1 ENDELSE ENDELSE IF nyf NE 0 THEN lon1f min glamf firstxf:lastxf firstyf:lastyf max lon2f ENDIF lon1 min lon1t lon1u lon1v lon1f lon2 max lon2t lon2u lon2v lon2f END horizontal domain defined with the Y index and lon1 lon2 keyword_set yindex :BEGIN fsty min y1 y2 max lsty IF fsty LT 0 OR lsty GE jpj THEN BEGIN ras report Bad definition of Y1 or Y2 return ENDIF ny lsty fsty 1 lon1 min x1 x2 max lon2 find lat1t lat2t firstxt firstxt firstyt firstyt nxt and nyt according to x1 x2 lon1 and lon2 IF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1 THEN BEGIN firstyt fsty lastyt lsty nyt ny dom where glamt fsty:lsty GE lon1 AND glamt fsty:lsty LE lon2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN print WARNING empty T points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamt fsty:lsty gphit fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamt fsty:lsty gphit fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamt fsty:lsty neig1 max glamt fsty:lsty neig2 fsty lsty GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex 6:domdef min glamt fsty:lsty neig1 max glamt fsty:lsty neig2 fsty lsty z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex ENDCASE RETURN ENDIF ELSE BEGIN ras report WARNING The box does not contain any T points firstxt 1 lastxt 1 nxt 0 ENDELSE ENDIF ELSE BEGIN jxt temporary dom MOD jpi firstxt min temporary jxt max lastxt nxt lastxt firstxt 1 ENDELSE IF nxt NE 0 THEN lat1t min gphit firstxt:lastxt firstyt:lastyt max lat2t ENDIF find lat1u lat2u firstxu firstxu firstyu firstyu nxu and nyu according to x1 x2 lon1 and lon2 IF where gridtype eq U 0 NE 1 THEN BEGIN firstyu fsty lastyu lsty nyu ny IF keyword_set memeindices THEN BEGIN firstxu firstyt lastxu lastyt nxu nxt ENDIF ELSE BEGIN dom where glamu fsty:lsty GE lon1 AND glamu fsty:lsty LE lon2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty U points box we use the same index as T points firstxu firstxt lastxu lastxt nxu nxt END ELSE:BEGIN print WARNING empty U points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamu fsty:lsty gphiu fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamu fsty:lsty gphiu fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamu fsty:lsty neig1 max glamu fsty:lsty neig2 fsty lsty GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex 6:domdef min glamu fsty:lsty neig1 max glamu fsty:lsty neig2 fsty lsty z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any U points firstxu 1 lastxu 1 nxu 0 ENDELSE ENDIF ELSE BEGIN jxu temporary dom MOD jpi firstxu min temporary jxu max lastxu nxu lastxu firstxu 1 ENDELSE ENDELSE IF nxu NE 0 THEN lat1u min gphiu firstxu:lastxu firstyu:lastyu max lat2u ENDIF find lat1v lat2v firstxv firstxv firstyv firstyv nxv and nyv according to x1 x2 lon1 and lon2 IF where gridtype eq V 0 NE 1 THEN BEGIN firstyv fsty lastyv lsty nyv ny IF keyword_set memeindices THEN BEGIN firstxv firstyt lastxv lastyt nxv nxt ENDIF ELSE BEGIN dom where glamv fsty:lsty GE lon1 AND glamv fsty:lsty LE lon2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty V points box we use the same index as T points firstxv firstxt lastxv lastxt nxv nxt END where gridtype eq U 0 NE 1:BEGIN print WARNING empty V points box we use the same index as U points firstxv firstxu lastxv lastxu nxv nxu END ELSE:BEGIN print WARNING empty V points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamv fsty:lsty gphiv fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamv fsty:lsty gphiv fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamv fsty:lsty neig1 max glamv fsty:lsty neig2 fsty lsty GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex 6:domdef min glamv fsty:lsty neig1 max glamv fsty:lsty neig2 fsty lsty z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any V points firstxv 1 lastxv 1 nxv 0 ENDELSE ENDIF ELSE BEGIN jxv temporary dom MOD jpi firstxv min temporary jxv max lastxv nxv lastxv firstxv 1 ENDELSE ENDELSE IF nxv NE 0 THEN lat1v min gphiv firstxv:lastxv firstyv:lastyv max lat2v ENDIF find lat1f lat2f firstxf firstxf firstyf firstyf nxf and nyf according to x1 x2 lon1 and lon2 IF where gridtype eq F 0 NE 1 THEN BEGIN firstyf fsty lastyf lsty nyf ny IF keyword_set memeindices THEN BEGIN firstxf firstyt lastxf lastyt nxf nxt ENDIF ELSE BEGIN dom where glamf fsty:lsty GE lon1 AND glamf fsty:lsty LE lon2 IF dom 0 EQ 1 THEN BEGIN IF keyword_set findalways THEN BEGIN CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype EQ W 0 NE 1:BEGIN print WARNING empty F points box we use the same index as T points firstxf firstxt lastxf lastxt nxf nxt END where gridtype eq U 0 NE 1:BEGIN print WARNING empty F points box we use the same index as U points firstxf firstxu lastxf lastxu nxf nxu END where gridtype eq V 0 NE 1:BEGIN print WARNING empty F points box we use the same index as V points firstxf firstxv lastxf lastxv nxf nxv END ELSE:BEGIN print WARNING empty F points box we get the neighnors to define a new box neig1 neighbor lon1 lat1 glamf fsty:lsty gphif fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular neig2 neighbor lon2 lat2 glamf fsty:lsty gphif fsty:lsty sphere keyword_set key_onearth keyword_set key_irregular CASE N_PARAMS OF 4:domdef min glamf fsty:lsty neig1 max glamf fsty:lsty neig2 fsty lsty GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex 6:domdef min glamf fsty:lsty neig1 max glamf fsty:lsty neig2 fsty lsty z1 z2 GRIDTYPE gridtype MEMEINDICES memeindices YINDEX ZINDEX zindex _extra ex ENDCASE RETURN END ENDCASE ENDIF ELSE BEGIN ras report WARNING The box does not contain any F points firstxf 1 lastyf 1 nxf 0 ENDELSE ENDIF ELSE BEGIN jxf temporary dom MOD jpi firstxf min temporary jxf max lastxf nxf lastxf firstxf 1 ENDELSE ENDELSE IF nxf NE 0 THEN lat1f min gphif firstxf:lastxf firstyf:lastyf max lat2f ENDIF lat1 min lat1t lat1u lat1v lat1f lat2 max lat2t lat2u lat2v lat2f END ENDCASE ENDELSE The extracted domain is it regular or not CASE 1 OF where gridtype eq T 0 NE 1 OR where gridtype eq W 0 NE 1 AND nxt NE 0 AND nyt NE 0:BEGIN to get faster we first test the most basic cases befor testing the full array CASE 0 OF array_equal glamt firstxt:lastxt firstyt glamt firstxt:lastxt lastyt :key_irregular 1b array_equal gphit firstxt firstyt:lastyt gphit lastxt firstyt:lastyt :key_irregular 1b array_equal glamt firstxt:lastxt firstyt:lastyt glamt firstxt:lastxt firstyt replicate 1 nyt :key_irregular 1b array_equal gphit firstxt:lastxt firstyt:lastyt replicate 1 nxt gphit firstxt firstyt:lastyt :key_irregular 1b ELSE:key_irregular 0b ENDCASE END where gridtype eq U 0 NE 1 AND nxu NE 0 AND nyu NE 0:BEGIN CASE 0 OF array_equal glamu firstxu:lastxu firstyu glamu firstxu:lastxu lastyu :key_irregular 1b array_equal gphiu firstxu firstyu:lastyu gphiu lastxu firstyu:lastyu :key_irregular 1b array_equal glamu firstxu:lastxu firstyu:lastyu glamu firstxu:lastxu firstyu replicate 1 nyu :key_irregular 1b array_equal gphiu firstxu:lastxu firstyu:lastyu replicate 1 nxu gphiu firstxu firstyu:lastyu :key_irregular 1b ELSE:key_irregular 0b ENDCASE END where gridtype eq V 0 NE 1 AND nxv NE 0 AND nyv NE 0:BEGIN CASE 0 OF array_equal glamv firstxv:lastxv firstyv glamv firstxv:lastxv lastyv :key_irregular 1b array_equal gphiv firstxv firstyv:lastyv gphiv lastxv firstyv:lastyv :key_irregular 1b array_equal glamv firstxv:lastxv firstyv:lastyv glamv firstxv:lastxv firstyv replicate 1 nyv :key_irregular 1b array_equal gphiv firstxv:lastxv firstyv:lastyv replicate 1 nxv gphiv firstxv firstyv:lastyv :key_irregular 1b ELSE:key_irregular 0b ENDCASE END where gridtype eq F 0 NE 1 AND nxf NE 0 AND nyf NE 0:BEGIN CASE 0 OF array_equal glamf firstxf:lastxf firstyf glamf firstxf:lastxf lastyf :key_irregular 1b array_equal gphif firstxf firstyf:lastyf gphif lastxf firstyf:lastyf :key_irregular 1b array_equal glamf firstxf:lastxf firstyf:lastyf glamf firstxf:lastxf firstyf replicate 1 nyf :key_irregular 1b array_equal gphif firstxf:lastxf firstyf:lastyf replicate 1 nxf gphif firstxf firstyf:lastyf :key_irregular 1b ELSE:key_irregular 0b ENDCASE END ELSE: ENDCASE define all vertical parameters vert1 vert2 firstz tw lastz tw nz tw vertical: vertical domain defined with vert1 vert2 IF NOT keyword_set zindex OR keyword_set index THEN BEGIN define vert1 et vert2 CASE N_PARAMS OF 2:vert1 min x1 x2 max vert2 6:vert1 min z1 z2 max vert2 ELSE:BEGIN IF inter byte gridtype byte T U V F 0 NE 1 THEN vert1t min gdept max vert2t IF where gridtype eq W 0 NE 1 AND n_elements gdepw NE 0 THEN vert1w min gdepw max vert2w vert1 min vert1t vert1w vert2 max vert2t vert2w END ENDCASE define firstzt firstzt nzt IF inter byte gridtype byte T U V F 0 NE 1 THEN BEGIN domz where gdept ge vert1 and gdept le vert2 nzt IF nzt NE 0 THEN BEGIN firstzt domz 0 lastzt domz nzt 1 ENDIF ELSE BEGIN ras report WARNING The box does not contain any T level firstzt 1 lastzt 1 ENDELSE ENDIF define firstzw firstzw nzw IF where gridtype eq W 0 NE 1 AND n_elements gdepw NE 0 THEN BEGIN IF keyword_set memeindices THEN BEGIN firstzw firstzt lastzw lastzt nzw nzt ENDIF ELSE BEGIN domz where gdepw ge vert1 and gdepw le vert2 nzw IF nzw NE 0 THEN BEGIN firstzw domz 0 lastzw domz nzw 1 ENDIF ELSE BEGIN ras report WARNING The box does not contain any W level firstzw 1 lastzw 1 ENDELSE ENDELSE ENDIF vertical domain defined with the Z index ENDIF ELSE BEGIN CASE N_PARAMS OF 2:fstz min x1 x2 max lstz 4:return 6:fstz min z1 z2 max lstz ENDCASE IF fstz LT 0 OR lstz GE jpk THEN BEGIN ras report Bad definition of X1 X2 Z1 or Z2 return ENDIF nz lstz fstz 1 find vert1t vert2t firstzt firstzt nzt according to x1 x2 or z1 z2 IF where gridtype eq T 0 NE 1 THEN BEGIN vert1t min gdept fstz:lstz max vert2t firstzt fstz lastzt lstz nzt nz ENDIF find vert1w vert2w firstzw firstzw nzw according to x1 x2 or z1 z2 IF where gridtype eq W 0 NE 1 AND n_elements gdepw NE 0 THEN BEGIN vert1w min gdepw fstz:lstz max vert2w firstzw fstz lastzw lstz nzw nz ENDIF vert1 min vert1t vert1w vert2 max vert2t vert2w ENDELSE IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF if keyword_set key_performance THEN print temps domdef systime 1 tempsun return end"); 201 a[199] = new Array("./ToBeReviewed/GRILLE/f2v.html", "f2v.pro", "", " file_comments Allows to pass a field refering to the grid F on the grid V thanks to the average: res 0 5 res shift res 1 0 categories Grille param TEMP in required A 2 3 or 4d array returns res a 2 3 or 4d array uses common pro restrictions Force parameters of the zoom on the grid V to be the same as those on the grid T restrictions Points which can not be calculated are put at the value NaN consecrated by IDL: values f_nan history From Marina Levy s programs Sebastien Masson smasson lodyc jussieu fr : Validation 5 6 2000 version Id: f2v pro 142 2006 07 21 12:47:49Z navarro FUNCTION f2v temp compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF res temp We force nxt nxf etc firstxv firstxf lastxv lastxf firstyv firstyf lastyv lastyf nxv nxf nyv nyf vargrid V if NOT keyword_set valmask then valmask 1e20 lon1 glamv firstxv 0 lon2 glamf lastxf 0 case on tha array s size and application taille size temp CASE taille 0 OF 1: res 1 2: BEGIN case 1 of taille 1 eq nxf and taille 2 eq nyf: taille 1 eq jpi and taille 2 eq jpj: res res firstxf:lastxf firstyf:lastyf else: return report Probleme d adequation entre les tailles du domaine et de la boite endcase mask fmask firstxf:lastxf firstyf:lastyf 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre values f_nan res 0 5 res shift res 1 0 if NOT keyword_set key_periodic AND nxf EQ jpi then res 0 values f_nan mask vmask firstxf:lastxf firstyf:lastyf 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre valmask END 3: BEGIN case 1 of taille 1 eq nxf and taille 2 eq nyf AND taille 3 EQ nzt: taille 1 eq nxf and taille 2 eq nyf AND taille 3 EQ jpk: res res firstzt:lastzt taille 1 eq nxf and taille 2 eq nyf AND taille 3 EQ jpt: taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk: res res firstxf:lastxf firstyf:lastyf firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpt: res res firstxf:lastxf firstyf:lastyf else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE if taille 3 EQ jpt then begin mask fmask firstxf:lastxf firstyf:lastyf lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxf nyf jpt over ENDIF ELSE mask fmask firstxf:lastxf firstyf:lastyf firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 1 0 0 if NOT keyword_set key_periodic AND nxf EQ jpi then res 0 values f_nan if taille 3 EQ jpt then BEGIN mask tmask firstxf:lastxf firstyf:lastyf lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxf nyf jpt over ENDIF ELSE mask vmask firstxf:lastxf firstyf:lastyf firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END 4: BEGIN case 1 of taille 1 eq nxf and taille 2 eq nyf AND taille 3 EQ nzt AND taille 4 EQ jpt: taille 1 eq nxf and taille 2 eq nyf AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstxf:lastxf firstyf:lastyf firstzt:lastzt else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE mask fmask firstxf:lastxf firstyf:lastyf firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxf nyf nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 1 0 0 0 if NOT keyword_set key_periodic AND nxf EQ jpi then res 0 values f_nan mask vmask firstxf:lastxf firstyf:lastyf firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxf nyf nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END endcase IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return res END "); 202 a[200] = new Array("./ToBeReviewed/GRILLE/fmask.html", "fmask.pro", "", " file_comments calculate fmask Economize memory we do not need to keep fmask anymore categories Utilities returns A 3d array corresponding to fmask examples Used like if fmask was a known array by substituing fmask by fmask For example: Instaed of write fmask domainef we have to write fmask domainef history Sebastien Masson smasson lodyc jussieu fr 11 12 98 version Id: fmask pro 142 2006 07 21 12:47:49Z navarro FUNCTION fmask compile_opt idl2 strictarrsubs cm_4mesh IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF tempsun systime 1 For key_performance CASE size tmask n_dimensions OF 2:res tmask shift tmask 1 0 shift tmask 0 1 shift tmask 1 1 3:res tmask shift tmask 1 0 0 shift tmask 0 1 0 shift tmask 1 1 0 ENDCASE if NOT keyword_set key_periodic then res jpi 1 fmaskredy res jpj 1 fmaskredx if keyword_set key_performance THEN print temps fmask systime 1 tempsun return res end"); 203 a[201] = new Array("./ToBeReviewed/GRILLE/grille.html", "grille.pro", "", " file_comments Choose the grid which must be used to do the graph in function of vargrid and send back corresponding parameters calculated in domdef pro and reduced at the domain defined by domdef contrarily to grandegrille pro BEWARE The choice of the grid is made from the value of the global variable vargrid which can be equal to T U V W ou F categories keyword TRI This keyword serve to obtain thanks to grille the triangulation which refer to the grid but only on the part of the zoom This of triangulation is passed in the variable we have equate at TRI For example: grille tri triangulation_reduite This keyword is used in plt pro keyword WDEPTH To specify that the field is at W depth instad of T depth automatically activated if vargrid eq W keyword FORPLT In plt we want that land points glam and gphi be equal to glamt and gphit regardless of the grid keyword NOTRI Useful only when TRI is activated In this case grill send back 1 in the variable tri even if the variable of the common triangles_list is defined and different of 1 keyword _EXTRA Used to pass your keywords keyword TOUT param MASK out optional For the definition see domdef and the management of subdomains on the web param GLAM out optional For the definition see domdef and the management of subdomains on the web param GPHI out optional For the definition see domdef and the management of subdomains on the web param GDEP out optional For the definition see domdef and the management of subdomains on the web param NX out optional For the definition see domdef and the management of subdomains on the web param NY out optional For the definition see domdef and the management of subdomains on the web param NZ out optional For the definition see domdef and the management of subdomains on the web param FIRSTX out optional For the definition see domdef and the management of subdomains on the web param FIRSTY out optional For the definition see domdef and the management of subdomains on the web param FIRSTZ out optional For the definition see domdef and the management of subdomains on the web param LASTX out optional For the definition see domdef and the management of subdomains on the web param LASTY out optional For the definition see domdef and the management of subdomains on the web param LASTZ out optional For the definition see domdef and the management of subdomains on the web param E1 out optional For the definition see domdef and the management of subdomains on the web param E2 out optional For the definition see domdef and the management of subdomains on the web param E3 out optional For the definition see domdef and the management of subdomains on the web uses cm_4mesh cm_4data restrictions Use the variable vargrid restrictions Vargrid must be T W U V ou F history Sebastien Masson smasson lodyc jussieu fr 12 2 1999 10 11 1999 forplt version Id: grille pro 142 2006 07 21 12:47:49Z navarro todo Comment ecrire la remarque sur les inputs pro grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz e1 e2 e3 TRI tri NOTRI notri TOUT tout FORPLT forplt IFPLTZ ifpltz WDEPTH wdepth _EXTRA ex include commons compile_opt idl2 strictarrsubs cm_4mesh cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF tempsun systime 1 For key_performance vargrid strupcase strmid vargrid 0 reverse_offset if vargrid eq W then wdepth 1 if keyword_set tout then begin savedbox 1b saveboxparam boxparam4grille dat domdef gridtype vargrid _EXTRA ex endif tempdeux systime 1 For key_performance 2 IF keyword_set wdepth THEN BEGIN firstz firstzw lastz lastzw nz nzw ENDIF ELSE BEGIN firstz firstzt lastz lastzt nz nzt ENDELSE CASE 1 OF grid T and W vargrid eq T OR vargrid eq W : begin scalars nx nxt ny nyt firstx firstxt firsty firstyt lastx lastxt lasty lastyt 2d vectors IF arg_present glam THEN glam glamt firstx:lastx firsty:lasty IF arg_present gphi THEN gphi gphit firstx:lastx firsty:lasty IF arg_present e1 THEN e1 e1t firstx:lastx firsty:lasty IF arg_present e2 THEN e2 e2t firstx:lastx firsty:lasty 3d vectors IF keyword_set forplt THEN mask tmask firstx:lastx firsty:lasty firstz ELSE IF arg_present mask THEN mask tmask firstx:lastx firsty:lasty firstz:lastz end grid U vargrid eq U : begin scalars nx nxu ny nyu firstx firstxu firsty firstyu lastx lastxu lasty lastyu 2d vectors IF arg_present glam THEN glam glamu firstx:lastx firsty:lasty IF arg_present gphi THEN gphi gphiu firstx:lastx firsty:lasty if keyword_set forplt then BEGIN mask 1b tmask firstx:lastx firsty:lasty firstz eastboarder mask shift mask 1 0 mask westboarder mask shift mask 1 0 mask if key_periodic NE 1 OR nx NE jpi then westboarder nx 1 0b tmp1 shift eastboarder 0 1 tmp1 0 0b tmp2 shift eastboarder 0 1 tmp2 ny 1 0b add temporary tmp1 temporary tmp2 1b eastboarder 1b temporary westboarder eastboarder temporary eastboarder temporary add tmp1 mask shift mask 0 1 shift mask 0 1 NE 1b tmp1 ny 1 1b tmp1 0 1b tmp2 mask shift mask 1 0 shift mask 1 0 NE 1b if key_periodic NE 1 OR nx NE jpi then begin tmp2 nx 1 1b tmp2 0 0b endif no1 temporary tmp1 temporary tmp2 tmp temporary eastboarder temporary no1 mask mask 0:nx 2 0b tmp temporary tmp temporary mask tmp where tmp GE 1 if tmp 0 NE 1 then begin glam tmp glamt firstx:lastx firsty:lasty tmp gphi tmp gphit firstx:lastx firsty:lasty tmp endif ENDIF IF arg_present e1 THEN e1 e1u firstx:lastx firsty:lasty IF arg_present e2 THEN e2 e2u firstx:lastx firsty:lasty 3d vectors IF keyword_set forplt THEN mask umask firstx:lastx firsty:lasty firstz ELSE IF arg_present mask THEN mask umask firstx:lastx firsty:lasty firstz:lastz end grid V vargrid eq OPAPTDHV or vargrid eq OPAPT3DV or vargrid eq V : begin scalars nx nxv ny nyv firstx firstxv firsty firstyv lastx lastxv lasty lastyv 2d vectors IF arg_present glam THEN glam glamv firstx:lastx firsty:lasty IF arg_present gphi THEN gphi gphiv firstx:lastx firsty:lasty if keyword_set forplt then BEGIN mask 1b tmask firstx:lastx firsty:lasty firstz northboarder mask shift mask 0 1 mask southboarder mask shift mask 0 1 mask southboarder ny 1 0b tmp1 shift northboarder 1 0 if key_periodic NE 1 OR nx NE jpi then tmp1 nx 1 0b tmp2 shift northboarder 1 0 if key_periodic NE 1 OR nx NE jpi then tmp2 0 0b add temporary tmp1 temporary tmp2 1b northboarder 1b southboarder northboarder temporary northboarder temporary add tmp1 mask shift mask 0 1 shift mask 0 1 NE 1b tmp1 ny 1 1b tmp1 0 0b tmp2 mask shift mask 1 0 shift mask 1 0 NE 1b if key_periodic NE 1 OR nx NE jpi then begin tmp2 nx 1 1b tmp2 0 1b endif no1 temporary tmp1 temporary tmp2 tmp temporary northboarder mask temporary no1 mask 0:ny 2 0b tmp temporary tmp temporary mask tmp where tmp GE 1 if tmp 0 NE 1 then begin glam tmp glamt firstx:lastx firsty:lasty tmp gphi tmp gphit firstx:lastx firsty:lasty tmp endif ENDIF IF arg_present e1 THEN e1 e1v firstx:lastx firsty:lasty IF arg_present e2 THEN e2 e2v firstx:lastx firsty:lasty 3d vecteurs IF keyword_set forplt THEN mask vmask firstx:lastx firsty:lasty firstz ELSE IF arg_present mask THEN mask vmask firstx:lastx firsty:lasty firstz:lastz end grid F vargrid eq OPAPTDHF or vargrid eq OPAPT3DF or vargrid eq F : begin scalars nx nxf ny nyf firstx firstxf firsty firstyf lastx lastxf lasty lastyf 2d vectors IF arg_present glam THEN glam glamf firstx:lastx firsty:lasty IF arg_present gphi THEN gphi gphif firstx:lastx firsty:lasty if keyword_set forplt then BEGIN mask 1b tmask firstx:lastx firsty:lasty firstz eastboarder mask shift mask 1 0 mask westboarder mask shift mask 1 0 mask westboarder nx 1 0b northboarder mask shift mask 0 1 mask southboarder mask shift mask 0 1 mask southboarder ny 1 0b tmp1 shift northboarder 1 0 if key_periodic NE 1 OR nx NE jpi then tmp1 nx 1 0b tmp2 shift northboarder 1 0 if key_periodic NE 1 OR nx NE jpi then tmp2 0 0b add temporary tmp1 temporary tmp2 1b northboarder 1b southboarder northboarder temporary northboarder temporary add tmp1 shift eastboarder 0 1 tmp1 0 0b tmp2 shift eastboarder 0 1 tmp2 ny 1 0b add temporary tmp1 temporary tmp2 1b eastboarder 1b temporary westboarder eastboarder temporary eastboarder temporary add tmp1 mask shift mask 0 1 shift mask 0 1 NE 1b tmp1 ny 1 1b tmp1 0 1b tmp2 mask shift mask 1 0 shift mask 1 0 NE 1b if key_periodic NE 1 OR nx NE jpi then begin tmp2 nx 1 1b tmp2 0 1b endif no1 temporary tmp1 temporary tmp2 tmp temporary northboarder temporary eastboarder mask temporary no1 mask 0:nx 2 0b mask 0:ny 2 0b tmp temporary tmp temporary mask tmp where tmp GE 1 if tmp 0 NE 1 then begin glam tmp glamt firstx:lastx firsty:lasty tmp gphi tmp gphit firstx:lastx firsty:lasty tmp endif ENDIF IF arg_present e1 THEN e1 e1f firstx:lastx firsty:lasty IF arg_present e2 THEN e2 e2f firstx:lastx firsty:lasty 3d vectors IF keyword_set forplt THEN mask fmask firstx:lastx firsty:lasty firstz ELSE IF arg_present mask THEN mask fmask firstx:lastx firsty:lasty firstz:lastz END ELSE:BEGIN ras report Wrong definition of vargrid vargrid Only T U V W or F are acceptable stop END ENDCASE IF testvar var key_performance EQ 2 THEN print temps grille: attribution des scalaires vecteurs et tableaux systime 1 tempdeux Variables refering to the vertical dimension tempdeux systime 1 For key_performance 2 if keyword_set wdepth then begin gdep gdepw firstz:lastz e3 e3w firstz:lastz endif else begin gdep gdept firstz:lastz e3 e3t firstz:lastz ENDELSE for the vertical sections with partial steps IF keyword_set ifpltz AND keyword_set key_partialstep THEN BEGIN CASE 1 OF ifpltz EQ xz AND ny EQ 1:BEGIN bottom total tmask firstx:lastx firsty:lasty firstz:lastz 3 good where bottom NE 0 AND bottom NE nz keyword_set wdepth bottom lindgen nx bottom 1l keyword_set wdepth nx IF good 0 NE 1 THEN BEGIN bottom bottom good IF lastz EQ jpk 1 THEN gdep nz 1 max hdepw gdep replicate 1 nx gdep if keyword_set wdepth THEN truegdep hdepw firstx:lastx firsty:lasty ELSE truegdep hdept firstx:lastx firsty:lasty gdep bottom truegdep good ENDIF END ifpltz EQ yz AND nx EQ 1:BEGIN bottom total tmask firstx:lastx firsty:lasty firstz:lastz 3 good where bottom NE 0 AND bottom NE nz keyword_set wdepth bottom lindgen ny bottom 1l keyword_set wdepth ny IF good 0 NE 1 THEN BEGIN bottom bottom good IF lastz EQ jpk 1 THEN gdep nz 1 max hdepw gdep replicate 1 ny gdep if keyword_set wdepth THEN truegdep hdepw firstx:lastx firsty:lasty ELSE truegdep hdept firstx:lastx firsty:lasty gdep bottom truegdep good ENDIF END ELSE: ENDCASE ENDIF IF testvar var key_performance EQ 2 THEN print temps grille: Variables se rapportant a la dimension verticale systime 1 tempdeux Triangulation vector when TRI is activated if arg_present TRI then if triangles_list 0 EQ 1 OR keyword_set notri then tri 1 ELSE BEGIN tempdeux systime 1 pour key_performance 2 msk bytarr jpi jpj msk firstx:lastx firsty:lasty 1 ind where msk triangles_list 0 msk triangles_list 1 msk triangles_list 2 EQ 1 tri triangles_list ind firstx firsty jpi y tri jpi x tri y jpi tri x y nx IF testvar var key_performance EQ 2 THEN print temps grille: decoupage de la triangulation systime 1 tempdeux ENDELSE To make sure there is not any degenerated dimension 1 mask reform mask over glam reform glam over gphi reform gphi over gdep reform gdep over e1 reform e1 over e2 reform e2 over e3 reform e3 over if keyword_set savedbox THEN restoreboxparam boxparam4grille dat if keyword_set key_performance THEN print temps grille systime 1 tempsun IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return end "); 204 a[202] = new Array("./ToBeReviewed/GRILLE/t2v.html", "t2v.pro", "", " file_comments Allows to pass a field refering to the grid T on the grid V thanks to the average res 0 5 res shift res 0 1 categories Grille param TEMP in required A 2 3 or 4d array returns res a 2 3 or 4d array uses common pro restrictions Force parameters of the zoom on the grid V to be the same as those on the grid T restrictions Points which can not be calculated are put at the value NaN consecrated by IDL: values f_nan history From Marina Levy s programs Sebastien Masson smasson lodyc jussieu fr : Validation 5 6 2000 version Id: t2v pro 142 2006 07 21 12:47:49Z navarro FUNCTION t2v temp compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF res temp We force nxt nxv etc firstxv firstxt lastxv lastxt firstyv firstyt lastyv lastyt nxv nxt nyv nyt vargrid V if NOT keyword_set valmask then valmask 1e20 lat1 gphit 0 firstyt lat2 gphiv 0 lastyv case on tha array s size and application taille size temp CASE taille 0 OF 1: res 1 2: BEGIN case 1 of taille 1 eq nxt and taille 2 eq nyt: taille 1 eq jpi and taille 2 eq jpj: res res firstxt:lastxt firstyt:lastyt else: return report Probleme d adequation entre les tailles du domaine et de la boite endcase mask tmask firstxt:lastxt firstyt:lastyt 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre values f_nan res 0 5 res shift res 0 1 res nyt 1 values f_nan mask vmask firstxt:lastxt firstyt:lastyt 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre valmask END 3: BEGIN case 1 of taille 1 eq nxt and taille 2 eq nyt AND taille 3 EQ nzt: taille 1 eq nxt and taille 2 eq nyt AND taille 3 EQ jpk: res res firstzt:lastzt taille 1 eq nxt and taille 2 eq nyt AND taille 3 EQ jpt: taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk: res res firstxt:lastxt firstyt:lastyt firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpt: res res firstxt:lastxt firstyt:lastyt else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE if taille 3 EQ jpt then begin mask tmask firstxt:lastxt firstyt:lastyt lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxt nyt jpt over ENDIF ELSE mask tmask firstxt:lastxt firstyt:lastyt firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 0 1 0 res nyt 1 values f_nan if taille 3 EQ jpt then BEGIN mask vmask firstxt:lastxt firstyt:lastyt lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxt nyt jpt over ENDIF ELSE mask vmask firstxt:lastxt firstyt:lastyt firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END 4: BEGIN case 1 of taille 1 eq nxt and taille 2 eq nyt AND taille 3 EQ nzt AND taille 4 EQ jpt: taille 1 eq nxt and taille 2 eq nyt AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstxt:lastxt firstyt:lastyt firstzt:lastzt else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE mask tmask firstxt:lastxt firstyt:lastyt firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxt nyt nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 0 1 0 0 res nyt 1 values f_nan mask vmask firstxt:lastxt firstyt:lastyt firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxt nyt nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END ENDCASE IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return res END "); 205 a[203] = new Array("./ToBeReviewed/GRILLE/tracegrille.html", "tracegrille.pro", "", " file_comments Draw the grid categories param GLAMIN in required The 1d or 2d array in longitude of points of the grid If GLAM GLAMIN is not specified it trace the grid specified by vargrid on the domain defined by domdef param GPHIIN in required The 1d or 2d array in latitude of points of the grid If GPHI GPHIIN is not specified it trace the grid specified by vargrid on the domain defined by domdef keyword XSTRIDE It is an integer to specify that we want to trace only one line of constant i every xstride points keyword YSTRIDE It is an integer to specify that we want to trace only one line of constant j every xstride points keyword OCEAN To trace the grid only on ocean points keyword EARTH To trace the grid only on land points pour ne tracer la grille que sur les points terre keyword RMOUT Select to remove all cell having one corner out of the plot boundaries x range y range keyword _EXTRA Used to pass your keywords uses common pro examples IDL plt indgen jpi jpj nocontour nofill IDL vargrid T IDL tracegrille ocean color 20 IDL tracegrille earth color 80 history Sebastien Masson smasson lodyc jussieu fr version Id: tracegrille pro 142 2006 07 21 12:47:49Z navarro PRO tracegrille glamin gphiin OCEAN ocean EARTH earth XSTRIDE xstride YSTRIDE ystride RMOUT rmout _extra extra compile_opt idl2 strictarrsubs cm_4mesh cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF tempsun systime 1 For key_performance to avoid warning message oldexcept except except 0 if n_elements key_gridtype EQ 0 then key_gridtype c if n_elements glamin n_elements gphiin EQ 0 then BEGIN grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz IF keyword_set ocean AND key_gridtype EQ c THEN BEGIN we reduce the mask to take into account the point located ON the coastline CASE vargrid OF U :BEGIN mask tmask firstx:lastx firsty:lasty IF NOT keyword_set key_periodic OR nx NE jpi THEN tmpx mask nx 1 mask mask shift mask 1 0 1 IF NOT keyword_set key_periodic OR nx NE jpi THEN mask nx 1 temporary tmpx END V :BEGIN mask tmask firstx:lastx firsty:lasty tmpy mask ny 1 mask mask shift mask 0 1 1 mask ny 1 temporary tmpy END F :BEGIN mask tmask firstx:lastx firsty:lasty IF NOT keyword_set key_periodic OR nx NE jpi THEN tmpx mask nx 1 tmpy mask ny 1 mask mask shift mask 1 0 shift mask 0 1 shift mask 1 1 1 mask ny 1 temporary tmpy IF NOT keyword_set key_periodic OR nx NE jpi THEN mask nx 1 temporary tmpx END ELSE: ENDCASE ENDIF ENDIF ELSE BEGIN glam glamin gphi gphiin IF size glam 0 EQ 1 AND size gphi 0 EQ 1 THEN BEGIN nx n_elements glam ny n_elements gphi glam glam replicate 1 ny gphi replicate 1 nx gphi ENDIF ELSE BEGIN nx size glam 1 ny size glam 2 ENDELSE ENDELSE if n_elements mask EQ 0 then mask replicate 1b nx ny if size mask 0 EQ 3 then mask mask 0 IF keyword_set RMOUT THEN BEGIN out where glam GT max x range OR glam LT min x range OR gphi GT max y range OR gphi LT min y range IF out 0 NE 1 THEN BEGIN glam out values f_nan gphi out values f_nan ENDIF ENDIF IF keyword_set ocean then BEGIN earth where mask EQ 0 if earth 0 NE 1 then begin glam earth values f_nan gphi earth values f_nan ENDIF earth 0 ENDIF IF keyword_set earth THEN BEGIN ocean where mask EQ 1 if ocean 0 NE 1 then begin glam ocean values f_nan gphi ocean values f_nan ENDIF ocean 0 ENDIF if NOT keyword_set xstride then xstride 1 if NOT keyword_set ystride then ystride 1 case key_gridtype of c :BEGIN for i 0 ny 1 ystride do begin plots glam i gphi i _extra extra endfor for i 0 nx 1 xstride do begin plots glam i gphi i _extra extra endfor END e :BEGIN shifted glam 0 0 LT glam 0 1 glam2 glam glam 1 glam 0 2 if shifted then begin for i 0 ny 2 do BEGIN xx transpose glam i glam2 i yy transpose gphi i gphi i 1 plots xx 0:2 nx 2 yy 0:2 nx 2 _extra extra ENDFOR ENDIF ELSE BEGIN for i 1 ny 1 do BEGIN xx transpose glam i glam2 i yy transpose gphi i gphi i 1 plots xx 0:2 nx 2 yy 0:2 nx 2 _extra extra ENDFOR ENDELSE for i 1 ny 1 2 do plots glam 0 2 i 1 glam 0 2 i gphi 0 2 i 1 gphi 0 2 i _extra extra for i 0 ny 2 2 do plots glam nx 1 2 i glam nx 1 2 i 1 gphi nx 1 2 i gphi nx 1 2 i 1 _extra extra END endcase if keyword_set key_performance THEN print temps trace grille systime 1 tempsun except oldexcept return end"); 206 a[204] = new Array("./ToBeReviewed/GRILLE/u2t.html", "u2t.pro", "", " file_comments Allows to pass a field refering to the grid U on the grid T thanks to the average: res 0 5 res shift res 1 0 categories Grille param TEMP in required A 2 3 or 4d array returns res a 2 3 or 4d array uses common pro restrictions Force parameters of the zoom on the grid V to be the same as those on the grid T restrictions Points which can not be calculated are put at the value NaN consecrated by IDL: values f_nan history From Marina Levy s programs Sebastien Masson smasson lodyc jussieu fr : Validation 5 6 2000 version Id: u2t pro 142 2006 07 21 12:47:49Z navarro FUNCTION u2t temp compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF res temp on force nxt nxu etc firstxt firstxu lastxt lastxu firstyt firstyu lastyt lastyu nxt nxu nyt nyu vargrid T if NOT keyword_set valmask then valmask 1e20 lon1 glamt firstxt 0 lon2 glamu lastxu 0 case on tha array s size and application taille size temp CASE taille 0 OF 1: res 1 2: BEGIN case 1 of taille 1 eq nxu and taille 2 eq nyu: taille 1 eq jpi and taille 2 eq jpj: res res firstxu:lastxu firstyu:lastyu else: return report Probleme d adequation entre les tailles du domaine et de la boite endcase mask umask firstxu:lastxu firstyu:lastyu 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre values f_nan res 0 5 res shift res 1 0 if NOT keyword_set key_periodic AND nxu EQ jpi then res 0 values f_nan mask tmask firstxu:lastxu firstyu:lastyu 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre valmask END 3: BEGIN case 1 of taille 1 eq nxu and taille 2 eq nyu AND taille 3 EQ nzt: taille 1 eq nxu and taille 2 eq nyu AND taille 3 EQ jpk: res res firstzt:lastzt taille 1 eq nxu and taille 2 eq nyu AND taille 3 EQ jpt: taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk: res res firstxu:lastxu firstyu:lastyu firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpt: res res firstxu:lastxu firstyu:lastyu else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE if taille 3 EQ jpt then begin mask umask firstxu:lastxu firstyu:lastyu lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxu nyu jpt over ENDIF ELSE mask umask firstxu:lastxu firstyu:lastyu firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 1 0 0 if NOT keyword_set key_periodic AND nxu EQ jpi then res 0 values f_nan if taille 3 EQ jpt then BEGIN mask tmask firstxu:lastxu firstyu:lastyu lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxu nyu jpt over ENDIF ELSE mask tmask firstxu:lastxu firstyu:lastyu firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END 4: BEGIN case 1 of taille 1 eq nxu and taille 2 eq nyu AND taille 3 EQ nzt AND taille 4 EQ jpt: taille 1 eq nxu and taille 2 eq nyu AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstxu:lastxu firstyu:lastyu firstzt:lastzt else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE mask umask firstxu:lastxu firstyu:lastyu firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxu nyu nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 1 0 0 0 if NOT keyword_set key_periodic AND nxu EQ jpi then res 0 values f_nan mask tmask firstxu:lastxu firstyu:lastyu firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxu nyu nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END endcase IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return res END "); 207 a[205] = new Array("./ToBeReviewed/GRILLE/umask.html", "umask.pro", "", " file_comments calculate umask Economize memory we do not need to keep umask anymore categories Utilities returns A 3d array corresponding to umask uses common pro examples Used like if umask was a known array by substituing umask by umask For example: Instaed of write umask domainef we have to write umask domainef MODIFICATION HISTORY: Sebastien Masson smasson lodyc jussieu fr 11 12 98 6 99 introduction of the key_shift 20 9 99 cas jpk 1 Thanks to jpblod ipsl jussieu fr version Id: umask pro 142 2006 07 21 12:47:49Z navarro FUNCTION umask compile_opt idl2 strictarrsubs cm_4mesh IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF tempsun systime 1 For key_performance CASE size tmask n_dimensions OF 2:res tmask shift tmask 1 0 3:res tmask shift tmask 1 0 0 ENDCASE if NOT keyword_set key_periodic then res jpi 1 umaskred if keyword_set key_performance THEN print temps umask systime 1 tempsun return res end"); 208 a[206] = new Array("./ToBeReviewed/GRILLE/v2t.html", "v2t.pro", "", " file_comments Allows to pass a field refering to the grid V on the grid T thanks to the average: res 0 5 res shift res 1 0 categories Grille param TEMP in required A 2 3 or 4d array returns res a 2 3 or 4d array uses common pro restrictions Force parameters of the zoom on the grid V to be the same as those on the grid T restrictions Points which can not be calculated are put at the value NaN consecrated by IDL: values f_nan history From Marina Levy s programs Sebastien Masson smasson lodyc jussieu fr : Validation 5 6 2000 version Id: v2t pro 142 2006 07 21 12:47:49Z navarro todo seb: nom du input FUNCTION v2t temp compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF res temp We force nxt nxv etc firstxt firstxv lastxt lastxv firstyt firstyv lastyt lastyv nxt nxv nyt nyv vargrid T if NOT keyword_set valmask then valmask 1e20 lat1 gphit 0 firstyt lat2 gphiv 0 lastyv case on tha array s size and application taille size temp CASE taille 0 OF 1: res 1 2: BEGIN case 1 of taille 1 eq nxv and taille 2 eq nyv: taille 1 eq jpi and taille 2 eq jpj: res res firstxv:lastxv firstyv:lastyv else: return report Probleme d adequation entre les tailles du domaine et de la boite endcase mask vmask firstxv:lastxv firstyv:lastyv 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre values f_nan res 0 5 res shift res 0 1 res 0 values f_nan mask tmask firstxv:lastxv firstyv:lastyv 0 terre where mask EQ 0 IF terre 0 NE 1 THEN res terre valmask END 3: BEGIN case 1 of taille 1 eq nxv and taille 2 eq nyv AND taille 3 EQ nzt: taille 1 eq nxv and taille 2 eq nyv AND taille 3 EQ jpk: res res firstzt:lastzt taille 1 eq nxv and taille 2 eq nyv AND taille 3 EQ jpt: taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk: res res firstxv:lastxv firstyv:lastyv firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpt: res res firstxv:lastxv firstyv:lastyv else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE if taille 3 EQ jpt then begin mask vmask firstxv:lastxv firstyv:lastyv lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxv nyv jpt over ENDIF ELSE mask vmask firstxv:lastxv firstyv:lastyv firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 0 1 0 res 0 values f_nan if taille 3 EQ jpt then BEGIN mask tmask firstxv:lastxv firstyv:lastyv lastzt nzt NE jpk mask temporary mask replicate 1 jpt mask reform mask nxv nyv jpt over ENDIF ELSE mask tmask firstxv:lastxv firstyv:lastyv firstzt:lastzt terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END 4: BEGIN case 1 of taille 1 eq nxv and taille 2 eq nyv AND taille 3 EQ nzt AND taille 4 EQ jpt: taille 1 eq nxv and taille 2 eq nyv AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstzt:lastzt taille 1 eq jpi and taille 2 eq jpj AND taille 3 EQ jpk AND taille 4 EQ jpt: res res firstxv:lastxv firstyv:lastyv firstzt:lastzt else: return report Probleme d adequation entre les tailles du domaine et de la boite ENDCASE mask vmask firstxv:lastxv firstyv:lastyv firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxv nyv nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre values f_nan res 0 5 res shift res 0 1 0 0 res 0 values f_nan mask tmask firstxv:lastxv firstyv:lastyv firstzt:lastzt mask temporary mask replicate 1 jpt mask reform mask nxv nyv nzt jpt over terre where temporary mask EQ 0 IF terre 0 NE 1 THEN res temporary terre valmask END endcase IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return res END "); 209 a[207] = new Array("./ToBeReviewed/GRILLE/vmask.html", "vmask.pro", "", " file_comments calculate fmask Economize memory we do not need to keep vmask anymore categories Utilities returns A 3d array corresponding to vmask examples Used like if vmask was a known array by substituing vmask by vmask For example: Instaed of write vmask domainef we have to write vmask domainef history Sebastien Masson smasson lodyc jussieu fr 11 12 98 20 9 99 cas jpk 1 merci jpblod ipsl jussieu fr version Id: vmask pro 142 2006 07 21 12:47:49Z navarro FUNCTION vmask compile_opt idl2 strictarrsubs common tempsun systime 1 For key_performance CASE size tmask n_dimensions OF 2:res tmask shift tmask 0 1 3:res tmask shift tmask 0 1 0 ENDCASE res jpj 1 vmaskred if keyword_set key_performance THEN print temps vmask systime 1 tempsun return res end"); 210 210 a[208] = new Array("./ToBeReviewed/HOPE/completetype.html", "completetype.pro", "", " todo seb function completetype typein compile_opt idl2 strictarrsubs type typein case type of x :type type yzt y :type type xzt z :type type zyt t :type type xyz xy :type type zt xz :type type yt yz :type type xt xt :type type yz yt :type type xz zt :type type xy xyz :type type t xyt :type type z yzt :type type x xyzt : endcase return type end "); 211 a[209] = new Array("./ToBeReviewed/HOPE/computehopegrid.html", "computehopegrid.pro", "", " file_comments categories grille param XAXIS param YAXIS param ZAXIS param LINETYPE keyword FORTHEMASK keyword WPOINT keyword FIRSTS keyword LASTS keyword PTTYPE uses common pro history Sebastien Masson smasson lodyc jussieu fr 2001 06 version Id todo seb PRO computehopegrid xaxis yaxis zaxis linetype FORTHEMASK forthemask WPOINT wpoint FIRSTS firsts LASTS lasts PTTYPE pttype compile_opt idl2 strictarrsubs cm_4mesh cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF if not keyword_set scalar keyword_set vector then scalar 1 jpiglo n_elements xaxis jpjglo n_elements yaxis jpkglo n_elements zaxis jpi jpiglo jpj jpjglo jpk jpkglo if NOT keyword_set firsts then firsts 0 0 0 if NOT keyword_set lasts then lasts jpi 1 jpj 1 jpk 1 depermination of the grid type and of the point type if keyword_set pttype then vargrid pttype if linetype EQ odd even then key_gridtype e ELSE key_gridtype c computation of the horizontal grid if key_gridtype EQ e then begin if vargrid EQ T then begin glamt xaxis glamt glamt replicate 1 jpj xstep glamt 1 0 glamt 0 0 2 glamt 2 lindgen jpj 2 glamt 2 lindgen jpj 2 xstep glamu glamt xstep ENDIF ELSE BEGIN glamu xaxis glamu glamu replicate 1 jpj xstep glamu 1 0 glamu 0 0 2 glamu 2 lindgen jpj 2 glamu 2 lindgen jpj 2 xstep glamt glamu xstep ENDELSE zoom glamt glamt firsts 0 :lasts 0 firsts 1 :lasts 1 glamu glamu firsts 0 :lasts 0 firsts 1 :lasts 1 jpiglo lasts 0 firsts 0 1 jpi jpiglo jpjglo lasts 1 firsts 1 1 jpj jpjglo glamv glamu glamf glamu gphit yaxis firsts 1 :lasts 1 gphit replicate 1 jpi gphit gphif gphit gphiu gphit gphiv gphif ENDIF ELSE BEGIN if vargrid eq T then begin glamt xaxis glamt glamt replicate 1 jpj glamu glamt glamt 1 0 glamt 0 0 2 ENDIF ELSE BEGIN glamu xaxis glamu glamu replicate 1 jpj xstep glamu 1 0 glamu 0 0 2 glamt glamu glamu 1 0 glamu 0 0 2 ENDELSE zoom glamt glamt firsts 0 :lasts 0 firsts 1 :lasts 1 glamu glamu firsts 0 :lasts 0 firsts 1 :lasts 1 jpiglo lasts 0 firsts 0 1 jpi jpiglo jpjglo lasts 1 firsts 1 1 jpj jpjglo glamv glamt glamf glamu gphit yaxis firsts 1 :lasts 1 gphit replicate 1 jpi gphit gphiu gphit if jpj GT 1 then begin gphiv gphit gphit 0 1 gphit 0 0 2 gphif gphit gphit 0 1 gphit 0 0 2 ENDIF ELSE BEGIN gphiv gphit gphif gphit ENDELSE ENDELSE computation of the vertical grid if keyword_set wpoint then begin gdepw zaxis if jpk ne 1 then begin gdept shift gdepw 1 gdepw 2 gdept jpk 1 gdepw jpk 1 5 gdepw jpk 1 gdepw jpk 2 endif else gdept zaxis endif else begin gdept zaxis if jpk ne 1 then begin gdepw shift gdept 1 gdept 2 gdepw 0 0 endif else gdepw zaxis endelse computation of the vertical scale factors if jpk ne 1 then begin e3t abs shift gdepw 1 gdepw e3t jpk 1 abs gdept jpk 1 gdepw jpk 1 e3w abs gdept shift gdept 1 e3w 0 abs gdept 0 gdepw 0 endif else begin e3t 1 e3w 1 endelse zoom gdept gdept firsts 2 :lasts 2 gdepw gdepw firsts 2 :lasts 2 e3t e3t firsts 2 :lasts 2 e3w e3w firsts 2 :lasts 2 jpkglo lasts 2 firsts 2 1 jpk jpkglo computation of the horizontal scale factors e1t replicate 1b jpi jpj e2t replicate 1b jpi jpj e1u e1t e2u e2t e1v e1t e2v e2t e1f e1t e2f e2t mask tmask replicate 1b jpi jpj jpk if keyword_set forthemask then BEGIN land where forthemask ge valmask 10 if land 0 ne 1 then tmask land 0b endif umaskred replicate 1 jpj jpk vmaskred replicate 1 jpi jpk fmaskredy replicate 1 jpj jpk fmaskredx replicate 1 jpi jpk updateold domdef if keyword_set firsts AND keyword_set lasts then BEGIN if vargrid EQ T then BEGIN if jpj GT 1 then begin lon1 min glamt 0 0 1 lon2 max glamt jpi 1 0 1 endif ELSE BEGIN lon1 min glamt 0 0 lon2 max glamt jpi 1 0 ENDELSE ENDIF ELSE BEGIN if jpj GT 1 then begin lon1 min glamu 0 0 1 lon2 max glamu jpi 1 0 1 endif ELSE BEGIN lon1 min glamu 0 0 lon2 max glamu jpi 1 0 ENDELSE ENDELSE lat1 min gphit 0 0 gphit 0 jpj 1 lat2 max gphit 0 0 gphit 0 jpj 1 domdef lon1 lon2 lat1 lat2 gdepw 0 gdept jpk 1 gridtype vargrid ENDIF ixminmesh 0l ixmaxmesh long jpi 1 iyminmesh 0l iymaxmesh long jpj 1 izminmesh 0l izmaxmesh long jpk 1 for the triangulation key_periodic glamt 0 EQ glamt jpi 1 glamt 1 glamt 0 MOD 360 if jpi gt 4 AND jpj GT 4 then begin triangles_list triangule shifted glamt 0 0 LT glamt 0 1 twin_corners_up 1 twin_corners_dn 1 ENDIF ELSE BEGIN triangles_list 1 twin_corners_up 1 twin_corners_dn 1 ENDELSE IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return end ");211 a[209] = new Array("./ToBeReviewed/HOPE/computehopegrid.html", "computehopegrid.pro", "", " file_comments categories grille param XAXIS param YAXIS param ZAXIS param LINETYPE keyword FORTHEMASK keyword WPOINT keyword FIRSTS keyword LASTS keyword PTTYPE uses common pro history Sebastien Masson smasson lodyc jussieu fr 2001 06 version Id: computehopegrid pro 142 2006 07 21 12:47:49Z navarro todo seb PRO computehopegrid xaxis yaxis zaxis linetype FORTHEMASK forthemask WPOINT wpoint FIRSTS firsts LASTS lasts PTTYPE pttype compile_opt idl2 strictarrsubs cm_4mesh cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF if not keyword_set scalar keyword_set vector then scalar 1 jpiglo n_elements xaxis jpjglo n_elements yaxis jpkglo n_elements zaxis jpi jpiglo jpj jpjglo jpk jpkglo if NOT keyword_set firsts then firsts 0 0 0 if NOT keyword_set lasts then lasts jpi 1 jpj 1 jpk 1 depermination of the grid type and of the point type if keyword_set pttype then vargrid pttype if linetype EQ odd even then key_gridtype e ELSE key_gridtype c computation of the horizontal grid if key_gridtype EQ e then begin if vargrid EQ T then begin glamt xaxis glamt glamt replicate 1 jpj xstep glamt 1 0 glamt 0 0 2 glamt 2 lindgen jpj 2 glamt 2 lindgen jpj 2 xstep glamu glamt xstep ENDIF ELSE BEGIN glamu xaxis glamu glamu replicate 1 jpj xstep glamu 1 0 glamu 0 0 2 glamu 2 lindgen jpj 2 glamu 2 lindgen jpj 2 xstep glamt glamu xstep ENDELSE zoom glamt glamt firsts 0 :lasts 0 firsts 1 :lasts 1 glamu glamu firsts 0 :lasts 0 firsts 1 :lasts 1 jpiglo lasts 0 firsts 0 1 jpi jpiglo jpjglo lasts 1 firsts 1 1 jpj jpjglo glamv glamu glamf glamu gphit yaxis firsts 1 :lasts 1 gphit replicate 1 jpi gphit gphif gphit gphiu gphit gphiv gphif ENDIF ELSE BEGIN if vargrid eq T then begin glamt xaxis glamt glamt replicate 1 jpj glamu glamt glamt 1 0 glamt 0 0 2 ENDIF ELSE BEGIN glamu xaxis glamu glamu replicate 1 jpj xstep glamu 1 0 glamu 0 0 2 glamt glamu glamu 1 0 glamu 0 0 2 ENDELSE zoom glamt glamt firsts 0 :lasts 0 firsts 1 :lasts 1 glamu glamu firsts 0 :lasts 0 firsts 1 :lasts 1 jpiglo lasts 0 firsts 0 1 jpi jpiglo jpjglo lasts 1 firsts 1 1 jpj jpjglo glamv glamt glamf glamu gphit yaxis firsts 1 :lasts 1 gphit replicate 1 jpi gphit gphiu gphit if jpj GT 1 then begin gphiv gphit gphit 0 1 gphit 0 0 2 gphif gphit gphit 0 1 gphit 0 0 2 ENDIF ELSE BEGIN gphiv gphit gphif gphit ENDELSE ENDELSE computation of the vertical grid if keyword_set wpoint then begin gdepw zaxis if jpk ne 1 then begin gdept shift gdepw 1 gdepw 2 gdept jpk 1 gdepw jpk 1 5 gdepw jpk 1 gdepw jpk 2 endif else gdept zaxis endif else begin gdept zaxis if jpk ne 1 then begin gdepw shift gdept 1 gdept 2 gdepw 0 0 endif else gdepw zaxis endelse computation of the vertical scale factors if jpk ne 1 then begin e3t abs shift gdepw 1 gdepw e3t jpk 1 abs gdept jpk 1 gdepw jpk 1 e3w abs gdept shift gdept 1 e3w 0 abs gdept 0 gdepw 0 endif else begin e3t 1 e3w 1 endelse zoom gdept gdept firsts 2 :lasts 2 gdepw gdepw firsts 2 :lasts 2 e3t e3t firsts 2 :lasts 2 e3w e3w firsts 2 :lasts 2 jpkglo lasts 2 firsts 2 1 jpk jpkglo computation of the horizontal scale factors e1t replicate 1b jpi jpj e2t replicate 1b jpi jpj e1u e1t e2u e2t e1v e1t e2v e2t e1f e1t e2f e2t mask tmask replicate 1b jpi jpj jpk if keyword_set forthemask then BEGIN land where forthemask ge valmask 10 if land 0 ne 1 then tmask land 0b endif umaskred replicate 1 jpj jpk vmaskred replicate 1 jpi jpk fmaskredy replicate 1 jpj jpk fmaskredx replicate 1 jpi jpk updateold domdef if keyword_set firsts AND keyword_set lasts then BEGIN if vargrid EQ T then BEGIN if jpj GT 1 then begin lon1 min glamt 0 0 1 lon2 max glamt jpi 1 0 1 endif ELSE BEGIN lon1 min glamt 0 0 lon2 max glamt jpi 1 0 ENDELSE ENDIF ELSE BEGIN if jpj GT 1 then begin lon1 min glamu 0 0 1 lon2 max glamu jpi 1 0 1 endif ELSE BEGIN lon1 min glamu 0 0 lon2 max glamu jpi 1 0 ENDELSE ENDELSE lat1 min gphit 0 0 gphit 0 jpj 1 lat2 max gphit 0 0 gphit 0 jpj 1 domdef lon1 lon2 lat1 lat2 gdepw 0 gdept jpk 1 gridtype vargrid ENDIF ixminmesh 0l ixmaxmesh long jpi 1 iyminmesh 0l iymaxmesh long jpj 1 izminmesh 0l izmaxmesh long jpk 1 for the triangulation key_periodic glamt 0 EQ glamt jpi 1 glamt 1 glamt 0 MOD 360 if jpi gt 4 AND jpj GT 4 then begin triangles_list triangule shifted glamt 0 0 LT glamt 0 1 twin_corners_up 1 twin_corners_dn 1 ENDIF ELSE BEGIN triangles_list 1 twin_corners_up 1 twin_corners_dn 1 ENDELSE IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return end "); 212 212 a[210] = new Array("./ToBeReviewed/HOPE/createhopestruct.html", "createhopestruct.pro", "", " todo seb FUNCTION createhopestruct event compile_opt idl2 strictarrsubs widget_control event top get_uvalue top_uvalue find the selected variable selected top_uvalue 1 findline top_uvalue selected get the variable id varid top_uvalue 1 findline top_uvalue datavarid selected get the section type type top_uvalue 1 findline top_uvalue sectype selected get its dimension dimsvar top_uvalue 1 findline top_uvalue dimvar selected tosort sortdim completetype type dimsvar dimsvar tosort get the specified spatial domain and build reading parameters linetype top_uvalue 1 findline top_uvalue linetype selected case linetype of odd :domainid widget_info event top find_by_uname basedomainodd even :domainid widget_info event top find_by_uname basedomaineven odd even :domainid widget_info event top find_by_uname basedomainodd even endcase allaxes top_uvalue 1 findline top_uvalue dimlist xaxis allaxes dimsvar 0 xlimits top_uvalue 1 findline top_uvalue xlimits if NOT keyword_set xlimits then begin xid widget_info domainid find_by_uname xinterval widget_control xid get_value xint endif ELSE xint xaxis where xaxis GE xlimits 0 AND xaxis LE xlimits 1 yaxis allaxes dimsvar 1 yaxis reverse yaxis latitudes from the south to the north ylimits top_uvalue 1 findline top_uvalue ylimits if NOT keyword_set ylimits then begin yid widget_info domainid find_by_uname yinterval widget_control yid get_value yint endif ELSE yint yaxis where yaxis GE ylimits 0 AND yaxis LE ylimits 1 zaxis allaxes dimsvar 2 zlimits top_uvalue 1 findline top_uvalue zlimits if NOT keyword_set zlimits then begin zid widget_info domainid find_by_uname zinterval widget_control zid get_value zint endif ELSE zint zaxis where zaxis GE zlimits 0 AND zaxis LE zlimits 1 time axis and time interval time allaxes dimsvar 3 yyyymmdd vairdate time tlimits top_uvalue 1 findline top_uvalue tlimits if NOT keyword_set tlimits then BEGIN date1id widget_info event top find_by_uname date1 widget_control date1id get_value date1 date2id widget_info event top find_by_uname date2 widget_control date2id get_value date2 tlimits date1 date2 ENDIF tint time where yyyymmdd GE tlimits 0 AND yyyymmdd LE tlimits 1 limits of the domain nxt n_elements xint nyt n_elements yint nzt n_elements zint jpt n_elements tint firstx where xaxis GE xint 0 0 firsty where yaxis GE yint 0 0 lasty firsty nyt 1 firstz where zaxis GE zint 0 0 firstt where time GE tint 0 0 read the array cdfid ncdf_open top_uvalue 1 findline top_uvalue filename offset firstx n_elements yaxis lasty 1 firstz firstt count nxt nyt nzt jpt tosortinv sortdim completetype type inv sort the offset and count for the case of the array is not written as a xyzt array but for example as a yzxt array offset offset tosortinv count count tosortinv call to ncdf_varget ncdf_varget cdfid varid array offset offset count count force to keep the dimension equal to 1 if count 3 eq 1 then array reform array count 0 count 1 count 2 count 3 over if not array_equal tosort lindgen 4 then array transpose temporary array tosort count nxt nyt nzt jpt if jpt eq 1 then array reform array count 0 count 1 count 2 count 3 over array reverse array 2 over if there is no longitude zoom shift the array to obtain longitude between 20 and 380 if nxt EQ 128 OR nxt EQ 256 then begin key_shift where xaxis GE 20 0 xaxis shift temporary xaxis key_shift xaxis where xaxis LT 20 xaxis where xaxis LT 20 360 array shift temporary array key_shift 0 0 0 ENDIF ELSE key_shift 0 get some informations about the array insidevar ncdf_varinq cdfid varid if insidevar natts NE 0 then begin attnames strarr insidevar natts for attiq 0 insidevar natts 1 do attnames attiq strlowcase ncdf_attname cdfid varid attiq get the name if where attnames EQ long_name 0 EQ 1 then value ELSE ncdf_attget cdfid varid long_name value varname strtrim string value 2 get the units if where attnames EQ units 0 EQ 1 then value ELSE ncdf_attget cdfid varid units value varunit strtrim string value 2 get the missing_value if where attnames EQ missing_value 0 EQ 1 then valmask 1e20 ELSE ncdf_attget cdfid varid missing_value valmask ENDIF ELSE BEGIN varunit valmask 1e20 varname ENDELSE varexp build arguments to use computehopegrid and put it together in a structure firsts firstx firsty firstz lasts firstx nxt 1 firsty nyt 1 firstz nzt 1 vargrid top_uvalue 1 findline top_uvalue pointtype selected hopegrid xaxis:xaxis yaxis:yaxis zaxis:zaxis firsts:firsts lasts:lasts type:type linetype:linetype pttype:vargrid hopestru array:array unit:varunit name:varname date:time firstt:firstt jpt 1 grid:vargrid hopegrid:hopegrid we close the netcdf file before living ncdf_close cdfid return hopestru end"); 213 213 a[211] = new Array("./ToBeReviewed/HOPE/cw_selectinterval.html", "cw_selectinterval.pro", "", " todo seb PRO testwid_event event compile_opt idl2 strictarrsubs widget_control event id get_uvalue uval if n_elements uval EQ 0 then return case uval of done :widget_control event top destroy get :BEGIN id widget_info event top find_by_uname discret widget_control id get_value value1 help value1 print value1 value1 id widget_info event top find_by_uname continus widget_control id get_value value2 help value2 print value2 value2 END ELSE: endcase return end PRO testwid _extra ex compile_opt idl2 strictarrsubs base widget_base COLUMN nothing widget_label base value beginning of the test nothing cw_selectinterval base 10 indgen 5 _extra ex uname discret uvalue discret print nothing nothing cw_selectinterval base indgen 20 _extra ex uname continus uvalue continus print nothing nothing widget_button base value get uvalue get nothing widget_button base value done uvalue done widget_control base REALIZE xmanager testwid base no_block return end function cw_selectinterval_get_value id compile_opt idl2 strictarrsubs bgroupid widget_info id find_by_uname bgroup the widget is a set of button if bgroupid ne 0 then begin widget_control bgroupid get_value selected widget_control bgroupid get_uvalue vecteur vecteur vecteur vecteur endif else begin the widget is 2 sliders Minid Widget_Info Id Find_by_uname min widget_control minid get_value minval minval minval value maxid widget_info id find_by_uname max widget_control maxid get_value maxval maxval maxval value widget_control minid get_uvalue vecteur vecteur vecteur vecteur selected where vecteur ge minval and vecteur le maxval ENDELSE if selected 0 eq 1 then return 1 else return vecteur selected END function cw_selectinterval_event event compile_opt idl2 strictarrsubs widget_control event id get_uvalue uval case uval name of min :begin change the value if the minimum for the slider called max maxid widget_info event handler find_by_uname max widget_control maxid set_value SLIDER_MIN:event value 1 end max :begin change the value if the maximum for the slider called min minid widget_info event handler find_by_uname min widget_control minid set_value SLIDER_MAX:event value 1 end bgroup : endcase return ID:event handler TOP:event top HANDLER:0L END function cw_selectinterval parent vecteur _extra ex compile_opt idl2 strictarrsubs base widget_base parent EVENT_FUNC cw_selectinterval_event FUNC_GET_VALUE cw_selectinterval_get_value PRO_SET_VALUE cw_selectinterval_set_value ROW _extra ex if n_elements vecteur le 10 then begin nothing CW_BGROUP base strtrim vecteur 1 nonexclusive row uvalue name: bgroup vecteur:vecteur uname bgroup buttvalue bytarr n_elements nothing buttvalue 0 1 widget_control nothing set_value buttvalue endif else begin min min floor vecteur max max ceil vecteur nothing cw_slider_pm base value min min min max max 1 uvalue name: min vecteur:vecteur uname min nothing cw_slider_pm base value max min min 1 max max uvalue name: max uname max endelse return base end"); 214 214 a[212] = new Array("./ToBeReviewed/HOPE/domainpart.html", "domainpart.pro", "", " todo seb pro domainpart top_uvalue basedomain selected DESTROY destroy compile_opt idl2 strictarrsubs if keyword_set destroy then BEGIN id widget_info basedomain find_by_uname title IF id NE 0 THEN widget_control id destroy id widget_info basedomain find_by_uname oddsecchoice IF id NE 0 THEN widget_control id destroy id widget_info basedomain find_by_uname evensecchoice IF id NE 0 THEN widget_control id destroy id widget_info basedomain find_by_uname odd evensecchoice IF id NE 0 THEN widget_control id destroy id widget_info basedomain find_by_uname basex IF id NE 0 THEN widget_control id destroy id widget_info basedomain find_by_uname basey IF id NE 0 THEN widget_control id destroy id widget_info basedomain find_by_uname basez IF id NE 0 THEN widget_control id destroy return endif we get the size of the dimenstion id of this section dimvar top_uvalue 1 findline top_uvalue dimvar selecteddim dimvar selected typedim top_uvalue 1 findline top_uvalue typedim sorteddim selecteddim sortdim typedim selecteddim dimlist top_uvalue 1 findline top_uvalue dimlist longitude part basex widget_info basedomain find_by_uname basex IF basex NE 0 THEN widget_control basex destroy basex widget_base basedomain row uname basex nothing widget_text basex value longitude xsize 10 nothing cw_selectinterval basex dimlist sorteddim 0 uname xinterval uvalue name: xinterval latitude part basey widget_info basedomain find_by_uname basey IF basey NE 0 THEN widget_control basey destroy basey widget_base basedomain row uname basey nothing widget_text basey value latitude xsize 10 nothing cw_selectinterval basey reverse dimlist sorteddim 1 uname yinterval uvalue name: yinterval depth part basez widget_info basedomain find_by_uname basez IF basez NE 0 THEN widget_control basez destroy basez widget_base basedomain row uname basez nothing widget_text basez value depth xsize 10 nothing cw_selectinterval basez dimlist sorteddim 2 uname zinterval uvalue name: zinterval end "); 215 215 a[213] = new Array("./ToBeReviewed/HOPE/findlineandpointtype.html", "findlineandpointtype.pro", "", " todo seb FUNCTION findlineandpointtype sectype xaxis yaxis iodir the file HOPE_lonlat nc is used in this function This file must be localized in iodir netcdf HOPE_lonlat dimensions: latTlow 242 lonTlowodd 128 latThigh 390 lonThighodd 256 variables: float latTlow latTlow latTlow:units degrees_north float lonTlowodd lonTlowodd lonTlowodd:units degrees_east lonTlowodd:point_spacing even lonTlowodd:modulo float latThigh latThigh latThigh:units degrees_north float lonThighodd lonThighodd lonThighodd:units degrees_east lonThighodd:point_spacing even lonThighodd:modulo compile_opt idl2 strictarrsubs jpi n_elements xaxis jpj n_elements yaxis depermination of the grid type and of the point type low resolution grid: jpi 128 jpj 121 x 2 jpk 20 0 1 4 2 8 4 2 5 6 odd T u T u 93 3 even T u T u 92 2 odd T u T u 91 1 even T u T u 90 0 high resolution grid: jpi 256 jpj 195 x 2 jpk 29 0 0 7 1 4 2 1 2 8 odd T u T u 91 6 even T u T u 91 0 odd T u T u 90 5 even T u T u 90 0 x0 floor xaxis 0 10 10 y0 floor yaxis 0 10 10 case sectype of xy :BEGIN if jpi NE 128 and jpi NE 256 OR jpj NE 121 AND jpj NE 121 2 AND jpj NE 195 AND jpj NE 195 2 then begin print CASE NOT coded stop ENDIF case 1 of jpj EQ 195: BEGIN case X0 OF 0:BEGIN line even vargrid T END 0 7:BEGIN case y0 OF 91 6:BEGIN line odd vargrid T END 91 0:BEGIN line even vargrid U END ELSE:BEGIN print CASE NOT coded stop END endcase END 1 4:BEGIN line odd vargrid U END endcase END jpj EQ 121:BEGIN case x0 OF 0:BEGIN line even vargrid T END 1 4:BEGIN case y0 OF 93 3:BEGIN line odd vargrid T END 92 2:BEGIN line even vargrid U END ELSE:BEGIN print CASE NOT coded stop END endcase END 2 8:BEGIN line odd vargrid U END endcase END jpj EQ 195 2:BEGIN line odd even case x0 OF 0 7:vargrid T 1 4:vargrid U ELSE:BEGIN print CASE NOT coded stop END endcase END jpj EQ 121 2:BEGIN line odd even case x0 OF 1 4:vargrid T 2 8:vargrid U ELSE:BEGIN print CASE NOT coded stop END endcase END ELSE:BEGIN print CASE NOT coded stop END endcase END xz :BEGIN if jpi NE 128 and jpi NE 256 then begin print CASE NOT coded stop ENDIF case X0 OF 0:BEGIN line even vargrid T END 0 7:BEGIN id ncdf_open iodir HOPE_lonlat nc ncdf_varget id latThigh lat test where lat EQ yaxis 0 0 if test EQ 1 then begin print CASE NOT coded stop endif IF test MOD 2 EQ 1 THEN BEGIN line even vargrid U ENDIF ELSE BEGIN line odd vargrid T ENDELSE ncdf_close id END 1 4:BEGIN if jpi EQ 128 then begin id ncdf_open iodir HOPE_lonlat nc ncdf_varget id latTlow lat test where lat EQ yaxis 0 0 if test EQ 1 then begin print CASE NOT coded stop endif IF test MOD 2 EQ 1 THEN BEGIN line even vargrid U ENDIF ELSE BEGIN line odd vargrid T ENDELSE ncdf_close id ENDIF ELSE BEGIN line odd vargrid U ENDELSE END 2 8:BEGIN line odd vargrid U END endcase END yz :BEGIN if jpj NE 121 AND jpj NE 195 then begin print CASE NOT coded stop ENDIF id ncdf_open iodir HOPE_lonlat nc case y0 of 93 3:BEGIN line odd ncdf_varget id lonTlowodd lonTodd xstep lonTodd 1 lonTodd 0 2 case 1 OF where lonTodd EQ xaxis 0 0 NE 1:vargrid T where lonTodd xstep EQ xaxis 0 0 NE 1:vargrid U ELSE:BEGIN print CASE NOT coded stop END endcase END 92 2:BEGIN line even ncdf_varget id lonTlowodd lonTodd xstep lonTodd 1 lonTodd 0 2 case 1 OF where lonTodd EQ xaxis 0 0 NE 1:vargrid U where lonTodd xstep EQ xaxis 0 0 NE 1:vargrid T ELSE:BEGIN print CASE NOT coded stop END endcase END 91 6:BEGIN line odd ncdf_varget id lonThighodd lonTodd xstep lonTodd 1 lonTodd 0 2 case 1 OF where lonTodd EQ xaxis 0 0 NE 1:vargrid T where lonTodd xstep EQ xaxis 0 0 NE 1:vargrid U ELSE:BEGIN print CASE NOT coded stop END endcase END 91 0:BEGIN line even ncdf_varget id lonThighodd lonTodd xstep lonTodd 1 lonTodd 0 2 case 1 OF where lonTodd EQ xaxis 0 0 NE 1:vargrid U where lonTodd xstep EQ xaxis 0 0 NE 1:vargrid T ELSE:BEGIN print CASE NOT coded stop END endcase END ELSE:BEGIN print CASE NOT coded stop END endcase ncdf_close id END else:BEGIN print case not coded stop END endcase return linetype:line pointtype:vargrid end"); 216 a[214] = new Array("./ToBeReviewed/HOPE/read_hope.html", "read_hope.pro", "", " pro read_hope_event event compile_opt idl2 strictarrsubs widget_control event id get_uvalue uval widget_control event top get_uvalue top_uvalue case uval name OF cancel :begin close the file cdfid top_uvalue 1 findline top_uvalue cdfid ncdf_close cdfid clear the pointer for i 0 n_elements top_uvalue 1 do ptr_free top_uvalue i kill the widget widget_control event top destroy end type choice :begin find the new type of selected section typeindex widget_info event id droplist_select selectedtype top_uvalue 1 findline top_uvalue type choice typeindex find the available variables for this type of section sectype top_uvalue 1 findline top_uvalue sectype goodvar where sectype EQ selectedtype namevar top_uvalue 1 findline top_uvalue namevar goodnamevar namevar goodvar find the selected var name varchoiceid widget_info event top find_by_uname var choice varindex widget_info varchoiceid droplist_select varchoice top_uvalue 1 findline top_uvalue var choice selectedvarname varchoice varindex do we change the variable if where goodnamevar EQ selectedvarname 0 EQ 1 then begin selectedvarname goodnamevar 0 varindex where varchoice EQ selectedvarname 0 widget_control varchoiceid set_droplist_select varindex ENDIF displays the different domains selected goodvar where goodnamevar EQ selectedvarname rh_alldomains event top selected end var choice :BEGIN find the new variable varindex widget_info event id droplist_select selectedvar top_uvalue 1 findline top_uvalue var choice varindex find the available variables for this type of section namevar top_uvalue 1 findline top_uvalue namevar goodvar where namevar EQ selectedvar sectype top_uvalue 1 findline top_uvalue sectype goodtype sectype goodvar find the selected type of section typechoiceid widget_info event top find_by_uname type choice typeindex widget_info typechoiceid droplist_select typechoice top_uvalue 1 findline top_uvalue type choice selectedtype typechoice typeindex do we change the type of section if where goodtype EQ selectedtype 0 EQ 1 then begin selectedtype goodtype 0 typeindex where typechoice EQ selectedtype 0 widget_control typechoiceid set_droplist_select typeindex ENDIF displays the different domains selected goodvar where goodtype EQ selectedtype rh_alldomains event top selected END plot :BEGIN plot the array res createhopestruct event type of section selected top_uvalue 1 findline top_uvalue selected type top_uvalue 1 findline top_uvalue sectype selected get the informations of cw_specifie specifieid widget_info event top find_by_uname specifie widget_control specifieid get_value specifie specifie struct2string specifie direct2string case type of x :command plt1d res x specifie y :command plt1d res y specifie z :command plt1d res z specifie t :command pltt res t specifie xy :command plt res specifie xz :command pltz res xz specifie yz :command pltz res yz specifie xt :command pltt res xt specifie yt :command pltt res yt specifie zt :command pltt res zt specifie xyz : xyt : yzt : xyzt : ENDCASE test execute command if test EQ 0 then stop end linechoice :BEGIN if event select EQ 1 then begin sensitive bytarr 3 sensitive where odd even odd even eq event value 1 basedomainodd widget_info event top find_by_uname basedomainodd widget_control basedomainodd sensitive sensitive 0 basedomaineven widget_info event top find_by_uname basedomaineven widget_control basedomaineven sensitive sensitive 1 basedomainoddeven widget_info event top find_by_uname basedomainodd even widget_control basedomainoddeven sensitive sensitive 2 case where sensitive EQ 1 0 of 0:BEGIN widget_control basedomainodd get_uvalue oddsecchoice oddsecchoiceid widget_info event top find_by_uname oddsecchoice if oddsecchoiceid NE 0 then index widget_info oddsecchoiceid droplist_select ELSE index 0 top_uvalue 1 findline top_uvalue selected oddsecchoice index END 1:BEGIN widget_control basedomaineven get_uvalue evensecchoice evensecchoiceid widget_info event top find_by_uname evensecchoice if evensecchoiceid NE 0 then index widget_info evensecchoiceid droplist_select ELSE index 0 top_uvalue 1 findline top_uvalue selected evensecchoice index END 2:BEGIN widget_control basedomainodd get_uvalue oddevensecchoice oddevensecchoiceid widget_info event top find_by_uname odd evensecchoice if oddevensecchoiceid NE 0 then index widget_info oddevensecchoiceid droplist_select ELSE index 0 top_uvalue 1 findline top_uvalue selected oddevensecchoice index END endcase endif END oddsecchoice :BEGIN widget_control event top update 0 basedomainodd widget_info event top find_by_uname basedomainodd widget_control basedomainodd get_uvalue oddsecchoice domainpart top_uvalue basedomainodd oddsecchoice event index top_uvalue 1 findline top_uvalue selected oddsecchoice event index widget_control event top update 1 END evensecchoice :BEGIN widget_control event top update 0 basedomaineven widget_info event top find_by_uname basedomaineven widget_control basedomaineven get_uvalue evensecchoice domainpart top_uvalue basedomaineven evensecchoice event index top_uvalue 1 findline top_uvalue selected evensecchoice event index widget_control event top update 1 END odd evensecchoice :BEGIN widget_control event top update 0 basedomainoddeven widget_info event top find_by_uname basedomainodd even widget_control basedomainoddeven get_uvalue oddevensecchoice domainpart top_uvalue basedomainoddeven oddevensecchoice event index top_uvalue 1 findline top_uvalue selected oddevensecchoice event index widget_control event top update 1 END date1 :BEGIN date2id widget_info event top find_by_uname date2 widget_control date2id get_value date2 if event value GT date2 then widget_control date2id set_value event value END date2 :BEGIN date1id widget_info event top find_by_uname date1 widget_control date1id get_value date1 if event value LT date1 then widget_control date1id set_value event value END else: endcase return end file_comments Read the Hope grid file converted in NetCdf by xconv categories Reading param TYPEIN in required A string specifing from which type of section the 4D array based: xy xz yz param VARNAMEIN A string the name of the cariable to be read in lower or upper case keyword FILENAME The name of the file to be read keyword XLIMITS A two elements vertor lonmin lonmax the bondary of the longitudes from 0 to 360 keyword YLIMITS A two elements vertor latmin latmax the bondary of the latitudes from 90 to 90 keyword ZLIMITS A two elements vertor depthmin depthmax the bondary of the depth keyword TLIMITS A two elements vertor date1 date2 the bondary of the calendar with date1 and date2 folowing the syntaxe yyyymmdd keyword ODDPT Activate to read only the sections located on ODD points keyword EVENPT Activate to read only the sections located on even points keyword ODDEVENPT Activate to read only the sections located on both even and odd points horizontal sections keyword _EXTRA Used to pass yor keywords returns 1 if typein and varnamein are undefine this is the widget version A structure which but be read by litchamp pro and is necessary to complute the grid associated to the data see the example uses common pro usefull only for the definition of iodir restrictions x y z t xt yt and zt section not coded xconv must be able to works with this kind of fonction The grib file has no zoom possibilities on horizontal dimensions restrictions When typein and varnamein are defined the methode to find the godd variable is: 1 find the variables which are available on this type of sections woth this name 2 if ODDPT EVENPT or ODDEVENPT are specified consider only these types of sections 3 For an XY section the chosen variable is the one which has the most level in the vertical domain specified by ZLIMITS For an XZ section the chosen variable is the one which has the most points in the latitude domain specified by YLIMITS For an YZ section the chosen variable is the one which has the most points in the longitude domain specified by XLIMITS examples IDL a read_hope xy ocpt filename CLIM_CNT_1993 1998 nc IDL help a struct Structure 6 tags length 1860176 refs 1: ARRAY FLOAT Array 128 242 15 UNIT STRING deg C NAME STRING Ocean potential temperature DATE FLOAT Array 1 GRID STRING T HOPEGRID STRUCT Array 1 IDL help a hopegrid struct Structure 8 tags length 1588 refs 2: XAXIS FLOAT Array 128 YAXIS FLOAT Array 242 ZAXIS FLOAT Array 15 FIRSTS LONG Array 3 LASTS LONG Array 3 TYPE STRING xy LINETYPE STRING odd even PTTYPE STRING T IDL help litchamp a FLOAT Array 128 242 15 history Sebastien Masson smasson lodyc jussieu fr June 2001 version Id FUNCTION read_hope typein varnamein FILENAME filename XLIMITS xlimits YLIMITS ylimits ZLIMITS zlimits TLIMITS tlimits ODDPT oddpt ODDEVENPT oddevenpt EVENPT evenpt _extra ex compile_opt idl2 strictarrsubs common usefull only for the definition of iodir if n_elements filename EQ 0 then filename isafile iodirectory iodir _extra ex IF size filename type NE 7 THEN return 1 filename isafile filename filename iodirectory iodir _extra ex cdfid ncdf_open filename id of the netcdf file wathinside ncdf_inquire cdfid structure with global informations dimensions namedim strarr wathinside ndims name of the dimensions typedim strarr wathinside ndims type of the dimensions x y z t sizedim lonarr wathinside ndims size of each dimension loop on the dimensions to get the names and sizes for dimiq 0 wathinside ndims 1 do begin ncdf_diminq cdfid dimiq name value namedim dimiq name case 1 of STRCMP name lon 3 FOLD_CASE :typedim dimiq x STRCMP name lat 3 FOLD_CASE :typedim dimiq y STRCMP name z 1 FOLD_CASE :typedim dimiq z STRCMP name t 1 FOLD_CASE :typedim dimiq t ELSE:BEGIN ncdf_close cdfid return report Unknown name of dimension END endcase sizedim dimiq value endfor dimlist: structure which contains the name and the value of each dimension we suppose that there is always a variable which has the same name that the dimension and which gives the values of this dimension ncdf_varget cdfid namedim 0 value dimlist create_struct namedim 0 value for dimiq 1 wathinside ndims 1 do begin ncdf_varget cdfid namedim dimiq value get the value dimlist create_struct dimlist namedim dimiq value endfor variables namevar strarr wathinside nvars names of the variables ndimsvar lonarr wathinside nvars number of dim for each variable dimvar replicate 1 wathinside ndims wathinside nvars dims of each variables loop over the variable ids to fill namevar ndimsvar and dimvar for varid 0 wathinside nvars 1 do begin res ncdf_varinq cdfid varid namevar varid res name namevar varid strjoin strsplit namevar varid _ 0 99 EXTRACT REGEX ndimsvar varid res ndims dimvar 0:res ndims 1 varid res dim ENDFOR we cut dimvar to select only the interessant part dimvar dimvar 0:max ndimsvar 1 selection of the data variables which are diffrent from the dimension variables we suppose that that data variables are 4D array with sometime dimensions equal to 1 they must be different from dimension variables which have only 1 dimension datavarid where ndimsvar eq 4 numberofvar n_elements datavarid namevar namevar datavarid ndimsvar ndimsvar datavarid dimvar dimvar datavarid sectype strarr numberofvar the type of section for each variable : xy xz yz linetype strarr numberofvar the line of the points : odd even or odd even pointtype strarr numberofvar the type of variable : scalar T or vector U for i 0 numberofvar 1 do begin dimofthevar dimvar i sectype i typedim dimofthevar 0 typedim dimofthevar 1 xaxisid dimofthevar where typedim dimofthevar EQ x yaxisid dimofthevar where typedim dimofthevar EQ y lineandpt findlineandpointtype sectype i dimlist xaxisid 0 dimlist yaxisid 0 iodir linetype i lineandpt linetype pointtype i lineandpt pointtype endfor definition of the widget base widget_base column first base: droplist to select the type of section droplist to select the variable button to select type of line : odd even or odd even base1 widget_base base row frame typechoice sectype uniq sectype sort sectype if n_elements typechoice GT 1 then typechoice typechoice sortdim typechoice base11 widget_droplist base1 title Type of section value typechoice uvalue name: type choice uname type choice if n_elements typein NE 0 then BEGIN selectedtype strmid typein 0 2 widget_control base11 set_droplist_select 0L where typechoice EQ selectedtype 0 ENDIF ELSE selectedtype typechoice 0 varchoice namevar uniq namevar sort namevar base12 widget_droplist base1 title Available data value varchoice uvalue name: var choice uname var choice if n_elements varnamein NE 0 THEN BEGIN selectedname varnamein widget_control base12 set_droplist_select 0L where strlowcase varchoice EQ strlowcase varnamein 0 ENDIF ELSE selectedname varchoice 0 base13 widget_base base1 row uname linechoicebase base 2: base to select the domain of the odd points base2 widget_base base column uname basedomainodd frame base 3: base to select the domain of the even points base3 widget_base base column uname basedomaineven frame base 4: base to select the domain of the odd even points base4 widget_base base column uname basedomainodd even frame base 5: calendar base5 widget_base base row uname baset frame timename strlowcase tag_names dimlist wathinside recdim read the time axis in julina days time ncdf_timeget cdfid timename update the dimlist structure dimlist wathinside recdim time base51 cw_calendar base5 time uname date1 uvalue name: date1 base52 cw_calendar base5 time uname date2 uvalue name: date2 base 6: base to select the min max and others keywords base6 cw_specifie base column uname specifie uvalue name: specifie base 7: last base with the action buttons base7 widget_base base row uname finalaction base71 widget_button base7 value Plot uvalue name: plot base72 widget_button base7 value Cancel uvalue name: cancel determination of the selected variable goodname 0 where strlowcase namevar EQ strlowcase selectedname goodtype 0 where sectype EQ selectedtype selected inter goodname goodtype if selected 0 EQ 1 then BEGIN widget_control base destroy ncdf_close cdfid return report impossible combinaison : type of section selectedtype variable name selectedname ENDIF if n_elements typein NE 0 then BEGIN if NOT keyword_set xlimits then xlimits 1e9 1e9 if NOT keyword_set ylimits then ylimits 1e9 1e9 if NOT keyword_set zlimits then zlimits 1e9 1e9 if NOT keyword_set tlimits then tlimits 1e9 1e9 ENDIF if n_elements typein NE 0 AND n_elements selected NE 1 then BEGIN if keyword_set oddpt then selected inter selected where linetype EQ odd if keyword_set evenpt then selected inter selected where linetype EQ even if keyword_set oddevenpt then selected inter selected where linetype EQ odd even if selected 0 EQ 1 then BEGIN widget_control base destroy ncdf_close cdfid return report impossible combinaison : type of section selectedtype variable name selectedname and line type endif if n_elements selected NE 1 then begin case selectedtype of xy :BEGIN choice on the vertical axis choice based on the variable which has the most available levels between the zlimits if NOT keyword_set zlimits then begin print case not coded stop ENDIF number lonarr n_elements selected for i 0 n_elements selected 1 do begin zdim dimvar 2 selected i zaxis dimlist zdim nothing where zaxis GE zlimits 0 AND zaxis LE zlimits 1 count number i count ENDFOR selected selected where number EQ max number if n_elements selected NE 1 then begin print case not coded stop endif END xz :BEGIN choice on the latitude axis if NOT keyword_set ylimits then begin print case not coded stop ENDIF number lonarr n_elements selected for i 0 n_elements selected 1 do begin ydim dimvar 2 selected i yaxis dimlist ydim nothing where yaxis GE ylimits 0 AND yaxis LE ylimits 1 count number i count ENDFOR selected selected where number EQ max number if n_elements selected NE 1 then begin print case not coded stop endif END yz :BEGIN choice on the longitude axis if NOT keyword_set xlimits then begin print case not coded stop ENDIF number lonarr n_elements selected for i 0 n_elements selected 1 do begin xdim dimvar 2 selected i xaxis dimlist xdim nothing where xaxis GE xlimits 0 AND xaxis LE xlimits 1 count number i count ENDFOR selected selected where number EQ max number if n_elements selected NE 1 then begin print case not coded stop endif END endcase endif ENDIF definition of the uvalue of the base which allows to share the variables between programs top_uvalue ptrarr 2 18 allocate_heap top_uvalue 0 0 type choice top_uvalue 1 0 temporary typechoice top_uvalue 0 1 var choice top_uvalue 1 1 temporary varchoice top_uvalue 0 2 namevar top_uvalue 1 2 temporary namevar top_uvalue 0 3 dimvar top_uvalue 1 3 temporary dimvar top_uvalue 0 4 sectype top_uvalue 1 4 temporary sectype top_uvalue 0 5 linetype top_uvalue 1 5 temporary linetype top_uvalue 0 6 pointtype top_uvalue 1 6 temporary pointtype top_uvalue 0 7 dimlist top_uvalue 1 7 temporary dimlist top_uvalue 0 8 typedim top_uvalue 1 8 temporary typedim top_uvalue 0 9 sizedim top_uvalue 1 9 temporary sizedim top_uvalue 0 10 cdfid top_uvalue 1 10 cdfid top_uvalue 0 11 datavarid top_uvalue 1 11 datavarid top_uvalue 0 12 selected top_uvalue 1 12 selected top_uvalue 0 13 filename top_uvalue 1 13 filename top_uvalue 0 14 xlimits top_uvalue 1 14 testvar var xlimits top_uvalue 0 15 ylimits top_uvalue 1 15 testvar var ylimits top_uvalue 0 16 zlimits top_uvalue 1 16 testvar var zlimits top_uvalue 0 17 tlimits top_uvalue 1 17 testvar var tlimits widget_control base set_uvalue top_uvalue rh_alldomains base selected if n_params EQ 0 then BEGIN we use the widget widget_control base REALIZE xmanager read_hope base no_block return 1 ENDIF get the output output createhopestruct top:base clear the pointer for i 0 n_elements top_uvalue 1 do ptr_free top_uvalue i close the file ncdf_close cdfid return output end");216 a[214] = new Array("./ToBeReviewed/HOPE/read_hope.html", "read_hope.pro", "", " pro read_hope_event event compile_opt idl2 strictarrsubs widget_control event id get_uvalue uval widget_control event top get_uvalue top_uvalue case uval name OF cancel :begin close the file cdfid top_uvalue 1 findline top_uvalue cdfid ncdf_close cdfid clear the pointer for i 0 n_elements top_uvalue 1 do ptr_free top_uvalue i kill the widget widget_control event top destroy end type choice :begin find the new type of selected section typeindex widget_info event id droplist_select selectedtype top_uvalue 1 findline top_uvalue type choice typeindex find the available variables for this type of section sectype top_uvalue 1 findline top_uvalue sectype goodvar where sectype EQ selectedtype namevar top_uvalue 1 findline top_uvalue namevar goodnamevar namevar goodvar find the selected var name varchoiceid widget_info event top find_by_uname var choice varindex widget_info varchoiceid droplist_select varchoice top_uvalue 1 findline top_uvalue var choice selectedvarname varchoice varindex do we change the variable if where goodnamevar EQ selectedvarname 0 EQ 1 then begin selectedvarname goodnamevar 0 varindex where varchoice EQ selectedvarname 0 widget_control varchoiceid set_droplist_select varindex ENDIF displays the different domains selected goodvar where goodnamevar EQ selectedvarname rh_alldomains event top selected end var choice :BEGIN find the new variable varindex widget_info event id droplist_select selectedvar top_uvalue 1 findline top_uvalue var choice varindex find the available variables for this type of section namevar top_uvalue 1 findline top_uvalue namevar goodvar where namevar EQ selectedvar sectype top_uvalue 1 findline top_uvalue sectype goodtype sectype goodvar find the selected type of section typechoiceid widget_info event top find_by_uname type choice typeindex widget_info typechoiceid droplist_select typechoice top_uvalue 1 findline top_uvalue type choice selectedtype typechoice typeindex do we change the type of section if where goodtype EQ selectedtype 0 EQ 1 then begin selectedtype goodtype 0 typeindex where typechoice EQ selectedtype 0 widget_control typechoiceid set_droplist_select typeindex ENDIF displays the different domains selected goodvar where goodtype EQ selectedtype rh_alldomains event top selected END plot :BEGIN plot the array res createhopestruct event type of section selected top_uvalue 1 findline top_uvalue selected type top_uvalue 1 findline top_uvalue sectype selected get the informations of cw_specifie specifieid widget_info event top find_by_uname specifie widget_control specifieid get_value specifie specifie struct2string specifie direct2string case type of x :command plt1d res x specifie y :command plt1d res y specifie z :command plt1d res z specifie t :command pltt res t specifie xy :command plt res specifie xz :command pltz res xz specifie yz :command pltz res yz specifie xt :command pltt res xt specifie yt :command pltt res yt specifie zt :command pltt res zt specifie xyz : xyt : yzt : xyzt : ENDCASE test execute command if test EQ 0 then stop end linechoice :BEGIN if event select EQ 1 then begin sensitive bytarr 3 sensitive where odd even odd even eq event value 1 basedomainodd widget_info event top find_by_uname basedomainodd widget_control basedomainodd sensitive sensitive 0 basedomaineven widget_info event top find_by_uname basedomaineven widget_control basedomaineven sensitive sensitive 1 basedomainoddeven widget_info event top find_by_uname basedomainodd even widget_control basedomainoddeven sensitive sensitive 2 case where sensitive EQ 1 0 of 0:BEGIN widget_control basedomainodd get_uvalue oddsecchoice oddsecchoiceid widget_info event top find_by_uname oddsecchoice if oddsecchoiceid NE 0 then index widget_info oddsecchoiceid droplist_select ELSE index 0 top_uvalue 1 findline top_uvalue selected oddsecchoice index END 1:BEGIN widget_control basedomaineven get_uvalue evensecchoice evensecchoiceid widget_info event top find_by_uname evensecchoice if evensecchoiceid NE 0 then index widget_info evensecchoiceid droplist_select ELSE index 0 top_uvalue 1 findline top_uvalue selected evensecchoice index END 2:BEGIN widget_control basedomainodd get_uvalue oddevensecchoice oddevensecchoiceid widget_info event top find_by_uname odd evensecchoice if oddevensecchoiceid NE 0 then index widget_info oddevensecchoiceid droplist_select ELSE index 0 top_uvalue 1 findline top_uvalue selected oddevensecchoice index END endcase endif END oddsecchoice :BEGIN widget_control event top update 0 basedomainodd widget_info event top find_by_uname basedomainodd widget_control basedomainodd get_uvalue oddsecchoice domainpart top_uvalue basedomainodd oddsecchoice event index top_uvalue 1 findline top_uvalue selected oddsecchoice event index widget_control event top update 1 END evensecchoice :BEGIN widget_control event top update 0 basedomaineven widget_info event top find_by_uname basedomaineven widget_control basedomaineven get_uvalue evensecchoice domainpart top_uvalue basedomaineven evensecchoice event index top_uvalue 1 findline top_uvalue selected evensecchoice event index widget_control event top update 1 END odd evensecchoice :BEGIN widget_control event top update 0 basedomainoddeven widget_info event top find_by_uname basedomainodd even widget_control basedomainoddeven get_uvalue oddevensecchoice domainpart top_uvalue basedomainoddeven oddevensecchoice event index top_uvalue 1 findline top_uvalue selected oddevensecchoice event index widget_control event top update 1 END date1 :BEGIN date2id widget_info event top find_by_uname date2 widget_control date2id get_value date2 if event value GT date2 then widget_control date2id set_value event value END date2 :BEGIN date1id widget_info event top find_by_uname date1 widget_control date1id get_value date1 if event value LT date1 then widget_control date1id set_value event value END else: endcase return end file_comments Read the Hope grid file converted in NetCdf by xconv categories Reading param TYPEIN in required A string specifing from which type of section the 4D array based: xy xz yz param VARNAMEIN A string the name of the cariable to be read in lower or upper case keyword FILENAME The name of the file to be read keyword XLIMITS A two elements vertor lonmin lonmax the bondary of the longitudes from 0 to 360 keyword YLIMITS A two elements vertor latmin latmax the bondary of the latitudes from 90 to 90 keyword ZLIMITS A two elements vertor depthmin depthmax the bondary of the depth keyword TLIMITS A two elements vertor date1 date2 the bondary of the calendar with date1 and date2 folowing the syntaxe yyyymmdd keyword ODDPT Activate to read only the sections located on ODD points keyword EVENPT Activate to read only the sections located on even points keyword ODDEVENPT Activate to read only the sections located on both even and odd points horizontal sections keyword _EXTRA Used to pass yor keywords returns 1 if typein and varnamein are undefine this is the widget version A structure which but be read by litchamp pro and is necessary to complute the grid associated to the data see the example uses common pro usefull only for the definition of iodir restrictions x y z t xt yt and zt section not coded xconv must be able to works with this kind of fonction The grib file has no zoom possibilities on horizontal dimensions restrictions When typein and varnamein are defined the methode to find the godd variable is: 1 find the variables which are available on this type of sections woth this name 2 if ODDPT EVENPT or ODDEVENPT are specified consider only these types of sections 3 For an XY section the chosen variable is the one which has the most level in the vertical domain specified by ZLIMITS For an XZ section the chosen variable is the one which has the most points in the latitude domain specified by YLIMITS For an YZ section the chosen variable is the one which has the most points in the longitude domain specified by XLIMITS examples IDL a read_hope xy ocpt filename CLIM_CNT_1993 1998 nc IDL help a struct Structure 6 tags length 1860176 refs 1: ARRAY FLOAT Array 128 242 15 UNIT STRING deg C NAME STRING Ocean potential temperature DATE FLOAT Array 1 GRID STRING T HOPEGRID STRUCT Array 1 IDL help a hopegrid struct Structure 8 tags length 1588 refs 2: XAXIS FLOAT Array 128 YAXIS FLOAT Array 242 ZAXIS FLOAT Array 15 FIRSTS LONG Array 3 LASTS LONG Array 3 TYPE STRING xy LINETYPE STRING odd even PTTYPE STRING T IDL help litchamp a FLOAT Array 128 242 15 history Sebastien Masson smasson lodyc jussieu fr June 2001 version Id: read_hope pro 142 2006 07 21 12:47:49Z navarro FUNCTION read_hope typein varnamein FILENAME filename XLIMITS xlimits YLIMITS ylimits ZLIMITS zlimits TLIMITS tlimits ODDPT oddpt ODDEVENPT oddevenpt EVENPT evenpt _extra ex compile_opt idl2 strictarrsubs common usefull only for the definition of iodir if n_elements filename EQ 0 then filename isafile iodirectory iodir _extra ex IF size filename type NE 7 THEN return 1 filename isafile filename filename iodirectory iodir _extra ex cdfid ncdf_open filename id of the netcdf file wathinside ncdf_inquire cdfid structure with global informations dimensions namedim strarr wathinside ndims name of the dimensions typedim strarr wathinside ndims type of the dimensions x y z t sizedim lonarr wathinside ndims size of each dimension loop on the dimensions to get the names and sizes for dimiq 0 wathinside ndims 1 do begin ncdf_diminq cdfid dimiq name value namedim dimiq name case 1 of STRCMP name lon 3 FOLD_CASE :typedim dimiq x STRCMP name lat 3 FOLD_CASE :typedim dimiq y STRCMP name z 1 FOLD_CASE :typedim dimiq z STRCMP name t 1 FOLD_CASE :typedim dimiq t ELSE:BEGIN ncdf_close cdfid return report Unknown name of dimension END endcase sizedim dimiq value endfor dimlist: structure which contains the name and the value of each dimension we suppose that there is always a variable which has the same name that the dimension and which gives the values of this dimension ncdf_varget cdfid namedim 0 value dimlist create_struct namedim 0 value for dimiq 1 wathinside ndims 1 do begin ncdf_varget cdfid namedim dimiq value get the value dimlist create_struct dimlist namedim dimiq value endfor variables namevar strarr wathinside nvars names of the variables ndimsvar lonarr wathinside nvars number of dim for each variable dimvar replicate 1 wathinside ndims wathinside nvars dims of each variables loop over the variable ids to fill namevar ndimsvar and dimvar for varid 0 wathinside nvars 1 do begin res ncdf_varinq cdfid varid namevar varid res name namevar varid strjoin strsplit namevar varid _ 0 99 EXTRACT REGEX ndimsvar varid res ndims dimvar 0:res ndims 1 varid res dim ENDFOR we cut dimvar to select only the interessant part dimvar dimvar 0:max ndimsvar 1 selection of the data variables which are diffrent from the dimension variables we suppose that that data variables are 4D array with sometime dimensions equal to 1 they must be different from dimension variables which have only 1 dimension datavarid where ndimsvar eq 4 numberofvar n_elements datavarid namevar namevar datavarid ndimsvar ndimsvar datavarid dimvar dimvar datavarid sectype strarr numberofvar the type of section for each variable : xy xz yz linetype strarr numberofvar the line of the points : odd even or odd even pointtype strarr numberofvar the type of variable : scalar T or vector U for i 0 numberofvar 1 do begin dimofthevar dimvar i sectype i typedim dimofthevar 0 typedim dimofthevar 1 xaxisid dimofthevar where typedim dimofthevar EQ x yaxisid dimofthevar where typedim dimofthevar EQ y lineandpt findlineandpointtype sectype i dimlist xaxisid 0 dimlist yaxisid 0 iodir linetype i lineandpt linetype pointtype i lineandpt pointtype endfor definition of the widget base widget_base column first base: droplist to select the type of section droplist to select the variable button to select type of line : odd even or odd even base1 widget_base base row frame typechoice sectype uniq sectype sort sectype if n_elements typechoice GT 1 then typechoice typechoice sortdim typechoice base11 widget_droplist base1 title Type of section value typechoice uvalue name: type choice uname type choice if n_elements typein NE 0 then BEGIN selectedtype strmid typein 0 2 widget_control base11 set_droplist_select 0L where typechoice EQ selectedtype 0 ENDIF ELSE selectedtype typechoice 0 varchoice namevar uniq namevar sort namevar base12 widget_droplist base1 title Available data value varchoice uvalue name: var choice uname var choice if n_elements varnamein NE 0 THEN BEGIN selectedname varnamein widget_control base12 set_droplist_select 0L where strlowcase varchoice EQ strlowcase varnamein 0 ENDIF ELSE selectedname varchoice 0 base13 widget_base base1 row uname linechoicebase base 2: base to select the domain of the odd points base2 widget_base base column uname basedomainodd frame base 3: base to select the domain of the even points base3 widget_base base column uname basedomaineven frame base 4: base to select the domain of the odd even points base4 widget_base base column uname basedomainodd even frame base 5: calendar base5 widget_base base row uname baset frame timename strlowcase tag_names dimlist wathinside recdim read the time axis in julina days time ncdf_timeget cdfid timename update the dimlist structure dimlist wathinside recdim time base51 cw_calendar base5 time uname date1 uvalue name: date1 base52 cw_calendar base5 time uname date2 uvalue name: date2 base 6: base to select the min max and others keywords base6 cw_specifie base column uname specifie uvalue name: specifie base 7: last base with the action buttons base7 widget_base base row uname finalaction base71 widget_button base7 value Plot uvalue name: plot base72 widget_button base7 value Cancel uvalue name: cancel determination of the selected variable goodname 0 where strlowcase namevar EQ strlowcase selectedname goodtype 0 where sectype EQ selectedtype selected inter goodname goodtype if selected 0 EQ 1 then BEGIN widget_control base destroy ncdf_close cdfid return report impossible combinaison : type of section selectedtype variable name selectedname ENDIF if n_elements typein NE 0 then BEGIN if NOT keyword_set xlimits then xlimits 1e9 1e9 if NOT keyword_set ylimits then ylimits 1e9 1e9 if NOT keyword_set zlimits then zlimits 1e9 1e9 if NOT keyword_set tlimits then tlimits 1e9 1e9 ENDIF if n_elements typein NE 0 AND n_elements selected NE 1 then BEGIN if keyword_set oddpt then selected inter selected where linetype EQ odd if keyword_set evenpt then selected inter selected where linetype EQ even if keyword_set oddevenpt then selected inter selected where linetype EQ odd even if selected 0 EQ 1 then BEGIN widget_control base destroy ncdf_close cdfid return report impossible combinaison : type of section selectedtype variable name selectedname and line type endif if n_elements selected NE 1 then begin case selectedtype of xy :BEGIN choice on the vertical axis choice based on the variable which has the most available levels between the zlimits if NOT keyword_set zlimits then begin print case not coded stop ENDIF number lonarr n_elements selected for i 0 n_elements selected 1 do begin zdim dimvar 2 selected i zaxis dimlist zdim nothing where zaxis GE zlimits 0 AND zaxis LE zlimits 1 count number i count ENDFOR selected selected where number EQ max number if n_elements selected NE 1 then begin print case not coded stop endif END xz :BEGIN choice on the latitude axis if NOT keyword_set ylimits then begin print case not coded stop ENDIF number lonarr n_elements selected for i 0 n_elements selected 1 do begin ydim dimvar 2 selected i yaxis dimlist ydim nothing where yaxis GE ylimits 0 AND yaxis LE ylimits 1 count number i count ENDFOR selected selected where number EQ max number if n_elements selected NE 1 then begin print case not coded stop endif END yz :BEGIN choice on the longitude axis if NOT keyword_set xlimits then begin print case not coded stop ENDIF number lonarr n_elements selected for i 0 n_elements selected 1 do begin xdim dimvar 2 selected i xaxis dimlist xdim nothing where xaxis GE xlimits 0 AND xaxis LE xlimits 1 count number i count ENDFOR selected selected where number EQ max number if n_elements selected NE 1 then begin print case not coded stop endif END endcase endif ENDIF definition of the uvalue of the base which allows to share the variables between programs top_uvalue ptrarr 2 18 allocate_heap top_uvalue 0 0 type choice top_uvalue 1 0 temporary typechoice top_uvalue 0 1 var choice top_uvalue 1 1 temporary varchoice top_uvalue 0 2 namevar top_uvalue 1 2 temporary namevar top_uvalue 0 3 dimvar top_uvalue 1 3 temporary dimvar top_uvalue 0 4 sectype top_uvalue 1 4 temporary sectype top_uvalue 0 5 linetype top_uvalue 1 5 temporary linetype top_uvalue 0 6 pointtype top_uvalue 1 6 temporary pointtype top_uvalue 0 7 dimlist top_uvalue 1 7 temporary dimlist top_uvalue 0 8 typedim top_uvalue 1 8 temporary typedim top_uvalue 0 9 sizedim top_uvalue 1 9 temporary sizedim top_uvalue 0 10 cdfid top_uvalue 1 10 cdfid top_uvalue 0 11 datavarid top_uvalue 1 11 datavarid top_uvalue 0 12 selected top_uvalue 1 12 selected top_uvalue 0 13 filename top_uvalue 1 13 filename top_uvalue 0 14 xlimits top_uvalue 1 14 testvar var xlimits top_uvalue 0 15 ylimits top_uvalue 1 15 testvar var ylimits top_uvalue 0 16 zlimits top_uvalue 1 16 testvar var zlimits top_uvalue 0 17 tlimits top_uvalue 1 17 testvar var tlimits widget_control base set_uvalue top_uvalue rh_alldomains base selected if n_params EQ 0 then BEGIN we use the widget widget_control base REALIZE xmanager read_hope base no_block return 1 ENDIF get the output output createhopestruct top:base clear the pointer for i 0 n_elements top_uvalue 1 do ptr_free top_uvalue i close the file ncdf_close cdfid return output end"); 217 217 a[215] = new Array("./ToBeReviewed/HOPE/rh_alldomains.html", "rh_alldomains.pro", "", " todo seb PRO rh_alldomains topid selected compile_opt idl2 strictarrsubs widget_control topid get_uvalue top_uvalue widget_control topid update 0 selectedline top_uvalue 1 findline top_uvalue linetype selected we get the size of the dimenstion id of this section dimvar top_uvalue 1 findline top_uvalue dimvar typedim top_uvalue 1 findline top_uvalue typedim dimlist top_uvalue 1 findline top_uvalue dimlist sizedim top_uvalue 1 findline top_uvalue sizedim buttons to select type of line : odd even or odd even linechoicebase widget_info topid find_by_uname linechoicebase id widget_info linechoicebase find_by_uname linechoice IF id NE 0 THEN widget_control id destroy choice if where selectedline EQ odd 0 NE 1 then choice choice odd if where selectedline EQ even 0 NE 1 then choice choice even if where selectedline EQ odd even 0 NE 1 then choice choice odd even choice choice 1:n_elements choice 1 nothing cw_bgroup linechoicebase choice row exclusive return_name uname linechoice uvalue name: linechoice widget_control nothing set_value 0 sensitive bytarr 3 sensitive where odd even odd even eq choice 0 1 odd points domain basedomainodd widget_info topid find_by_uname basedomainodd id widget_info basedomainodd find_by_uname title IF id NE 0 THEN widget_control id destroy oddsecchoice where selectedline EQ odd if oddsecchoice 0 NE 1 then BEGIN oddsecchoice selected oddsecchoice nothing widget_label basedomainodd value Domain of the odd points uname title IF n_elements oddsecchoice GT 1 THEN BEGIN selecteddim dimvar oddsecchoice sorteddim selecteddim FOR i 0 n_elements oddsecchoice 1 DO sorteddim i selecteddim sortdim typedim selecteddim i i zdim sorteddim 2 sizedims sizedim zdim sortedzdim sort sizedims sizedims sizedims sortedzdim oddsecchoice oddsecchoice sortedzdim nothing widget_droplist basedomainodd title number of levels value strtrim sizedims 2 uvalue name: oddsecchoice uname oddsecchoice ENDIF domainpart top_uvalue basedomainodd oddsecchoice 0 widget_control basedomainodd set_uvalue oddsecchoice ENDIF ELSE BEGIN nothing widget_label basedomainodd value uname title domainpart top_uvalue basedomainodd destroy widget_control basedomainodd set_uvalue 1 ENDELSE widget_control basedomainodd sensitive sensitive 0 even points domain basedomaineven widget_info topid find_by_uname basedomaineven id widget_info basedomaineven find_by_uname title IF id NE 0 THEN widget_control id destroy evensecchoice where selectedline EQ even if evensecchoice 0 NE 1 then BEGIN evensecchoice selected evensecchoice nothing widget_label basedomaineven value Domain of the even points uname title IF n_elements evensecchoice GT 1 THEN BEGIN selecteddim dimvar evensecchoice sorteddim selecteddim FOR i 0 n_elements evensecchoice 1 DO sorteddim i selecteddim sortdim typedim selecteddim i i zdim sorteddim 2 sizedims sizedim zdim sortedzdim sort sizedims sizedims sizedims sortedzdim evensecchoice evensecchoice sortedzdim nothing widget_droplist basedomaineven title number of levels value strtrim sizedims 2 uvalue name: evensecchoice uname evensecchoice ENDIF domainpart top_uvalue basedomaineven evensecchoice 0 widget_control basedomaineven set_uvalue evensecchoice ENDIF ELSE BEGIN domainpart top_uvalue basedomaineven destroy nothing widget_label basedomaineven value uname title widget_control basedomaineven set_uvalue 1 ENDELSE widget_control basedomaineven sensitive sensitive 1 odd even points domain basedomainoddeven widget_info topid find_by_uname basedomainodd even id widget_info basedomainoddeven find_by_uname title IF id NE 0 THEN widget_control id destroy oddevensecchoice where selectedline EQ odd even if oddevensecchoice 0 NE 1 then BEGIN oddevensecchoice selected oddevensecchoice nothing widget_label basedomainoddeven value Domain of the odd even points uname title IF n_elements oddevensecchoice GT 1 THEN BEGIN selecteddim dimvar oddevensecchoice sorteddim selecteddim FOR i 0 n_elements oddevensecchoice 1 DO sorteddim i selecteddim sortdim typedim selecteddim i i zdim sorteddim 2 sizedims sizedim zdim sortedzdim sort sizedims sizedims sizedims sortedzdim oddevensecchoice oddevensecchoice sortedzdim nothing widget_droplist basedomainoddeven title number of levels value strtrim sizedims 2 uvalue name: odd evensecchoice uname odd evensecchoice ENDIF domainpart top_uvalue basedomainoddeven oddevensecchoice 0 widget_control basedomainoddeven set_uvalue oddevensecchoice ENDIF ELSE BEGIN domainpart top_uvalue basedomainoddeven destroy nothing widget_label basedomainoddeven value uname title widget_control basedomainoddeven set_uvalue 1 ENDELSE widget_control basedomainoddeven sensitive sensitive 2 case where sensitive EQ 1 0 of 0: top_uvalue 1 findline top_uvalue selected oddsecchoice 0 1: top_uvalue 1 findline top_uvalue selected evensecchoice 0 2: top_uvalue 1 findline top_uvalue selected oddevensecchoice 0 endcase widget_control topid update 1 return end"); 218 218 a[216] = new Array("./ToBeReviewed/HOPE/sortdim.html", "sortdim.pro", "", " todo seb function sortdim dims inverse inverse IDL a x y t z IDL b a sortdim a IDL print a x y t z IDL print b x y z t IDL print b sortdim a inv x y t z IDL a xytz IDL print sortdim a 0 1 3 2 compile_opt idl2 strictarrsubs tosort dims if n_elements tosort eq 1 then tosort string reform byte tosort 1 strlen tosort 0 tosort strrepl tosort strwhere tosort x a tosort strrepl tosort strwhere tosort y b tosort strrepl tosort strwhere tosort z c tosort strrepl tosort strwhere tosort t d tosort uniq tosort sort tosort if keyword_set inverse then tosort sort tosort return tosort end "); 219 219 a[217] = new Array("./ToBeReviewed/HOPE/xrh.html", "xrh.pro", "", " todo seb procedure to call read_hope in the widget mode PRO xrh _extra ex compile_opt idl2 strictarrsubs a read_hope _extra ex return end"); 220 a[218] = new Array("./ToBeReviewed/IMAGE/animgif.html", "animgif.pro", "", " file_comments Build a gif animation categories Animated drawings param NOMFIC in required It is the name of the gif file containing the animation Comment: this file is placed in the directory defined by iodir uses common pro restrictions We use the Z buffer to go faster So if it failed in animgif you have to do: IDL device close IDL set_plot x IDL retall restrictions If we want to delete the common we have to define manually the picture s size variables xsize and ysize just as iodir history Guillaume Roullet grlod ipsl jussieu fr Sebastien Masson smasson lodyc jussieu fr 30 4 1999 version Id: animgif pro 134 2006 07 07 10:19:08Z navarro PRO animgif nomfic compile_opt idl2 strictarrsubs common It recuperates the color palette and put it in red green blue tvlct rouge vert bleu get It completes the current palette on 256 colors red rouge replicate 255 256 n_elements rouge green vert replicate 255 256 n_elements rouge blue bleu replicate 255 256 n_elements rouge It rocks on the z device allowing to create the picture without display it thisOS VERSION OS_FAMILY thisOS STRMID thisOS 0 3 thisOS STRUPCASE thisOS set_plot z size of the picture in pixel : xsize 30 min page_size max ma key_portrait ma 1 key_portrait ysize 30 min page_size max ma 1 key_portrait ma key_portrait device set_resolution xsize ysize Beginning of the gif file Writing of an empty picture reinitplt plot 0 0 nodata write_gif iodir nomfic tvrd red green blue multiple Beggining of the part we want to change Loop of picture s creation calen TIMEGEN 366 START JULDAY 1 1 2000 debut where calen EQ 19810105 debut where calen EQ 19790105 debut debut 0 if debut EQ 1 then begin device close CASE thisOS of MAC : SET_PLOT thisOS WIN : SET_PLOT thisOS ELSE: SET_PLOT X ENDCASE stop endif for i 0 73 15 1 do begin for i 0 3 2 1 do begin for i 0 73 2 1 do begin print Image numero : strtrim i 2 date calen debut i erase 255 plt nlec sst date ATF 19 29 int 5 noerase plt nlec sss date ATF label 2 noerase plt nlec htoth date RE3 nlec hpycn date RE3 10 60 int 5 inv noerase domdef 290 340 5 15 plt norme nlec unsurf date RE3 nlec vnsurf date RE3 0 1 2 int 1 noerase Writing of the picture in the file gif write_gif iodir nomfic tvrd red green blue multiple ENDFOR End of the part we want to change Closing of the file write_gif iodir nomfic close Rerock on terminal X mode device close CASE thisOS of MAC : SET_PLOT thisOS WIN : SET_PLOT thisOS ELSE: SET_PLOT X ENDCASE return end");221 a[219] = new Array("./ToBeReviewed/INIT/initncdf.html", "initncdf.pro", "", " file_comments Initfile for Netcdf file define all the grid parameters categories param NCFILEIN in required A string giving the name of the NetCdf file keyword INVMASK To inverse the mask: mask 1 mask keyword MASKNAME A string giving the name of the variable in the file that contains the land sea mask keyword MISSING_VALUE To define or redifine if the attribute is already existing the missing values used with USEASMASK keyword keyword START1 Index the axis from 1 instead of 0 when using xyindex and or zindex keyword USEASMASK A string giving the name of the variable in the file that will be used to build the land sea mask In this case the mask is based on the first record if record dimension exists The mask is build according to : 1 the keyword missing_value if existing 2 the attribute missing_value if existing 3 NaN values if existing keyword XAXISNAME A string giving the name of the variable in the file that contains the xyz axis for X axis default name must be x longitude nav_lon or lon keyword YAXISNAME A string giving the name of the variable in the file that contains the xyz axis for Y axis default name must be y latitude nav_lat or lat keyword ZAXISNAME A string giving the name of the variable in the file that contains the xyz axis for Z axis default name must be z level lev depth keyword XYINDEX To define the x y axis with index instead of using the values contained in X YAXISNAME x yaxis keyword_set start1 findgen jpi jpj this forces key_onearth 0 keyword ZINDEX To define the z axis with index instead of using the values contained in ZAXISNAME zaxis keyword_set start1 findgen jpk keyword _EXTRA Used to pass your keywords uses common pro restrictions Change the grid parameters of the common pro restrictions the file must contain an x and an y axis 1 ou 2 dimentional array examples IDL initncdf toto nc glam 180 180 history Sebastien Masson smasson lodyc jussieu fr 8 May 2002 version Id PRO initncdf ncfilein XAXISNAME xaxisname YAXISNAME yaxisname ZAXISNAME zaxisname MASKNAME maskname INVMASK invmask USEASMASK useasmask MISSING_VALUE missing_value START1 start1 XYINDEX xyindex ZINDEX zindex _EXTRA ex compile_opt idl2 strictarrsubs common check the name of the file ncfile isafile FILENAME ncfilein IODIRECTORY iodir _extra ex if size ncfile type NE 7 then BEGIN print initncdf cancelled return endif if the file is stored on tape if version os_family EQ unix then spawn file ncfile dev null open the file cdfid ncdf_open ncfile what is inside the file inside ncdf_inquire cdfid name of the variables namevar strarr inside nvars for varid 0 inside nvars 1 do begin invar ncdf_varinq cdfid varid namevar varid strlowcase invar name ENDFOR find the xaxis if keyword_set xaxisname then xaxisname strlowcase xaxisname ELSE xaxisname x xvarid where namevar EQ xaxisname OR namevar EQ longitude OR namevar EQ nav_lon OR namevar EQ lon xvarid xvarid 0 if xvarid EQ 1 then begin print the xaxis was not found check the use of XAXISNAME keyword stop endif get the size of xaxis xinq ncdf_varinq cdfid xvarid ncdf_diminq cdfid xinq dim 0 blabla jpifromx should we read or compute the xaxis IF NOT keyword_set xyindex THEN BEGIN read the xaxis ncdf_varget cdfid xvarid xaxis make sure of the shape of xaxis IF xinq ndims GE 2 THEN BEGIN ncdf_diminq cdfid xinq dim 1 blabla jpjfromx xaxis reform xaxis jpifromx jpjfromx over ENDIF ENDIF ELSE xaxis keyword_set start1 findgen jpifromx find the yaxis if keyword_set yaxisname then yaxisname strlowcase yaxisname ELSE yaxisname y yvarid where namevar EQ yaxisname OR namevar EQ latitude OR namevar EQ nav_lat OR namevar EQ lat yvarid yvarid 0 if yvarid EQ 1 then begin print the yaxis was not found check the use of YAXISNAME keyword stop endif get the size of yaxis and check it is ok with the values found for x yinq ncdf_varinq cdfid yvarid IF xinq ndims GE 2 THEN BEGIN ncdf_diminq cdfid yinq dim 0 blabla jpifromy ncdf_diminq cdfid yinq dim 1 blabla jpjfromy IF jpifromy NE jpifromx THEN BEGIN print xaxis and y axis do not have the same x dimension ENDIF ENDIF ELSE ncdf_diminq cdfid yinq dim 0 blabla jpjfromy IF n_elements jpjfromx NE 0 THEN BEGIN IF jpjfromy NE jpjfromx THEN BEGIN print xaxis and y axis do not have the same y dimension ENDIF ENDIF should we read or compute the xaxis IF NOT keyword_set xyindex THEN BEGIN read the yaxis ncdf_varget cdfid yvarid yaxis make sure of the shape of xaxis IF xinq ndims GE 2 THEN yaxis reform yaxis jpifromy jpjfromy over ENDIF ELSE yaxis keyword_set start1 findgen jpjfromy find the zaxis if keyword_set zaxisname then zaxisname strlowcase zaxisname ELSE zaxisname z zvarid where namevar EQ nav_lev or namevar EQ zaxisname OR namevar EQ level OR namevar EQ lev OR strmid namevar 0 5 EQ depth zvarid zvarid 0 if zvarid EQ 1 AND inside ndims GT 3 then begin print initncdf: the zaxis was not found check the the use of ZAXISNAME keyword if you whant to find one stop endif read the zaxis if zvarid NE 1 THEN ncdf_varget cdfid zvarid zaxis IF keyword_set zindex THEN zaxis keyword_set start1 findgen n_elements zaxis mask CASE 1 OF keyword_set maskname :BEGIN mskid where namevar EQ strlowcase maskname 0 if mskid NE 1 THEN BEGIN mskinq ncdf_varinq cdfid mskid is the mask variable containing the record dimension withrcd where mskinq dim EQ inside recdim 0 IF withrcd NE 1 THEN BEGIN in order to read only the first record we need to get the size of each dimension count replicate 1L mskinq ndims FOR d 0 mskinq ndims 1 DO BEGIN IF d NE withrcd THEN BEGIN ncdf_diminq cdfid mskinq dim d name size count d size ENDIF ENDFOR read the variable for the first record ncdf_varget cdfid mskid tmask count count ENDIF ELSE ncdf_varget cdfid mskid tmask check if we need to applay add_offset and scale factor FOR a 0 mskinq natts 1 DO BEGIN attname ncdf_attname cdfid mskid a CASE strlowcase attname OF add_offset :ncdf_attget cdfid mskid attname add_offset scale_factor :ncdf_attget cdfid mskid attname scale_factor ELSE: ENDCASE ENDFOR IF n_elements scale_factor NE 0 THEN tmask tmask scale_factor IF n_elements add_offset NE 0 THEN tmask tmask add_offset if keyword_set invmask then tmask 1 tmask tmask byte round tmask ENDIF ELSE tmask 1 END keyword_set useasmask :BEGIN mskid where namevar EQ strlowcase useasmask 0 if mskid NE 1 THEN BEGIN mskinq ncdf_varinq cdfid mskid is the mask variable containing the record dimension withrcd where mskinq dim EQ inside recdim 0 IF withrcd NE 1 THEN BEGIN in order to read only the first record we need to get the size of each dimension count replicate 1L mskinq ndims FOR d 0 mskinq ndims 1 DO BEGIN IF d NE withrcd THEN BEGIN ncdf_diminq cdfid mskinq dim d name size count d size ENDIF ENDFOR read the variable for the first record ncdf_varget cdfid mskid tmask count count ENDIF ELSE ncdf_varget cdfid mskid tmask check if we need to applay add_offset and scale factor FOR a 0 mskinq natts 1 DO BEGIN attname ncdf_attname cdfid mskid a CASE strlowcase attname OF add_offset :ncdf_attget cdfid mskid attname add_offset scale_factor :ncdf_attget cdfid mskid attname scale_factor missing_value :IF n_elements missing_value EQ 0 THEN ncdf_attget cdfid mskid attname missing_value ELSE: ENDCASE ENDFOR IF n_elements scale_factor NE 0 THEN tmask tmask scale_factor IF n_elements add_offset NE 0 THEN tmask tmask add_offset IF n_elements missing_value NE 0 THEN BEGIN we have to take care of the float accuracy CASE 1 OF missing_value GE 1 e6:tmask tmask LT missing_value 10 missing_value LE 1 e6:tmask tmask GT missing_value 10 abs missing_value LE 1 e 6:tmask abs tmask GT 1 e 6 ELSE:tmask tmask NE missing_value ENDCASE if keyword_set invmask then tmask 1 tmask ENDIF ELSE BEGIN tmask finite tmask IF min tmask EQ 1 THEN BEGIN print missing or nan values not found tmask 1 ENDIF ENDELSE ENDIF ELSE tmask 1 END ELSE:tmask 1 ENDCASE ncdf_close cdfid compute the grid if zvarid EQ 1 then BEGIN computegrid xaxis xaxis yaxis yaxis mask tmask onearth 1b keyword_set xyindex _EXTRA ex ENDIF ELSE BEGIN computegrid xaxis xaxis yaxis yaxis zaxis zaxis mask tmask onearth 1b keyword_set xyindex _EXTRA ex ENDELSE IF n_elements time EQ 0 THEN time 0 jpt n_elements time return end");220 a[218] = new Array("./ToBeReviewed/IMAGE/animgif.html", "animgif.pro", "", " file_comments Build a gif animation categories Animated drawings param NOMFIC in required It is the name of the gif file containing the animation Comment: this file is placed in the directory defined by iodir uses common pro restrictions We use the Z buffer to go faster So if it failed in animgif you have to do: IDL device close IDL set_plot x IDL retall restrictions If we want to delete the common we have to define manually the picture s size variables xsize and ysize just as iodir history Guillaume Roullet grlod ipsl jussieu fr Sebastien Masson smasson lodyc jussieu fr 30 4 1999 version Id: animgif pro 142 2006 07 21 12:47:49Z navarro PRO animgif nomfic compile_opt idl2 strictarrsubs common It recuperates the color palette and put it in red green blue tvlct rouge vert bleu get It completes the current palette on 256 colors red rouge replicate 255 256 n_elements rouge green vert replicate 255 256 n_elements rouge blue bleu replicate 255 256 n_elements rouge It rocks on the z device allowing to create the picture without display it thisOS VERSION OS_FAMILY thisOS STRMID thisOS 0 3 thisOS STRUPCASE thisOS set_plot z size of the picture in pixel : xsize 30 min page_size max ma key_portrait ma 1 key_portrait ysize 30 min page_size max ma 1 key_portrait ma key_portrait device set_resolution xsize ysize Beginning of the gif file Writing of an empty picture reinitplt plot 0 0 nodata write_gif iodir nomfic tvrd red green blue multiple Beggining of the part we want to change Loop of picture s creation calen TIMEGEN 366 START JULDAY 1 1 2000 debut where calen EQ 19810105 debut where calen EQ 19790105 debut debut 0 if debut EQ 1 then begin device close CASE thisOS of MAC : SET_PLOT thisOS WIN : SET_PLOT thisOS ELSE: SET_PLOT X ENDCASE stop endif for i 0 73 15 1 do begin for i 0 3 2 1 do begin for i 0 73 2 1 do begin print Image numero : strtrim i 2 date calen debut i erase 255 plt nlec sst date ATF 19 29 int 5 noerase plt nlec sss date ATF label 2 noerase plt nlec htoth date RE3 nlec hpycn date RE3 10 60 int 5 inv noerase domdef 290 340 5 15 plt norme nlec unsurf date RE3 nlec vnsurf date RE3 0 1 2 int 1 noerase Writing of the picture in the file gif write_gif iodir nomfic tvrd red green blue multiple ENDFOR End of the part we want to change Closing of the file write_gif iodir nomfic close Rerock on terminal X mode device close CASE thisOS of MAC : SET_PLOT thisOS WIN : SET_PLOT thisOS ELSE: SET_PLOT X ENDCASE return end"); 221 a[219] = new Array("./ToBeReviewed/INIT/initncdf.html", "initncdf.pro", "", " file_comments Initfile for Netcdf file define all the grid parameters categories param NCFILEIN in required A string giving the name of the NetCdf file keyword INVMASK To inverse the mask: mask 1 mask keyword MASKNAME A string giving the name of the variable in the file that contains the land sea mask keyword MISSING_VALUE To define or redifine if the attribute is already existing the missing values used with USEASMASK keyword keyword START1 Index the axis from 1 instead of 0 when using xyindex and or zindex keyword USEASMASK A string giving the name of the variable in the file that will be used to build the land sea mask In this case the mask is based on the first record if record dimension exists The mask is build according to : 1 the keyword missing_value if existing 2 the attribute missing_value if existing 3 NaN values if existing keyword XAXISNAME A string giving the name of the variable in the file that contains the xyz axis for X axis default name must be x longitude nav_lon or lon keyword YAXISNAME A string giving the name of the variable in the file that contains the xyz axis for Y axis default name must be y latitude nav_lat or lat keyword ZAXISNAME A string giving the name of the variable in the file that contains the xyz axis for Z axis default name must be z level lev depth keyword XYINDEX To define the x y axis with index instead of using the values contained in X YAXISNAME x yaxis keyword_set start1 findgen jpi jpj this forces key_onearth 0 keyword ZINDEX To define the z axis with index instead of using the values contained in ZAXISNAME zaxis keyword_set start1 findgen jpk keyword _EXTRA Used to pass your keywords uses common pro restrictions Change the grid parameters of the common pro restrictions the file must contain an x and an y axis 1 ou 2 dimentional array examples IDL initncdf toto nc glam 180 180 history Sebastien Masson smasson lodyc jussieu fr 8 May 2002 version Id: initncdf pro 142 2006 07 21 12:47:49Z navarro PRO initncdf ncfilein XAXISNAME xaxisname YAXISNAME yaxisname ZAXISNAME zaxisname MASKNAME maskname INVMASK invmask USEASMASK useasmask MISSING_VALUE missing_value START1 start1 XYINDEX xyindex ZINDEX zindex _EXTRA ex compile_opt idl2 strictarrsubs common check the name of the file ncfile isafile FILENAME ncfilein IODIRECTORY iodir _extra ex if size ncfile type NE 7 then BEGIN print initncdf cancelled return endif if the file is stored on tape if version os_family EQ unix then spawn file ncfile dev null open the file cdfid ncdf_open ncfile what is inside the file inside ncdf_inquire cdfid name of the variables namevar strarr inside nvars for varid 0 inside nvars 1 do begin invar ncdf_varinq cdfid varid namevar varid strlowcase invar name ENDFOR find the xaxis if keyword_set xaxisname then xaxisname strlowcase xaxisname ELSE xaxisname x xvarid where namevar EQ xaxisname OR namevar EQ longitude OR namevar EQ nav_lon OR namevar EQ lon xvarid xvarid 0 if xvarid EQ 1 then begin print the xaxis was not found check the use of XAXISNAME keyword stop endif get the size of xaxis xinq ncdf_varinq cdfid xvarid ncdf_diminq cdfid xinq dim 0 blabla jpifromx should we read or compute the xaxis IF NOT keyword_set xyindex THEN BEGIN read the xaxis ncdf_varget cdfid xvarid xaxis make sure of the shape of xaxis IF xinq ndims GE 2 THEN BEGIN ncdf_diminq cdfid xinq dim 1 blabla jpjfromx xaxis reform xaxis jpifromx jpjfromx over ENDIF ENDIF ELSE xaxis keyword_set start1 findgen jpifromx find the yaxis if keyword_set yaxisname then yaxisname strlowcase yaxisname ELSE yaxisname y yvarid where namevar EQ yaxisname OR namevar EQ latitude OR namevar EQ nav_lat OR namevar EQ lat yvarid yvarid 0 if yvarid EQ 1 then begin print the yaxis was not found check the use of YAXISNAME keyword stop endif get the size of yaxis and check it is ok with the values found for x yinq ncdf_varinq cdfid yvarid IF xinq ndims GE 2 THEN BEGIN ncdf_diminq cdfid yinq dim 0 blabla jpifromy ncdf_diminq cdfid yinq dim 1 blabla jpjfromy IF jpifromy NE jpifromx THEN BEGIN print xaxis and y axis do not have the same x dimension ENDIF ENDIF ELSE ncdf_diminq cdfid yinq dim 0 blabla jpjfromy IF n_elements jpjfromx NE 0 THEN BEGIN IF jpjfromy NE jpjfromx THEN BEGIN print xaxis and y axis do not have the same y dimension ENDIF ENDIF should we read or compute the xaxis IF NOT keyword_set xyindex THEN BEGIN read the yaxis ncdf_varget cdfid yvarid yaxis make sure of the shape of xaxis IF xinq ndims GE 2 THEN yaxis reform yaxis jpifromy jpjfromy over ENDIF ELSE yaxis keyword_set start1 findgen jpjfromy find the zaxis if keyword_set zaxisname then zaxisname strlowcase zaxisname ELSE zaxisname z zvarid where namevar EQ nav_lev or namevar EQ zaxisname OR namevar EQ level OR namevar EQ lev OR strmid namevar 0 5 EQ depth zvarid zvarid 0 if zvarid EQ 1 AND inside ndims GT 3 then begin print initncdf: the zaxis was not found check the the use of ZAXISNAME keyword if you whant to find one stop endif read the zaxis if zvarid NE 1 THEN ncdf_varget cdfid zvarid zaxis IF keyword_set zindex THEN zaxis keyword_set start1 findgen n_elements zaxis mask CASE 1 OF keyword_set maskname :BEGIN mskid where namevar EQ strlowcase maskname 0 if mskid NE 1 THEN BEGIN mskinq ncdf_varinq cdfid mskid is the mask variable containing the record dimension withrcd where mskinq dim EQ inside recdim 0 IF withrcd NE 1 THEN BEGIN in order to read only the first record we need to get the size of each dimension count replicate 1L mskinq ndims FOR d 0 mskinq ndims 1 DO BEGIN IF d NE withrcd THEN BEGIN ncdf_diminq cdfid mskinq dim d name size count d size ENDIF ENDFOR read the variable for the first record ncdf_varget cdfid mskid tmask count count ENDIF ELSE ncdf_varget cdfid mskid tmask check if we need to applay add_offset and scale factor FOR a 0 mskinq natts 1 DO BEGIN attname ncdf_attname cdfid mskid a CASE strlowcase attname OF add_offset :ncdf_attget cdfid mskid attname add_offset scale_factor :ncdf_attget cdfid mskid attname scale_factor ELSE: ENDCASE ENDFOR IF n_elements scale_factor NE 0 THEN tmask tmask scale_factor IF n_elements add_offset NE 0 THEN tmask tmask add_offset if keyword_set invmask then tmask 1 tmask tmask byte round tmask ENDIF ELSE tmask 1 END keyword_set useasmask :BEGIN mskid where namevar EQ strlowcase useasmask 0 if mskid NE 1 THEN BEGIN mskinq ncdf_varinq cdfid mskid is the mask variable containing the record dimension withrcd where mskinq dim EQ inside recdim 0 IF withrcd NE 1 THEN BEGIN in order to read only the first record we need to get the size of each dimension count replicate 1L mskinq ndims FOR d 0 mskinq ndims 1 DO BEGIN IF d NE withrcd THEN BEGIN ncdf_diminq cdfid mskinq dim d name size count d size ENDIF ENDFOR read the variable for the first record ncdf_varget cdfid mskid tmask count count ENDIF ELSE ncdf_varget cdfid mskid tmask check if we need to applay add_offset and scale factor FOR a 0 mskinq natts 1 DO BEGIN attname ncdf_attname cdfid mskid a CASE strlowcase attname OF add_offset :ncdf_attget cdfid mskid attname add_offset scale_factor :ncdf_attget cdfid mskid attname scale_factor missing_value :IF n_elements missing_value EQ 0 THEN ncdf_attget cdfid mskid attname missing_value ELSE: ENDCASE ENDFOR IF n_elements scale_factor NE 0 THEN tmask tmask scale_factor IF n_elements add_offset NE 0 THEN tmask tmask add_offset IF n_elements missing_value NE 0 THEN BEGIN we have to take care of the float accuracy CASE 1 OF missing_value GE 1 e6:tmask tmask LT missing_value 10 missing_value LE 1 e6:tmask tmask GT missing_value 10 abs missing_value LE 1 e 6:tmask abs tmask GT 1 e 6 ELSE:tmask tmask NE missing_value ENDCASE if keyword_set invmask then tmask 1 tmask ENDIF ELSE BEGIN tmask finite tmask IF min tmask EQ 1 THEN BEGIN print missing or nan values not found tmask 1 ENDIF ENDELSE ENDIF ELSE tmask 1 END ELSE:tmask 1 ENDCASE ncdf_close cdfid compute the grid if zvarid EQ 1 then BEGIN computegrid xaxis xaxis yaxis yaxis mask tmask onearth 1b keyword_set xyindex _EXTRA ex ENDIF ELSE BEGIN computegrid xaxis xaxis yaxis yaxis zaxis zaxis mask tmask onearth 1b keyword_set xyindex _EXTRA ex ENDELSE IF n_elements time EQ 0 THEN time 0 jpt n_elements time return end"); 222 222 a[220] = new Array("./ToBeReviewed/INIT/initncdfxxx.html", "initncdfxxx.pro", "", ""); 223 223 a[221] = new Array("./ToBeReviewed/INIT/initorca05.html", "initorca05.pro", "", ""); … … 237 237 a[235] = new Array("./ToBeReviewed/LECTURE/GRIB/scan_grib_nbits.html", "scan_grib_nbits.pro", "", "FUNCTION scan_grib_nbits num recstart compile_opt idl2 strictarrsubs nrec n_elements recstart nbits bytarr nrec FOR i 0L nrec 1 DO BEGIN offset recstart i 8 a assoc num bytarr 1 nozero offset 1 sizepds bit2int binary a 1 binary a 2 binary a 3 flag binary a 8 gdsnotomitted flag 0 bmsnotomitted flag 1 ddd bit2int binary a 27 binary a 28 checkneg offset offset sizepds IF gdsnotomitted THEN BEGIN a assoc num bytarr 1 nozero offset 1 sizedds bit2int binary a 1 binary a 2 binary a 3 offset offset sizedds ENDIF IF bmsnotomitted THEN BEGIN a assoc num bytarr 1 nozero offset 1 sizebms bit2int binary a 1 binary a 2 binary a 3 offset offset sizebms ENDIF a assoc num bytarr 1 nozero offset 1 nbits i a 11 ENDFOR RETURN nbits END"); 238 238 a[236] = new Array("./ToBeReviewed/LECTURE/GRIB/scan_grib_recstart.html", "scan_grib_recstart.pro", "", "FUNCTION scan_grib_recstart num compile_opt idl2 strictarrsubs infofile fstat num minimum size of one record minisize 8L 28L 4L 4L maxoffset infofile size minisize start 0L offset 0L previousrecsize 0L WHILE offset LT maxoffset DO BEGIN Every record must begin with GRIB However their is no rule to define the space between 2 records 1 we try space previousrecsize MOD 8 because for echam outputs the total size of the records is rounded to modulo 8 addoff 8 previousrecsize MOD 8 offset offset addoff IF offset GE maxoffset THEN GOTO out a assoc num bytarr 4 nozero offset typefile string a 0 IF typefile NE GRIB THEN offset offset addoff 2 we try space previousrecsize MOD 120 because for ecmwf outputs the total size of the records is rounded to modulo 120 addoff 120 previousrecsize MOD 120 IF typefile NE GRIB THEN BEGIN offset offset addoff IF offset GE maxoffset THEN GOTO out a assoc num bytarr 4 nozero offset typefile string a 0 IF typefile NE GRIB THEN offset offset addoff ENDIF 3 we try space 0 IF typefile NE GRIB THEN BEGIN a assoc num bytarr 4 nozero offset typefile string a 0 ENDIF 4 we try any value for space IF typefile NE GRIB THEN BEGIN REPEAT BEGIN CASE 1 OF array_equal a 0 3 byte G :offset offset 3 array_equal a 0 2:3 byte GR :offset offset 2 array_equal a 0 1:3 byte GRI :offset offset 1 else:offset offset 4 ENDCASE IF offset GE maxoffset THEN GOTO out a assoc num bytarr 4 nozero offset typefile string a 0 ENDREP UNTIL typefile EQ GRIB ENDIF start start offset a assoc num bytarr 1 nozero offset 4 recsize bit2int binary a 0 binary a 1 binary a 2 offset offset recsize previousrecsize recsize ENDWHILE out: RETURN start 1:n_elements start 1 END"); 239 a[237] = new Array("./ToBeReviewed/LECTURE/binary.html", "binary.pro", "", " file_comments Returns the binary representation of a number of any numerical type param NUMBER in required scalar or array of numbers any numerical type Returns Byte array with binary representation of numbers Examples Binary representation of 11b: IDL print binary 11b 0 0 0 0 1 0 1 1 Binary representation of pi x86: Little endian IEEE representation : IDL print format z9 8 5x 4 1x 8i1 long pi 0 binary pi 40490fdb 01000000 01001001 00001111 11011011 x86 Linux 0fdb4149 00001111 11011011 01000001 01001001 Alpha OpenVMS IDL print format 8 1x 8i0 binary dpi 01000000 00001001 00100001 11111011 01010100 01000100 00101101 00011000 Some first tests before type double was added: print format 2a6 4x 2z9 8 4x 8z3 2 version arch version os long dpi 0 2 byte dpi 0 8 x86 linux 54442d18 400921fb 18 2d 44 54 fb 21 09 40 sparc sunos 400921fb 54442d18 40 09 21 fb 54 44 2d 18 alpha vms 0fda4149 68c0a221 49 41 da 0f 21 a2 c0 68 Beginning with IDL 5 1 Alpha VMS uses IEEE representation as well history: 19 Dec 1997 Originally a news posting by David Fanning Re: bits from bytes 20 Dec 1997 Complete rewrite: eliminate loops 22 Dec 1997 Bit shift instead of exponentiation return byte array handle input arrays Think about double and complex types 22 Sep 1998 Complete rewrite: reduce every numerical type to single bytes Check that big and little endian machines return exactly the same results if IEEE 7 May 2003 Added newish data types unsigned and long64 BT version Id function binary number compile_opt idl2 strictarrsubs s size number type s s 0 1 n_no s s 0 2 Numerical types: will have to be completed if IDL adds double long 1: byte 1 byte unsigned integer 2: integer 2 byte signed integer 3: long 4 byte signed integer 4: floating point 4 byte single precision 5: double precision 8 byte double precision 6: complex 2x4 byte single precision 9: double complex 2x8 byte double precision 12: uInt 2 byte unsigned integer 13: uLong 4 byte unsigned integer 14: Long64 8 byte signed integer 15: uLong64 8 byte unsigned integer Non numerical types: 0: undefined 7: string 8: structure 10: pointer 11: object reference nbyt 0 1 2 4 4 8 8 0 0 16 0 0 number of bytes per type code 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 nbyt 0 1 2 4 4 8 8 0 0 16 0 0 2 4 8 8 ntyp nbyt type if ntyp eq 0 then message Invalid argument must be numerical type bits 128 64 32 16 8 4 2 1 ishft 1b 7 indgen 8 For correct array handling and byte comparison number and bits require same dimensions numvalue and bitvalue bitvalue bits intarr ntyp intarr n_no little_endian byte 1 0 1 0 In case of complex type and little endian machine swap the two float values before the complete second dimension is reversed at returning if type eq 6 or type eq 9 and little_endian then type complex numvalue reform byte number 0 1 ntyp 2 2 n_no intarr 8 1 0 8 ntyp n_no else numvalue byte number 0 1 ntyp n_no intarr 8 On little endian machines the second dimension of the return value must be reversed if little_endian AND type NE 1 then return reverse numvalue and bitvalue ne 0 2 else return numvalue and bitvalue ne 0 end");239 a[237] = new Array("./ToBeReviewed/LECTURE/binary.html", "binary.pro", "", " file_comments Returns the binary representation of a number of any numerical type param NUMBER in required scalar or array of numbers any numerical type Returns Byte array with binary representation of numbers Examples Binary representation of 11b: IDL print binary 11b 0 0 0 0 1 0 1 1 Binary representation of pi x86: Little endian IEEE representation : IDL print format z9 8 5x 4 1x 8i1 long pi 0 binary pi 40490fdb 01000000 01001001 00001111 11011011 x86 Linux 0fdb4149 00001111 11011011 01000001 01001001 Alpha OpenVMS IDL print format 8 1x 8i0 binary dpi 01000000 00001001 00100001 11111011 01010100 01000100 00101101 00011000 Some first tests before type double was added: print format 2a6 4x 2z9 8 4x 8z3 2 version arch version os long dpi 0 2 byte dpi 0 8 x86 linux 54442d18 400921fb 18 2d 44 54 fb 21 09 40 sparc sunos 400921fb 54442d18 40 09 21 fb 54 44 2d 18 alpha vms 0fda4149 68c0a221 49 41 da 0f 21 a2 c0 68 Beginning with IDL 5 1 Alpha VMS uses IEEE representation as well history: 19 Dec 1997 Originally a news posting by David Fanning Re: bits from bytes 20 Dec 1997 Complete rewrite: eliminate loops 22 Dec 1997 Bit shift instead of exponentiation return byte array handle input arrays Think about double and complex types 22 Sep 1998 Complete rewrite: reduce every numerical type to single bytes Check that big and little endian machines return exactly the same results if IEEE 7 May 2003 Added newish data types unsigned and long64 BT version Id: binary pro 142 2006 07 21 12:47:49Z navarro function binary number compile_opt idl2 strictarrsubs s size number type s s 0 1 n_no s s 0 2 Numerical types: will have to be completed if IDL adds double long 1: byte 1 byte unsigned integer 2: integer 2 byte signed integer 3: long 4 byte signed integer 4: floating point 4 byte single precision 5: double precision 8 byte double precision 6: complex 2x4 byte single precision 9: double complex 2x8 byte double precision 12: uInt 2 byte unsigned integer 13: uLong 4 byte unsigned integer 14: Long64 8 byte signed integer 15: uLong64 8 byte unsigned integer Non numerical types: 0: undefined 7: string 8: structure 10: pointer 11: object reference nbyt 0 1 2 4 4 8 8 0 0 16 0 0 number of bytes per type code 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 nbyt 0 1 2 4 4 8 8 0 0 16 0 0 2 4 8 8 ntyp nbyt type if ntyp eq 0 then message Invalid argument must be numerical type bits 128 64 32 16 8 4 2 1 ishft 1b 7 indgen 8 For correct array handling and byte comparison number and bits require same dimensions numvalue and bitvalue bitvalue bits intarr ntyp intarr n_no little_endian byte 1 0 1 0 In case of complex type and little endian machine swap the two float values before the complete second dimension is reversed at returning if type eq 6 or type eq 9 and little_endian then type complex numvalue reform byte number 0 1 ntyp 2 2 n_no intarr 8 1 0 8 ntyp n_no else numvalue byte number 0 1 ntyp n_no intarr 8 On little endian machines the second dimension of the return value must be reversed if little_endian AND type NE 1 then return reverse numvalue and bitvalue ne 0 2 else return numvalue and bitvalue ne 0 end"); 240 240 a[238] = new Array("./ToBeReviewed/LECTURE/changeread.html", "changeread.pro", "", " todo seb FUNCTION changeread newread compile_opt idl2 strictarrsubs common newread must be two structures if size newread type NE 8 then return 0 we compare the two structure which caracterise the read case 1 of ccreadparameters funclec_name NE newread funclec_name: ccreadparameters jpidta NE newread jpidta: ccreadparameters jpjdta NE newread jpjdta: ccreadparameters jpkdta NE newread jpkdta: ccreadparameters ixmindta NE newread ixmindta: ccreadparameters ixmaxdta NE newread ixmaxdta: ccreadparameters iymindta NE newread iymindta: ccreadparameters iymaxdta NE newread iymaxdta: ccreadparameters izmindta NE newread izmindta: ccreadparameters izmaxdta NE newread izmaxdta: ELSE:return 0 endcase update the common paramaters ccreadparameters newread jpidta newread jpidta jpjdta newread jpjdta jpkdta newread jpkdta ixmindta newread ixmindta ixmaxdta newread ixmaxdta iymindta newread iymindta iymaxdta newread iymaxdta izmindta newread izmindta izmaxdta newread izmaxdta return 1 end"); 241 a[239] = new Array("./ToBeReviewed/LECTURE/inverse_binary.html", "inverse_binary.pro", "", " file_comments Inverse function of the binary pro function given a input array of 0 1 return its corresponding byte integer long representation categories param BINNUMB in required Must be a binary type array containing only 0 and 1 According to binary pro outputs binnum array must have the following dimensions values: 8 t d1 d2 t gives the output type: t 1 byte t 2 integer t 4 long d1 d2 are the output dimensions returns A byte integer long array with d1 d2 dimensions restrictions The binary number can represent only byte integer long examples IDL a indgen 5 IDL b binary a IDL help b B BYTE Array 8 2 5 IDL print b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 IDL help inverse_binary b INT Array 5 IDL print inverse_binary b 0 1 2 3 4 history Sebastien Masson smasson jamstec go jp July 2004 version Id FUNCTION inverse_binary binnumb compile_opt idl2 strictarrsubs s size binnumb dimensions IF n_elements s EQ 1 THEN numbofbit 8 ELSE numbofbit 8 s 1 nvalues n_elements binnumb numbofbit bn reform long binnumb numbofbit nvalues CASE numbofbit OF 8:res byte total temporary bn 2b reverse indgen numbofbit replicate 1b nvalues 1 1 16:res fix total temporary bn 2 reverse indgen numbofbit replicate 1 nvalues 1 1 double 32:res long total temporary bn 2L reverse indgen numbofbit replicate 1L nvalues 1 1 double ENDCASE CASE n_elements s OF 1:res res 0 2:res res 0 3: ELSE:res reform res s 2:n_elements s 1 over ENDCASE return res end");242 a[240] = new Array("./ToBeReviewed/LECTURE/litchamp.html", "litchamp.pro", "", " file_comments Allows to read an array or a sructure cooresponding to a field If we have in input: an array litchamp send back the array a structure litchamp send back the first element of the structure which must be the field in an array Litchamp profit of this to look other elements of the structure et update if needed global variables which refer to the field: vargrid varname varunit vardate varexp valmask et time categories graphic param STRUCT in required It is either an array or a structure If STRUCT is a structure it must follow following rules: the first element is the array containing the field other elements are strings containing informations on the field exept for the one about the date This one can be either a string to designate a particular date ex: August 1999 or a vector of julian days of IDL corresponding to the calendar to be associated with the field if it is a temporal series the order of elements exept the first has not any importance the other elements exept the first are optional they are recognize by the first letter of their names: g to update vargrid u to update varunit e to update varexp d to update vardate n to update varname m to update valmask keyword GRID We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by g if it exist and if it does not keyword UNIT We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by u if it exist and if it does not keyword EXP We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by u if it exist and if it does not keyword DATE We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by d if it exist and if it does not keyword NAME We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by n if it exist and if it does not keyword LEVEL We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by l if it exist and 1 if it does not keyword MASK We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by m if it exist and 1 if it does not returns It is the array containing the field uses common pro restrictions Update if needed global variables vargrid varname varunit vardate varexp valmask and time examples IDL print vargrid varname varunit vardate varexp T 0 IDL help litchamp a:indgen 5 u: C name: toto INT Array 5 IDL print vargrid varname varunit vardate varexp T toto C 0 IDL help litchamp a:indgen 5 da: 1999 INT Array 5 IDL print vargrid varname varunit vardate varexp T toto C 1999 history Sebastien Masson smasson lodyc jussieu fr 28 5 1999 version Id FUNCTION litchamp struct GRID grid NAME name UNIT unit EXP exp DATE date LEVEL level MASK mask compile_opt idl2 strictarrsubs common if size struct type ne 8 then BEGIN so contour is not a structure if keyword_set grid then return if keyword_set name then return if keyword_set unit then return if keyword_set exp then return if keyword_set date then return if keyword_set level then return 1 if keyword_set mask then return 1 return struct ENDIF IF n_tags struct EQ 1 then BEGIN The structure has only one element if keyword_set grid then return if keyword_set name then return if keyword_set unit then return if keyword_set exp then return if keyword_set date then return if keyword_set level then return 1 if keyword_set mask then return 1 return struct 0 ENDIF nomelements tag_names struct for i 1 n_tags struct 1 do begin case strlowcase strmid nomelements i 0 1 of g :BEGIN if keyword_set grid then return strupcase struct i vargrid strupcase struct i END n :BEGIN if keyword_set name then return struct i varname struct i END u :BEGIN if keyword_set unit then return struct i varunit struct i END e :BEGIN if keyword_set exp then return struct i varexp struct i END m :BEGIN if keyword_set mask then return struct i valmask struct i END d :BEGIN if size struct i type EQ 7 THEN BEGIN vardate struct i ENDIF ELSE BEGIN time struct i jpt n_elements time if jpt EQ 1 then vardate strtrim vairdate struct i 0 2 ELSE vardate strtrim vairdate struct i 0 2 strtrim vairdate struct i jpt 1 2 ENDELSE if keyword_set date then return vardate END h :BEGIN computehopegrid struct i xaxis struct i yaxis struct i zaxis struct i linetype FIRSTS struct i firsts LASTS struct i lasts FORTHEMASK struct 0 pttype struct i pttype END ELSE:BEGIN ras report Le nom nomelements i ne correspont a aucun element reconnu de la structure cf IDL xhelp litchamp end endcase endfor if keyword_set grid then return if keyword_set name then return if keyword_set unit then return if keyword_set exp then return if keyword_set date then return if keyword_set level then return 1 if keyword_set mask then return 1 return struct 0 end");243 a[241] = new Array("./ToBeReviewed/LECTURE/ncdf_lec.html", "ncdf_lec.pro", "", " file_comments Give informations on a file net cdf and allows to recuperate variables which are write in categories Reading param NOM in required Name of a file net cdf situated in the directory stipulated by iodir keyword ATT global or at the name of a variable Allows to see all attributes joined at a variable keyword DIM Give the list of dimensions keyword VAR 1 var: Gove the list of dimensions 2 var nom de variable : in this case the function send back the variable keyword IODIR String containing the directory containing the file to be read keyword _EXTRA Allows to pass keywords defined by IDL to functions NETCDF particularly OFFSET and COUNT in ncdf_varget returns 1 exept if var nom de variable then the function send back the variable restrictions Variables s names of the program are similar to these used by the IDL manual scientific data formats history Sebastien Masson smasson lodyc jussieu fr 4 1 98 version Id function ncdf_lec nom ATT att DIM dim VAR var IODIR iodir _extra ex compile_opt idl2 strictarrsubs res 1 if NOT keyword_set IODIR then iodir if not keyword_set att or keyword_set dim or keyword_set var then BEGIN att 1 dim 1 var 1 commande ncdump c iodir nom spawn commande goto fini endif opening of the file name cdfid ncdf_open iodir nom Wht does the file contain wathinside ncdf_inquire cdfid print in the file iodir nom there are: if keyword_set dim then begin print nombre de dimensions: strtrim wathinside ndims 1 print numero de la dimension dont la valeur est infini: strtrim wathinside recdim 1 endif if keyword_set var then if size var type NE 7 then print nombre de variables : strtrim wathinside nvars 1 if keyword_set att then begin if strlowcase att ne global then goto nonglobal print nombre de attributs globaux : strtrim wathinside ngatts 1 endif Global attributes if keyword_set att then begin print print ATTRIBUTS GLOBAUX for attiq 0 wathinside ngatts 1 do begin name ncdf_attname cdfid attiq global attribute s name ncdf_attget cdfid name value global attribute s value print name : string value endfor endif nonglobal: Display of different dimensions if keyword_set dim then begin print print DIMENSIONS endif nomdim strarr wathinside ndims tailledim lonarr wathinside ndims for dimiq 0 wathinside ndims 1 do begin ncdf_diminq cdfid dimiq name value dimension s name and value nomdim dimiq name tailledim dimiq value if keyword_set dim then begin print dimension numero strtrim dimiq 1 nom: nomdim dimiq valeur: strtrim tailledim dimiq 1 endif endfor Display of different variables if keyword_set att or keyword_set var then begin var s value string or 1 help var output nature if strpos nature STRING 0 NE 1 then nature string ELSE nature 1 If we just have to read the variable if nature EQ string then begin ncdf_varget cdfid var res _extra ex GOTO sortie ENDIF If it is to have pieces of information if not keyword_set att then att rien print for varid 0 wathinside nvars 1 do begin varcontent ncdf_varinq cdfid varid What does variable contain if strlowcase att eq strlowcase varcontent name or keyword_set var then begin print variable numero: strtrim varid 1 nom: varcontent name type: varcontent datatype dimensions: nomdim varcontent dim if strlowcase att eq strlowcase varcontent name then begin for attiq 0 varcontent natts 1 do begin name ncdf_attname cdfid varid attiq ncdf_attget cdfid varid name value print strtrim attiq name : strtrim string value 1 endfor goto sortie endif endif endfor endif sortie: ncdf_close cdfid fini: return res end");244 a[242] = new Array("./ToBeReviewed/LECTURE/read_ftp.html", "read_ftp.pro", "", " pro ftp_post u cmd res out out count count compile_opt idl2 if cmd ne then begin printf u cmd format a comment out the following line to disable debug info print cmd endif if size out type eq 0 then out 2 catch err if err ne 0 then return line count 0 while arg_present res do begin readf u line if count eq 0 then res line else res res line count count 1 comment out the following line to disable debug info print READ_FTP ftp: ftp rsinc com pub gzip README GZIP DATA data IDL help data DATA BYTE Array 2134 IDL print string data README file: Research Systems Anonymous FTP site ftp rsinc com pub directory gzip directory 2 Retrieve some files from podaac jpl nasa gov and store the files in the current working directory: IDL files string lindgen 10 50 format MGB370 3 3d gz IDL READ_FTP podaac jpl nasa gov files IDL pub sea_surface_height topex_poseidon mgdrb data MGB_370 FILE IDL spawn dir MGB log_output Volume in drive C is Local Disk Volume Serial Number is 34CE 24DF Directory of C: test test0307 07 28 2003 11:58a 362 167 MGB370 050 gz 07 28 2003 11:58a 333 005 MGB370 051 gz 07 28 2003 11:58a 310 287 MGB370 052 gz 07 28 2003 11:58a 358 771 MGB370 053 gz 07 28 2003 11:59a 387 282 MGB370 054 gz 07 28 2003 11:59a 361 633 MGB370 055 gz 07 28 2003 11:59a 383 075 MGB370 056 gz 07 28 2003 11:59a 365 844 MGB370 057 gz 07 28 2003 11:59a 383 918 MGB370 058 gz 07 28 2003 12:00p 372 712 MGB370 059 gz 10 File s 3 618 694 bytes These compressed files can cosequently be opened with OPENR and the COMPRESSED keyword history version Id todo seb: que fait on de syntax au debut du header pro read_ftp site files dir port data data file file user user pass pass ptr ptr compile_opt idl2 if n_elements port eq 0 then port ftp if n_elements files eq 0 then begin if strcmp site ftp: 6 then host strmid site 6 else host site pos strpos host dir strmid host pos host strmid host 0 pos pos strpos dir reverse_search files strmid dir pos 1 dir strmid dir 0 pos endif else host site if size user type eq 0 then user anonymous if size pass type eq 0 then pass test test com socket u host port connect_timeout 5 read_timeout 5 get_lun ftp_post u res ftp_post u USER user res out 3 ftp_post u PASS pass res ftp_post u TYPE I res if size dir type ne 0 then ftp_post u CWD dir res if keyword_set file or arg_present data then begin bufsize 512 buffer bytarr bufsize n n_elements files if arg_present data then dat ptrarr n for i 0 n 1 do begin ftp_post u SIZE files i res out 213 sz long64 strmid res n_elements res 1 4 if arg_present data then dat i ptr_new bytarr sz ftp_post u PASV res ftp_parse_pasv res host port ftp_post u RETR files i res out 1 socket v host port connect_timeout 5 read_timeout 5 get_lun rawio tc 0ll if keyword_set file then openw w files i get_lun while tc lt sz do begin if sz tc lt bufsize then begin bufsize sz tc buffer bytarr bufsize endif readu v buffer transfer_count dtc if arg_present data then dat i tc dtc eq bufsize buffer:buffer 0:dtc 1 if keyword_set file then writeu w dtc eq bufsize buffer:buffer 0:dtc 1 tc tc dtc endwhile free_lun v if keyword_set file then free_lun w ftp_post u res endfor if arg_present data then begin if n gt 1 or keyword_set ptr then data dat else data temporary dat 0 endif endif ftp_post u QUIT res free_lun u end");241 a[239] = new Array("./ToBeReviewed/LECTURE/inverse_binary.html", "inverse_binary.pro", "", " file_comments Inverse function of the binary pro function given a input array of 0 1 return its corresponding byte integer long representation categories param BINNUMB in required Must be a binary type array containing only 0 and 1 According to binary pro outputs binnum array must have the following dimensions values: 8 t d1 d2 t gives the output type: t 1 byte t 2 integer t 4 long d1 d2 are the output dimensions returns A byte integer long array with d1 d2 dimensions restrictions The binary number can represent only byte integer long examples IDL a indgen 5 IDL b binary a IDL help b B BYTE Array 8 2 5 IDL print b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 IDL help inverse_binary b INT Array 5 IDL print inverse_binary b 0 1 2 3 4 history Sebastien Masson smasson jamstec go jp July 2004 version Id: inverse_binary pro 142 2006 07 21 12:47:49Z navarro FUNCTION inverse_binary binnumb compile_opt idl2 strictarrsubs s size binnumb dimensions IF n_elements s EQ 1 THEN numbofbit 8 ELSE numbofbit 8 s 1 nvalues n_elements binnumb numbofbit bn reform long binnumb numbofbit nvalues CASE numbofbit OF 8:res byte total temporary bn 2b reverse indgen numbofbit replicate 1b nvalues 1 1 16:res fix total temporary bn 2 reverse indgen numbofbit replicate 1 nvalues 1 1 double 32:res long total temporary bn 2L reverse indgen numbofbit replicate 1L nvalues 1 1 double ENDCASE CASE n_elements s OF 1:res res 0 2:res res 0 3: ELSE:res reform res s 2:n_elements s 1 over ENDCASE return res end"); 242 a[240] = new Array("./ToBeReviewed/LECTURE/litchamp.html", "litchamp.pro", "", " file_comments Allows to read an array or a sructure cooresponding to a field If we have in input: an array litchamp send back the array a structure litchamp send back the first element of the structure which must be the field in an array Litchamp profit of this to look other elements of the structure et update if needed global variables which refer to the field: vargrid varname varunit vardate varexp valmask et time categories graphic param STRUCT in required It is either an array or a structure If STRUCT is a structure it must follow following rules: the first element is the array containing the field other elements are strings containing informations on the field exept for the one about the date This one can be either a string to designate a particular date ex: August 1999 or a vector of julian days of IDL corresponding to the calendar to be associated with the field if it is a temporal series the order of elements exept the first has not any importance the other elements exept the first are optional they are recognize by the first letter of their names: g to update vargrid u to update varunit e to update varexp d to update vardate n to update varname m to update valmask keyword GRID We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by g if it exist and if it does not keyword UNIT We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by u if it exist and if it does not keyword EXP We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by u if it exist and if it does not keyword DATE We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by d if it exist and if it does not keyword NAME We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by n if it exist and if it does not keyword LEVEL We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by l if it exist and 1 if it does not keyword MASK We activate this keyword if we want litchamp to send back the variable associated with the element of the structure starting by m if it exist and 1 if it does not returns It is the array containing the field uses common pro restrictions Update if needed global variables vargrid varname varunit vardate varexp valmask and time examples IDL print vargrid varname varunit vardate varexp T 0 IDL help litchamp a:indgen 5 u: C name: toto INT Array 5 IDL print vargrid varname varunit vardate varexp T toto C 0 IDL help litchamp a:indgen 5 da: 1999 INT Array 5 IDL print vargrid varname varunit vardate varexp T toto C 1999 history Sebastien Masson smasson lodyc jussieu fr 28 5 1999 version Id: litchamp pro 142 2006 07 21 12:47:49Z navarro FUNCTION litchamp struct GRID grid NAME name UNIT unit EXP exp DATE date LEVEL level MASK mask compile_opt idl2 strictarrsubs common if size struct type ne 8 then BEGIN so contour is not a structure if keyword_set grid then return if keyword_set name then return if keyword_set unit then return if keyword_set exp then return if keyword_set date then return if keyword_set level then return 1 if keyword_set mask then return 1 return struct ENDIF IF n_tags struct EQ 1 then BEGIN The structure has only one element if keyword_set grid then return if keyword_set name then return if keyword_set unit then return if keyword_set exp then return if keyword_set date then return if keyword_set level then return 1 if keyword_set mask then return 1 return struct 0 ENDIF nomelements tag_names struct for i 1 n_tags struct 1 do begin case strlowcase strmid nomelements i 0 1 of g :BEGIN if keyword_set grid then return strupcase struct i vargrid strupcase struct i END n :BEGIN if keyword_set name then return struct i varname struct i END u :BEGIN if keyword_set unit then return struct i varunit struct i END e :BEGIN if keyword_set exp then return struct i varexp struct i END m :BEGIN if keyword_set mask then return struct i valmask struct i END d :BEGIN if size struct i type EQ 7 THEN BEGIN vardate struct i ENDIF ELSE BEGIN time struct i jpt n_elements time if jpt EQ 1 then vardate strtrim vairdate struct i 0 2 ELSE vardate strtrim vairdate struct i 0 2 strtrim vairdate struct i jpt 1 2 ENDELSE if keyword_set date then return vardate END h :BEGIN computehopegrid struct i xaxis struct i yaxis struct i zaxis struct i linetype FIRSTS struct i firsts LASTS struct i lasts FORTHEMASK struct 0 pttype struct i pttype END ELSE:BEGIN ras report Le nom nomelements i ne correspont a aucun element reconnu de la structure cf IDL xhelp litchamp end endcase endfor if keyword_set grid then return if keyword_set name then return if keyword_set unit then return if keyword_set exp then return if keyword_set date then return if keyword_set level then return 1 if keyword_set mask then return 1 return struct 0 end"); 243 a[241] = new Array("./ToBeReviewed/LECTURE/ncdf_lec.html", "ncdf_lec.pro", "", " file_comments Give informations on a file net cdf and allows to recuperate variables which are write in categories Reading param NOM in required Name of a file net cdf situated in the directory stipulated by iodir keyword ATT global or at the name of a variable Allows to see all attributes joined at a variable keyword DIM Give the list of dimensions keyword VAR 1 var: Gove the list of dimensions 2 var nom de variable : in this case the function send back the variable keyword IODIR String containing the directory containing the file to be read keyword _EXTRA Allows to pass keywords defined by IDL to functions NETCDF particularly OFFSET and COUNT in ncdf_varget returns 1 exept if var nom de variable then the function send back the variable restrictions Variables s names of the program are similar to these used by the IDL manual scientific data formats history Sebastien Masson smasson lodyc jussieu fr 4 1 98 version Id: ncdf_lec pro 142 2006 07 21 12:47:49Z navarro function ncdf_lec nom ATT att DIM dim VAR var IODIR iodir _extra ex compile_opt idl2 strictarrsubs res 1 if NOT keyword_set IODIR then iodir if not keyword_set att or keyword_set dim or keyword_set var then BEGIN att 1 dim 1 var 1 commande ncdump c iodir nom spawn commande goto fini endif opening of the file name cdfid ncdf_open iodir nom Wht does the file contain wathinside ncdf_inquire cdfid print in the file iodir nom there are: if keyword_set dim then begin print nombre de dimensions: strtrim wathinside ndims 1 print numero de la dimension dont la valeur est infini: strtrim wathinside recdim 1 endif if keyword_set var then if size var type NE 7 then print nombre de variables : strtrim wathinside nvars 1 if keyword_set att then begin if strlowcase att ne global then goto nonglobal print nombre de attributs globaux : strtrim wathinside ngatts 1 endif Global attributes if keyword_set att then begin print print ATTRIBUTS GLOBAUX for attiq 0 wathinside ngatts 1 do begin name ncdf_attname cdfid attiq global attribute s name ncdf_attget cdfid name value global attribute s value print name : string value endfor endif nonglobal: Display of different dimensions if keyword_set dim then begin print print DIMENSIONS endif nomdim strarr wathinside ndims tailledim lonarr wathinside ndims for dimiq 0 wathinside ndims 1 do begin ncdf_diminq cdfid dimiq name value dimension s name and value nomdim dimiq name tailledim dimiq value if keyword_set dim then begin print dimension numero strtrim dimiq 1 nom: nomdim dimiq valeur: strtrim tailledim dimiq 1 endif endfor Display of different variables if keyword_set att or keyword_set var then begin var s value string or 1 help var output nature if strpos nature STRING 0 NE 1 then nature string ELSE nature 1 If we just have to read the variable if nature EQ string then begin ncdf_varget cdfid var res _extra ex GOTO sortie ENDIF If it is to have pieces of information if not keyword_set att then att rien print for varid 0 wathinside nvars 1 do begin varcontent ncdf_varinq cdfid varid What does variable contain if strlowcase att eq strlowcase varcontent name or keyword_set var then begin print variable numero: strtrim varid 1 nom: varcontent name type: varcontent datatype dimensions: nomdim varcontent dim if strlowcase att eq strlowcase varcontent name then begin for attiq 0 varcontent natts 1 do begin name ncdf_attname cdfid varid attiq ncdf_attget cdfid varid name value print strtrim attiq name : strtrim string value 1 endfor goto sortie endif endif endfor endif sortie: ncdf_close cdfid fini: return res end"); 244 a[242] = new Array("./ToBeReviewed/LECTURE/read_ftp.html", "read_ftp.pro", "", " pro ftp_post u cmd res out out count count compile_opt idl2 if cmd ne then begin printf u cmd format a comment out the following line to disable debug info print cmd endif if size out type eq 0 then out 2 catch err if err ne 0 then return line count 0 while arg_present res do begin readf u line if count eq 0 then res line else res res line count count 1 comment out the following line to disable debug info print READ_FTP ftp: ftp rsinc com pub gzip README GZIP DATA data IDL help data DATA BYTE Array 2134 IDL print string data README file: Research Systems Anonymous FTP site ftp rsinc com pub directory gzip directory 2 Retrieve some files from podaac jpl nasa gov and store the files in the current working directory: IDL files string lindgen 10 50 format MGB370 3 3d gz IDL READ_FTP podaac jpl nasa gov files IDL pub sea_surface_height topex_poseidon mgdrb data MGB_370 FILE IDL spawn dir MGB log_output Volume in drive C is Local Disk Volume Serial Number is 34CE 24DF Directory of C: test test0307 07 28 2003 11:58a 362 167 MGB370 050 gz 07 28 2003 11:58a 333 005 MGB370 051 gz 07 28 2003 11:58a 310 287 MGB370 052 gz 07 28 2003 11:58a 358 771 MGB370 053 gz 07 28 2003 11:59a 387 282 MGB370 054 gz 07 28 2003 11:59a 361 633 MGB370 055 gz 07 28 2003 11:59a 383 075 MGB370 056 gz 07 28 2003 11:59a 365 844 MGB370 057 gz 07 28 2003 11:59a 383 918 MGB370 058 gz 07 28 2003 12:00p 372 712 MGB370 059 gz 10 File s 3 618 694 bytes These compressed files can cosequently be opened with OPENR and the COMPRESSED keyword history version Id: read_ftp pro 142 2006 07 21 12:47:49Z navarro todo seb: que fait on de syntax au debut du header pro read_ftp site files dir port data data file file user user pass pass ptr ptr compile_opt idl2 if n_elements port eq 0 then port ftp if n_elements files eq 0 then begin if strcmp site ftp: 6 then host strmid site 6 else host site pos strpos host dir strmid host pos host strmid host 0 pos pos strpos dir reverse_search files strmid dir pos 1 dir strmid dir 0 pos endif else host site if size user type eq 0 then user anonymous if size pass type eq 0 then pass test test com socket u host port connect_timeout 5 read_timeout 5 get_lun ftp_post u res ftp_post u USER user res out 3 ftp_post u PASS pass res ftp_post u TYPE I res if size dir type ne 0 then ftp_post u CWD dir res if keyword_set file or arg_present data then begin bufsize 512 buffer bytarr bufsize n n_elements files if arg_present data then dat ptrarr n for i 0 n 1 do begin ftp_post u SIZE files i res out 213 sz long64 strmid res n_elements res 1 4 if arg_present data then dat i ptr_new bytarr sz ftp_post u PASV res ftp_parse_pasv res host port ftp_post u RETR files i res out 1 socket v host port connect_timeout 5 read_timeout 5 get_lun rawio tc 0ll if keyword_set file then openw w files i get_lun while tc lt sz do begin if sz tc lt bufsize then begin bufsize sz tc buffer bytarr bufsize endif readu v buffer transfer_count dtc if arg_present data then dat i tc dtc eq bufsize buffer:buffer 0:dtc 1 if keyword_set file then writeu w dtc eq bufsize buffer:buffer 0:dtc 1 tc tc dtc endwhile free_lun v if keyword_set file then free_lun w ftp_post u res endfor if arg_present data then begin if n gt 1 or keyword_set ptr then data dat else data temporary dat 0 endif endif ftp_post u QUIT res free_lun u end"); 245 245 a[243] = new Array("./ToBeReviewed/LECTURE/read_ncdf.html", "read_ncdf.pro", "", " PURPOSE:fonction de lecture pour fichier net_cdf Ce programme est moins universel que ncdf_lec il fait appelle au variables declarees dans common pro mais il est du cop bcp plus facile d utilisation Il prend en compte la declaration des differents zoom qui ont ete definis ixminmesh premierx la declaration de la variable key_shift bref le resultat de read_ncdf peut dorectement etre utilise dans plt C est aussi ce programme qui est utilise par defaut dans mes widgets pour la partie lecture CATEGORY:lecture de fichiers NetCdf CALLING SEQUENCE:res read_ncdf name debut fin INPUTS: name: un string definissant le champ a lire debut et fin: sont relatifs a l axe des temps Ce peut etre 2 dates du type yyyymmdd et ds ce cas on selectionne les dates qui sont comprisent entre ces 2 dates 2 indices qui definissent entre quel et quel pas de temps on doit extraire la dimension temporelle exp: ne sert a rien KEYWORD PARAMETERS: utilisables hors du contexte des widgets BOXZOOM: contient la boxzoom sur laquelle on doit faire la lecture FILENAME: string contennant le nom du fichier INIT to call automatically initncdf filename and thus redefine all the grid parameters GRID UTVWF to specify the type of grid Defaut is 1 based on the name of the file if the file ends by GRID _ TUVFW NC not case sensible or 2 T if case 1 is not found IODIRECTORY a string giving the name of iodirectory see isafile pro for all possibilities default value is common variable iodir TIMESTEP:activer pour specifier que debut et fin font reference a des indices de l axe du temps et non pas a des dates TOUT: activer si on veut lire le ficher sur l ensemble du domaine sans tenir compte du sous domaine definit par boxzoom ou lon1 lon2 lat1 lat2 vert1 vert2 NOSTRUCT: activer si on ne veut pas que read_ncdf reourne une structure mais uniquement le tableau se rapportant au champ TIMEVAR: a string to define the name of the variable that contains the time axis This keyword can be usefull if there is no unlimited dimension or if the time axis selected by defaut the first 1D array with unlimited dimension is not the good one OUTPUTS:une stucture lisible par litchamp pro ou un simple tableau si NOSTRUCT est active COMMON BLOCKS:common pro SIDE EFFECTS: RESTRICTIONS:le champ doit avoir une dimension temporelle EXAMPLE: MODIFICATION HISTORY:Sebastien Masson smasson lodyc jussieu fr 15 10 1999 FUNCTION read_ncdf name debut fin pour_etre_compatible BOXZOOM boxzoom FILENAME filename PARENTIN parentin TIMESTEP timestep TIMEVAR timevar TOUT tout NOSTRUCT nostruct CONT_NOFILL CONT_NOFILL INIT init GRID grid FBASE2TBASE fbase2tbase _EXTRA ex compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF we find the filename print filename is parent a valid widget if keyword_set parentin then BEGIN parent long parentin parent parent widget_info parent managed ENDIF filename isafile filename filename IODIRECTORY iodir _EXTRA ex ouverture du fichier nom if size filename type NE 7 then return report read_ncdf cancelled IF version OS_FAMILY EQ unix THEN spawn file filename dev null cdfid ncdf_open filename contient ncdf_inquire cdfid we check if the variable name exists in the file if ncdf_varid cdfid name EQ 1 then BEGIN ncdf_close cdfid return report variable name C not found in the file filename ENDIF varcontient ncdf_varinq cdfid name shall we redefine the grid parameters if keyword_set init THEN initncdf filename _extra ex check the time axis and the debut and fin dates if n_elements debut EQ 0 then begin debut 0 timestep 1 endif if keyword_set timestep then begin firsttps debut 0 if n_elements fin NE 0 then lasttps fin 0 ELSE lasttps firsttps jpt lasttps firsttps 1 time julday 1 1 1 lindgen jpt ENDIF ELSE BEGIN if keyword_set parent then BEGIN widget_control parent get_uvalue top_uvalue filelist extractatt top_uvalue filelist IF filelist 0 EQ many THEN filelist filename currentfile where filelist EQ filename 0 time extractatt top_uvalue fileparameters currentfile time_counter date1 date2jul debut 0 if n_elements fin NE 0 then date2 date2jul fin 0 ELSE date2 date1 firsttps where time EQ date1 firsttps firsttps 0 lasttps where time EQ date2 lasttps lasttps 0 ENDIF ELSE BEGIN IF keyword_set timevar THEN BEGIN timeid ncdf_varid cdfid timevar IF timeid EQ 1 THEN BEGIN ncdf_close cdfid return report the file filename as no variable timevar C Use the TIMESTEP keyword endif timecontient ncdf_varinq cdfid timeid contient recdim timecontient dim 0 ENDIF ELSE BEGIN we find the infinite dimension timedim contient recdim if timedim EQ 1 then BEGIN ncdf_close cdfid return report the file filename as no infinite dimension C Use TIMESTEP or TIMEVAR keyword endif we find the FIRST time axis timeid 0 repeat BEGIN tant que l on a pas trouve une variable qui n a qu une dimension: la dimension infinie timecontient ncdf_varinq cdfid timeid que contient la variable timeid timeid 1 endrep until n_elements timecontient dim EQ 1 AND timecontient dim 0 EQ contient recdim OR timeid EQ contient nvars 1 if timeid EQ contient nvars 1 then BEGIN ncdf_close cdfid return report the file filename as no time axis variable C Use the TIMESTEP keyword endif timeid timeid 1 ENDELSE we must found the time origin of the julian calendar used in the time axis does the attribut units an dcalendar exist for the variable time axis if timecontient natts EQ 0 then BEGIN ncdf_close cdfid return report the variable timecontient name has no attribut C Use the TIMESTEP keyword or add the attribut units to the variable endif attnames strarr timecontient natts for attiq 0 timecontient natts 1 do attnames attiq ncdf_attname cdfid timeid attiq if where attnames EQ units 0 EQ 1 then BEGIN ncdf_close cdfid return report Attribut units not found for the variable timecontient name C Use the TIMESTEP keyword ENDIF now we try to find the attribut called calendar the the attribute calendar exists If no we suppose that the calendar is gregorian calendar if where attnames EQ calendar 0 NE 1 then BEGIN ncdf_attget cdfid timeid calendar value value string value CASE value OF noleap :key_caltype noleap 360d :key_caltype 360d greg :IF n_elements key_caltype EQ 0 THEN key_caltype greg ELSE:BEGIN notused report Unknown calendar: value we use greg calendar key_caltype greg END ENDCASE ENDIF ELSE BEGIN notused report Unknown calendar we use key_caltype calendar IF n_elements key_caltype EQ 0 THEN key_caltype greg ENDELSE now we take acre of units attribut ncdf_attget cdfid timeid units value time_counter:units seconds since 0001 01 01 00:00:00 time_counter:units hours since 0001 01 01 00:00:00 time_counter:units days since 1979 01 01 00:00:00 time_counter:units months since 1979 01 01 00:00:00 time_counter:units years since 1979 01 01 00:00:00 we decript the units attribut to find the time origin value strtrim strcompress string value 2 mots str_sep value unite mots 0 depart str_sep mots 2 ncdf_varget cdfid timeid time time double time unite strlowcase unite IF strpos unite s strlen unite 1 NE 1 THEN unite strmid unite 0 strlen unite 1 IF strpos unite julian_ NE 1 THEN unite strmid unite 7 case unite of second :time julday depart 1 depart 2 depart 0 time 86400 d hour :time julday depart 1 depart 2 depart 0 time 24 d day :time julday depart 1 depart 2 depart 0 time month :BEGIN if total fix time NE time NE 0 then we switch to days with 30d m time julday depart 1 depart 2 depart 0 round time 30 ELSE for t 0 n_elements time 1 DO time t julday depart 1 time t depart 2 depart 0 END year :BEGIN if total fix time NE time NE 0 then we switch to days with 365d y time julday depart 1 depart 2 depart 0 round time 365 ELSE for t 0 n_elements time 1 do time t julday depart 1 depart 2 depart 0 time t END ELSE:BEGIN ncdf_close cdfid return report The units attribu of the time axis must be something like: C seconds since 0001 01 01 C days since 1979 01 01 C months since 1979 01 01 C years since 1979 01 01 end ENDCASE date1 date2jul debut 0 if n_elements fin NE 0 then date2 date2jul fin 0 ELSE date2 date1 time double time firsttps where time GE date1 firsttps firsttps 0 if firsttps EQ 1 THEN BEGIN ncdf_close cdfid return report date 1: strtrim jul2date date1 1 is not found in the time axis ENDIF lasttps where time LE date2 if lasttps 0 EQ 1 THEN BEGIN ncdf_close cdfid return report the time axis as no date before date 2: strtrim jul2date date2 1 endif lasttps lasttps n_elements lasttps 1 if lasttps LT firsttps then BEGIN ncdf_close cdfid return report the time axis as no dates between date1 and date 2: strtrim jul2date date1 1 strtrim jul2date date2 1 endif ENDELSE time time firsttps:lasttps jpt lasttps firsttps 1 ENDELSE nom de la grille a laquelle se rapporte le champ IF keyword_set grid THEN vargrid strupcase grid ELSE BEGIN vargrid T default definition IF finite glamu 0 EQ 1 THEN BEGIN pattern GRID GRID_ GRID UPID_ 30ID_ gdtype T U V W F fnametest strupcase filename FOR i 0 n_elements pattern 1 DO BEGIN FOR j 0 n_elements gdtype 1 DO BEGIN substr pattern i gdtype j pos strpos fnametest substr IF pos NE 1 THEN vargrid strmid fnametest pos strlen substr 1 1 ENDFOR ENDFOR ENDIF ENDELSE call the init function redefinition du domaine if keyword_set tout then begin nx jpi ny jpj nz jpk firstx 0 firsty 0 firstz 0 lastx jpi 1 lasty jpj 1 lastz jpk 1 case strupcase vargrid of T :mask tmask U :mask umask V :mask vmask W :mask tmask F :mask fmask endcase ENDIF ELSE BEGIN if keyword_set boxzoom then BEGIN Case 1 Of N_Elements Boxzoom Eq 1:bte lon1 lon2 lat1 lat2 0 boxzoom 0 N_Elements Boxzoom Eq 2:bte lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 N_Elements Boxzoom Eq 4:bte Boxzoom vert1 vert2 N_Elements Boxzoom Eq 5:bte Boxzoom 0:3 0 Boxzoom 4 N_Elements Boxzoom Eq 6:bte Boxzoom Else: BEGIN ncdf_close cdfid return report Wrong Definition of Boxzoom end ENDCASE savedbox 1b saveboxparam boxparam4rdncdf dat domdef bte GRIDTYPE T vargrid _extra ex ENDIF grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz undefine glam undefine gphi on libere un peu de memoire ENDELSE on initialise les ixmindta iymindta au besoin if n_elements jpidta EQ 0 THEN jpidta jpiglo if n_elements jpjdta EQ 0 THEN jpjdta jpjglo if n_elements jpkdta EQ 0 THEN jpkdta jpkglo if n_elements ixmindta EQ 0 THEN ixmindta 0 if n_elements ixmaxdta EQ 0 then ixmaxdta jpidta 1 if ixmindta EQ 1 THEN ixmindta 0 IF ixmaxdta EQ 1 then ixmaxdta jpidta 1 if n_elements iymindta EQ 0 THEN iymindta 0 IF n_elements iymaxdta EQ 0 then iymaxdta jpjdta 1 if iymindta EQ 1 THEN iymindta 0 IF iymaxdta EQ 1 then iymaxdta jpjdta 1 if n_elements izmindta EQ 0 THEN izmindta 0 IF n_elements izmaxdta EQ 0 then izmaxdta jpkdta 1 if izmindta EQ 1 THEN izmindta 0 IF izmaxdta EQ 1 then izmaxdta jpkdta 1 on va lire le fichier if n_elements key_stride LE 2 then key_stride 1 1 1 key_stride 1l long key_stride key_shift long testvar var key_shift IF n_elements key_yreverse EQ 0 THEN key_yreverse 0 IF keyword_set key_yreverse THEN BEGIN tmp jpj 1 firsty firsty jpj 1 lasty lasty tmp ENDIF IF keyword_set fbase2tbase THEN BEGIN case strupcase vargrid of U :BEGIN IF NOT keyword_set key_periodic THEN BEGIN firstx firstx 1 lastx lastx 1 ENDIF END V :BEGIN firsty firsty 1 lasty lasty 1 END F :BEGIN firsty firsty 1 lasty lasty 1 IF NOT keyword_set key_periodic THEN BEGIN firstx firstx 1 lastx lastx 1 ENDIF END ELSE: endcase ENDIF IF keyword_set fbase2tbase AND keyword_set key_periodic AND strupcase vargrid EQ U OR strupcase vargrid EQ F THEN key_shift key_shift 1 read_ncdf_varget IF keyword_set fbase2tbase AND keyword_set key_periodic AND strupcase vargrid EQ U OR strupcase vargrid EQ F THEN key_shift key_shift 1 on definit les variables globales rattachees a la variable varname varname name varunit if varcontient natts NE 0 then begin attnames strarr varcontient natts for attiq 0 varcontient natts 1 do attnames attiq ncdf_attname cdfid name attiq lowattnames strlowcase attnames found where lowattnames EQ units 0 IF found NE 1 then ncdf_attget cdfid name attnames found value ELSE value varunit strtrim string value 2 found where lowattnames EQ add_offset 0 if found NE 1 then ncdf_attget cdfid name attnames found add_offset ELSE add_offset 0 found where lowattnames EQ scale_factor 0 if found NE 1 then ncdf_attget cdfid name attnames found scale_factor ELSE scale_factor 1 missing_value no found where lowattnames EQ _fillvalue 0 if found NE 1 then ncdf_attget cdfid name attnames found missing_value found where lowattnames EQ missing_value 0 if found NE 1 then ncdf_attget cdfid name attnames found missing_value ENDIF ELSE BEGIN varunit add_offset 0 scale_factor 1 missing_value no ENDELSE vardate on construit une belle date lisible en fonction du langage specifie year long debut 0 10000 month long debut 0 100 MOD 100 day long debut 0 MOD 100 vardate string format C CMoA 31 month 1 strtrim day 1 strtrim year 1 varexp file_basename filename we apply reverse if keyword_set key_yreverse then res reverse temporary res 2 if keyword_set key_zreverse AND size res 0 EQ 3 AND jpt EQ 1 then res reverse temporary res 3 if keyword_set key_zreverse AND size res 0 EQ 4 THEN res reverse temporary res 3 on applique la valeur valmask sur les points terre if NOT keyword_set cont_nofill then begin valmask 1e20 case 1 of varcontient ndims eq 2:BEGIN xy array mask mask 0 earth where mask EQ 0 END varcontient ndims eq 3 AND where varcontient dim EQ contient recdim 0 EQ 1:BEGIN xyz array earth where mask EQ 0 END varcontient ndims eq 3 AND where varcontient dim EQ contient recdim 0 NE 1:BEGIN xyt array mask mask 0 earth where mask EQ 0 if earth 0 NE 1 then BEGIN earth earth replicate 1 jpt replicate nx ny n_elements earth lindgen jpt END END varcontient ndims eq 4:BEGIN xyzt array earth where mask EQ 0 if earth 0 NE 1 then BEGIN earth earth replicate 1 jpt replicate nx ny nz n_elements earth lindgen jpt END END endcase ENDIF ELSE earth 1 we look for missing_value IF size missing_value type NE 7 then BEGIN IF size missing_value type EQ 1 THEN BEGIN IF isnumber string missing_value tmp EQ 1 THEN missing_value tmp ENDIF if missing_value NE valmask then begin if abs missing_value LT 1e6 then missing where res EQ missing_value ELSE missing where abs res gt abs missing_value 10 ENDIF ELSE missing 1 ENDIF ELSE missing 1 on applique les add_offset scale_factor et missing_value if scale_factor NE 1 then res temporary res scale_factor if add_offset NE 0 then res temporary res add_offset if missing 0 NE 1 then res temporary missing values f_nan if earth 0 NE 1 then res temporary earth 1e20 ncdf_close cdfid if keyword_set savedbox THEN restoreboxparam boxparam4rdncdf dat if keyword_set nostruct then return res ELSE BEGIN IF keyword_set key_forgetold THEN BEGIN return arr:res grid:vargrid unit:varunit experiment:varexp name:varname ENDIF ELSE BEGIN return tab:res grille:vargrid unite:varunit experience:varexp nom:varname ENDELSE ENDELSE END "); 246 246 a[244] = new Array("./ToBeReviewed/LECTURE/read_ncdf_varget.html", "read_ncdf_varget.pro", "", ""); 247 247 a[245] = new Array("./ToBeReviewed/LECTURE/xncdf_lec.html", "xncdf_lec.pro", "", " La lecture de ce programme se fait de bas en haut: 1 xncdf_lec 2 xncdf_lec_event 3 wid_var wid_var_event pro wid_var_event event NAME:wid_var_event PURPOSE:procedure appele par xmanager qd on appuie sur un bouton du 2eme widget cree par wid_var INPUTS: event une structure caracterisant le type d evenement qui arrive au widget numero1 2 COMMON BLOCKS:wididbase resultat infovariable indicewid motcle compile_opt idl2 strictarrsubs COMMON wididbase base COMMON resultat res COMMON infovariable cdfid listename contient nomdim tailledim varid varcontient COMMON indicewid_var widbase1 widbase2111 widbase212 widbase213 selectatt COMMON motcle mcatt mccount mcoffset mciodir mcshift mcstride mcvar quel est le type d evenement widget_control event id get_uvalue uval tailledimvar tailledim varcontient dim if n_elements uval EQ 0 then return case sur le type d evenement case uval OF 1:BEGIN on change des valeurs dans le tableau on controle que les valeurs mises dans le tableau ne sont pas completement fausses widget_control widbase1 get_value table agument du bon type si le type est mauvais on change automatiquement par des valeurs par defaut if event x GT size table 1 then return if event y GT size table 2 then return if size table event x event y type GE 6 OR size table event x event y type EQ 0 then BEGIN if event x EQ 1 then widget_control widbase1 use_table_select 1 event y 1 event y set_value tailledimvar event y ELSE widget_control widbase1 use_table_select event x event y event x event y set_value 0 endif agument avec une valeur nom debile table fix table case event x of 0:BEGIN on a touche a l offset: if table 0 event y LT 0 then BEGIN table 0 event y 0 widget_control widbase1 use_table_select 0 event y 0 event y set_value 0 endif si il depasse la dim du tableau on le met au max et le cont a 1 if table 0 event y GT tailledimvar event y table 3 event y then begin widget_control widbase1 use_table_select 0 event y 1 event y set_value tailledimvar event y table 3 event y 1 ENDIF ELSE BEGIN si avec le nouvel offset le count est trop grand on le diminue juste de ce qu il faut if table 1 event y GT tailledimvar event y table 3 event y table 0 event y then begin widget_control widbase1 use_table_select 1 event y 1 event y set_value tailledimvar event y table 3 event y table 0 event y endif ENDELSE END 1:BEGIN on a touche au count if table 1 event y LT 1 then BEGIN table 1 event y 1 widget_control widbase1 use_table_select 1 event y 1 event y set_value 1 endif si il est trop grand on le diminue juste de ce qu il faut if table 1 event y GT tailledimvar event y table 3 event y table 0 event y then BEGIN widget_control widbase1 use_table_select 1 event y 1 event y set_value tailledimvar event y table 3 event y table 0 event y endif END 2:BEGIN on a touche au shift widget_control widbase1 use_table_select 2 event y 2 event y set_value table 2 event y MOD tailledimvar event y table 3 event y END 3:BEGIN on touche au stride if table 3 event y LT 1 then BEGIN table 3 event y 1 widget_control widbase1 use_table_select 3 event y 3 event y set_value 1 endif if table 3 event y EQ 0 then il ne doit pas etre nul widget_control widbase1 use_table_select 3 event y 3 event y set_value 1 il ne doit pas etre trop grand if table 3 event y GT tailledimvar event y then widget_control widbase1 use_table_select 0 event y 3 event y set_value 0 1 0 tailledimvar event y ELSE BEGIN if table 1 event y GT tailledimvar event y table 3 event y table 0 event y then begin widget_control widbase1 use_table_select 1 event y 1 event y set_value tailledimvar event y table 3 event y table 0 event y endif ENDELSE END ELSE: endcase END 2111:BEGIN on a touche aux boutons oui non on actualise le vecteur selectatt a 0 ou 1 pour l attribut concerne numero event id selectatt where widbase2111 EQ event id event select end 31:BEGIN on a appuye sur get widget_control widbase1 get_value table table fix table mcshift where table 2 NE 0 mcoffset table 0 mccount table 1 mcstride table 3 if mcshift 0 NE 1 then BEGIN il y a des shifts on lit l integralite des dimensions pour lesquelles il y a un shift mcoffset mcshift 0 mccount mcshift tailledimvar mcshift on active pas stride qd il n y en a pas besoin car ca fait ecrire a l ecran qqch de louche if total mcstride EQ n_elements mcstride then ncdf_varget cdfid varid res OFFSET mcoffset COUNT mccount ELSE ncdf_varget cdfid varid res OFFSET mcoffset COUNT mccount STRIDE mcstride pour faire le shift mcshift table 2 mcoffset table 0 mccount table 1 on definit commende qui permet de faire un shift commande res shift res for dim 0 varcontient ndims 1 do commande commande string table 2 dim commande commande rien execute commande on redefinit commnade qui permet de couper les dimensions qui n ont pas ete encore coupees c est celles que l on shift commande res res initialisation de la commende for dim 0 varcontient ndims 1 do BEGIN if mcshift dim EQ 0 then commande commande ELSE commande commande string mcoffset dim : string mccount dim mcoffset dim 1 ENDFOR commande strmid commande 0 strlen commande 1 rien execute commande cas sans shift on lit directement le bon bout de tableau ENDIF ELSE BEGIN if total mcstride EQ n_elements mcstride then ncdf_varget cdfid varid res OFFSET mcoffset COUNT mccount ELSE ncdf_varget cdfid varid res OFFSET mcoffset COUNT mccount STRIDE mcstride ENDELSE faut il constituer une structure avec les attributs qui on ete selectionnes if total selectatt NE 0 then BEGIN il y a des attributs selectionnes res create_struct varcontient name res on cree la structure selectatt where selectatt EQ 1 on trouve les attributs selectiones for attid 0 n_elements selectatt 1 do BEGIN pour lesquels on prend widget_control widbase212 selectatt attid get_value attname le nom widget_control widbase213 selectatt attid get_value attvalue la valeur res create_struct res attname 0 attvalue 0 on concatene la structe endfor endif widget_control event top destroy on ferme le 2eme widget widget_control base destroy on ferme le 1eme widget ncdf_close cdfid END 32: cas de l affichage d un held avec xdisplayfile 33:widget_control event top destroy on ferme le 2eme widget ELSE: endcase return end PRO wid_var widid_pere NAME: wid_var PURPOSE: cette procedure gere le 2eme widget cree qd on appelle xncdf_lec ce widget concerne la lecture de la variable INPUTS: widid_pere: un scalere contenant l identite du widget pere qui a etait cree par xncdf_lec et qui a permis de selectionner la variable a lire OUTPUTS: indirectement res le tableau ou la structure resultat COMMON BLOCKS:resultat infovariable indicewid_var motcle compile_opt idl2 strictarrsubs COMMON resultat res COMMON infovariable cdfid listename contient nomdim tailledim varid varcontient COMMON indicewid_var widbase1 widbase2111 widbase212 widbase213 selectatt COMMON motcle mcatt mccount mcoffset mciodir mcshift mcstride mcvar res 1 ouverture de la fenetre de base sous forme de colonnes widbase widget_base column title variable: varcontient name align_center group_leader widid_pere ouverture de sous fenetres de base widbase1 tableau des offsets rien widget_label widbase value on saute une ligne defintion des lables des lignes du tableau rowlab string tailledim varcontient dim for i 0 n_elements rowlab 1 do rowlab i strtrim rowlab i 1 rowlab nomdim varcontient dim replicate : n_elements varcontient dim rowlab definition des valeurs initiales du tableau valinit lonarr 4 n_elements varcontient dim colonne 0 : les offset if keyword_set mcoffset AND n_elements mcoffset EQ varcontient ndims THEN valinit 0 mcoffset ELSE valinit 0 0 colonne 1 : les counts if keyword_set mccount AND n_elements mccount EQ varcontient ndims THEN valinit 1 mccount ELSE valinit 1 tailledim varcontient dim colonne 2 : les shifts if keyword_set mcshift AND n_elements mcshift EQ varcontient ndims THEN valinit 2 mcshift ELSE valinit 2 0 colonne 3 : les strides if keyword_set mcstride AND n_elements mcstride EQ varcontient ndims THEN valinit 3 mcstride ELSE valinit 3 1 test des valeurs initiales du tableau valinit fix valinit valinit 3 1 valinit 3 valinit 0 valinit 1 tailledim varcontient dim valinit 3 valinit 0 valinit 2 valinit 2 MOD tailledim varcontient dim valinit 3 test des shifts declaration du tableau widbase1 widget_table widbase row_labels rowlab value valinit editable column_labels Offset Count Shift Stride uvalue 1 un petit blabla rien widget_label widbase value ATTENTION: Faire des return pour que les valeurs align_center rien widget_label widbase value du tableau ou des textes soient bien prises en compte align_center widbase2 choix des attributs rien widget_label widbase value on saute une ligne widbase2 widget_base widbase column pour chaque attribut on cree un widget widbase21 qui contient en ligne un bouton oui non widbase211 et deux wigdet text widbase212 widbase213 comportant le nom et la valeur de l attribut widbase21 lonarr varcontient natts widbase211 lonarr varcontient natts widbase2111 lonarr varcontient natts vecteur qui serviera a savoir quels boutons oui non sont selectiones cf wid_var_event selectatt lonarr varcontient natts selectatt 0 widbase212 lonarr varcontient natts widbase213 lonarr varcontient natts for attid 0 varcontient natts 1 do BEGIN boucle sur le nombre d attributs widbase21 attid widget_base widbase2 row name ncdf_attname cdfid varid attid ncdf_attget cdfid varid name value widbase211 attid widget_base widbase21 attid nonexclusive widbase2111 attid widget_button widbase211 attid value uvalue 2111 widbase212 attid widget_text widbase21 attid value name editable widbase213 attid widget_text widbase21 attid value strtrim string value 1 editable endfor widbase3 boutons du bas widbase3 widget_base widbase row align_center widbase31 widget_button widbase3 value GET uvalue 31 widbase32 widget_button widbase3 value Help uvalue 32 widbase33 widget_button widbase3 value DONE uvalue 33 execution de la fentre de base et des sous fenetres widget_control widbase realize xmanager wid_var widbase return end PRO xncdf_lec_event event NAME:xncdf_lec_event PURPOSE: procedure appele par xmanager qd on appuie sur un bouton du 1ere widget cree par xncdf_lec INPUTS: event une structure caracterisant le type d evenement qui arrive au widget numero1 COMMON BLOCKS:resultat infovariable motcle compile_opt idl2 strictarrsubs COMMON resultat res COMMON infovariable cdfid listename contient nomdim tailledim varid varcontient COMMON motcle mcatt mccount mcoffset mciodir mcshift mcstride mcvar quel est le type d evenement widget_control event id get_uvalue uval case sur le type d evenement case uval of 1:BEGIN on veut lire un autre fichier widget_control event id get_value nom on recupere le nom widget_control event top destroy on ferme le widget ncdf_close cdfid on ferme le mauvais fichier qui a ete ouvert on reapelle xncdf_lec res xncdf_lec nom 0 ATT mcatt COUNT mccount OFFSET mcoffset IODIR mciodir SHIFT mcshift STRIDE mcstride VAR mcvar return END 2:BEGIN une variable est selectionee varid event index on recupere son numero ds le fichier Netcdf varcontient ncdf_varinq cdfid varid wid_var event top on appelle le programme qui lance le 2eme widget cf haut END 3:BEGIN bouton done widget_control event top destroy on tue le widget ncdf_close cdfid on ferme le fichier END ELSE: endcase return end NAME: xncdf_lec PURPOSE: lecture d un fichier Net Cdf avec des widgets CATEGORY: lecture de fichiers avec widgets CALLING SEQUENCE: res xncdf_lec nom_fichier INPUTS: OPTIONNEL nom_fichier: c est un string qui donne le nom du fichier a ouvrir Si nomfichier ne contient pas le caractere separateur de repertoirte sous unix par ex Le fichier sera cherche ds le repertoire courant KEYWORD PARAMETERS: IODIR: string contenant le repertoire ou aller chercher le fichier a lire Si nomfichier ne contient pas le caractere separateur de repertoirte sous unix par ex Le fichier cherche s appelera iodir nom_fichier COUNT: An optional vector containing the counts to be used in reading Value COUNT is a 1 based vector with an element for each dimension of the data to be written The default matches the size of the variable so that all data is written out GROUP: The widget ID of the widget that calls XNCDF_LEC When this ID is specified a death of the caller results in a death of XNCDF_LEC OFFSET: An optional vector containing the starting position for the read The default start position is 0 0 SHIFT: un vecteur d entiers specifiant pour chaque dimension de combien il faut la shifter Par defaut c est 0 0 cf la fonction shift pour d explications ATTENTION le shift est effectue sur le tableau de taille maximum avant la reduction eventuelle determinee par OFFSET et COUNT Par contre il est effectue apres l extraction eventuelle cree par le STRIDE STRIDE: An optional vector containing the strides or sampling intervals between accessed values of the netCDF variable The default stride vector is that for a contiguous read 1 1 OUTPUTS: 2 cas possibles: 1 aucun attributs n a ete selectionne Dans ce cas res est le tableau que l on voulait lire 2 Des attributs ont ete selectionnes Dans ce cas res est une structre dont le premier element portant le nom de la variable est le tableau de valeurs et les autre auguments sont les arguments selectiones COMMON BLOCKS: wididbase infovariable resultat motcle SIDE EFFECTS: RESTRICTIONS: EXAMPLE: help xncdf_lec MODIFICATION HISTORY:Sebastien Masson smasson lodyc jussieu fr 24 8 1999 FUNCTION xncdf_lec nom ATT att COUNT count GROUP group OFFSET offset IODIR iodir SHIFT shift STRIDE stride VAR var compile_opt idl2 strictarrsubs COMMON wididbase base COMMON infovariable cdfid listename contient nomdim tailledim varid varcontient COMMON resultat res COMMON motcle mcatt mccount mcoffset mciodir mcshift mcstride mcvar bidouille pour utiliser les mots cles on passe par des variables declarees ds un common res 1 if keyword_set att then mcatt att ELSE mcatt 0 if keyword_set count then mccount count ELSE mccount 0 if keyword_set offset then mcoffset offset ELSE mcoffset 0 if keyword_set shift then mcshift shift ELSE mcshift 0 if keyword_set stride then mcstride stride ELSE mcstride 0 if keyword_set var then mcvar var ELSE mcvar 0 choix du nom du fichier Quel type de machine est utiliee thisOS strupcase strmid version os_family 0 3 CASE thisOS of MAC :sep : WIN :sep ELSE: sep ENDCASE si iodir n est pas definit on l initialise au repertoire courant if NOT keyword_set iodir then cd current iodir mciodir iodir on complete iodir d un caractere separateur de repertoire si besoin est IF rstrpos iodir sep NE strlen iodir 1 THEN iodir iodir sep if n_elements nom EQ 0 then BEGIN si nom n est pas definit on en trouve un grace au programme dialog_pickfile nom dialog_pickfile filter iodir nc if nom 0 EQ then return 1 si on a rien trouve on sort on complete nom par iodir si nom ne contient pas de caractere separateur derepertoire ENDIF ELSE if strpos nom sep EQ 1 then nom iodir nom test findfile nom le nom cherche correspond bien a un fichier while test 0 EQ OR n_elements test GT 1 do BEGIN on en cherche un tant qu il ne correspond a rien test test 0 nom dialog_pickfile filter iodir nc if nom EQ then return 1 test findfile nom endwhile ouverture du fichier nom cdfid ncdf_open nom contient ncdf_inquire cdfid que contient le fichier ouverture de la fenetre de base sous forme de colonnes if n_elements group EQ 0 then base widget_base column title Fichier: nom align_left ELSE base widget_base column title Fichier: nom align_left GROUP_LEADER group ouverture de sous fenetres de base base 1 titre portant le nom du fichier base1 widget_base base column align_center rien widget_label base1 value Net Cdf filename align_center blabla rien widget_text base1 value nom align_center uvalue 1 editable nom du fichier que l on peut changer rien widget_label base1 value on saute une ligne base 2 informations generales sur le fichier base2 widget_base base column informations sur les attributs globaux if contient ngatts NE 1 then begin rien widget_label base2 value Nombre de attributs globaux: strtrim contient ngatts 1 align_left for attiq 0 contient ngatts 1 do BEGIN bouble sur le nombre d attributs globaux name ncdf_attname cdfid attiq global nom de l atribut ncdf_attget cdfid name value global valeur de l atribut rien widget_text base2 value name : strtrim string value 1 xsize 60 scroll wrap align_right endfor rien widget_label base2 value endif informations sur les dimensions rien widget_label base2 value Nombre de dimensions: strtrim contient ndims 1 align_left if contient recdim NE 1 then begin bouble sur le nombre de dimensions ncdf_diminq cdfid contient recdim name value nom et valeur de la dimension rien widget_label base2 value nom de la dimension infinie: name align_left endif nomdim strarr contient ndims vecteur contenant le nom des dimensions tailledim lonarr contient ndims vecteur contenant la valeur des dimensions for dimiq 0 contient ndims 1 do begin bouble sur le nombre de dimensions ncdf_diminq cdfid dimiq name value nom et valeur de la dimension nomdim dimiq name tailledim dimiq value rien widget_label base2 value name de taille: strtrim value 1 align_right ENDFOR rien widget_label base2 value on saute une ligne base 3 choix de la variable base3 widget_base base column rien widget_label base3 value Nombre de variables: strtrim contient nvars 1 align_left base31 widget_base base3 row align_center creation d un vecteur listename contenant le nom de toutes les variables du fichier listename strarr contient nvars for varid 0 contient nvars 1 do begin varcontient ncdf_varinq cdfid varid que contient la variable listename varid varcontient name endfor rien widget_label base31 value variable creation d un bouton a menu deroulant base311 widget_droplist base31 value listename uvalue 2 rien widget_label base3 value base 4 bouton done base4 widget_base base row base42 widget_button base4 value done uvalue 3 align_right execution de la fentre de base et des sous fenetres widget_control base realize xmanager xncdf_lec base return res end"); 248 a[246] = new Array("./ToBeReviewed/MATRICE/colle.html", "colle.pro", "", " file_comments This concatenation function exist in IDL so long as we do not try to stick with a dimension superior or equal at 4 categories utilities param a0 in required param a1 in required param a2 in required param a3 in required param a4 in required param a5 in required param a6 in required param a7 in required param a8 in required param a9 in required param a10 in required param a11 in required param a12 in required param a13 in required param a14 in required param a15 in required param a16 in required param a17 in required param a18 in required param a19 in required param a20 in required keyword SAUVE mot cle qui force a sauvegarder le tableau de pointeur et les tableaux a coller returns res matrice resultat examples IDL print colle replicate 1 2 2 2 indgen 2 2 2 2 1 1 1 1 0 1 2 3 1 1 1 1 4 5 6 7 history Sebastien Masson smasson lodyc jussieu fr 13 1 98 version Id: colle pro 1 34 2006 07 07 10:19:08Z navarro FUNCTION colle a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 SAUVE sauve compile_opt idl2 strictarrsubs res 1 We put in place ptrtab and direc in function of input arguments case 1 of n_params EQ 2:BEGIN case where we directly give the pointer array ptrtab a0 direc a1 if NOT keyword_set sauve then undefine a0 on recuperate the number of array to be pasted nbretab size ptrtab 1 end n_params GT 2:BEGIN on recuperate the number of array to be pasted nbretab n_params 1 bidon execute direc a strtrim n_params 1 2 We write the pointer array whose each element point on an array ptrtab ptrarr nbretab allocate_heap for n 0 nbretab 1 do begin bidon execute ptrtab n a strtrim n 2 if NOT keyword_set sauve then bidon execute undefine a strtrim n 2 endfor sauve 0 end ELSE: endcase case on the direct s value case direc of 1:BEGIN we paste following the dimension 1 res ptrtab 0 if NOT keyword_set sauve then ptr_free ptrtab 0 FOR n 1 nbretab 1 DO BEGIN res temporary res ptrtab n if NOT keyword_set sauve then ptr_free ptrtab n ENDFOR END 2:BEGIN we paste following the dimension 2 res ptrtab 0 if NOT keyword_set sauve then ptr_free ptrtab 0 FOR n 1 nbretab 1 DO BEGIN res temporary res ptrtab n if NOT keyword_set sauve then ptr_free ptrtab n ENDFOR END 3:BEGIN we paste following the dimension 3 res ptrtab 0 if NOT keyword_set sauve then ptr_free ptrtab 0 FOR n 1 nbretab 1 DO BEGIN res temporary res ptrtab n if NOT keyword_set sauve then ptr_free ptrtab n ENDFOR END ELSE:BEGIN We transpose res in order to put the dimension to be pasted number 1 To this we contain the permuter vector which give the place that dimension in the transposed matrix must take siz size ptrtab 0 0 if siz LT direc then ptrtab 0 reform ptrtab 0 size ptrtab 0 1:siz replicate 1 direc siz over permute indgen size ptrtab 0 0 permute 0 direc 1 permute direc 1 0 res transpose ptrtab 0 permute if NOT keyword_set sauve then ptr_free ptrtab 0 FOR n 1 nbretab 1 DO BEGIN we paste following the dimension 1on colle suivant la dimension 1 if size ptrtab n 0 LT direc then ptrtab n reform ptrtab n size ptrtab n 1:siz replicate 1 direc siz res temporary res transpose ptrtab n permute if NOT keyword_set sauve then ptr_free ptrtab n ENDFOR res transpose temporary res permute END ENDCASE if NOT keyword_set sauve then undefine ptrtab sortie: return res END ");249 a[247] = new Array("./ToBeReviewed/PLOTS/DESSINE/bar_plot.html", "bar_plot.pro", "", " file_comments Create a bar graph or overplot on an existing one categories Graphics param Values in required A vector containing the values to be represented by the bars Each element in VALUES corresponds to a single bar in the output keyword BASELINES A vector the same size as VALUES that contains the base value associated with each bar If not specified a base value of zero is used for all bars keyword COLORS A vector the same size as VALUES containing the color index to be used for each bar If not specified the colors are selected based on spacing the color indices as widely as possible within the available colors specified by D N_COLORS keyword BARNAMES A string array containing one string label per bar If the bars are vertical the labels are placed beneath them If horizontal rotated bars are specified the labels are placed to the left of the bars keyword TITLE A string containing the main title to for the bar plot keyword XTITLE A string containing the title for the X axis keyword YTITLE A string containing the title for the Y axis keyword BASERANGE A floating point scalar in the range 0 0 to 1 0 that determines the fraction of the total available plotting area in the direction perpendicular to the bars to be used If not specified the full available area is used keyword BARWIDTH A floating point value that specifies the width of the bars in units of nominal bar width The nominal bar width is computed so that all the bars and the space between them set by default to 20 of the width of the bars will fill the available space optionally controlled with the BASERANGE keyword keyword BARSPACE A scalar that specifies in units of nominal bar width the spacing between bars For example if BARSPACE is 1 0 then all bars will have one bar width of space between them If not specified the bars are spaced apart by 20 of the bar width keyword BAROFFSET A scalar that specifies the offset to be applied to the first bar in units of nominal bar width This keyword allows for example different groups of bars to be overplotted on the same graph If not specified the default offset is equal to BARSPACE keyword OUTLINE If set this keyword specifies that an outline should be drawn around each bar keyword OVERPLOT If set this keyword specifies that the bar plot should be overplotted on an existing graph keyword BACKGROUND A scalar that specifies the color index to be used for the background color By default the normal IDL background color is used keyword ROTATE If set this keyword indicates that horizontal rather than vertical bars should be drawn The bases of horizontal bars are on the left Y axis and the bars extend to the right examples By using the overplotting capability it is relatively easy to create stacked bar charts or different groups of bars on the same graph For example if ARRAY is a two dimensional array of 5 columns and 8 rows it is natural to make a plot with 5 bars each of which is a stacked composite of 8 sections First create a 2D COLORS array equal in size to ARRAY that has identical color index values across each row to ensure that the same item is represented by the same color in all bars With ARRAYS and COLORS defined the following code fragment illustrates the creation of stacked bars note that the number of rows and columns is arbitrary : Y RANGE 0 ymax Scale range to accommodate the total bar lengths BASE INTARR NROWS FOR I 0 NROWS 1 DO BEGIN BAR_PLOT ARRAY I COLORS COLORS I BASELINES BASE BARWIDTH 0 75 BARSPACE 0 25 OVER I GT 0 BASE BASE ARRAY I ENDFOR To plot each row of ARRAY as a clustered group of bars within the same graph use the BASERANGE keyword to restrict the available plotting region for each set of bars The sample code fragment below illustrates this method: FOR I 0 NROWS 1 DO BAR_PLOT ARRAY I COLORS COLORVECT BARWIDTH 0 8 BARSPACE 0 2 BAROFFSET I 1 0 BARSPACE NCOLS OVER I GT 0 BASERANGE 0 19 where NCOLS is the number of columns in ARRAY and COLORVECT is a vector containing the color indices to be used for each group of bars In this example each group uses the same set of colors but this could easily be changed history August 1990 T J Armitage RSI initial programming Replacement for PLOTBAR and OPLOTBAR routines written by William Thompson September 1990 Steve Richards RSI changed defaults to improve the appearance of the bar plots in the default mode Included spacing the bars slightly Id: bar_plot pro 1 34 2006 07 07 10:19:08Z navarro pro bar_plot values baselines baselines colors colors barnames barnames title title xtitle xtitle ytitle ytitle baserange baserange barwidth barwidth barspace barspace baroffset baroffset outline outline overplot overplot background background rotate rotate _EXTRA ex compile_opt idl2 strictarrsubs if n_params d eq 0 then begin Print call return if no parameters print bar_test values baselines baselines colors colors barnames barnames print title title xtitle xtitle ytitle ytitle baserange baserange print barwidth barwidth barspace barspace baroffset baroffset print outline outline overplot overplot background background print rotate rotate return endif nbars n_elements values Determine number of bars Baselines bars extend from baselines through values default 0 if not keyword_set baselines then baselines intarr nbars Default colors spaced evenly in current color table if not keyword_set colors then colors fix d n_colors float nbars indgen nbars 0 5 Labels for the individual bars none by default if not keyword_set barnames then barnames strarr nbars Main title if not keyword_set title then title Centered title under X axis if not keyword_set xtitle then xtitle Title for Y axis if not keyword_set ytitle then ytitle Fraction 0 1 of full X range to use if not keyword_set baserange then baserange 1 0 Space betw bars taken from nominal bar widths default is none If not keyword_set barspace then barspace 0 2 Bar width scaling factor relative to nominal if not keyword_set barwidth then barwidth 1 0 barspace barspace nbars Initial X offset in scaled bar widths default is none if not keyword_set baroffset then baroffset barspace barwidth Outline of bars default is none outline keyword_set outline Overplot do not erase the existing display default is to create new plot overplot keyword_set overplot Background color index defaults to 0 usually black if not specified if not keyword_set background then background 0 Rotate make horizontal bars default is vertical bars rotate keyword_set rotate mnB MIN baselines MAX mxB NAN mnV MIN values MAX mxV NAN range mnB mxV Maximum of bases values if rotate then begin Horizontal bars if x range 0 eq 0 and x range 1 eq 0 Determine range for X axis then xrange range else xrange x range Or use range specified if y range 0 eq 0 and y range 1 eq 0 Plot will calculate then defaults for X but not yrange 0 n_elements values for Ys so fill in here else yrange y range Axis perpend to bars yticks 1 Suppress ticks in plot ytickname strarr 2 xticks 0 xtickname strarr 1 endif else begin Vertical bars if y range 0 eq 0 and y range 1 eq 0 Determine range for Y axis then yrange range else yrange y range Or use range specified xrange x range Axis perpend to bars xticks 1 Suppress ticks in plot xtickname strarr 2 yticks 0 ytickname strarr 1 endelse if overplot eq 0 then Create new plot no data plot values nodata title title xtitle xtitle ytitle ytitle noerase overplot xrange xrange yrange yrange xticks xticks xtickname xtickname yticks yticks ytickname ytickname xstyle 1 ystyle 1 data background background _EXTRA ex if rotate then begin Horizontal bars base_win y window Window range in Y scal_fact x s Scaling factors tick_scal_fact y s Tick scaling factors endif else begin Vertical bars base_win x window Window range in X scal_fact y s Scaling factors tick_scal_fact x s Tick scaling factors endelse winrange baserange base_win 1 base_win 0 Normal window range barsize barwidth winrange nbars Normal bar width winoffset base_win 0 baroffset barsize Normal first offset bases scal_fact 0 scal_fact 1 baselines Baselines in normal coor normal scal_fact 0 scal_fact 1 values Values in normal coor barstart indgen nbars barsize barspace winrange nbars Coor at left edges tickv winoffset barstart 0 5 barsize Tick coor centered for i 0 nbars 1 do begin Draw the bars width winoffset barstart i barstart i Compute bar width barstart i barsize barstart i barsize length bases i normal i normal i bases i Compute bar length if rotate then begin Horizontal bars x length X axis is length axis y width Y axis is width axis endif else begin Vertical bars x width X axis is width axis y length Y axis is length axis endelse polyfill x y color colors i normal Polyfill with color if outline then plots x y normal Outline using p color endfor tickv tickv tick_scal_fact 0 tick_scal_fact 1 Locations of the ticks if rotate then Label the bars Y axis axis yaxis 0 ystyle 1 yticks nbars 1 ytickv tickv ytickname barnames yticklen 0 0 else Label the bars X axis axis xaxis 0 xstyle 1 xticks nbars 1 xtickv tickv xtickname barnames xticklen 0 0 return end");250 a[248] = new Array("./ToBeReviewed/PLOTS/DESSINE/plt.html", "plt.pro", "", " file_comments Draw horizontal graph map categories graphic param TAB1 in required The field whose we want to make the horizontal map can be 2 kind of thing: 1 an array if needed its mean along the z and t direction will be automatically performed 2 a structure respecting all criterions specified by litchamp pro cf IDL xhelp litchamp param PARAM2 in optional default min of tab1 on ocean points Min value we want to consider in the contour s drawing Note: Could also be the type of plot that can be only xy for plt param PARAM3 in optional default max of tab1 on ocean points Max value we want to consider in the contour s drawing Note: if param2 is defined as xy then param3 is used to define the min see param2 param PARAM4 in optional default xy Type of plot can be only xy for plt Note: if param2 is defined as xy then param4 is used to define the max see param3 keyword BOXZOOM Vector indicating the geographic zone on which we want to cut the map If BOXZOOM has : 1 element : The extraction is made on lon1 lon2 lat1 lat2 0 boxzoom 0 2 elements: The extraction is made on lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 4 elements: The extraction is made on Boxzoom 0 max gdept gdepw 5 elements: The extraction is made on Boxzoom 0:3 0 Boxzoom 4 6 elements: The extraction is made on Boxzoom Where lon1 lon2 lat1 lat2 are global variables defined at the last domdef keyword REALCONT Allow to draw continents defined in IDL REALCONT can have 2 form: REALCONT: we draww continents in place of the mask REALCONT 2 we draw cnotinents s contour over the mask this allows to see if the mask correspond at real continents keyword CONTINTERVALLE When CONTOUR is activated it is the value between 2 isolines traced by a trait So it can be different from the one specified by INTERVALLE which in this case does not control colored isolines in color anymore If there is noone specified min we choose a contour min which goes well with the specified interval If this keyword is not specified we trace 20 isolines from the min to the max keyword CONTLABEL It is an integer n When CONTOUR is actvated if n is different of 0 choose the label type corresponding to n cases for the traced by a traitisolines To specify the type of label of the colored contour use LABEL keyword CONTMAX When CONTOUR is activated max value we want to consider in the isoline traced by a trait s line By default we take the max on ocean points of the array passed in the keyword CONTOUR keyword CONTMIN When CONTOUR is activated min value we want to consider in the isoline traced by a trait s line By default we take the min on ocean points of the array passed in the keyword CONTOUR keyword CONTNLEVEL When CONTOUR is activated it is the numbre of contours traced by a trait for drawing active if CONTLABEL 0 by default 20 keyword CONTOUR If we want to trace contours of a different field than the one whose we have the colored drawing by examlpe E P in color and QSR in contours It must be a field respecting same caracteristics than the argument number one of plt keyword GRIDTYPE U T V W or F to specify possibly the grid on wiche the field is joined Comment: In this case we should use a structure like field keyword INTERVALLE Value of an internal between to isoline If there is none specified min we choose a min contour which goes well with the specified interval If this keyword is not specified we trace 20 isoline from the min to the max Comment: When CONTOUR is activated INTERVALLE only specify the interval between 2 colored isoline To specify the interval between 2 isolines traced by a trait use CONTINTERVALLE keyword INV Invert the color vector used to color the graph without use the black the white and the used palette keyword LABEL It is an integer n If n different of 0 it choose the label s type corresponding to cases n cf label pro Comment: When CONTOUR is activated it only specify the label s type for colored isolines For tese one traced by a trait use CONTLABEL keyword MAP We use it when we want to do a projection This keyword can be of two types: MAP P0lat P0lon Rot For the descrption of these 3 values see the online help of MAP_SET MAP: In this case map is automatically caculated have the value: map 0 lon1 lon2 2 0 Comment: A good way to choose the type of the projection we want to do is to have a look at IDL demo: IDL demo Then choose earth sciences and mapping Comment2: By default it is a cindrical projection which is effectuated with or without the keyword map If we want an other projection MAP must be activated and we have to add the keyword: nom_projection For example for a polar projection centered on the south pole: IDL domdef 180 180 90 45 IDL plt tab stereo map 90 0 0 keyword LABMAP Corresponds to label keywords of map_set Defaut definition is labmap 1 keyword MAXIN Allows to specify the max value we want to consider in the drawing of contour helping by the keyword instead of the argument max If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword MININ Allows to specify the min value we want to consider in the drawing of contour helping by the keyword instead of the argument min If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword NLEVEL Number of contour to draw by default 20 active if LABEL 0 or is not specified keyword NOTRI To force not to use the triangulation Beware in this case the drawing only works if the grid is undeformed It means that each point of a longitude give one latitude and each point of a latitude give one longitude exept if we use the keyword CELL_FILL 2 Comment: if the field contain points values f_nan then we even do a triangulation keyword OVERPLOT To make a plot over an other one Comment: Contrarily to the use of CONTOUR or VECTEUR the use of this keyword does not the caption and or the color bar keyword STRICTFILL Activate this keyword to that the filling of contours be precisely done between the min and the max specified letting values inferior at the specified min and values superior at the specified max in white keyword STYLE Contour s style to adopt to draw isolines by default style 0 see style pro keyword VECTEUR It is a structure composed by 2 elements containing the 2 fields U and V of values of the zonal and meridian component of the vector of the fields to draw These fields can be an array or a structure For example: vecteur matriceu:lec unsurface matricev:lec vnsurface Comment: name of elements of vectors are inconsenquential vecteur u:lec unsurface v:lec vnsurface is also appropriated keyword _EXTRA used to pass your keywords keyword CONT_NOFILL Activate it not to fill the point mask to let them transparent Comment: Nevertheless we trace mask s contour keyword USETRI To force using triangulation keyword MASKFILL keyword DUPLICATE keyword DECIMATETRI uses common pro history Sebastien Masson smasson lodyc jussieu fr 7 1999 Sebastien Masson 08 02 2000 checkfield and notri keyword or triangule 1 version Id todo seb Changer param tab1 keyword REMPLI UNLABSUR UNSUR2 UNVECTSUR quelques trucs dans la routine pro plt tab1 param2 param3 param4 REALCONT realcont CONTOUR contour INTERVALLE intervalle INV inv GRIDTYPE gridtype BOXZOOM boxzoom CONTINTERVALLE contintervalle LABEL label CONTLABEL contlabel STYLE style CONTMAX contmax CONTMIN contmin NLEVEL nlevel CONTNLEVEL contnlevel VECTEUR vecteur MAP map MININ minin MAXIN maxin CONT_NOFILL cont_nofill USETRI usetri NOTRI notri MASKFILL maskfill DUPLICATE duplicate STRICTFILL strictfill OVERPLOT overplot DECIMATETRI decimatetri LABMAP labmap _extra ex include common compile_opt idl2 strictarrsubs cm_4mesh cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 To key_performance I preparation of the graphic environment and small verifications I1 verification of the grid s type associated to tab1 if keyword_set gridtype then vargrid gridtype if keyword_set vecteur AND NOT keyword_set gridtype then BEGIN vargrid litchamp tab1 grid if vargrid eq then BEGIN vargrid xquestion What is the grid associated to the data to contour T chkwidget vargrid strupcase vargrid endif ENDIF I2 Reading of the field and checkup if keyword_set boxzoom AND n_elements contour ne 4 then BEGIN savedbox 1b saveboxparam boxparam4plt dat END if n_elements param2 NE 0 then type param2 if n_elements param3 NE 0 then min param3 if n_elements param4 NE 0 then max param4 if n_elements minin NE 0 then min minin if n_elements maxin NE 0 then max maxin checktypeminmax plt TYPE type MIN min MAX max _extra ex z2d checkfield tab1 plt TYPE type BOXZOOM boxzoom DIREC direc VECTEUR vecteur _extra ex if z2d 0 EQ 1 then BEGIN IF keyword_set savedbox THEN restoreboxparam boxparam4plt dat return ENDIF IF n_elements usetri EQ 0 THEN BEGIN do we have holes in the triangulation holeintri n_elements triangles_list 3 LT jpi 1 keyword_set key_periodic jpj 1 2 the triangulation must be used to draw the field do we have a triangulation wehavetri triangles_list 0 NE 1 the triangulation must be used to draw the continents if we make a map are we periodic and nx jpi CASE strupcase vargrid OF T :nx nxt W :nx nxt U :nx nxu V :nx nxv F :nx nxf ENDCASE mapperio keyword_set map keyword_set key_periodic nx eq jpi usetri wehavetri wehavetri holeintri mapperio keyword_set key_irregular 2 notri ENDIF I3 reinitialization p x y Comment: We do not reinitializate when we call bck plt in loop to use contour if n_elements contour ne 4 AND NOT keyword_set overplot then reinitplt z invert I4 attribution of the mask and of longitude and latitude arrays IF strupcase vargrid EQ W THEN profond firstzw NE 0 ELSE profond firstzt NE 0 do we need to extract now the triangulation that will be use for contouring the field if keyword_set profond OR usetri EQ 0 AND vargrid EQ T OR vargrid EQ W OR usetri NE 2 AND vargrid NE T AND vargrid NE W THEN BEGIN grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz forplt _extra ex ENDIF ELSE BEGIN grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz TRI trifield forplt _extra ex ENDELSE I5 determination of the mi:min and of the ma:max of z2d in the same way as max: max and min: min for the drawing masknan finite z2d nan total masknan NE n_elements z2d Do we need to do an autoscale autoscale testvar var min EQ testvar var max AND NOT keyword_set intervalle determineminmax z2d mask mi ma glam gphi MININ min MAXIN max nan nan INTERVALLE intervalle usetri usetri _extra ex if z2d 0 EQ 1 THEN GOTO sortie We do an autoscale if needed if autoscale then autoscale min max intervalle II We put the drawing in its place on the window or the page and possible opening of the window or of the page if n_elements contour NE 4 AND NOT keyword_set overplot THEN placedessin plt posfenetre posbar CONTOUR contour VECTEUR vecteur MAP map DIREC direc _extra ex III Covering of the drawing labels style axis III1 Choice of labels if keyword_set intervalle AND NOT keyword_set label then label 1 if keyword_set label eq 0 then cas 0 else cas label label cas min max ncontour level_z2d colnumb NLEVEL nlevel INTERVALLE intervalle strictfill strictfill III2 Choice of style if not keyword_set style then style 0 style style level_z2d linestyle thick if keyword_set inv then colnumb reverse colnumb III3 Definition of axis if NOT keyword_set overplot THEN axe xy _EXTRA ex IV Drawing extrapolation of field on lands and setup of min max values if keyword_set nan then begin z2d where masknan EQ 0 max ENDIF ELSE masknan 1 filling the mask values we fill only masknan or we fill mask masknan IF keyword_set nan AND keyword_set cont_nofill THEN z2d remplit z2d nite 1 vargrid NE T AND vargrid NE W mask masknan _extra ex ELSE z2d remplit z2d nite 1 vargrid NE T AND vargrid NE W keyword_set nan 1 keyword_set cont_nofill 1 n_elements maskfill NE 0 mask mask masknan _extra ex IF keyword_set strictfill EQ 0 AND n_elements maskfill EQ 0 then z2d min z2d max if n_elements maskfill NE 0 then BEGIN z2d temporary z2d mask masknan if maskfill NE 0 then z2d temporary z2d maskfill 1 mask masknan ENDIF check the mask and the triangulation according to the grid type and nan values If we make a drawing in depth we redifine a triangulation on the zoom this triangulation will be used to trace the field We use tmask in order to holes of this triangulation are the same than these used for the mask and correspond to holes there is in this new depth if keyword_set profond OR keyword_set cont_nofill AND usetri GE 1 AND vargrid EQ T OR vargrid EQ W OR usetri EQ 2 AND vargrid NE T AND vargrid NE W then BEGIN trifield triangule tmask firstx:lastx firsty:lasty firstz coinmonte coinmontemask coindescend coindescendmask keep_cont cont_nofill _extra ex indicezoommask lindgen jpi jpj firstx:lastx firsty:lasty ENDIF triangulation for nan mask if keyword_set nan then BEGIN trinan triangule masknan keep_cont coinmonte coinmontenan coindescend coindescendnan indicezoomnan lindgen jpi jpj firstx:lastx firsty:lasty ENDIF IF n_elements twin_corners_up EQ 0 THEN coinmontemask 1 ELSE coinmontemask twin_corners_up IF n_elements twin_corners_dn EQ 0 THEN coindescendmask 1 ELSE coindescendmask twin_corners_dn if vargrid EQ T OR vargrid EQ W then BEGIN glammsk glam gphimsk gphi ENDIF ELSE begin decoupe terre: For the drawing of the coast be clean we try to take additionally points for the land Like that we do not see grid s gap It is what decoupeterre do We profit of it to redefine trimsk decoupeterre mask glammsk gphimsk type xy TRI trimsk usetri usetri indicezoom indicezoommask coinmonte coinmontemask coindescend coindescendmask _EXTRA ex ENDELSE IV1 Choice of type of drawing typetrace classique if keyword_set map AND key_onearth then BEGIN Call of mapset when we want to do projections IF n_elements map NE 3 THEN map 0 lon1 lon2 2 MOD 360 0 typetrace projection map_lat map 0 map_lon map 1 map_rot map 2 if chkstru ex TITLE then begin maptitre ex title ex title endif map_set map_lat map_lon map_rot _extra ex position posfenetre iso limit lat1 lon1 lat2 lon2 noborder if n_elements maptitre ne 0 then ex title maptitre if n_elements trifield GE 2 then trifield ciseauxtri trifield glam gphi _EXTRA ex if n_elements trimsk GE 2 then trimsk ciseauxtri trimsk glammsk gphimsk _EXTRA ex if n_elements trinan GE 2 then BEGIN trinan ciseauxtri trinan glam gphi _EXTRA ex if trinan 0 EQ 1 then undefine trinan endif ENDIF ELSE BEGIN To axes of coordinates be considerated if x type EQ 0 AND n_elements contour LE 4 then plot 0 0 nodata xstyle 5 ystyle 5 title subtitle noerase if keyword_set key_periodic then BEGIN In this case triangulation is closed in x and cover all the sphere We have to cut it at the level where we cut the sphere to make the drawing if n_elements trifield GE 2 then trifield ciseauxtri trifield glam gphi _EXTRA ex if n_elements trimsk GE 2 then trimsk ciseauxtri trimsk glammsk gphimsk _EXTRA ex if n_elements trinan GE 2 then trinan ciseauxtri trinan glam gphi _EXTRA ex ENDIF endelse IV2 Contours and coloring if keyword_set duplicate then BEGIN pour marina uniquement ATTENTION C EST TRES MAL CODE lon glam 0 decalage max lon min lon lon shift lon 1 n_elements lon 1 x range 1 x range 1 duplicate 1 decalage for i 1 duplicate 1 do BEGIN z2d z2d z2d gphi gphi gphi mask mask mask gphimsk gphimsk gphimsk glam glam glam i decalage glammsk glammsk glammsk ENDFOR endif save glam gphi trifield file tri dat if keyword_set decimatetri then BEGIN tempsdeux systime 1 To key_performance IF n_elements trimsk EQ 0 THEN trimsk trifield Verts transpose temporary glam temporary gphi temporary z2d Conn replicate 3 1 n_elements trifield 3 trifield Result mesh_decimate temporary verts temporary Conn Connout vertices Vertsout percent_vertices decimatetri connout reform connout 4 n_elements connout 4 over trifield temporary connout 1:3 glam reform Vertsout 0 gphi reform Vertsout 1 z2d reform Vertsout 2 undefine Vertsout print temps decimatetri systime 1 tempsdeux ENDIF pltbase z2d glam gphi mask glammsk gphimsk trichamp trifield trimsk trimsk forplt level_z2d colnumb contour contour usetri usetri realcont realcont overplot keyword_set overplot keyword_set map c_linestyle linestyle c_labels 1 indgen n_elements level_z2d MOD 2 c_thick thick cont_nofill cont_nofill nan nan coinmontemask coinmontemask coindescendmask coindescendmask coinmontenan coinmontenan coindescendnan coindescendnan indicezoommask indicezoommask indicezoomnan indicezoomnan masknan masknan trinan trinan _extra ex IV3 Recall of plt in loop when contour is activated if n_elements contour eq 4 then BEGIN c est la 2eme fois que je passe ds pltt contour mietma: mi ma unit:varunit inter:intervalle je renvoie le min le max et l unite return endif if keyword_set contour THEN BEGIN pourlegende 1 1 1 1 oldattributs saveatt oldcolnumb colnumb plt contour contmin contmax CONTOUR pourlegende NOERASE USETRI usetri INTERVALLE contintervalle LABEL contlabel STYLE style NLEVEL contnlevel DUPLICATE duplicate STRICTFILL strictfill MASKFILL maskfill _extra ex restoreatt oldattributs colnumb oldcolnumb ENDIF V Small functions V1 Possible add of vectors in double exposure if keyword_set vecteur then BEGIN oldattributs saveatt ajoutvect vecteur vectlegende _extra ex restoreatt oldattributs ENDIF if keyword_set overplot then GOTO fini V2 Trace the line of change of date the equator and the greenwich meridian if NOT keyword_set map AND key_onearth then meridienparallele xy V3 To trace IDL s continents if keyword_set realcont then BEGIN si noease est passe de _extra on s assure qu il est a 1 if chkstru ex NOERASE then begin oldnoerase ex noerase ex noerase 1 ENDIF if chkstru ex coast_thick then mlinethick ex coast_thick ELSE mlinethick 1 if chkstru ex coast_color then mcolor ex coast_color ELSE mcolor 0 IF NOT keyword_set map THEN map_set 0 lon1 lon2 2 MOD 360 0 position posfenetre limit lat1 lon1 lat2 lon2 NOERASE noborder color 0 _extra ex if realcont NE 2 AND NOT keyword_set cont_nofill then BEGIN if chkstru ex cont_color then cntcol ex coast_color ELSE cntcol d n_colors 1 255 map_continents fill_continents color cntcol _extra ex noerase ENDIF map_continents continents color mcolor MLINETHICK mlinethick noerase _extra ex if chkstru ex NOERASE THEN ex noerase oldnoerase ENDIF V4 caption display of these legende mi ma xy CONTOUR pourlegende VECTLEGENDE vectlegende INTERVALLE intervalle DIREC direc _EXTRA ex if n_elements ex NE 0 then BEGIN To keep frame s axes in black if where tag_names ex EQ COLOR 0 NE 1 then ex COLOR coast_color endif case typetrace of classique : plot 0 0 nodata noerase color 0 xstyle 1 ystyle 1 _extra ex projection : BEGIN if chkstru ex NOERASE then begin oldnoerase ex noerase ex noerase 1 endif if chkstru ex SUBTITLE then p subtitle ex SUBTITLE if n_elements maptitre ne 0 then ex title maptitre map_set map_lat map_lon map_rot _extra ex iso limit lat1 lon1 lat2 lon2 NOERASE noborder title p title color 0 map_proj_info numproj current map_proj_info numproj name nomproj if nomproj EQ Mercator OR nomproj EQ Cylindrical OR nomproj EQ LambertConic OR nomproj EQ Gnomic OR nomproj EQ AlbersEqualAreaConic OR nomproj EQ TransverseMercator OR nomproj EQ MillerCylindrical OR nomproj EQ LambertConicEllipsoid then map_grid box_axes 1 latdel 10 londel 10 ELSE map_grid charsize 0 75 label latalign 1 lonalign 1 latdel 10 londel 30 IF n_elements labmap EQ 0 THEN labmap 1 map_grid charsize 0 75 label labmap latalign 1 lonalign 1 latdel 10 londel 30 color 0 _extra ex if chkstru ex NOERASE THEN ex noerase oldnoerase end endcase V5 Colorbar colnumb colnumb 0:ncontour 1 keyword_set strictfill barrecouleur colnumb min max ncontour keyword_set strictfill 2 position posbar _extra ex VI Possible print fini: terminedessin _extra ex sortie: if keyword_set savedbox THEN restoreboxparam boxparam4plt dat if keyword_set key_performance NE 0 THEN print temps plt systime 1 tempsun return end ");251 a[249] = new Array("./ToBeReviewed/PLOTS/DESSINE/plt1d.html", "plt1d.pro", "", " file_comments Trace 1d graphes: x y z or t but in this case we recall directly pltt categories Graphics param TAB in required The field whose we want to make the hovmoller map can be 2 kind of thing: 1 An array which can be: 2d 3d or 4d: array xy xyz xyt or xyzt In this case the array will pass in moyenne or grossemoyenne to be averaged and becomme an array 1d 1d:Nevertheless the type must be specified in order to we know which trace it is about To have a correct caption respecify the xctraction zone via BOXZOOM 2 a structure respecting all criterions specified by litchamp pro See IDL xhelp litchamp The array contained in the structure respecting criterions of case 1 param PARAM2 in required Min value we want to consider in the contour s drawing Note: could also be the type of plot: x y z param PARAM3 in optional default min max of tab on ocean points Max value we want to consider in the contour s drawing Note: if param2 is defined as x y z then param3 is used to define the min see param2 param PARAM4 in optional default max of tab on ocean points Type of plot can be only x y z for plt1d Note: if param2 is defined as xy then param4 is used to define the max see param3 keyword BOXZOOM Vector indicating the geographique zone 3d on which the extraction of the field must be done to do the hovmoeller If BOXZOOM has : 1 element : The extraction is made on lon1 lon2 lat1 lat2 0 boxzoom 0 2 elements: The extraction is made on lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 4 elements: The extraction is made on Boxzoom vert1 vert2 5 elements: The extraction is made on Boxzoom 0:3 0 Boxzoom 4 6 elements: The extraction is made on Boxzoom Where lon1 lon2 lat1 lat2 vert1 vert2 are global variables defined at the last domdef keyword COL1d OBSOLETE Color number when we make a trace 1d by default 0 It is better to use the keyword COLOR used by plot keyword ENDPOINTS keyword specifing that we want to make a vertical cut in diagonal Then coorinated of extremities of these one are difined by the 4 elements of the vector ENDPOINTS: x1 y1 x2 y2 which are coordinates keyword MAXIN Allows to specify the max value we want to consider in the drawing of contour helping by the keyword instead of the argument max If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword MININ Allows to specify the min value we want to consider in the drawing of contour helping by the keyword instead of the argument min If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword OV1D Allow the double exposure of an 1d curve to a precedent 1d trace keyword REVERSE_X To invert the x axis so as the drawing keyword REVERSE_Y To invert the y axis so as the drawing keyword SIN Activate this keyword if we want the x axis to be traced in sinus of the latitude when we make a drawing f y keyword STY1D OBSOLETE Number of the style used when we make a 1d drawing We should better use the keyword LINESTYLE which is tho one of the plot Beware this keyword is still useful if we want to d bars instead of curves put sty1d bar keyword TYPEIN allows to specify the type of hovmoller we want to do xt yt zt t with help of a keyword rather than the argument type If the argument andthe keyword are specified in the same time it is the value specified by the keyword which is retained keyword _EXTRA used to pass your keywords history creation 24 6 99 Eric Guilyardi a partir routine pltt de Sebastien Masson 8 7 1999 Sebastien Masson smasson lodyc jussieu fr inspection des travaux finis 8 2 2000 Sebastien Masson: checkfield version Id pro plt1d tab param2 param3 param4 BOXZOOM boxzoom SIN sin MININ minin MAXIN maxin TYPEIN typein ENDPOINTS endpoints COL1D col1d STY1D sty1d OV1D ov1d X x Y y Z z TT tt REVERSE_X reverse_x REVERSE_Y reverse_y SWITCHXY switchxy _extra ex include common compile_opt idl2 strictarrsubs cm_4mesh cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 pour key_performance 1st part: initialization small calculations verification of the type s value if n_elements param2 NE 0 then type param2 if n_elements param3 NE 0 then min param3 if n_elements param4 NE 0 then max param4 if n_elements minin NE 0 then min minin if n_elements maxin NE 0 then max maxin if keyword_set tt then typein t if keyword_set typein then BEGIN if size type type NE 7 AND size type type NE 0 then begin if n_elements min NE 0 then max min min type endif type typein endif checktypeminmax plt1d TYPE type MIN min MAX max ENDPOINTS endpoints XX keyword_set x YY keyword_set y ZZ keyword_set z if type EQ t then BEGIN pltt tab type min max BOXZOOM boxzoom SIN sin TYPEIN typein COL1D col1d STY1D sty1d OV1D ov1d ENDPOINTS endpoints _extra ex return endif I2 reinitialization p x y Comment: We do not reinitializate when we call back plt1d if NOT keyword_set ov1d then reinitplt I1 Reading of the field if keyword_set boxzoom OR keyword_set endpoints THEN BEGIN savedbox 1b saveboxparam boxparam4plt1d dat ENDIF if keyword_set endpoints then begin section tab z1d glam gphi ENDPOINTS endpoints TYPE type BOXZOOM boxzoom DIREC direc nx n_elements glam ny nx if strupcase vargrid EQ W then begin z gdepw firstzw:lastzw nz nzw ENDIF ELSE BEGIN z gdept firstzt:lastzt nz nzt ENDELSE ENDIF ELSE BEGIN z1d checkfield tab plt1d TYPE type BOXZOOM boxzoom direc direc _extra ex grille mask glam gphi gdep nx ny nz ENDELSE if z1d 0 EQ 1 then BEGIN IF keyword_set savedbox THEN restoreboxparam boxparam4plt1d dat return endif We build the mask For this the array must be hidden Automaticaly done at valmask value if we pass in moyenne or grossemoyenne mask fltarr n_elements z1d if n_elements valmask EQ 0 then valmask 1e20 nan total finite z1d nan 1 if keyword_set nan then begin notanum where finite z1d EQ 0 z1d notanum 0 mask where z1d LT valmask 10 1 z1d notanum values f_nan ENDIF ELSE mask where z1d LT valmask 10 1 determination of the min and of the max after the average nan total finite z1d nan 1 determineminmax z1d mask mi ma MININ min MAXIN max nan nan INTERVALLE intervalle _extra ex if z1d 0 EQ 1 THEN return if NOT keyword_set ov1d THEN placedessin autre posfenetre posbar contour contour DIREC direc endpoints endpoints _extra ex 2nd part: Drawing definition of the abscisse and ordinate vectors The triangulation is defined in order to the drawing be done from the left bottom to the right up So the matrix have to be shown like this from which some transpose and reverse case type of y : begin yy z1d IF size gphi 0 EQ 1 then xx gphi ELSE BEGIN IF keyword_set key_irregular THEN BEGIN cln where gphi EQ max gphi 0 xx reform gphi cln MOD nx ENDIF ELSE xx reform gphi 0 ENDELSE if keyword_set sin then xx sin pi 180 xx min0 lat1 max0 lat2 END x :begin yy z1d xx glam 0 min0 lon1 max0 lon2 END z :begin yy reverse gdep 1 xx reverse z1d 1 min0 0 max0 0 case n_elements boxzoom of 0: y range vert1 vert2 1: y range 0 boxzoom 2: y range boxzoom 4: y range vert1 vert2 5: y range 0 boxzoom 4 6: y range boxzoom 4:5 endcase if NOT keyword_set ov1d then y range reverse y range END ENDCASE definition of axes if keyword_set integrationtps then axe type time 0 time jpt 1 SIN sin _extra ex ELSE axe type SIN sin if NOT keyword_set ov1d then axe type SIN sin drawing if type EQ z then begin idx where xx NE valmask if NOT keyword_set ov1d then BEGIN if min EQ mi then x range min abs max min 5 max abs max min 5 ELSE x range min max ENDIF ENDIF ELSE BEGIN idx where yy NE valmask if NOT keyword_set ov1d then BEGIN if min EQ mi then y range min abs max min 5 max abs max min 5 ELSE y range min max ENDIF ENDELSE if NOT keyword_set ov1d then BEGIN legende mi ma type CONTOUR contour DIREC direc ENDPOINTS endpoints _EXTRA ex ENDIF IF keyword_set switchxy THEN BEGIN tmp xx xx yy yy temporary tmp if NOT keyword_set ov1d then BEGIN tmp x x y y temporary tmp ENDIF ENDIF if NOT keyword_set ov1d then BEGIN if keyword_set reverse_x then x range reverse x range if keyword_set reverse_y then y range reverse y range ENDIF xx xx idx yy yy idx if not keyword_set col1d then col1d 0 if keyword_set sty1d then BEGIN If we want to make bars IF strlowcase strtrim sty1d EQ bar then begin y range y range 0 y range 1 y range 0 05 y range 1 bar_plot yy background d n_colors 1 255 baselines replicate y range 0 n_elements yy barnames colors replicate col1d n_elements yy outline if n_elements ex NE 0 then BEGIN To have a black frame if where tag_names ex EQ COLOR 0 NE 1 then ex COLOR 0 ENDIF plot 0 0 noerase nodata _extra ex GOTO fini ENDIF ENDIF if NOT keyword_set ov1d then BEGIN plot xx yy color col1d linestyle sty1d thick 2 title subtitle _extra ex if n_elements ex NE 0 then BEGIN To have a 0 colored frame and trace a line at y 0 if where tag_names ex EQ COLOR 0 NE 1 then ex COLOR 0 if where tag_names ex EQ LINESTYLE 0 NE 1 then ex LINESTYLE 0 if where tag_names ex EQ THICK 0 NE 1 then ex THICK 0 ENDIF plot x range 0 0 noerase nodata xstyle 1 4 keyword_set endpoints AND type EQ x AND lat1 NE lat2 OR type EQ y AND lon1 NE lon2 ystyle 1 _extra ex Add of an axis in the case where we use endpoints if keyword_set endpoints then addaxe endpoints type posfenetre _EXTRA ex Trace a line at x 0 plot 0 0 y range noerase nodata title subtitle _extra ex ENDIF ELSE oplot xx yy color col1d linestyle sty1d thick 2 _extra ex 3rd part: Possible print fini: terminedessin _extra ex if keyword_set savedbox THEN restoreboxparam boxparam4plt1d dat if n_elements key_performance NE 0 then IF key_performance EQ 1 THEN print temps plt1d systime 1 tempsun return end ");252 a[250] = new Array("./ToBeReviewed/PLOTS/DESSINE/pltbase.html", "pltbase.pro", "", " file_comments Overlayer contour to trace a field which can be mask Elementary brick of plt pltz et pltt categories graphic param Z2D in required The table to trace param X in required Axis Vector or array of the same size that z2d This is the coordinate of z2d on x param Y in required Axis Vector or array of the same size that z2d This is the coordinate of z2d on y param MASK in required It is the array who mask z2d with 0s on points we want to mask and 1s on others If z2d is not masked put this argument equal to 1 param XM in required Axis of the mask Vector or array of the same size that mask This is the coordinate of mask on x param YM in required Axis of the mask Vector or array of the same size that mask This is the coordinate of mask on y param LEVELS in optional Vectors which contain levels needed at the contour If it is not given we take 20 levels between the min and the max param COLORS in optional Vectors which contain colors needed at the contour If it is not given we take 20 levels between the min and the max keyword COLORTRICHAMP The color we want to use to draw the triangulation which is used to make contours of the field keyword COLORTRIMASK The color we want to use to draw the triangulation which is used to make contours of the mask keyword COLOR_C To draw the contour in color instead of in black with filling in color keyword CONT_NOFILL Activate it not to fill the point mask to let them transparent Comment: Nevertheless we trace mask s contour keyword CONT_COLOR The color of the continent defaut value is d n_colors 1 white keyword DESSTRICHAMP To draw the triangulation which is used to make field s contours keyword DESSTRIMASK To draw the triangulation which is used to make mask s contours keyword FORPLT To activate if we want that the drawing of coast be realized by tracecote rather than tracemask keyword I_COLORS It is a vector specifing the colors to use to trace contours It is the same thing that c_colors which act on contours keyword MORE Number to give to avoid style s bugs: Out of range subscript encountered: Execution halted at: PLTBASE 151 By default more 10 If the bug still exist increase the value of more The explanation and the justification of this method do not have scientific bases yet keyword NOFILL To make just isolines keyword NOCONTOUR To make just colors keyword UNSUR2 To trace one isoline on two keyword UNLABSUR Is an integer n specifying we only label one contour on two keyword CONTOUR To be used since plt pltz or pltt Have a look on these routines keyword _EXTRA Used to pass your keywords uses common pro restrictions In the case of z2d x and y are arrays of same size we hate to put them as vectors: z2d x y history Sebastien Masson smasson lodyc jussieu fr 8 2 2000 check if the tri array is not equal to 1 allow contour with out using a triangulation version Id todo seb L 172 173 PRO pltbase z2d x y mask xm ym levels colors UNSUR2 unsur2 CONTOUR contour NOCONTOUR nocontour NOFILL nofill TRICHAMP trichamp TRIMSK trimsk REALCONT realcont NAN nan usetri usetri COLORTRICHAMP colortrichamp COLORTRIMASK colortrimask COLORTRINAN colortrinan COLORPOINTS colorpoints DRAWPOINTS drawpoints TH_TRICHAMP th_trichamp TH_TRIMASK th_trimask DESSTRICHAMP desstrichamp DESSTRIMASK desstrimask DESSTRINAN desstrinan COLOR_C color_c I_COLORS i_colors CONT_COLOR CONT_COLOR CONT_NOFILL cont_nofill UNLABSUR unlabsur COINMONTEMASK coinmontemask COINDESCENDMASK coindescendmask COINMONTENAN coinmontenan COINDESCENDNAN coindescendnan INDICEZOOMMASK indicezoommask INDICEZOOMNAN indicezoomnan MASKNAN masknan TRINAN trinan FORPLT forplt REALSECTION realsection MORE more EXCHANGE_XY exchange_xy _EXTRA ex compile_opt idl2 strictarrsubs cm_4mesh IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF Explanation concerning contour This keyword is activated when we trace a colored contour different from the one with black trait If it is activated case n_elements contour NE 0 we pass 2 time in pltbase: 1 We trace colors then we leave it is the case: n_elements contour NE 0 AND n_elements contour NE 4 2 We trace contours in traits then continents it is the case: n_elements contour NE 0 AND n_elements contour EQ 4 tempsun systime 1 To key_performance if n_elements mask EQ 0 then mask 1b if n_elements masknan EQ 0 then masknan 1b IF total mask EQ n_elements z2d THEN mask 1b If levels and colors aren t given if n_params EQ 4 then label 0 min z2d mask max z2d mask ncontour levels colors attention bidouille inexplicable pour que tout se passe bien avec les postcript ds pltz if n_elements contour LE 4 AND x type EQ 0 THEN plot 0 0 xstyle 5 ystyle 5 nodata noerase title subtitle Is cell_fill is a part of _extra we desactive it if it is nt equal to 2 IF chkstru ex CELL_FILL THEN BEGIN cell_fill ex CELL_FILL if ex CELL_FILL NE 2 then ex CELL_FILL 0 ENDIF ELSE cell_fill 0 I Filling of contours in palette colors if NOT keyword_set more then more 10 if NOT keyword_set nofill AND NOT keyword_set color_c then begin if n_elements contour NE 4 THEN BEGIN if usetri EQ 2 then BEGIN IF size x n_dimensions EQ 1 THEN x x replicate 1 size z2d 2 IF size y n_dimensions EQ 1 THEN y replicate 1 size z2d 1 y contour z2d fltarr more x fltarr more y fltarr more levels levels c_color colors noerase fill TRIANGULATION trichamp _extra ex ENDIF ELSE BEGIN IF size x n_dimensions EQ 2 THEN x x 0 IF size y n_dimensions EQ 2 THEN y reform y 0 contour z2d x y levels levels c_color colors noerase fill _extra ex ENDELSE ENDIF ENDIF if n_elements contour NE 0 AND n_elements contour NE 4 THEN GOTO fini IF chkstru ex C_ORIENTATION THEN ex extractstru ex C_ORIENTATION IF chkstru ex C_SPACING THEN ex extractstru ex C_SPACING IF chkstru ex C_COLORS THEN ex extractstru ex C_COLORS II Drawing of contours in traits if n_elements contour EQ 4 OR n_elements contour EQ 0 THEN BEGIN we put the masked values to NaN IF n_elements mask GT 1 OR n_elements masknan GT 1 AND NOT keyword_set cont_nofill THEN BEGIN tonan where mask masknan EQ 0 count tonan where remplit mask masknan nite 1 mask mask masknan basique fillval 0 fillxdir keyword_set realsection EQ 0 count IF count NE 0 THEN z2d temporary tonan values f_nan ENDIF We do not pass if we have to make differents contours In the case of unsur2 is activated we reduce levels if NOT keyword_set nocontour then begin IF keyword_set unsur2 THEN levels levels where zeroun n_elements levels eq 1 Is unlabsur activated Does C_LABEL passed via _EXTRA if keyword_set unlabsur THEN IF chkstru ex C_LABELS THEN ex C_LABELS 1 indgen n_elements ex C_LABELS MOD unlabsur 1 Not to fill when cell_fill is imposed IF chkstru ex CELL_FILL THEN ex CELL_FILL 0 CASE 1 OF keyword_set color_c :c_colors colors keyword_set i_colors :c_colors i_colors ELSE: ENDCASE IF usetri EQ 2 THEN BEGIN IF size x n_dimensions EQ 1 THEN x x replicate 1 size z2d 2 IF size y n_dimensions EQ 1 THEN y replicate 1 size z2d 1 y contour z2d fltarr more x fltarr more y fltarr more levels levels overplot 1 keyword_set nofill noerase keyword_set nofill c_colors c_colors TRIANGULATION trichamp _extra ex ENDIF ELSE BEGIN IF size x n_dimensions EQ 2 THEN x x 0 IF size y n_dimensions EQ 2 THEN y reform y 0 contour z2d x y levels levels overplot 1 keyword_set nofill noerase keyword_set nofill c_colors c_colors _extra ex ENDELSE ENDIF III Filling of colored continents IF chkstru ex CELL_FILL THEN ex CELL_FILL cell_fill 1 IF chkstru ex LEVELS THEN ex extractstru ex LEVELS IF chkstru ex NODATA THEN ex extractstru ex NODATA IF NOT keyword_set cont_color THEN cont_color d n_colors 1 255 If there is points at NaN We trace points in white at NaN bafore drawing coasts with a trait if keyword_set trinan THEN BEGIN IF size x n_dimensions EQ 1 THEN x x replicate 1 size masknan 2 IF size y n_dimensions EQ 1 THEN y replicate 1 size masknan 1 y contour 1b masknan fltarr more x fltarr more y fltarr more levels 0 5 overplot fill c_colors cont_color TRIANGULATION trinan _extra ex IF keyword_set forplt THEN completecointerre COINMONTE coinmontenan COINDESCEND coindescendnan INDICEZOOM indicezoomnan CONT_COLOR cont_color _EXTRA ex ELSE fillcornermask x 0 y 0 COINMONTE coinmontenan COINDESCEND coindescendnan CONT_COLOR cont_color _extra ex ENDIF Filling of continents if keyword_set realcont then if realcont EQ 1 then mask 1b if n_elements mask NE 1 then BEGIN If mask 1 we gap it if NOT keyword_set cont_nofill then BEGIN mask filling case 1 of keyword_set realsection :drawsectionbottom mask xm ym CONT_NOFILL cont_nofill CONT_COLOR cont_color _EXTRA ex usetri GE 1:BEGIN if n_elements trimsk eq 0 then trimsk trichamp IF size xm N_DIMENSIONS EQ 1 THEN xm xm replicate 1 size mask 2 IF size ym N_DIMENSIONS EQ 1 THEN ym replicate 1 size mask 1 ym contour 1b mask fltarr more xm fltarr more ym fltarr more LEVELS 0 5 OVERPLOT FILL C_COLORS cont_color TRIANGULATION trimsk _extra ex IF keyword_set forplt THEN completecointerre COINMONTE coinmontemask COINDESCEND coindescendmask INDICEZOOM indicezoommask CONT_COLOR cont_color _EXTRA ex ELSE fillcornermask xm 0 ym 0 COINMONTE coinmontemask COINDESCEND coindescendmask CONT_COLOR cont_color _extra ex END ELSE:BEGIN IF size xm n_dimensions EQ 2 THEN xm xm 0 IF size ym n_dimensions EQ 2 THEN ym reform ym 0 contour 1b mask xm ym LEVELS 0 5 OVERPLOT FILL C_COLORS cont_color _EXTRA ex END ENDCASE ENDIF NOT keyword_set cont_nofill IV Trace coast in traits case 1 of keyword_set realsection AND NOT keyword_set cont_nofill : keyword_set realsection AND keyword_set cont_nofill : drawsectionbottom mask xm ym CONT_NOFILL cont_nofill _extra ex keyword_set forplt AND map projection GT 0 OR key_irregular OR keyword_set nan :tracecote _extra ex ELSE:tracemask mask xm ym _extra ex endcase ENDIF n_elements mask NE 1 ENDIF draw the triangulations if keyword_set desstrichamp then dessinetri trichamp x y color colortrichamp thick th_trichamp if keyword_set desstrimask then dessinetri trimsk xm ym color colortrimask thick th_trimask if keyword_set desstrinan then dessinetri trinan x y color colortrinan if keyword_set drawpoints then tracegrille x y color colorpoints fini: IF keyword_set key_performance THEN print temps pltbase systime 1 tempsun return end");248 a[246] = new Array("./ToBeReviewed/MATRICE/colle.html", "colle.pro", "", " file_comments This concatenation function exist in IDL so long as we do not try to stick with a dimension superior or equal at 4 categories utilities param a0 in required param a1 in required param a2 in required param a3 in required param a4 in required param a5 in required param a6 in required param a7 in required param a8 in required param a9 in required param a10 in required param a11 in required param a12 in required param a13 in required param a14 in required param a15 in required param a16 in required param a17 in required param a18 in required param a19 in required param a20 in required keyword SAUVE mot cle qui force a sauvegarder le tableau de pointeur et les tableaux a coller returns res matrice resultat examples IDL print colle replicate 1 2 2 2 indgen 2 2 2 2 1 1 1 1 0 1 2 3 1 1 1 1 4 5 6 7 history Sebastien Masson smasson lodyc jussieu fr 13 1 98 version Id: colle pro 142 2006 07 21 12:47:49Z navarro FUNCTION colle a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 SAUVE sauve compile_opt idl2 strictarrsubs res 1 We put in place ptrtab and direc in function of input arguments case 1 of n_params EQ 2:BEGIN case where we directly give the pointer array ptrtab a0 direc a1 if NOT keyword_set sauve then undefine a0 on recuperate the number of array to be pasted nbretab size ptrtab 1 end n_params GT 2:BEGIN on recuperate the number of array to be pasted nbretab n_params 1 bidon execute direc a strtrim n_params 1 2 We write the pointer array whose each element point on an array ptrtab ptrarr nbretab allocate_heap for n 0 nbretab 1 do begin bidon execute ptrtab n a strtrim n 2 if NOT keyword_set sauve then bidon execute undefine a strtrim n 2 endfor sauve 0 end ELSE: endcase case on the direct s value case direc of 1:BEGIN we paste following the dimension 1 res ptrtab 0 if NOT keyword_set sauve then ptr_free ptrtab 0 FOR n 1 nbretab 1 DO BEGIN res temporary res ptrtab n if NOT keyword_set sauve then ptr_free ptrtab n ENDFOR END 2:BEGIN we paste following the dimension 2 res ptrtab 0 if NOT keyword_set sauve then ptr_free ptrtab 0 FOR n 1 nbretab 1 DO BEGIN res temporary res ptrtab n if NOT keyword_set sauve then ptr_free ptrtab n ENDFOR END 3:BEGIN we paste following the dimension 3 res ptrtab 0 if NOT keyword_set sauve then ptr_free ptrtab 0 FOR n 1 nbretab 1 DO BEGIN res temporary res ptrtab n if NOT keyword_set sauve then ptr_free ptrtab n ENDFOR END ELSE:BEGIN We transpose res in order to put the dimension to be pasted number 1 To this we contain the permuter vector which give the place that dimension in the transposed matrix must take siz size ptrtab 0 0 if siz LT direc then ptrtab 0 reform ptrtab 0 size ptrtab 0 1:siz replicate 1 direc siz over permute indgen size ptrtab 0 0 permute 0 direc 1 permute direc 1 0 res transpose ptrtab 0 permute if NOT keyword_set sauve then ptr_free ptrtab 0 FOR n 1 nbretab 1 DO BEGIN we paste following the dimension 1on colle suivant la dimension 1 if size ptrtab n 0 LT direc then ptrtab n reform ptrtab n size ptrtab n 1:siz replicate 1 direc siz res temporary res transpose ptrtab n permute if NOT keyword_set sauve then ptr_free ptrtab n ENDFOR res transpose temporary res permute END ENDCASE if NOT keyword_set sauve then undefine ptrtab sortie: return res END "); 249 a[247] = new Array("./ToBeReviewed/PLOTS/DESSINE/bar_plot.html", "bar_plot.pro", "", " file_comments Create a bar graph or overplot on an existing one categories Graphics param Values in required A vector containing the values to be represented by the bars Each element in VALUES corresponds to a single bar in the output keyword BASELINES A vector the same size as VALUES that contains the base value associated with each bar If not specified a base value of zero is used for all bars keyword COLORS A vector the same size as VALUES containing the color index to be used for each bar If not specified the colors are selected based on spacing the color indices as widely as possible within the available colors specified by D N_COLORS keyword BARNAMES A string array containing one string label per bar If the bars are vertical the labels are placed beneath them If horizontal rotated bars are specified the labels are placed to the left of the bars keyword TITLE A string containing the main title to for the bar plot keyword XTITLE A string containing the title for the X axis keyword YTITLE A string containing the title for the Y axis keyword BASERANGE A floating point scalar in the range 0 0 to 1 0 that determines the fraction of the total available plotting area in the direction perpendicular to the bars to be used If not specified the full available area is used keyword BARWIDTH A floating point value that specifies the width of the bars in units of nominal bar width The nominal bar width is computed so that all the bars and the space between them set by default to 20 of the width of the bars will fill the available space optionally controlled with the BASERANGE keyword keyword BARSPACE A scalar that specifies in units of nominal bar width the spacing between bars For example if BARSPACE is 1 0 then all bars will have one bar width of space between them If not specified the bars are spaced apart by 20 of the bar width keyword BAROFFSET A scalar that specifies the offset to be applied to the first bar in units of nominal bar width This keyword allows for example different groups of bars to be overplotted on the same graph If not specified the default offset is equal to BARSPACE keyword OUTLINE If set this keyword specifies that an outline should be drawn around each bar keyword OVERPLOT If set this keyword specifies that the bar plot should be overplotted on an existing graph keyword BACKGROUND A scalar that specifies the color index to be used for the background color By default the normal IDL background color is used keyword ROTATE If set this keyword indicates that horizontal rather than vertical bars should be drawn The bases of horizontal bars are on the left Y axis and the bars extend to the right examples By using the overplotting capability it is relatively easy to create stacked bar charts or different groups of bars on the same graph For example if ARRAY is a two dimensional array of 5 columns and 8 rows it is natural to make a plot with 5 bars each of which is a stacked composite of 8 sections First create a 2D COLORS array equal in size to ARRAY that has identical color index values across each row to ensure that the same item is represented by the same color in all bars With ARRAYS and COLORS defined the following code fragment illustrates the creation of stacked bars note that the number of rows and columns is arbitrary : Y RANGE 0 ymax Scale range to accommodate the total bar lengths BASE INTARR NROWS FOR I 0 NROWS 1 DO BEGIN BAR_PLOT ARRAY I COLORS COLORS I BASELINES BASE BARWIDTH 0 75 BARSPACE 0 25 OVER I GT 0 BASE BASE ARRAY I ENDFOR To plot each row of ARRAY as a clustered group of bars within the same graph use the BASERANGE keyword to restrict the available plotting region for each set of bars The sample code fragment below illustrates this method: FOR I 0 NROWS 1 DO BAR_PLOT ARRAY I COLORS COLORVECT BARWIDTH 0 8 BARSPACE 0 2 BAROFFSET I 1 0 BARSPACE NCOLS OVER I GT 0 BASERANGE 0 19 where NCOLS is the number of columns in ARRAY and COLORVECT is a vector containing the color indices to be used for each group of bars In this example each group uses the same set of colors but this could easily be changed history August 1990 T J Armitage RSI initial programming Replacement for PLOTBAR and OPLOTBAR routines written by William Thompson September 1990 Steve Richards RSI changed defaults to improve the appearance of the bar plots in the default mode Included spacing the bars slightly Id: bar_plot pro 142 2006 07 21 12:47:49Z navarro pro bar_plot values baselines baselines colors colors barnames barnames title title xtitle xtitle ytitle ytitle baserange baserange barwidth barwidth barspace barspace baroffset baroffset outline outline overplot overplot background background rotate rotate _EXTRA ex compile_opt idl2 strictarrsubs if n_params d eq 0 then begin Print call return if no parameters print bar_test values baselines baselines colors colors barnames barnames print title title xtitle xtitle ytitle ytitle baserange baserange print barwidth barwidth barspace barspace baroffset baroffset print outline outline overplot overplot background background print rotate rotate return endif nbars n_elements values Determine number of bars Baselines bars extend from baselines through values default 0 if not keyword_set baselines then baselines intarr nbars Default colors spaced evenly in current color table if not keyword_set colors then colors fix d n_colors float nbars indgen nbars 0 5 Labels for the individual bars none by default if not keyword_set barnames then barnames strarr nbars Main title if not keyword_set title then title Centered title under X axis if not keyword_set xtitle then xtitle Title for Y axis if not keyword_set ytitle then ytitle Fraction 0 1 of full X range to use if not keyword_set baserange then baserange 1 0 Space betw bars taken from nominal bar widths default is none If not keyword_set barspace then barspace 0 2 Bar width scaling factor relative to nominal if not keyword_set barwidth then barwidth 1 0 barspace barspace nbars Initial X offset in scaled bar widths default is none if not keyword_set baroffset then baroffset barspace barwidth Outline of bars default is none outline keyword_set outline Overplot do not erase the existing display default is to create new plot overplot keyword_set overplot Background color index defaults to 0 usually black if not specified if not keyword_set background then background 0 Rotate make horizontal bars default is vertical bars rotate keyword_set rotate mnB MIN baselines MAX mxB NAN mnV MIN values MAX mxV NAN range mnB mxV Maximum of bases values if rotate then begin Horizontal bars if x range 0 eq 0 and x range 1 eq 0 Determine range for X axis then xrange range else xrange x range Or use range specified if y range 0 eq 0 and y range 1 eq 0 Plot will calculate then defaults for X but not yrange 0 n_elements values for Ys so fill in here else yrange y range Axis perpend to bars yticks 1 Suppress ticks in plot ytickname strarr 2 xticks 0 xtickname strarr 1 endif else begin Vertical bars if y range 0 eq 0 and y range 1 eq 0 Determine range for Y axis then yrange range else yrange y range Or use range specified xrange x range Axis perpend to bars xticks 1 Suppress ticks in plot xtickname strarr 2 yticks 0 ytickname strarr 1 endelse if overplot eq 0 then Create new plot no data plot values nodata title title xtitle xtitle ytitle ytitle noerase overplot xrange xrange yrange yrange xticks xticks xtickname xtickname yticks yticks ytickname ytickname xstyle 1 ystyle 1 data background background _EXTRA ex if rotate then begin Horizontal bars base_win y window Window range in Y scal_fact x s Scaling factors tick_scal_fact y s Tick scaling factors endif else begin Vertical bars base_win x window Window range in X scal_fact y s Scaling factors tick_scal_fact x s Tick scaling factors endelse winrange baserange base_win 1 base_win 0 Normal window range barsize barwidth winrange nbars Normal bar width winoffset base_win 0 baroffset barsize Normal first offset bases scal_fact 0 scal_fact 1 baselines Baselines in normal coor normal scal_fact 0 scal_fact 1 values Values in normal coor barstart indgen nbars barsize barspace winrange nbars Coor at left edges tickv winoffset barstart 0 5 barsize Tick coor centered for i 0 nbars 1 do begin Draw the bars width winoffset barstart i barstart i Compute bar width barstart i barsize barstart i barsize length bases i normal i normal i bases i Compute bar length if rotate then begin Horizontal bars x length X axis is length axis y width Y axis is width axis endif else begin Vertical bars x width X axis is width axis y length Y axis is length axis endelse polyfill x y color colors i normal Polyfill with color if outline then plots x y normal Outline using p color endfor tickv tickv tick_scal_fact 0 tick_scal_fact 1 Locations of the ticks if rotate then Label the bars Y axis axis yaxis 0 ystyle 1 yticks nbars 1 ytickv tickv ytickname barnames yticklen 0 0 else Label the bars X axis axis xaxis 0 xstyle 1 xticks nbars 1 xtickv tickv xtickname barnames xticklen 0 0 return end"); 250 a[248] = new Array("./ToBeReviewed/PLOTS/DESSINE/plt.html", "plt.pro", "", " file_comments Draw horizontal graph map categories graphic param TAB1 in required The field whose we want to make the horizontal map can be 2 kind of thing: 1 an array if needed its mean along the z and t direction will be automatically performed 2 a structure respecting all criterions specified by litchamp pro cf IDL xhelp litchamp param PARAM2 in optional default min of tab1 on ocean points Min value we want to consider in the contour s drawing Note: Could also be the type of plot that can be only xy for plt param PARAM3 in optional default max of tab1 on ocean points Max value we want to consider in the contour s drawing Note: if param2 is defined as xy then param3 is used to define the min see param2 param PARAM4 in optional default xy Type of plot can be only xy for plt Note: if param2 is defined as xy then param4 is used to define the max see param3 keyword BOXZOOM Vector indicating the geographic zone on which we want to cut the map If BOXZOOM has : 1 element : The extraction is made on lon1 lon2 lat1 lat2 0 boxzoom 0 2 elements: The extraction is made on lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 4 elements: The extraction is made on Boxzoom 0 max gdept gdepw 5 elements: The extraction is made on Boxzoom 0:3 0 Boxzoom 4 6 elements: The extraction is made on Boxzoom Where lon1 lon2 lat1 lat2 are global variables defined at the last domdef keyword REALCONT Allow to draw continents defined in IDL REALCONT can have 2 form: REALCONT: we draww continents in place of the mask REALCONT 2 we draw cnotinents s contour over the mask this allows to see if the mask correspond at real continents keyword CONTINTERVALLE When CONTOUR is activated it is the value between 2 isolines traced by a trait So it can be different from the one specified by INTERVALLE which in this case does not control colored isolines in color anymore If there is noone specified min we choose a contour min which goes well with the specified interval If this keyword is not specified we trace 20 isolines from the min to the max keyword CONTLABEL It is an integer n When CONTOUR is actvated if n is different of 0 choose the label type corresponding to n cases for the traced by a traitisolines To specify the type of label of the colored contour use LABEL keyword CONTMAX When CONTOUR is activated max value we want to consider in the isoline traced by a trait s line By default we take the max on ocean points of the array passed in the keyword CONTOUR keyword CONTMIN When CONTOUR is activated min value we want to consider in the isoline traced by a trait s line By default we take the min on ocean points of the array passed in the keyword CONTOUR keyword CONTNLEVEL When CONTOUR is activated it is the numbre of contours traced by a trait for drawing active if CONTLABEL 0 by default 20 keyword CONTOUR If we want to trace contours of a different field than the one whose we have the colored drawing by examlpe E P in color and QSR in contours It must be a field respecting same caracteristics than the argument number one of plt keyword GRIDTYPE U T V W or F to specify possibly the grid on wiche the field is joined Comment: In this case we should use a structure like field keyword INTERVALLE Value of an internal between to isoline If there is none specified min we choose a min contour which goes well with the specified interval If this keyword is not specified we trace 20 isoline from the min to the max Comment: When CONTOUR is activated INTERVALLE only specify the interval between 2 colored isoline To specify the interval between 2 isolines traced by a trait use CONTINTERVALLE keyword INV Invert the color vector used to color the graph without use the black the white and the used palette keyword LABEL It is an integer n If n different of 0 it choose the label s type corresponding to cases n cf label pro Comment: When CONTOUR is activated it only specify the label s type for colored isolines For tese one traced by a trait use CONTLABEL keyword MAP We use it when we want to do a projection This keyword can be of two types: MAP P0lat P0lon Rot For the descrption of these 3 values see the online help of MAP_SET MAP: In this case map is automatically caculated have the value: map 0 lon1 lon2 2 0 Comment: A good way to choose the type of the projection we want to do is to have a look at IDL demo: IDL demo Then choose earth sciences and mapping Comment2: By default it is a cindrical projection which is effectuated with or without the keyword map If we want an other projection MAP must be activated and we have to add the keyword: nom_projection For example for a polar projection centered on the south pole: IDL domdef 180 180 90 45 IDL plt tab stereo map 90 0 0 keyword LABMAP Corresponds to label keywords of map_set Defaut definition is labmap 1 keyword MAXIN Allows to specify the max value we want to consider in the drawing of contour helping by the keyword instead of the argument max If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword MININ Allows to specify the min value we want to consider in the drawing of contour helping by the keyword instead of the argument min If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword NLEVEL Number of contour to draw by default 20 active if LABEL 0 or is not specified keyword NOTRI To force not to use the triangulation Beware in this case the drawing only works if the grid is undeformed It means that each point of a longitude give one latitude and each point of a latitude give one longitude exept if we use the keyword CELL_FILL 2 Comment: if the field contain points values f_nan then we even do a triangulation keyword OVERPLOT To make a plot over an other one Comment: Contrarily to the use of CONTOUR or VECTEUR the use of this keyword does not the caption and or the color bar keyword STRICTFILL Activate this keyword to that the filling of contours be precisely done between the min and the max specified letting values inferior at the specified min and values superior at the specified max in white keyword STYLE Contour s style to adopt to draw isolines by default style 0 see style pro keyword VECTEUR It is a structure composed by 2 elements containing the 2 fields U and V of values of the zonal and meridian component of the vector of the fields to draw These fields can be an array or a structure For example: vecteur matriceu:lec unsurface matricev:lec vnsurface Comment: name of elements of vectors are inconsenquential vecteur u:lec unsurface v:lec vnsurface is also appropriated keyword _EXTRA used to pass your keywords keyword CONT_NOFILL Activate it not to fill the point mask to let them transparent Comment: Nevertheless we trace mask s contour keyword USETRI To force using triangulation keyword MASKFILL keyword DUPLICATE keyword DECIMATETRI uses common pro history Sebastien Masson smasson lodyc jussieu fr 7 1999 Sebastien Masson 08 02 2000 checkfield and notri keyword or triangule 1 version Id: plt pro 142 2006 07 21 12:47:49Z navarro todo seb Changer param tab1 keyword REMPLI UNLABSUR UNSUR2 UNVECTSUR quelques trucs dans la routine pro plt tab1 param2 param3 param4 REALCONT realcont CONTOUR contour INTERVALLE intervalle INV inv GRIDTYPE gridtype BOXZOOM boxzoom CONTINTERVALLE contintervalle LABEL label CONTLABEL contlabel STYLE style CONTMAX contmax CONTMIN contmin NLEVEL nlevel CONTNLEVEL contnlevel VECTEUR vecteur MAP map MININ minin MAXIN maxin CONT_NOFILL cont_nofill USETRI usetri NOTRI notri MASKFILL maskfill DUPLICATE duplicate STRICTFILL strictfill OVERPLOT overplot DECIMATETRI decimatetri LABMAP labmap _extra ex include common compile_opt idl2 strictarrsubs cm_4mesh cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 To key_performance I preparation of the graphic environment and small verifications I1 verification of the grid s type associated to tab1 if keyword_set gridtype then vargrid gridtype if keyword_set vecteur AND NOT keyword_set gridtype then BEGIN vargrid litchamp tab1 grid if vargrid eq then BEGIN vargrid xquestion What is the grid associated to the data to contour T chkwidget vargrid strupcase vargrid endif ENDIF I2 Reading of the field and checkup if keyword_set boxzoom AND n_elements contour ne 4 then BEGIN savedbox 1b saveboxparam boxparam4plt dat END if n_elements param2 NE 0 then type param2 if n_elements param3 NE 0 then min param3 if n_elements param4 NE 0 then max param4 if n_elements minin NE 0 then min minin if n_elements maxin NE 0 then max maxin checktypeminmax plt TYPE type MIN min MAX max _extra ex z2d checkfield tab1 plt TYPE type BOXZOOM boxzoom DIREC direc VECTEUR vecteur _extra ex if z2d 0 EQ 1 then BEGIN IF keyword_set savedbox THEN restoreboxparam boxparam4plt dat return ENDIF IF n_elements usetri EQ 0 THEN BEGIN do we have holes in the triangulation holeintri n_elements triangles_list 3 LT jpi 1 keyword_set key_periodic jpj 1 2 the triangulation must be used to draw the field do we have a triangulation wehavetri triangles_list 0 NE 1 the triangulation must be used to draw the continents if we make a map are we periodic and nx jpi CASE strupcase vargrid OF T :nx nxt W :nx nxt U :nx nxu V :nx nxv F :nx nxf ENDCASE mapperio keyword_set map keyword_set key_periodic nx eq jpi usetri wehavetri wehavetri holeintri mapperio keyword_set key_irregular 2 notri ENDIF I3 reinitialization p x y Comment: We do not reinitializate when we call bck plt in loop to use contour if n_elements contour ne 4 AND NOT keyword_set overplot then reinitplt z invert I4 attribution of the mask and of longitude and latitude arrays IF strupcase vargrid EQ W THEN profond firstzw NE 0 ELSE profond firstzt NE 0 do we need to extract now the triangulation that will be use for contouring the field if keyword_set profond OR usetri EQ 0 AND vargrid EQ T OR vargrid EQ W OR usetri NE 2 AND vargrid NE T AND vargrid NE W THEN BEGIN grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz forplt _extra ex ENDIF ELSE BEGIN grille mask glam gphi gdep nx ny nz firstx firsty firstz lastx lasty lastz TRI trifield forplt _extra ex ENDELSE I5 determination of the mi:min and of the ma:max of z2d in the same way as max: max and min: min for the drawing masknan finite z2d nan total masknan NE n_elements z2d Do we need to do an autoscale autoscale testvar var min EQ testvar var max AND NOT keyword_set intervalle determineminmax z2d mask mi ma glam gphi MININ min MAXIN max nan nan INTERVALLE intervalle usetri usetri _extra ex if z2d 0 EQ 1 THEN GOTO sortie We do an autoscale if needed if autoscale then autoscale min max intervalle II We put the drawing in its place on the window or the page and possible opening of the window or of the page if n_elements contour NE 4 AND NOT keyword_set overplot THEN placedessin plt posfenetre posbar CONTOUR contour VECTEUR vecteur MAP map DIREC direc _extra ex III Covering of the drawing labels style axis III1 Choice of labels if keyword_set intervalle AND NOT keyword_set label then label 1 if keyword_set label eq 0 then cas 0 else cas label label cas min max ncontour level_z2d colnumb NLEVEL nlevel INTERVALLE intervalle strictfill strictfill III2 Choice of style if not keyword_set style then style 0 style style level_z2d linestyle thick if keyword_set inv then colnumb reverse colnumb III3 Definition of axis if NOT keyword_set overplot THEN axe xy _EXTRA ex IV Drawing extrapolation of field on lands and setup of min max values if keyword_set nan then begin z2d where masknan EQ 0 max ENDIF ELSE masknan 1 filling the mask values we fill only masknan or we fill mask masknan IF keyword_set nan AND keyword_set cont_nofill THEN z2d remplit z2d nite 1 vargrid NE T AND vargrid NE W mask masknan _extra ex ELSE z2d remplit z2d nite 1 vargrid NE T AND vargrid NE W keyword_set nan 1 keyword_set cont_nofill 1 n_elements maskfill NE 0 mask mask masknan _extra ex IF keyword_set strictfill EQ 0 AND n_elements maskfill EQ 0 then z2d min z2d max if n_elements maskfill NE 0 then BEGIN z2d temporary z2d mask masknan if maskfill NE 0 then z2d temporary z2d maskfill 1 mask masknan ENDIF check the mask and the triangulation according to the grid type and nan values If we make a drawing in depth we redifine a triangulation on the zoom this triangulation will be used to trace the field We use tmask in order to holes of this triangulation are the same than these used for the mask and correspond to holes there is in this new depth if keyword_set profond OR keyword_set cont_nofill AND usetri GE 1 AND vargrid EQ T OR vargrid EQ W OR usetri EQ 2 AND vargrid NE T AND vargrid NE W then BEGIN trifield triangule tmask firstx:lastx firsty:lasty firstz coinmonte coinmontemask coindescend coindescendmask keep_cont cont_nofill _extra ex indicezoommask lindgen jpi jpj firstx:lastx firsty:lasty ENDIF triangulation for nan mask if keyword_set nan then BEGIN trinan triangule masknan keep_cont coinmonte coinmontenan coindescend coindescendnan indicezoomnan lindgen jpi jpj firstx:lastx firsty:lasty ENDIF IF n_elements twin_corners_up EQ 0 THEN coinmontemask 1 ELSE coinmontemask twin_corners_up IF n_elements twin_corners_dn EQ 0 THEN coindescendmask 1 ELSE coindescendmask twin_corners_dn if vargrid EQ T OR vargrid EQ W then BEGIN glammsk glam gphimsk gphi ENDIF ELSE begin decoupe terre: For the drawing of the coast be clean we try to take additionally points for the land Like that we do not see grid s gap It is what decoupeterre do We profit of it to redefine trimsk decoupeterre mask glammsk gphimsk type xy TRI trimsk usetri usetri indicezoom indicezoommask coinmonte coinmontemask coindescend coindescendmask _EXTRA ex ENDELSE IV1 Choice of type of drawing typetrace classique if keyword_set map AND key_onearth then BEGIN Call of mapset when we want to do projections IF n_elements map NE 3 THEN map 0 lon1 lon2 2 MOD 360 0 typetrace projection map_lat map 0 map_lon map 1 map_rot map 2 if chkstru ex TITLE then begin maptitre ex title ex title endif map_set map_lat map_lon map_rot _extra ex position posfenetre iso limit lat1 lon1 lat2 lon2 noborder if n_elements maptitre ne 0 then ex title maptitre if n_elements trifield GE 2 then trifield ciseauxtri trifield glam gphi _EXTRA ex if n_elements trimsk GE 2 then trimsk ciseauxtri trimsk glammsk gphimsk _EXTRA ex if n_elements trinan GE 2 then BEGIN trinan ciseauxtri trinan glam gphi _EXTRA ex if trinan 0 EQ 1 then undefine trinan endif ENDIF ELSE BEGIN To axes of coordinates be considerated if x type EQ 0 AND n_elements contour LE 4 then plot 0 0 nodata xstyle 5 ystyle 5 title subtitle noerase if keyword_set key_periodic then BEGIN In this case triangulation is closed in x and cover all the sphere We have to cut it at the level where we cut the sphere to make the drawing if n_elements trifield GE 2 then trifield ciseauxtri trifield glam gphi _EXTRA ex if n_elements trimsk GE 2 then trimsk ciseauxtri trimsk glammsk gphimsk _EXTRA ex if n_elements trinan GE 2 then trinan ciseauxtri trinan glam gphi _EXTRA ex ENDIF endelse IV2 Contours and coloring if keyword_set duplicate then BEGIN pour marina uniquement ATTENTION C EST TRES MAL CODE lon glam 0 decalage max lon min lon lon shift lon 1 n_elements lon 1 x range 1 x range 1 duplicate 1 decalage for i 1 duplicate 1 do BEGIN z2d z2d z2d gphi gphi gphi mask mask mask gphimsk gphimsk gphimsk glam glam glam i decalage glammsk glammsk glammsk ENDFOR endif save glam gphi trifield file tri dat if keyword_set decimatetri then BEGIN tempsdeux systime 1 To key_performance IF n_elements trimsk EQ 0 THEN trimsk trifield Verts transpose temporary glam temporary gphi temporary z2d Conn replicate 3 1 n_elements trifield 3 trifield Result mesh_decimate temporary verts temporary Conn Connout vertices Vertsout percent_vertices decimatetri connout reform connout 4 n_elements connout 4 over trifield temporary connout 1:3 glam reform Vertsout 0 gphi reform Vertsout 1 z2d reform Vertsout 2 undefine Vertsout print temps decimatetri systime 1 tempsdeux ENDIF pltbase z2d glam gphi mask glammsk gphimsk trichamp trifield trimsk trimsk forplt level_z2d colnumb contour contour usetri usetri realcont realcont overplot keyword_set overplot keyword_set map c_linestyle linestyle c_labels 1 indgen n_elements level_z2d MOD 2 c_thick thick cont_nofill cont_nofill nan nan coinmontemask coinmontemask coindescendmask coindescendmask coinmontenan coinmontenan coindescendnan coindescendnan indicezoommask indicezoommask indicezoomnan indicezoomnan masknan masknan trinan trinan _extra ex IV3 Recall of plt in loop when contour is activated if n_elements contour eq 4 then BEGIN c est la 2eme fois que je passe ds pltt contour mietma: mi ma unit:varunit inter:intervalle je renvoie le min le max et l unite return endif if keyword_set contour THEN BEGIN pourlegende 1 1 1 1 oldattributs saveatt oldcolnumb colnumb plt contour contmin contmax CONTOUR pourlegende NOERASE USETRI usetri INTERVALLE contintervalle LABEL contlabel STYLE style NLEVEL contnlevel DUPLICATE duplicate STRICTFILL strictfill MASKFILL maskfill _extra ex restoreatt oldattributs colnumb oldcolnumb ENDIF V Small functions V1 Possible add of vectors in double exposure if keyword_set vecteur then BEGIN oldattributs saveatt ajoutvect vecteur vectlegende _extra ex restoreatt oldattributs ENDIF if keyword_set overplot then GOTO fini V2 Trace the line of change of date the equator and the greenwich meridian if NOT keyword_set map AND key_onearth then meridienparallele xy V3 To trace IDL s continents if keyword_set realcont then BEGIN si noease est passe de _extra on s assure qu il est a 1 if chkstru ex NOERASE then begin oldnoerase ex noerase ex noerase 1 ENDIF if chkstru ex coast_thick then mlinethick ex coast_thick ELSE mlinethick 1 if chkstru ex coast_color then mcolor ex coast_color ELSE mcolor 0 IF NOT keyword_set map THEN map_set 0 lon1 lon2 2 MOD 360 0 position posfenetre limit lat1 lon1 lat2 lon2 NOERASE noborder color 0 _extra ex if realcont NE 2 AND NOT keyword_set cont_nofill then BEGIN if chkstru ex cont_color then cntcol ex coast_color ELSE cntcol d n_colors 1 255 map_continents fill_continents color cntcol _extra ex noerase ENDIF map_continents continents color mcolor MLINETHICK mlinethick noerase _extra ex if chkstru ex NOERASE THEN ex noerase oldnoerase ENDIF V4 caption display of these legende mi ma xy CONTOUR pourlegende VECTLEGENDE vectlegende INTERVALLE intervalle DIREC direc _EXTRA ex if n_elements ex NE 0 then BEGIN To keep frame s axes in black if where tag_names ex EQ COLOR 0 NE 1 then ex COLOR coast_color endif case typetrace of classique : plot 0 0 nodata noerase color 0 xstyle 1 ystyle 1 _extra ex projection : BEGIN if chkstru ex NOERASE then begin oldnoerase ex noerase ex noerase 1 endif if chkstru ex SUBTITLE then p subtitle ex SUBTITLE if n_elements maptitre ne 0 then ex title maptitre map_set map_lat map_lon map_rot _extra ex iso limit lat1 lon1 lat2 lon2 NOERASE noborder title p title color 0 map_proj_info numproj current map_proj_info numproj name nomproj if nomproj EQ Mercator OR nomproj EQ Cylindrical OR nomproj EQ LambertConic OR nomproj EQ Gnomic OR nomproj EQ AlbersEqualAreaConic OR nomproj EQ TransverseMercator OR nomproj EQ MillerCylindrical OR nomproj EQ LambertConicEllipsoid then map_grid box_axes 1 latdel 10 londel 10 ELSE map_grid charsize 0 75 label latalign 1 lonalign 1 latdel 10 londel 30 IF n_elements labmap EQ 0 THEN labmap 1 map_grid charsize 0 75 label labmap latalign 1 lonalign 1 latdel 10 londel 30 color 0 _extra ex if chkstru ex NOERASE THEN ex noerase oldnoerase end endcase V5 Colorbar colnumb colnumb 0:ncontour 1 keyword_set strictfill barrecouleur colnumb min max ncontour keyword_set strictfill 2 position posbar _extra ex VI Possible print fini: terminedessin _extra ex sortie: if keyword_set savedbox THEN restoreboxparam boxparam4plt dat if keyword_set key_performance NE 0 THEN print temps plt systime 1 tempsun return end "); 251 a[249] = new Array("./ToBeReviewed/PLOTS/DESSINE/plt1d.html", "plt1d.pro", "", " file_comments Trace 1d graphes: x y z or t but in this case we recall directly pltt categories Graphics param TAB in required The field whose we want to make the hovmoller map can be 2 kind of thing: 1 An array which can be: 2d 3d or 4d: array xy xyz xyt or xyzt In this case the array will pass in moyenne or grossemoyenne to be averaged and becomme an array 1d 1d:Nevertheless the type must be specified in order to we know which trace it is about To have a correct caption respecify the xctraction zone via BOXZOOM 2 a structure respecting all criterions specified by litchamp pro See IDL xhelp litchamp The array contained in the structure respecting criterions of case 1 param PARAM2 in required Min value we want to consider in the contour s drawing Note: could also be the type of plot: x y z param PARAM3 in optional default min max of tab on ocean points Max value we want to consider in the contour s drawing Note: if param2 is defined as x y z then param3 is used to define the min see param2 param PARAM4 in optional default max of tab on ocean points Type of plot can be only x y z for plt1d Note: if param2 is defined as xy then param4 is used to define the max see param3 keyword BOXZOOM Vector indicating the geographique zone 3d on which the extraction of the field must be done to do the hovmoeller If BOXZOOM has : 1 element : The extraction is made on lon1 lon2 lat1 lat2 0 boxzoom 0 2 elements: The extraction is made on lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 4 elements: The extraction is made on Boxzoom vert1 vert2 5 elements: The extraction is made on Boxzoom 0:3 0 Boxzoom 4 6 elements: The extraction is made on Boxzoom Where lon1 lon2 lat1 lat2 vert1 vert2 are global variables defined at the last domdef keyword COL1d OBSOLETE Color number when we make a trace 1d by default 0 It is better to use the keyword COLOR used by plot keyword ENDPOINTS keyword specifing that we want to make a vertical cut in diagonal Then coorinated of extremities of these one are difined by the 4 elements of the vector ENDPOINTS: x1 y1 x2 y2 which are coordinates keyword MAXIN Allows to specify the max value we want to consider in the drawing of contour helping by the keyword instead of the argument max If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword MININ Allows to specify the min value we want to consider in the drawing of contour helping by the keyword instead of the argument min If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword OV1D Allow the double exposure of an 1d curve to a precedent 1d trace keyword REVERSE_X To invert the x axis so as the drawing keyword REVERSE_Y To invert the y axis so as the drawing keyword SIN Activate this keyword if we want the x axis to be traced in sinus of the latitude when we make a drawing f y keyword STY1D OBSOLETE Number of the style used when we make a 1d drawing We should better use the keyword LINESTYLE which is tho one of the plot Beware this keyword is still useful if we want to d bars instead of curves put sty1d bar keyword TYPEIN allows to specify the type of hovmoller we want to do xt yt zt t with help of a keyword rather than the argument type If the argument andthe keyword are specified in the same time it is the value specified by the keyword which is retained keyword _EXTRA used to pass your keywords history creation 24 6 99 Eric Guilyardi a partir routine pltt de Sebastien Masson 8 7 1999 Sebastien Masson smasson lodyc jussieu fr inspection des travaux finis 8 2 2000 Sebastien Masson: checkfield version Id: plt1d pro 142 2006 07 21 12:47:49Z navarro pro plt1d tab param2 param3 param4 BOXZOOM boxzoom SIN sin MININ minin MAXIN maxin TYPEIN typein ENDPOINTS endpoints COL1D col1d STY1D sty1d OV1D ov1d X x Y y Z z TT tt REVERSE_X reverse_x REVERSE_Y reverse_y SWITCHXY switchxy _extra ex include common compile_opt idl2 strictarrsubs cm_4mesh cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 pour key_performance 1st part: initialization small calculations verification of the type s value if n_elements param2 NE 0 then type param2 if n_elements param3 NE 0 then min param3 if n_elements param4 NE 0 then max param4 if n_elements minin NE 0 then min minin if n_elements maxin NE 0 then max maxin if keyword_set tt then typein t if keyword_set typein then BEGIN if size type type NE 7 AND size type type NE 0 then begin if n_elements min NE 0 then max min min type endif type typein endif checktypeminmax plt1d TYPE type MIN min MAX max ENDPOINTS endpoints XX keyword_set x YY keyword_set y ZZ keyword_set z if type EQ t then BEGIN pltt tab type min max BOXZOOM boxzoom SIN sin TYPEIN typein COL1D col1d STY1D sty1d OV1D ov1d ENDPOINTS endpoints _extra ex return endif I2 reinitialization p x y Comment: We do not reinitializate when we call back plt1d if NOT keyword_set ov1d then reinitplt I1 Reading of the field if keyword_set boxzoom OR keyword_set endpoints THEN BEGIN savedbox 1b saveboxparam boxparam4plt1d dat ENDIF if keyword_set endpoints then begin section tab z1d glam gphi ENDPOINTS endpoints TYPE type BOXZOOM boxzoom DIREC direc nx n_elements glam ny nx if strupcase vargrid EQ W then begin z gdepw firstzw:lastzw nz nzw ENDIF ELSE BEGIN z gdept firstzt:lastzt nz nzt ENDELSE ENDIF ELSE BEGIN z1d checkfield tab plt1d TYPE type BOXZOOM boxzoom direc direc _extra ex grille mask glam gphi gdep nx ny nz ENDELSE if z1d 0 EQ 1 then BEGIN IF keyword_set savedbox THEN restoreboxparam boxparam4plt1d dat return endif We build the mask For this the array must be hidden Automaticaly done at valmask value if we pass in moyenne or grossemoyenne mask fltarr n_elements z1d if n_elements valmask EQ 0 then valmask 1e20 nan total finite z1d nan 1 if keyword_set nan then begin notanum where finite z1d EQ 0 z1d notanum 0 mask where z1d LT valmask 10 1 z1d notanum values f_nan ENDIF ELSE mask where z1d LT valmask 10 1 determination of the min and of the max after the average nan total finite z1d nan 1 determineminmax z1d mask mi ma MININ min MAXIN max nan nan INTERVALLE intervalle _extra ex if z1d 0 EQ 1 THEN return if NOT keyword_set ov1d THEN placedessin autre posfenetre posbar contour contour DIREC direc endpoints endpoints _extra ex 2nd part: Drawing definition of the abscisse and ordinate vectors The triangulation is defined in order to the drawing be done from the left bottom to the right up So the matrix have to be shown like this from which some transpose and reverse case type of y : begin yy z1d IF size gphi 0 EQ 1 then xx gphi ELSE BEGIN IF keyword_set key_irregular THEN BEGIN cln where gphi EQ max gphi 0 xx reform gphi cln MOD nx ENDIF ELSE xx reform gphi 0 ENDELSE if keyword_set sin then xx sin pi 180 xx min0 lat1 max0 lat2 END x :begin yy z1d xx glam 0 min0 lon1 max0 lon2 END z :begin yy reverse gdep 1 xx reverse z1d 1 min0 0 max0 0 case n_elements boxzoom of 0: y range vert1 vert2 1: y range 0 boxzoom 2: y range boxzoom 4: y range vert1 vert2 5: y range 0 boxzoom 4 6: y range boxzoom 4:5 endcase if NOT keyword_set ov1d then y range reverse y range END ENDCASE definition of axes if keyword_set integrationtps then axe type time 0 time jpt 1 SIN sin _extra ex ELSE axe type SIN sin if NOT keyword_set ov1d then axe type SIN sin drawing if type EQ z then begin idx where xx NE valmask if NOT keyword_set ov1d then BEGIN if min EQ mi then x range min abs max min 5 max abs max min 5 ELSE x range min max ENDIF ENDIF ELSE BEGIN idx where yy NE valmask if NOT keyword_set ov1d then BEGIN if min EQ mi then y range min abs max min 5 max abs max min 5 ELSE y range min max ENDIF ENDELSE if NOT keyword_set ov1d then BEGIN legende mi ma type CONTOUR contour DIREC direc ENDPOINTS endpoints _EXTRA ex ENDIF IF keyword_set switchxy THEN BEGIN tmp xx xx yy yy temporary tmp if NOT keyword_set ov1d then BEGIN tmp x x y y temporary tmp ENDIF ENDIF if NOT keyword_set ov1d then BEGIN if keyword_set reverse_x then x range reverse x range if keyword_set reverse_y then y range reverse y range ENDIF xx xx idx yy yy idx if not keyword_set col1d then col1d 0 if keyword_set sty1d then BEGIN If we want to make bars IF strlowcase strtrim sty1d EQ bar then begin y range y range 0 y range 1 y range 0 05 y range 1 bar_plot yy background d n_colors 1 255 baselines replicate y range 0 n_elements yy barnames colors replicate col1d n_elements yy outline if n_elements ex NE 0 then BEGIN To have a black frame if where tag_names ex EQ COLOR 0 NE 1 then ex COLOR 0 ENDIF plot 0 0 noerase nodata _extra ex GOTO fini ENDIF ENDIF if NOT keyword_set ov1d then BEGIN plot xx yy color col1d linestyle sty1d thick 2 title subtitle _extra ex if n_elements ex NE 0 then BEGIN To have a 0 colored frame and trace a line at y 0 if where tag_names ex EQ COLOR 0 NE 1 then ex COLOR 0 if where tag_names ex EQ LINESTYLE 0 NE 1 then ex LINESTYLE 0 if where tag_names ex EQ THICK 0 NE 1 then ex THICK 0 ENDIF plot x range 0 0 noerase nodata xstyle 1 4 keyword_set endpoints AND type EQ x AND lat1 NE lat2 OR type EQ y AND lon1 NE lon2 ystyle 1 _extra ex Add of an axis in the case where we use endpoints if keyword_set endpoints then addaxe endpoints type posfenetre _EXTRA ex Trace a line at x 0 plot 0 0 y range noerase nodata title subtitle _extra ex ENDIF ELSE oplot xx yy color col1d linestyle sty1d thick 2 _extra ex 3rd part: Possible print fini: terminedessin _extra ex if keyword_set savedbox THEN restoreboxparam boxparam4plt1d dat if n_elements key_performance NE 0 then IF key_performance EQ 1 THEN print temps plt1d systime 1 tempsun return end "); 252 a[250] = new Array("./ToBeReviewed/PLOTS/DESSINE/pltbase.html", "pltbase.pro", "", " file_comments Overlayer contour to trace a field which can be mask Elementary brick of plt pltz et pltt categories graphic param Z2D in required The table to trace param X in required Axis Vector or array of the same size that z2d This is the coordinate of z2d on x param Y in required Axis Vector or array of the same size that z2d This is the coordinate of z2d on y param MASK in required It is the array who mask z2d with 0s on points we want to mask and 1s on others If z2d is not masked put this argument equal to 1 param XM in required Axis of the mask Vector or array of the same size that mask This is the coordinate of mask on x param YM in required Axis of the mask Vector or array of the same size that mask This is the coordinate of mask on y param LEVELS in optional Vectors which contain levels needed at the contour If it is not given we take 20 levels between the min and the max param COLORS in optional Vectors which contain colors needed at the contour If it is not given we take 20 levels between the min and the max keyword COLORTRICHAMP The color we want to use to draw the triangulation which is used to make contours of the field keyword COLORTRIMASK The color we want to use to draw the triangulation which is used to make contours of the mask keyword COLOR_C To draw the contour in color instead of in black with filling in color keyword CONT_NOFILL Activate it not to fill the point mask to let them transparent Comment: Nevertheless we trace mask s contour keyword CONT_COLOR The color of the continent defaut value is d n_colors 1 white keyword DESSTRICHAMP To draw the triangulation which is used to make field s contours keyword DESSTRIMASK To draw the triangulation which is used to make mask s contours keyword FORPLT To activate if we want that the drawing of coast be realized by tracecote rather than tracemask keyword I_COLORS It is a vector specifing the colors to use to trace contours It is the same thing that c_colors which act on contours keyword MORE Number to give to avoid style s bugs: Out of range subscript encountered: Execution halted at: PLTBASE 151 By default more 10 If the bug still exist increase the value of more The explanation and the justification of this method do not have scientific bases yet keyword NOFILL To make just isolines keyword NOCONTOUR To make just colors keyword UNSUR2 To trace one isoline on two keyword UNLABSUR Is an integer n specifying we only label one contour on two keyword CONTOUR To be used since plt pltz or pltt Have a look on these routines keyword _EXTRA Used to pass your keywords uses common pro restrictions In the case of z2d x and y are arrays of same size we hate to put them as vectors: z2d x y history Sebastien Masson smasson lodyc jussieu fr 8 2 2000 check if the tri array is not equal to 1 allow contour with out using a triangulation version Id: pltbase pro 142 2006 07 21 12:47:49Z navarro todo seb L 172 173 PRO pltbase z2d x y mask xm ym levels colors UNSUR2 unsur2 CONTOUR contour NOCONTOUR nocontour NOFILL nofill TRICHAMP trichamp TRIMSK trimsk REALCONT realcont NAN nan usetri usetri COLORTRICHAMP colortrichamp COLORTRIMASK colortrimask COLORTRINAN colortrinan COLORPOINTS colorpoints DRAWPOINTS drawpoints TH_TRICHAMP th_trichamp TH_TRIMASK th_trimask DESSTRICHAMP desstrichamp DESSTRIMASK desstrimask DESSTRINAN desstrinan COLOR_C color_c I_COLORS i_colors CONT_COLOR CONT_COLOR CONT_NOFILL cont_nofill UNLABSUR unlabsur COINMONTEMASK coinmontemask COINDESCENDMASK coindescendmask COINMONTENAN coinmontenan COINDESCENDNAN coindescendnan INDICEZOOMMASK indicezoommask INDICEZOOMNAN indicezoomnan MASKNAN masknan TRINAN trinan FORPLT forplt REALSECTION realsection MORE more EXCHANGE_XY exchange_xy _EXTRA ex compile_opt idl2 strictarrsubs cm_4mesh IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF Explanation concerning contour This keyword is activated when we trace a colored contour different from the one with black trait If it is activated case n_elements contour NE 0 we pass 2 time in pltbase: 1 We trace colors then we leave it is the case: n_elements contour NE 0 AND n_elements contour NE 4 2 We trace contours in traits then continents it is the case: n_elements contour NE 0 AND n_elements contour EQ 4 tempsun systime 1 To key_performance if n_elements mask EQ 0 then mask 1b if n_elements masknan EQ 0 then masknan 1b IF total mask EQ n_elements z2d THEN mask 1b If levels and colors aren t given if n_params EQ 4 then label 0 min z2d mask max z2d mask ncontour levels colors attention bidouille inexplicable pour que tout se passe bien avec les postcript ds pltz if n_elements contour LE 4 AND x type EQ 0 THEN plot 0 0 xstyle 5 ystyle 5 nodata noerase title subtitle Is cell_fill is a part of _extra we desactive it if it is nt equal to 2 IF chkstru ex CELL_FILL THEN BEGIN cell_fill ex CELL_FILL if ex CELL_FILL NE 2 then ex CELL_FILL 0 ENDIF ELSE cell_fill 0 I Filling of contours in palette colors if NOT keyword_set more then more 10 if NOT keyword_set nofill AND NOT keyword_set color_c then begin if n_elements contour NE 4 THEN BEGIN if usetri EQ 2 then BEGIN IF size x n_dimensions EQ 1 THEN x x replicate 1 size z2d 2 IF size y n_dimensions EQ 1 THEN y replicate 1 size z2d 1 y contour z2d fltarr more x fltarr more y fltarr more levels levels c_color colors noerase fill TRIANGULATION trichamp _extra ex ENDIF ELSE BEGIN IF size x n_dimensions EQ 2 THEN x x 0 IF size y n_dimensions EQ 2 THEN y reform y 0 contour z2d x y levels levels c_color colors noerase fill _extra ex ENDELSE ENDIF ENDIF if n_elements contour NE 0 AND n_elements contour NE 4 THEN GOTO fini IF chkstru ex C_ORIENTATION THEN ex extractstru ex C_ORIENTATION IF chkstru ex C_SPACING THEN ex extractstru ex C_SPACING IF chkstru ex C_COLORS THEN ex extractstru ex C_COLORS II Drawing of contours in traits if n_elements contour EQ 4 OR n_elements contour EQ 0 THEN BEGIN we put the masked values to NaN IF n_elements mask GT 1 OR n_elements masknan GT 1 AND NOT keyword_set cont_nofill THEN BEGIN tonan where mask masknan EQ 0 count tonan where remplit mask masknan nite 1 mask mask masknan basique fillval 0 fillxdir keyword_set realsection EQ 0 count IF count NE 0 THEN z2d temporary tonan values f_nan ENDIF We do not pass if we have to make differents contours In the case of unsur2 is activated we reduce levels if NOT keyword_set nocontour then begin IF keyword_set unsur2 THEN levels levels where zeroun n_elements levels eq 1 Is unlabsur activated Does C_LABEL passed via _EXTRA if keyword_set unlabsur THEN IF chkstru ex C_LABELS THEN ex C_LABELS 1 indgen n_elements ex C_LABELS MOD unlabsur 1 Not to fill when cell_fill is imposed IF chkstru ex CELL_FILL THEN ex CELL_FILL 0 CASE 1 OF keyword_set color_c :c_colors colors keyword_set i_colors :c_colors i_colors ELSE: ENDCASE IF usetri EQ 2 THEN BEGIN IF size x n_dimensions EQ 1 THEN x x replicate 1 size z2d 2 IF size y n_dimensions EQ 1 THEN y replicate 1 size z2d 1 y contour z2d fltarr more x fltarr more y fltarr more levels levels overplot 1 keyword_set nofill noerase keyword_set nofill c_colors c_colors TRIANGULATION trichamp _extra ex ENDIF ELSE BEGIN IF size x n_dimensions EQ 2 THEN x x 0 IF size y n_dimensions EQ 2 THEN y reform y 0 contour z2d x y levels levels overplot 1 keyword_set nofill noerase keyword_set nofill c_colors c_colors _extra ex ENDELSE ENDIF III Filling of colored continents IF chkstru ex CELL_FILL THEN ex CELL_FILL cell_fill 1 IF chkstru ex LEVELS THEN ex extractstru ex LEVELS IF chkstru ex NODATA THEN ex extractstru ex NODATA IF NOT keyword_set cont_color THEN cont_color d n_colors 1 255 If there is points at NaN We trace points in white at NaN bafore drawing coasts with a trait if keyword_set trinan THEN BEGIN IF size x n_dimensions EQ 1 THEN x x replicate 1 size masknan 2 IF size y n_dimensions EQ 1 THEN y replicate 1 size masknan 1 y contour 1b masknan fltarr more x fltarr more y fltarr more levels 0 5 overplot fill c_colors cont_color TRIANGULATION trinan _extra ex IF keyword_set forplt THEN completecointerre COINMONTE coinmontenan COINDESCEND coindescendnan INDICEZOOM indicezoomnan CONT_COLOR cont_color _EXTRA ex ELSE fillcornermask x 0 y 0 COINMONTE coinmontenan COINDESCEND coindescendnan CONT_COLOR cont_color _extra ex ENDIF Filling of continents if keyword_set realcont then if realcont EQ 1 then mask 1b if n_elements mask NE 1 then BEGIN If mask 1 we gap it if NOT keyword_set cont_nofill then BEGIN mask filling case 1 of keyword_set realsection :drawsectionbottom mask xm ym CONT_NOFILL cont_nofill CONT_COLOR cont_color _EXTRA ex usetri GE 1:BEGIN if n_elements trimsk eq 0 then trimsk trichamp IF size xm N_DIMENSIONS EQ 1 THEN xm xm replicate 1 size mask 2 IF size ym N_DIMENSIONS EQ 1 THEN ym replicate 1 size mask 1 ym contour 1b mask fltarr more xm fltarr more ym fltarr more LEVELS 0 5 OVERPLOT FILL C_COLORS cont_color TRIANGULATION trimsk _extra ex IF keyword_set forplt THEN completecointerre COINMONTE coinmontemask COINDESCEND coindescendmask INDICEZOOM indicezoommask CONT_COLOR cont_color _EXTRA ex ELSE fillcornermask xm 0 ym 0 COINMONTE coinmontemask COINDESCEND coindescendmask CONT_COLOR cont_color _extra ex END ELSE:BEGIN IF size xm n_dimensions EQ 2 THEN xm xm 0 IF size ym n_dimensions EQ 2 THEN ym reform ym 0 contour 1b mask xm ym LEVELS 0 5 OVERPLOT FILL C_COLORS cont_color _EXTRA ex END ENDCASE ENDIF NOT keyword_set cont_nofill IV Trace coast in traits case 1 of keyword_set realsection AND NOT keyword_set cont_nofill : keyword_set realsection AND keyword_set cont_nofill : drawsectionbottom mask xm ym CONT_NOFILL cont_nofill _extra ex keyword_set forplt AND map projection GT 0 OR key_irregular OR keyword_set nan :tracecote _extra ex ELSE:tracemask mask xm ym _extra ex endcase ENDIF n_elements mask NE 1 ENDIF draw the triangulations if keyword_set desstrichamp then dessinetri trichamp x y color colortrichamp thick th_trichamp if keyword_set desstrimask then dessinetri trimsk xm ym color colortrimask thick th_trimask if keyword_set desstrinan then dessinetri trinan x y color colortrinan if keyword_set drawpoints then tracegrille x y color colorpoints fini: IF keyword_set key_performance THEN print temps pltbase systime 1 tempsun return end"); 253 253 a[251] = new Array("./ToBeReviewed/PLOTS/DESSINE/pltsc.html", "pltsc.pro", "", " todo seb PRO pltsc tab1 tab2 min1 max1 min2 max2 varname2 BOXZOOM boxzoom COL1D col1d STY1D sty1d OV1D ov1d _extra ex scatter plot inspired from plt1d compile_opt idl2 strictarrsubs include common cm_4mesh cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF Comment: We do not reinitializate when we call back pltsc if NOT keyword_set ov1d then reinitplt reduce data xyzt domain if keyword_set boxzoom then BEGIN Case 1 Of N_Elements Boxzoom Eq 1:bte lon1 lon2 lat1 lat2 0 boxzoom 0 N_Elements Boxzoom Eq 2:bte lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 N_Elements Boxzoom Eq 4:bte Boxzoom vert1 vert2 N_Elements Boxzoom Eq 5:bte Boxzoom 0:3 0 Boxzoom 4 N_Elements Boxzoom Eq 6:bte Boxzoom Else: Begin ras report Wrong Definition of Boxzoom return End endcase savedbox 1b saveboxparam boxparam4pltsc dat domdef bte GRIDTYPE vargrid ENDIF extract indexes to plot indexm where tab1 LE valmask 10 tab1 tab1 indexm tab2 tab2 indexm npts size indexm 1 deal with min and max of plot IF finite min1 EQ 0 THEN min1 min tab1 IF finite max1 EQ 0 THEN max1 max tab1 IF finite min2 EQ 0 THEN min2 min tab2 IF finite max2 EQ 0 THEN max2 max tab2 init plot if not overlay IF NOT keyword_set ov1d THEN placedessin yfx posfenetre posbar contour contour _extra ex yy tab1 xx tab2 axis range x range min2 abs max2 min2 5 max2 abs max2 min2 5 y range min1 abs max1 min1 5 max1 abs max1 min1 5 IF NOT keyword_set sty1d THEN sty1d 0 IF NOT keyword_set col1d THEN col1d 0 IF NOT keyword_set ov1d THEN BEGIN legende min1 max1 yfx VARNAME2 varname2 NPTS npts _EXTRA ex plot xx yy background 255 psym sty1d 1 color col1d thick 2 title subtitle _extra ex if n_elements ex NE 0 then BEGIN To have a 0 colored frame and trace a line at y 0 if where tag_names ex EQ COLOR 0 NE 1 then ex COLOR 0 if where tag_names ex EQ LINESTYLE 0 NE 1 then ex LINESTYLE 0 ENDIF plot x range 0 0 noerase nodata xstyle 1 ystyle 1 _extra ex trace a line at x 0 plot 0 0 y range noerase nodata title subtitle _extra ex ENDIF ELSE oplot xx yy color col1d linestyle sty1d thick 2 _extra ex 3rd part: Possible print fini: terminedessin _extra ex if keyword_set savedbox THEN restoreboxparam boxparam4pltsc dat if n_elements key_performance NE 0 then IF key_performance EQ 1 THEN print temps plt1d systime 1 tempsun return end "); 254 a[252] = new Array("./ToBeReviewed/PLOTS/DESSINE/pltt.html", "pltt.pro", "", " file_comments Trace hovmoller graphs: xt yt zt t categories Graphics param TAB in required The field whose we want to make the hovmoller map can be 2 kind of thing: 1 An array which can be: 3d or 4d: array xt yt zt t The last component is the time In this case the array will pass in grossemoyenne to be averaged and become an 1d or 2d array 2d: If the array is already 2d it is not modified beware lands must be masked at the value valmask and nevertheless type must be specified to we know of which trace it is about To have a correct caption respecify the xctraction zone via BOXZOOM 1d: only for traces of the t type Nevertheless type must be specified to we know of which trace it is about To have a correct caption respecify the xctraction zone via BOXZOOM 2 a structure respecting all criterions specified by litchamp pro See IDL xhelp litchamp The array contained in the structure respecting criterions of case 1 PARAM: MAX: valeur maximum que l on veut prendre en compte dans le trace des contours Par defaut on prend le max de tableau sur les pts mer MIN: valeur minimum que l on veut prendre en compte dans le trace des contours Par defaut on prend le min de tableau sur les pts mer DATMIN: c est la borne inf de l axe temporel c est un longinteger de la forme yyyymmdd ou bien yymmdd DATMAX: c est la borne max de l axe temporel c est un longinteger de la forme yyyymmdd ou bien yymmdd keyword BOXZOOM Vector indicating the geographique zone 3d on which the extraction of the field must be done to do the hovmoeller If BOXZOOM has : 1 element : The extraction is made on lon1 lon2 lat1 lat2 0 boxzoom 0 2 elements: The extraction is made on lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 4 elements: The extraction is made on Boxzoom vert1 vert2 5 elements: The extraction is made on Boxzoom 0:3 0 Boxzoom 4 6 elements: The extraction is made on Boxzoom Where lon1 lon2 lat1 lat2 vert1 vert2 are global variables defined at the last domdef keyword CONTINTERVALLE When CONTOUR is activated it is the value between 2 isolines traced by a trait So it can be different from the one specified by INTERVALLE which in this case does not control colored isolines in color anymore If there is noone specified min we choose a contour min which goes well with the specified interval If this keyword is not specified we trace 20 isolines from the min to the max keyword CONTLABEL It is an integer n When CONTOUR is actvated if n is different of 0 choose the label type corresponding to n cases for the traced by a traitisolines To specify the type of label of the colored contour use LABEL keyword CONTMAX When CONTOUR is activated max value we want to consider in the isoline traced by a trait s line By default we take the max on ocean points of the array passed in the keyword CONTOUR keyword CONTMIN When CONTOUR is activated min value we want to consider in the isoline traced by a trait s line By default we take the min on ocean points of the array passed in the keyword CONTOUR keyword CONTNLEVEL When CONTOUR is activated it is the numbre of contours traced by a trait for drawing active if CONTLABEL 0 by default 20 keyword CONTOUR If we want to trace contours of a different field than the one whose we have the colored drawing by examlpe E P in color and QSR in contours It must be a field respecting same caracteristics than the argument number one of pltt keyword ENDPOINTS keyword specifing that we want to make a vertical cut in diagonal Then coorinated of extremities of these one are difined by the 4 elements of the vector ENDPOINTS: x1 y1 x2 y2 which are coordinates keyword EXCHANGE_XY Allows to invert axes keyword FILTER Apply a slippery average of width FILTER keyword INTERVALLE Value of an internal between to isoline If there is none specified min we choose a min contour which goes well with the specified interval If this keyword is not specified we trace 20 isoline from the min to the max Comment: When CONTOUR is activated INTERVALLE only specify the interval between 2 colored isoline To specify the interval between 2 isolines traced by a trait use CONTINTERVALLE keyword INV Invert the color vector used to color the graph without use the black the white and the used palette keyword LABEL It is an integer n If n different of 0 it choose the label s type corresponding to cases n cf label pro Comment: When CONTOUR is activated it only specify the label s type for colored isolines For tese one traced by a trait use CONTLABEL keyword COL1d OBSOLETE Color number when we make a trace 1d by default 0 It is better to use the keyword COLOR used by plot keyword MAXIN Allows to specify the max value we want to consider in the drawing of contour helping by the keyword instead of the argument max If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword MININ Allows to specify the min value we want to consider in the drawing of contour helping by the keyword instead of the argument min If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword NLEVEL Number of contour to draw by default 20 active if LABEL 0 or is not specified keyword CONTNLEVEL When CONTOUR is activated it is the numbre of contours traced by a trait for drawing active if CONTLABEL 0 by default 20 keyword OV1D Allows to overprint a 1d curve over a precedent 1d drawing keyword OVERPLOT To make a plot over an other one Comment: Contrarily to the use of CONTOUR or VECTEUR the use of this keyword does not the caption and or the color bar keyword STRICTFILL Activate this keyword to that the filling of contours be precisely done between the min and the max specified letting values inferior at the specified min and values superior at the specified max in white keyword STYLE Contour s style to adopt to draw isolines by default style 0 see style pro keyword STY1D OBSOLETE Number of the style used when we make a 1d drawing We should better use the keyword LINESTYLE which is tho one of the plot Beware this keyword is still useful if we want to d bars instead of curves put sty1d bar keyword TREND_TYPE Modify field by calling trends pro keyword TYPEIN allows to specify the type of hovmoller we want to do xt yt zt t with help of a keyword rather than the argument type If the argument andthe keyword are specified in the same time it is the value specified by the keyword which is retained uses common pro history Sebastien Masson smasson lodyc jussieu fr 27 5 98 Jerome Vialard adapting plt to hovmoller drawing 2 7 98 Sebastien Masson 14 8 98 continents barres 15 1 98 Adaptation for arrays 3 and 4d to the average be done in pltt rather than during the reading Sebastien Masson 14 8 98 7 1999 Eric Guilyardi 29 7 99 FILTER TREND_TYPE REPEAT_C Sebastien Masson 08 02 2000 checkfield and usetri keyword version Id todo seb: L 24 36 L 426 427 L 492 493 pro pltt tab giventype givenmin givenmax datmin datmax BOXZOOM boxzoom CONTOUR contour ENDPOINTS endpoints INTERVALLE intervalle INV inv CONTINTERVALLE contintervalle LABEL label CONTLABEL contlabel STYLE style CONTMAX contmax CONTMIN contmin NLEVEL nlevel CONTNLEVEL contnlevel COL1D col1d STY1D sty1d MININ minin MAXIN maxin OV1D ov1d FILTER filter TREND_TYPE trend_type REPEAT_C repeat_c TYPEIN typein XT XT YT YT ZT zt TT tt STRICTFILL strictfill OVERPLOT overplot EXCHANGE_XY exchange_xy _extra ex include common compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 For key_performance I2 reinitialization p x y Comment: we do not reinitializate when we call back plt in loop to use contour if n_elements contour ne 4 AND NOT keyword_set overplot AND NOT keyword_set ov1d then reinitplt I1 Reading of the field if keyword_set boxzoom OR keyword_set endpoints AND n_elements contour ne 4 THEN BEGIN savedbox 1b saveboxparam boxparam4pltt dat ENDIF if n_elements giventype NE 0 then type giventype if n_elements givenmin NE 0 then min givenmin if n_elements givenmax NE 0 then max givenmax if n_elements minin NE 0 then min minin if n_elements maxin NE 0 then max maxin if keyword_set typein then BEGIN if size type type NE 7 AND size type type NE 0 then begin if n_elements min NE 0 then max min min type endif type typein ENDIF checktypeminmax pltt TYPE type MIN min MAX max XT XT YT YT ZT zt TT tt ENDPOINTS endpoints _extra ex if keyword_set endpoints then begin section tab z2d glam gphi ENDPOINTS endpoints TYPE type BOXZOOM boxzoom DIREC direc nx n_elements glam ny nx if strupcase vargrid EQ W then begin z gdepw firstzw:lastzw nz nzw ENDIF ELSE BEGIN z gdept firstzt:lastzt nz nzt ENDELSE ENDIF ELSE BEGIN z2d checkfield tab pltt TYPE type BOXZOOM boxzoom direc direc _extra ex if z2d 0 EQ 1 then BEGIN IF keyword_set savedbox THEN restoreboxparam boxparam4pltt dat return endif grille mask glam gphi gdep nx ny nz ENDELSE Calculation of trend anomaly following TREND_TYPE IF NOT keyword_set trend_type THEN trend_type 0 IF trend_type GT 0 THEN z2d trends z2d trend_type type Filtering of fields in the t case IF type EQ t AND keyword_set filter THEN BEGIN print Applying a running mean filter of width string filter format I3 z2d smooth z2d filter z2d 0:filter 2 1 0 z2d size z2d 1 filter 2 1: size z2d 1 1 0 ENDIF Repetition of the temporal series IF NOT keyword_set repeat_c THEN repeat_c 1 temps time 0:jpt 1 IF repeat_c GT 1 THEN BEGIN taille size z2d CASE taille 0 OF 1: z2d reform z2d replicate 1 repeat_c taille 1 repeat_c 2: BEGIN z2d z2d replicate 1 repeat_c z2d reform z2d taille 1 taille 2 repeat_c over END ELSE: ENDCASE temps temps lindgen jpt REPEAT_c 1 1 temps 1 temps 0 temps jpt 1 ENDIF Selection of graphic s type taille size z2d case taille 0 of 2 : typdes 2d 1 : begin z1d z2d typdes 1d if keyword_set OV1D then begin yy z2d if n_elements datmin NE 0 then tempsmin date2jul datmin ELSE tempsmin temps 0 on shift l axe du temps pour des questions de precision sur les dates du calendier julien en long qui sont passes en float ds les axes xx temps tempsmin x range x range tempsmin x tickv x tickv tempsmin We do a false plot to apply these changes plot 0 0 noerase xstyle 5 ystyle 5 title subtitle ytitle xtitle goto trace1d endif end endcase We build the mask For that the table must be masked automaticaly done at the value valmask if we pass in moyenne or grossemoyenne nan total finite z2d nan z2d not very nice when xgridstyle 2 same if xticklen 0 5 not very nice in the middle so we draw the top right axis by hand using axis if n_elements ex NE 0 then BEGIN pour avoir un cadre de la couleur noire if where tag_names ex EQ COLOR 0 NE 1 then ex COLOR 0 ENDIF plot 0 0 nodata noerase _extra ex xstyle 1 4 keyword_set endpoints AND type EQ xt AND lat1 NE lat2 8 type EQ yt OR type EQ zt ystyle 1 4 keyword_set endpoints AND type EQ yt 8 type EQ xt call axis for the missing axis IF type EQ xt AND NOT keyword_set endpoints THEN BEGIN if n_elements ex NE 0 then if where tag_names ex EQ YTICKNAME 0 NE 1 then ex YTICKNAME replicate n_elements ex YTICKNAME axis yaxis 1 ystyle 1 yticklen 0 ytickname replicate y ticks 1 _extra ex ENDIF IF type EQ yt OR type EQ zt AND NOT keyword_set endpoints THEN BEGIN if n_elements ex NE 0 then if where tag_names ex EQ XTICKNAME 0 NE 1 then ex XTICKNAME replicate n_elements ex XTICKNAME axis xaxis 1 xstyle 1 xticklen 0 xtickname replicate x ticks 1 _extra ex ENDIF ajout d un axe ds le cas ou l on utilise endpoints if keyword_set endpoints then addaxe endpoints type posfenetre _EXTRA ex color bar colnumb colnumb 0:ncontour 1 keyword_set strictfill barrecouleur colnumb min max ncontour keyword_set strictfill 2 position posbar _extra ex endif 1d trace1d: if typdes eq 1d then begin if not keyword_set col1d then col1d 0 if keyword_set sty1d then BEGIN if we want to make bars IF strlowcase strtrim sty1d EQ bar then begin y range y range 0 y range 1 y range 0 05 y range 1 bar_plot yy background d n_colors 1 not very nice when xgridstyle 2 same if xticklen 0 5 not very nice in the middle so we draw the top axis by hand using axis if n_elements ex NE 0 then BEGIN To have a black frame if where tag_names ex EQ COLOR 0 NE 1 then ex COLOR 0 ENDIF plot 0 0 nodata noerase xstyle 1 8 1 keyword_set exchange_xy ystyle 1 8 keyword_set exchange_xy _extra ex call axis for the missing axis if n_elements ex NE 0 then BEGIN force tickname to blank array if where tag_names ex EQ YTICKNAME 0 NE 1 AND keyword_set exchange_xy then ex YTICKNAME replicate n_elements ex YTICKNAME if where tag_names ex EQ XTICKNAME 0 NE 1 AND NOT keyword_set exchange_xy then ex XTICKNAME replicate n_elements ex XTICKNAME ENDIF if keyword_set exchange_xy then axis yaxis 1 ystyle 1 yticklen 0 ytickname replicate y ticks 1 _extra ex ELSE axis xaxis 1 xstyle 1 xticklen 0 xtickname replicate x ticks 1 _extra ex ENDIF ELSE oplot xx yy color col1d linestyle sty1d thick 2 _extra ex endif fini: we reput time axis in IDL julian days and not in julian days count from tempsmin if type EQ xt then BEGIN y range y range tempsmin y tickv y tickv tempsmin ENDIF ELSE BEGIN x range x range tempsmin x tickv x tickv tempsmin ENDELSE We do a false plot to these values are considerated plot 0 0 nodata noerase xstyle 5 ystyle 5 title subtitle ytitle xtitle 3rd part: possible print terminedessin _extra ex if keyword_set savedbox THEN restoreboxparam boxparam4pltt dat if n_elements key_performance NE 0 then IF key_performance EQ 1 THEN print temps pltt systime 1 tempsun return end ");255 a[253] = new Array("./ToBeReviewed/PLOTS/DESSINE/pltz.html", "pltz.pro", "", " file_comments Trace vertical graphs categories Graphics param TAB The field whose we want to make a vertical cut can be 2 kind of thing: 1 An 2d or 3d array If the field is 2d indicate with the keyword BOXZOOM geographic delineations of the boxzoom If the field is 3d we extract the section on we average possibly before to do the plot 2 a structure respecting all criterions specified by litchamp pro See IDL xhelp litchamp The array contin in the structure must be 2 or 3d See case 1 ces arguments ne sont pas obligatoires: MAX: valeur maximum que l on veut prendre en compte dans le trace des contours Par defaut on prend le max de tab1 sur les pts mer MIN: valeur minimum que l on veut prendre en compte dans le trace des contours Par defaut on prend le min de tab1 sur les pts mer keyword BOXZOOM Vector indicating the geographic zone on which we want to cut the map If BOXZOOM has : 1 element : The extraction is made on lon1 lon2 lat1 lat2 0 boxzoom 0 2 elements: The extraction is made on lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 4 elements: The extraction is made on Boxzoom 0 max gdept gdepw 5 elements: The extraction is made on Boxzoom 0:3 0 Boxzoom 4 6 elements: The extraction is made on Boxzoom Where lon1 lon2 lat1 lat2 are global variables defined at the last domdef keyword CONTINTERVALLE When CONTOUR is activated it is the value between 2 isolines traced by a trait So it can be different from the one specified by INTERVALLE which in this case does not control colored isolines in color anymore If there is noone specified min we choose a contour min which goes well with the specified interval If this keyword is not specified we trace 20 isolines from the min to the max keyword CONTLABEL It is an integer n When CONTOUR is actvated if n is different of 0 choose the label type corresponding to n cases for the traced by a traitisolines To specify the type of label of the colored contour use LABEL keyword CONTMAX When CONTOUR is activated max value we want to consider in the isoline traced by a trait s line By default we take the max on ocean points of the array passed in the keyword CONTOUR keyword CONTMIN When CONTOUR is activated min value we want to consider in the isoline traced by a trait s line By default we take the min on ocean points of the array passed in the keyword CONTOUR keyword CONTNLEVEL When CONTOUR is activated it is the numbre of contours traced by a trait for drawing active if CONTLABEL 0 by default 20 keyword CONTOUR If we want to trace contours of a different field than the one whose we have the colored drawing by examlpe E P in color and QSR in contours It must be a field respecting same caracteristics than the argument number one of plt keyword ENDPOINTS keyword specifing that we want to make a vertical cut in diagonal Then coorinated of extremities of these one are difined by the 4 elements of the vector ENDPOINTS: x1 y1 x2 y2 which are coordinates keyword INTERVALLE Value of an internal between to isoline If there is none specified min we choose a min contour which goes well with the specified interval If this keyword is not specified we trace 20 isoline from the min to the max Comment: When CONTOUR is activated INTERVALLE only specify the interval between 2 colored isoline To specify the interval between 2 isolines traced by a trait use CONTINTERVALLE keyword INV Invert the color vector used to color the graph without use the black the white and the used palette keyword ZRATIO When the drawing has a zoomed part it is the size rapport between the zoomed part hz zoom height and the whole drawing ht total height By default 2 3 keyword LABEL It is an integer n If n different of 0 it choose the label s type corresponding to cases n cf label pro Comment: When CONTOUR is activated it only specify the label s type for colored isolines For tese one traced by a trait use CONTLABEL keyword MAXIN Allows to specify the max value we want to consider in the drawing of contour helping by the keyword instead of the argument max If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword MININ Allows to specify the min value we want to consider in the drawing of contour helping by the keyword instead of the argument min If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword NLEVEL Number of contour to draw by default 20 active if LABEL 0 or is not specified keyword NOTRI To force not to use the triangulation Beware in this case the drawing only works if the grid is undeformed It means that each point of a longitude give one latitude and each point of a latitude give one longitude exept if we use the keyword CELL_FILL 2 Comment: if the field contain points values f_nan then we even do a triangulation keyword OVERPLOT To make a plot over an other one Comment: Contrarily to the use of CONTOUR or VECTEUR the use of this keyword does not the caption and or the color bar keyword SIN Activate this keyword if we want the x axis to be traced in sinus of the latitude when we make a drawing f y keyword STRICTFILL Activate this keyword to that the filling of contours be precisely done between the min and the max specified letting values inferior at the specified min and values superior at the specified max in white keyword STYLE Contour s style to adopt to draw isolines by default style 0 see style pro keyword WDEPTH To specify that the field is at W depth instead of T depth automatically activated if vargrid eq W keyword XZ Force to make a cut following xz keyword YZ Force to make a cut following yz keyword ZOOM Depth where i can make our maximum zoom By default 200m or max depth if it is inferior at 200m uses common pro history Sebastien Masson smasson lodyc jussieu fr 7 1999 Sebastien Masson 08 02 2000 checkfield and notri keyword version Id todo seb L 20 26 L 215 221 pro pltz tab giventype givenmin givenmax BOXZOOM boxzoom CONTOUR contour ENDPOINTS endpoints INTERVALLE intervalle INV inv ZRATIO zratio CONTINTERVALLE contintervalle LABEL label CONTLABEL contlabel STYLE style CONTMAX contmax SIN sin TYPEIN typein CONTMIN contmin NLEVEL nlevel CONTNLEVEL contnlevel NOTRI notri USETRI usetri FILLXDIR fillxdir ZOOM zoom XZ xz YZ yz MININ minin MAXIN maxin STRICTFILL strictfill OVERPLOT overplot MASKFILL maskfill WDEPTH wdepth REALSECTION realsection _EXTRA ex include common compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4ps IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 For key_performance 1st part: initialization small calculations Comment: we do not reinitializate when we call back plt in loop to use contour if n_elements contour ne 4 AND NOT keyword_set overplot then reinitplt if n_elements contour ne 4 THEN saveboxparam boxparam4pltz dat Reading of the field if n_elements giventype NE 0 then type giventype if n_elements givenmin NE 0 then min givenmin if n_elements givenmax NE 0 then max givenmax if n_elements minin NE 0 then min minin if n_elements maxin NE 0 then max maxin if n_elements realsection EQ 0 then realsection 1 IF n_elements usetri EQ 0 THEN BEGIN IF n_elements notri NE 0 THEN usetri 2 notri ELSE usetri 1 ENDIF no need of triangulation IF usetri EQ 1 AND keyword_set realsection THEN usetri 0 did we specify the type if keyword_set typein then BEGIN if size type type NE 7 AND size type type NE 0 then begin if n_elements min NE 0 then max min min type endif type typein ENDIF checktypeminmax pltz TYPE type MIN min MAX max XZ xz YZ yz ENDPOINTS endpoints _extra ex if keyword_set endpoints then begin section tab z2d glam gphi ENDPOINTS endpoints TYPE type BOXZOOM boxzoom DIREC direc WDEPTH wdepth _extra ex if z2d 0 EQ 1 AND n_elements contour ne 4 then BEGIN restoreboxparam boxparam4pltz dat return ENDIF nx n_elements glam ny nx if strupcase vargrid EQ W then begin gdep gdepw firstzw:lastzw nz nzw ENDIF ELSE BEGIN gdep gdept firstzt:lastzt nz nzt ENDELSE mask z2d LE valmask 10 ENDIF ELSE BEGIN z2d checkfield tab pltz TYPE type BOXZOOM boxzoom DIREC direc WDEPTH wdepth _extra ex if z2d 0 EQ 1 AND n_elements contour ne 4 then BEGIN restoreboxparam boxparam4pltz dat return ENDIF IF realsection EQ 1 THEN grille mask glam gphi gdep nx ny nz ifpltz type WDEPTH wdepth ELSE grille mask glam gphi gdep nx ny nz WDEPTH wdepth ENDELSE stop profmax y range 0 profmin y range 1 if not keyword_set zoom then zoom 200 zoom zoom 0 IF zoom LT profmin THEN zoom profmax if zoom GE vert2 then zoom profmax construction of the mask and of the axis axis4pltz type mask glam gphi gdep XXAXIS xxaxis ZZAXIS zzaxis SIN sin ZRATIO zratio ZOOM zoom PROFMAX profmax PROFMIN profmin _extra ex to draw from bottom to top avoid using cell_fill z2d reverse z2d 2 Determination of the mi:min and of the ma:max of z2d in the same way as max: max and min: min for the drawing nan total finite z2d nan z2d max if n_elements maskfill NE 0 then BEGIN z2d z2d mask masknan if maskfill NE 0 then z2d temporary z2d maskfill 1b mask masknan ENDIF check the mask and the triangulation according to the grid type and nan values find the coordinates of the mask if where mask EQ 0 0 EQ 1 AND NOT keyword_set nan then notri 1 if keyword_set notri then trifield 1 ELSE trifield triangule mask basic if usetri GE 1 AND vargrid EQ T OR vargrid EQ W OR usetri EQ 2 AND vargrid NE T AND vargrid NE W THEN trifield triangule mask basic IF NOT keyword_set endpoints THEN BEGIN if keyword_set nan then trinan triangule masknan basic coinmonte coinmontenan coindescend coindescendnan decoupeterre mask glammsk gphimsk gdepmsk type type WDEPTH wdepth REALSECTION realsection axis4pltz type mask glammsk gphimsk gdepmsk XXAXIS xmask ZZAXIS zmask SIN sin ZRATIO zratio ZOOM zoom PROFMAX profmax PROFMIN profmin _extra ex ENDIF ELSE BEGIN xmask xxaxis zmask zzaxis ENDELSE if usetri GE 1 AND vargrid NE T AND vargrid NE W THEN BEGIN IF keyword_set realsection THEN trimsk triangule mask basic ELSE trimsk triangule mask basic coinmonte coinmontemask coindescend coindescendmask ENDIF dessin en lui meme pltbase z2d xxaxis zzaxis mask xmask zmask level_z2d colnumb overplot overplot contour contour trichamp trifield trimsk trimsk c_linestyle linestyle c_labels 1 indgen n_elements level_z2d MOD 2 c_thick thick unsur2 unsur2 masknan masknan trinan trinan coinmontenan coinmontenan coindescendnan coindescendnan coinmontemask coinmontemask coindescendmask coindescendmask REALSECTION realsection USETRI usetri _extra ex recall of pltz in loop when contour is activated if n_elements contour eq 4 then BEGIN It is the second time I pass in pltt contour mietma: mi ma unit:varunit inter:intervalle I send back the min the max and the unity return endif if keyword_set contour THEN BEGIN pourlegende 1 1 1 1 oldattributs saveatt oldcolnumb colnumb pltz contour contmin contmax CONTOUR pourlegende ZRATIO zratio INTERVALLE contintervalle LABEL contlabel STYLE style noerase NLEVEL contnlevel ZOOM zoom BOXZOOM boxzoom ENDPOINTS endpoints STRICTFILL strictfill REALSECTION realsection MASKFILL maskfill USETRI usetri WDEPTH wdepth _extra ex restoreatt oldattributs colnumb oldcolnumb ENDIF 3rd part: drawing of the frame caption colorbar if keyword_set overplot then BEGIN y range zoom profmin We get back on physic coordinates plot 0 0 nodata noerase title subtitle xstyle 5 ystyle 5 GOTO fini endif Caption dysplay of them legende mi ma type CONTOUR pourlegende INTERVALLE intervalle DIREC direc endpoints endpoints _EXTRA ex if type eq yz then xaxe lataxe else xaxe lonaxe if keyword_set sin OR NOT key_onearth then xaxe Frame applied by default plot xxaxis 0 xxaxis n_elements xxaxis 1 zratio zratio noerase xstyle 1 4 keyword_set endpoints AND type EQ xz AND lat1 NE lat2 OR type EQ yz AND lon1 NE lon2 xtickformat xaxe _extra ex Add of an axis in the case of we use endpoints if keyword_set endpoints then addaxe endpoints type posfenetre _EXTRA ex Y axis in 1 or 2 part if n_elements ex NE 0 then BEGIN To do not put title anymore if where tag_names ex EQ TITLE 0 NE 1 then ex TITLE To do not put subtitle anymore if where tag_names ex EQ SUBTITLE 0 NE 1 then ex SUBTITLE To have just one ytitle if where tag_names ex EQ YTITLE 0 NE 1 then BEGIN ytitle ex YTITLE ex YTITLE endif ENDIF htotal posfenetre 3 posfenetre 1 hzoom 1 zratio htotal if zoom LT profmax then plot 0 0 nodata noerase ystyle 1 yrange profmax zoom 0 001 position posfenetre 0 0 0 hzoom _extra ex title subtitle ytitle y range zoom profmin We get back in physic coordinates plot 0 0 nodata noerase ystyle 1 _extra ex title subtitle ytitle position posfenetre 0 htotal hzoom 0 0 to write the ytitle if d name EQ PS then xs max page_size min mi 1 key_portrait mi key_portrait d x_px_cm ELSE xs d x_size if n_elements ytitle NE 0 then y title ytitle charsize chkstru ex ycharsize extract if charsize EQ 1 then charsize p charsize IF chkstru ex charsize THEN ex charsize charsize if chkstru ex ytitle extract NE then decalage string format e10 3 profmax decalage float strmid decalage strpos decalage e 1 posy posfenetre 1 1 htotal 2 posx posfenetre 0 decalage 3 d x_ch_size charsize xs xyouts posx posy y title normal orientation 90 color 0 ALIGNMENT 5 charsize charsize _extra ex colorbar colnumb colnumb 0:ncontour 1 keyword_set strictfill barrecouleur colnumb min max ncontour keyword_set strictfill 2 position posbar _extra ex 4th part: possible print fini: terminedessin _extra ex sortie: restoreboxparam boxparam4pltz dat if keyword_set key_performance NE 0 THEN print temps pltz systime 1 tempsun return end ");256 a[254] = new Array("./ToBeReviewed/PLOTS/DESSINE/sbar_plot.html", "sbar_plot.pro", "", " file_comments Same thing that bar_plot but compatible with the whole environnement common pro inclued categories graphics INPUTS: cd IDL bar_plot keyword COLORS A vector the same size as VALUES containing the color index to be used for each bar If not specified the colors are selected based on spacing the color indices as widely as possible within the available colors specified by D N_COLORS keyword COLORS Is an integer giving color of all colorbars contrarily to colors which is a vector giving the color of each colorbar keyword NOREINITPLT We active it if we do not want environnement variables p x y z to be reinitilalizted by the procedure reinitplt keyword _EXTRA used to pass your keyword uses common pro restrictions If NOREINITPLT is not activated all environnement variables p x y z are reinitializtedby the procedure reinitplt examples IDL sbar_plot indgen 10 small 2 2 2 rempli IDL sbar_plot indgen 10 small 2 2 3 noerase IDL ps history Sebastien Masson smasson lodyc jussieu fr 10 10 1999 version Id PRO sbar_plot Values COLORS colors NOREINITPLT noreinitplt _extra ex compile_opt idl2 strictarrsubs common 1 I reinitialize the graphic environment variables x y et p : if NOT keyword_set NOREINITPLT then reinitplt _extra ex 2 I place the drawing on the screen like on the postscript IF chkstru ex overplot EQ 0 THEN placedessin autre _extra ex 3 Drawing if n_elements COLORS NE 0 then BEGIN if n_elements COLORS EQ n_elements Values then col colors ELSE col replicate colors 0 n_elements Values ENDIF ELSE col congrid indgen d n_colors 256 n_elements Values bar_plot Values background p background colors col xstyle 1 ystyle 1 _extra ex 4 End of drawing terminedessin _extra ex return end");257 a[255] = new Array("./ToBeReviewed/PLOTS/DESSINE/scontour.html", "scontour.pro", "", " File_comments Same thing that contour but compatible with the whole environnement common pro inclued categories graphics INPUTS:cd IDL contour keyword NOREINITPLT We active it if we do not want environnement variables p x y z to be reinitilalizted by the procedure reinitplt keyword _EXTRA used to pass your keywords uses common pro examples IDL z dist 100 IDL scontour z nlevels 10 small 1 2 1 xstyle 1 ystyle 1 IDL ps history Sebastien Masson smasson lodyc jussieu fr 10 10 1999 version Id PRO scontour x y z NOREINITPLT noreinitplt _EXTRA ex compile_opt idl2 strictarrsubs common 1 I reinitializate the graphic environment variables x y et p : if NOT keyword_set NOREINITPLT then reinitplt _extra ex 2 i put the drawing on the screen like on the postcript if ex contains norease and c_orientation keywords we force ex noerase 0 IF chkstru ex overplot EQ 0 THEN placedessin autre _extra ex fiddle when noerase is used with c_orentation call contour with nodata to get the graphic environment then force noerase 0 and overplot 1 IF size ex type EQ 8 THEN BEGIN check if noerase is used with c_orentation alltags strlowcase tag_names ex dummy where alltags EQ noerase count1 dummy where alltags EQ c_orientation count2 IF count1 count2 NE 0 THEN BEGIN case n_params OF 1:contour x nodata _EXTRA ex 2:contour x y nodata _EXTRA ex 3:contour x y z nodata _EXTRA ex endcase ex noerase 0 ex get_extra overplot _extra ex noerase_orientation 1 ENDIF ENDIF 3 je fais mon joli dessin case n_params OF 1:contour x xstyle 1 ystyle 1 _EXTRA ex 2:contour x y xstyle 1 ystyle 1 _EXTRA ex 3:contour x y z xstyle 1 ystyle 1 _EXTRA ex ENDCASE fiddle when noerase is used with c_orentation draw the contour axis IF keyword_set noerase_orientation THEN BEGIN ex noerase 1 ex overplot 0 case n_params OF 1:contour x xstyle 1 ystyle 1 nodata _EXTRA ex 2:contour x y xstyle 1 ystyle 1 nodata _EXTRA ex 3:contour x y z xstyle 1 ystyle 1 nodata _EXTRA ex ENDCASE ENDIF 4 End of drawing terminedessin _extra ex return end");258 a[256] = new Array("./ToBeReviewed/PLOTS/DESSINE/splot.html", "splot.pro", "", " file_comments Same thing that plot but compatible with the whole environnement common pro inclued categories graphics INPUTS:cd IDL plot keyword NOREINITPLT We active it if we do not want environnement variables p x y z to be reinitilalizted by the procedure reinitplt keyword _EXTRA used to pass your keywords uses common pro restrictions If NOREINITPLT is not activated all environnement variables p x y z are reinitializtedby the procedure reinitplt examples IDL splot indgen 10 ystyle 1 small 1 2 1 portrait IDL splot indgen 10 ystyle 1 small 1 2 2 noerase IDL ps history Sebastien Masson smasson lodyc jussieu fr 18 10 1999 version Id PRO splot x y NOREINITPLT noreinitplt _EXTRA ex compile_opt idl2 strictarrsubs common 1 I reinitializate the graphic environment les variables x y et p : if NOT keyword_set NOREINITPLT then reinitplt _extra ex 2 i put the drawing on the screen like on the postcript placedessin autre _extra ex 3 Drawing if n_elements y EQ 0 then plot x xstyle 1 ystyle 1 _EXTRA ex ELSE plot x y xstyle 1 ystyle 1 _EXTRA ex 4 End of drawing terminedessin _extra ex return end");259 a[257] = new Array("./ToBeReviewed/PLOTS/DESSINE/tvplus.html", "tvplus.pro", "", " file_comments Enhanced version of tvscl categories quick exploration of 2D arrays INPUTS: param Z2D in required 2D array to visualize param CELLSIZE in optiona This is the size in pixel of the square representing 1 array element By default this size is computed automatically in order that the size of the plotting window do not exceed the screen size If the user specify a large value of cellsize that forces tvplus to create a window larger than the screen a scrolling window will be displayed instead of a regular window Unfortunately the nice fonctionnalities of tvplus are not coded for scrolling window case keyword BOTTOM The lowest color index of the colors to be loaded in the bar default is 0 keyword C_NAN The color number that should be used for the NaN values default value is d n_colors 1 e6 the test to find the masked value is ge abs mask 10 This is necessary to avoid the rounding errors keyword MIN Scalar used to specify the min value of the color bar default is 0 keyword MAX Scalar used to specify the max value of the color bar default is d n_colors tvplus dist 100 history Sebastien Masson smasson lodyc jussieu fr 18 12 98 Aug 2005: quick cleaning english version Id PRO tvplus z2d cellsize BOTTOM bottom C_MASK c_mask C_NAN c_nan WINDOW window MIN min MAX max MASK mask OFFSET offset NOUSEINFOS NOUSEINFOS NCOLORS ncolors NOINTERP nointerp _EXTRA ex compile_opt idl2 strictarrsubs IF n_elements z2d EQ 0 THEN return arr reform float z2d check the size of the input array if size arr 0 NE 2 then begin ras report Input array must have only 2 dimensions and not strtrim size arr n_dimensions 1 return endif def of ncolmax bottom topcol et ncolors ncolmax d n_colors arr truemin min ENDIF ELSE truemin min arr if n_elements max NE 0 then BEGIN arr arr floor x cellsize floor y cellsize floor x cellsize floor y cellsize floor x2 cellsize floor y2 cellsize size arr 2 cellsize 1 x x x2 x x sort x y y y2 y y sort y IF keyword_set OFFSET THEN offset x 0 y 0 offset ELSE offset x 0 y 0 tvplus z2d x 0 :x 1 y 0 :y 1 WINDOW window MIN min MAX max MASK mask C_MASK c_mask C_NAN c_nan NOUSEINFOS OFFSET OFFSET NCOLORS ncolors NOINTERP nointerp BOTTOM bottom _EXTRA ex return END ELSE: endcase ENDWHILE x xenvsauve y yenvsauve p penvsauve x range 1 0 nx cellsize 5 offset 0 y range 1 0 ny cellsize 5 offset 1 return end");260 a[258] = new Array("./ToBeReviewed/PLOTS/DIVERS/addaxe.html", "addaxe.pro", "", " file_comments Add an axis when we do an oblique section in pltz pltt or plt1d categories graphic param ENDPOINTS in required Coordonnees of extremities of the section param TYPE in required A string of two characters specifying the type of plot we do param POSFENETRE in required The vector p position corresponding to the frame position of the drawing part of the plot uses common pro history Sebastien Masson smasson lodyc jussieu fr version Id PRO addaxe endpoints type posfenetre _EXTRA ex compile_opt idl2 strictarrsubs common IF strpos type x NE 1 THEN BEGIN IF endpoints 1 EQ endpoints 3 THEN return IF key_onearth THEN BEGIN formeaxe0 lonaxe formeaxe1 lataxe titreaxe latitude ENDIF ELSE BEGIN formeaxe0 formeaxe1 titreaxe j index ENDELSE range endpoints 1 endpoints 3 if endpoints 2 LT endpoints 0 THEN range reverse range ENDIF ELSE BEGIN IF endpoints 0 EQ endpoints 2 THEN return IF key_onearth THEN BEGIN formeaxe0 lataxe formeaxe1 lonaxe titreaxe longitude ENDIF ELSE BEGIN formeaxe0 formeaxe1 titreaxe i index ENDELSE range endpoints 0 endpoints 2 if endpoints 3 LT endpoints 1 THEN range reverse range ENDELSE if type EQ yt then BEGIN axis yaxis 0 ytickformat formeaxe0 color 0 ystyle 1 _EXTRA ex axis yaxis 1 ytickformat formeaxe1 color 0 ystyle 1 ytitle titreaxe yrange range _EXTRA ex ENDIF ELSE BEGIN axis xaxis 0 xtickformat formeaxe0 color 0 xstyle 1 _EXTRA ex axis xaxis 1 xtickformat formeaxe1 color 0 xstyle 1 xtitle titreaxe xrange range _EXTRA ex ENDELSE return end");261 a[259] = new Array("./ToBeReviewed/PLOTS/DIVERS/autoscale.html", "autoscale.pro", "", " file_comments We give a min and a max and the procedure send back the good contour interval and labels s value categories graphic param MIN in required A reel number specifying above what value we want to trace a contour param MAX in required A reel number specifying below what value we want to trace a contour param CI out It is a reel number giving the contour interval Use it in CONTOUR with the keyword LEVEL restrictions CI is a multiple of the unity in unity log of 10 It force the number of contour to be even history G Roullet aout 99 gr lodyc jussieu fr version Id PRO autoscale min max ci Estimation of a first CI notice the presence of the floor Inferior round This CI is a multiple of the unity in unity log of 10 compile_opt idl2 strictarrsubs ci max min 20 ci 10 floor alog10 ci n 0 ci0 ci coef 2 2 5 5 10 We test differents CI contour intervals i e 1 2 2 5 5 and 10 until the number of contour is inferior to 30 WHILE ceil max min ci GE 30 DO BEGIN ci ci0 coef n n n 1 ENDWHILE min floor min ci 2 ci 2 max ceil max ci 2 ci 2 nlevels round max min ci We force the number of contour to be even IF nlevels MOD 2 EQ 1 THEN BEGIN nlevels nlevels 1 max max ci END END ");262 a[260] = new Array("./ToBeReviewed/PLOTS/DIVERS/axis4pltz.html", "axis4pltz.pro", "", " file_comments compute the mask and the axis for a vertical section param MASK in required 3d mask param GLAM in required 2d longitude param GPHI in required 2d latitude param Z in required 1d depth keyword XXAXIS to get the xaxis we need to use in pltbase keyword ZZAXIS to get the yaxis we need to use in pltbase keyword SIN Activate this keyword if we want the x axis to be traced in sinus of the latitude when we make a drawing f y keyword ZRATIO When the drawing has a zoomed part it is the size rapport between the zoomed part hz zoom height and the whole drawing ht total height By default 2 3 keyword _EXTRA used to pass your keywords Others: see pltz history Sebastien Masson smasson lodyc jussieu fr June 24 2002 version Id PRO axis4pltz type mask glam gphi z XXAXIS xxaxis ZZAXIS zzaxis SIN sin ZRATIO zratio ZOOM zoom PROFMAX profmax PROFMIN profmin _extra ex include common compile_opt idl2 strictarrsubs cm_4mesh IF NOT keyword_set key_forgetold THEN BEGIN updatekwd ENDIF define the mask used for this section if mask 0 NE 1 AND size mask 0 NE 2 then begin if type EQ xz then mask total mask 2 1 ELSE mask total mask 1 1 endif define xxaxis and yyaxis the axis used for this section nx size glam 1 CASE size gphi 0 OF 1:ny size gphi 1 2:ny size gphi 2 ENDCASE CASE size z 0 OF 1:nz size z 1 2:nz size z 2 ENDCASE if type eq yz then BEGIN IF size gphi 0 EQ 1 then xxaxis gphi ELSE BEGIN IF keyword_set key_irregular THEN BEGIN cln where gphi EQ max gphi 0 xxaxis reform gphi cln MOD nx ENDIF ELSE xxaxis reform gphi 0 ENDELSE if keyword_set sin then xxaxis sin pi 180 xxaxis if size z 0 EQ 1 THEN zzaxis z ELSE zzaxis z ENDIF ELSE BEGIN xxaxis glam 0 if size z 0 EQ 1 then zzaxis z ELSE zzaxis z ENDELSE We project the z axis in 0 1 if not keyword_set zratio then zratio 2 3 if zoom ge profmax then zratio 1 if zoom LT profmax then begin mp projsegment profmin zoom 0 zratio mp zzaxis where zzaxis LE zoom mp 0 zzaxis where zzaxis LE zoom mp 1 mp projsegment zoom profmax zratio 1 mp zzaxis where zzaxis GE zoom mp 0 zzaxis where zzaxis GE zoom mp 1 ENDIF ELSE BEGIN mp projsegment profmin profmax 0 1 mp zzaxis mp 0 zzaxis mp 1 ENDELSE to draw from bottom to top avoid using cell_fill CASE size zzaxis n_dimensions OF 1:zzaxis reverse zzaxis 2:zzaxis reverse zzaxis 2 ENDCASE if mask 0 NE 1 then mask reverse mask 2 return end");263 a[261] = new Array("./ToBeReviewed/PLOTS/DIVERS/barrecouleur.html", "barrecouleur.pro", "", " file_comments Overlayeur of colorbar categories utilities restrictions pass all argument we want thanks to _extra history Sebastien Masson smasson lodyc jussieu fr 23 12 98 version Id todo seb: mettre les keyword et les param PRO barrecouleur colnumb clbinf clbsup clbdiv NOCOLORBAR nocolorbar CB_TITLE cb_title NOFILL nofill COLOR_c color_c min min max max divisions divisions CB_SUBTITLE cb_subtitle POST post _extra ex compile_opt idl2 strictarrsubs cm_general IF NOT keyword_set key_forgetold THEN BEGIN updatekwd ENDIF if keyword_set min then clbinf min if keyword_set max then clbsup min if keyword_set divisions THEN clbdiv divisions nocolorbar keyword_set nocolorbar keyword_set nofill keyword_set color_c def_myuniquetmpdir IF lmgr demo EQ 1 THEN BEGIN if we are in demo mode we cannot save the parameters in a temporary file cm_demomode_used colorbarparam colnumb:colnumb clbinf:clbinf clbsup:clbsup clbdiv:clbdiv ENDIF ELSE BEGIN save colnumb clbinf clbsup clbdiv file myuniquetmpdir 4colorbar dat ENDELSE if keyword_set nocolorbar then return ancienx x ancieny y ancienp p reinitplt x style 1 y style 1 colorbar cb_color 0 cb_charsize ancienp charsize pscolor keyword_set post division clbdiv min clbinf max clbsup cb_title cb_title discret colnumb _extra ex x ancienx y ancieny p ancienp return end");264 a[262] = new Array("./ToBeReviewed/PLOTS/DIVERS/checkfield.html", "checkfield.pro", "", "FUNCTION err_1d type n1 name n2 compile_opt idl2 strictarrsubs return report Error in type type plot with a 1D input array: the number of elements of the input vector strtrim n1 1 is not equal to name strtrim n2 1 simple END FUNCTION err_2d type sz nx ny nz compile_opt idl2 strictarrsubs cm_4mesh cm_4cal return report Error in type type plot with a 2D input array: the array dimensions tostr sz 1:2 are incompatible with the the domain dimensions jpi nx jpj ny jpk nz jpt strtrim jpi 1 strtrim nx 1 strtrim jpj 1 strtrim ny 1 strtrim jpk 1 strtrim nz 1 strtrim jpt 1 simple END FUNCTION err_3d type sz nx ny nz compile_opt idl2 strictarrsubs cm_4mesh cm_4cal return report Error in type type plot with a 3D input array: the array dimensions tostr sz 1:3 are incompatible with the the domain dimensions jpi nx jpj ny jpk nz jpt strtrim jpi 1 strtrim nx 1 strtrim jpj 1 strtrim ny 1 strtrim jpk 1 strtrim nz 1 strtrim jpt 1 simple END file_comments In input of plt pltz pltt and plt1d it check that the field give a size compatible with the domain and if needed average to give us a 2d array if we make a plot of the type: xy xz xt yz yt zt or a 1d array if we make a plot of the type: x y z t categories graphic param FIELD in required A field respecting litchamp pro s criterions See IDL xhelp litchamp keyword BOXZOOM Vector indicating the geographic zone on which we want to cut the map If BOXZOOM has : 1 element : The extraction is made on lon1 lon2 lat1 lat2 0 boxzoom 0 2 elements: The extraction is made on lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 4 elements: The extraction is made on Boxzoom 0 max gdept gdepw 5 elements: The extraction is made on Boxzoom 0:3 0 Boxzoom 4 6 elements: The extraction is made on Boxzoom Where lon1 lon2 lat1 lat2 are global variables defined at the last domdef keyword WDEPTH to specify that the field is at W depth instad of T depth automatically activated if vargrid eq W keyword VECTEUR It is a structure composed by 2 elements containing the 2 fields U and V of values of the zonal and meridian component of the vector of the fields to draw These fields can be an array or a structure For example: vecteur matriceu:lec unsurface matricev:lec vnsurface Comment: name of elements of vectors are inconsenquential vecteur u:lec unsurface v:lec vnsurface is also appropriated keyword _EXTRA used to pass your keywords keyword DIREC uses common pro history Sebastien Masson smasson lodyc jussieu fr 08 02 2000 version Id todo seb: mettre les param FUNCTION checkfield field procedure TYPE type BOXZOOM boxzoom DIREC direc NOQUESTION noquestion VECTEUR vecteur WDEPTH wdepth _EXTRA ex compile_opt idl2 strictarrsubs include commons cm_4mesh cm_4cal cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF I1 Reading of the field if n_elements field EQ 0 then return report field undefined arr litchamp field first check IF n_elements arr EQ 1 THEN BEGIN if arr EQ 1 then return report Error: input array 1 Maybe the reading did ont perform well simple ELSE return report Error: input array is a scalar simple ENDIF nan total finite arr nan firstzw 1 lastzw lastzw 1 firstzt 1 lastzt lastzt 1 jpk 1 nzt lastzt firstzt 1 ENDELSE updateold ENDIF make the automatic definition of type for pltz if type is not specified IF type EQ z AND procedure EQ pltz THEN if lon2 lon1 gt lat2 lat1 then type xz else type yz make the automatic definition of type for pltt if type is not specified IF type EQ unkownpltt AND procedure EQ pltt THEN if lon2 lon1 gt lat2 lat1 then type xt else type yt verification of the input array size and the value of the type grille 1 1 1 1 nx ny nz firstx firsty firstz lastx lasty lastz WDEPTH wdepth basic checks CASE 1 OF nx EQ 1: IF strpos type x NE 1 THEN return report Error: impossible to make a type type plot with nx 1 simple ny EQ 1: IF strpos type y NE 1 THEN return report Error: impossible to make a type type plot with ny 1 simple nz EQ 1: IF strpos type z NE 1 THEN return report Error: impossible to make a type type plot with nz 1 simple jpt EQ 1: IF strpos type t NE 1 THEN return report Error: impossible to make a type type plot with jpt 1 simple ELSE: ENDCASE is the size of the array compatible with teh domain arr fitintobox temporary arr nx ny nz firstx firsty firstz lastx lasty lastz sz size arr case sz 0 of 0:return arr 1:BEGIN nele n_elements arr case type of t :if jpt NE nele THEN return err_1d type nele jpt jpt x :IF nx NE nele THEN return err_1d type nele nx nx y :IF ny NE nele THEN return err_1d type nele ny ny z :IF nz NE nele THEN return err_1d type nele nz nx ELSE:return report Error: Impossible to make a type plot with a 1D array simple ENDCASE END 2:BEGIN case type of x :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny:direc y xy array sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz:direc z x y z array sz 1 EQ nx AND sz 2 EQ jpt:direc t xt array ELSE:return err_2d type sz nx ny nz endcase end y :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny:direc x xy array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz:direc z x yz array sz 1 EQ ny AND sz 2 EQ jpt:direc t yt array ELSE:return err_2d type sz nx ny nz endcase END z :BEGIN case 1 of sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz:direc x x y z array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz:direc y x yz array sz 1 EQ nz AND sz 2 EQ jpt:direc t zt array ELSE:return err_2d type sz nx ny nz endcase END t :BEGIN case 1 OF sz 1 EQ nx AND sz 2 EQ jpt:direc x xt array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ jpt:direc y x yt array nx EQ 1 AND ny EQ 1 AND sz 1 EQ nz AND sz 2 EQ jpt:direc z x y zt array ELSE:return err_2d type sz nx ny nz ENDCASE END xy :IF sz 1 NE nx OR sz 2 ne ny THEN return err_2d type sz nx ny nz xy array xz :IF sz 1 NE nx OR sz 2 ne nz THEN return err_2d type sz nx ny nz xz array yz :IF sz 1 NE ny OR sz 2 NE nz THEN return err_2d type sz nx ny nz yz array xt :IF sz 1 NE nx OR sz 2 NE jpt THEN return err_2d type sz nx ny nz xt array yt :IF sz 1 NE ny OR sz 2 NE jpt THEN return err_2d type sz nx ny nz yt array zt :IF sz 1 NE nz OR sz 2 NE jpt THEN return err_2d type sz nx ny nz zt array ENDCASE END 3:BEGIN case type of x :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ nz:direc yz xyz array sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz AND sz 3 EQ jpt:direc zt x y zt array sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ jpt:direc yt xyt array ELSE:return err_3d type sz nx ny nz endcase END y :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ nz:direc xz xyz array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz AND sz 3 EQ jpt:direc zt x yzt array sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ jpt:direc xt xyt array ELSE:return err_3d type sz nx ny nz endcase END z :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ nz:direc xy xyz array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz AND sz 3 EQ jpt:direc yt x yzt array sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz AND sz 3 EQ jpt:direc xt x y zt array ELSE:return err_3d type sz nx ny nz endcase END t :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ jpt:direc xy xyt array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz AND sz 3 EQ jpt:direc yz x yzt array sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz AND sz 3 EQ jpt:direc xz x y zt array ELSE:return err_3d type sz nx ny nz endcase END xy :BEGIN case 1 OF sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ nz:direc z xyz array sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ jpt:direc t xyt array ELSE:return err_3d type sz nx ny nz endcase END xz :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ nz:direc y xyz array sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz AND sz 3 EQ jpt:direc t x y zt ELSE:return err_3d type sz nx ny nz endcase END yz :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ nz:direc x xyz array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz AND sz 3 EQ jpt:direc t x yzt ELSE:return err_3d type sz nx ny nz endcase END xt :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ jpt:direc y xyt array sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz AND sz 3 EQ jpt:direc z x y zt array ELSE:return err_3d type sz nx ny nz endcase END yt :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ jpt:direc x xyt array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz AND sz 3 EQ jpt:direc z x yzt array ELSE:return err_3d type sz nx ny nz endcase END zt :BEGIN case 1 of sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz AND sz 3 EQ jpt:direc x x y zt array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz AND sz 3 EQ jpt:direc y x yzt array ELSE:return err_3d type sz nx ny nz ENDCASE END ENDCASE END 4:BEGIN CASE type OF x :direc yzt y :direc xzt z :direc xyt t :direc xyz xy :direc zt xz :direc yt yz :direc xt xt :direc yz yt :direc xz zt :direc xy ENDCASE END ENDCASE IF keyword_set direc THEN BEGIN IF strpos direc t NE 1 OR strpos type t NE 1 THEN arr grossemoyenne temporary arr direc boxzoom localbox NAN nan NODOMDEF WDEPTH wdepth _extra ex ELSE arr moyenne temporary arr direc boxzoom localbox NAN nan NODOMDEF WDEPTH wdepth _extra ex ENDIF RETURN arr END");254 a[252] = new Array("./ToBeReviewed/PLOTS/DESSINE/pltt.html", "pltt.pro", "", " file_comments Trace hovmoller graphs: xt yt zt t categories Graphics param TAB in required The field whose we want to make the hovmoller map can be 2 kind of thing: 1 An array which can be: 3d or 4d: array xt yt zt t The last component is the time In this case the array will pass in grossemoyenne to be averaged and become an 1d or 2d array 2d: If the array is already 2d it is not modified beware lands must be masked at the value valmask and nevertheless type must be specified to we know of which trace it is about To have a correct caption respecify the xctraction zone via BOXZOOM 1d: only for traces of the t type Nevertheless type must be specified to we know of which trace it is about To have a correct caption respecify the xctraction zone via BOXZOOM 2 a structure respecting all criterions specified by litchamp pro See IDL xhelp litchamp The array contained in the structure respecting criterions of case 1 PARAM: MAX: valeur maximum que l on veut prendre en compte dans le trace des contours Par defaut on prend le max de tableau sur les pts mer MIN: valeur minimum que l on veut prendre en compte dans le trace des contours Par defaut on prend le min de tableau sur les pts mer DATMIN: c est la borne inf de l axe temporel c est un longinteger de la forme yyyymmdd ou bien yymmdd DATMAX: c est la borne max de l axe temporel c est un longinteger de la forme yyyymmdd ou bien yymmdd keyword BOXZOOM Vector indicating the geographique zone 3d on which the extraction of the field must be done to do the hovmoeller If BOXZOOM has : 1 element : The extraction is made on lon1 lon2 lat1 lat2 0 boxzoom 0 2 elements: The extraction is made on lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 4 elements: The extraction is made on Boxzoom vert1 vert2 5 elements: The extraction is made on Boxzoom 0:3 0 Boxzoom 4 6 elements: The extraction is made on Boxzoom Where lon1 lon2 lat1 lat2 vert1 vert2 are global variables defined at the last domdef keyword CONTINTERVALLE When CONTOUR is activated it is the value between 2 isolines traced by a trait So it can be different from the one specified by INTERVALLE which in this case does not control colored isolines in color anymore If there is noone specified min we choose a contour min which goes well with the specified interval If this keyword is not specified we trace 20 isolines from the min to the max keyword CONTLABEL It is an integer n When CONTOUR is actvated if n is different of 0 choose the label type corresponding to n cases for the traced by a traitisolines To specify the type of label of the colored contour use LABEL keyword CONTMAX When CONTOUR is activated max value we want to consider in the isoline traced by a trait s line By default we take the max on ocean points of the array passed in the keyword CONTOUR keyword CONTMIN When CONTOUR is activated min value we want to consider in the isoline traced by a trait s line By default we take the min on ocean points of the array passed in the keyword CONTOUR keyword CONTNLEVEL When CONTOUR is activated it is the numbre of contours traced by a trait for drawing active if CONTLABEL 0 by default 20 keyword CONTOUR If we want to trace contours of a different field than the one whose we have the colored drawing by examlpe E P in color and QSR in contours It must be a field respecting same caracteristics than the argument number one of pltt keyword ENDPOINTS keyword specifing that we want to make a vertical cut in diagonal Then coorinated of extremities of these one are difined by the 4 elements of the vector ENDPOINTS: x1 y1 x2 y2 which are coordinates keyword EXCHANGE_XY Allows to invert axes keyword FILTER Apply a slippery average of width FILTER keyword INTERVALLE Value of an internal between to isoline If there is none specified min we choose a min contour which goes well with the specified interval If this keyword is not specified we trace 20 isoline from the min to the max Comment: When CONTOUR is activated INTERVALLE only specify the interval between 2 colored isoline To specify the interval between 2 isolines traced by a trait use CONTINTERVALLE keyword INV Invert the color vector used to color the graph without use the black the white and the used palette keyword LABEL It is an integer n If n different of 0 it choose the label s type corresponding to cases n cf label pro Comment: When CONTOUR is activated it only specify the label s type for colored isolines For tese one traced by a trait use CONTLABEL keyword COL1d OBSOLETE Color number when we make a trace 1d by default 0 It is better to use the keyword COLOR used by plot keyword MAXIN Allows to specify the max value we want to consider in the drawing of contour helping by the keyword instead of the argument max If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword MININ Allows to specify the min value we want to consider in the drawing of contour helping by the keyword instead of the argument min If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword NLEVEL Number of contour to draw by default 20 active if LABEL 0 or is not specified keyword CONTNLEVEL When CONTOUR is activated it is the numbre of contours traced by a trait for drawing active if CONTLABEL 0 by default 20 keyword OV1D Allows to overprint a 1d curve over a precedent 1d drawing keyword OVERPLOT To make a plot over an other one Comment: Contrarily to the use of CONTOUR or VECTEUR the use of this keyword does not the caption and or the color bar keyword STRICTFILL Activate this keyword to that the filling of contours be precisely done between the min and the max specified letting values inferior at the specified min and values superior at the specified max in white keyword STYLE Contour s style to adopt to draw isolines by default style 0 see style pro keyword STY1D OBSOLETE Number of the style used when we make a 1d drawing We should better use the keyword LINESTYLE which is tho one of the plot Beware this keyword is still useful if we want to d bars instead of curves put sty1d bar keyword TREND_TYPE Modify field by calling trends pro keyword TYPEIN allows to specify the type of hovmoller we want to do xt yt zt t with help of a keyword rather than the argument type If the argument andthe keyword are specified in the same time it is the value specified by the keyword which is retained uses common pro history Sebastien Masson smasson lodyc jussieu fr 27 5 98 Jerome Vialard adapting plt to hovmoller drawing 2 7 98 Sebastien Masson 14 8 98 continents barres 15 1 98 Adaptation for arrays 3 and 4d to the average be done in pltt rather than during the reading Sebastien Masson 14 8 98 7 1999 Eric Guilyardi 29 7 99 FILTER TREND_TYPE REPEAT_C Sebastien Masson 08 02 2000 checkfield and usetri keyword version Id: pltt pro 142 2006 07 21 12:47:49Z navarro todo seb: L 24 36 L 426 427 L 492 493 pro pltt tab giventype givenmin givenmax datmin datmax BOXZOOM boxzoom CONTOUR contour ENDPOINTS endpoints INTERVALLE intervalle INV inv CONTINTERVALLE contintervalle LABEL label CONTLABEL contlabel STYLE style CONTMAX contmax CONTMIN contmin NLEVEL nlevel CONTNLEVEL contnlevel COL1D col1d STY1D sty1d MININ minin MAXIN maxin OV1D ov1d FILTER filter TREND_TYPE trend_type REPEAT_C repeat_c TYPEIN typein XT XT YT YT ZT zt TT tt STRICTFILL strictfill OVERPLOT overplot EXCHANGE_XY exchange_xy _extra ex include common compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4cal IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 For key_performance I2 reinitialization p x y Comment: we do not reinitializate when we call back plt in loop to use contour if n_elements contour ne 4 AND NOT keyword_set overplot AND NOT keyword_set ov1d then reinitplt I1 Reading of the field if keyword_set boxzoom OR keyword_set endpoints AND n_elements contour ne 4 THEN BEGIN savedbox 1b saveboxparam boxparam4pltt dat ENDIF if n_elements giventype NE 0 then type giventype if n_elements givenmin NE 0 then min givenmin if n_elements givenmax NE 0 then max givenmax if n_elements minin NE 0 then min minin if n_elements maxin NE 0 then max maxin if keyword_set typein then BEGIN if size type type NE 7 AND size type type NE 0 then begin if n_elements min NE 0 then max min min type endif type typein ENDIF checktypeminmax pltt TYPE type MIN min MAX max XT XT YT YT ZT zt TT tt ENDPOINTS endpoints _extra ex if keyword_set endpoints then begin section tab z2d glam gphi ENDPOINTS endpoints TYPE type BOXZOOM boxzoom DIREC direc nx n_elements glam ny nx if strupcase vargrid EQ W then begin z gdepw firstzw:lastzw nz nzw ENDIF ELSE BEGIN z gdept firstzt:lastzt nz nzt ENDELSE ENDIF ELSE BEGIN z2d checkfield tab pltt TYPE type BOXZOOM boxzoom direc direc _extra ex if z2d 0 EQ 1 then BEGIN IF keyword_set savedbox THEN restoreboxparam boxparam4pltt dat return endif grille mask glam gphi gdep nx ny nz ENDELSE Calculation of trend anomaly following TREND_TYPE IF NOT keyword_set trend_type THEN trend_type 0 IF trend_type GT 0 THEN z2d trends z2d trend_type type Filtering of fields in the t case IF type EQ t AND keyword_set filter THEN BEGIN print Applying a running mean filter of width string filter format I3 z2d smooth z2d filter z2d 0:filter 2 1 0 z2d size z2d 1 filter 2 1: size z2d 1 1 0 ENDIF Repetition of the temporal series IF NOT keyword_set repeat_c THEN repeat_c 1 temps time 0:jpt 1 IF repeat_c GT 1 THEN BEGIN taille size z2d CASE taille 0 OF 1: z2d reform z2d replicate 1 repeat_c taille 1 repeat_c 2: BEGIN z2d z2d replicate 1 repeat_c z2d reform z2d taille 1 taille 2 repeat_c over END ELSE: ENDCASE temps temps lindgen jpt REPEAT_c 1 1 temps 1 temps 0 temps jpt 1 ENDIF Selection of graphic s type taille size z2d case taille 0 of 2 : typdes 2d 1 : begin z1d z2d typdes 1d if keyword_set OV1D then begin yy z2d if n_elements datmin NE 0 then tempsmin date2jul datmin ELSE tempsmin temps 0 on shift l axe du temps pour des questions de precision sur les dates du calendier julien en long qui sont passes en float ds les axes xx temps tempsmin x range x range tempsmin x tickv x tickv tempsmin We do a false plot to apply these changes plot 0 0 noerase xstyle 5 ystyle 5 title subtitle ytitle xtitle goto trace1d endif end endcase We build the mask For that the table must be masked automaticaly done at the value valmask if we pass in moyenne or grossemoyenne nan total finite z2d nan z2d not very nice when xgridstyle 2 same if xticklen 0 5 not very nice in the middle so we draw the top right axis by hand using axis if n_elements ex NE 0 then BEGIN pour avoir un cadre de la couleur noire if where tag_names ex EQ COLOR 0 NE 1 then ex COLOR 0 ENDIF plot 0 0 nodata noerase _extra ex xstyle 1 4 keyword_set endpoints AND type EQ xt AND lat1 NE lat2 8 type EQ yt OR type EQ zt ystyle 1 4 keyword_set endpoints AND type EQ yt 8 type EQ xt call axis for the missing axis IF type EQ xt AND NOT keyword_set endpoints THEN BEGIN if n_elements ex NE 0 then if where tag_names ex EQ YTICKNAME 0 NE 1 then ex YTICKNAME replicate n_elements ex YTICKNAME axis yaxis 1 ystyle 1 yticklen 0 ytickname replicate y ticks 1 _extra ex ENDIF IF type EQ yt OR type EQ zt AND NOT keyword_set endpoints THEN BEGIN if n_elements ex NE 0 then if where tag_names ex EQ XTICKNAME 0 NE 1 then ex XTICKNAME replicate n_elements ex XTICKNAME axis xaxis 1 xstyle 1 xticklen 0 xtickname replicate x ticks 1 _extra ex ENDIF ajout d un axe ds le cas ou l on utilise endpoints if keyword_set endpoints then addaxe endpoints type posfenetre _EXTRA ex color bar colnumb colnumb 0:ncontour 1 keyword_set strictfill barrecouleur colnumb min max ncontour keyword_set strictfill 2 position posbar _extra ex endif 1d trace1d: if typdes eq 1d then begin if not keyword_set col1d then col1d 0 if keyword_set sty1d then BEGIN if we want to make bars IF strlowcase strtrim sty1d EQ bar then begin y range y range 0 y range 1 y range 0 05 y range 1 bar_plot yy background d n_colors 1 not very nice when xgridstyle 2 same if xticklen 0 5 not very nice in the middle so we draw the top axis by hand using axis if n_elements ex NE 0 then BEGIN To have a black frame if where tag_names ex EQ COLOR 0 NE 1 then ex COLOR 0 ENDIF plot 0 0 nodata noerase xstyle 1 8 1 keyword_set exchange_xy ystyle 1 8 keyword_set exchange_xy _extra ex call axis for the missing axis if n_elements ex NE 0 then BEGIN force tickname to blank array if where tag_names ex EQ YTICKNAME 0 NE 1 AND keyword_set exchange_xy then ex YTICKNAME replicate n_elements ex YTICKNAME if where tag_names ex EQ XTICKNAME 0 NE 1 AND NOT keyword_set exchange_xy then ex XTICKNAME replicate n_elements ex XTICKNAME ENDIF if keyword_set exchange_xy then axis yaxis 1 ystyle 1 yticklen 0 ytickname replicate y ticks 1 _extra ex ELSE axis xaxis 1 xstyle 1 xticklen 0 xtickname replicate x ticks 1 _extra ex ENDIF ELSE oplot xx yy color col1d linestyle sty1d thick 2 _extra ex endif fini: we reput time axis in IDL julian days and not in julian days count from tempsmin if type EQ xt then BEGIN y range y range tempsmin y tickv y tickv tempsmin ENDIF ELSE BEGIN x range x range tempsmin x tickv x tickv tempsmin ENDELSE We do a false plot to these values are considerated plot 0 0 nodata noerase xstyle 5 ystyle 5 title subtitle ytitle xtitle 3rd part: possible print terminedessin _extra ex if keyword_set savedbox THEN restoreboxparam boxparam4pltt dat if n_elements key_performance NE 0 then IF key_performance EQ 1 THEN print temps pltt systime 1 tempsun return end "); 255 a[253] = new Array("./ToBeReviewed/PLOTS/DESSINE/pltz.html", "pltz.pro", "", " file_comments Trace vertical graphs categories Graphics param TAB The field whose we want to make a vertical cut can be 2 kind of thing: 1 An 2d or 3d array If the field is 2d indicate with the keyword BOXZOOM geographic delineations of the boxzoom If the field is 3d we extract the section on we average possibly before to do the plot 2 a structure respecting all criterions specified by litchamp pro See IDL xhelp litchamp The array contin in the structure must be 2 or 3d See case 1 ces arguments ne sont pas obligatoires: MAX: valeur maximum que l on veut prendre en compte dans le trace des contours Par defaut on prend le max de tab1 sur les pts mer MIN: valeur minimum que l on veut prendre en compte dans le trace des contours Par defaut on prend le min de tab1 sur les pts mer keyword BOXZOOM Vector indicating the geographic zone on which we want to cut the map If BOXZOOM has : 1 element : The extraction is made on lon1 lon2 lat1 lat2 0 boxzoom 0 2 elements: The extraction is made on lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 4 elements: The extraction is made on Boxzoom 0 max gdept gdepw 5 elements: The extraction is made on Boxzoom 0:3 0 Boxzoom 4 6 elements: The extraction is made on Boxzoom Where lon1 lon2 lat1 lat2 are global variables defined at the last domdef keyword CONTINTERVALLE When CONTOUR is activated it is the value between 2 isolines traced by a trait So it can be different from the one specified by INTERVALLE which in this case does not control colored isolines in color anymore If there is noone specified min we choose a contour min which goes well with the specified interval If this keyword is not specified we trace 20 isolines from the min to the max keyword CONTLABEL It is an integer n When CONTOUR is actvated if n is different of 0 choose the label type corresponding to n cases for the traced by a traitisolines To specify the type of label of the colored contour use LABEL keyword CONTMAX When CONTOUR is activated max value we want to consider in the isoline traced by a trait s line By default we take the max on ocean points of the array passed in the keyword CONTOUR keyword CONTMIN When CONTOUR is activated min value we want to consider in the isoline traced by a trait s line By default we take the min on ocean points of the array passed in the keyword CONTOUR keyword CONTNLEVEL When CONTOUR is activated it is the numbre of contours traced by a trait for drawing active if CONTLABEL 0 by default 20 keyword CONTOUR If we want to trace contours of a different field than the one whose we have the colored drawing by examlpe E P in color and QSR in contours It must be a field respecting same caracteristics than the argument number one of plt keyword ENDPOINTS keyword specifing that we want to make a vertical cut in diagonal Then coorinated of extremities of these one are difined by the 4 elements of the vector ENDPOINTS: x1 y1 x2 y2 which are coordinates keyword INTERVALLE Value of an internal between to isoline If there is none specified min we choose a min contour which goes well with the specified interval If this keyword is not specified we trace 20 isoline from the min to the max Comment: When CONTOUR is activated INTERVALLE only specify the interval between 2 colored isoline To specify the interval between 2 isolines traced by a trait use CONTINTERVALLE keyword INV Invert the color vector used to color the graph without use the black the white and the used palette keyword ZRATIO When the drawing has a zoomed part it is the size rapport between the zoomed part hz zoom height and the whole drawing ht total height By default 2 3 keyword LABEL It is an integer n If n different of 0 it choose the label s type corresponding to cases n cf label pro Comment: When CONTOUR is activated it only specify the label s type for colored isolines For tese one traced by a trait use CONTLABEL keyword MAXIN Allows to specify the max value we want to consider in the drawing of contour helping by the keyword instead of the argument max If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword MININ Allows to specify the min value we want to consider in the drawing of contour helping by the keyword instead of the argument min If the argument and the keyword are specified in the same time it is the value specified by the keyword which is retained keyword NLEVEL Number of contour to draw by default 20 active if LABEL 0 or is not specified keyword NOTRI To force not to use the triangulation Beware in this case the drawing only works if the grid is undeformed It means that each point of a longitude give one latitude and each point of a latitude give one longitude exept if we use the keyword CELL_FILL 2 Comment: if the field contain points values f_nan then we even do a triangulation keyword OVERPLOT To make a plot over an other one Comment: Contrarily to the use of CONTOUR or VECTEUR the use of this keyword does not the caption and or the color bar keyword SIN Activate this keyword if we want the x axis to be traced in sinus of the latitude when we make a drawing f y keyword STRICTFILL Activate this keyword to that the filling of contours be precisely done between the min and the max specified letting values inferior at the specified min and values superior at the specified max in white keyword STYLE Contour s style to adopt to draw isolines by default style 0 see style pro keyword WDEPTH To specify that the field is at W depth instead of T depth automatically activated if vargrid eq W keyword XZ Force to make a cut following xz keyword YZ Force to make a cut following yz keyword ZOOM Depth where i can make our maximum zoom By default 200m or max depth if it is inferior at 200m uses common pro history Sebastien Masson smasson lodyc jussieu fr 7 1999 Sebastien Masson 08 02 2000 checkfield and notri keyword version Id: pltz pro 142 2006 07 21 12:47:49Z navarro todo seb L 20 26 L 215 221 pro pltz tab giventype givenmin givenmax BOXZOOM boxzoom CONTOUR contour ENDPOINTS endpoints INTERVALLE intervalle INV inv ZRATIO zratio CONTINTERVALLE contintervalle LABEL label CONTLABEL contlabel STYLE style CONTMAX contmax SIN sin TYPEIN typein CONTMIN contmin NLEVEL nlevel CONTNLEVEL contnlevel NOTRI notri USETRI usetri FILLXDIR fillxdir ZOOM zoom XZ xz YZ yz MININ minin MAXIN maxin STRICTFILL strictfill OVERPLOT overplot MASKFILL maskfill WDEPTH wdepth REALSECTION realsection _EXTRA ex include common compile_opt idl2 strictarrsubs cm_4mesh cm_4data cm_4ps IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 For key_performance 1st part: initialization small calculations Comment: we do not reinitializate when we call back plt in loop to use contour if n_elements contour ne 4 AND NOT keyword_set overplot then reinitplt if n_elements contour ne 4 THEN saveboxparam boxparam4pltz dat Reading of the field if n_elements giventype NE 0 then type giventype if n_elements givenmin NE 0 then min givenmin if n_elements givenmax NE 0 then max givenmax if n_elements minin NE 0 then min minin if n_elements maxin NE 0 then max maxin if n_elements realsection EQ 0 then realsection 1 IF n_elements usetri EQ 0 THEN BEGIN IF n_elements notri NE 0 THEN usetri 2 notri ELSE usetri 1 ENDIF no need of triangulation IF usetri EQ 1 AND keyword_set realsection THEN usetri 0 did we specify the type if keyword_set typein then BEGIN if size type type NE 7 AND size type type NE 0 then begin if n_elements min NE 0 then max min min type endif type typein ENDIF checktypeminmax pltz TYPE type MIN min MAX max XZ xz YZ yz ENDPOINTS endpoints _extra ex if keyword_set endpoints then begin section tab z2d glam gphi ENDPOINTS endpoints TYPE type BOXZOOM boxzoom DIREC direc WDEPTH wdepth _extra ex if z2d 0 EQ 1 AND n_elements contour ne 4 then BEGIN restoreboxparam boxparam4pltz dat return ENDIF nx n_elements glam ny nx if strupcase vargrid EQ W then begin gdep gdepw firstzw:lastzw nz nzw ENDIF ELSE BEGIN gdep gdept firstzt:lastzt nz nzt ENDELSE mask z2d LE valmask 10 ENDIF ELSE BEGIN z2d checkfield tab pltz TYPE type BOXZOOM boxzoom DIREC direc WDEPTH wdepth _extra ex if z2d 0 EQ 1 AND n_elements contour ne 4 then BEGIN restoreboxparam boxparam4pltz dat return ENDIF IF realsection EQ 1 THEN grille mask glam gphi gdep nx ny nz ifpltz type WDEPTH wdepth ELSE grille mask glam gphi gdep nx ny nz WDEPTH wdepth ENDELSE stop profmax y range 0 profmin y range 1 if not keyword_set zoom then zoom 200 zoom zoom 0 IF zoom LT profmin THEN zoom profmax if zoom GE vert2 then zoom profmax construction of the mask and of the axis axis4pltz type mask glam gphi gdep XXAXIS xxaxis ZZAXIS zzaxis SIN sin ZRATIO zratio ZOOM zoom PROFMAX profmax PROFMIN profmin _extra ex to draw from bottom to top avoid using cell_fill z2d reverse z2d 2 Determination of the mi:min and of the ma:max of z2d in the same way as max: max and min: min for the drawing nan total finite z2d nan z2d max if n_elements maskfill NE 0 then BEGIN z2d z2d mask masknan if maskfill NE 0 then z2d temporary z2d maskfill 1b mask masknan ENDIF check the mask and the triangulation according to the grid type and nan values find the coordinates of the mask if where mask EQ 0 0 EQ 1 AND NOT keyword_set nan then notri 1 if keyword_set notri then trifield 1 ELSE trifield triangule mask basic if usetri GE 1 AND vargrid EQ T OR vargrid EQ W OR usetri EQ 2 AND vargrid NE T AND vargrid NE W THEN trifield triangule mask basic IF NOT keyword_set endpoints THEN BEGIN if keyword_set nan then trinan triangule masknan basic coinmonte coinmontenan coindescend coindescendnan decoupeterre mask glammsk gphimsk gdepmsk type type WDEPTH wdepth REALSECTION realsection axis4pltz type mask glammsk gphimsk gdepmsk XXAXIS xmask ZZAXIS zmask SIN sin ZRATIO zratio ZOOM zoom PROFMAX profmax PROFMIN profmin _extra ex ENDIF ELSE BEGIN xmask xxaxis zmask zzaxis ENDELSE if usetri GE 1 AND vargrid NE T AND vargrid NE W THEN BEGIN IF keyword_set realsection THEN trimsk triangule mask basic ELSE trimsk triangule mask basic coinmonte coinmontemask coindescend coindescendmask ENDIF dessin en lui meme pltbase z2d xxaxis zzaxis mask xmask zmask level_z2d colnumb overplot overplot contour contour trichamp trifield trimsk trimsk c_linestyle linestyle c_labels 1 indgen n_elements level_z2d MOD 2 c_thick thick unsur2 unsur2 masknan masknan trinan trinan coinmontenan coinmontenan coindescendnan coindescendnan coinmontemask coinmontemask coindescendmask coindescendmask REALSECTION realsection USETRI usetri _extra ex recall of pltz in loop when contour is activated if n_elements contour eq 4 then BEGIN It is the second time I pass in pltt contour mietma: mi ma unit:varunit inter:intervalle I send back the min the max and the unity return endif if keyword_set contour THEN BEGIN pourlegende 1 1 1 1 oldattributs saveatt oldcolnumb colnumb pltz contour contmin contmax CONTOUR pourlegende ZRATIO zratio INTERVALLE contintervalle LABEL contlabel STYLE style noerase NLEVEL contnlevel ZOOM zoom BOXZOOM boxzoom ENDPOINTS endpoints STRICTFILL strictfill REALSECTION realsection MASKFILL maskfill USETRI usetri WDEPTH wdepth _extra ex restoreatt oldattributs colnumb oldcolnumb ENDIF 3rd part: drawing of the frame caption colorbar if keyword_set overplot then BEGIN y range zoom profmin We get back on physic coordinates plot 0 0 nodata noerase title subtitle xstyle 5 ystyle 5 GOTO fini endif Caption dysplay of them legende mi ma type CONTOUR pourlegende INTERVALLE intervalle DIREC direc endpoints endpoints _EXTRA ex if type eq yz then xaxe lataxe else xaxe lonaxe if keyword_set sin OR NOT key_onearth then xaxe Frame applied by default plot xxaxis 0 xxaxis n_elements xxaxis 1 zratio zratio noerase xstyle 1 4 keyword_set endpoints AND type EQ xz AND lat1 NE lat2 OR type EQ yz AND lon1 NE lon2 xtickformat xaxe _extra ex Add of an axis in the case of we use endpoints if keyword_set endpoints then addaxe endpoints type posfenetre _EXTRA ex Y axis in 1 or 2 part if n_elements ex NE 0 then BEGIN To do not put title anymore if where tag_names ex EQ TITLE 0 NE 1 then ex TITLE To do not put subtitle anymore if where tag_names ex EQ SUBTITLE 0 NE 1 then ex SUBTITLE To have just one ytitle if where tag_names ex EQ YTITLE 0 NE 1 then BEGIN ytitle ex YTITLE ex YTITLE endif ENDIF htotal posfenetre 3 posfenetre 1 hzoom 1 zratio htotal if zoom LT profmax then plot 0 0 nodata noerase ystyle 1 yrange profmax zoom 0 001 position posfenetre 0 0 0 hzoom _extra ex title subtitle ytitle y range zoom profmin We get back in physic coordinates plot 0 0 nodata noerase ystyle 1 _extra ex title subtitle ytitle position posfenetre 0 htotal hzoom 0 0 to write the ytitle if d name EQ PS then xs max page_size min mi 1 key_portrait mi key_portrait d x_px_cm ELSE xs d x_size if n_elements ytitle NE 0 then y title ytitle charsize chkstru ex ycharsize extract if charsize EQ 1 then charsize p charsize IF chkstru ex charsize THEN ex charsize charsize if chkstru ex ytitle extract NE then decalage string format e10 3 profmax decalage float strmid decalage strpos decalage e 1 posy posfenetre 1 1 htotal 2 posx posfenetre 0 decalage 3 d x_ch_size charsize xs xyouts posx posy y title normal orientation 90 color 0 ALIGNMENT 5 charsize charsize _extra ex colorbar colnumb colnumb 0:ncontour 1 keyword_set strictfill barrecouleur colnumb min max ncontour keyword_set strictfill 2 position posbar _extra ex 4th part: possible print fini: terminedessin _extra ex sortie: restoreboxparam boxparam4pltz dat if keyword_set key_performance NE 0 THEN print temps pltz systime 1 tempsun return end "); 256 a[254] = new Array("./ToBeReviewed/PLOTS/DESSINE/sbar_plot.html", "sbar_plot.pro", "", " file_comments Same thing that bar_plot but compatible with the whole environnement common pro inclued categories graphics INPUTS: cd IDL bar_plot keyword COLORS A vector the same size as VALUES containing the color index to be used for each bar If not specified the colors are selected based on spacing the color indices as widely as possible within the available colors specified by D N_COLORS keyword COLORS Is an integer giving color of all colorbars contrarily to colors which is a vector giving the color of each colorbar keyword NOREINITPLT We active it if we do not want environnement variables p x y z to be reinitilalizted by the procedure reinitplt keyword _EXTRA used to pass your keyword uses common pro restrictions If NOREINITPLT is not activated all environnement variables p x y z are reinitializtedby the procedure reinitplt examples IDL sbar_plot indgen 10 small 2 2 2 rempli IDL sbar_plot indgen 10 small 2 2 3 noerase IDL ps history Sebastien Masson smasson lodyc jussieu fr 10 10 1999 version Id: sbar_plot pro 142 2006 07 21 12:47:49Z navarro PRO sbar_plot Values COLORS colors NOREINITPLT noreinitplt _extra ex compile_opt idl2 strictarrsubs common 1 I reinitialize the graphic environment variables x y et p : if NOT keyword_set NOREINITPLT then reinitplt _extra ex 2 I place the drawing on the screen like on the postscript IF chkstru ex overplot EQ 0 THEN placedessin autre _extra ex 3 Drawing if n_elements COLORS NE 0 then BEGIN if n_elements COLORS EQ n_elements Values then col colors ELSE col replicate colors 0 n_elements Values ENDIF ELSE col congrid indgen d n_colors 256 n_elements Values bar_plot Values background p background colors col xstyle 1 ystyle 1 _extra ex 4 End of drawing terminedessin _extra ex return end"); 257 a[255] = new Array("./ToBeReviewed/PLOTS/DESSINE/scontour.html", "scontour.pro", "", " File_comments Same thing that contour but compatible with the whole environnement common pro inclued categories graphics INPUTS:cd IDL contour keyword NOREINITPLT We active it if we do not want environnement variables p x y z to be reinitilalizted by the procedure reinitplt keyword _EXTRA used to pass your keywords uses common pro examples IDL z dist 100 IDL scontour z nlevels 10 small 1 2 1 xstyle 1 ystyle 1 IDL ps history Sebastien Masson smasson lodyc jussieu fr 10 10 1999 version Id: scontour pro 142 2006 07 21 12:47:49Z navarro PRO scontour x y z NOREINITPLT noreinitplt _EXTRA ex compile_opt idl2 strictarrsubs common 1 I reinitializate the graphic environment variables x y et p : if NOT keyword_set NOREINITPLT then reinitplt _extra ex 2 i put the drawing on the screen like on the postcript if ex contains norease and c_orientation keywords we force ex noerase 0 IF chkstru ex overplot EQ 0 THEN placedessin autre _extra ex fiddle when noerase is used with c_orentation call contour with nodata to get the graphic environment then force noerase 0 and overplot 1 IF size ex type EQ 8 THEN BEGIN check if noerase is used with c_orentation alltags strlowcase tag_names ex dummy where alltags EQ noerase count1 dummy where alltags EQ c_orientation count2 IF count1 count2 NE 0 THEN BEGIN case n_params OF 1:contour x nodata _EXTRA ex 2:contour x y nodata _EXTRA ex 3:contour x y z nodata _EXTRA ex endcase ex noerase 0 ex get_extra overplot _extra ex noerase_orientation 1 ENDIF ENDIF 3 je fais mon joli dessin case n_params OF 1:contour x xstyle 1 ystyle 1 _EXTRA ex 2:contour x y xstyle 1 ystyle 1 _EXTRA ex 3:contour x y z xstyle 1 ystyle 1 _EXTRA ex ENDCASE fiddle when noerase is used with c_orentation draw the contour axis IF keyword_set noerase_orientation THEN BEGIN ex noerase 1 ex overplot 0 case n_params OF 1:contour x xstyle 1 ystyle 1 nodata _EXTRA ex 2:contour x y xstyle 1 ystyle 1 nodata _EXTRA ex 3:contour x y z xstyle 1 ystyle 1 nodata _EXTRA ex ENDCASE ENDIF 4 End of drawing terminedessin _extra ex return end"); 258 a[256] = new Array("./ToBeReviewed/PLOTS/DESSINE/splot.html", "splot.pro", "", " file_comments Same thing that plot but compatible with the whole environnement common pro inclued categories graphics INPUTS:cd IDL plot keyword NOREINITPLT We active it if we do not want environnement variables p x y z to be reinitilalizted by the procedure reinitplt keyword _EXTRA used to pass your keywords uses common pro restrictions If NOREINITPLT is not activated all environnement variables p x y z are reinitializtedby the procedure reinitplt examples IDL splot indgen 10 ystyle 1 small 1 2 1 portrait IDL splot indgen 10 ystyle 1 small 1 2 2 noerase IDL ps history Sebastien Masson smasson lodyc jussieu fr 18 10 1999 version Id: splot pro 142 2006 07 21 12:47:49Z navarro PRO splot x y NOREINITPLT noreinitplt _EXTRA ex compile_opt idl2 strictarrsubs common 1 I reinitializate the graphic environment les variables x y et p : if NOT keyword_set NOREINITPLT then reinitplt _extra ex 2 i put the drawing on the screen like on the postcript placedessin autre _extra ex 3 Drawing if n_elements y EQ 0 then plot x xstyle 1 ystyle 1 _EXTRA ex ELSE plot x y xstyle 1 ystyle 1 _EXTRA ex 4 End of drawing terminedessin _extra ex return end"); 259 a[257] = new Array("./ToBeReviewed/PLOTS/DESSINE/tvplus.html", "tvplus.pro", "", " file_comments Enhanced version of tvscl categories quick exploration of 2D arrays INPUTS: param Z2D in required 2D array to visualize param CELLSIZE in optiona This is the size in pixel of the square representing 1 array element By default this size is computed automatically in order that the size of the plotting window do not exceed the screen size If the user specify a large value of cellsize that forces tvplus to create a window larger than the screen a scrolling window will be displayed instead of a regular window Unfortunately the nice fonctionnalities of tvplus are not coded for scrolling window case keyword BOTTOM The lowest color index of the colors to be loaded in the bar default is 0 keyword C_NAN The color number that should be used for the NaN values default value is d n_colors 1 e6 the test to find the masked value is ge abs mask 10 This is necessary to avoid the rounding errors keyword MIN Scalar used to specify the min value of the color bar default is 0 keyword MAX Scalar used to specify the max value of the color bar default is d n_colors tvplus dist 100 history Sebastien Masson smasson lodyc jussieu fr 18 12 98 Aug 2005: quick cleaning english version Id: tvplus pro 142 2006 07 21 12:47:49Z navarro PRO tvplus z2d cellsize BOTTOM bottom C_MASK c_mask C_NAN c_nan WINDOW window MIN min MAX max MASK mask OFFSET offset NOUSEINFOS NOUSEINFOS NCOLORS ncolors NOINTERP nointerp _EXTRA ex compile_opt idl2 strictarrsubs IF n_elements z2d EQ 0 THEN return arr reform float z2d check the size of the input array if size arr 0 NE 2 then begin ras report Input array must have only 2 dimensions and not strtrim size arr n_dimensions 1 return endif def of ncolmax bottom topcol et ncolors ncolmax d n_colors arr truemin min ENDIF ELSE truemin min arr if n_elements max NE 0 then BEGIN arr arr floor x cellsize floor y cellsize floor x cellsize floor y cellsize floor x2 cellsize floor y2 cellsize size arr 2 cellsize 1 x x x2 x x sort x y y y2 y y sort y IF keyword_set OFFSET THEN offset x 0 y 0 offset ELSE offset x 0 y 0 tvplus z2d x 0 :x 1 y 0 :y 1 WINDOW window MIN min MAX max MASK mask C_MASK c_mask C_NAN c_nan NOUSEINFOS OFFSET OFFSET NCOLORS ncolors NOINTERP nointerp BOTTOM bottom _EXTRA ex return END ELSE: endcase ENDWHILE x xenvsauve y yenvsauve p penvsauve x range 1 0 nx cellsize 5 offset 0 y range 1 0 ny cellsize 5 offset 1 return end"); 260 a[258] = new Array("./ToBeReviewed/PLOTS/DIVERS/addaxe.html", "addaxe.pro", "", " file_comments Add an axis when we do an oblique section in pltz pltt or plt1d categories graphic param ENDPOINTS in required Coordonnees of extremities of the section param TYPE in required A string of two characters specifying the type of plot we do param POSFENETRE in required The vector p position corresponding to the frame position of the drawing part of the plot uses common pro history Sebastien Masson smasson lodyc jussieu fr version Id: addaxe pro 142 2006 07 21 12:47:49Z navarro PRO addaxe endpoints type posfenetre _EXTRA ex compile_opt idl2 strictarrsubs common IF strpos type x NE 1 THEN BEGIN IF endpoints 1 EQ endpoints 3 THEN return IF key_onearth THEN BEGIN formeaxe0 lonaxe formeaxe1 lataxe titreaxe latitude ENDIF ELSE BEGIN formeaxe0 formeaxe1 titreaxe j index ENDELSE range endpoints 1 endpoints 3 if endpoints 2 LT endpoints 0 THEN range reverse range ENDIF ELSE BEGIN IF endpoints 0 EQ endpoints 2 THEN return IF key_onearth THEN BEGIN formeaxe0 lataxe formeaxe1 lonaxe titreaxe longitude ENDIF ELSE BEGIN formeaxe0 formeaxe1 titreaxe i index ENDELSE range endpoints 0 endpoints 2 if endpoints 3 LT endpoints 1 THEN range reverse range ENDELSE if type EQ yt then BEGIN axis yaxis 0 ytickformat formeaxe0 color 0 ystyle 1 _EXTRA ex axis yaxis 1 ytickformat formeaxe1 color 0 ystyle 1 ytitle titreaxe yrange range _EXTRA ex ENDIF ELSE BEGIN axis xaxis 0 xtickformat formeaxe0 color 0 xstyle 1 _EXTRA ex axis xaxis 1 xtickformat formeaxe1 color 0 xstyle 1 xtitle titreaxe xrange range _EXTRA ex ENDELSE return end"); 261 a[259] = new Array("./ToBeReviewed/PLOTS/DIVERS/autoscale.html", "autoscale.pro", "", " file_comments We give a min and a max and the procedure send back the good contour interval and labels s value categories graphic param MIN in required A reel number specifying above what value we want to trace a contour param MAX in required A reel number specifying below what value we want to trace a contour param CI out It is a reel number giving the contour interval Use it in CONTOUR with the keyword LEVEL restrictions CI is a multiple of the unity in unity log of 10 It force the number of contour to be even history G Roullet aout 99 gr lodyc jussieu fr version Id: autoscale pro 142 2006 07 21 12:47:49Z navarro PRO autoscale min max ci Estimation of a first CI notice the presence of the floor Inferior round This CI is a multiple of the unity in unity log of 10 compile_opt idl2 strictarrsubs ci max min 20 ci 10 floor alog10 ci n 0 ci0 ci coef 2 2 5 5 10 We test differents CI contour intervals i e 1 2 2 5 5 and 10 until the number of contour is inferior to 30 WHILE ceil max min ci GE 30 DO BEGIN ci ci0 coef n n n 1 ENDWHILE min floor min ci 2 ci 2 max ceil max ci 2 ci 2 nlevels round max min ci We force the number of contour to be even IF nlevels MOD 2 EQ 1 THEN BEGIN nlevels nlevels 1 max max ci END END "); 262 a[260] = new Array("./ToBeReviewed/PLOTS/DIVERS/axis4pltz.html", "axis4pltz.pro", "", " file_comments compute the mask and the axis for a vertical section param MASK in required 3d mask param GLAM in required 2d longitude param GPHI in required 2d latitude param Z in required 1d depth keyword XXAXIS to get the xaxis we need to use in pltbase keyword ZZAXIS to get the yaxis we need to use in pltbase keyword SIN Activate this keyword if we want the x axis to be traced in sinus of the latitude when we make a drawing f y keyword ZRATIO When the drawing has a zoomed part it is the size rapport between the zoomed part hz zoom height and the whole drawing ht total height By default 2 3 keyword _EXTRA used to pass your keywords Others: see pltz history Sebastien Masson smasson lodyc jussieu fr June 24 2002 version Id: axis4pltz pro 142 2006 07 21 12:47:49Z navarro PRO axis4pltz type mask glam gphi z XXAXIS xxaxis ZZAXIS zzaxis SIN sin ZRATIO zratio ZOOM zoom PROFMAX profmax PROFMIN profmin _extra ex include common compile_opt idl2 strictarrsubs cm_4mesh IF NOT keyword_set key_forgetold THEN BEGIN updatekwd ENDIF define the mask used for this section if mask 0 NE 1 AND size mask 0 NE 2 then begin if type EQ xz then mask total mask 2 1 ELSE mask total mask 1 1 endif define xxaxis and yyaxis the axis used for this section nx size glam 1 CASE size gphi 0 OF 1:ny size gphi 1 2:ny size gphi 2 ENDCASE CASE size z 0 OF 1:nz size z 1 2:nz size z 2 ENDCASE if type eq yz then BEGIN IF size gphi 0 EQ 1 then xxaxis gphi ELSE BEGIN IF keyword_set key_irregular THEN BEGIN cln where gphi EQ max gphi 0 xxaxis reform gphi cln MOD nx ENDIF ELSE xxaxis reform gphi 0 ENDELSE if keyword_set sin then xxaxis sin pi 180 xxaxis if size z 0 EQ 1 THEN zzaxis z ELSE zzaxis z ENDIF ELSE BEGIN xxaxis glam 0 if size z 0 EQ 1 then zzaxis z ELSE zzaxis z ENDELSE We project the z axis in 0 1 if not keyword_set zratio then zratio 2 3 if zoom ge profmax then zratio 1 if zoom LT profmax then begin mp projsegment profmin zoom 0 zratio mp zzaxis where zzaxis LE zoom mp 0 zzaxis where zzaxis LE zoom mp 1 mp projsegment zoom profmax zratio 1 mp zzaxis where zzaxis GE zoom mp 0 zzaxis where zzaxis GE zoom mp 1 ENDIF ELSE BEGIN mp projsegment profmin profmax 0 1 mp zzaxis mp 0 zzaxis mp 1 ENDELSE to draw from bottom to top avoid using cell_fill CASE size zzaxis n_dimensions OF 1:zzaxis reverse zzaxis 2:zzaxis reverse zzaxis 2 ENDCASE if mask 0 NE 1 then mask reverse mask 2 return end"); 263 a[261] = new Array("./ToBeReviewed/PLOTS/DIVERS/barrecouleur.html", "barrecouleur.pro", "", " file_comments Overlayeur of colorbar categories utilities restrictions pass all argument we want thanks to _extra history Sebastien Masson smasson lodyc jussieu fr 23 12 98 version Id: barrecouleur pro 142 2006 07 21 12:47:49Z navarro todo seb: mettre les keyword et les param PRO barrecouleur colnumb clbinf clbsup clbdiv NOCOLORBAR nocolorbar CB_TITLE cb_title NOFILL nofill COLOR_c color_c min min max max divisions divisions CB_SUBTITLE cb_subtitle POST post _extra ex compile_opt idl2 strictarrsubs cm_general IF NOT keyword_set key_forgetold THEN BEGIN updatekwd ENDIF if keyword_set min then clbinf min if keyword_set max then clbsup min if keyword_set divisions THEN clbdiv divisions nocolorbar keyword_set nocolorbar keyword_set nofill keyword_set color_c def_myuniquetmpdir IF lmgr demo EQ 1 THEN BEGIN if we are in demo mode we cannot save the parameters in a temporary file cm_demomode_used colorbarparam colnumb:colnumb clbinf:clbinf clbsup:clbsup clbdiv:clbdiv ENDIF ELSE BEGIN save colnumb clbinf clbsup clbdiv file myuniquetmpdir 4colorbar dat ENDELSE if keyword_set nocolorbar then return ancienx x ancieny y ancienp p reinitplt x style 1 y style 1 colorbar cb_color 0 cb_charsize ancienp charsize pscolor keyword_set post division clbdiv min clbinf max clbsup cb_title cb_title discret colnumb _extra ex x ancienx y ancieny p ancienp return end"); 264 a[262] = new Array("./ToBeReviewed/PLOTS/DIVERS/checkfield.html", "checkfield.pro", "", "FUNCTION err_1d type n1 name n2 compile_opt idl2 strictarrsubs return report Error in type type plot with a 1D input array: the number of elements of the input vector strtrim n1 1 is not equal to name strtrim n2 1 simple END FUNCTION err_2d type sz nx ny nz compile_opt idl2 strictarrsubs cm_4mesh cm_4cal return report Error in type type plot with a 2D input array: the array dimensions tostr sz 1:2 are incompatible with the the domain dimensions jpi nx jpj ny jpk nz jpt strtrim jpi 1 strtrim nx 1 strtrim jpj 1 strtrim ny 1 strtrim jpk 1 strtrim nz 1 strtrim jpt 1 simple END FUNCTION err_3d type sz nx ny nz compile_opt idl2 strictarrsubs cm_4mesh cm_4cal return report Error in type type plot with a 3D input array: the array dimensions tostr sz 1:3 are incompatible with the the domain dimensions jpi nx jpj ny jpk nz jpt strtrim jpi 1 strtrim nx 1 strtrim jpj 1 strtrim ny 1 strtrim jpk 1 strtrim nz 1 strtrim jpt 1 simple END file_comments In input of plt pltz pltt and plt1d it check that the field give a size compatible with the domain and if needed average to give us a 2d array if we make a plot of the type: xy xz xt yz yt zt or a 1d array if we make a plot of the type: x y z t categories graphic param FIELD in required A field respecting litchamp pro s criterions See IDL xhelp litchamp keyword BOXZOOM Vector indicating the geographic zone on which we want to cut the map If BOXZOOM has : 1 element : The extraction is made on lon1 lon2 lat1 lat2 0 boxzoom 0 2 elements: The extraction is made on lon1 lon2 lat1 lat2 boxzoom 0 boxzoom 1 4 elements: The extraction is made on Boxzoom 0 max gdept gdepw 5 elements: The extraction is made on Boxzoom 0:3 0 Boxzoom 4 6 elements: The extraction is made on Boxzoom Where lon1 lon2 lat1 lat2 are global variables defined at the last domdef keyword WDEPTH to specify that the field is at W depth instad of T depth automatically activated if vargrid eq W keyword VECTEUR It is a structure composed by 2 elements containing the 2 fields U and V of values of the zonal and meridian component of the vector of the fields to draw These fields can be an array or a structure For example: vecteur matriceu:lec unsurface matricev:lec vnsurface Comment: name of elements of vectors are inconsenquential vecteur u:lec unsurface v:lec vnsurface is also appropriated keyword _EXTRA used to pass your keywords keyword DIREC uses common pro history Sebastien Masson smasson lodyc jussieu fr 08 02 2000 version Id: checkfield pro 142 2006 07 21 12:47:49Z navarro todo seb: mettre les param FUNCTION checkfield field procedure TYPE type BOXZOOM boxzoom DIREC direc NOQUESTION noquestion VECTEUR vecteur WDEPTH wdepth _EXTRA ex compile_opt idl2 strictarrsubs include commons cm_4mesh cm_4cal cm_4data IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF I1 Reading of the field if n_elements field EQ 0 then return report field undefined arr litchamp field first check IF n_elements arr EQ 1 THEN BEGIN if arr EQ 1 then return report Error: input array 1 Maybe the reading did ont perform well simple ELSE return report Error: input array is a scalar simple ENDIF nan total finite arr nan firstzw 1 lastzw lastzw 1 firstzt 1 lastzt lastzt 1 jpk 1 nzt lastzt firstzt 1 ENDELSE updateold ENDIF make the automatic definition of type for pltz if type is not specified IF type EQ z AND procedure EQ pltz THEN if lon2 lon1 gt lat2 lat1 then type xz else type yz make the automatic definition of type for pltt if type is not specified IF type EQ unkownpltt AND procedure EQ pltt THEN if lon2 lon1 gt lat2 lat1 then type xt else type yt verification of the input array size and the value of the type grille 1 1 1 1 nx ny nz firstx firsty firstz lastx lasty lastz WDEPTH wdepth basic checks CASE 1 OF nx EQ 1: IF strpos type x NE 1 THEN return report Error: impossible to make a type type plot with nx 1 simple ny EQ 1: IF strpos type y NE 1 THEN return report Error: impossible to make a type type plot with ny 1 simple nz EQ 1: IF strpos type z NE 1 THEN return report Error: impossible to make a type type plot with nz 1 simple jpt EQ 1: IF strpos type t NE 1 THEN return report Error: impossible to make a type type plot with jpt 1 simple ELSE: ENDCASE is the size of the array compatible with teh domain arr fitintobox temporary arr nx ny nz firstx firsty firstz lastx lasty lastz sz size arr case sz 0 of 0:return arr 1:BEGIN nele n_elements arr case type of t :if jpt NE nele THEN return err_1d type nele jpt jpt x :IF nx NE nele THEN return err_1d type nele nx nx y :IF ny NE nele THEN return err_1d type nele ny ny z :IF nz NE nele THEN return err_1d type nele nz nx ELSE:return report Error: Impossible to make a type plot with a 1D array simple ENDCASE END 2:BEGIN case type of x :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny:direc y xy array sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz:direc z x y z array sz 1 EQ nx AND sz 2 EQ jpt:direc t xt array ELSE:return err_2d type sz nx ny nz endcase end y :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny:direc x xy array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz:direc z x yz array sz 1 EQ ny AND sz 2 EQ jpt:direc t yt array ELSE:return err_2d type sz nx ny nz endcase END z :BEGIN case 1 of sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz:direc x x y z array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz:direc y x yz array sz 1 EQ nz AND sz 2 EQ jpt:direc t zt array ELSE:return err_2d type sz nx ny nz endcase END t :BEGIN case 1 OF sz 1 EQ nx AND sz 2 EQ jpt:direc x xt array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ jpt:direc y x yt array nx EQ 1 AND ny EQ 1 AND sz 1 EQ nz AND sz 2 EQ jpt:direc z x y zt array ELSE:return err_2d type sz nx ny nz ENDCASE END xy :IF sz 1 NE nx OR sz 2 ne ny THEN return err_2d type sz nx ny nz xy array xz :IF sz 1 NE nx OR sz 2 ne nz THEN return err_2d type sz nx ny nz xz array yz :IF sz 1 NE ny OR sz 2 NE nz THEN return err_2d type sz nx ny nz yz array xt :IF sz 1 NE nx OR sz 2 NE jpt THEN return err_2d type sz nx ny nz xt array yt :IF sz 1 NE ny OR sz 2 NE jpt THEN return err_2d type sz nx ny nz yt array zt :IF sz 1 NE nz OR sz 2 NE jpt THEN return err_2d type sz nx ny nz zt array ENDCASE END 3:BEGIN case type of x :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ nz:direc yz xyz array sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz AND sz 3 EQ jpt:direc zt x y zt array sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ jpt:direc yt xyt array ELSE:return err_3d type sz nx ny nz endcase END y :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ nz:direc xz xyz array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz AND sz 3 EQ jpt:direc zt x yzt array sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ jpt:direc xt xyt array ELSE:return err_3d type sz nx ny nz endcase END z :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ nz:direc xy xyz array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz AND sz 3 EQ jpt:direc yt x yzt array sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz AND sz 3 EQ jpt:direc xt x y zt array ELSE:return err_3d type sz nx ny nz endcase END t :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ jpt:direc xy xyt array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz AND sz 3 EQ jpt:direc yz x yzt array sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz AND sz 3 EQ jpt:direc xz x y zt array ELSE:return err_3d type sz nx ny nz endcase END xy :BEGIN case 1 OF sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ nz:direc z xyz array sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ jpt:direc t xyt array ELSE:return err_3d type sz nx ny nz endcase END xz :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ nz:direc y xyz array sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz AND sz 3 EQ jpt:direc t x y zt ELSE:return err_3d type sz nx ny nz endcase END yz :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ nz:direc x xyz array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz AND sz 3 EQ jpt:direc t x yzt ELSE:return err_3d type sz nx ny nz endcase END xt :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ jpt:direc y xyt array sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz AND sz 3 EQ jpt:direc z x y zt array ELSE:return err_3d type sz nx ny nz endcase END yt :BEGIN case 1 of sz 1 EQ nx AND sz 2 EQ ny AND sz 3 EQ jpt:direc x xyt array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz AND sz 3 EQ jpt:direc z x yzt array ELSE:return err_3d type sz nx ny nz endcase END zt :BEGIN case 1 of sz 1 EQ nx AND ny EQ 1 AND sz 2 EQ nz AND sz 3 EQ jpt:direc x x y zt array nx EQ 1 AND sz 1 EQ ny AND sz 2 EQ nz AND sz 3 EQ jpt:direc y x yzt array ELSE:return err_3d type sz nx ny nz ENDCASE END ENDCASE END 4:BEGIN CASE type OF x :direc yzt y :direc xzt z :direc xyt t :direc xyz xy :direc zt xz :direc yt yz :direc xt xt :direc yz yt :direc xz zt :direc xy ENDCASE END ENDCASE IF keyword_set direc THEN BEGIN IF strpos direc t NE 1 OR strpos type t NE 1 THEN arr grossemoyenne temporary arr direc boxzoom localbox NAN nan NODOMDEF WDEPTH wdepth _extra ex ELSE arr moyenne temporary arr direc boxzoom localbox NAN nan NODOMDEF WDEPTH wdepth _extra ex ENDIF RETURN arr END"); 265 265 a[263] = new Array("./ToBeReviewed/PLOTS/DIVERS/checktypeminmax.html", "checktypeminmax.pro", "", " NAME: PURPOSE: CATEGORY: CALLING SEQUENCE: INPUTS: KEYWORD PARAMETERS: OUTPUTS: COMMON BLOCKS:common pro SIDE EFFECTS: RESTRICTIONS: EXAMPLE: MODIFICATION HISTORY:Sebastien Masson smasson lodyc jussieu fr todo seb PRO checktypeminmax procedure TYPE type MIN min MAX max XY xy XZ xz YZ yz XT XT YT YT ZT zt TT tt XX xx YY yy ZZ zz XINDEX xindex YINDEX yindex ENDPOINTS endpoints _extra ex compile_opt idl2 strictarrsubs common case size type type of 0: 7: ELSE:BEGIN vraimin type case size min type of 0:BEGIN min vraimin type 0 END 7:BEGIN type min min vraimin end ELSE:BEGIN case size max type of 0:BEGIN max min min vraimin type 0 END 7:BEGIN type max max min min vraimin end ELSE:BEGIN rien report Probleme dans la definition des arguments en entree de procedure chkwidget return end endcase end endcase end endcase if keyword_set xy then type xy if keyword_set xz then type xz if keyword_set yz then type yz if keyword_set xt then type xt if keyword_set yt then type yt if keyword_set zt then type zt if keyword_set tt then type t if keyword_set xx then type x if keyword_set yy then type y if keyword_set zz then type z if keyword_set type then begin if type EQ plt then type if type EQ pltz then type if type EQ pltt then type if type EQ plt1d then type endif determination du type de plot que l on veut faire if NOT keyword_set type then BEGIN case procedure of plt :type xy pltz :BEGIN if keyword_set endpoints then BEGIN lon1 min endpoints 0 endpoints 2 max lon2 lat1 min endpoints 1 endpoints 3 max lat2 if lon2 lon1 gt lat2 lat1 then type xz else type yz ENDIF ELSE type z END pltt :BEGIN if keyword_set endpoints then BEGIN lon1 min endpoints 0 endpoints 2 max lon2 lat1 min endpoints 1 endpoints 3 max lat2 lat2 max endpoints 1 endpoints 3 if lon2 lon1 gt lat2 lat1 then type xt else type yt ENDIF ELSE type unkownpltt END plt1d :BEGIN if keyword_set endpoints then BEGIN lon1 min endpoints 0 endpoints 2 max lon2 lat1 min endpoints 1 endpoints 3 max lat2 if lon2 lon1 gt lat2 lat1 then type x else type y ENDIF ELSE BEGIN type WHILE type NE x AND type NE y AND type NE z DO BEGIN type xquestion Quel type de plot 1D voulez vous faire x y z ou t chkwidget type strlowcase type endwhile ENDELSE END endcase ENDIF WHILE type NE xy AND type NE xz AND type NE yz AND type NE xt AND type NE yt AND type NE zt AND type NE t AND type NE x AND type NE y AND type NE z AND type NE unkownpltt DO BEGIN type xquestion What kind of plot do you want to do xy xz yz xt yt zt t x y z chkwidget type strlowcase type ENDWHILE return end"); 266 a[264] = new Array("./ToBeReviewed/PLOTS/DIVERS/determineminmax.html", "determineminmax.pro", "", " file_comments Determine the min and the max of a mask array categories Lightening of the writting of plt pltz and pltt param TAB in required The array whose we determine the min and the max param MASK in required The mask array keyword MININ It is a scalar which if it is not defined take the value of VRAIMIN keyword MAXIN It is a scalar which if it is not defined take the value of VRAIMAX keyword ZEROMIDDLE Force the middle of the colorbar to be equal to 0 force max max abs min max and min max keyword _EXTRA used to pass your keywords keyword USETRI To force using triangulation param VRAIMIN out The min of the array param VRAIMAX out The max of the array uses Common pro restrictions Look if the field is constant on the sea history Sebastien Masson smasson lodyc jussieu fr 11 12 98 version Id todo seb: manque les param glam et gphi PRO determineminmax tab mask vraimin vraimax glam gphi MAXIN maxin MININ minin INTERVALLE intervalle usetri usetri ZEROMIDDLE zeromiddle _extra ex compile_opt idl2 strictarrsubs common Type o fthe vertical grid: if vargrid EQ W then nz nzw ELSE nz nzt liste des points mer if size mask 0 EQ 3 then mer mask 0 ELSE mer mask If key_irregular eq 1 we mask also points which are not in the geographic domain defined by lon1 lon2 lat1 lat2 if keyword_set key_irregular AND n_elements glam NE 0 AND n_elements gphi NE 0 then begin dom where glam LT lon1 OR glam GT lon2 OR gphi LT lat1 OR gphi GT lat2 if dom 0 NE 1 then mer dom 0 endif mer where mer eq 1 if mer 0 eq 1 then begin ras report Il n y a que de la terre sur le dessin vraimax 0 vraimin 0 maxin vraimax 1 minin vraimin 1 usetri 0 return endif ma and mi : max and min on ocean points vraimax max tab mer min vraimin _extra ex sameminmax testvar var minin EQ testvar var maxin if n_elements maxin EQ 0 OR sameminmax then maxin vraimax if n_elements minin EQ 0 OR sameminmax then BEGIN if keyword_set intervalle then minin floor vraimin intervalle intervalle ELSE minin vraimin endif if vraimin eq vraimax then BEGIN IF size vraimin type EQ 1 THEN vraimin fix vraimin question Warning: constant filed same value everywhere : strtrim vraimin 2 Shall we make the plot answer report question default_no question if answer then begin maxin vraimax 1 minin vraimin 1 endif ELSE tab 1 ENDIF IF keyword_set zeromiddle THEN BEGIN maxin max abs minin maxin minin maxin ENDIF return end");267 a[265] = new Array("./ToBeReviewed/PLOTS/DIVERS/givewindowsize.html", "givewindowsize.pro", "", " ");268 a[266] = new Array("./ToBeReviewed/PLOTS/DIVERS/meridienparallele.html", "meridienparallele.pro", "", " file_comments Trace some meridians or parallel categories graphic param COUPE The type of drawing we treat uses common pro history Sebastien Masson smasson lodyc jussieu fr 11 12 98 version Id PRO meridienparallele coupe compile_opt idl2 strictarrsubs common case coupe of xy :BEGIN if lon1 lt 180 and lon2 gt 180 then plot 180 180 lat1 lat2 noerase color 0 if lon1 lt 0 and lon2 gt 0 then plot 0 0 lat1 lat2 noerase color 0 if lon1 lt 360 and lon2 gt 360 then plot 360 360 lat1 lat2 noerase color 0 if lat1 lt 0 and lat2 gt 0 then plot lon1 lon2 0 0 noerase color 0 END endcase return end");269 a[267] = new Array("./ToBeReviewed/PLOTS/DIVERS/placecolor.html", "placecolor.pro", "", " file_comments allows to trace the independently from a graph By default trace a color bar of the same type tahn the one present in plt and pltz If max min and divisions are not stipulated then max sup min inf and divisions div categories graphic param POS Vecteur composed by 4 elements giving coordinates of the left bottom corner and of the right up one in cm in which we want to do the color bar keyword _extra used to pass your keywords uses common pro restrictions Only usable for POSTCRIPTs effectuated with plein2dessin history Sebastien Masson smasson lodyc jussieu fr 7 5 98 version Id pro placecolor pos _extra ex include commons compile_opt idl2 strictarrsubs cm_4ps IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF xsave x ysave y psave p reinitplt z invert pos 1 pos mipgsz min page_size max mapgsz if key_portrait eq 1 then begin pos 0 pos 0 mipgsz pos 1 pos 1 mapgsz pos 2 pos 2 mipgsz pos 3 pos 3 mapgsz endif else begin pos 0 pos 0 mapgsz pos 1 pos 1 mipgsz pos 2 pos 2 mapgsz pos 3 pos 3 mipgsz ENDELSE def_myuniquetmpdir IF lmgr demo EQ 1 THEN BEGIN if we are in demo mode we cannot save the parameters in a temporary file cm_demomode_used colnumb colorbarparam colnumb clbinf colorbarparam clbinf clbsup colorbarparam clbsup clbdiv colorbarparam clbdiv ENDIF ELSE BEGIN file myuniquetmpdir 4colorbar dat IF file_test file THEN BEGIN restore file if size ex type EQ 8 then BEGIN if where tag_names ex EQ MIN 0 NE 1 then clbinf ex MIN if where tag_names ex EQ MAX 0 NE 1 then clbsup ex MAX if where tag_names ex EQ DIVISIONS 0 NE 1 then clbdiv ex DIVISIONS ENDIF COLORBAR COLOR 0 DIVISIONS clbdiv DISCRET colnumb cb_color 0 POSITION pos MAX clbsup MIN clbinf cb_charsize p charsize _extra ex ENDIF ENDELSE x xsave y ysave p psave return end");270 a[268] = new Array("./ToBeReviewed/PLOTS/DIVERS/placedessin.html", "placedessin.pro", "", " file_comments Putting into place of the drawing opening of the window or of the PS categories Utilities param TYPEDESSIN It is a chain or characteres specifying what procedure is called by PLACEDESSIN: plt pltz or pltt keyword LANDSCAPE Force the page or the window on the screen to be in lenthened position keyword LCT Is an integer designating the number of the palette of color we want to use for the plot keyword MAP We use it when we want to do a projection This keyword can be of two types: MAP P0lat P0lon Rot For the descrption of these 3 values see the online help of MAP_SET MAP: In this case map is automatically caculated have the value: map 0 lon1 lon2 2 0 Comment: A good way to choose the type of the projection we want to do is to have a look at IDL demo: IDL demo Then choose earth sciences and mapping Comment2: By default it is a cindrical projection which is effectuated with or without the keyword map If we want an other projection MAP must be activated and we have to add the keyword: nom_projection For example for a polar projection centered on the south pole: IDL domdef 180 180 90 45 IDL plt tab stereo map 90 0 0 keyword NOCOLORBAR We active it if we do not want the colorbar keyword NOFILL We active it if we only want contours in black and white with a white background keyword NOERASE We active it to make a drawing without creating a new frame keyword SMALL Vector composed of 3 or 4 elements applyed to make a drawing on a small portion of a page or screen It delimit the zone where the drawing will be done If there is 4 elements: then is constituated of coordinates expressed in cm located from the up and left corner of the page or the window in portrait like in lanscape of the bottom and left corner and of the up and right corner of the drawing zone If there is 3 elements: in this case we divide the page or the screen in small 0 columns and in small 1 lines the drawing made in the box numbered small 2 The numerotation starting up and left by the number 1 and then following the writing direction By default we make the largest drawing we can do conserving the aspect rapport exept when REMPLI is activated keyword PORTRAIT Force the page or the window to be in standing position keyword POST Make a postscript Only works if we made one drawing on the page If we make several drawing use ps keyword REMPLI Force the drawing to occupy the whole space defined by small keyword WINDOW Number of the window on which we want to do the graph Allow to open several windows By default we open IDL0 keyword CB_TITLE The colorbar s title keyword CONTOUR If we want to trace contours of a different field than the one whose we have the colored drawing by examlpe E P in color and QSR in contours It must be a field respecting same caracteristics than the argument number one of plt keyword ENDPOINTS keyword specifing that we want to make a vertical cut in diagonal Then coorinated of extremities of these one are difined by the 4 elements of the vector ENDPOINTS: x1 y1 x2 y2 which are coordinates keyword VECTEUR It is a structure composed by 2 elements containing the 2 fields U and V of values of the zonal and meridian component of the vector of the fields to draw These fields can be an array or a structure For example: vecteur matriceu:lec unsurface matricev:lec vnsurface Comment: name of elements of vectors are inconsenquential vecteur u:lec unsurface v:lec vnsurface is also appropriated keyword DIREC t x y z xys xz yz xyz xt yt zt xyt xzt yzt xyzt Direction on which do averages keyword _EXTRA Used to pass your keywords keyword COLOR_C To draw the contour in color instead of in black with filling in color param POSFENETRE out It is a vector composed by 4 elements containing the position of the frame containing captions and the graph in normalized coorinates Comment: To position the drawing we have to do p position posfenetre after the call of the caliber param POSBAR out Like POSFENETRE but for the color bar Same comment to position the color bar p position posbar uses common pro history Sebastien Masson smasson lodyc jussieu fr 26 4 1999 version Id PRO placedessin typedessin posfenetre posbar BARMARGES barmarges NOCOLORBAR nocolorbar NOFILL nofill COLOR_c color_c CONTOUR contour VECTEUR vecteur PORTRAIT portrait LANDSCAPE landscape SMALL small MARGES marges MAP map REMPLI REMPLI POST post WINDOW window ENDPOINTS endpoints TYPE type BASICMARGES basicmarges NOERASE noerase LCT lct DIREC direc CB_TITLE cb_title _extra ex include common compile_opt idl2 strictarrsubs cm_4ps cm_4mesh IF NOT keyword_set key_forgetold THEN BEGIN updatekwd ENDIF 1 Determination of the size of margins unity number of lines or columns to the left to the right up and down BEWARE in margebar the last element is the right up corner instead of the up margin if n_elements typedessin EQ 0 then typedessin autre if keyword_set basicmarges then begin marge 1 6 2 4 3 if keyword_set marges THEN marge marge marges margebar 1 marge 0 1 marge 1 1 marge 2 8 marge 2 6 if keyword_set barmarges then margebar margebar barmarges ENDIF ELSE BEGIN nocolorbar keyword_set nocolorbar keyword_set nofill keyword_set color_c case typedessin of plt :marge 1 6 2 4 3 pltt :marge 1 6 4 type EQ xt 2 4 4 pltz :marge 1 6 2 4 3 else:marge 1 6 2 4 3 ENDCASE if keyword_set marges THEN marge marge marges if NOT keyword_set barmarges then barmarges replicate 0 4 barmarges 3 barmarges 3 margebar 1 marge 0 1 marge 1 1 2 4 barmarges marge marge 0 0 4 0 keyword_set cb_title IF keyword_set direc THEN marge marge 0 0 2 0 strlowcase direc NE t marge marge 0 0 2 0 keyword_set contour marge marge 0 0 2 0 keyword_set vecteur if n_elements lon1 NE 0 and n_elements lon2 NE 0 and n_elements lat1 NE 0 and n_elements lat2 NE 0 then begin if keyword_set type then marge marge 0 3 type EQ yt AND lon1 NE lon2 0 2 type NE yt AND lat1 NE lat2 keyword_set endpoints ELSE marge marge 0 0 0 2 lat1 NE lat2 keyword_set endpoints endif marge marge 0 0 2 margebar 3 0 1 keyword_set nocolorbar ENDELSE Portrait or landscape IF NOT keyword_set noerase THEN BEGIN CASE 1 OF n_elements portrait NE 0:key_portrait portrait n_elements landscape NE 0:key_portrait 1 landscape ELSE: ENDCASE ENDIF What type of aspect rapport it will be crushed if YXASPECT exist case typedessin of plt :yaspect 1 lat2 lat1 lon2 lon1 pltt :yaspect 1 pltz :yaspect 5 ELSE:yaspect 1 endcase 2 calculation of p position see calibre pro IF NOT keyword_set small then small 1 1 1 if keyword_set map then rempli 1 calibre yaspect marge margebar small posfenetre posbar REMPLI rempli _extra ex p position posfenetre 3 opening of the graphic window or of the postscript case 1 of case of the first drawing on a postcript keyword_set post AND d name ne PS :openps _extra ex case of the first drawing on a screen keyword_set post EQ 0 AND keyword_set noerase EQ 0 AND d name ne PS AND d name ne Z :BEGIN if not keyword_set window then window 0 For the using of ps oups et de vzoom if lmgr demo EQ 0 then BEGIN Are we in the demo mode if journal NE 0 then journal We close te journal if it is open homedir isadirectory io homedir title Bad definition of homedir def_myuniquetmpdir journal myuniquetmpdir idlsave pro We open a new one help recall_commands output listecommande We recuperate the last command listecommande strmid strcompress listecommande 1 2 journal listecommande We write it in the journal ENDIF windsize givewindowsize window window xsize windsize 0 ysize windsize 1 retain 2 _extra ex When we used colors which are coded on 24bit we can not stipulate the background color of a window thanks to p background so we have to to this: if d n_colors gt 256 then begin device decomposed 1 p background ffffff x plot 0 0 nodata xstyle 4 ystyle 4 device decomposed 0 endif END ELSE: endcase if n_elements lct NE 0 then lct lct _extra ex return end");271 a[269] = new Array("./ToBeReviewed/PLOTS/DIVERS/projsegment.html", "projsegment.pro", "", " file_comments project linearly a segment a vector whose boundaries are a b on a vector whose boundaries are c d categories calculation param VECTEUR A vector whose the first element must be the smallest one and the last must be the biggest one param BORNES New boundaries of the vector keyword MP Activate this keyword to the function send back this a vector of 2 elements which are the m and p of the linear projection y mx p used to pass from the a b segment to the c d segment returns A vector whose new boudaries are specified by BORNES examples IDL a indgen 9 IDL print a 0 1 2 3 4 5 6 7 8 IDL print projsegment a 0 80 0 10 20 30 40 50 60 70 80 IDL print projsegment a 0 80 0 10 20 30 40 50 60 70 80 IDL print projsegment a 80 0 80 70 60 50 40 30 20 10 0 history Sebastien Masson smasson lodyc jussieu fr 24 6 1999 version Id FUNCTION projsegment vecteur bornes MP mp compile_opt idl2 strictarrsubs a1 float vecteur 0 b1 float vecteur n_elements vecteur 1 a2 float bornes 0 b2 float bornes 1 if a1 EQ b1 then return 1 m b2 a2 b1 a1 p a2 m a1 if keyword_set mp then return m p ELSE return m vecteur p end");272 a[270] = new Array("./ToBeReviewed/PLOTS/DIVERS/restoreatt.html", "restoreatt.pro", "", " file_comments Allows to reattribuate global variables associated with a field when we give a stucture created by saveatt pro by example categories Utilities param STRUCT in required a structure like the one who read litchamp See IDL xhelp litchamp uses common pro restrictions Change the value if global variables attribute of a field: vargrid varname varunit vardate varexp valmask and time history Sebastien Masson smasson lodyc jussieu fr 15 6 1999 version Id PRO restoreatt struct compile_opt idl2 strictarrsubs common nomelements tag_names struct for i 0 n_tags struct 1 do begin case strlowcase strmid nomelements i 0 1 of g :vargrid strupcase struct i n :varname struct i u :varunit struct i e :varexp struct i m :valmask struct i d :BEGIN if size struct i type EQ 7 THEN BEGIN vardate struct i ENDIF ELSE BEGIN vardate time series time struct i ENDELSE end ELSE:BEGIN ras report Le nom nomelements i ne correspont a aucun element reconnu de la structure C cf IDL xhelp litchamp end endcase endfor return end");273 a[271] = new Array("./ToBeReviewed/PLOTS/DIVERS/rotation.html", "rotation.pro", "", " file_comments Rotate two vectors by a specified amount param X in required orignal data point pairs param Y in required orignal data point pairs param DEG in required degrees to rotate param NX out rotated point pairs param NY out rotated point pairs history Jeff Bennett U of Colorado version Id PRO ROTATION X Y DEG NX NY compile_opt idl2 strictarrsubs ang deg dtor convert to polar coordinates for rotation r sqrt x x y y theta r 0 get angle in for loop so that zero radii will be left as zero angle for i 0 n_elements r 1 do if r i ne 0 then theta i atan y i x i range from pi to pi add rotation angle theta theta ang convert back to rectangular coordinates now rotated nx r cos theta ny r sin theta return end");274 a[272] = new Array("./ToBeReviewed/PLOTS/DIVERS/saveatt.html", "saveatt.pro", "", " file_comments Allows to put in a structure attributes which can be associated with a variable categories utilities returns A structure of the form: n:varname g:vargrid d:vardate e:varexp u:varunit m:valmask l:niveau uses common pro history Sebastien Masson smasson lodyc jussieu fr 15 6 1999 version Id FUNCTION saveatt compile_opt idl2 strictarrsubs common return n:varname g:vargrid d:vardate e:varexp u:varunit m:valmask end");275 a[273] = new Array("./ToBeReviewed/PLOTS/DIVERS/terminedessin.html", "terminedessin.pro", "", " file_comments End the drawing if needed when it is a postscript categories utilities graphic keyword POST Make a postscript Only works if we made one drawing on the page If we make several drawing use ps keyword SMALL Vector composed of 3 or 4 elements applyed to make a drawing on a small portion of a page or screen It delimit the zone where the drawing will be done If there is 4 elements: then is constituated of coordinates expressed in cm located from the up and left corner of the page or the window in portrait like in lanscape of the bottom and left corner and of the up and right corner of the drawing zone If there is 3 elements: in this case we divide the page or the screen in small 0 columns and in small 1 lines the drawing made in the box numbered small 2 The numerotation starting up and left by the number 1 and then following the writing direction By default we make the largest drawing we can do conserving the aspect rapport exept when REMPLI is activated keyword _EXTRA Used to pass your keywords uses common pro history Sebastien Masson smasson lodyc jussieu fr 3 6 1999 version Id PRO terminedessin POST post SMALL small _extra ex compile_opt idl2 strictarrsubs cm_4ps IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF if keyword_set post then BEGIN if keyword_set small then if total small NE page_margins 2 page_margins 0 total page_size page_margins 1 page_margins 3 then return closeps printps endif return end");276 a[274] = new Array("./ToBeReviewed/PLOTS/LABEL/label.html", "label.pro", "", " file_comments Allows to choose the type of the label we want to use at the time of a contour categories graphic param CAS in required Number of the type of the label we want to trace param MIN in required Smallest value for the drawing of the contour param MAX in required Biggest value for the drawing of the contour keyword INTERVALLE Value of an interval betwenn two isolines By default it is calculated to draw 20 isolines In all cases this keyword must be returnedt have a nice caption If levels do not contain regular intervals put it at 1 keyword NLEVEL Number of contour to be drawn By default 20 Active if LABEL 0 or is not specified param NCONTOUR out Number of contour to be drawn param LEVEL_Z2D out Vector containing values of contours we draw param COLNUMB out Vector containing the number of colors which will serve to fill contours uses common pro history Sebastien Masson smasson lodyc jussieu fr 7 5 98 version Id pro label cas min max ncontour level_z2d colnumb NLEVEL nlevel INTERVALLE intervalle STRICTFILL strictfill compile_opt idl2 strictarrsubs common if d name EQ PS OR d name EQ Z then BEGIN old_dname d name thisOS VERSION OS_FAMILY thisOS STRMID thisOS 0 3 thisOS STRUPCASE thisOS CASE thisOS of MAC : SET_PLOT thisOS WIN : SET_PLOT thisOS ELSE: SET_PLOT X ENDCASE p BACKGROUND d n_colors 1 ncontour level_z2d min max min findgen Ncontour Ncontour colnumb ncoul findgen Ncontour Ncontour ncoul 2 ncontour intervalle level_z2d 1 level_z2d 0 end 1: begin a certain number of label from the min to the nearest possible to the max with a constant step by interval ncontour fix max min intervalle ncontour 1 ncontour level_z2d min intervalle findgen Ncontour colnumb ncoul findgen Ncontour Ncontour ncoul 2 ncontour max level_z2d Ncontour 1 intervalle end label to do same sss than dessier 2: begin lct 63 file palette tbl level_z2d 20 25 30 31 32 33 33 5 34 25 findgen 16 ncontour 23 colnumb findgen 23 1 masx 37 75 intervalle 1 return end 3: begin Readinf of intervals palette in the file GMT label_gmt min max intervalle ncoul ncontour level_z2d colnumb end else: begin ras report Le numero de label demande n existe pas end ENDCASE if keyword_set strictfill then begin ncontour ncontour 1 level_z2d level_z2d max colnumb colnumb ncoul 1 endif return end");277 a[275] = new Array("./ToBeReviewed/PLOTS/LABEL/label_date.html", "label_date.pro", "", " Copyright c 1993 1998 Research Systems Inc All rights reserved Unauthorized reproduction prohibited file_comments This function labels axes with dates and times categories Plotting param AXIS in required param INDEX in required param X in required keyword DATE_FORMAT a format string which may contain the following: M for month 3 character abbr N for month 2 digit abbr D for day of month Y for 4 digit year Z for last two digits of year For time: H for Hours 2 digits I for mInutes 2 digits S for Seconds 2 digits is Other characters are passed directly thru For example M D Y prints DEC 11 1993 M 2Y yields DEC 93 D M yields 11 DEC D N Y yields 11 12 1993 M C Y yields DEC on the top line 1993 on the bottom C is the new line graphic command keyword MONTHS The names of the months a twelve element string array If omitted use Jan Feb Dec keyword OFFSET An optional starting offset of the plot Unfortunately single precision floating point is not accurate enough to properly represent Julian times This offset which may be double precision contains an offset that is added to all x values before conversion to Julian date and time uses LABEL_DATE_COM restrictions Only one date axis may be simultaneously active examples For example to plot from Jan 1 1993 to July 12 1994: Start_date julday 1 1 1993 End_date julday 7 12 1994 Dummy LABEL_DATE DATE_FORMAT N D Simple mm dd x findgen end_date 1 start_date start_date Time axis PLOT x sqrt x XTICKFORMAT LABEL_DATE XSTYLE 1 Plot with X axis style set to exact Example with times: For example to plot from 3PM Jan 1 1993 to 5AM Jan 3 1993: Start_date Julday 1 1 1993 Also starting offset Start_time 3 12 24 Starting_time less offset End_time Julday 1 3 1993 Start_date 5 24 Ending date time offset note that the order of operations is important to avoid loss of precision Dummy LABEL_DATE DATE_FORMAT D M C H: I offset Start_date MMM NN HH:MM format x findgen 20 End_time Start_time 19 start_time Time axis PLOT x sqrt x XTICKFORMAT LABEL_DATE XSTYLE 1 history DMS RSI April 1993 Written DMS RSI March 1997 Added Time format Copyright c 1993 1998 Research Systems Inc All rights reserved Unauthorized reproduction prohibited version Id: label_date pro 1 34 2006 07 07 10:19:08Z navarro FUNCTION LABEL_DATE axis index x DATE_FORMAT format MONTHS months OFFSET offs _EXTRA ex compile_opt idl2 strictarrsubs COMMON label_date_com fmt month_chr offset if keyword_set format then begin Save format string if n_elements offs ne 0 then offset double offs else offset 0 0d0 if keyword_set months then month_chr months else month_chr Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec fmt format return 0 endif if n_elements month_chr ne 12 or n_elements fmt le 0 or n_elements offset eq 0 then message Not initialized x1 x offset caldat long x1 month day year _EXTRA ex Get the calendar date from julian frac x1 long x1 time of day from 0 to 1 n strlen fmt out for i 0 n 1 do begin Each format character c strmid fmt i 1 The character if c eq then begin i i 1 c strmid fmt i 1 The function case c of format character M : out out month_chr month 1 N : out out string format i2 2 month D : out out string format i2 2 day Y : out out string format i4 year Z : out out string format i2 2 year mod 100 H : out out string format i2 2 floor 24 frac I : out out string format i2 2 floor 1440 frac mod 60 S : out out string format i2 2 86400L frac mod 60 : out out else : message Illegal character in date format string: fmt endcase endif else out out c endfor return out end");266 a[264] = new Array("./ToBeReviewed/PLOTS/DIVERS/determineminmax.html", "determineminmax.pro", "", " file_comments Determine the min and the max of a mask array categories Lightening of the writting of plt pltz and pltt param TAB in required The array whose we determine the min and the max param MASK in required The mask array keyword MININ It is a scalar which if it is not defined take the value of VRAIMIN keyword MAXIN It is a scalar which if it is not defined take the value of VRAIMAX keyword ZEROMIDDLE Force the middle of the colorbar to be equal to 0 force max max abs min max and min max keyword _EXTRA used to pass your keywords keyword USETRI To force using triangulation param VRAIMIN out The min of the array param VRAIMAX out The max of the array uses Common pro restrictions Look if the field is constant on the sea history Sebastien Masson smasson lodyc jussieu fr 11 12 98 version Id: determineminmax pro 142 2006 07 21 12:47:49Z navarro todo seb: manque les param glam et gphi PRO determineminmax tab mask vraimin vraimax glam gphi MAXIN maxin MININ minin INTERVALLE intervalle usetri usetri ZEROMIDDLE zeromiddle _extra ex compile_opt idl2 strictarrsubs common Type o fthe vertical grid: if vargrid EQ W then nz nzw ELSE nz nzt liste des points mer if size mask 0 EQ 3 then mer mask 0 ELSE mer mask If key_irregular eq 1 we mask also points which are not in the geographic domain defined by lon1 lon2 lat1 lat2 if keyword_set key_irregular AND n_elements glam NE 0 AND n_elements gphi NE 0 then begin dom where glam LT lon1 OR glam GT lon2 OR gphi LT lat1 OR gphi GT lat2 if dom 0 NE 1 then mer dom 0 endif mer where mer eq 1 if mer 0 eq 1 then begin ras report Il n y a que de la terre sur le dessin vraimax 0 vraimin 0 maxin vraimax 1 minin vraimin 1 usetri 0 return endif ma and mi : max and min on ocean points vraimax max tab mer min vraimin _extra ex sameminmax testvar var minin EQ testvar var maxin if n_elements maxin EQ 0 OR sameminmax then maxin vraimax if n_elements minin EQ 0 OR sameminmax then BEGIN if keyword_set intervalle then minin floor vraimin intervalle intervalle ELSE minin vraimin endif if vraimin eq vraimax then BEGIN IF size vraimin type EQ 1 THEN vraimin fix vraimin question Warning: constant filed same value everywhere : strtrim vraimin 2 Shall we make the plot answer report question default_no question if answer then begin maxin vraimax 1 minin vraimin 1 endif ELSE tab 1 ENDIF IF keyword_set zeromiddle THEN BEGIN maxin max abs minin maxin minin maxin ENDIF return end"); 267 a[265] = new Array("./ToBeReviewed/PLOTS/DIVERS/givewindowsize.html", "givewindowsize.pro", "", " todo seb FUNCTION givewindowsize include commons compile_opt idl2 strictarrsubs cm_4ps IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF dimensions get_screen_size RESOLUTION resolution coef floor 1 resolution 0 if NOT keyword_set windowsize_scale then BEGIN windowsize_scale 1 IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF ENDIF coef windowsize_scale coef mipgsz min page_size max mapgsz xsize coef mipgsz key_portrait mapgsz 1 key_portrait ysize coef mipgsz 1 key_portrait mapgsz key_portrait return xsize ysize end"); 268 a[266] = new Array("./ToBeReviewed/PLOTS/DIVERS/meridienparallele.html", "meridienparallele.pro", "", " file_comments Trace some meridians or parallel categories graphic param COUPE The type of drawing we treat uses common pro history Sebastien Masson smasson lodyc jussieu fr 11 12 98 version Id: meridienparallele pro 142 2006 07 21 12:47:49Z navarro PRO meridienparallele coupe compile_opt idl2 strictarrsubs common case coupe of xy :BEGIN if lon1 lt 180 and lon2 gt 180 then plot 180 180 lat1 lat2 noerase color 0 if lon1 lt 0 and lon2 gt 0 then plot 0 0 lat1 lat2 noerase color 0 if lon1 lt 360 and lon2 gt 360 then plot 360 360 lat1 lat2 noerase color 0 if lat1 lt 0 and lat2 gt 0 then plot lon1 lon2 0 0 noerase color 0 END endcase return end"); 269 a[267] = new Array("./ToBeReviewed/PLOTS/DIVERS/placecolor.html", "placecolor.pro", "", " file_comments allows to trace the independently from a graph By default trace a color bar of the same type tahn the one present in plt and pltz If max min and divisions are not stipulated then max sup min inf and divisions div categories graphic param POS Vecteur composed by 4 elements giving coordinates of the left bottom corner and of the right up one in cm in which we want to do the color bar keyword _extra used to pass your keywords uses common pro restrictions Only usable for POSTCRIPTs effectuated with plein2dessin history Sebastien Masson smasson lodyc jussieu fr 7 5 98 version Id: placecolor pro 142 2006 07 21 12:47:49Z navarro pro placecolor pos _extra ex include commons compile_opt idl2 strictarrsubs cm_4ps IF NOT keyword_set key_forgetold THEN BEGIN updatenew ENDIF xsave x ysave y psave p reinitplt z invert pos 1 pos mipgsz min page_size max mapgsz if key_portrait eq 1 then begin pos 0 pos 0 mipgsz pos 1 pos 1 mapgsz pos 2 pos 2 mipgsz pos 3 pos 3 mapgsz endif else begin pos 0 pos 0 mapgsz pos 1 pos 1 mipgsz pos 2 pos 2 mapgsz pos 3 pos 3 mipgsz ENDELSE def_myuniquetmpdir IF lmgr demo EQ 1 THEN BEGIN if we are in demo mode we cannot save the parameters in a temporary file cm_demomode_used colnumb colorbarparam colnumb clbinf colorbarparam clbinf clbsup colorbarparam clbsup clbdiv colorbarparam clbdiv ENDIF ELSE BEGIN file myuniquetmpdir 4colorbar dat IF file_test file THEN BEGIN restore file if size ex type EQ 8 then BEGIN if where tag_names ex EQ MIN 0 NE 1 then clbinf ex MIN if where tag_names ex EQ MAX 0 NE 1 then clbsup ex MAX if where tag_names ex EQ DIVISIONS 0 NE 1 then clbdiv ex DIVISIONS ENDIF COLORBAR COLOR 0 DIVISIONS clbdiv DISCRET colnumb cb_color 0 POSITION pos MAX clbsup MIN clbinf cb_charsize p charsize _extra ex ENDIF ENDELSE x xsave y ysave p psave return end"); 270 a[268] = new Array("./ToBeReviewed/PLOTS/DIVERS/placedessin.html", "placedessin.pro", "", " file_comments Putting into place of the drawing opening of the window or of the PS categories Utilities param TYPEDESSIN It is a chain or characteres specifying what procedure is called by PLACEDESSIN: plt pltz or pltt keyword LANDSCAPE Force the page or the window on the screen to be in lenthened position keyword LCT Is an integer designating the number of the palette of color we want to use for the plot keyword MAP We use it when we want to do a projection This keyword can be of two types: MAP P0lat P0lon Rot For the descrption of these 3 values see the online help of MAP_SET MAP: In this case map is automatically caculated have the value: map 0 lon1 lon2 2 0 Comment: A good way to choose the type of the projection we want to do is to have a look at IDL demo: IDL demo Then choose earth sciences and mapping Comment2: By default it is a cindrical projection which is effectuated with or without the keyword map If we want an other projection MAP must be activated and we have to add the keyword: nom_projection For example for a polar projection centered on the south pole: IDL domdef 180 180 90 45 IDL plt tab stereo map 90 0 0 keyword NOCOLORBAR We active it if we do not want the colorbar keyword NOFILL We active it if we only want contours in black and white with a white background keyword NOERASE We active it to make a drawing without creating a new frame keyword SMALL Vector composed of 3 or 4 elements applyed to make a drawing on a small portion of a page or screen It delimit the zone where the drawing will be done If there is 4 elements: then is constituated of coordinates expressed in cm located from the up and left corner of the page or the window in portrait like in lanscape of the bottom and left corner and of the up and right corner of the drawing zone If there is 3 elements: in this case we divide the page or the screen in small 0 columns and in small 1 lines the drawing made in the box numbered small 2 The numerotation starting up and left by the number 1 and then following the writing direction By default we make the largest drawing we can do conserving the aspect rapport exept when REMPLI is activated keyword PORTRAIT Force the page or the window to be in standing position keyword POST Make a postscript Only works if we made one drawing on the page If we make several drawing use ps keyword REMPLI Force the drawing to occupy the whole space defined by small keyword WINDOW Number of the window on which we want to do the graph Allow to open several windows By default we open IDL0 keyword CB_TITLE The colorbar s title keyword CONTOUR If we want to trace contours of a different field than the one whose we have the colored drawing by examlpe E P in color and QSR in contours It must be a field respecting same caracteristics than the argument number one of plt keyword ENDPOINTS keyword specifing that we want to make a vertical cut in diagonal Then coorinated of extremities of these one are difined by the 4 elements of the vector ENDPOINTS: x1 y1 x2 y2 which are coordinates keyword VECTEUR It is a structure composed by 2 elements containing the 2 fields U and V of values of the zonal and meridian component of the vector of the fields to draw These fields can be an array or a structure For example: vecteur matriceu:lec unsurface matricev:lec vnsurface Comment: name of elements of vectors are inconsenquential vecteur u:lec unsurface v:lec vnsurface is also appropriated keyword DIREC t x y z xys xz yz xyz xt yt zt xyt xzt yzt xyzt Direction on which do averages keyword _EXTRA Used to pass your keywords keyword COLOR_C To draw the contour in color instead of in black with filling in color param POSFENETRE out It is a vector composed by 4 elements containing the position of the frame containing captions and the graph in normalized coorinates Comment: To position the drawing we have to do p position posfenetre after the call of the caliber param POSBAR out Like POSFENETRE but for the color bar Same comment to position the color bar p position posbar uses common pro history Sebastien Masson smasson lodyc jussieu fr 26 4 1999 version Id: placedessin pro 142 2006 07 21 12:47:49Z navarro PRO placedessin typedessin posfenetre posbar BARMARGES barmarges NOCOLORBAR nocolorbar NOFILL nofill COLOR_c color_c CONTOUR contour VECTEUR vecteur PORTRAIT portrait LANDSCAPE landscape SMALL small MARGES marges MAP map REMPLI REMPLI POST post WINDOW window ENDPOINTS endpoints TYPE type BASICMARGES basicmarges NOERASE noerase LCT lct DIREC direc CB_TITLE cb_title _extra ex include common compile_opt idl2 strictarrsubs cm_4ps cm_4mesh IF NOT keyword_set key_forgetold THEN BEGIN updatekwd ENDIF 1 Determination of the size of margins unity number of lines or columns to the left to the right up and down BEWARE in margebar the last element is the right up corner instead of the up margin if n_elements typedessin EQ 0 then typedessin autre if keyword_set basicmarges then begin marge 1 6 2 4 3 if keyword_set marges THEN marge marge marges margebar 1 marge 0 1 marge 1 1 marge 2 8 marge 2 6 if keyword_set barmarges then margebar margebar barmarges ENDIF ELSE BEGIN nocolorbar keyword_set nocolorbar keyword_set nofill keyword_set color_c case typedessin of plt :marge 1 6 2 4 3 pltt :marge 1 6 4 type EQ xt 2 4 4 pltz :marge 1 6 2 4 3 else:marge 1 6 2 4 3 ENDCASE if keyword_set marges THEN marge marge marges if NOT keyword_set barmarges then barmarges replicate 0 4 barmarges 3 barmarges 3 margebar 1 marge 0 1 marge 1 1 2 4 barmarges marge marge 0 0 4 0 keyword_set cb_title IF keyword_set direc THEN marge marge 0 0 2 0 strlowcase direc NE t marge marge 0 0 2 0 keyword_set contour marge marge 0 0 2 0 keyword_set vecteur if n_elements lon1 NE 0 and n_elements lon2 NE 0 and n_elements lat1 NE 0 and n_elements lat2 NE 0 then begin if keyword_set type then marge marge 0 3 type EQ yt AND lon1 NE lon2 0 2 type NE yt AND lat1 NE lat2 keyword_set endpoints ELSE marge marge 0 0 0 2 lat1 NE lat2 keyword_set endpoints endif marge marge 0 0 2 margebar 3 0 1 keyword_set nocolorbar ENDELSE Portrait or landscape IF NOT keyword_set noerase THEN BEGIN CASE 1 OF n_elements portrait NE 0:key_portrait portrait n_elements landscape NE 0:key_portrait 1 landscape ELSE: ENDCASE ENDIF What type of aspect rapport it will be crushed if YXASPECT exist case typedessin of plt :yaspect 1 lat2 lat1 lon2 lon1 pltt :yaspect 1 pltz :yaspect 5 ELSE:yaspect 1 endcase 2 calculation of p position see calibre pro IF NOT keyword_set small then small 1 1 1 if keyword_set map then rempli 1 calibre yaspect marge margebar small posfenetre posbar REMPLI rempli _extra ex p position posfenetre 3 opening of the graphic window or of the postscript case 1 of case of the first drawing on a postcript keyword_set post AND d name ne PS :openps _extra ex case of the first drawing on a screen keyword_set post EQ 0 AND keyword_set noerase EQ 0 AND d name ne PS AND d name ne Z :BEGIN if not keyword_set window then window 0 For the using of ps oups et de vzoom if lmgr demo EQ 0 then BEGIN Are we in the demo mode if journal NE 0 then journal We close te journal if it is open homedir isadirectory io homedir title Bad definition of homedir def_myuniquetmpdir journal myuniquetmpdir idlsave pro We open a new one help recall_commands output listecommande We recuperate the last command listecommande strmid strcompress listecommande 1 2 journal listecommande We write it in the journal ENDIF windsize givewindowsize window window xsize windsize 0 ysize windsize 1 retain 2 _extra ex When we used colors which are coded on 24bit we can not stipulate the background color of a window thanks to p background so we have to to this: if d n_colors gt 256 then begin device decomposed 1 p background ffffff x plot 0 0 nodata xstyle 4 ystyle 4 device decomposed 0 endif END ELSE: endcase if n_elements lct NE 0 then lct lct _extra ex return end"); 271 a[269] = new Array("./ToBeReviewed/PLOTS/DIVERS/projsegment.html", "projsegment.pro", "", " file_comments project linearly a segment a vector whose boundaries are a b on a vector whose boundaries are c d categories calculation param VECTEUR A vector whose the first element must be the smallest one and the last must be the biggest one param BORNES New boundaries of the vector keyword MP Activate this keyword to the function send back this a vector of 2 elements which are the m and p of the linear projection y mx p used to pass from the a b segment to the c d segment returns A vector whose new boudaries are specified by BORNES examples IDL a indgen 9 IDL print a 0 1 2 3 4 5 6 7 8 IDL print projsegment a 0 80 0 10 20 30 40 50 60 70 80 IDL print projsegment a 0 80 0 10 20 30 40 50 60 70 80 IDL print projsegment a 80 0 80 70 60 50 40 30 20 10 0 history Sebastien Masson smasson lodyc jussieu fr 24 6 1999 version Id: projsegment pro 142 2006 07 21 12:47:49Z navarro FUNCTION projsegment vecteur bornes MP mp compile_opt idl2 strictarrsubs a1 float vecteur 0 b1 float vecteur n_elements vecteur 1 a2 float bornes 0 b2 float bornes 1 if a1 EQ b1 then return 1 m b2 a2 b1 a1 p a2 m a1 if keyword_set mp then return m p ELSE return m vecteur p end"); 272 a[270] = new Array("./ToBeReviewed/PLOTS/DIVERS/restoreatt.html", "restoreatt.pro", "", " file_comments Allows to reattribuate global variables associated with a field when we give a stucture created by saveatt pro by example categories Utilities param STRUCT in required a structure like the one who read litchamp See IDL xhelp litchamp uses common pro restrictions Change the value if global variables attribute of a field: vargrid varname varunit vardate varexp valmask and time history Sebastien Masson smasson lodyc jussieu fr 15 6 1999 version Id: restoreatt pro 142 2006 07 21 12:47:49Z navarro PRO restoreatt struct compile_opt idl2 strictarrsubs common nomelements tag_names struct for i 0 n_tags struct 1 do begin case strlowcase strmid nomelements i 0 1 of g :vargrid strupcase struct i n :varname struct i u :varunit struct i e :varexp struct i m :valmask struct i d :BEGIN if size struct i type EQ 7 THEN BEGIN vardate struct i ENDIF ELSE BEGIN vardate time series time struct i ENDELSE end ELSE:BEGIN ras report Le nom nomelements i ne correspont a aucun element reconnu de la structure C cf IDL xhelp litchamp end endcase endfor return end"); 273 a[271] = new Array("./ToBeReviewed/PLOTS/DIVERS/rotation.html", "rotation.pro", "", " file_comments Rotate two vectors by a specified amount param X in required orignal data point pairs param Y in required orignal data point pairs param DEG in required degrees to rotate param NX out rotated point pairs param NY out rotated point pairs history Jeff Bennett U of Colorado version Id: rotation pro 142 2006 07 21 12:47:49Z navarro PRO ROTATION X Y DEG NX NY compile_opt idl2 strictarrsubs ang deg dtor convert to polar coordinates for rotation r sqrt x x y y theta r 0 get angle in for loop so that zero radii will be left as zero angle for i 0 n_elements r 1 do if r i ne 0 then theta i atan y i x i range from pi to pi add rotation angle theta theta ang convert back to rectangular coordinates now rotated nx r cos theta ny r sin theta return end"); 274 a[272] = new Array("./ToBeReviewed/PLOTS/DIVERS/saveatt.html", "saveatt.pro", "", " file_comments Allows to put in a structure attributes which can be associated with a variable categories utilities returns A structure of the form: n:varname g:vargrid d:vardate e:varexp u:varunit m:valmask l:niveau uses common pro history Sebastien Masson smasson lodyc jussieu fr 15 6 1999 version Id: saveatt pro 142 2006 07 21 12:47:49Z navarro FUNCTION saveatt compile_opt idl2 strictarrsubs common return n:varname g:vargrid d:vardate e:varexp u:varunit m:valmask end"); 275 a[273] = new Array("./ToBeReviewed/PLOTS/DIVERS/terminedessin.html", "terminedessin.pro", "", " file_comments End the drawing if needed when it is a postscript categories utilities graphic keyword POST Make a postscript Only works if we made one drawing on the page If we make several drawing use ps keyword SMALL Vector composed of 3 or 4 elements applyed to make a drawing on a small portion of a page or screen It delimit the zone where the drawing will be done If there is 4 elements: then is constituated of coordinates expressed in cm located from the up and left corner of the page or the window in portrait like in lanscape of the bottom and left corner and of the up and right corner of the drawing zone If there is 3 elements: in this case we divide the page or the screen in small 0 columns and in small 1 lines the drawing made in the box numbered small 2 The numerotation starting up and left by the number 1 and then following the writing direction By default we make the largest drawing we can do conserving the aspect rapport exept when REMPLI is activated keyword _EXTRA Used to pass your keywords uses common pro history Sebastien Masson smasson lodyc jussieu fr 3 6 1999 version Id: terminedessin pro 142 2006 07 21 12:47:49Z navarro PRO terminedessin POST post SMALL small _extra ex compile_opt idl2 strictarrsubs cm_4ps IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF if keyword_set post then BEGIN if keyword_set small then if total small NE page_margins 2 page_margins 0 total page_size page_margins 1 page_margins 3 then return closeps printps endif return end"); 276 a[274] = new Array("./ToBeReviewed/PLOTS/LABEL/label.html", "label.pro", "", " file_comments Allows to choose the type of the label we want to use at the time of a contour categories graphic param CAS in required Number of the type of the label we want to trace param MIN in required Smallest value for the drawing of the contour param MAX in required Biggest value for the drawing of the contour keyword INTERVALLE Value of an interval betwenn two isolines By default it is calculated to draw 20 isolines In all cases this keyword must be returnedt have a nice caption If levels do not contain regular intervals put it at 1 keyword NLEVEL Number of contour to be drawn By default 20 Active if LABEL 0 or is not specified param NCONTOUR out Number of contour to be drawn param LEVEL_Z2D out Vector containing values of contours we draw param COLNUMB out Vector containing the number of colors which will serve to fill contours uses common pro history Sebastien Masson smasson lodyc jussieu fr 7 5 98 version Id: label pro 142 2006 07 21 12:47:49Z navarro pro label cas min max ncontour level_z2d colnumb NLEVEL nlevel INTERVALLE intervalle STRICTFILL strictfill compile_opt idl2 strictarrsubs common if d name EQ PS OR d name EQ Z then BEGIN old_dname d name thisOS VERSION OS_FAMILY thisOS STRMID thisOS 0 3 thisOS STRUPCASE thisOS CASE thisOS of MAC : SET_PLOT thisOS WIN : SET_PLOT thisOS ELSE: SET_PLOT X ENDCASE p BACKGROUND d n_colors 1 ncontour level_z2d min max min findgen Ncontour Ncontour colnumb ncoul findgen Ncontour Ncontour ncoul 2 ncontour intervalle level_z2d 1 level_z2d 0 end 1: begin a certain number of label from the min to the nearest possible to the max with a constant step by interval ncontour fix max min intervalle ncontour 1 ncontour level_z2d min intervalle findgen Ncontour colnumb ncoul findgen Ncontour Ncontour ncoul 2 ncontour max level_z2d Ncontour 1 intervalle end label to do same sss than dessier 2: begin lct 63 file palette tbl level_z2d 20 25 30 31 32 33 33 5 34 25 findgen 16 ncontour 23 colnumb findgen 23 1 masx 37 75 intervalle 1 return end 3: begin Readinf of intervals palette in the file GMT label_gmt min max intervalle ncoul ncontour level_z2d colnumb end else: begin ras report Le numero de label demande n existe pas end ENDCASE if keyword_set strictfill then begin ncontour ncontour 1 level_z2d level_z2d max colnumb colnumb ncoul 1 endif return end"); 277 a[275] = new Array("./ToBeReviewed/PLOTS/LABEL/label_date.html", "label_date.pro", "", " Copyright c 1993 1998 Research Systems Inc All rights reserved Unauthorized reproduction prohibited file_comments This function labels axes with dates and times categories Plotting param AXIS in required param INDEX in required param X in required keyword DATE_FORMAT a format string which may contain the following: M for month 3 character abbr N for month 2 digit abbr D for day of month Y for 4 digit year Z for last two digits of year For time: H for Hours 2 digits I for mInutes 2 digits S for Seconds 2 digits is Other characters are passed directly thru For example M D Y prints DEC 11 1993 M 2Y yields DEC 93 D M yields 11 DEC D N Y yields 11 12 1993 M C Y yields DEC on the top line 1993 on the bottom C is the new line graphic command keyword MONTHS The names of the months a twelve element string array If omitted use Jan Feb Dec keyword OFFSET An optional starting offset of the plot Unfortunately single precision floating point is not accurate enough to properly represent Julian times This offset which may be double precision contains an offset that is added to all x values before conversion to Julian date and time uses LABEL_DATE_COM restrictions Only one date axis may be simultaneously active examples For example to plot from Jan 1 1993 to July 12 1994: Start_date julday 1 1 1993 End_date julday 7 12 1994 Dummy LABEL_DATE DATE_FORMAT N D Simple mm dd x findgen end_date 1 start_date start_date Time axis PLOT x sqrt x XTICKFORMAT LABEL_DATE XSTYLE 1 Plot with X axis style set to exact Example with times: For example to plot from 3PM Jan 1 1993 to 5AM Jan 3 1993: Start_date Julday 1 1 1993 Also starting offset Start_time 3 12 24 Starting_time less offset End_time Julday 1 3 1993 Start_date 5 24 Ending date time offset note that the order of operations is important to avoid loss of precision Dummy LABEL_DATE DATE_FORMAT D M C H: I offset Start_date MMM NN HH:MM format x findgen 20 End_time Start_time 19 start_time Time axis PLOT x sqrt x XTICKFORMAT LABEL_DATE XSTYLE 1 history DMS RSI April 1993 Written DMS RSI March 1997 Added Time format Copyright c 1993 1998 Research Systems Inc All rights reserved Unauthorized reproduction prohibited version Id: label_date pro 142 2006 07 21 12:47:49Z navarro FUNCTION LABEL_DATE axis index x DATE_FORMAT format MONTHS months OFFSET offs _EXTRA ex compile_opt idl2 strictarrsubs COMMON label_date_com fmt month_chr offset if keyword_set format then begin Save format string if n_elements offs ne 0 then offset double offs else offset 0 0d0 if keyword_set months then month_chr months else month_chr Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec fmt format return 0 endif if n_elements month_chr ne 12 or n_elements fmt le 0 or n_elements offset eq 0 then message Not initialized x1 x offset caldat long x1 month day year _EXTRA ex Get the calendar date from julian frac x1 long x1 time of day from 0 to 1 n strlen fmt out for i 0 n 1 do begin Each format character c strmid fmt i 1 The character if c eq then begin i i 1 c strmid fmt i 1 The function case c of format character M : out out month_chr month 1 N : out out string format i2 2 month D : out out string format i2 2 day Y : out out string format i4 year Z : out out string format i2 2 year mod 100 H : out out string format i2 2 floor 24 frac I : out out string format i2 2 floor 1440 frac mod 60 S : out out string format i2 2 86400L frac mod 60 : out out else : message Illegal character in date format string: fmt endcase endif else out out c endfor return out end"); 278 278 a[276] = new Array("./ToBeReviewed/PLOTS/LABEL/label_gmt.html", "label_gmt.pro", "", " Apply GMT palette into IDL color intervals system PRO label_gmt min max intervalle ncoul ncontour level_z2d coul compile_opt idl2 strictarrsubs common com_eg IF pal_type NE 2dom THEN BEGIN color defined in lec_pal_gmt pro ncontour ncont_gmt level_z2d levels_gmt coul coul_gmt max max_gmt intervalle 1 ENDIF ELSE BEGIN grey_shade palette case 1 in label IF finite min EQ 0 THEN read Grey shade needs a min max : min max ncontour fix max min intervalle level_z2d min intervalle findgen Ncontour max level_z2d Ncontour 1 intervalle print Number of contour intervals plotting min max ncontour min max print color index IF idx_pal EQ 0 THEN BEGIN build palette red lonarr 99 red 255 red 50:98 long 100 float grey_shade 100 255 IF field origin EQ diff THEN BEGIN difference plot : lighter below first negative interval red 51:98 long 100 float grey_shade_2 100 255 red 1:48 long 100 float grey_shade 100 255 red 50 255 ENDIF first color black last white red 0 red red 99 255 gray scale green red blue red tvlct red green blue ENDIF mid_index max where level_z2d LE fldatt mid coul findgen Ncontour 49 mid_index 2 ENDELSE END "); 279 a[277] = new Array("./ToBeReviewed/PLOTS/LABEL/lataxe.html", "lataxe.pro", "", " file_comments function called by XYZ TICKFORMAT see the help to see how to use it to label axes in latitude categories graphic param AXIS It is the axis number: 0 for X axis 1 for Y axis 2 for Z axis param INDEX It is the tick mark index which starts at 0 param VALUE It is the default tick mark value a floating point number returns A string used automatically to label history Sebastien Masson smasson lodyc jussieu fr 14 10 1999 format of labels version Id FUNCTION lataxe axis index value We put back value in the segment 0 180 compile_opt idl2 strictarrsubs lat value mod 360 if lat lt 0 then lat lat 360 if lat gt 180 then lat lat 180 format of labels: case 1 of lat EQ round lat :fmt i4 10 lat EQ round 10 lat :fmt f6 1 ELSE:fmt f7 2 endcase we write the label if lat le 90 and lat ne 0 then nom string lat format fmt N if lat gt 90 then nom string 180 lat format fmt S if lat eq 0 then nom string lat format fmt return nom end ");280 a[278] = new Array("./ToBeReviewed/PLOTS/LABEL/lonaxe.html", "lonaxe.pro", "", " file_comments function called by XYZ TICKFORMAT see the help to see how to use it to label axes in longitude categories graphic param AXIS It is the axis number: 0 for X axis 1 for Y axis 2 for Z axis param INDEX It is the tick mark index which starts at 0 param VALUE It is the default tick mark value a floating point number returns A string used automatically to label history Sebastien Masson smasson lodyc jussieu fr 14 10 1999 format of labels version Id FUNCTION lonaxe axis index value We put back value in the segment 0 360 compile_opt idl2 strictarrsubs lon value mod 360 if lon lt 0 then lon lon 360 format of labels: case 1 of lon EQ round lon :fmt i4 10 lon EQ round 10 lon :fmt f6 1 ELSE:fmt f7 2 endcase we write the label if lon lt 180 then nom string lon format fmt E if lon gt 180 then nom string 360 lon format fmt W if lon eq 180 then nom string lon format fmt return nom end ");281 a[279] = new Array("./ToBeReviewed/PLOTS/VECTEUR/ajoutvect.html", "ajoutvect.pro", "", " file_comments Overprint vectors in a field traced by plt categories graphic param VECTEUR in required It is a structure with 2 elements containing we 2 matrixes U and V of values of the zonal and meridian component of the fiel of vectors to be traced For ex: vecteur matriceu:lec unsurface matricev:lec vnsurface rq:the name of elements of vector does not have any importance vecteur u:lec unsurface v:lec vnsurface goes well too keyword UNVECTSUR It is a scalar n or an array with 2 elements n1 n2 In the first case we will trace a vector on n following x and y In the second case we will trace a vector on n1 following x and a vector n2 following n2 Comments: To trace all vectors following y and one vector on two following x put unvectsur 2 1 keyword VECTMIN in required Minimum norme of vectors to be traced keyword VECTMAX in required Maximum norme of vectors to be traced keyword _EXTRA Used to pass your keywords uses common pro history Sebastien Masson smasson lodyc jussieu fr 10 3 1999 11 6 1999 compatibilite avec NAN et la lecture des structures version Id pro ajoutvect vecteur vectlegende UNVECTSUR unvectsur VECTMIN vectmin VECTMAX vectmax _EXTRA ex compile_opt idl2 strictarrsubs common tempsun systime 1 For key_performance u litchamp vecteur 0 u checkfield u plt TYPE xy NOQUESTION v litchamp vecteur 1 v checkfield v plt TYPE xy NOQUESTION We recuperate possible informations on fields grilleu litchamp vecteur 0 grid if grilleu EQ then grilleu U grillev litchamp vecteur 1 grid if grillev EQ then grillev V IF grilleu EQ V AND grillev EQ U THEN inverse 1 IF grilleu EQ grillev THEN interpolle 0 ELSE interpolle 1 if keyword_set inverse then begin rien u u v v rien endif We find common points between u and v if interpolle then begin indicexu lindgen jpi firstxu:firstxu nxu 1 indicexv lindgen jpi firstxv:firstxv nxv 1 indicex inter indicexu indicexv indiceyu lindgen jpj firstyu:firstyu nyu 1 indiceyv lindgen jpj firstyv:firstyv nyv 1 indicey inter indiceyu indiceyv nx n_elements indicex ny n_elements indicey indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 extraction of u and v on the appropriated domain case 1 of size u 0 NE 2 OR size v 0 NE 2: return size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indice2d v v indice2d END ELSE:BEGIN ras report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs return end endcase We reshape u and v to make sure that none dimension has been erased if ny EQ 1 then begin u reform u nx ny v reform v nx ny endif construction of u and v at points T a u 0 u u shift u 1 0 2 if NOT keyword_set key_periodic OR nx NE jpi then u 0 a a v 0 v v shift v 0 1 2 if NOT keyword_set key_periodic OR nx NE jpi then v 0 a attribution of the mask and of longitude and latitude arrays We recuperate the complete grid to establish a big mask extensive in the four directions to cover points for which a land point has been considerated do a small drawing vargrid T msku umask indice2d jpi jpj firstzt mskv vmask indice2d jpi jpj firstzt glam glamt indice2d gphi gphit indice2d if ny EQ 1 then begin msku reform msku nx ny mskv reform mskv nx ny glam reform glam nx ny gphi reform gphi nx ny endif We mask u and v et v the long of coasts the place where we can not calculate the average extention of the mask u u msku shift msku 1 0 v v mskv shift mskv 0 1 ENDIF ELSE BEGIN u u tmask firstxt:lastxt firstyt:lastyt firstzt v v tmask firstxt:lastxt firstyt:lastyt firstzt indice2d lindgen jpi jpj indice2d indice2d firstxt:lastxt firstyt:lastyt nx nxt ny nyt endelse tabnorme sqrt u 2 v 2 nan where finite u nan EQ 1 if nan 0 NE 1 then u nan 1e5 nan where finite v nan EQ 1 if nan 0 NE 1 then v nan 1e5 if keyword_set vectmin then BEGIN toosmall where tabnorme lt vectmin if toosmall 0 NE 1 then begin u toosmall 1e5 v toosmall 1e5 ENDIF endif if keyword_set vectmax then BEGIN toobig where tabnorme gt vectmax if toobig 0 NE 1 then begin u toobig 1e5 v toobig 1e5 ENDIF ENDIF Put back of a big value on all points for which we can do the calculation if interpolle then t2 msku shift msku 1 0 mskv shift mskv 0 1 ELSE t2 tmask firstxt:lastxt firstyt:lastyt firstzt if NOT keyword_set key_periodic OR nx NE jpi then t2 0 0 t2 0 0 terre where t2 eq 0 if terre 0 ne 1 then begin u terre 1e5 v terre 1e5 ENDIF trace only one vector one two if keyword_set unvectsur then BEGIN indx is a vector containing number of columns to be selected indy is a vector containing number of lines to be selected if n_elements unvectsur EQ 1 then begin indx where lindgen nx MOD unvectsur 0 eq 0 indy where lindgen ny MOD unvectsur 0 eq 0 ENDIF ELSE BEGIN indx where lindgen nx MOD unvectsur 0 eq 0 indy where lindgen ny MOD unvectsur 1 eq 0 ENDELSE From indx and indy we will construct an array which will give indexes of intersections points of columns specified by indx indicereduit indx replicate 1 n_elements indy nx replicate 1 n_elements indx indy We reduce arrays which will be passed to vecteur u u indicereduit v v indicereduit tabnorme tabnorme indicereduit endif if keyword_set inverse then begin rien u u v v rien endif Drawing of vectors vecteur u v tabnorme indice2d indicereduit missing 1e5 _extra ex We complete the caption if terre 0 ne 1 then mini min tabnorme where t2 eq 1 max maxi nan ELSE mini min tabnorme max maxi nan if litchamp vecteur 0 u NE then vectlegende minmax: mini maxi unite:litchamp vecteur 0 u ELSE vectlegende minmax: mini maxi unite:varunit sortie: if keyword_set key_performance NE 0 THEN print temps ajoutvect systime 1 tempsun return end ");282 a[280] = new Array("./ToBeReviewed/PLOTS/VECTEUR/vecteur.html", "vecteur.pro", "", "FUNCTION cv_cm2normal angle Give the lenth in normal coordinates of a trait oriented of an angle by rapport at the x axis and which must do 1 cm on the drawing Angle can be an array compile_opt idl2 strictarrsubs common What is the lenth in normal coordinates of a trait which will do 1 cm on the paper an which is parallel to x mipgsz min page_size max mapgsz sizexfeuille mipgsz key_portrait mapgsz 1 key_portrait sizeyfeuille mapgsz key_portrait mipgsz 1 key_portrait cm_en_normal 1 sizexfeuille If the aspect rapport of the window is not equal to 1 the lenth in normalized coordinates of a trait of 1 cm vary following the polar angle of this trait aspect sizexfeuille sizeyfeuille cm_en_normal cm_en_normal sqrt 1 aspect 2 1 sin angle 2 return cm_en_normal END PRO normalise u v w normalize the vector compile_opt idl2 strictarrsubs IF n_elements w NE 0 THEN BEGIN norme sqrt u 2 v 2 w 2 ind where norme NE 0 u ind u ind norme ind v ind v ind norme ind w ind w ind norme ind ENDIF ELSE BEGIN norme sqrt u 2 v 2 ind where norme NE 0 u ind u ind norme ind v ind v ind norme ind ENDELSE END file_comments Trace vectors even if they are on a deformed grid on any projection In this way all vectors have a comparable norme on the drawing to be clear a vector which measure 1 cm measure it no matter the projection and is position on the sphere categories graphic param COMPOSANTEU in required It is the u component of the vector to be traced This 2d array has the same dimension that reduitindice2d see further param COMPOSANTEV in required It is the v component of the vector to be traced This 2d array has the same dimension that reduitindice2d see further param INDICE2D in required It in an index allowing to to pass from an jpi or jpj array to the zoom on which we do the drawing param REDUITINDICE2D in required It is an index allowing to pass from an array defined by indice2d to the array for which we really have vectors to be traced to be clear it is for example when we trace only one vector on two keyword CMREF The lenth in cm that must measure the arrow normed normeref By default it is ajusted t othe drawing and included between 5 and 1 5 cm keyword MISSING The value of a missing value Do not use this keyword Fixed at 1e5 by ajoutvect pro keyword NORMEREF The norme of the reference arrow keyword VECTCOLOR The color of the arrow Black by default color 0 keyword VECTTHICK The thick of the arrow 1 by default keyword VECTREFPOS Vector composed of 2 elements specifing the position on DATA coordinates from de begining of the reference vector By default at the right bottom of the drawing keyword VECTREFFORMAT The format to be used to specify the norme of the reference vector keyword NOVECTREF To delete the display of the reference vector keyword _EXTRA Used to pass your keywords uses common pro history Creation : 13 02 98 G Roullet grlod lodyc jussieu fr Modification : 14 01 99 realise la transformation spheriquecartesien G Roullet 12 03 99 verification de la routine G Roullet 8 11 1999: G Roullet et Sebastien Masson smasson lodyc jussieu fr adaptation pour les zoom reverification traitement separe de la direction et de la norme des vecteurs mots cles NORMEREF et CMREF version Id PRO vecteur composanteu composantev normevecteur indice2d reduitindice2d CMREF cmref MISSING missing NORMEREF normeref VECTCOLOR vectcolor VECTTHICK vectthick VECTREFPOS vectrefpos VECTREFFORMAT vectrefformat NOVECTREF novectref _extra extra compile_opt idl2 strictarrsubs common tempsun systime 1 For key_performance taille size composanteu nx taille 1 ny taille 2 if n_elements reduitindice2d EQ 0 then reduitindice2d lindgen nx ny zu composanteu zv composantev norme normevecteur taille size indice2d nxgd taille 1 nygd taille 2 msk replicate 1 nx ny if keyword_set missing then terre where abs zu GE missing 10 ELSE terre 1 if terre 0 NE 1 then BEGIN msk terre 0 zu terre 0 zv terre 0 norme terre 0 ENDIF Stage 1: Given that the directions and the sense that the vector has on the sphere we have to try to determinate this direction and the sense that the vector will have on the screen once it will have been projected In theory: on the sphere a vector in a given point has for direction the tangent at the circle passing by the center of the Earth and by the vector So find the direction once the projection is done it is find the tangent to the curve representing the projection of the circle on the 2d plan at the point representing the projection of the starting point of the shere on the 2d plan In practice we do no know the definition of the curve given by the projection of a circle so find its tangente in a point What we do: In a 3d cartesian reference a We find coorinates of the point T starting of the arrow situed on the sphere b To each point T we determine local directions defined by the grid on this point and on which coordinates u v of the vector refer to These local directions are defined by gradients of glam and gphi Once we have obtain these directions we considare them like orthogonal and by norming them we build an orthonormal reference nu nv on which coordinates u v of the vector refer to In the starting 3d cartesian reference the vector is defined by: V u nu v nv where V nu and nv are 3d vectors and u and v are scalars c To approximate the tangente to the circle by the chord defined by the beginning and the ending of the arrow we will normalize V and then divide it by 100 d This allows us to determine coordinates of extremities of the chord in the 3d cartesian reference We pass them in spherical coordinates in order to recuperate latitude and longitude position of these points on the sphere e We pass coordinates of these points in normalized coordinates then in polar coordinates in order to find the angle and the direction they dertermine on the drawing Stage 1 a coordinates of the point T beginning of the arrow in spherical coordinates glam glamt indice2d reduitindice2d gphi gphit indice2d reduitindice2d Coordinates of the point T beginning of the arrow in the cartesian reference For the sphere we use a sphere with a radius of 1 radius replicate 1 nx ny coord_sphe transpose glam gphi radius r cv_coord from_sphere coord_sphe to_rect degrees x0 reform r 0 nx ny y0 reform r 1 nx ny z0 reform r 2 nx ny Stage 1 b Construction of a vector nu resp nv vectr normed carried by the axis of points u i j and u i 1 j resp v i j and v i j 1 which define for each point on the sphere local directions associated with u and v These vectors define a local orthonormal reference These vectors are built in a cartesian reference cv_coord We have choose a unity radius of the Earth unit definition of nu radius replicate 1 nxgd nygd IF finite glamu 0 gphiu 0 NE 0 THEN coord_sphe transpose glamu indice2d gphiu indice2d radius ELSE coord_sphe transpose glamf indice2d gphit indice2d radius r cv_coord from_sphere coord_sphe to_rect degrees coordinates of points of the grid u in cartesian ux reform r 0 nxgd nygd uy reform r 1 nxgd nygd uz reform r 2 nxgd nygd calculation of nu nux ux shift ux 1 0 nuy uy shift uy 1 0 nuz uz shift uz 1 0 conditions at extremities if NOT keyword_set key_periodic OR nxgd NE jpi then begin nux 0 nux 1 nuy 0 nuy 1 nuz 0 nuz 1 ENDIF reduction of the grid nux nux reduitindice2d nuy nuy reduitindice2d nuz nuz reduitindice2d definition of nv IF finite glamv 0 gphiv 0 NE 0 THEN coord_sphe transpose glamv indice2d gphiv indice2d radius ELSE coord_sphe transpose glamt indice2d gphif indice2d radius r cv_coord from_sphere coord_sphe to_rect degrees coordinates of points of the grid in cartesian vx reform r 0 nxgd nygd vy reform r 1 nxgd nygd vz reform r 2 nxgd nygd calcul of nv nvx vx shift vx 0 1 nvy vy shift vy 0 1 nvz vz shift vz 0 1 conditions at extremities nvx 0 nvx 1 nvy 0 nvy 1 nvz 0 nvz 1 reduction of the grid nvx nvx reduitindice2d nvy nvy reduitindice2d nvz nvz reduitindice2d normalization normalise nux nuy nuz normalise nvx nvy nvz Stage 1 c coordinates of the vector V in the cartesian reference direcx zu nux zv nvx direcy zu nuy zv nvy direcz zu nuz zv nvz normalization of the vector V normalise direcx direcy direcz on divide by 100 direcx direcx 100 direcy direcy 100 direcz direcz 100 Stege 1 d coordinates of the point of the arrow in the cartesian reference x1 x0 direcx y1 y0 direcy z1 z0 direcz coordinates of the point of the arrow in spherical coordinates coord_rect transpose x1 y1 z1 r cv_coord from_rect coord_rect to_sphere degrees glam1 reform r 0 nx ny gphi1 reform r 1 nx ny modification of glams Everything take place at the level of the line of changing of date BEWARE do not cut arrow which goes out of the window test: If it goes out of the frame but thanks to 360 it come in we modify it ind where glam1 LT x range 0 AND glam1 360 LE x range 1 if ind 0 NE 1 then glam1 ind glam1 ind 360 ind where glam1 GT x range 1 AND glam1 360 GE x range 0 if ind 0 NE 1 then glam1 ind glam1 ind 360 ind where glam LT x range 0 AND glam 360 LE x range 1 if ind 0 NE 1 then glam ind glam ind 360 ind where glam GT x range 1 AND glam 360 GE x range 0 if ind 0 NE 1 then glam ind glam ind 360 Stage 1 e r convert_coord glam gphi data to_normal x0 r 0 normal coordinates of the beginning of the array y0 r 1 r convert_coord glam1 gphi1 data to_normal x1 r 0 normal coordinates of the ending of the array Before scaling y1 r 1 tests to avoid that arrows be drawing out of the domain out where x0 LT p position 0 OR x0 GT p position 2 OR y0 LT p position 1 OR y0 GT p position 3 if out 0 NE 1 THEN x0 out values f_nan Following projections there may are points at NaN when we pass in normal coordinates We delete these points nan finite x0 y0 x1 y1 number where nan EQ 1 x0 x0 number x1 x1 number y0 y0 number y1 y1 number msk msk number norme norme number We define the vector direction in the normalize reference dirx x1 x0 diry y1 y0 We pass in polar coordinates to recuperate the angle which wasb the goal of all the first stage dirpol cv_coord from_rect transpose dirx diry to_polar dirpol msk dirpol 0 Stage 2 Now we take care of the norme Automatic putting at the scale if NOT keyword_set cmref then BEGIN mipgsz min page_size max mapgsz sizexfeuille mipgsz key_portrait mapgsz 1 key_portrait sizexfeuille 10 sizexfeuille cmref 5 floor sizexfeuille 10 15 cmref cmref 10 ENDIF if NOT keyword_set normeref then BEGIN value max norme puissance10 10 floor alog10 value normeref puissance10 floor value puissance10 endif cm 1 normeref cmref We modify the array norme to an element having the value cm be represented by a trait of lenght 1 cm on the paper Norme contain the norme of vectors we want to draw norme 1 1 cm norme cv_cm2normal dirpol Stage 3 Now that we have the angle and the norme we recuperate coordinates in rectangular and we draw arrows r cv_coord from_polar transpose dirpol norme to_rect composantex r 0 composantey r 1 x1 x0 composantex y1 y0 composantey Drawing if NOT KEYWORD_SET vectcolor then vectcolor 0 points where msk EQ 1 IF points 0 NE 1 THEN arrow x0 points y0 points x1 points y1 points norm hsize 2 COLOR vectcolor THICK vectthick Draw an arrow at the right bottom of the drawing as a caption if NOT keyword_set novectref then BEGIN dx cmref cv_cm2normal 0 Lenght of the vector of reference in normalzed coordinates if keyword_set vectrefformat then normelegende strtrim string normeref format vectrefformat 1 ELSE normelegende strtrim normeref 1 if keyword_set vectrefpos then begin r convert_coord vectrefpos data to_normal x0 r 0 y0 r 1 ENDIF ELSE BEGIN x0 x window 1 dx r convert_coord d x_ch_size d y_ch_size device to_normal dy 3 r 1 p charsize y0 y window 0 dy ENDELSE arrow x0 y0 x0 dx y0 norm hsize 2 color 0 xyouts x0 y0 normelegende norm align 1 charsize p charsize color 0 endif if keyword_set key_performance NE 0 THEN print temps vecteur systime 1 tempsun return END ");283 a[281] = new Array("./ToBeReviewed/PLOTS/VECTEUR/velovect.html", "velovect.pro", "", " file_comments Produce a two dimensional velocity field plot A directed arrow is drawn at each point showing the direction and magnitude of the field categories Plotting two dimensional param U in required The X component of the two dimensional field U must be a two dimensional array param V in required The Y component of the two dimensional field Y must have the same dimensions as X The vector at point i j has a magnitude of: U i j 2 V i j 2 0 5 and a direction of: ATAN2 V i j U i j param X in optional Optional abcissae values X must be a vector with a length equal to the first dimension of U and V param Y in optional Optional ordinate values Y must be a vector with a length equal to the first dimension of U and V keyword COLOR The color index used for the plot keyword DOTS Set this keyword to 1 to place a dot at each missing point Set this keyword to 0 or omit it to draw nothing for missing points Has effect only if MISSING is specified keyword LENGTH Length factor The default of 1 0 makes the longest U V vector the length of a cell keyword MISSING Missing data value Vectors with a LENGTH greater than MISSING are ignored keyword OVERPLOT Set this keyword to make VELOVECT overplot That is the current graphics screen is not erased no axes are drawn and the previously established scaling remains in effect keyword CLIP keyword NOCLIP keyword _EXTRA Used to pass your keywords restrictions Plotting on the selected device is performed System variables concerning plotting are changed Note: All other keywords are passed directly to the PLOT procedure and may be used to set option such as TITLE POSITION NOERASE etc history DMS RSI Oct 1983 For Sun DMS RSI April 1989 Added TITLE Oct 1990 Added POSITION NOERASE COLOR Feb 91 RES August 1993 Vince Patrick Adv Visualization Lab U of Maryland fixed errors in math August 1993 DMS Added _EXTRA keyword inheritance January 1994 KDB Fixed integer math which produced 0 and caused divide by zero errors December 1994 MWR Added _EXTRA inheritance for PLOTS and OPLOT June 1995 MWR Removed _EXTRA inheritance for PLOTS and changed OPLOT to PLOTS September 1996 GGS Changed denominator of x_step and y_step vars February 1998 DLD Add support for CLIP and NO_CLIP keywords June 1998 DLD Add support for OVERPLOT keyword Copyright c 1983 1998 Research Systems Inc All rights reserved Unauthorized reproduction prohibited version Id: velovect pro 1 34 2006 07 07 10:19:08Z navarro PRO VELOVECT U V X Y Missing Missing Length length Dots dots Color color CLIP clip NOCLIP noclip OVERPLOT overplot _EXTRA extra compile_opt idl2 strictarrsubs on_error 2 Return to caller if an error occurs s size u t size v if s 0 ne 2 then begin baduv: message U and V parameters must be 2D and same size endif if total abs s 0:2 t 0:2 ne 0 then goto baduv if n_params 0 lt 3 then x findgen s 1 else if n_elements x ne s 1 then begin badxy: message X and Y arrays have incorrect size endif if n_params 1 lt 4 then y findgen s 2 else if n_elements y ne s 2 then goto badxy if n_elements missing le 0 then missing 1 0e30 if n_elements length le 0 then length 1 0 mag sqrt u 2 v 2 magnitude Subscripts of good elements nbad 0 of missing points if n_elements missing gt 0 then begin good where mag lt missing if keyword_set dots then bad where mag ge missing nbad endif else begin good lindgen n_elements mag endelse ugood u good vgood v good x0 min x get scaling x1 max x y0 min y y1 max y x_step x1 x0 s 1 1 0 Convert to float Integer math y_step y1 y0 s 2 1 0 could result in divide by 0 maxmag max max abs ugood x_step max abs vgood y_step sina length ugood maxmag cosa length vgood maxmag if n_elements title le 0 then title plot to get axes if n_elements color eq 0 then color p color if n_elements noclip eq 0 then noclip 1 x_b0 x0 x_step x_b1 x1 x_step y_b0 y0 y_step y_b1 y1 y_step if not keyword_set overplot then begin if n_elements position eq 0 then begin plot x_b0 x_b1 y_b1 y_b0 nodata xst yst color color _EXTRA extra endif else begin plot x_b0 x_b1 y_b1 y_b0 nodata xst yst color color _EXTRA extra endelse endif if n_elements clip eq 0 then clip x crange 0 y crange 0 x crange 1 y crange 1 r 3 len of arrow head angle 22 5 dtor Angle of arrowhead st r sin angle sin 22 5 degs length of head ct r cos angle for i 0 n_elements good 1 do begin Each point x0 x good i mod s 1 get coords of start end dx sina i x1 x0 dx y0 y good i s 1 dy cosa i y1 y0 dy xd x_step yd y_step plots x0 x1 x1 ct dx xd st dy yd xd x1 x1 ct dx xd st dy yd xd y0 y1 y1 ct dy yd st dx xd yd y1 y1 ct dy yd st dx xd yd color color clip clip noclip noclip _EXTRA extra endfor if nbad gt 0 then Dots for missing PLOTS x bad mod s 1 y bad s 1 psym 3 color color clip clip noclip noclip _EXTRA extra end");284 a[282] = new Array("./ToBeReviewed/PLOTS/axe.html", "axe.pro", "", " file_comments Manage axes for the different drawings created by plt pltz and pltt categories Graphic environment param COUPE It is a string designating the type of cut to which the axes we create must report For example: xy xt param TEMPSMIN in required In the case where we do cut containing the time dimension we have to specify the beginning of the time s axis in julian days param TEMPSMAX in required In the case where we do cut containing the time dimension we have to specify the end of the time s axis in julian days keyword SIN activated when we trace in sinus of the latitude keyword SEPDATE string separating the diff rent constituents of the date By default it is a return to the linewhen we do a yt zt or a t In the other cases it is a blank keyword DIGITSYEAR 2 to use Z format 2 digits to code years instead of Y format See help of label_date for more informations on Z and Y keyword _EXTRA used to pass your keywords uses common pro restrictions It modify x and y history Sebastien Masson smasson lodyc jussieu fr 11 12 98 Eric Guilyardi types x y z amelioration de l axe temporel version Id PRO axe coupe tempsmin tempsmax REVERSE_X reverse_x REVERSE_Y reverse_y SIN sin SEPDATE sepdate DIGITSYEAR digitsyear _EXTRA ex compile_opt idl2 strictarrsubs common tempsun systime 1 pour key_performance Management of ticks of the time axis in the case of TEMPSMIN and TEMPSMAX are definied divday 0 if n_params EQ 3 then BEGIN if keyword_set sepdate then sep sepdate ELSE if coupe EQ yt OR coupe EQ zt OR coupe EQ t then sep C ELSE sep caldat tempsmin mmin dmin ymin hmin mnmin smin _EXTRA ex caldat tempsmax mmax dmax ymax hmax mnmax smax _EXTRA ex format used for the year 2 or 4 5 digits IF NOT keyword_set digitsyear THEN digitsyear 4 IF digitsyear EQ 2 THEN fmtyr Z ELSE fmtyr Y if ymax EQ ymin then BEGIN if mmin ne mmax then BEGIN Same year but several monthes nticks mmax mmin 1 ticknom lonarr nticks for m 0 nticks 1 do ticknom m julday m mmin 1 ymin _EXTRA ex tminor 6 datfmt M sep fmtyr We check that labels are betwenn TEMPSMIN and TEMPSMAX ticknom ticknom where ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE 1 nticks n_elements ticknom Particular case where we are overlap two monthes if nticks LE 1 then begin nticks dmax jourdsmois mmin ymin 0 dmin 1 2 ticknom lonarr nticks for d 0 nticks 1 do ticknom d julday mmin d 2 dmin ymin _EXTRA ex ticknom ticknom where ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE 1 nticks n_elements ticknom tminor 2 datfmt D sep M endif ENDIF ELSE BEGIN Same year and same month IF dmax dmin 1 GT 4 THEN BEGIN more than 4 days nticks dmax dmin 1 ticknom lonarr nticks for d 0 nticks 1 do ticknom d julday mmin d dmin ymin _EXTRA ex ticknom ticknom where ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE 1 nticks n_elements ticknom tminor 2 datfmt D sep M ENDIF ELSE BEGIN less than 4 days : divday ticks per day divday 4 nticks dmax dmin divday 1 ticknom fltarr nticks for d 0 nticks 1 do ticknom d julday mmin d divday dmin ymin _EXTRA ex d MOD divday float divday tminor 2 datfmt H:00 ENDELSE ENDELSE ENDIF ELSE BEGIN Several years CASE 1 OF ymax ymin 1 LE 10: BEGIN freq 1 tminor 12 datfmt M sep fmtyr end ymax ymin 1 LE 20: BEGIN freq 2 tminor 6 datfmt M sep fmtyr end ymax ymin 1 LE 50: BEGIN freq 5 tminor 5 datfmt M sep fmtyr end ymax ymin 1 LE 100: BEGIN freq 10 tminor 10 datfmt fmtyr end ymax ymin 1 LE 1000: BEGIN freq 50 tminor 5 datfmt fmtyr end ELSE : BEGIN freq 100 tminor 50 datfmt Y end ENDCASE nticks floor ymax ymin freq 1 IF floor ymin freq NE ymin freq THEN yminf floor ymin freq 1 freq ELSE yminf floor ymin freq freq ticknom lonarr nticks for y 0 nticks 1 do ticknom y julday 1 1 yminf y freq _EXTRA ex We check that labels are betwenn TEMPSMIN and TEMPSMAX ticknom ticknom where ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE 1 nticks n_elements ticknom Particular case where we are overlap two monthes if nticks LE 1 then begin nticks mmax 12 mmin 1 ticknom lonarr nticks for m 0 nticks 1 do ticknom m julday m mmin 1 ymin _EXTRA ex ticknom ticknom where ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE 1 nticks n_elements ticknom tminor 6 datfmt M sep fmtyr Particular case where we are overlap two monthes if nticks LE 1 then begin nticks dmax jourdsmois mmin ymin 0 dmin 1 2 ticknom lonarr nticks for d 0 nticks 1 do ticknom d julday mmin d 2 dmin ymin _EXTRA ex ticknom ticknom where ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE 1 nticks n_elements ticknom tminor 2 datfmt D sep M endif endif ENDELSE toto label_date 0 0 0 DATE_FORMAT datfmt _EXTRA ex if chkstru ex DATE_FORMAT then ex DATE_FORMAT ENDIF Definition of axes parameters case by case case coupe of xy :BEGIN if keyword_set reverse_x then x range lon2 lon1 ELSE x range lon1 lon2 if keyword_set reverse_y then y range lat2 lat1 ELSE y range lat1 lat2 IF key_onearth THEN x tickformat lonaxe IF key_onearth THEN y tickformat lataxe END yz :BEGIN if keyword_set reverse_x then x range lat2 lat1 ELSE x range lat1 lat2 if keyword_set reverse_y then y range 0 1 ELSE y range 1 0 if keyword_set sin then BEGIN number of ticks by default plot 0 0 noerase nodata xtick_get xaxe We increase this number to it be around 10 ticks n_elements xaxe 1 ticks ticks 1 2 4 8 ticks ticks sort abs ticks 10 0 We recuperate the x axis for this new number of ticks plot 0 0 xticks ticks noerase nodata xtick_get xaxe x ticks ticks x tickv sin pi 180 xaxe tickname strarr ticks 1 for i 0 ticks do tickname i lataxe 0 0 xaxe i x tickname tickname x range sin pi 180 x range endif end xz :BEGIN if keyword_set reverse_x then x range lon2 lon1 ELSE x range lon1 lon2 if keyword_set reverse_y then y range 0 1 ELSE y range 1 0 end xt : begin if keyword_set reverse_x then x range lon2 lon1 ELSE x range lon1 lon2 if keyword_set reverse_y then y range tempsmax tempsmin tempsmin ELSE y range tempsmin tempsmax tempsmin IF key_onearth THEN x tickformat lonaxe result LABEL_DATE DATE_FORMAT M sep fmtyr y tickformat LABEL_DATE y tickname LABEL_DATE 1 0 ticknom _EXTRA ex y ticklen 1 y gridstyle 2 y ticks nticks 1 y tickv ticknom tempsmin y minor tminor IF divday GT 0 THEN y title Time from strtrim dmin 1 def_month 1m strtrim mmin 1 strtrim ymin 1 end yt : begin if keyword_set reverse_x then x range tempsmax tempsmin tempsmin ELSE x range tempsmin tempsmax tempsmin if keyword_set reverse_y then y range lat2 lat1 ELSE y range lat1 lat2 IF key_onearth THEN y tickformat lataxe x tickname LABEL_DATE 0 0 ticknom _EXTRA ex x ticklen 1 x gridstyle 2 x ticks nticks 1 x tickv ticknom tempsmin x minor tminor IF divday GT 0 THEN y title Time from strtrim dmin 1 def_month 1m strtrim mmin 1 strtrim ymin 1 end zt : begin if keyword_set reverse_x then x range tempsmax tempsmin tempsmin ELSE x range tempsmin tempsmax tempsmin if vargrid EQ W then gdep gdepw 0:nzw 1 ELSE gdep gdept 0:nzt 1 x tickname LABEL_DATE 0 0 ticknom _EXTRA ex x ticklen 1 x gridstyle 2 x ticks nticks 1 x tickv ticknom tempsmin x minor tminor IF divday GT 0 THEN y title Time from strtrim dmin 1 def_month 1m strtrim mmin 1 strtrim ymin 1 end t : BEGIN if keyword_set reverse_x then x range tempsmax tempsmin tempsmin ELSE x range tempsmin tempsmax tempsmin x tickname LABEL_DATE 0 0 ticknom _EXTRA ex x ticklen 1 x gridstyle 2 x ticks nticks 1 x tickv ticknom tempsmin x minor tminor IF divday GT 0 THEN y title Time from strtrim dmin 1 def_month 1m strtrim mmin 1 strtrim ymin 1 end x : begin x range lon1 lon2 IF key_onearth THEN x tickformat lonaxe END y : begin if keyword_set sin then BEGIN Number of ticks by default plot 0 0 nodata noerase xstyle 5 ystyle 5 xtick_get xaxe We increase this number to it be around 10 ticks n_elements xaxe 1 ticks ticks 1 2 4 8 ticks ticks sort abs ticks 10 0 We recuperate the x axis for this new number of ticks plot 0 0 xticks ticks nodata noerase xstyle 5 ystyle 5 xtick_get xaxe x ticks ticks x tickv sin pi 180 xaxe tickname strarr ticks 1 for i 0 ticks do tickname i lataxe 0 0 xaxe i x tickname tickname x range sin pi 180 x range ENDIF ELSE x range lat1 lat2 IF key_onearth THEN x tickformat lataxe END z : begin if vargrid EQ W then gdep gdepw 0:nzw 1 ELSE gdep gdept 0:nzt 1 if keyword_set reverse_y then y range gdep 0 gdep n_elements gdep 1 ELSE y range gdep n_elements gdep 1 gdep 0 END endcase if keyword_set key_performance THEN print temps axe systime 1 tempsun return end");285 a[283] = new Array("./ToBeReviewed/PLOTS/legende.html", "legende.pro", "", " file_comments Provide caption categories graphic annex param MI in required The min of the drawing param MA in required The max of the plot param COUPE Charactere containing two letters giving the type of the cut for example: xz keyword CONTOUR If we want to trace contours of a different field than the one whose we have the colored drawing by examlpe E P in color and QSR in contours It must be a field respecting same caracteristics than the argument number one of plt keyword ENDPOINTS Used when we do vertical cuts in diagonal keyword _EXTRA used to pass your keywords uses common pro restrictions The use of the global variable langage allows to change the language and the caption easily history Sebastien Masson smasson lodyc jussieu fr 14 8 98 Eric Guilyardi ericg lodyc jussieu fr GB version 11 6 99 version Id pro legende mi ma coupe CONTOUR contour ENDPOINTS endpoints DIREC direc VECTLEGENDE vectlegende INTERVALLE intervalle TYPE_YZ type_yz VARNAME2 varname2 NPTS npts _EXTRA ex compile_opt idl2 strictarrsubs common tempsun systime 1 pour key_performance grille 1 1 1 gdep nx ny nz English legends fmt_mm f12 2 fmt_bt f7 1 colorf contourf Contour plot vecteurf Vector norm expf datef fieldf depthf endpointsf Diag Section zonalf IF key_onearth THEN latintf latitudes in ELSE latintf j index in timintf time in onf depthf2 Depth m Meridf Zonal Mean IF key_onearth THEN lonintf longitudes in ELSE lonintf i in hovxt XT plot diaghovxt Diag XT plot depintf depths in timef Time hovyt YT plot diaghovyt Diag YT plot hovzt ZT plot hovt IF key_onearth THEN lontitle Longitude ELSE lontitle i index IF key_onearth THEN lattitle Latitude ELSE lattitle j index vertz depthf2 legniv m IF keyword_set TYPE_YZ THEN BEGIN IF type_yz EQ hPa THEN vertz hPa IF type_yz EQ hPa THEN legniv hPa ENDIF Start legende definition and possible complement of p subtitle if n_elements varunit ne 0 then unite varunit else unite p subtitle colorf unite : Min strtrim string format fmt_mm mi 2 Max strtrim string format fmt_mm ma 2 if keyword_set intervalle then BEGIN if intervalle NE 1 then p subtitle p subtitle Int strtrim string format fmt_mm intervalle 2 endif if size contour type EQ 8 then BEGIN it is a structure unite contour 1 p subtitle p subtitle C contourf unite : Min strtrim string format fmt_mm contour 0 0 2 Max strtrim string format fmt_mm contour 0 1 2 if contour inter NE 1 then p subtitle p subtitle Int strtrim string format fmt_mm contour inter 2 ENDIF if size vectlegende type EQ 8 then begin unite vectlegende 1 p subtitle p subtitle C vecteurf unite : Min strtrim string format fmt_mm vectlegende 0 0 2 Max strtrim string format fmt_mm vectlegende 0 1 2 endif Shapping of subdomain s dimensions auquel s applique la legende la1 strtrim string format fmt_bt lat1 2 la2 strtrim string format fmt_bt lat2 2 lo1 strtrim string format fmt_bt lon1 2 lo2 strtrim string format fmt_bt lon2 2 pr1 strtrim string format fmt_bt vert1 2 pr2 strtrim string format fmt_bt vert2 2 Management of the date auquel s applique la legende if n_elements vardate EQ 0 then vardate if NOT keyword_set direc then direc if strpos direc t NE 1 then begin svardate strtrim vairdate time 0 1 strtrim vairdate time jpt 1 1 ENDIF ELSE svardate vardate case on the caes where the caption is applied auquel s applique la legendecase coupe of xy :begin if strupcase vargrid EQ W then firstz firstzw ELSE firstz firstzt if strpos direc z EQ 1 AND firstz NE 0 then BEGIN prof strtrim round gdep 0 1 p title expf varexp datef svardate fieldf varname depthf prof legniv ENDIF ELSE p title expf varexp datef svardate fieldf varname x title lontitle y title lattitle end xz :begin IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim ny 1 IF long n LE 3 THEN zonalf Section if keyword_set endpoints AND lat1 NE lat2 then p title endpointsf varexp datef svardate fieldf varname ELSE p title zonalf varexp datef svardate fieldf varname x title lontitle if keyword_set endpoints AND lat1 EQ lat2 then BEGIN IF key_onearth THEN x title x title at strtrim lataxe 0 0 lat1 1 ELSE x title x title at j index strtrim lat1 1 ENDIF y title depthf2 end yz :begin IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim nx 1 IF long n LE 3 THEN meridf if keyword_set endpoints AND lon1 NE lon2 then p title endpointsf varexp datef svardate fieldf varname ELSE p title meridf varexp datef svardate fieldf varname y title vertz x title lattitle if keyword_set endpoints AND lon1 EQ lon2 then BEGIN IF key_onearth THEN x title x title at strtrim lonaxe 0 0 lon1 1 ELSE x title x title at i index strtrim lon1 1 ENDIF end xt :begin IF keyword_set npts THEN n strtrim npts 1 if keyword_set endpoints AND lat1 NE lat2 then p title diaghovxt varexp fieldf varname ELSE p title hovxt varexp fieldf varname IF time size time 0 1 time 0 GE 10 THEN y title timef x title lontitle if keyword_set endpoints AND lat1 EQ lat2 then BEGIN IF key_onearth THEN x title x title at strtrim lataxe 0 0 lat1 1 ELSE x title x title at j index strtrim lat1 1 ENDIF end yt :begin IF keyword_set npts THEN n strtrim npts 1 if keyword_set endpoints AND lon1 NE lon2 then p title diaghovyt varexp fieldf varname ELSE p title hovyt varexp fieldf varname IF time size time 0 1 time 0 GE 10 THEN x title timef y title lattitle if keyword_set endpoints AND lon1 EQ lon2 then BEGIN IF key_onearth THEN x title x title at strtrim lonaxe 0 0 lon1 1 ELSE x title x title at i index strtrim lon1 1 ENDIF end zt :begin IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim nx ny 1 p title hovzt varexp fieldf varname y title depthf2 IF time size time 0 1 time 0 GE 10 THEN x title timef end t :begin IF keyword_set npts THEN n strtrim npts 1 ELSE BEGIN if keyword_set integration3d then n strtrim nx ny nz 1 ELSE n strtrim nx ny 1 ENDELSE p title hovt varexp fieldf varname y title varname IF time size time 0 1 time 0 GE 10 THEN x title timef end x :begin IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim ny nz 1 if keyword_set endpoints AND lat1 NE lat2 then p title endpointsf varexp datef svardate fieldf varname ELSE p title varexp datef svardate fieldf varname x title lontitle if keyword_set endpoints AND lat1 EQ lat2 then BEGIN IF key_onearth THEN x title x title at strtrim lataxe 0 0 lat1 1 ELSE x title x title at j index strtrim lat1 1 ENDIF y title varname end y :begin IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim nx nz 1 if keyword_set endpoints AND lon1 NE lon2 then p title endpointsf varexp datef svardate fieldf varname ELSE p title varexp datef svardate fieldf varname x title lattitle if keyword_set endpoints AND lon1 EQ lon2 then BEGIN IF key_onearth THEN x title x title at strtrim lonaxe 0 0 lon1 1 ELSE x title x title at i index strtrim lon1 1 ENDIF y title varname end z :begin IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim nx ny 1 p title varexp datef svardate fieldf varname y title depthf2 x title varname end yfx : BEGIN IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim nx ny nz 1 p title varexp datef svardate varunit x title varname2 y title varname END else: ENDCASE if keyword_set direc then BEGIN if strpos direc x NE 1 then p subtitle lonintf lo1 lo2 onf strtrim nx 1 points C p subtitle if strpos direc y NE 1 then BEGIN if strpos p subtitle EQ 1 then p subtitle latintf la1 la2 onf strtrim ny 1 points C p subtitle ELSE p subtitle latintf la1 la2 onf strtrim ny 1 points p subtitle ENDIF if strpos direc z NE 1 AND nz NE 1 OR coupe NE xy then BEGIN if strpos p subtitle EQ 1 then p subtitle depintf pr1 pr2 onf strtrim nz 1 points C p subtitle ELSE p subtitle depintf pr1 pr2 onf strtrim nz 1 points p subtitle ENDIF ENDIF if keyword_set endpoints AND coupe NE yt AND lat1 NE lat2 then p title p title C C if keyword_set key_performance THEN print temps legende systime 1 tempsun return end");286 a[284] = new Array("./ToBeReviewed/PLOTS/plotsym.html", "plotsym.pro", "", " file_comments function to make plotting symbols much easier categories Graphic Keyword circle circle symbol Keyword TRIANGLE triangle symbol Keyword DIAMOND diamond symbold Keyword BOX box symbol Keyword LINE line symbol Keyword SCALE scales the symbol Keyword ANGLE angle the symbol should be rotated Keyword _EXTRA extra keywords for usersym These are thick color and fill history Written by: Ronn Kling Ronn Kling Consulting 7038 Westmoreland Dr Warrenton VA 20187 klingrl juno com copyright 1999 all rights reserved version Id function plotsym circle circle triangle triangle diamond diamond angle angle box box line line scale scale _extra extra compile_opt idl2 strictarrsubs if not keyword_set scale then scale 1 0 if not keyword_set angle then angle 0 0 if keyword_set circle then begin theta findgen 30 29 360 endif else if keyword_set triangle then begin theta 30 90 210 30 endif else if keyword_set diamond then begin theta 0 90 180 270 0 endif else if keyword_set box then begin theta 315 45 135 225 315 endif else if keyword_set line then begin theta 180 0 endif theta theta angle x cos theta dtor scale y sin theta dtor scale usersym x y _extra extra return 8 end");287 a[285] = new Array("./ToBeReviewed/PLOTS/reinitplt.html", "reinitplt.pro", "", " file_comments This procedure will reinitialise all or a selection ofthe system plot variables categories plot Utility keyword X clear the appropriate variable keyword Y clear the appropriate variable keyword Z clear the appropriate variable keyword P clear the appropriate variable keyword ALL Clear all this is equivalent to x y z p keyword INVERT Invert the logic Clear all unselected variables Therefore clearplt all invert does nothing uses common pro restrictions The sytem plot variables are changed history Written by: Trevor Harris Physics Dept University of Adelaide July 1990 Sebastien Masson 7 5 98 version Id pro reinitplt all all x x y y z z p p invert invert compile_opt idl2 strictarrsubs clearx 0 cleary 0 clearz 0 clearp 0 if keyword_set x then clearx 1 if keyword_set y then cleary 1 if keyword_set z then clearz 1 if keyword_set p then clearp 1 if keyword_set all or not keyword_set x and not keyword_set y and not keyword_set z and not keyword_set p then begin clearx 1 cleary 1 clearz 1 clearp 1 endif if keyword_set invert then begin clearx not clearx cleary not cleary clearz not clearz clearp not clearp endif if clearx then begin x charsize 0 x GRIDSTYLE 0 X MARGIN 10 3 X MINOR 0 X OMARGIN 0 0 x region 0 X RANGE 0 x STYLE 5 x tick 1 x TICKFORMAT x TICKLEN 0 x tickname x ticks 0 X TICKV 0 X TICKV 1 x title x TYPE 0 endif if cleary then begin y charsize 0 y GRIDSTYLE 0 Y MARGIN 10 3 Y MINOR 0 Y OMARGIN 0 0 y region 0 Y RANGE 0 y STYLE 5 y tick 1 y TICKFORMAT y TICKLEN 0 y tickname y ticks 0 Y TICKV 0 Y TICKV 1 y title y TYPE 0 endif if clearz then begin z charsize 0 z GRIDSTYLE 0 Z MARGIN 10 3 Z MINOR 0 Z OMARGIN 0 0 z region 0 Z RANGE 0 z STYLE 1 z tick 1 z TICKFORMAT z TICKLEN 0 z tickname z ticks 0 Z TICKV 0 Z TICKV 1 z title z TYPE 0 endif if clearp then begin p BACKGROUND d n_colors 1 255 p CHARSIZE 1 p CHARTHICK 0 p LINESTYLE 0 p MULTI replicate 0 5 p NOERASE 0 p POSITION 0 p region 0 p title p subtitle p ticklen 0 02 p thick 0 1 p color 0 endif return end ");288 a[286] = new Array("./ToBeReviewed/PLOTS/style.html", "style.pro", "", " file_comments Choose the way to trace isolines categories graphic param LABSTYLE in required Number to which the style of drawing choosen refer to param LEVEL_Z2D in required Vector containing values of isolignes to be traced param LINESTYLE out Vector used to define the isocontour s style Comment: remenber: Index Linestyle 0 Solid 1 Dotted 2 Dashed 3 Dash Dot 4 Dash Dot Dot Dot 5 Long Dashes param THICK out Vector defining the thick of the isoline history Sebastien Masson smasson lodyc jussieu fr version Id pro style labstyle level_z2d linestyle thick compile_opt idl2 strictarrsubs case labstyle of 0: begin series: Two thin continuous lines one boldface continuous line thick 1 1 2 linestyle 0 return end 1: begin series: Before the middle of levels: thin dash Then thin continuous trait If the middle of the drawing is drawn it is in boldface continuous trait impair n_elements level_z2d 2 fix n_elements level_z2d 2 a replicate 0 fix n_elements level_z2d 2 b replicate 1 fix n_elements level_z2d 2 c replicate 2 fix n_elements level_z2d 2 if impair then begin thick b 2 b linestyle c 0 a endif else begin thick 0 linestyle c a endelse return end 2: begin series: Before the sill defined by answering to a question : thin dash Then thin continuous trait If the sill is drawn it is in boldface continuous trait seuil xquestion Quelle est la limite tirets trait continu 0 seuil float seuil rien where level_z2d lt seuil n a replicate 0 n_elements level_z2d n c replicate 2 n if seuil eq level_z2d n then begin thick replicate 1 n 2 replicate 1 n_elements level_z2d 1 n linestyle c a endif else begin thick 0 linestyle c a endelse return end 3: begin n n_elements level_z2d seuil level_z2d 1 n 2 thick intarr n thick indgen n 4 4 1 thick indgen n 4 4 1 1 thick indgen n 4 4 2 2 thick indgen n 4 4 3 1 linestyle intarr n linestyle indgen n 4 4 3 linestyle indgen n 4 4 1 0 linestyle indgen n 4 4 2 0 linestyle indgen n 4 4 3 0 labels intarr n labels indgen n 2 2 1 labels n 2 0 return end 4: begin Boldface continuous trait seuil 1 e 6 thick replicate 5 n_elements level_z2d linestyle 0 rien where abs level_z2d max abs level_z2d LT seuil if rien 0 NE 1 then thick rien 0 3 end else: begin ras report Le numero de labstyle demande n existe pas stop end endcase return end");289 a[287] = new Array("./ToBeReviewed/PLOTS/symbols.html", "symbols.pro", "", " file_comments Create custom plotting symbols param NSYM in required 1 open circle 2 filled circle 3 arrow pointing right 4 arrow pointing left 5 arrow pointing up 6 arrow pointing down 7 arrow pointing up and left 45 degrees 8 arrow pointing down and left 9 arrow pointing down and right 10 arrow pointing up and right 11 through 18 are bold versions of 3 through 10 19 horizontal line 20 box 21 diamond 22 triangle 30 filled box 31 filled diamond 32 filled triangle param SCALE in required size of symbols keyword COLOR color of symbols restrictions The desired symbol is stored in the user buffer and will be plotted if P PSYM 8 history Jeff Bennett U of Colorado 198 version Id pro symbols nsym scale color col compile_opt idl2 strictarrsubs on_error 2 fill 0 case 1 of nsym le 2 : begin circles for large scales increase number of points for res if scale ge 4 then a findgen 25 else a findgen 13 a a 3 14159 6 0 12 or 24 pi 6 xarr cos a yarr sin a if nsym eq 2 then fill 1 end nsym ge 3 nsym le 18 : begin arrow heads xarr fltarr 5 yarr xarr xarr 1 10 xarr 2 6 yarr 2 2 nsyms greater than 10 should be filled arrows if nsym gt 10 then begin xarr 3 6 xarr 4 10 yarr 3 2 fill 1 endif else begin xarr 3 10 xarr 4 6 yarr 4 2 endelse case 1 of nsym eq 3 : dummy 0b nsym eq 4 : xarr 1 xarr nsym eq 11 nsym eq 12 : begin xarr extrac xarr 0 11 yarr extrac yarr 0 11 yarr 6 0 5 xarr 7 6 yarr 7 0 5 xarr 8 6 yarr 8 0 5 yarr 9 0 5 if nsym eq 12 then begin rotation xarr yarr 180 nx ny xarr nx yarr ny endif end nsym eq 5 nsym eq 13 : begin temp xarr xarr yarr yarr temp end nsym eq 6 nsym eq 14 : begin temp 1 xarr xarr yarr yarr temp end nsym ge 7 nsym le 10 nsym ge 15 nsym le 18 : begin case 1 of nsym eq 7 nsym eq 15 : deg 45 nsym eq 8 nsym eq 16 : deg 135 nsym eq 9 nsym eq 17 : deg 225 nsym eq 10 nsym eq 18 : deg 315 endcase rotation xarr yarr deg nx ny xarr nx yarr ny end end nsym ge 7 endcase end nsym between 3 and 18 nsym eq 20 nsym eq 21 nsym eq 30 nsym eq 31 : begin xarr fltarr 5 3 yarr xarr xarr 1 3 xarr 2 3 yarr 2 3 yarr 3 3 if nsym eq 21 nsym eq 31 then begin rotation xarr yarr 45 nx ny nx 0 70 nx shrink the x direction xarr nx yarr ny endif if nsym ge 30 then fill 1 end nsym 20 21 30 31 nsym eq 22 nsym eq 32 : begin side length 6 0 at centroid yarr fltarr 4 6 4 xarr fltarr 4 6 2 xarr 1 6 2 xarr 2 0 yarr 2 6 sqrt 3 2 6 4 if nsym eq 32 then fill 1 end else: begin xarr fltarr 2 1 yarr xarr 0 xarr 1 1 end endcase xarr xarr scale yarr yarr scale set symbol buffer if keyword_set col then usersym xarr yarr fill fill color col else usersym xarr yarr fill fill return end");279 a[277] = new Array("./ToBeReviewed/PLOTS/LABEL/lataxe.html", "lataxe.pro", "", " file_comments function called by XYZ TICKFORMAT see the help to see how to use it to label axes in latitude categories graphic param AXIS It is the axis number: 0 for X axis 1 for Y axis 2 for Z axis param INDEX It is the tick mark index which starts at 0 param VALUE It is the default tick mark value a floating point number returns A string used automatically to label history Sebastien Masson smasson lodyc jussieu fr 14 10 1999 format of labels version Id: lataxe pro 142 2006 07 21 12:47:49Z navarro FUNCTION lataxe axis index value We put back value in the segment 0 180 compile_opt idl2 strictarrsubs lat value mod 360 if lat lt 0 then lat lat 360 if lat gt 180 then lat lat 180 format of labels: case 1 of lat EQ round lat :fmt i4 10 lat EQ round 10 lat :fmt f6 1 ELSE:fmt f7 2 endcase we write the label if lat le 90 and lat ne 0 then nom string lat format fmt N if lat gt 90 then nom string 180 lat format fmt S if lat eq 0 then nom string lat format fmt return nom end "); 280 a[278] = new Array("./ToBeReviewed/PLOTS/LABEL/lonaxe.html", "lonaxe.pro", "", " file_comments function called by XYZ TICKFORMAT see the help to see how to use it to label axes in longitude categories graphic param AXIS It is the axis number: 0 for X axis 1 for Y axis 2 for Z axis param INDEX It is the tick mark index which starts at 0 param VALUE It is the default tick mark value a floating point number returns A string used automatically to label history Sebastien Masson smasson lodyc jussieu fr 14 10 1999 format of labels version Id: lonaxe pro 142 2006 07 21 12:47:49Z navarro FUNCTION lonaxe axis index value We put back value in the segment 0 360 compile_opt idl2 strictarrsubs lon value mod 360 if lon lt 0 then lon lon 360 format of labels: case 1 of lon EQ round lon :fmt i4 10 lon EQ round 10 lon :fmt f6 1 ELSE:fmt f7 2 endcase we write the label if lon lt 180 then nom string lon format fmt E if lon gt 180 then nom string 360 lon format fmt W if lon eq 180 then nom string lon format fmt return nom end "); 281 a[279] = new Array("./ToBeReviewed/PLOTS/VECTEUR/ajoutvect.html", "ajoutvect.pro", "", " file_comments Overprint vectors in a field traced by plt categories graphic param VECTEUR in required It is a structure with 2 elements containing we 2 matrixes U and V of values of the zonal and meridian component of the fiel of vectors to be traced For ex: vecteur matriceu:lec unsurface matricev:lec vnsurface rq:the name of elements of vector does not have any importance vecteur u:lec unsurface v:lec vnsurface goes well too keyword UNVECTSUR It is a scalar n or an array with 2 elements n1 n2 In the first case we will trace a vector on n following x and y In the second case we will trace a vector on n1 following x and a vector n2 following n2 Comments: To trace all vectors following y and one vector on two following x put unvectsur 2 1 keyword VECTMIN in required Minimum norme of vectors to be traced keyword VECTMAX in required Maximum norme of vectors to be traced keyword _EXTRA Used to pass your keywords uses common pro history Sebastien Masson smasson lodyc jussieu fr 10 3 1999 11 6 1999 compatibilite avec NAN et la lecture des structures version Id: ajoutvect pro 142 2006 07 21 12:47:49Z navarro pro ajoutvect vecteur vectlegende UNVECTSUR unvectsur VECTMIN vectmin VECTMAX vectmax _EXTRA ex compile_opt idl2 strictarrsubs common tempsun systime 1 For key_performance u litchamp vecteur 0 u checkfield u plt TYPE xy NOQUESTION v litchamp vecteur 1 v checkfield v plt TYPE xy NOQUESTION We recuperate possible informations on fields grilleu litchamp vecteur 0 grid if grilleu EQ then grilleu U grillev litchamp vecteur 1 grid if grillev EQ then grillev V IF grilleu EQ V AND grillev EQ U THEN inverse 1 IF grilleu EQ grillev THEN interpolle 0 ELSE interpolle 1 if keyword_set inverse then begin rien u u v v rien endif We find common points between u and v if interpolle then begin indicexu lindgen jpi firstxu:firstxu nxu 1 indicexv lindgen jpi firstxv:firstxv nxv 1 indicex inter indicexu indicexv indiceyu lindgen jpj firstyu:firstyu nyu 1 indiceyv lindgen jpj firstyv:firstyv nyv 1 indicey inter indiceyu indiceyv nx n_elements indicex ny n_elements indicey indice2d lindgen jpi jpj indice2d indice2d indicex 0 :indicex 0 nx 1 indicey 0 :indicey 0 ny 1 extraction of u and v on the appropriated domain case 1 of size u 0 NE 2 OR size v 0 NE 2: return size u 1 EQ nxu AND size u 2 EQ nyu AND size v 1 EQ nxv AND size v 2 EQ nyv:BEGIN if nxu NE nx then if indicex 0 EQ firstxu then u u 0:nx 1 ELSE u u 1: nx IF nxv NE nx THEN if indicex 0 EQ firstxv then v v 0:nx 1 ELSE v v 1: nx IF nyu NE ny THEN if indicey 0 EQ firstyu then u u 0:ny 1 ELSE u u 1: ny IF nyv NE ny THEN if indicey 0 EQ firstyv then v v 0:ny 1 ELSE v v 1: ny END size u 1 EQ jpi AND size u 2 EQ jpj AND size v 1 EQ jpi AND size v 2 EQ jpj:BEGIN u u indice2d v v indice2d END ELSE:BEGIN ras report problemes d adequation entre la taille du domaine et la taille des matrices necessaires a tracer des vecteurs return end endcase We reshape u and v to make sure that none dimension has been erased if ny EQ 1 then begin u reform u nx ny v reform v nx ny endif construction of u and v at points T a u 0 u u shift u 1 0 2 if NOT keyword_set key_periodic OR nx NE jpi then u 0 a a v 0 v v shift v 0 1 2 if NOT keyword_set key_periodic OR nx NE jpi then v 0 a attribution of the mask and of longitude and latitude arrays We recuperate the complete grid to establish a big mask extensive in the four directions to cover points for which a land point has been considerated do a small drawing vargrid T msku umask indice2d jpi jpj firstzt mskv vmask indice2d jpi jpj firstzt glam glamt indice2d gphi gphit indice2d if ny EQ 1 then begin msku reform msku nx ny mskv reform mskv nx ny glam reform glam nx ny gphi reform gphi nx ny endif We mask u and v et v the long of coasts the place where we can not calculate the average extention of the mask u u msku shift msku 1 0 v v mskv shift mskv 0 1 ENDIF ELSE BEGIN u u tmask firstxt:lastxt firstyt:lastyt firstzt v v tmask firstxt:lastxt firstyt:lastyt firstzt indice2d lindgen jpi jpj indice2d indice2d firstxt:lastxt firstyt:lastyt nx nxt ny nyt endelse tabnorme sqrt u 2 v 2 nan where finite u nan EQ 1 if nan 0 NE 1 then u nan 1e5 nan where finite v nan EQ 1 if nan 0 NE 1 then v nan 1e5 if keyword_set vectmin then BEGIN toosmall where tabnorme lt vectmin if toosmall 0 NE 1 then begin u toosmall 1e5 v toosmall 1e5 ENDIF endif if keyword_set vectmax then BEGIN toobig where tabnorme gt vectmax if toobig 0 NE 1 then begin u toobig 1e5 v toobig 1e5 ENDIF ENDIF Put back of a big value on all points for which we can do the calculation if interpolle then t2 msku shift msku 1 0 mskv shift mskv 0 1 ELSE t2 tmask firstxt:lastxt firstyt:lastyt firstzt if NOT keyword_set key_periodic OR nx NE jpi then t2 0 0 t2 0 0 terre where t2 eq 0 if terre 0 ne 1 then begin u terre 1e5 v terre 1e5 ENDIF trace only one vector one two if keyword_set unvectsur then BEGIN indx is a vector containing number of columns to be selected indy is a vector containing number of lines to be selected if n_elements unvectsur EQ 1 then begin indx where lindgen nx MOD unvectsur 0 eq 0 indy where lindgen ny MOD unvectsur 0 eq 0 ENDIF ELSE BEGIN indx where lindgen nx MOD unvectsur 0 eq 0 indy where lindgen ny MOD unvectsur 1 eq 0 ENDELSE From indx and indy we will construct an array which will give indexes of intersections points of columns specified by indx indicereduit indx replicate 1 n_elements indy nx replicate 1 n_elements indx indy We reduce arrays which will be passed to vecteur u u indicereduit v v indicereduit tabnorme tabnorme indicereduit endif if keyword_set inverse then begin rien u u v v rien endif Drawing of vectors vecteur u v tabnorme indice2d indicereduit missing 1e5 _extra ex We complete the caption if terre 0 ne 1 then mini min tabnorme where t2 eq 1 max maxi nan ELSE mini min tabnorme max maxi nan if litchamp vecteur 0 u NE then vectlegende minmax: mini maxi unite:litchamp vecteur 0 u ELSE vectlegende minmax: mini maxi unite:varunit sortie: if keyword_set key_performance NE 0 THEN print temps ajoutvect systime 1 tempsun return end "); 282 a[280] = new Array("./ToBeReviewed/PLOTS/VECTEUR/vecteur.html", "vecteur.pro", "", "FUNCTION cv_cm2normal angle Give the lenth in normal coordinates of a trait oriented of an angle by rapport at the x axis and which must do 1 cm on the drawing Angle can be an array compile_opt idl2 strictarrsubs common What is the lenth in normal coordinates of a trait which will do 1 cm on the paper an which is parallel to x mipgsz min page_size max mapgsz sizexfeuille mipgsz key_portrait mapgsz 1 key_portrait sizeyfeuille mapgsz key_portrait mipgsz 1 key_portrait cm_en_normal 1 sizexfeuille If the aspect rapport of the window is not equal to 1 the lenth in normalized coordinates of a trait of 1 cm vary following the polar angle of this trait aspect sizexfeuille sizeyfeuille cm_en_normal cm_en_normal sqrt 1 aspect 2 1 sin angle 2 return cm_en_normal END PRO normalise u v w normalize the vector compile_opt idl2 strictarrsubs IF n_elements w NE 0 THEN BEGIN norme sqrt u 2 v 2 w 2 ind where norme NE 0 u ind u ind norme ind v ind v ind norme ind w ind w ind norme ind ENDIF ELSE BEGIN norme sqrt u 2 v 2 ind where norme NE 0 u ind u ind norme ind v ind v ind norme ind ENDELSE END file_comments Trace vectors even if they are on a deformed grid on any projection In this way all vectors have a comparable norme on the drawing to be clear a vector which measure 1 cm measure it no matter the projection and is position on the sphere categories graphic param COMPOSANTEU in required It is the u component of the vector to be traced This 2d array has the same dimension that reduitindice2d see further param COMPOSANTEV in required It is the v component of the vector to be traced This 2d array has the same dimension that reduitindice2d see further param INDICE2D in required It in an index allowing to to pass from an jpi or jpj array to the zoom on which we do the drawing param REDUITINDICE2D in required It is an index allowing to pass from an array defined by indice2d to the array for which we really have vectors to be traced to be clear it is for example when we trace only one vector on two keyword CMREF The lenth in cm that must measure the arrow normed normeref By default it is ajusted t othe drawing and included between 5 and 1 5 cm keyword MISSING The value of a missing value Do not use this keyword Fixed at 1e5 by ajoutvect pro keyword NORMEREF The norme of the reference arrow keyword VECTCOLOR The color of the arrow Black by default color 0 keyword VECTTHICK The thick of the arrow 1 by default keyword VECTREFPOS Vector composed of 2 elements specifing the position on DATA coordinates from de begining of the reference vector By default at the right bottom of the drawing keyword VECTREFFORMAT The format to be used to specify the norme of the reference vector keyword NOVECTREF To delete the display of the reference vector keyword _EXTRA Used to pass your keywords uses common pro history Creation : 13 02 98 G Roullet grlod lodyc jussieu fr Modification : 14 01 99 realise la transformation spheriquecartesien G Roullet 12 03 99 verification de la routine G Roullet 8 11 1999: G Roullet et Sebastien Masson smasson lodyc jussieu fr adaptation pour les zoom reverification traitement separe de la direction et de la norme des vecteurs mots cles NORMEREF et CMREF version Id: vecteur pro 142 2006 07 21 12:47:49Z navarro PRO vecteur composanteu composantev normevecteur indice2d reduitindice2d CMREF cmref MISSING missing NORMEREF normeref VECTCOLOR vectcolor VECTTHICK vectthick VECTREFPOS vectrefpos VECTREFFORMAT vectrefformat NOVECTREF novectref _extra extra compile_opt idl2 strictarrsubs common tempsun systime 1 For key_performance taille size composanteu nx taille 1 ny taille 2 if n_elements reduitindice2d EQ 0 then reduitindice2d lindgen nx ny zu composanteu zv composantev norme normevecteur taille size indice2d nxgd taille 1 nygd taille 2 msk replicate 1 nx ny if keyword_set missing then terre where abs zu GE missing 10 ELSE terre 1 if terre 0 NE 1 then BEGIN msk terre 0 zu terre 0 zv terre 0 norme terre 0 ENDIF Stage 1: Given that the directions and the sense that the vector has on the sphere we have to try to determinate this direction and the sense that the vector will have on the screen once it will have been projected In theory: on the sphere a vector in a given point has for direction the tangent at the circle passing by the center of the Earth and by the vector So find the direction once the projection is done it is find the tangent to the curve representing the projection of the circle on the 2d plan at the point representing the projection of the starting point of the shere on the 2d plan In practice we do no know the definition of the curve given by the projection of a circle so find its tangente in a point What we do: In a 3d cartesian reference a We find coorinates of the point T starting of the arrow situed on the sphere b To each point T we determine local directions defined by the grid on this point and on which coordinates u v of the vector refer to These local directions are defined by gradients of glam and gphi Once we have obtain these directions we considare them like orthogonal and by norming them we build an orthonormal reference nu nv on which coordinates u v of the vector refer to In the starting 3d cartesian reference the vector is defined by: V u nu v nv where V nu and nv are 3d vectors and u and v are scalars c To approximate the tangente to the circle by the chord defined by the beginning and the ending of the arrow we will normalize V and then divide it by 100 d This allows us to determine coordinates of extremities of the chord in the 3d cartesian reference We pass them in spherical coordinates in order to recuperate latitude and longitude position of these points on the sphere e We pass coordinates of these points in normalized coordinates then in polar coordinates in order to find the angle and the direction they dertermine on the drawing Stage 1 a coordinates of the point T beginning of the arrow in spherical coordinates glam glamt indice2d reduitindice2d gphi gphit indice2d reduitindice2d Coordinates of the point T beginning of the arrow in the cartesian reference For the sphere we use a sphere with a radius of 1 radius replicate 1 nx ny coord_sphe transpose glam gphi radius r cv_coord from_sphere coord_sphe to_rect degrees x0 reform r 0 nx ny y0 reform r 1 nx ny z0 reform r 2 nx ny Stage 1 b Construction of a vector nu resp nv vectr normed carried by the axis of points u i j and u i 1 j resp v i j and v i j 1 which define for each point on the sphere local directions associated with u and v These vectors define a local orthonormal reference These vectors are built in a cartesian reference cv_coord We have choose a unity radius of the Earth unit definition of nu radius replicate 1 nxgd nygd IF finite glamu 0 gphiu 0 NE 0 THEN coord_sphe transpose glamu indice2d gphiu indice2d radius ELSE coord_sphe transpose glamf indice2d gphit indice2d radius r cv_coord from_sphere coord_sphe to_rect degrees coordinates of points of the grid u in cartesian ux reform r 0 nxgd nygd uy reform r 1 nxgd nygd uz reform r 2 nxgd nygd calculation of nu nux ux shift ux 1 0 nuy uy shift uy 1 0 nuz uz shift uz 1 0 conditions at extremities if NOT keyword_set key_periodic OR nxgd NE jpi then begin nux 0 nux 1 nuy 0 nuy 1 nuz 0 nuz 1 ENDIF reduction of the grid nux nux reduitindice2d nuy nuy reduitindice2d nuz nuz reduitindice2d definition of nv IF finite glamv 0 gphiv 0 NE 0 THEN coord_sphe transpose glamv indice2d gphiv indice2d radius ELSE coord_sphe transpose glamt indice2d gphif indice2d radius r cv_coord from_sphere coord_sphe to_rect degrees coordinates of points of the grid in cartesian vx reform r 0 nxgd nygd vy reform r 1 nxgd nygd vz reform r 2 nxgd nygd calcul of nv nvx vx shift vx 0 1 nvy vy shift vy 0 1 nvz vz shift vz 0 1 conditions at extremities nvx 0 nvx 1 nvy 0 nvy 1 nvz 0 nvz 1 reduction of the grid nvx nvx reduitindice2d nvy nvy reduitindice2d nvz nvz reduitindice2d normalization normalise nux nuy nuz normalise nvx nvy nvz Stage 1 c coordinates of the vector V in the cartesian reference direcx zu nux zv nvx direcy zu nuy zv nvy direcz zu nuz zv nvz normalization of the vector V normalise direcx direcy direcz on divide by 100 direcx direcx 100 direcy direcy 100 direcz direcz 100 Stege 1 d coordinates of the point of the arrow in the cartesian reference x1 x0 direcx y1 y0 direcy z1 z0 direcz coordinates of the point of the arrow in spherical coordinates coord_rect transpose x1 y1 z1 r cv_coord from_rect coord_rect to_sphere degrees glam1 reform r 0 nx ny gphi1 reform r 1 nx ny modification of glams Everything take place at the level of the line of changing of date BEWARE do not cut arrow which goes out of the window test: If it goes out of the frame but thanks to 360 it come in we modify it ind where glam1 LT x range 0 AND glam1 360 LE x range 1 if ind 0 NE 1 then glam1 ind glam1 ind 360 ind where glam1 GT x range 1 AND glam1 360 GE x range 0 if ind 0 NE 1 then glam1 ind glam1 ind 360 ind where glam LT x range 0 AND glam 360 LE x range 1 if ind 0 NE 1 then glam ind glam ind 360 ind where glam GT x range 1 AND glam 360 GE x range 0 if ind 0 NE 1 then glam ind glam ind 360 Stage 1 e r convert_coord glam gphi data to_normal x0 r 0 normal coordinates of the beginning of the array y0 r 1 r convert_coord glam1 gphi1 data to_normal x1 r 0 normal coordinates of the ending of the array Before scaling y1 r 1 tests to avoid that arrows be drawing out of the domain out where x0 LT p position 0 OR x0 GT p position 2 OR y0 LT p position 1 OR y0 GT p position 3 if out 0 NE 1 THEN x0 out values f_nan Following projections there may are points at NaN when we pass in normal coordinates We delete these points nan finite x0 y0 x1 y1 number where nan EQ 1 x0 x0 number x1 x1 number y0 y0 number y1 y1 number msk msk number norme norme number We define the vector direction in the normalize reference dirx x1 x0 diry y1 y0 We pass in polar coordinates to recuperate the angle which wasb the goal of all the first stage dirpol cv_coord from_rect transpose dirx diry to_polar dirpol msk dirpol 0 Stage 2 Now we take care of the norme Automatic putting at the scale if NOT keyword_set cmref then BEGIN mipgsz min page_size max mapgsz sizexfeuille mipgsz key_portrait mapgsz 1 key_portrait sizexfeuille 10 sizexfeuille cmref 5 floor sizexfeuille 10 15 cmref cmref 10 ENDIF if NOT keyword_set normeref then BEGIN value max norme puissance10 10 floor alog10 value normeref puissance10 floor value puissance10 endif cm 1 normeref cmref We modify the array norme to an element having the value cm be represented by a trait of lenght 1 cm on the paper Norme contain the norme of vectors we want to draw norme 1 1 cm norme cv_cm2normal dirpol Stage 3 Now that we have the angle and the norme we recuperate coordinates in rectangular and we draw arrows r cv_coord from_polar transpose dirpol norme to_rect composantex r 0 composantey r 1 x1 x0 composantex y1 y0 composantey Drawing if NOT KEYWORD_SET vectcolor then vectcolor 0 points where msk EQ 1 IF points 0 NE 1 THEN arrow x0 points y0 points x1 points y1 points norm hsize 2 COLOR vectcolor THICK vectthick Draw an arrow at the right bottom of the drawing as a caption if NOT keyword_set novectref then BEGIN dx cmref cv_cm2normal 0 Lenght of the vector of reference in normalzed coordinates if keyword_set vectrefformat then normelegende strtrim string normeref format vectrefformat 1 ELSE normelegende strtrim normeref 1 if keyword_set vectrefpos then begin r convert_coord vectrefpos data to_normal x0 r 0 y0 r 1 ENDIF ELSE BEGIN x0 x window 1 dx r convert_coord d x_ch_size d y_ch_size device to_normal dy 3 r 1 p charsize y0 y window 0 dy ENDELSE arrow x0 y0 x0 dx y0 norm hsize 2 color 0 xyouts x0 y0 normelegende norm align 1 charsize p charsize color 0 endif if keyword_set key_performance NE 0 THEN print temps vecteur systime 1 tempsun return END "); 283 a[281] = new Array("./ToBeReviewed/PLOTS/VECTEUR/velovect.html", "velovect.pro", "", " file_comments Produce a two dimensional velocity field plot A directed arrow is drawn at each point showing the direction and magnitude of the field categories Plotting two dimensional param U in required The X component of the two dimensional field U must be a two dimensional array param V in required The Y component of the two dimensional field Y must have the same dimensions as X The vector at point i j has a magnitude of: U i j 2 V i j 2 0 5 and a direction of: ATAN2 V i j U i j param X in optional Optional abcissae values X must be a vector with a length equal to the first dimension of U and V param Y in optional Optional ordinate values Y must be a vector with a length equal to the first dimension of U and V keyword COLOR The color index used for the plot keyword DOTS Set this keyword to 1 to place a dot at each missing point Set this keyword to 0 or omit it to draw nothing for missing points Has effect only if MISSING is specified keyword LENGTH Length factor The default of 1 0 makes the longest U V vector the length of a cell keyword MISSING Missing data value Vectors with a LENGTH greater than MISSING are ignored keyword OVERPLOT Set this keyword to make VELOVECT overplot That is the current graphics screen is not erased no axes are drawn and the previously established scaling remains in effect keyword CLIP keyword NOCLIP keyword _EXTRA Used to pass your keywords restrictions Plotting on the selected device is performed System variables concerning plotting are changed Note: All other keywords are passed directly to the PLOT procedure and may be used to set option such as TITLE POSITION NOERASE etc history DMS RSI Oct 1983 For Sun DMS RSI April 1989 Added TITLE Oct 1990 Added POSITION NOERASE COLOR Feb 91 RES August 1993 Vince Patrick Adv Visualization Lab U of Maryland fixed errors in math August 1993 DMS Added _EXTRA keyword inheritance January 1994 KDB Fixed integer math which produced 0 and caused divide by zero errors December 1994 MWR Added _EXTRA inheritance for PLOTS and OPLOT June 1995 MWR Removed _EXTRA inheritance for PLOTS and changed OPLOT to PLOTS September 1996 GGS Changed denominator of x_step and y_step vars February 1998 DLD Add support for CLIP and NO_CLIP keywords June 1998 DLD Add support for OVERPLOT keyword Copyright c 1983 1998 Research Systems Inc All rights reserved Unauthorized reproduction prohibited version Id: velovect pro 142 2006 07 21 12:47:49Z navarro PRO VELOVECT U V X Y Missing Missing Length length Dots dots Color color CLIP clip NOCLIP noclip OVERPLOT overplot _EXTRA extra compile_opt idl2 strictarrsubs on_error 2 Return to caller if an error occurs s size u t size v if s 0 ne 2 then begin baduv: message U and V parameters must be 2D and same size endif if total abs s 0:2 t 0:2 ne 0 then goto baduv if n_params 0 lt 3 then x findgen s 1 else if n_elements x ne s 1 then begin badxy: message X and Y arrays have incorrect size endif if n_params 1 lt 4 then y findgen s 2 else if n_elements y ne s 2 then goto badxy if n_elements missing le 0 then missing 1 0e30 if n_elements length le 0 then length 1 0 mag sqrt u 2 v 2 magnitude Subscripts of good elements nbad 0 of missing points if n_elements missing gt 0 then begin good where mag lt missing if keyword_set dots then bad where mag ge missing nbad endif else begin good lindgen n_elements mag endelse ugood u good vgood v good x0 min x get scaling x1 max x y0 min y y1 max y x_step x1 x0 s 1 1 0 Convert to float Integer math y_step y1 y0 s 2 1 0 could result in divide by 0 maxmag max max abs ugood x_step max abs vgood y_step sina length ugood maxmag cosa length vgood maxmag if n_elements title le 0 then title plot to get axes if n_elements color eq 0 then color p color if n_elements noclip eq 0 then noclip 1 x_b0 x0 x_step x_b1 x1 x_step y_b0 y0 y_step y_b1 y1 y_step if not keyword_set overplot then begin if n_elements position eq 0 then begin plot x_b0 x_b1 y_b1 y_b0 nodata xst yst color color _EXTRA extra endif else begin plot x_b0 x_b1 y_b1 y_b0 nodata xst yst color color _EXTRA extra endelse endif if n_elements clip eq 0 then clip x crange 0 y crange 0 x crange 1 y crange 1 r 3 len of arrow head angle 22 5 dtor Angle of arrowhead st r sin angle sin 22 5 degs length of head ct r cos angle for i 0 n_elements good 1 do begin Each point x0 x good i mod s 1 get coords of start end dx sina i x1 x0 dx y0 y good i s 1 dy cosa i y1 y0 dy xd x_step yd y_step plots x0 x1 x1 ct dx xd st dy yd xd x1 x1 ct dx xd st dy yd xd y0 y1 y1 ct dy yd st dx xd yd y1 y1 ct dy yd st dx xd yd color color clip clip noclip noclip _EXTRA extra endfor if nbad gt 0 then Dots for missing PLOTS x bad mod s 1 y bad s 1 psym 3 color color clip clip noclip noclip _EXTRA extra end"); 284 a[282] = new Array("./ToBeReviewed/PLOTS/axe.html", "axe.pro", "", " file_comments Manage axes for the different drawings created by plt pltz and pltt categories Graphic environment param COUPE It is a string designating the type of cut to which the axes we create must report For example: xy xt param TEMPSMIN in required In the case where we do cut containing the time dimension we have to specify the beginning of the time s axis in julian days param TEMPSMAX in required In the case where we do cut containing the time dimension we have to specify the end of the time s axis in julian days keyword SIN activated when we trace in sinus of the latitude keyword SEPDATE string separating the diff rent constituents of the date By default it is a return to the linewhen we do a yt zt or a t In the other cases it is a blank keyword DIGITSYEAR 2 to use Z format 2 digits to code years instead of Y format See help of label_date for more informations on Z and Y keyword _EXTRA used to pass your keywords uses common pro restrictions It modify x and y history Sebastien Masson smasson lodyc jussieu fr 11 12 98 Eric Guilyardi types x y z amelioration de l axe temporel version Id: axe pro 142 2006 07 21 12:47:49Z navarro PRO axe coupe tempsmin tempsmax REVERSE_X reverse_x REVERSE_Y reverse_y SIN sin SEPDATE sepdate DIGITSYEAR digitsyear _EXTRA ex compile_opt idl2 strictarrsubs common tempsun systime 1 pour key_performance Management of ticks of the time axis in the case of TEMPSMIN and TEMPSMAX are definied divday 0 if n_params EQ 3 then BEGIN if keyword_set sepdate then sep sepdate ELSE if coupe EQ yt OR coupe EQ zt OR coupe EQ t then sep C ELSE sep caldat tempsmin mmin dmin ymin hmin mnmin smin _EXTRA ex caldat tempsmax mmax dmax ymax hmax mnmax smax _EXTRA ex format used for the year 2 or 4 5 digits IF NOT keyword_set digitsyear THEN digitsyear 4 IF digitsyear EQ 2 THEN fmtyr Z ELSE fmtyr Y if ymax EQ ymin then BEGIN if mmin ne mmax then BEGIN Same year but several monthes nticks mmax mmin 1 ticknom lonarr nticks for m 0 nticks 1 do ticknom m julday m mmin 1 ymin _EXTRA ex tminor 6 datfmt M sep fmtyr We check that labels are betwenn TEMPSMIN and TEMPSMAX ticknom ticknom where ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE 1 nticks n_elements ticknom Particular case where we are overlap two monthes if nticks LE 1 then begin nticks dmax jourdsmois mmin ymin 0 dmin 1 2 ticknom lonarr nticks for d 0 nticks 1 do ticknom d julday mmin d 2 dmin ymin _EXTRA ex ticknom ticknom where ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE 1 nticks n_elements ticknom tminor 2 datfmt D sep M endif ENDIF ELSE BEGIN Same year and same month IF dmax dmin 1 GT 4 THEN BEGIN more than 4 days nticks dmax dmin 1 ticknom lonarr nticks for d 0 nticks 1 do ticknom d julday mmin d dmin ymin _EXTRA ex ticknom ticknom where ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE 1 nticks n_elements ticknom tminor 2 datfmt D sep M ENDIF ELSE BEGIN less than 4 days : divday ticks per day divday 4 nticks dmax dmin divday 1 ticknom fltarr nticks for d 0 nticks 1 do ticknom d julday mmin d divday dmin ymin _EXTRA ex d MOD divday float divday tminor 2 datfmt H:00 ENDELSE ENDELSE ENDIF ELSE BEGIN Several years CASE 1 OF ymax ymin 1 LE 10: BEGIN freq 1 tminor 12 datfmt M sep fmtyr end ymax ymin 1 LE 20: BEGIN freq 2 tminor 6 datfmt M sep fmtyr end ymax ymin 1 LE 50: BEGIN freq 5 tminor 5 datfmt M sep fmtyr end ymax ymin 1 LE 100: BEGIN freq 10 tminor 10 datfmt fmtyr end ymax ymin 1 LE 1000: BEGIN freq 50 tminor 5 datfmt fmtyr end ELSE : BEGIN freq 100 tminor 50 datfmt Y end ENDCASE nticks floor ymax ymin freq 1 IF floor ymin freq NE ymin freq THEN yminf floor ymin freq 1 freq ELSE yminf floor ymin freq freq ticknom lonarr nticks for y 0 nticks 1 do ticknom y julday 1 1 yminf y freq _EXTRA ex We check that labels are betwenn TEMPSMIN and TEMPSMAX ticknom ticknom where ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE 1 nticks n_elements ticknom Particular case where we are overlap two monthes if nticks LE 1 then begin nticks mmax 12 mmin 1 ticknom lonarr nticks for m 0 nticks 1 do ticknom m julday m mmin 1 ymin _EXTRA ex ticknom ticknom where ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE 1 nticks n_elements ticknom tminor 6 datfmt M sep fmtyr Particular case where we are overlap two monthes if nticks LE 1 then begin nticks dmax jourdsmois mmin ymin 0 dmin 1 2 ticknom lonarr nticks for d 0 nticks 1 do ticknom d julday mmin d 2 dmin ymin _EXTRA ex ticknom ticknom where ticknom GE tempsmin AND ticknom LE tempsmax AND ticknom NE 1 nticks n_elements ticknom tminor 2 datfmt D sep M endif endif ENDELSE toto label_date 0 0 0 DATE_FORMAT datfmt _EXTRA ex if chkstru ex DATE_FORMAT then ex DATE_FORMAT ENDIF Definition of axes parameters case by case case coupe of xy :BEGIN if keyword_set reverse_x then x range lon2 lon1 ELSE x range lon1 lon2 if keyword_set reverse_y then y range lat2 lat1 ELSE y range lat1 lat2 IF key_onearth THEN x tickformat lonaxe IF key_onearth THEN y tickformat lataxe END yz :BEGIN if keyword_set reverse_x then x range lat2 lat1 ELSE x range lat1 lat2 if keyword_set reverse_y then y range 0 1 ELSE y range 1 0 if keyword_set sin then BEGIN number of ticks by default plot 0 0 noerase nodata xtick_get xaxe We increase this number to it be around 10 ticks n_elements xaxe 1 ticks ticks 1 2 4 8 ticks ticks sort abs ticks 10 0 We recuperate the x axis for this new number of ticks plot 0 0 xticks ticks noerase nodata xtick_get xaxe x ticks ticks x tickv sin pi 180 xaxe tickname strarr ticks 1 for i 0 ticks do tickname i lataxe 0 0 xaxe i x tickname tickname x range sin pi 180 x range endif end xz :BEGIN if keyword_set reverse_x then x range lon2 lon1 ELSE x range lon1 lon2 if keyword_set reverse_y then y range 0 1 ELSE y range 1 0 end xt : begin if keyword_set reverse_x then x range lon2 lon1 ELSE x range lon1 lon2 if keyword_set reverse_y then y range tempsmax tempsmin tempsmin ELSE y range tempsmin tempsmax tempsmin IF key_onearth THEN x tickformat lonaxe result LABEL_DATE DATE_FORMAT M sep fmtyr y tickformat LABEL_DATE y tickname LABEL_DATE 1 0 ticknom _EXTRA ex y ticklen 1 y gridstyle 2 y ticks nticks 1 y tickv ticknom tempsmin y minor tminor IF divday GT 0 THEN y title Time from strtrim dmin 1 def_month 1m strtrim mmin 1 strtrim ymin 1 end yt : begin if keyword_set reverse_x then x range tempsmax tempsmin tempsmin ELSE x range tempsmin tempsmax tempsmin if keyword_set reverse_y then y range lat2 lat1 ELSE y range lat1 lat2 IF key_onearth THEN y tickformat lataxe x tickname LABEL_DATE 0 0 ticknom _EXTRA ex x ticklen 1 x gridstyle 2 x ticks nticks 1 x tickv ticknom tempsmin x minor tminor IF divday GT 0 THEN y title Time from strtrim dmin 1 def_month 1m strtrim mmin 1 strtrim ymin 1 end zt : begin if keyword_set reverse_x then x range tempsmax tempsmin tempsmin ELSE x range tempsmin tempsmax tempsmin if vargrid EQ W then gdep gdepw 0:nzw 1 ELSE gdep gdept 0:nzt 1 x tickname LABEL_DATE 0 0 ticknom _EXTRA ex x ticklen 1 x gridstyle 2 x ticks nticks 1 x tickv ticknom tempsmin x minor tminor IF divday GT 0 THEN y title Time from strtrim dmin 1 def_month 1m strtrim mmin 1 strtrim ymin 1 end t : BEGIN if keyword_set reverse_x then x range tempsmax tempsmin tempsmin ELSE x range tempsmin tempsmax tempsmin x tickname LABEL_DATE 0 0 ticknom _EXTRA ex x ticklen 1 x gridstyle 2 x ticks nticks 1 x tickv ticknom tempsmin x minor tminor IF divday GT 0 THEN y title Time from strtrim dmin 1 def_month 1m strtrim mmin 1 strtrim ymin 1 end x : begin x range lon1 lon2 IF key_onearth THEN x tickformat lonaxe END y : begin if keyword_set sin then BEGIN Number of ticks by default plot 0 0 nodata noerase xstyle 5 ystyle 5 xtick_get xaxe We increase this number to it be around 10 ticks n_elements xaxe 1 ticks ticks 1 2 4 8 ticks ticks sort abs ticks 10 0 We recuperate the x axis for this new number of ticks plot 0 0 xticks ticks nodata noerase xstyle 5 ystyle 5 xtick_get xaxe x ticks ticks x tickv sin pi 180 xaxe tickname strarr ticks 1 for i 0 ticks do tickname i lataxe 0 0 xaxe i x tickname tickname x range sin pi 180 x range ENDIF ELSE x range lat1 lat2 IF key_onearth THEN x tickformat lataxe END z : begin if vargrid EQ W then gdep gdepw 0:nzw 1 ELSE gdep gdept 0:nzt 1 if keyword_set reverse_y then y range gdep 0 gdep n_elements gdep 1 ELSE y range gdep n_elements gdep 1 gdep 0 END endcase if keyword_set key_performance THEN print temps axe systime 1 tempsun return end"); 285 a[283] = new Array("./ToBeReviewed/PLOTS/legende.html", "legende.pro", "", " file_comments Provide caption categories graphic annex param MI in required The min of the drawing param MA in required The max of the plot param COUPE Charactere containing two letters giving the type of the cut for example: xz keyword CONTOUR If we want to trace contours of a different field than the one whose we have the colored drawing by examlpe E P in color and QSR in contours It must be a field respecting same caracteristics than the argument number one of plt keyword ENDPOINTS Used when we do vertical cuts in diagonal keyword _EXTRA used to pass your keywords uses common pro restrictions The use of the global variable langage allows to change the language and the caption easily history Sebastien Masson smasson lodyc jussieu fr 14 8 98 Eric Guilyardi ericg lodyc jussieu fr GB version 11 6 99 version Id: legende pro 142 2006 07 21 12:47:49Z navarro pro legende mi ma coupe CONTOUR contour ENDPOINTS endpoints DIREC direc VECTLEGENDE vectlegende INTERVALLE intervalle TYPE_YZ type_yz VARNAME2 varname2 NPTS npts _EXTRA ex compile_opt idl2 strictarrsubs common tempsun systime 1 pour key_performance grille 1 1 1 gdep nx ny nz English legends fmt_mm f12 2 fmt_bt f7 1 colorf contourf Contour plot vecteurf Vector norm expf datef fieldf depthf endpointsf Diag Section zonalf IF key_onearth THEN latintf latitudes in ELSE latintf j index in timintf time in onf depthf2 Depth m Meridf Zonal Mean IF key_onearth THEN lonintf longitudes in ELSE lonintf i in hovxt XT plot diaghovxt Diag XT plot depintf depths in timef Time hovyt YT plot diaghovyt Diag YT plot hovzt ZT plot hovt IF key_onearth THEN lontitle Longitude ELSE lontitle i index IF key_onearth THEN lattitle Latitude ELSE lattitle j index vertz depthf2 legniv m IF keyword_set TYPE_YZ THEN BEGIN IF type_yz EQ hPa THEN vertz hPa IF type_yz EQ hPa THEN legniv hPa ENDIF Start legende definition and possible complement of p subtitle if n_elements varunit ne 0 then unite varunit else unite p subtitle colorf unite : Min strtrim string format fmt_mm mi 2 Max strtrim string format fmt_mm ma 2 if keyword_set intervalle then BEGIN if intervalle NE 1 then p subtitle p subtitle Int strtrim string format fmt_mm intervalle 2 endif if size contour type EQ 8 then BEGIN it is a structure unite contour 1 p subtitle p subtitle C contourf unite : Min strtrim string format fmt_mm contour 0 0 2 Max strtrim string format fmt_mm contour 0 1 2 if contour inter NE 1 then p subtitle p subtitle Int strtrim string format fmt_mm contour inter 2 ENDIF if size vectlegende type EQ 8 then begin unite vectlegende 1 p subtitle p subtitle C vecteurf unite : Min strtrim string format fmt_mm vectlegende 0 0 2 Max strtrim string format fmt_mm vectlegende 0 1 2 endif Shapping of subdomain s dimensions la1 strtrim string format fmt_bt lat1 2 la2 strtrim string format fmt_bt lat2 2 lo1 strtrim string format fmt_bt lon1 2 lo2 strtrim string format fmt_bt lon2 2 pr1 strtrim string format fmt_bt vert1 2 pr2 strtrim string format fmt_bt vert2 2 Management of the date if n_elements vardate EQ 0 then vardate if NOT keyword_set direc then direc if strpos direc t NE 1 then begin svardate strtrim vairdate time 0 1 strtrim vairdate time jpt 1 1 ENDIF ELSE svardate vardate case on the caes where the caption is applied case coupe of xy :begin if strupcase vargrid EQ W then firstz firstzw ELSE firstz firstzt if strpos direc z EQ 1 AND firstz NE 0 then BEGIN prof strtrim round gdep 0 1 p title expf varexp datef svardate fieldf varname depthf prof legniv ENDIF ELSE p title expf varexp datef svardate fieldf varname x title lontitle y title lattitle end xz :begin IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim ny 1 IF long n LE 3 THEN zonalf Section if keyword_set endpoints AND lat1 NE lat2 then p title endpointsf varexp datef svardate fieldf varname ELSE p title zonalf varexp datef svardate fieldf varname x title lontitle if keyword_set endpoints AND lat1 EQ lat2 then BEGIN IF key_onearth THEN x title x title at strtrim lataxe 0 0 lat1 1 ELSE x title x title at j index strtrim lat1 1 ENDIF y title depthf2 end yz :begin IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim nx 1 IF long n LE 3 THEN meridf if keyword_set endpoints AND lon1 NE lon2 then p title endpointsf varexp datef svardate fieldf varname ELSE p title meridf varexp datef svardate fieldf varname y title vertz x title lattitle if keyword_set endpoints AND lon1 EQ lon2 then BEGIN IF key_onearth THEN x title x title at strtrim lonaxe 0 0 lon1 1 ELSE x title x title at i index strtrim lon1 1 ENDIF end xt :begin IF keyword_set npts THEN n strtrim npts 1 if keyword_set endpoints AND lat1 NE lat2 then p title diaghovxt varexp fieldf varname ELSE p title hovxt varexp fieldf varname IF time size time 0 1 time 0 GE 10 THEN y title timef x title lontitle if keyword_set endpoints AND lat1 EQ lat2 then BEGIN IF key_onearth THEN x title x title at strtrim lataxe 0 0 lat1 1 ELSE x title x title at j index strtrim lat1 1 ENDIF end yt :begin IF keyword_set npts THEN n strtrim npts 1 if keyword_set endpoints AND lon1 NE lon2 then p title diaghovyt varexp fieldf varname ELSE p title hovyt varexp fieldf varname IF time size time 0 1 time 0 GE 10 THEN x title timef y title lattitle if keyword_set endpoints AND lon1 EQ lon2 then BEGIN IF key_onearth THEN x title x title at strtrim lonaxe 0 0 lon1 1 ELSE x title x title at i index strtrim lon1 1 ENDIF end zt :begin IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim nx ny 1 p title hovzt varexp fieldf varname y title depthf2 IF time size time 0 1 time 0 GE 10 THEN x title timef end t :begin IF keyword_set npts THEN n strtrim npts 1 ELSE BEGIN if keyword_set integration3d then n strtrim nx ny nz 1 ELSE n strtrim nx ny 1 ENDELSE p title hovt varexp fieldf varname y title varname IF time size time 0 1 time 0 GE 10 THEN x title timef end x :begin IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim ny nz 1 if keyword_set endpoints AND lat1 NE lat2 then p title endpointsf varexp datef svardate fieldf varname ELSE p title varexp datef svardate fieldf varname x title lontitle if keyword_set endpoints AND lat1 EQ lat2 then BEGIN IF key_onearth THEN x title x title at strtrim lataxe 0 0 lat1 1 ELSE x title x title at j index strtrim lat1 1 ENDIF y title varname end y :begin IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim nx nz 1 if keyword_set endpoints AND lon1 NE lon2 then p title endpointsf varexp datef svardate fieldf varname ELSE p title varexp datef svardate fieldf varname x title lattitle if keyword_set endpoints AND lon1 EQ lon2 then BEGIN IF key_onearth THEN x title x title at strtrim lonaxe 0 0 lon1 1 ELSE x title x title at i index strtrim lon1 1 ENDIF y title varname end z :begin IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim nx ny 1 p title varexp datef svardate fieldf varname y title depthf2 x title varname end yfx : BEGIN IF keyword_set npts THEN n strtrim npts 1 ELSE n strtrim nx ny nz 1 p title varexp datef svardate varunit x title varname2 y title varname END else: ENDCASE if keyword_set direc then BEGIN if strpos direc x NE 1 then p subtitle lonintf lo1 lo2 onf strtrim nx 1 points C p subtitle if strpos direc y NE 1 then BEGIN if strpos p subtitle EQ 1 then p subtitle latintf la1 la2 onf strtrim ny 1 points C p subtitle ELSE p subtitle latintf la1 la2 onf strtrim ny 1 points p subtitle ENDIF if strpos direc z NE 1 AND nz NE 1 OR coupe NE xy then BEGIN if strpos p subtitle EQ 1 then p subtitle depintf pr1 pr2 onf strtrim nz 1 points C p subtitle ELSE p subtitle depintf pr1 pr2 onf strtrim nz 1 points p subtitle ENDIF ENDIF if keyword_set endpoints AND coupe NE yt AND lat1 NE lat2 then p title p title C C if keyword_set key_performance THEN print temps legende systime 1 tempsun return end"); 286 a[284] = new Array("./ToBeReviewed/PLOTS/plotsym.html", "plotsym.pro", "", " file_comments function to make plotting symbols much easier categories Graphic Keyword circle circle symbol Keyword TRIANGLE triangle symbol Keyword DIAMOND diamond symbold Keyword BOX box symbol Keyword LINE line symbol Keyword SCALE scales the symbol Keyword ANGLE angle the symbol should be rotated Keyword _EXTRA extra keywords for usersym These are thick color and fill history Written by: Ronn Kling Ronn Kling Consulting 7038 Westmoreland Dr Warrenton VA 20187 klingrl juno com copyright 1999 all rights reserved version Id: plotsym pro 142 2006 07 21 12:47:49Z navarro function plotsym circle circle triangle triangle diamond diamond angle angle box box line line scale scale _extra extra compile_opt idl2 strictarrsubs if not keyword_set scale then scale 1 0 if not keyword_set angle then angle 0 0 if keyword_set circle then begin theta findgen 30 29 360 endif else if keyword_set triangle then begin theta 30 90 210 30 endif else if keyword_set diamond then begin theta 0 90 180 270 0 endif else if keyword_set box then begin theta 315 45 135 225 315 endif else if keyword_set line then begin theta 180 0 endif theta theta angle x cos theta dtor scale y sin theta dtor scale usersym x y _extra extra return 8 end"); 287 a[285] = new Array("./ToBeReviewed/PLOTS/reinitplt.html", "reinitplt.pro", "", " file_comments This procedure will reinitialise all or a selection ofthe system plot variables categories plot Utility keyword X clear the appropriate variable keyword Y clear the appropriate variable keyword Z clear the appropriate variable keyword P clear the appropriate variable keyword ALL Clear all this is equivalent to x y z p keyword INVERT Invert the logic Clear all unselected variables Therefore clearplt all invert does nothing uses common pro restrictions The sytem plot variables are changed history Written by: Trevor Harris Physics Dept University of Adelaide July 1990 Sebastien Masson 7 5 98 version Id: reinitplt pro 142 2006 07 21 12:47:49Z navarro pro reinitplt all all x x y y z z p p invert invert compile_opt idl2 strictarrsubs clearx 0 cleary 0 clearz 0 clearp 0 if keyword_set x then clearx 1 if keyword_set y then cleary 1 if keyword_set z then clearz 1 if keyword_set p then clearp 1 if keyword_set all or not keyword_set x and not keyword_set y and not keyword_set z and not keyword_set p then begin clearx 1 cleary 1 clearz 1 clearp 1 endif if keyword_set invert then begin clearx not clearx cleary not cleary clearz not clearz clearp not clearp endif if clearx then begin x charsize 0 x GRIDSTYLE 0 X MARGIN 10 3 X MINOR 0 X OMARGIN 0 0 x region 0 X RANGE 0 x STYLE 5 x tick 1 x TICKFORMAT x TICKLEN 0 x tickname x ticks 0 X TICKV 0 X TICKV 1 x title x TYPE 0 endif if cleary then begin y charsize 0 y GRIDSTYLE 0 Y MARGIN 10 3 Y MINOR 0 Y OMARGIN 0 0 y region 0 Y RANGE 0 y STYLE 5 y tick 1 y TICKFORMAT y TICKLEN 0 y tickname y ticks 0 Y TICKV 0 Y TICKV 1 y title y TYPE 0 endif if clearz then begin z charsize 0 z GRIDSTYLE 0 Z MARGIN 10 3 Z MINOR 0 Z OMARGIN 0 0 z region 0 Z RANGE 0 z STYLE 1 z tick 1 z TICKFORMAT z TICKLEN 0 z tickname z ticks 0 Z TICKV 0 Z TICKV 1 z title z TYPE 0 endif if clearp then begin p BACKGROUND d n_colors 1 255 p CHARSIZE 1 p CHARTHICK 0 p LINESTYLE 0 p MULTI replicate 0 5 p NOERASE 0 p POSITION 0 p region 0 p title p subtitle p ticklen 0 02 p thick 0 1 p color 0 endif return end "); 288 a[286] = new Array("./ToBeReviewed/PLOTS/style.html", "style.pro", "", " file_comments Choose the way to trace isolines categories graphic param LABSTYLE in required Number to which the style of drawing choosen refer to param LEVEL_Z2D in required Vector containing values of isolignes to be traced param LINESTYLE out Vector used to define the isocontour s style Comment: remenber: Index Linestyle 0 Solid 1 Dotted 2 Dashed 3 Dash Dot 4 Dash Dot Dot Dot 5 Long Dashes param THICK out Vector defining the thick of the isoline history Sebastien Masson smasson lodyc jussieu fr version Id: style pro 142 2006 07 21 12:47:49Z navarro pro style labstyle level_z2d linestyle thick compile_opt idl2 strictarrsubs case labstyle of 0: begin series: Two thin continuous lines one boldface continuous line thick 1 1 2 linestyle 0 return end 1: begin series: Before the middle of levels: thin dash Then thin continuous trait If the middle of the drawing is drawn it is in boldface continuous trait impair n_elements level_z2d 2 fix n_elements level_z2d 2 a replicate 0 fix n_elements level_z2d 2 b replicate 1 fix n_elements level_z2d 2 c replicate 2 fix n_elements level_z2d 2 if impair then begin thick b 2 b linestyle c 0 a endif else begin thick 0 linestyle c a endelse return end 2: begin series: Before the sill defined by answering to a question : thin dash Then thin continuous trait If the sill is drawn it is in boldface continuous trait seuil xquestion Quelle est la limite tirets trait continu 0 seuil float seuil rien where level_z2d lt seuil n a replicate 0 n_elements level_z2d n c replicate 2 n if seuil eq level_z2d n then begin thick replicate 1 n 2 replicate 1 n_elements level_z2d 1 n linestyle c a endif else begin thick 0 linestyle c a endelse return end 3: begin n n_elements level_z2d seuil level_z2d 1 n 2 thick intarr n thick indgen n 4 4 1 thick indgen n 4 4 1 1 thick indgen n 4 4 2 2 thick indgen n 4 4 3 1 linestyle intarr n linestyle indgen n 4 4 3 linestyle indgen n 4 4 1 0 linestyle indgen n 4 4 2 0 linestyle indgen n 4 4 3 0 labels intarr n labels indgen n 2 2 1 labels n 2 0 return end 4: begin Boldface continuous trait seuil 1 e 6 thick replicate 5 n_elements level_z2d linestyle 0 rien where abs level_z2d max abs level_z2d LT seuil if rien 0 NE 1 then thick rien 0 3 end else: begin ras report Le numero de labstyle demande n existe pas stop end endcase return end"); 289 a[287] = new Array("./ToBeReviewed/PLOTS/symbols.html", "symbols.pro", "", " file_comments Create custom plotting symbols param NSYM in required 1 open circle 2 filled circle 3 arrow pointing right 4 arrow pointing left 5 arrow pointing up 6 arrow pointing down 7 arrow pointing up and left 45 degrees 8 arrow pointing down and left 9 arrow pointing down and right 10 arrow pointing up and right 11 through 18 are bold versions of 3 through 10 19 horizontal line 20 box 21 diamond 22 triangle 30 filled box 31 filled diamond 32 filled triangle param SCALE in required size of symbols keyword COLOR color of symbols restrictions The desired symbol is stored in the user buffer and will be plotted if P PSYM 8 history Jeff Bennett U of Colorado 198 version Id: symbols pro 142 2006 07 21 12:47:49Z navarro pro symbols nsym scale color col compile_opt idl2 strictarrsubs on_error 2 fill 0 case 1 of nsym le 2 : begin circles for large scales increase number of points for res if scale ge 4 then a findgen 25 else a findgen 13 a a 3 14159 6 0 12 or 24 pi 6 xarr cos a yarr sin a if nsym eq 2 then fill 1 end nsym ge 3 nsym le 18 : begin arrow heads xarr fltarr 5 yarr xarr xarr 1 10 xarr 2 6 yarr 2 2 nsyms greater than 10 should be filled arrows if nsym gt 10 then begin xarr 3 6 xarr 4 10 yarr 3 2 fill 1 endif else begin xarr 3 10 xarr 4 6 yarr 4 2 endelse case 1 of nsym eq 3 : dummy 0b nsym eq 4 : xarr 1 xarr nsym eq 11 nsym eq 12 : begin xarr extrac xarr 0 11 yarr extrac yarr 0 11 yarr 6 0 5 xarr 7 6 yarr 7 0 5 xarr 8 6 yarr 8 0 5 yarr 9 0 5 if nsym eq 12 then begin rotation xarr yarr 180 nx ny xarr nx yarr ny endif end nsym eq 5 nsym eq 13 : begin temp xarr xarr yarr yarr temp end nsym eq 6 nsym eq 14 : begin temp 1 xarr xarr yarr yarr temp end nsym ge 7 nsym le 10 nsym ge 15 nsym le 18 : begin case 1 of nsym eq 7 nsym eq 15 : deg 45 nsym eq 8 nsym eq 16 : deg 135 nsym eq 9 nsym eq 17 : deg 225 nsym eq 10 nsym eq 18 : deg 315 endcase rotation xarr yarr deg nx ny xarr nx yarr ny end end nsym ge 7 endcase end nsym between 3 and 18 nsym eq 20 nsym eq 21 nsym eq 30 nsym eq 31 : begin xarr fltarr 5 3 yarr xarr xarr 1 3 xarr 2 3 yarr 2 3 yarr 3 3 if nsym eq 21 nsym eq 31 then begin rotation xarr yarr 45 nx ny nx 0 70 nx shrink the x direction xarr nx yarr ny endif if nsym ge 30 then fill 1 end nsym 20 21 30 31 nsym eq 22 nsym eq 32 : begin side length 6 0 at centroid yarr fltarr 4 6 4 xarr fltarr 4 6 2 xarr 1 6 2 xarr 2 0 yarr 2 6 sqrt 3 2 6 4 if nsym eq 32 then fill 1 end else: begin xarr fltarr 2 1 yarr xarr 0 xarr 1 1 end endcase xarr xarr scale yarr yarr scale set symbol buffer if keyword_set col then usersym xarr yarr fill fill color col else usersym xarr yarr fill fill return end"); 290 290 a[288] = new Array("./ToBeReviewed/POSTSCRIPT/calibre.html", "calibre.pro", "", " NAME: calibre PURPOSE:a partir d un rapport d aspect et des valeurs en ligne de characteres des differentes marges calcul posfenetre et posbar qui servent a placer le dessin et la barre de couleur grace a p position sur une feuille ou sur une sortie ecran dont la fenetre a les memes proportions CATEGORY: positionnement du graphe CALLING SEQUENCE: calibre rapportyx marge margebar smalldraw posfenetre posbar INPUTS: rapportyx: rapport d echelle entre la longueur de l axe des y et celle des x par ex pour une carte xy rapportyx lat2 lat1 lon2 lon1 marge: vecteur de 4 elements contenant la taille des marges a gauche a droite en bas et en haut devant entourer le graphe tout est mesure en lignes de characteres margebar: vecteur de 4 elements contenant la taille des marges a gauche a droite en bas et ATTENTION le dernier element est cette fois ci la position de coin en haut a droite devant entourer la barre de couleur tout est mesure en lignes de characteres smalldraw: 2 possiblites un vecteur de 4 elements donnant en portrait ou en landscape la position de cadre ds lequel doit rentrer le dessin cette position est donne par les coordonnes des 2 coins du cadre: en bas a gauche et en haut a droite elle s exprime tjs pour un postscript ou une sortie ecran en cm l origine etant le coin en bas a gauche un vecteur de 3 elements donnant le nombre de colonnes a faire de le dessin le nombre de lignes et enfin le numero de la case que doit occuper le dessin cf matlab par ex pour faire 6 dessin en 2 colonnes et 3 lignes et occuper la 4 eme case small 2 3 4 KEYWORD PARAMETERS: REMPLI:oblige le dessin a occuper l espace maximum definit par smalldraw sans resperter le rapport y sur x YXASPECT: force le rapport y sur x a prendre la valeur rapportyx yxaspect ce mot cle est utile ds deux cas: 1 yxaspect 1 : oblige rapportyx a etre bien respecte sinon calibre se reserve le droit de changer un peu celui ci dans le cas ou le rapport d aspect de small dessin est trop different de celui de smalldraw 2 yxaspect n : multiplie par n le rapport d aspect donne par defaut par ex ds plt rapportyx est calcule pour que le repere soit orthonorme pour avoir un repere ou l axe des y est 2 fois plus dilate que celui des y YXASPECT 2 PORTRAIT et LANDSCAPE: mots cles plus utilises mais tjs fonctionnels OUTPUTS: posfenetre: un vecteur de 4 elements contenant la position de cadre contenant les legendes le graphe en coordonnes normalises Rq: pour positionner le dessin il faut apres l appelle de calibre faire p position posfenetre posbar: cf posfentre mais pour la barre de couleur meme remarque pour positionner la barre de couleur p position posbar COMMON BLOCKS: common pro SIDE EFFECTS: RESTRICTIONS: EXAMPLE: MODIFICATION HISTORY: Sebastien Masson smasson lodyc jussieu fr 11 12 98 pro calibre rapportyx marge margebar smalldraw posfenetre posbar REMPLI rempli YXASPECT yxaspect PORTRAIT portrait LANDSCAPE lanscape _extra ex compile_opt idl2 strictarrsubs cm_4ps IF NOT keyword_set key_forgetold THEN BEGIN updatenew updatekwd ENDIF tempsun systime 1 pour key_performance if keyword_set portrait then key_portrait 1 if keyword_set landscape then key_portrait 0 if keyword_set yxaspect then begin rapportyx rapportyx yxaspect test2 0 endif else begin yxaspect 1 test2 1 ENDELSE mipgsz min page_size max mapgsz choix de Landscape ou Portrait if n_elements key_portrait eq 0 then begin if rapportyx ge 1 then key_portrait 1 if rapportyx lt 1 then key_portrait 0 endif si smalldraw est compte comme ds matlab if n_elements smalldraw EQ 3 then begin if n_elements page_margins EQ 0 then page_margins 1 1 1 1 smalldraw long smalldraw nbrecol smalldraw 0 nbrelig smalldraw 1 numero smalldraw 2 1 numlig numero nbrecol numcol numero numlig nbrecol bas mipgsz key_portrait mapgsz 1 key_portrait cote mapgsz key_portrait mipgsz 1 key_portrait poscol page_margins 0 findgen nbrecol 1 1 bas page_margins 0 page_margins 1 nbrecol poslig cote page_margins 3 findgen nbrelig 1 1 cote page_margins 2 page_margins 3 nbrelig smalldraw poscol numcol poslig numlig 1 poscol numcol 1 poslig numlig endif determination de la taille des characteres p charsize nombre_de_mots_ds_titre 60 p charsize 1 smalldraw 2 smalldraw 0 d x_px_cm nombre_de_mots_ds_titre d y_ch_size if p charsize gt 1 then p charsize 1 transfert de marge en cm cm 1 d x_px_cm marge 1 marge d y_ch_size p charsize cm margebar 1 margebar d y_ch_size p charsize cm definition de la portion de feuille ou on dessine if key_portrait eq 0 then begin big smalldraw 2 smalldraw 0 small smalldraw 3 smalldraw 1 endif else begin small smalldraw 2 smalldraw 0 big smalldraw 3 smalldraw 1 endelse if key_portrait eq 0 then rapportmax 1 small marge 3 marge 1 big marge 2 marge 0 else rapportmax 1 small marge 2 marge 0 big marge 3 marge 1 si yxaspect n est pas specifie on modifie la valeur de rapportyx pour que ca colle un peu plus aux proportions de la feuille if rapportyx le rapportmax then begin if test2 then begin rap 1 rapportmax rapportyx if rap ge 5 and rap lt 6 then rapportyx rapportyx 1 5 if rap ge 6 and rap lt 7 then rapportyx rapportyx 2 if rap ge 7 and rap lt 8 then rapportyx rapportyx 2 5 if rap ge 8 then rapportyx rapportyx 3 endif endif else begin if test2 then begin rap 1 rapportmax rapportyx if rap lt 1 5 and rap ge 1 6 then rapportyx rapportyx 1 5 if rap lt 1 6 and rap ge 1 7 then rapportyx rapportyx 2 if rap lt 1 7 and rap ge 1 8 then rapportyx rapportyx 2 5 if rap lt 1 8 then rapportyx rapportyx 3 endif endelse dans le cas ou on fait un Landscape: if key_portrait eq 0 then begin if keyword_set rempli then begin xs big ys small endif else begin if rapportyx le rapportmax then begin xs big ys 1 big marge 0 marge 1 rapportyx marge 2 marge 3 if ys gt small then begin xs 1 small marge 2 marge 3 rapportyx marge 0 marge 1 ys small endif endif else begin xs 1 small marge 2 marge 3 rapportyx marge 0 marge 1 ys small if xs gt big then begin xs big ys 1 big marge 0 marge 1 rapportyx marge 2 marge 3 endif endelse endelse xoff 1 small ys 2 smalldraw 1 yoff 1 big xs 2 xs mapgsz smalldraw 2 a 1 mapgsz yoff mapgsz b 1 xoff mipgsz c a 1 xs mapgsz d b 1 ys mipgsz endif dans le cas ou on fait un portrait: else begin if keyword_set rempli then begin xs small ys big endif else begin if rapportyx le rapportmax then begin xs small ys 1 small marge 0 marge 1 rapportyx marge 2 marge 3 if ys gt big then begin xs 1 big marge 2 marge 3 rapportyx marge 0 marge 1 ys big endif endif else begin xs 1 big marge 2 marge 3 rapportyx marge 0 marge 1 ys big if xs gt small then begin xs small ys 1 small marge 0 marge 1 rapportyx marge 2 marge 3 endif endelse endelse xoff 1 small xs 2 smalldraw 0 yoff 1 big ys 2 smalldraw 1 a 1 xoff mipgsz b 1 yoff mapgsz c a 1 xs mipgsz d b 1 ys mapgsz xset xoff yset yoff endelse bas mapgsz 1 key_portrait mipgsz key_portrait cote mipgsz 1 key_portrait mapgsz key_portrait posfenetre a b c d marge 0 bas marge 2 cote marge 1 bas marge 3 cote posbar a b c d margebar 0 bas margebar 2 cote margebar 1 bas ys margebar 3 cote if keyword_set key_performance THEN print temps calibre systime 1 tempsun IF NOT keyword_set key_forgetold THEN BEGIN updateold ENDIF return end"); 291 291 a[289] = new Array("./ToBeReviewed/POSTSCRIPT/chcolps.html", "chcolps.pro", "", "PRO format_colortable_hexa table compile_opt idl2 strictarrsubs tvlct r g b get z strarr 256 y strarr 256 for k 0 255 do z k 00 strtrim string r k format Z 2 for k 0 255 do y k y k strmid z k strlen z k 2 2 for k 0 255 do z k 00 strtrim string g k format Z 2 for k 0 255 do y k y k strmid z k strlen z k 2 2 for k 0 255 do z k 00 strtrim string b k format Z 2 for k 0 255 do y k y k strmid z k strlen z k 2 2 table strlowcase y END PRO build_table tableout Fabrique le bloc de colortable compile_opt idl2 strictarrsubs format_colortable_hexa table tableout strarr 25 tableout 0 COLORTAB def END PRO chcolps n1 n2 file PALIT1 palit1 PALIT2 palit2 Modifie les couleurs d un fichier postscript Creation : G Roullet 1999 recupere les palettes compile_opt idl2 strictarrsubs lct n1 IF keyword_set palit1 THEN palit palit1 tvlct red green blue get lct n2 IF keyword_set palit2 THEN palit palit2 tvlct red1 green1 blue1 get filein file fileout file new openr numin filein get_lun openw numout fileout get_lun ligne nl 0 colortab 0 Scan le fichier WHILE NOT eof numin DO BEGIN readf numin ligne format A nl nl 1 Replace setrgbcolor statements pos strpos ligne setrgbcolor IF pos NE 1 THEN BEGIN r round float strmid ligne pos 18 6 255 g round float strmid ligne pos 12 6 255 b round float strmid ligne pos 6 6 255 ind where r EQ red AND g EQ green AND b EQ blue ind ind 0 IF ind 0 NE 1 THEN BEGIN r1 red1 ind 255 g1 green1 ind 255 b1 blue1 ind 255 color string r1 g1 b1 format 3 F5 3 : X strput ligne color pos 18 ENDIF ELSE BEGIN print erreur ligne : nl dist abs r red abs g green abs b blue ind where dist EQ min dist 0 ind ind 0 print je trouve long r g b print je remplace par red ind green ind blue ind r1 red1 ind 255 g1 green1 ind 255 b1 blue1 ind 255 color string r1 g1 b1 format 3 F5 3 : X strput ligne color pos 18 ENDELSE ENDIF Replace COLORTAB pos strpos ligne COLORTAB IF pos NE 1 THEN BEGIN build_table table n 0 colortab 1 ENDIF IF colortab THEN BEGIN ligne table n n n 1 IF n EQ 24 THEN colortab 0 ENDIF Ecrit le fichier de sorti printf numout ligne format A ENDWHILE close numin close numout free_lun numin free_lun numout spawn gs fileout END "); … … 294 294 a[292] = new Array("./ToBeReviewed/STATISTICS/a_timecorrelate.html", "a_timecorrelate.pro", "", " NAME: A_TIMECORRELATE PURPOSE: Same function as A_CORRELATE but accept array until 4 dimension for input and do the autocorrelation or the autocovariance along the time dimension which must be the last one of the input array This function computes the autocorrelation Px L or autocovariance Rx L of a sample population X as a function of the lag L CATEGORY: Statistics CALLING SEQUENCE: Result a_timecorrelate X Lag INPUTS: X: an Array which last dimension is the time dimension os size n LAG: A scalar or n element vector in the interval n 2 n 2 of type integer that specifies the absolute distance s between indexed elements of X KEYWORD PARAMETERS: COVARIANCE: If set to a non zero value the sample autocovariance is computed DOUBLE: If set to a non zero value computations are done in double precision arithmetic EXAMPLE Define an n element sample population x 3 73 3 67 3 77 3 83 4 67 5 87 6 70 6 97 6 40 5 57 Compute the autocorrelation of X for LAG 3 0 1 3 4 8 lag 3 0 1 3 4 8 result a_correlate x lag The result should be: 0 0146185 1 00000 0 810879 0 0146185 0 325279 0 151684 PROCEDURE: n L 1 sigma X k Xmean X k L Xmean k 0 correlation X L n 1 sigma X k Xmean 2 k 0 n L 1 sigma X k Xmean X k L Xmean k 0 covariance X L n Where Xmean is the Time mean of the sample population x x t 0 x t 1 x t n 1 REFERENCE: INTRODUCTION TO STATISTICAL TIME SERIES Wayne A Fuller ISBN 0 471 28715 6 MODIFICATION HISTORY: 24 2 2000 Sebastien Masson smasson lodyc jussieu fr Based on the A_CORRELATE procedure of IDL FUNCTION TimeAuto_Cov X M nT Double Double zero2nan zero2nan Sample autocovariance function compile_opt idl2 strictarrsubs TimeDim size X n_dimensions Xmean TOTAL X TimeDim Double Double nT if double then one 1 0d ELSE one 1 0 Xmean Xmean replicate one nT M case TimeDim of 1:res TOTAL X 0:nT M 1L Xmean X M:nT 1L Xmean TimeDim Double Double 2:res TOTAL X 0:nT M 1L Xmean X M:nT 1L Xmean TimeDim Double Double 3:res TOTAL X 0:nT M 1L Xmean X M:nT 1L Xmean TimeDim Double Double 4:res TOTAL X 0:nT M 1L Xmean X M:nT 1L Xmean TimeDim Double Double ENDCASE if keyword_set zero2nan then begin zero where res EQ 0 if zero 0 NE 1 then res zero values f_nan endif RETURN res END FUNCTION A_TimeCorrelate X Lag COVARIANCE Covariance DOUBLE Double compile_opt idl2 strictarrsubs Compute the sample autocorrelation or autocovariance of Xt Xt l as a function of the lag l ON_ERROR 2 XDim SIZE X dimensions XNDim SIZE X n_dimensions nT XDim XNDim 1 Check length if nT lt 2 then MESSAGE Time axis of X array must contain 2 or more elements If the DOUBLE keyword is not set then the internal precision and result are identical to the type of input if N_ELEMENTS Double eq 0 then Double SIZE X type eq 5 if n_elements lag EQ 0 then lag 0 nLag N_ELEMENTS Lag if nLag eq 1 then Lag Lag Create a 1 element vector case XNDim of 1:if Double eq 0 then Auto FLTARR nLag else Auto DBLARR nLag 2:if Double eq 0 then Auto FLTARR XDim 0 nLag else Auto DBLARR XDim 0 nLag 3:if Double eq 0 then Auto FLTARR XDim 0 XDim 1 nLag else Auto DBLARR XDim 0 XDim 1 nLag 4:if Double eq 0 then Auto FLTARR XDim 0 XDim 1 XDim 2 nLag else Auto DBLARR XDim 0 XDim 1 XDim 2 nLag endcase if KEYWORD_SET Covariance eq 0 then begin Compute Autocorrelation for k 0 nLag 1 do case XNDim of 1:Auto k TimeAuto_Cov X ABS Lag k nT Double Double TimeAuto_Cov X 0L nT Double Double zero2nan 2:Auto k TimeAuto_Cov X ABS Lag k nT Double Double TimeAuto_Cov X 0L nT Double Double zero2nan 3:Auto k TimeAuto_Cov X ABS Lag k nT Double Double TimeAuto_Cov X 0L nT Double Double zero2nan 4:Auto k TimeAuto_Cov X ABS Lag k nT Double Double TimeAuto_Cov X 0L nT Double Double zero2nan endcase endif else begin Compute Autocovariance for k 0 nLag 1 do case XNDim of 1:Auto k TimeAuto_Cov X ABS Lag k nT Double Double nT 2:Auto k TimeAuto_Cov X ABS Lag k nT Double Double nT 3:Auto k TimeAuto_Cov X ABS Lag k nT Double Double nT 4:Auto k TimeAuto_Cov X ABS Lag k nT Double Double nT endcase endelse if Double eq 0 then RETURN FLOAT Auto else RETURN Auto END"); 295 295 a[293] = new Array("./ToBeReviewed/STATISTICS/c_timecorrelate.html", "c_timecorrelate.pro", "", " NAME: C_TIMECORRELATE PURPOSE: This function computes the time cross correlation Pxy L or the time cross covariance between 2 arrays this is some kind of c_correlate but for multidimenstionals arrays as a function of the lag L CATEGORY: Statistics CALLING SEQUENCE: Result c_timecorrelate X Y Lag INPUTS: X: an Array which last dimension is the time dimension of size n float or double Y: an Array which last dimension is the time dimension of size n float or double LAG: A scalar or n element vector in the interval n 2 n 2 of type integer that specifies the absolute distance s between indexed elements of X KEYWORD PARAMETERS: COVARIANCE: If set to a non zero value the sample cross covariance is computed DOUBLE: If set to a non zero value computations are done in double precision arithmetic EXAMPLE Define two n element sample populations x 3 73 3 67 3 77 3 83 4 67 5 87 6 70 6 97 6 40 5 57 y 2 31 2 76 3 02 3 13 3 72 3 88 3 97 4 39 4 34 3 95 Compute the cross correlation of X and Y for LAG 5 0 1 5 6 7 lag 5 0 1 5 6 7 result c_timecorrelate x y lag The result should be: 0 428246 0 914755 0 674547 0 405140 0 403100 0 339685 PROCEDURE: FOR L 0 n L 1 sigma X k Xmean Y k L Ymean k 0 correlation X Y L n 1 n 1 sqrt sigma X k Xmean 2 sigma Y k Ymean 2 k 0 k 0 n L 1 sigma X k Xmean Y k L Ymean k 0 covariance X Y L n FOR L 0 n L 1 sigma X k L Xmean Y k Ymean k 0 correlation X Y L n 1 n 1 sqrt sigma X k Xmean 2 sigma Y k Ymean 2 k 0 k 0 n L 1 sigma X k L Xmean Y k Ymean k 0 covariance X Y L n Where Xmean and Ymean are the time means of the sample populations x x t 0 x t 1 x t n 1 and y y t 0 y t 1 y t n 1 respectively REFERENCE: INTRODUCTION TO STATISTICAL TIME SERIES Wayne A Fuller ISBN 0 471 28715 6 MODIFICATION HISTORY: 01 03 2000 Sebastien Masson smasson lodyc jussieu fr Based on the C_CORRELATE procedure of IDL August 2003 Sebastien Masson update according to the update made in C_CORRELATE by W Biagiotti and available in IDL 5 5 FUNCTION TimeCross_Cov Xd Yd M nT Ndim Double Double ZERO2NAN zero2nan Sample cross covariance function compile_opt hidden case Ndim OF 1:res TOTAL Xd 0:nT M 1L Yd M:nT 1L Double Double 2:res TOTAL Xd 0:nT M 1L Yd M:nT 1L Ndim Double Double 3:res TOTAL Xd 0:nT M 1L Yd M:nT 1L Ndim Double Double 4:res TOTAL Xd 0:nT M 1L Yd M:nT 1L Ndim Double Double ENDCASE if keyword_set zero2nan then begin zero where res EQ 0 if zero 0 NE 1 then res zero values f_nan ENDIF RETURN res END FUNCTION C_Timecorrelate X Y Lag Covariance Covariance Double Double Compute the sample cross correlation or cross covariance of Xt Xt l and Yt Yt l as a function of the lag l ON_ERROR 2 xsize SIZE X ysize SIZE Y nt float xsize xsize 0 NDim xsize 0 if total xsize 0:xsize 0 NE ysize 0:ysize 0 NE 0 then MESSAGE X and Y arrays must have the same size and the same dimensions Check length if nt lt 2 then MESSAGE Time dimension of X and Y arrays must contain 2 or more elements If the DOUBLE keyword is not set then the internal precision and result are identical to the type of input if N_ELEMENTS Double eq 0 then Double Xsize Xsize 0 1 eq 5 or ysize ysize 0 1 eq 5 if n_elements lag EQ 0 then lag 0 nLag N_ELEMENTS Lag Deviations if double then one 1 0d ELSE one 1 0 Ndim size X n_dimensions Xd TOTAL X Ndim Double Double nT Xd X Xd replicate one nT Yd TOTAL Y Ndim Double Double nT Yd Y Yd replicate one nT if nLag eq 1 then Lag Lag Create a 1 element vector case NDim of 1:if Double eq 0 then Cross FLTARR nLag else Cross DBLARR nLag 2:if Double eq 0 then Cross FLTARR Xsize 1 nLag else Cross DBLARR Xsize 1 nLag 3:if Double eq 0 then Cross FLTARR Xsize 1 Xsize 2 nLag else Cross DBLARR Xsize 1 Xsize 2 nLag 4:if Double eq 0 then Cross FLTARR Xsize 1 Xsize 2 Xsize 3 nLag else Cross DBLARR Xsize 1 Xsize 2 Xsize 3 nLag endcase if KEYWORD_SET Covariance eq 0 then begin Compute Cross Crossation for k 0 nLag 1 do begin if Lag k ge 0 then BEGIN case NDim of 1: Cross k TimeCross_Cov Xd Yd Lag k nT Ndim Double Double 2: Cross k TimeCross_Cov Xd Yd Lag k nT Ndim Double Double 3: Cross k TimeCross_Cov Xd Yd Lag k nT Ndim Double Double 4: Cross k TimeCross_Cov Xd Yd Lag k nT Ndim Double Double endcase ENDIF else BEGIN case NDim of 1: Cross k TimeCross_Cov Yd Xd ABS Lag k nT Ndim Double Double 2: Cross k TimeCross_Cov Yd Xd ABS Lag k nT Ndim Double Double 3: Cross k TimeCross_Cov Yd Xd ABS Lag k nT Ndim Double Double 4: Cross k TimeCross_Cov Yd Xd ABS Lag k nT Ndim Double Double endcase ENDELSE ENDFOR div sqrt TimeCross_Cov Xd Xd 0L nT Ndim Double Double zero2nan TimeCross_Cov Yd Yd 0L nT Ndim Double Double zero2nan Cross temporary Cross temporary div replicate one nLag endif else begin Compute Cross Covariance for k 0 nLag 1 do begin if Lag k ge 0 then BEGIN case NDim of 1: Cross k TimeCross_Cov Xd Yd Lag k nT Ndim Double Double nT 2: Cross k TimeCross_Cov Xd Yd Lag k nT Ndim Double Double nT 3: Cross k TimeCross_Cov Xd Yd Lag k nT Ndim Double Double nT 4: Cross k TimeCross_Cov Xd Yd Lag k nT Ndim Double Double nT ENDCASE ENDIF else BEGIN case NDim of 1: Cross k TimeCross_Cov yd xd ABS Lag k nT Ndim Double Double nT 2: Cross k TimeCross_Cov yd xd ABS Lag k nT Ndim Double Double nT 3: Cross k TimeCross_Cov yd xd ABS Lag k nT Ndim Double Double nT 4: Cross k TimeCross_Cov yd xd ABS Lag k nT Ndim Double Double nT ENDCASE ENDELSE endfor endelse if Double eq 0 then RETURN FLOAT Cross else RETURN Cross END "); 296 a[294] = new Array("./ToBeReviewed/STRING/chkeywd.html", "chkeywd.pro", "", " file_comments In a string containing an order to executewith EXECUTE by example We change the value of one of keywords More generally in a string we look for the caracter chain: keywdname and we change the value of categories string keywords param STRINGIN in required it is a string param KEYWDNAME in required it is a string designating the name of keyword to look for param KEYWDVALUE in required The new value of the keyword to considerate in STRINGIN keyword SEPARATOR To look for the keyword we look for the first sign which follow the position of keywdname By default we substitute the string before the comma With the keyword SEPARATOR we can modify the cut of the string SEPARATOR give a caractere before the one we have to look for the comma which delimit the keyword in the string see examples keyword AFTER To look for the keyword we look for the first sign which follow the position of keywdname By default we substitute the string before the comma With the keyword AFTER we can modify the cut of the string AFTER give a caractere after the one we have to look for the comma which delimit the keyword in the string see examples returns stringout stringin modified if keywdname has been found in stringin uses common pro restrictions If keywdvalue is an array it will be convert in a vector restrictions Beware this function has loops ifs ad cases everywhere So it can not be used by big keywords with a lot of elements which are big arrays The input keyword must not contain Complex floatings structure Double precision complex Pointer Object reference Unsigned Integer Unsigned Longword Integer 64 bit Integer or Unsigned 64 bit Integer examples IDL b ok 111 year 1997 1998 1999 age_capitaine 35 IDL print b ok 111 year 1997 1998 1999 age_capitaine 35 IDL print chkeywd b ok c est bon ok c est bon year 1997 1998 1999 age_capitaine 35 IDL print chkeywd b YEAR indgen 5 sep ok 111 year 0 1 2 3 4 age_capitaine 35 IDL print chkeywd b YEAR indgen 5 sep after ok 111 year 0 1 2 3 4 age_capitaine 35 IDL b ok 111 year age_capitaine IDL print chkeywd b year c est bon ok 111 year c est bon age_capitaine history Sebastien Masson smasson lodyc jussieu fr 18 10 1999 24 11 1999: adaptation for keywords starting by version Id FUNCTION chkeywd stringin keywdname keywdvalue SEPARATOR separator AFTER after compile_opt idl2 strictarrsubs stringout stringin poskeywd strpos strlowcase stringout strlowcase keywdname if poskeywd EQ 1 then return stringout while poskeywd NE 1 do BEGIN change a keyword starting by toto if strmid stringout poskeywd 1 1 EQ then BEGIN ajoute keywdname tostr keywdvalue stringout strmid stringout 0 poskeywd 1 ajoute strmid stringout poskeywd strlen keywdname poskeywd poskeywd strlen ajoute poskeywd strpos stringout keywdname poskeywd ENDIF ELSE BEGIN change a keyword sarting by toto posegal strpos stringout poskeywd if posegal EQ 1 then return stringout if NOT keyword_set separator then separator posvirgule strpos stringout separator posegal 1 if keyword_set after then posvirgule strpos stringout posvirgule 1 ELSE posvirgule rstrpos stringout posvirgule 1 if posvirgule EQ 1 then posvirgule strlen stringout stringout strmid stringout 0 posegal 1 tostr keywdvalue strmid stringout posvirgule poskeywd strpos stringout keywdname posvirgule 1 ENDELSE endwhile return stringout end");297 a[295] = new Array("./ToBeReviewed/STRING/delchr.html", "delchr.pro", "", " file_comments Delete all occurrences of a character from a text string categories param OLD in required original text string param C in required character to delete keyword HELP returns new resulting string history R Sterner 5 Jul 1988 Johns Hopkins Applied Physics Lab RES 11 Sep 1989 converted to SUN R Sterner 27 Jan 1993 dropped reference to array Copyright C 1988 Johns Hopkins University Applied Physics Laboratory This software may be used copied or redistributed as long as it is not sold and this copyright notice is reproduced on each copy made This routine is provided as is without any express or implied warranties whatsoever Other limitations apply as described in the file disclaimer txt version Id FUNCTION DELCHR OLD C help hlp compile_opt idl2 strictarrsubs if n_params 0 lt 2 or keyword_set hlp then begin print Delete all occurrences of a character from a text string print new delchr old char print old original text string in print char character to delete in print new resulting string out return 1 endif B BYTE OLD convert string to a byte array CB BYTE C convert char to byte w where b ne cb 0 if w 0 eq 1 then return Nothing left return string b w Return new string END");298 a[296] = new Array("./ToBeReviewed/STRING/getfile.html", "getfile.pro", "", " file_comments Read a text file into a string array param filein in required text file name Keyword ERROR err error flag: 0 ok 1 file not opened 2 no lines in file keyword QUIET means give no error message keyword LINES n Number of lines to read def all Much faster if number of lines is known Automatic for IDL 5 6 or later keyword FIND search te file in the all path directories use find pro keyword HELP returns history R Sterner 20 Mar 1990 R Sterner 1999 Apr 14 Added LINES n keyword R Sterner 2003 Aug 29 Automatic lines if IDL 5 6 R Sterner 2003 Sep 02 Check if file exists first R Sterner 2003 Sep 04 Fixed error in number of lines in file R Sterner 2003 Oct 10 Fixed error when no lines R Sterner 2004 Jan 27 Fixed to work in IDL as old as vers 4 S Masson smasson lodyc jussieu fr 4 Feb 2002 search te file in the all path directories use find pro when using find keyword Use spawn cat for unix os Copyright C 1990 Johns Hopkins University Applied Physics Laboratory This software may be used copied or redistributed as long as it is not sold and this copyright notice is reproduced on each copy made This routine is provided as is without any express or implied warranties whatsoever Other limitations apply as described in the file disclaimer txt version Id function getfile filein error err help hlp quiet quiet lines lines find find compile_opt idl2 strictarrsubs if n_params 0 lt 1 or keyword_set hlp then begin print Read a text file into a string array print s getfile f print f text file name in print s string array out print Keywords: print ERROR err error flag: 0 ok 1 file not opened print 2 no lines in file print QUIET means give no error message print LINES n Number of lines to read def all print Much faster if number of lines is known print Automatic for IDL 5 6 or later return 1 endif if keyword_set find then begin file find filein file file 0 if file EQ NOT FOUND then begin print Error in getfile: File filein not fouond return 1 endif ENDIF ELSE file filein if version os_family EQ unix then begin spawn cat file res if res 0 NE then return res ELSE return endif if version release 0 ge 5 5 then begin f call_function file_search file count c endif else begin f findfile file count c endelse if c eq 0 then begin err 1 return endif if n_elements line eq 0 and version release 0 ge 5 6 then begin lines file_lines file if lines eq 0 then begin if not keyword_set quiet then print No lines in file err 2 return 1 endif minlines 0 endif else minlines 1 get_lun lun on_ioerror err openr lun file if n_elements lines ne 0 then begin s strarr lines readf lun s endif else begin s t while not eof lun do begin readf lun t s s t endwhile endelse close lun free_lun lun if n_elements s eq minlines then begin if not keyword_set quiet then print No lines in file err 2 return 1 endif if minlines eq 1 then s s 1: err 0 return s err: if err eq 168 then begin if not keyword_set quiet then print Non standard text file format free_lun lun return s endif if not keyword_set quiet then print Error in getfile: File file not opened free_lun lun err 1 return 1 end");296 a[294] = new Array("./ToBeReviewed/STRING/chkeywd.html", "chkeywd.pro", "", " file_comments In a string containing an order to executewith EXECUTE by example We change the value of one of keywords More generally in a string we look for the caracter chain: keywdname and we change the value of categories string keywords param STRINGIN in required it is a string param KEYWDNAME in required it is a string designating the name of keyword to look for param KEYWDVALUE in required The new value of the keyword to considerate in STRINGIN keyword SEPARATOR To look for the keyword we look for the first sign which follow the position of keywdname By default we substitute the string before the comma With the keyword SEPARATOR we can modify the cut of the string SEPARATOR give a caractere before the one we have to look for the comma which delimit the keyword in the string see examples keyword AFTER To look for the keyword we look for the first sign which follow the position of keywdname By default we substitute the string before the comma With the keyword AFTER we can modify the cut of the string AFTER give a caractere after the one we have to look for the comma which delimit the keyword in the string see examples returns stringout stringin modified if keywdname has been found in stringin uses common pro restrictions If keywdvalue is an array it will be convert in a vector restrictions Beware this function has loops ifs ad cases everywhere So it can not be used by big keywords with a lot of elements which are big arrays The input keyword must not contain Complex floatings structure Double precision complex Pointer Object reference Unsigned Integer Unsigned Longword Integer 64 bit Integer or Unsigned 64 bit Integer examples IDL b ok 111 year 1997 1998 1999 age_capitaine 35 IDL print b ok 111 year 1997 1998 1999 age_capitaine 35 IDL print chkeywd b ok c est bon ok c est bon year 1997 1998 1999 age_capitaine 35 IDL print chkeywd b YEAR indgen 5 sep ok 111 year 0 1 2 3 4 age_capitaine 35 IDL print chkeywd b YEAR indgen 5 sep after ok 111 year 0 1 2 3 4 age_capitaine 35 IDL b ok 111 year age_capitaine IDL print chkeywd b year c est bon ok 111 year c est bon age_capitaine history Sebastien Masson smasson lodyc jussieu fr 18 10 1999 24 11 1999: adaptation for keywords starting by version Id: chkeywd pro 142 2006 07 21 12:47:49Z navarro FUNCTION chkeywd stringin keywdname keywdvalue SEPARATOR separator AFTER after compile_opt idl2 strictarrsubs stringout stringin poskeywd strpos strlowcase stringout strlowcase keywdname if poskeywd EQ 1 then return stringout while poskeywd NE 1 do BEGIN change a keyword starting by toto if strmid stringout poskeywd 1 1 EQ then BEGIN ajoute keywdname tostr keywdvalue stringout strmid stringout 0 poskeywd 1 ajoute strmid stringout poskeywd strlen keywdname poskeywd poskeywd strlen ajoute poskeywd strpos stringout keywdname poskeywd ENDIF ELSE BEGIN change a keyword sarting by toto posegal strpos stringout poskeywd if posegal EQ 1 then return stringout if NOT keyword_set separator then separator posvirgule strpos stringout separator posegal 1 if keyword_set after then posvirgule strpos stringout posvirgule 1 ELSE posvirgule rstrpos stringout posvirgule 1 if posvirgule EQ 1 then posvirgule strlen stringout stringout strmid stringout 0 posegal 1 tostr keywdvalue strmid stringout posvirgule poskeywd strpos stringout keywdname posvirgule 1 ENDELSE endwhile return stringout end"); 297 a[295] = new Array("./ToBeReviewed/STRING/delchr.html", "delchr.pro", "", " file_comments Delete all occurrences of a character from a text string categories param OLD in required original text string param C in required character to delete keyword HELP returns new resulting string history R Sterner 5 Jul 1988 Johns Hopkins Applied Physics Lab RES 11 Sep 1989 converted to SUN R Sterner 27 Jan 1993 dropped reference to array Copyright C 1988 Johns Hopkins University Applied Physics Laboratory This software may be used copied or redistributed as long as it is not sold and this copyright notice is reproduced on each copy made This routine is provided as is without any express or implied warranties whatsoever Other limitations apply as described in the file disclaimer txt version Id: delchr pro 142 2006 07 21 12:47:49Z navarro FUNCTION DELCHR OLD C help hlp compile_opt idl2 strictarrsubs if n_params 0 lt 2 or keyword_set hlp then begin print Delete all occurrences of a character from a text string print new delchr old char print old original text string in print char character to delete in print new resulting string out return 1 endif B BYTE OLD convert string to a byte array CB BYTE C convert char to byte w where b ne cb 0 if w 0 eq 1 then return Nothing left return string b w Return new string END"); 298 a[296] = new Array("./ToBeReviewed/STRING/getfile.html", "getfile.pro", "", " file_comments Read a text file into a string array param filein in required text file name Keyword ERROR err error flag: 0 ok 1 file not opened 2 no lines in file keyword QUIET means give no error message keyword LINES n Number of lines to read def all Much faster if number of lines is known Automatic for IDL 5 6 or later keyword FIND search te file in the all path directories use find pro keyword HELP returns history R Sterner 20 Mar 1990 R Sterner 1999 Apr 14 Added LINES n keyword R Sterner 2003 Aug 29 Automatic lines if IDL 5 6 R Sterner 2003 Sep 02 Check if file exists first R Sterner 2003 Sep 04 Fixed error in number of lines in file R Sterner 2003 Oct 10 Fixed error when no lines R Sterner 2004 Jan 27 Fixed to work in IDL as old as vers 4 S Masson smasson lodyc jussieu fr 4 Feb 2002 search te file in the all path directories use find pro when using find keyword Use spawn cat for unix os Copyright C 1990 Johns Hopkins University Applied Physics Laboratory This software may be used copied or redistributed as long as it is not sold and this copyright notice is reproduced on each copy made This routine is provided as is without any express or implied warranties whatsoever Other limitations apply as described in the file disclaimer txt version Id: getfile pro 142 2006 07 21 12:47:49Z navarro function getfile filein error err help hlp quiet quiet lines lines find find compile_opt idl2 strictarrsubs if n_params 0 lt 1 or keyword_set hlp then begin print Read a text file into a string array print s getfile f print f text file name in print s string array out print Keywords: print ERROR err error flag: 0 ok 1 file not opened print 2 no lines in file print QUIET means give no error message print LINES n Number of lines to read def all print Much faster if number of lines is known print Automatic for IDL 5 6 or later return 1 endif if keyword_set find then begin file find filein file file 0 if file EQ NOT FOUND then begin print Error in getfile: File filein not fouond return 1 endif ENDIF ELSE file filein if version os_family EQ unix then begin spawn cat file res if res 0 NE then return res ELSE return endif if version release 0 ge 5 5 then begin f call_function file_search file count c endif else begin f findfile file count c endelse if c eq 0 then begin err 1 return endif if n_elements line eq 0 and version release 0 ge 5 6 then begin lines file_lines file if lines eq 0 then begin if not keyword_set quiet then print No lines in file err 2 return 1 endif minlines 0 endif else minlines 1 get_lun lun on_ioerror err openr lun file if n_elements lines ne 0 then begin s strarr lines readf lun s endif else begin s t while not eof lun do begin readf lun t s s t endwhile endelse close lun free_lun lun if n_elements s eq minlines then begin if not keyword_set quiet then print No lines in file err 2 return 1 endif if minlines eq 1 then s s 1: err 0 return s err: if err eq 168 then begin if not keyword_set quiet then print Non standard text file format free_lun lun return s endif if not keyword_set quiet then print Error in getfile: File file not opened free_lun lun err 1 return 1 end"); 299 299 a[297] = new Array("./ToBeReviewed/STRING/getwrd.html", "getwrd.pro", "", " file_comments Return the n th word from a text string categories param TXTSTR in required text string to extract from The first element is used if txt is an array param NTH in required word number to get first 0 def param MTH in required optional last word number to get keyword LOCATION l Return word n string location keyword DELIMITER d Set word delimiter def space tab keyword LAST means n is offset from last word So n 0 gives last word n 1 gives next to last If n 2 and m 0 then last 3 words are returned keyword NOTRIM suppresses whitespace trimming on ends keyword NWORDS n Returns number of words in string returns wrd returned word or words uses getwrd_com restrictions If a NULL string is given txt then the last string given is used This saves finding the words again If m n wrd will be a string of words from word n to word m If no m is given wrd will be a single word n n wrd will be a string of words from word n to print word m If no m is given wrd will be a single word print n 0 Smaller of in and im im im 0 to zero if in gt lst and im gt lst then return Out of range in in lst Larger of in and im im im lst to be last ll loc in Nth word start return strtrim strmid txtstr0 ll loc im loc in len im 2 endif N ABS NTH Allow nth 0 IF N GT NWDS 1 THEN RETURN out of range null ll loc n N th word position IF NTH LT 0 THEN GOTO NEG Handle nth 0 IF MTH GT NWDS 1 THEN MTH NWDS 1 Words to end if keyword_set notrim then begin RETURN STRMID TXTSTR0 ll LOC MTH LOC NTH LEN MTH endif else begin RETURN strtrim STRMID TXTSTR0 ll LOC MTH LOC NTH LEN MTH 2 endelse NEG: if keyword_set notrim then begin RETURN STRMID TXTSTR0 ll 9999 endif else begin RETURN strtrim STRMID TXTSTR0 ll 9999 2 endelse END"); 300 a[298] = new Array("./ToBeReviewed/STRING/isnumber.html", "isnumber.pro", "", " file_comments Determine if a text string is a valid number categories param TXT0 in required text string to test param X in required keyword HELP returns x optionaly returned numeric value if valid i test flag: 0: not a number 1: txt is a long integer 2: txt is a float 1: first word of txt is a long integer 2: first word of txt is a float history R Sterner 15 Oct 1986 Johns Hopkins Applied Physics Lab R Sterner 12 Mar 1990 upgraded Richard Garrett 14 June 1992 fixed bug in returned float value R Sterner 1999 Nov 30 Fixed a bug found by Kristian Kjaer Denmark Copyright C 1986 Johns Hopkins University Applied Physics Laboratory This software may be used copied or redistributed as long as it is not sold and this copyright notice is reproduced on each copy made This routine is provided as is without any express or implied warranties whatsoever Other limitations apply as described in the file disclaimer txt version Id function isnumber txt0 x help hlp compile_opt idl2 strictarrsubs if n_params 0 lt 1 or keyword_set hlp then begin print Determine if a text string is a valid number print i isnumber txt x print txt text string to test in print x optionaly returned numeric value if valid out print i test flag: out print 0: not a number print 1: txt is a long integer print 2: txt is a float print 1: first word of txt is a long integer print 2: first word of txt is a float return 1 endif txt strtrim txt0 2 trim blanks x 0 define X if txt eq then return 0 null string not a number sn 1 if nwrds txt gt 1 then begin get first word if more than one sn 1 txt getwrd txt 0 endif f_flag 0 Floating flag b byte txt Convert to byte array if b 0 eq 45 then b b 1: Drop leading Kristian Kjaer if b 0 eq 43 then b b 1: Drop leading bug fix w where b eq 43 cnt Look for if cnt gt 1 then return 0 Alow only 1 t delchr txt Drop it w where b eq 45 cnt Look for if cnt gt 1 then return 0 Allow only 1 t delchr t Drop it w where b eq 46 cnt Look for if cnt gt 1 then return 0 Allow only 1 if cnt eq 1 then f_flag 1 If one then floating t delchr t Drop it w where b eq 101 cnt Look for e if cnt gt 1 then return 0 Allow only 1 if cnt eq 1 then f_flag 1 If 1 then assume float t delchr t e Drop it w where b eq 69 cnt Look for E if cnt gt 1 then return 0 Allow only 1 if cnt eq 1 then f_flag 1 If 1 then assume float t delchr t E Drop it w where b eq 100 cnt Look for d if cnt gt 1 then return 0 Allow only 1 if cnt eq 1 then f_flag 1 If 1 then assume float t delchr t d Drop it w where b eq 68 cnt Look for D if cnt gt 1 then return 0 Allow only 1 if cnt eq 1 then f_flag 1 If 1 then assume float t delchr t D Drop it Allow only one e E d or D if total b eq 101 b eq 69 b eq 100 b eq 68 gt 1 then return 0 b byte t Allow no alphabetic characters if total b ge 65 and b le 122 ne 0 then return 0 c strmid t 0 1 if c lt 0 or c gt 9 then return 0 First char not a digit x txt 0 0 Convert to a float if f_flag eq 1 then return 2 sn Was floating if x eq long x then begin x long x return sn endif else begin return 2 sn endelse end");300 a[298] = new Array("./ToBeReviewed/STRING/isnumber.html", "isnumber.pro", "", " file_comments Determine if a text string is a valid number categories param TXT0 in required text string to test param X in required keyword HELP returns x optionaly returned numeric value if valid i test flag: 0: not a number 1: txt is a long integer 2: txt is a float 1: first word of txt is a long integer 2: first word of txt is a float history R Sterner 15 Oct 1986 Johns Hopkins Applied Physics Lab R Sterner 12 Mar 1990 upgraded Richard Garrett 14 June 1992 fixed bug in returned float value R Sterner 1999 Nov 30 Fixed a bug found by Kristian Kjaer Denmark Copyright C 1986 Johns Hopkins University Applied Physics Laboratory This software may be used copied or redistributed as long as it is not sold and this copyright notice is reproduced on each copy made This routine is provided as is without any express or implied warranties whatsoever Other limitations apply as described in the file disclaimer txt version Id: isnumber pro 142 2006 07 21 12:47:49Z navarro function isnumber txt0 x help hlp compile_opt idl2 strictarrsubs if n_params 0 lt 1 or keyword_set hlp then begin print Determine if a text string is a valid number print i isnumber txt x print txt text string to test in print x optionaly returned numeric value if valid out print i test flag: out print 0: not a number print 1: txt is a long integer print 2: txt is a float print 1: first word of txt is a long integer print 2: first word of txt is a float return 1 endif txt strtrim txt0 2 trim blanks x 0 define X if txt eq then return 0 null string not a number sn 1 if nwrds txt gt 1 then begin get first word if more than one sn 1 txt getwrd txt 0 endif f_flag 0 Floating flag b byte txt Convert to byte array if b 0 eq 45 then b b 1: Drop leading Kristian Kjaer if b 0 eq 43 then b b 1: Drop leading bug fix w where b eq 43 cnt Look for if cnt gt 1 then return 0 Alow only 1 t delchr txt Drop it w where b eq 45 cnt Look for if cnt gt 1 then return 0 Allow only 1 t delchr t Drop it w where b eq 46 cnt Look for if cnt gt 1 then return 0 Allow only 1 if cnt eq 1 then f_flag 1 If one then floating t delchr t Drop it w where b eq 101 cnt Look for e if cnt gt 1 then return 0 Allow only 1 if cnt eq 1 then f_flag 1 If 1 then assume float t delchr t e Drop it w where b eq 69 cnt Look for E if cnt gt 1 then return 0 Allow only 1 if cnt eq 1 then f_flag 1 If 1 then assume float t delchr t E Drop it w where b eq 100 cnt Look for d if cnt gt 1 then return 0 Allow only 1 if cnt eq 1 then f_flag 1 If 1 then assume float t delchr t d Drop it w where b eq 68 cnt Look for D if cnt gt 1 then return 0 Allow only 1 if cnt eq 1 then f_flag 1 If 1 then assume float t delchr t D Drop it Allow only one e E d or D if total b eq 101 b eq 69 b eq 100 b eq 68 gt 1 then return 0 b byte t Allow no alphabetic characters if total b ge 65 and b le 122 ne 0 then return 0 c strmid t 0 1 if c lt 0 or c gt 9 then return 0 First char not a digit x txt 0 0 Convert to a float if f_flag eq 1 then return 2 sn Was floating if x eq long x then begin x long x return sn endif else begin return 2 sn endelse end"); 301 301 a[299] = new Array("./ToBeReviewed/STRING/lenstr.html", "lenstr.pro", "", " ROUTINE: lenstr USEAGE: result lenstr str input: str a single string or string array output: result length of the string s in normalized units the number of elements of RESULT matches the number of elements of STRING procedure: This function returns the physical length of the string on the output device not the number of characters This is done by first switching to X and writing the string s with XYOUTS in graphics mode 5 which disables display to the screen but does not interfere with operation of XYOUTS The WIDTH keyword parameter of XYOUTS is used to retrieve the physical length of the string s author: Paul Ricchiazzi 7apr93 Institute for Computational Earth System Science University of California Santa Barbara todo seb function lenstr str compile_opt idl2 strictarrsubs dsave d name thisOS VERSION OS_FAMILY thisOS STRMID thisOS 0 3 thisOS STRUPCASE thisOS CASE thisOS of MAC : SET_PLOT thisOS WIN : SET_PLOT thisOS ELSE: SET_PLOT X ENDCASE p BACKGROUND d n_colors 1 255 p color 0 if d n_colors gt 256 then p background ffffff x device get_graphics oldg set_graphics 5 if keyword_set charsize eq 0 then charsize 1 nn n_elements str case nn of 0:w 0 1:xyouts 0 0 device str width w else:begin w fltarr nn for i 0 nn 1 do begin xyouts 0 0 device str i width ww w i ww endfor end endcase fac1 float d x_ch_size d x_vsize ratio of char width to device1 width device set_graphics oldg set_plot dsave IF dsave EQ X OR dsave EQ MAC OR dsave EQ WIN then BEGIN p BACKGROUND d n_colors 1 255 p color 0 if d n_colors gt 256 then p background ffffff x ENDIF fac2 float d x_ch_size d x_vsize ratio of char width to device2 width return w fac2 fac1 string width adjusted for device width end "); 302 a[300] = new Array("./ToBeReviewed/STRING/nwrds.html", "nwrds.pro", "", " file_comments Return the number of words in the given text string categories param TXTSTR text string to examine keyword DELIMITER d Set delimiter character def space keyword HELP returns n number of words found restrictions See also getwrd history R Sterner 7 Feb 1985 Johns Hopkins University Applied Physics Laboratory RES 4 Sep 1989 converted to SUN Copyright C 1985 Johns Hopkins University Applied Physics Laboratory This software may be used copied or redistributed as long as it is not sold and this copyright notice is reproduced on each copy made This routine is provided as is without any express or implied warranties whatsoever Other limitations apply as described in the file disclaimer txt version Id function nwrds txtstr help hlp delimiter delim compile_opt idl2 strictarrsubs if n_params 0 lt 1 or keyword_set hlp then begin print Return the number of words in the given text string print n nwrds txt print txt text string to examine in print n number of words found out print Keywords: print DELIMITER d Set delimiter character def space print Notes: See also getwrd return 1 endif if strlen txtstr eq 0 then return 0 A null string has 0 words ddel Default word delimiter is a space if n_elements delim ne 0 then ddel delim Use given word delimiter tst byte ddel 0 Delimiter as a byte value tb byte txtstr String to bytes if ddel eq then begin Check for tabs w where tb eq 9B cnt Yes if cnt gt 0 then tb w 32B Convert any to space endif x tb ne tst Locate words x 0 x 0 Pad ends with delimiters y x shift x 1 eq 1 Look for word beginnings n fix total y Count word beginnings return n end");303 a[301] = new Array("./ToBeReviewed/STRING/putfile.html", "putfile.pro", "", " file_comments Write a text file from a string array categories INPUTS: param FILE in required text file name param S in required string array keyword ERROR err error flag: 0 ok 1 invalid string array history R Sterner 20 Mar 1990 R Sterner 4 Nov 1992 allowed scalar strings Copyright C 1990 Johns Hopkins University Applied Physics Laboratory This software may be used copied or redistributed as long as it is not sold and this copyright notice is reproduced on each copy made This routine is provided as is without any express or implied warranties whatsoever Other limitations apply as described in the file disclaimer txt version Id pro putfile file s error err help hlp compile_opt idl2 strictarrsubs if n_params 0 lt 1 or keyword_set hlp then begin print Write a text file from a string array print putfile f s print f text file name in print s string array in print Keywords: print ERROR err error flag: 0 ok 1 invalid string array return endif if lmgr demo then begin print you are in Demo mode It is impossible to write a file return endif if size s type ne 7 then begin print Error in putfile: argument must be a string array err 1 return endif get_lun lun openw lun file for i 0 n_elements s 1 do begin t s i if t eq then t printf lun t endfor close lun free_lun lun err 0 return end");304 a[302] = new Array("./ToBeReviewed/STRING/str_size.html", "str_size.pro", "", " file_comments The purpose of this function is to return the proper character size to make a specified string a specifed width in a window The width is specified in normalized coordinates The function is extremely useful for sizing strings and labels in resizeable graphics windows categories Graphics Programs Widgets param STRING in required This is the string that you want to make a specifed target size or width param TARGETWIDTH in optional This is the target width of the string in normalized coordinates in the current graphics window The character size of the string returned as thisCharSize will be calculated to get the string width as close as possible to the target width The default is 0 25 keyword INITSIZE This is the initial size of the string Default is 1 0 keyword STEP This is the amount the string size will change in each step of the interative process of calculating the string size The default value is 0 05 returns thisCharSize This is the size the specified string should be set to if you want to produce output of the specified target width The value is in standard character size units where 1 0 is the standard character size examples To make the string Happy Holidays take up 30 of the width of the current graphics window type this: XYOUTS 0 5 0 5 ALIGN 0 5 Happy Holidays CHARSIZE STR_SIZE Happy Holidays 0 3 history Written by: David Fanning 17 DEC 96 Added a scaling factor to take into account the aspect ratio of the window in determing the character size 28 Oct 97 DWF version Id: str_size pro 1 34 2006 07 07 10:19:08Z navarro FUNCTION STR_SIZE string targetWidth INITSIZE initsize STEP step compile_opt idl2 strictarrsubs ON_ERROR 1 Check positional parameters np N_PARAMS CASE np OF 0: MESSAGE One string parameter is required 1: targetWidth 0 25 ELSE: ENDCASE Check keywords Assign default values IF N_ELEMENTS step EQ 0 THEN step 0 05 IF N_ELEMENTS initsize EQ 0 THEN initsize 1 0 Calculate a trial width size initsize XYOUTS 0 5 0 5 ALIGN 0 5 string WIDTH thisWidth CHARSIZE size NORMAL Size is perfect IF thisWidth EQ targetWidth THEN RETURN size Float D Y_Size D X_Size Initial size is too big IF thisWidth GT targetWidth THEN BEGIN REPEAT BEGIN XYOUTS 0 5 0 5 ALIGN 0 5 string WIDTH thisWidth CHARSIZE size NORMAL size size step ENDREP UNTIL thisWidth LE targetWidth RETURN size Float D Y_Size D X_Size ENDIF Initial size is too small IF thisWidth LT targetWidth THEN BEGIN REPEAT BEGIN XYOUTS 0 5 0 5 ALIGN 0 5 string WIDTH thisWidth CHARSIZE size NORMAL size size step ENDREP UNTIL thisWidth GT targetWidth size size step Need a value slightly smaller than target RETURN size Float D Y_Size D X_Size ENDIF END");305 a[303] = new Array("./ToBeReviewed/STRING/string2struct.html", "string2struct.pro", "", " This is a really really cool way to turn keywords into a structure function too_cool _extra extra compile_opt idl2 strictarrsubs return extra end file_comments Takes an input string set up as keywords and returns an anonymous structure This is particularly useful for taking keywords entered by a user in a text field and passing then to other routines categories Utility param STRVAL IN REQUIRED String set up as keywords Keywords require a little special treatment Such as plot findgen 100 _extra stringToStructure title testing RETURNS This function returns the string as an anonymous structure If an error was found then this function returns a structure with a null field examples The code below creates a widget that uses this routine pro tPlot event widget_control event top get_uvalue field widget_control field get_value strVal extra stringToStructure strVal plot findgen 100 _extra extra wshow return end pro testWid enter any keyword to plot and see how it works base widget_base col field cw_field base title test value ax 0 string void widget_button base value plot event_pro tPlot widget_control base realize set_uvalue field xmanager testWid base no_block return end history Written by: RLK Ronn Kling Consulting ronn rlkling com www rlkling com May 1999 version Id function string2struct strVal compile_opt idl2 strictarrsubs r execute extra too_cool strVal 0 if r 0 then user did not enter keywords correctly so return a structure with a null field if r eq 0 then begin print Error in input string return null:0 endif return extra end ");306 a[304] = new Array("./ToBeReviewed/STRING/strkeywd.html", "strkeywd.pro", "", " file_comments Translate a sturcture in a string able to be used to specify keywords in the calling of a function when we use EXECUTE see example categories param STRUCT a structure returns a string composed like following: For each element of the structure we write a part of the string as: name_of_the_element content_of_the_element restrictions If an element of the structure contain an array it will be convert in a vector restrictions Beware this function has loops ifs ad cases everywhere So it can not be used by big keywords with a lot of elements which are big arrays The input keyword must not contain Complex floatings structure Double precision complex Pointer Object reference Unsigned Integer Unsigned Longword Integer 64 bit Integer or Unsigned 64 bit Integer examples We create a structure IDL b get_extra ok 111 year 1997 1998 1999 age_capitaine 35 IDL help b struct Structure 3 tags length 10 refs 1: AGE_CAPITAINE INT 35 OK INT 111 YEAR INT Array 3 We put this structure as a string IDL a strkeywd b IDL print a AGE_CAPITAINE 35 OK 111 YEAR 1997 1998 1999 Now we can use the string a to pass keywords in a function thanks to execute IDL test execute c get_extra a IDL help c struct Structure 3 tags length 10 refs 1: AGE_CAPITAINE INT 35 OK INT 111 YEAR INT Array 3 history Sebastien Masson smasson lodyc jussieu fr 11 10 1999 version Id FUNCTION strkeywd struct compile_opt idl2 strictarrsubs if size struct type NE 8 then return tname tag_names struct if n_elements tname EQ 0 then return on s occupe du premier element res strlowcase tname 0 tostr struct 0 if n_elements tname EQ 1 then return res on s occupe des autres elements for n 1 n_elements tname 1 do res res strlowcase tname n tostr struct n return res end");307 a[305] = new Array("./ToBeReviewed/STRING/strrepl.html", "strrepl.pro", "", " file_comments replace one or more character s string s in a string categories string routines param STR in required the string to be changed param RCHAR in required replacement character string returns another string restrictions Known shortcoming: if index is an array it must contain all valid elements only the first entry is checked examples Convert one letter into upper case abc abcdefghijklmnopqrstuvwxyz print strrepl abc strpos abc m M prints abcdefghijklMnopqrstuvwxyz Use with strwhere function a abcabcabc print strrepl a strwhere a a prints bc bc bc bc bc IDL print strrepl a bc eeee a eeee a eeee a eeee IDL print strrepl a b 0000 a0000ca0000ca0000 IDL print strrepl a toto 0000 abcabcabc history mgs 02 Jun 1998: VERSION 1 00 sebastien Masson smlod ipsl jussieu fr version Id: strrepl pro 1 34 2006 07 07 10:19:08Z navarro Copyright C 1998 Martin Schultz Harvard University This software is provided as is without any warranty whatsoever It may be freely used copied or distributed for non commercial purposes This copyright notice must be kept with any copy of this software If this software shall be used commercially or sold as part of a larger package please contact the author to arrange payment Bugs and comments should be directed to mgs io harvard edu with subject IDL routine strrepl function strrepl str agument1 rchar compile_opt idl2 strictarrsubs if n_elements str eq 0 then return convert strign and replace character to byte BStr byte str new byte rchar if size agument1 type EQ 7 then begin old byte agument1 index strpos str agument1 pos index while strpos str agument1 pos 1 NE 1 do BEGIN pos strpos str agument1 pos 1 index index pos ENDWHILE make sure index is in range if index 0 lt 0 OR index 0 ge n_elements BStr THEN return Str ENDIF ELSE BEGIN index agument1 if index 0 lt 0 OR index 0 ge n_elements BStr then return Str old BStr index 0 ENDELSE replace indexed characters in string nelenew n_elements new neleold n_elements old nindex n_elements index if nelenew neleold NE 1 then begin if index 0 EQ 0 then BStr NEW BStr index 0 neleold: n_elements BStr 1 ELSE BStr BStr 0:index 0 1 NEW BStr index 0 neleold: n_elements BStr 1 if nindex EQ 1 then return string BStr if nindex GT 2 then for i 1 nindex 2 do BStr BStr 0:index i i nelenew neleold 1 NEW BStr index i i nelenew neleold neleold: n_elements BStr 1 BStr BStr 0:index n_elements index 1 nindex 1 nelenew neleold 1 NEW ENDIF ELSE BStr index NEW return result as string return string BStr end");308 a[306] = new Array("./ToBeReviewed/STRING/strright.html", "strright.pro", "", " file_comments return right subportion from a string categories string handling param S in required the string to be searched param LASTN in required the number of characters to be returned Default is 1 If NLAST is ge strlen STRING the complete string is returned returns The portion of LASTN characters of S counted from the back examples if strright path ne then path path history mgs 19 Nov 1997: VERSION 1 00 version Id: strright pro 1 34 2006 07 07 10:19:08Z navarro Copyright C 1997 Martin Schultz Harvard University This software is provided as is without any warranty whatsoever It may be freely used copied or distributed for non commercial purposes This copyright notice must be kept with any copy of this software If this software shall be used commercially or sold as part of a larger package please contact the author to arrange payment Bugs and comments should be directed to mgs io harvard edu with subject IDL routine strright function strright s lastn compile_opt idl2 strictarrsubs on_error 2 return to caller if n_elements s le 0 then return 1L l strlen s if n_elements lastn le 0 then lastn 1 if lastn gt l then lastn l result strmid s l lastn l return result end");309 a[307] = new Array("./ToBeReviewed/STRING/strsci.html", "strsci.pro", "", " file_comments Given a number returns a string of that B number in scientific notation format e g A x 10 categories String Utilities param DATA in required A floating point or integer number to be converted into a power of 10 keyword FORMAT The format specification used in the string conversion for the mantissa i e the A of A x 10 B Default is f12 2 keyword POT_ONLY Will return only the power of 10 part of the string i e the 10 B Default is to return the entire string e g A x 10 B keyword MANTISSA_ONLY return only mantissa of the string keyword SHORT return 10 0 as 1 and 10 1 as 10 keyword TRIM don t insert blanks i e return Ax10 B restrictions This function does not evaluate the format statement thoroughly which can result in somewhat quirky strings Example: print strsci 9 999 results in 10 0x10 0 instead of 1 0x10 1 Need a better symbol than the x for the multiplier examples Result STRSCI 2000000 format i1 print result 6 prints 2 x 10 u6 n which gets plotted as 2 x 10 Result STRSCI 0 0001 print result 4 prints 1 00 x 10 u 4 n which gets plotted as 1 00 x 10 Result STRSCI 0d0 format f13 8 print result prints 0 00000000 history bmy 28 May 1998: VERSION 1 00 B now returns string of the form A x 10 mgs 29 May 1998: bug fix: now allows negative numbers keyword MANTISSA_ONLY added default format changed to f12 2 bmy 02 Jun 1998: renamed to STRSCI STRing SCIentific notation mgs 03 Jun 1998: added TRIM keyword mgs 22 Sep 1998: added SHORT keyword modified handling of TRIM keyword mgs 24 Sep 1998: bug fix with SHORT flag bmy mgs 02 Jun 1999: now can handle DATA 0 0 correctly updated comments mgs 03 Jun 1999: can now also handle values lt 1 and doesn t choke on arrays version Id: strsci pro 1 34 2006 07 07 10:19:08Z navarro Copyright C 1998 1999 Bob Yantosca and Martin Schultz Harvard University This software is provided as is without any warranty whatsoever It may be freely used copied or distributed for non commercial purposes This copyright notice must be kept with any copy of this software If this software shall be used commercially or sold as part of a larger package please contact the author to arrange payment Bugs and comments should be directed to bmy io harvard edu or mgs io harvard edu with subject IDL routine strsci function StrSci Data Format Format POT_Only POT_Only MANTISSA_ONLY MANTISSA_ONLY SHORT SHORT TRIM TRIM compile_opt idl2 strictarrsubs Error checking Keyword settings on_error 2 if n_elements Data eq 0 then begin return endif if not Keyword_Set Format then Format f12 2 POT_Only keyword_set POT_Only MANTISSA_Only keyword_set MANTISSA_Only Short Keyword_Set Short Trim Keyword_Set Trim NDat n_elements Data Result strarr NDat for i 0 NDat 1 do begin If ABS DATA 0 then we can proceed to take the common log For DATA 0 place a sign in front of the number if Abs Data i ne 0 0 then begin take the common log and store in LOG10DATA Log10Data ALog10 Abs Data i Boolean flag if data 0 sign Data i lt 0 0 Compute the characteristic int part Add the 1d 6 to prevent roundoff errors Characteristic Fix Log10Data 1 0d 6 if Log10Data lt 0 then Characteristic Characteristic 1 Compute the Mantissa frac part and take its antilog Mantissa Log10Data Characteristic Mantissa 10 0 Mantissa print data i log10data mantissa characteristic format 3f24 14 i8 String for the coefficient part The coefficient is just antilog of the Mantissa Add the minus sign if DATA 0 0 A StrTrim String Mantissa Format Format 2 if Sign then A A String for the power of 10 part B 10 u strtrim string Characteristic 2 n if Short then begin if Characteristic eq 0 then B 1 if Characteristic eq 1 then B 10 endif composite string Result i A x B if Short AND B eq 1 then Result i A If DATA 0 then we cannot take the common log so return zeroes for the result strings Use the FORMAT string endif else begin A String 0d0 Format Format B A Result i A endelse Return result to calling program depending on keyword settings Eliminate blanks if TRIM keyword is set if POT_Only then Result i B if MANTISSA_Only then Result i A if Trim then Result i StrCompress Result i Remove_All endfor if n_elements Result eq 1 then Result Result 0 return Result end");310 a[308] = new Array("./ToBeReviewed/STRING/strtok.html", "strtok.pro", "", " file_comments Retrieve portion of string up to token categories text strings param STRING in required String to be split Contains text after in out token on output param TOKEN in required Token to use in splitting old keyword TRIM set to remove leading blanks from old before returning keyword HELP print useful message and exit returns new portion of string up to token out old portion of old after token out in restrictions Input parameter old is modified Token may be one or more characters If token is not found returns old and sets old to examples If old is foo44 bar then strtok old 44 would return foo and upon return old will be left with bar If TRIM were set old would be bar on return If old xyz then new strtok old a would return with new xyz and old history Log: strtok pro v Revision 1 3 1996 06 14 20:00:27 mcraig Updated Copyright info Revision 1 2 1996 05 09 00:22:17 mcraig Added built in help Revision 1 1 1996 01 31 18:47:37 mcraig Initial revision Thanks: To D Linder who wrote GETTOK part of the goddard library upon which this is based Release: Name: Rel_1_2 Copyright: Copyright C 1996 The Regents of the University of California All Rights Reserved Written by Matthew W Craig See the file COPYRIGHT for restrictions on distrubting this code This code comes with absolutely NO warranty see DISCLAIMER for details version Id: strtok pro 1 34 2006 07 07 10:19:08Z navarro FUNCTION Strtok string token TRIM trim HELP Help compile_opt idl2 strictarrsubs Back to the caller if error occurs On_error 2 IF n_params NE 2 OR keyword_set Help THEN BEGIN offset print offset Retrieve portion of string up to token print offset new strtok old token print offset Inputs: print offset offset old String to be split Contains text after in out print offset offset token on output print offset offset token Token to use in splitting old in print offset Keywords: print offset offset TRIM set to remove leading blanks from old print offset offset before returning print offset offset HELP print useful message and exit print offset Outputs: print offset offset new portion of string up to token out print offset offset old portion of old after token out in print offset Side effects: print offset offset Input parameter old is modified print offset Notes: print offset offset Token may be one or more characters print offset offset If token is not found returns old and sets old to print offset Examples: print offset offset If old is foo44 bar then strtok old 44 would return print offset offset foo and upon return old will be left with bar If TRIM print offset offset were set old would be bar on return print offset offset If old xyz then new strtok old a would return with print offset offset new xyz and old return 1 ENDIF pos strpos string token IF pos GE 0 THEN BEGIN front strmid string 0 pos string strmid string pos strlen token strlen string IF keyword_set trim THEN string strtrim string 1 return front ENDIF front string string return front END ");311 a[309] = new Array("./ToBeReviewed/STRING/strwhere.html", "strwhere.pro", "", " file_comments return position array for occurence of a character in a string categories string tools param STR in required the string param SCHAR in required the character to look for returns COUNT out optional The number of matches that were found The function returns an index array similar to the result of the where function examples ind strwhere abcabcabc a returns 0 3 6 history mgs 02 Jun 1998: VERSION 1 00 bmy 30 Jun 1998: now returns COUNT the number of matches that are found this is analogous to the WHERE command version Id: strwhere pro 1 34 2006 07 07 10:19:08Z navarro Copyright C 1998 Martin Schultz Harvard University This software is provided as is without any warranty whatsoever It may be freely used copied or distributed for non commercial purposes This copyright notice must be kept with any copy of this software If this software shall be used commercially or sold as part of a larger package please contact the author to arrange payment Bugs and comments should be directed to mgs io harvard edu with subject IDL routine strwhere function strwhere str schar Count compile_opt idl2 strictarrsubs if n_elements str eq 0 then return 1 convert to byte BStr byte Str BSC byte schar 0 Search for matches Ind where Bstr eq BSC Count bmy return where BStr eq BSC return Ind end ");312 a[310] = new Array("./ToBeReviewed/STRING/tostr.html", "tostr.pro", "", " file_comments Convert an input in a string categories param INPUT in required input can not contain or be of the type of: Complex floating structure Double precision complex Pointer Object reference Unsigned Integer Unsigned Longword Integer 64 bit Integer Unsigned 64 bit Integer returns a string restrictions If keywdvalue is an array it will be convert in a vector restrictions Beware this function has loops ifs ad cases everywhere So it can not be used by big keywords with a lot of elements which are big arrays examples IDL help tostr 1 tostr a tostr indgen 4 tostr a jkfjo STRING 1 STRING a STRING 0 1 2 3 STRING a jkfjo IDL print tostr c est bon c est bon c est bon c est bon history Sebastien Masson smasson lodyc jussieu fr 18 10 1999 version Id FUNCTION tostr input compile_opt idl2 strictarrsubs case 1 of size input type LE 5:BEGIN if size input type EQ 1 then input long input if n_elements input EQ 1 then res strtrim input 1 ELSE BEGIN res strtrim input 0 1 for i 1 n_elements input 1 do res res strtrim input i 1 res res ENDELSE END size input type eq 7:BEGIN if n_elements input EQ 1 then BEGIN sinput strrepl input res sinput ENDIF ELSE BEGIN res strrepl input 0 for i 1 n_elements input 1 do res res strrepl input i res res ENDELSE END ELSE:BEGIN ras report la fonction tostr ne marche pas pour input qui est de type size input tname res END ENDCASE return res end");302 a[300] = new Array("./ToBeReviewed/STRING/nwrds.html", "nwrds.pro", "", " file_comments Return the number of words in the given text string categories param TXTSTR text string to examine keyword DELIMITER d Set delimiter character def space keyword HELP returns n number of words found restrictions See also getwrd history R Sterner 7 Feb 1985 Johns Hopkins University Applied Physics Laboratory RES 4 Sep 1989 converted to SUN Copyright C 1985 Johns Hopkins University Applied Physics Laboratory This software may be used copied or redistributed as long as it is not sold and this copyright notice is reproduced on each copy made This routine is provided as is without any express or implied warranties whatsoever Other limitations apply as described in the file disclaimer txt version Id: nwrds pro 142 2006 07 21 12:47:49Z navarro function nwrds txtstr help hlp delimiter delim compile_opt idl2 strictarrsubs if n_params 0 lt 1 or keyword_set hlp then begin print Return the number of words in the given text string print n nwrds txt print txt text string to examine in print n number of words found out print Keywords: print DELIMITER d Set delimiter character def space print Notes: See also getwrd return 1 endif if strlen txtstr eq 0 then return 0 A null string has 0 words ddel Default word delimiter is a space if n_elements delim ne 0 then ddel delim Use given word delimiter tst byte ddel 0 Delimiter as a byte value tb byte txtstr String to bytes if ddel eq then begin Check for tabs w where tb eq 9B cnt Yes if cnt gt 0 then tb w 32B Convert any to space endif x tb ne tst Locate words x 0 x 0 Pad ends with delimiters y x shift x 1 eq 1 Look for word beginnings n fix total y Count word beginnings return n end"); 303 a[301] = new Array("./ToBeReviewed/STRING/putfile.html", "putfile.pro", "", " file_comments Write a text file from a string array categories INPUTS: param FILE in required text file name param S in required string array keyword ERROR err error flag: 0 ok 1 invalid string array history R Sterner 20 Mar 1990 R Sterner 4 Nov 1992 allowed scalar strings Copyright C 1990 Johns Hopkins University Applied Physics Laboratory This software may be used copied or redistributed as long as it is not sold and this copyright notice is reproduced on each copy made This routine is provided as is without any express or implied warranties whatsoever Other limitations apply as described in the file disclaimer txt version Id: putfile pro 142 2006 07 21 12:47:49Z navarro pro putfile file s error err help hlp compile_opt idl2 strictarrsubs if n_params 0 lt 1 or keyword_set hlp then begin print Write a text file from a string array print putfile f s print f text file name in print s string array in print Keywords: print ERROR err error flag: 0 ok 1 invalid string array return endif if lmgr demo then begin print you are in Demo mode It is impossible to write a file return endif if size s type ne 7 then begin print Error in putfile: argument must be a string array err 1 return endif get_lun lun openw lun file for i 0 n_elements s 1 do begin t s i if t eq then t printf lun t endfor close lun free_lun lun err 0 return end"); 304 a[302] = new Array("./ToBeReviewed/STRING/str_size.html", "str_size.pro", "", " file_comments The purpose of this function is to return the proper character size to make a specified string a specifed width in a window The width is specified in normalized coordinates The function is extremely useful for sizing strings and labels in resizeable graphics windows categories Graphics Programs Widgets param STRING in required This is the string that you want to make a specifed target size or width param TARGETWIDTH in optional This is the target width of the string in normalized coordinates in the current graphics window The character size of the string returned as thisCharSize will be calculated to get the string width as close as possible to the target width The default is 0 25 keyword INITSIZE This is the initial size of the string Default is 1 0 keyword STEP This is the amount the string size will change in each step of the interative process of calculating the string size The default value is 0 05 returns thisCharSize This is the size the specified string should be set to if you want to produce output of the specified target width The value is in standard character size units where 1 0 is the standard character size examples To make the string Happy Holidays take up 30 of the width of the current graphics window type this: XYOUTS 0 5 0 5 ALIGN 0 5 Happy Holidays CHARSIZE STR_SIZE Happy Holidays 0 3 history Written by: David Fanning 17 DEC 96 Added a scaling factor to take into account the aspect ratio of the window in determing the character size 28 Oct 97 DWF version Id: str_size pro 142 2006 07 21 12:47:49Z navarro FUNCTION STR_SIZE string targetWidth INITSIZE initsize STEP step compile_opt idl2 strictarrsubs ON_ERROR 1 Check positional parameters np N_PARAMS CASE np OF 0: MESSAGE One string parameter is required 1: targetWidth 0 25 ELSE: ENDCASE Check keywords Assign default values IF N_ELEMENTS step EQ 0 THEN step 0 05 IF N_ELEMENTS initsize EQ 0 THEN initsize 1 0 Calculate a trial width size initsize XYOUTS 0 5 0 5 ALIGN 0 5 string WIDTH thisWidth CHARSIZE size NORMAL Size is perfect IF thisWidth EQ targetWidth THEN RETURN size Float D Y_Size D X_Size Initial size is too big IF thisWidth GT targetWidth THEN BEGIN REPEAT BEGIN XYOUTS 0 5 0 5 ALIGN 0 5 string WIDTH thisWidth CHARSIZE size NORMAL size size step ENDREP UNTIL thisWidth LE targetWidth RETURN size Float D Y_Size D X_Size ENDIF Initial size is too small IF thisWidth LT targetWidth THEN BEGIN REPEAT BEGIN XYOUTS 0 5 0 5 ALIGN 0 5 string WIDTH thisWidth CHARSIZE size NORMAL size size step ENDREP UNTIL thisWidth GT targetWidth size size step Need a value slightly smaller than target RETURN size Float D Y_Size D X_Size ENDIF END"); 305 a[303] = new Array("./ToBeReviewed/STRING/string2struct.html", "string2struct.pro", "", " This is a really really cool way to turn keywords into a structure function too_cool _extra extra compile_opt idl2 strictarrsubs return extra end file_comments Takes an input string set up as keywords and returns an anonymous structure This is particularly useful for taking keywords entered by a user in a text field and passing then to other routines categories Utility param STRVAL IN REQUIRED String set up as keywords Keywords require a little special treatment Such as plot findgen 100 _extra stringToStructure title testing RETURNS This function returns the string as an anonymous structure If an error was found then this function returns a structure with a null field examples The code below creates a widget that uses this routine pro tPlot event widget_control event top get_uvalue field widget_control field get_value strVal extra stringToStructure strVal plot findgen 100 _extra extra wshow return end pro testWid enter any keyword to plot and see how it works base widget_base col field cw_field base title test value ax 0 string void widget_button base value plot event_pro tPlot widget_control base realize set_uvalue field xmanager testWid base no_block return end history Written by: RLK Ronn Kling Consulting ronn rlkling com www rlkling com May 1999 version Id: string2struct pro 142 2006 07 21 12:47:49Z navarro function string2struct strVal compile_opt idl2 strictarrsubs r execute extra too_cool strVal 0 if r 0 then user did not enter keywords correctly so return a structure with a null field if r eq 0 then begin print Error in input string return null:0 endif return extra end "); 306 a[304] = new Array("./ToBeReviewed/STRING/strkeywd.html", "strkeywd.pro", "", " file_comments Translate a sturcture in a string able to be used to specify keywords in the calling of a function when we use EXECUTE see example categories param STRUCT a structure returns a string composed like following: For each element of the structure we write a part of the string as: name_of_the_element content_of_the_element restrictions If an element of the structure contain an array it will be convert in a vector restrictions Beware this function has loops ifs ad cases everywhere So it can not be used by big keywords with a lot of elements which are big arrays The input keyword must not contain Complex floatings structure Double precision complex Pointer Object reference Unsigned Integer Unsigned Longword Integer 64 bit Integer or Unsigned 64 bit Integer examples We create a structure IDL b get_extra ok 111 year 1997 1998 1999 age_capitaine 35 IDL help b struct Structure 3 tags length 10 refs 1: AGE_CAPITAINE INT 35 OK INT 111 YEAR INT Array 3 We put this structure as a string IDL a strkeywd b IDL print a AGE_CAPITAINE 35 OK 111 YEAR 1997 1998 1999 Now we can use the string a to pass keywords in a function thanks to execute IDL test execute c get_extra a IDL help c struct Structure 3 tags length 10 refs 1: AGE_CAPITAINE INT 35 OK INT 111 YEAR INT Array 3 history Sebastien Masson smasson lodyc jussieu fr 11 10 1999 version Id: strkeywd pro 142 2006 07 21 12:47:49Z navarro FUNCTION strkeywd struct compile_opt idl2 strictarrsubs if size struct type NE 8 then return tname tag_names struct if n_elements tname EQ 0 then return on s occupe du premier element res strlowcase tname 0 tostr struct 0 if n_elements tname EQ 1 then return res on s occupe des autres elements for n 1 n_elements tname 1 do res res strlowcase tname n tostr struct n return res end"); 307 a[305] = new Array("./ToBeReviewed/STRING/strrepl.html", "strrepl.pro", "", " file_comments replace one or more character s string s in a string categories string routines param STR in required the string to be changed param RCHAR in required replacement character string returns another string restrictions Known shortcoming: if index is an array it must contain all valid elements only the first entry is checked examples Convert one letter into upper case abc abcdefghijklmnopqrstuvwxyz print strrepl abc strpos abc m M prints abcdefghijklMnopqrstuvwxyz Use with strwhere function a abcabcabc print strrepl a strwhere a a prints bc bc bc bc bc IDL print strrepl a bc eeee a eeee a eeee a eeee IDL print strrepl a b 0000 a0000ca0000ca0000 IDL print strrepl a toto 0000 abcabcabc history mgs 02 Jun 1998: VERSION 1 00 sebastien Masson smlod ipsl jussieu fr version Id: strrepl pro 142 2006 07 21 12:47:49Z navarro Copyright C 1998 Martin Schultz Harvard University This software is provided as is without any warranty whatsoever It may be freely used copied or distributed for non commercial purposes This copyright notice must be kept with any copy of this software If this software shall be used commercially or sold as part of a larger package please contact the author to arrange payment Bugs and comments should be directed to mgs io harvard edu with subject IDL routine strrepl function strrepl str agument1 rchar compile_opt idl2 strictarrsubs if n_elements str eq 0 then return convert strign and replace character to byte BStr byte str new byte rchar if size agument1 type EQ 7 then begin old byte agument1 index strpos str agument1 pos index while strpos str agument1 pos 1 NE 1 do BEGIN pos strpos str agument1 pos 1 index index pos ENDWHILE make sure index is in range if index 0 lt 0 OR index 0 ge n_elements BStr THEN return Str ENDIF ELSE BEGIN index agument1 if index 0 lt 0 OR index 0 ge n_elements BStr then return Str old BStr index 0 ENDELSE replace indexed characters in string nelenew n_elements new neleold n_elements old nindex n_elements index if nelenew neleold NE 1 then begin if index 0 EQ 0 then BStr NEW BStr index 0 neleold: n_elements BStr 1 ELSE BStr BStr 0:index 0 1 NEW BStr index 0 neleold: n_elements BStr 1 if nindex EQ 1 then return string BStr if nindex GT 2 then for i 1 nindex 2 do BStr BStr 0:index i i nelenew neleold 1 NEW BStr index i i nelenew neleold neleold: n_elements BStr 1 BStr BStr 0:index n_elements index 1 nindex 1 nelenew neleold 1 NEW ENDIF ELSE BStr index NEW return result as string return string BStr end"); 308 a[306] = new Array("./ToBeReviewed/STRING/strright.html", "strright.pro", "", " file_comments return right subportion from a string categories string handling param S in required the string to be searched param LASTN in required the number of characters to be returned Default is 1 If NLAST is ge strlen STRING the complete string is returned returns The portion of LASTN characters of S counted from the back examples if strright path ne then path path history mgs 19 Nov 1997: VERSION 1 00 version Id: strright pro 142 2006 07 21 12:47:49Z navarro Copyright C 1997 Martin Schultz Harvard University This software is provided as is without any warranty whatsoever It may be freely used copied or distributed for non commercial purposes This copyright notice must be kept with any copy of this software If this software shall be used commercially or sold as part of a larger package please contact the author to arrange payment Bugs and comments should be directed to mgs io harvard edu with subject IDL routine strright function strright s lastn compile_opt idl2 strictarrsubs on_error 2 return to caller if n_elements s le 0 then return 1L l strlen s if n_elements lastn le 0 then lastn 1 if lastn gt l then lastn l result strmid s l lastn l return result end"); 309 a[307] = new Array("./ToBeReviewed/STRING/strsci.html", "strsci.pro", "", " file_comments Given a number returns a string of that B number in scientific notation format e g A x 10 categories String Utilities param DATA in required A floating point or integer number to be converted into a power of 10 keyword FORMAT The format specification used in the string conversion for the mantissa i e the A of A x 10 B Default is f12 2 keyword POT_ONLY Will return only the power of 10 part of the string i e the 10 B Default is to return the entire string e g A x 10 B keyword MANTISSA_ONLY return only mantissa of the string keyword SHORT return 10 0 as 1 and 10 1 as 10 keyword TRIM don t insert blanks i e return Ax10 B restrictions This function does not evaluate the format statement thoroughly which can result in somewhat quirky strings Example: print strsci 9 999 results in 10 0x10 0 instead of 1 0x10 1 Need a better symbol than the x for the multiplier examples Result STRSCI 2000000 format i1 print result 6 prints 2 x 10 u6 n which gets plotted as 2 x 10 Result STRSCI 0 0001 print result 4 prints 1 00 x 10 u 4 n which gets plotted as 1 00 x 10 Result STRSCI 0d0 format f13 8 print result prints 0 00000000 history bmy 28 May 1998: VERSION 1 00 B now returns string of the form A x 10 mgs 29 May 1998: bug fix: now allows negative numbers keyword MANTISSA_ONLY added default format changed to f12 2 bmy 02 Jun 1998: renamed to STRSCI STRing SCIentific notation mgs 03 Jun 1998: added TRIM keyword mgs 22 Sep 1998: added SHORT keyword modified handling of TRIM keyword mgs 24 Sep 1998: bug fix with SHORT flag bmy mgs 02 Jun 1999: now can handle DATA 0 0 correctly updated comments mgs 03 Jun 1999: can now also handle values lt 1 and doesn t choke on arrays version Id: strsci pro 142 2006 07 21 12:47:49Z navarro Copyright C 1998 1999 Bob Yantosca and Martin Schultz Harvard University This software is provided as is without any warranty whatsoever It may be freely used copied or distributed for non commercial purposes This copyright notice must be kept with any copy of this software If this software shall be used commercially or sold as part of a larger package please contact the author to arrange payment Bugs and comments should be directed to bmy io harvard edu or mgs io harvard edu with subject IDL routine strsci function StrSci Data Format Format POT_Only POT_Only MANTISSA_ONLY MANTISSA_ONLY SHORT SHORT TRIM TRIM compile_opt idl2 strictarrsubs Error checking Keyword settings on_error 2 if n_elements Data eq 0 then begin return endif if not Keyword_Set Format then Format f12 2 POT_Only keyword_set POT_Only MANTISSA_Only keyword_set MANTISSA_Only Short Keyword_Set Short Trim Keyword_Set Trim NDat n_elements Data Result strarr NDat for i 0 NDat 1 do begin If ABS DATA 0 then we can proceed to take the common log For DATA 0 place a sign in front of the number if Abs Data i ne 0 0 then begin take the common log and store in LOG10DATA Log10Data ALog10 Abs Data i Boolean flag if data 0 sign Data i lt 0 0 Compute the characteristic int part Add the 1d 6 to prevent roundoff errors Characteristic Fix Log10Data 1 0d 6 if Log10Data lt 0 then Characteristic Characteristic 1 Compute the Mantissa frac part and take its antilog Mantissa Log10Data Characteristic Mantissa 10 0 Mantissa print data i log10data mantissa characteristic format 3f24 14 i8 String for the coefficient part The coefficient is just antilog of the Mantissa Add the minus sign if DATA 0 0 A StrTrim String Mantissa Format Format 2 if Sign then A A String for the power of 10 part B 10 u strtrim string Characteristic 2 n if Short then begin if Characteristic eq 0 then B 1 if Characteristic eq 1 then B 10 endif composite string Result i A x B if Short AND B eq 1 then Result i A If DATA 0 then we cannot take the common log so return zeroes for the result strings Use the FORMAT string endif else begin A String 0d0 Format Format B A Result i A endelse Return result to calling program depending on keyword settings Eliminate blanks if TRIM keyword is set if POT_Only then Result i B if MANTISSA_Only then Result i A if Trim then Result i StrCompress Result i Remove_All endfor if n_elements Result eq 1 then Result Result 0 return Result end"); 310 a[308] = new Array("./ToBeReviewed/STRING/strtok.html", "strtok.pro", "", " file_comments Retrieve portion of string up to token categories text strings param STRING in required String to be split Contains text after in out token on output param TOKEN in required Token to use in splitting old keyword TRIM set to remove leading blanks from old before returning keyword HELP print useful message and exit returns new portion of string up to token out old portion of old after token out in restrictions Input parameter old is modified Token may be one or more characters If token is not found returns old and sets old to examples If old is foo44 bar then strtok old 44 would return foo and upon return old will be left with bar If TRIM were set old would be bar on return If old xyz then new strtok old a would return with new xyz and old history Log: strtok pro v Revision 1 3 1996 06 14 20:00:27 mcraig Updated Copyright info Revision 1 2 1996 05 09 00:22:17 mcraig Added built in help Revision 1 1 1996 01 31 18:47:37 mcraig Initial revision Thanks: To D Linder who wrote GETTOK part of the goddard library upon which this is based Release: Name: Rel_1_2 Copyright: Copyright C 1996 The Regents of the University of California All Rights Reserved Written by Matthew W Craig See the file COPYRIGHT for restrictions on distrubting this code This code comes with absolutely NO warranty see DISCLAIMER for details version Id: strtok pro 142 2006 07 21 12:47:49Z navarro FUNCTION Strtok string token TRIM trim HELP Help compile_opt idl2 strictarrsubs Back to the caller if error occurs On_error 2 IF n_params NE 2 OR keyword_set Help THEN BEGIN offset print offset Retrieve portion of string up to token print offset new strtok old token print offset Inputs: print offset offset old String to be split Contains text after in out print offset offset token on output print offset offset token Token to use in splitting old in print offset Keywords: print offset offset TRIM set to remove leading blanks from old print offset offset before returning print offset offset HELP print useful message and exit print offset Outputs: print offset offset new portion of string up to token out print offset offset old portion of old after token out in print offset Side effects: print offset offset Input parameter old is modified print offset Notes: print offset offset Token may be one or more characters print offset offset If token is not found returns old and sets old to print offset Examples: print offset offset If old is foo44 bar then strtok old 44 would return print offset offset foo and upon return old will be left with bar If TRIM print offset offset were set old would be bar on return print offset offset If old xyz then new strtok old a would return with print offset offset new xyz and old return 1 ENDIF pos strpos string token IF pos GE 0 THEN BEGIN front strmid string 0 pos string strmid string pos strlen token strlen string IF keyword_set trim THEN string strtrim string 1 return front ENDIF front string string return front END "); 311 a[309] = new Array("./ToBeReviewed/STRING/strwhere.html", "strwhere.pro", "", " file_comments return position array for occurence of a character in a string categories string tools param STR in required the string param SCHAR in required the character to look for returns COUNT out optional The number of matches that were found The function returns an index array similar to the result of the where function examples ind strwhere abcabcabc a returns 0 3 6 history mgs 02 Jun 1998: VERSION 1 00 bmy 30 Jun 1998: now returns COUNT the number of matches that are found this is analogous to the WHERE command version Id: strwhere pro 142 2006 07 21 12:47:49Z navarro Copyright C 1998 Martin Schultz Harvard University This software is provided as is without any warranty whatsoever It may be freely used copied or distributed for non commercial purposes This copyright notice must be kept with any copy of this software If this software shall be used commercially or sold as part of a larger package please contact the author to arrange payment Bugs and comments should be directed to mgs io harvard edu with subject IDL routine strwhere function strwhere str schar Count compile_opt idl2 strictarrsubs if n_elements str eq 0 then return 1 convert to byte BStr byte Str BSC byte schar 0 Search for matches Ind where Bstr eq BSC Count bmy return where BStr eq BSC return Ind end "); 312 a[310] = new Array("./ToBeReviewed/STRING/tostr.html", "tostr.pro", "", " file_comments Convert an input in a string categories param INPUT in required input can not contain or be of the type of: Complex floating structure Double precision complex Pointer Object reference Unsigned Integer Unsigned Longword Integer 64 bit Integer Unsigned 64 bit Integer returns a string restrictions If keywdvalue is an array it will be convert in a vector restrictions Beware this function has loops ifs ad cases everywhere So it can not be used by big keywords with a lot of elements which are big arrays examples IDL help tostr 1 tostr a tostr indgen 4 tostr a jkfjo STRING 1 STRING a STRING 0 1 2 3 STRING a jkfjo IDL print tostr c est bon c est bon c est bon c est bon history Sebastien Masson smasson lodyc jussieu fr 18 10 1999 version Id: tostr pro 142 2006 07 21 12:47:49Z navarro FUNCTION tostr input compile_opt idl2 strictarrsubs case 1 of size input type LE 5:BEGIN if size input type EQ 1 then input long input if n_elements input EQ 1 then res strtrim input 1 ELSE BEGIN res strtrim input 0 1 for i 1 n_elements input 1 do res res strtrim input i 1 res res ENDELSE END size input type eq 7:BEGIN if n_elements input EQ 1 then BEGIN sinput strrepl input res sinput ENDIF ELSE BEGIN res strrepl input 0 for i 1 n_elements input 1 do res res strrepl input i res res ENDELSE END ELSE:BEGIN ras report la fonction tostr ne marche pas pour input qui est de type size input tname res END ENDCASE return res end"); 313 313 a[311] = new Array("./ToBeReviewed/STRUCTURE/chkstru.html", "chkstru.pro", "", " Id: chkstru pro 134 2006 07 07 10:19:08Z navarro NAME: CHKSTRU function PURPOSE: check validity of a structure and test if necessary fields are contained CATEGORY: tools CALLING SEQUENCE: res CHKSTRU STRUCTURE FIELDS VERBOSE INPUTS: STRUCTURE the structure to be tested If STRUCTURE is not of type structure the function will return 0 FIELDS a string or string array with field names to be contained in STRUCTURE CHKSTRU returns 1 true only if all field names are contained in STRUCTURE The entries of FIELDS may be upper or lowercase KEYWORD PARAMETERS: INDEX a named variable that will contain the indices of the required field names in the structure They can then be assessed through structure index i Index will contain 1 for all fields entries that are not in the structure VERBOSE set this keyword to return an error message in case of an error EXTRACT set this keyword to extract a fields from the structure 1 is return is fields or structure are incorrect OUTPUTS: CHKSTRU returns 1 if successful otherwise 0 SUBROUTINES: REQUIREMENTS: NOTES: EXAMPLE: test a:1 b:2 c:3 required a c if CHKSTRU test required then print found a and c IDL print CHKSTRU test b 1 IDL print CHKSTRU test b extract 2 MODIFICATION HISTORY: mgs 02 Mar 1998: VERSION 1 00 mgs 07 Apr 1998: second parameter FIELDS now optional 12 Jan 2001: EXTRACT keyword by S Masson smasson lodyc jussieu fr Copyright C 1998 Martin Schultz Harvard University This software is provided as is without any warranty whatsoever It may be freely used copied or distributed for non commercial purposes This copyright notice must be kept with any copy of this software If this software shall be used commercially or sold as part of a larger package please contact the author to arrange payment Bugs and comments should be directed to mgs io harvard edu with subject IDL routine chkstru function chkstru structure fields index index verbose verbose extract extract compile_opt idl2 strictarrsubs default index index 1 first check number of parameters must be at least 1 if n_params lt 1 then begin if keyword_set verbose then ras report CHKSTRU: invalid number of parameters if keyword_set extract THEN return 1 ELSE return 0 endif check if the user really passed a structure s size structure if s 1 s 0 ne 8 then begin if keyword_set verbose then ras report CHKSTRU: No structure passed if keyword_set extract THEN return 1 ELSE return 0 endif only one parameter: then we are finished if n_params eq 1 then return 1 see if required field names are contained in the structure and return indices of these fields names tag_names structure index intarr n_elements fields 1 default index to not found for i 0 n_elements fields 1 do begin ind where names eq strupcase fields i if ind 0 lt 0 then begin if keyword_set verbose then ras report CHKSTRU: Cannot find field fields i endif else index i ind 0 endfor check minimum value of index field: 1 indicates error if keyword_set extract then BEGIN if index 0 NE 1 THEN return structure index 0 ELSE return 1 ENDIF ELSE return min index ge 0 end "); 314 314 a[312] = new Array("./ToBeReviewed/STRUCTURE/extractstru.html", "extractstru.pro", "", " NAME:extractstru PURPOSE:extrait des elements d une structure pour constituer une nouvelle structure CATEGORY: dibouille sur les structures CALLING SEQUENCE: res extractstru stru liste INPUTS: stru: une structure liste: un vecteur de string comportant les noms des elements de stru a virer par DEFAUT ou a garder si GARDE est active KEYWORD PARAMETERS: GARDE: specifie que la liste donnee concerne les elements de stru a garder VIRE: specifie que la liste donnee concerne les elements de stru a virer Ce mot cle est active par defaut OUTPUTS:une stucture ou 1 en cas de pb COMMON BLOCKS: SIDE EFFECTS: RESTRICTIONS: none liste peut contenir des noms d elements qui ne sont pas ds stru le programme se debrouille avec EXAMPLE: IDL extra get_extra ok year 1999 age_capitaine 35 IDL help extra struct Structure 3 tags length 6 refs 1: AGE_CAPITAINE INT 35 OK INT 1 YEAR INT 1999 IDL help extractstru extra ok hhuihi YEAR stru Structure 1 tags length 2 refs 1: AGE_CAPITAINE INT 35 IDL help extractstru extra ok hhuihi YEAR garde stru Structure 2 tags length 4 refs 1: OK INT 1 YEAR INT 1999 MODIFICATION HISTORY:Sebastien Masson smasson lodyc jussieu fr 8 10 1999 FUNCTION extractstru stru liste GARDE garde VIRE vire compile_opt idl2 strictarrsubs if size stru type NE 8 then return 1 if size liste type NE 7 then return 1 cheking for garde and vire keywords garde keyword_set garde 1 keyword_set vire vire keyword_set vire 1 keyword_set garde keyword_set vire EQ garde tname tag_names stru index make_selection tname strupcase liste only_valid quiet if garde then BEGIN on garde que la liste if index 0 EQ 1 then return 1 if n_elements index EQ n_elements tname then return stru res create_struct tname index 0 stru index 0 if n_elements index GT 1 then for i 1 n_elements index 1 do res create_struct res tname index i stru index i ENDIF ELSE BEGIN on vire la liste if n_elements index EQ n_elements tname then return 1 if index 0 EQ 1 then return stru on prend le complementaire de index pour obtenir les indices que l on garde index different indgen n_elements tname index res create_struct tname index 0 stru index 0 if n_elements index GT 1 then for i 1 n_elements index 1 do res create_struct res tname index i stru index i ENDELSE return res end");
Note: See TracChangeset
for help on using the changeset viewer.